首页 / 资讯中心 / 文章详情

双PLC协同控制四轴搬运取料机:S7-200 SMART运动控制与以太网通信实战

双PLC协同控制四轴搬运取料机:S7-200 SMART运动控制与以太网通信实战 ★ FEATURED ARTICLE
做设备的同行应该都遇到过这类需求一台搬运取料机要完成水平横移、升降、伸缩、抓手旋转四个动作客户点名要用西门子S7-200 SMART来做控制还明确要求两台smart通过通讯协同。第一次听这个方案我也愣了一下——单台200smart的晶体管CPU最多只有Q0.0、Q0.1、Q0.2三路高速脉冲输出四轴怎么塞进一台CPU后来项目落地我把横移、升降、伸缩三个轴放在主机上把旋转轴和夹爪放在从机上两台PLC走S7以太网通信组成一个整体整套程序跑下来非常稳定。这篇文章把这个四轴搬运取料机的案例拆开讲从硬件分工、运动向导组态、双机通信数据规划到调试现场踩过的几个大坑一次说透。看懂这套逻辑你自己也能搭出双PLC四轴取料机的程序框架。1. 工艺链拆解取料机四个轴到底在干什么1.1 从取料工位到放料工位的完整动作链搬运取料机看起来结构不复杂但工艺动作是有严格先后顺序的。以最常见的双工位方案为例A工位是来料位B工位是放料位设备需要不停地在两个工位之间搬运工件。设备本体上装了一个可以左右横移的横梁横梁上挂着一个可以上下升降的滑块滑块前端装了一套可以前后伸缩的取料臂取料臂末端是抓手抓手本身还能旋转换向。整个动作链是这样的设备先回到机械原点X轴横移到A工位上方Y轴下降到取料高度Z轴伸出到工件上方夹爪夹紧或吸盘吸附Z轴缩回Y轴升起X轴横移到B工位Y轴再次下降Z轴伸出R轴旋转到放料角度夹爪松开Z轴缩回Y轴升到安全高度再回到原点等待下一个周期。这个动作链看着长但本质上是顺序点位运动每个轴只负责起点到终点的定位不需要两轴或三轴同时走圆弧曲线也就是不涉及插补。这一点非常关键它决定了用两台PLC分开管轴是完全可行的——各轴的运动在时间上是先后关系即使通信让两台CPU之间的衔接有一点延迟也不会破坏运动轨迹。1.2 为什么一台S7-200 SMART做不到四轴控制很多初次接触200smart运动控制的人第一反应是“四个轴嘛一个CPU管四个伺服不就完了”。但实际选型时会发现一个硬约束S7-200 SMART的标准晶体管输出CPU只有三路高速脉冲输出分别是Q0.0、Q0.1、Q0.2。也就是说单台CPU最多支持三个运动轴每路脉冲最高100kHz。继电器输出型CPU更麻烦输出点根本不能发高速脉冲接步进驱动器或伺服驱动器时很多速度跟不上即使靠普通点动凑合能转也没法做精度要求高的定位。所以四轴需求摆在面前时方案只有几个换更大系列的PLC或者加专用的运动控制模块或者在S7-200 SMART系列内部做双机协同。客户既然指定了smart双机方案就是最稳妥的选择——两台晶体管输出型CPU一台负责三轴一台负责一轴加工艺逻辑通过以太网通信把两个CPU黏合成一台设备。这里要补充一个容易忽略的概念S7-200 SMART里说的“轴”不是物理上的伺服驱动器通道而是CPU内部的高速脉冲输出通道配上运动向导生成的控制逻辑。每个轴都需要独占一路脉冲输出同时还要占用对应的方向输出点和回零、限位输入点。所以从机哪怕只控制一个旋转轴也要占用从机的一路高速脉冲输出和一组IO点硬件分配时必须把这个考虑进去。2. 双机分工、输入输出分配与通信拓扑设计2.1 主机和从机各自管什么我在这类项目里的分法比较固定工艺调度职责尽量放在主机执行机构按“轴资源”切分。具体到这套设备项目主机PLC从机PLCCPU型号ST40晶体管输出ST20晶体管输出负责轴X轴横移、Y轴升降、Z轴伸缩R轴旋转动作职责全流程状态调度、X/Y/Z定位、位置给定夹具开闭、真空吸附检测、旋转定位、状态反馈对外交互触摸屏数据交互、报警汇总不直接接人机界面通过通信上报本地IO三个轴的工作限位、原点开关、急停、启动停止R轴原点开关、夹爪到位检测、料位检测为什么主机选ST40、从机选ST20因为主机要管三个轴每个轴至少占用一个原点输入、两个限位输入再加上一些常规按钮和传感器ST40的IO数量刚刚够用。从机只负责一个旋转轴、夹爪和几个检测点ST20就足够了没必要上更大点数的CPU。2.2 轴参数与驱动器选型的匹配思路轴能不能正常跑不只是程序的事。脉冲当量、步进细分、机械减速比三者必须一起算清楚。拿X轴举例如果步进电机步距角1.8°驱动器细分设为16电机转一圈需要3200个脉冲如果同步带减速比为3:1电机转3圈横梁才走一圈同步带轮周长假设同步带轮周长240mm那么X轴移动240mm需要9600个脉冲每个脉冲对应的实际位移就是240÷96000.025mm脉冲当量约0.025mm/脉冲。这个值要填进运动向导的“工程单位”配置里后续程序里写位置时直接用mm让向导替你换算成脉冲数。Y轴是升降轴我建议带抱闸的步进电机防止伺服或步进在断电时滑块坠落。如果升降行程比较高还要考虑配重或防坠机构程序里也要加“Y轴到位后再允许X轴动作”的互锁逻辑。Z轴行程短普通57步进就行R轴如果带减速机脉冲当量会非常小控制精度很高但要注意速度上限不能超过驱动器接受频率否则电机会丢步。对于步进驱动器的接线脉冲信号和方向信号一定要区分清楚。S7-200 SMART的高速脉冲输出是PNP晶体管输出接到驱动器时通常用共阳极接法脉冲输出点接驱动器脉冲输入正端方向输出点接驱动器方向输入正端公共端接24V电源负极。如果接反或驱动器侧拨码开关设置不对最常见的现象就是轴不转或者方向反了而且这种问题在程序里看不出来只能顺着接线查。2.3 通信拓扑为什么不选Modbus而走S7以太网两台smart PLC之间可以选Modbus RTU、Modbus TCP或S7协议。我实际选的是S7 TCP方式也就是PUT/GET通信。原因很直接200smart自带以太网口不需要额外接通信模块两台CPU之间用一根网线或者经交换机直连就能建立连接S7通信可以直接读写对方V存储区不需要像Modbus一样维护保持寄存器映射表程序写起来更直观。如果现场还有触摸屏标准拓扑是触摸屏、主机、从机三台设备都挂在同一台工业交换机下触摸屏只跟主机通信所有从机数据由主机汇总之后再给触摸屏。这么做的好处是组态软件的变量表只面对一台PLC维护方便得多。从机IP固定主机在PUT/GET向导里直接填从机IP即可。3. 运动控制核心运动向导组态与指令调用细节3.1 运动向导里的关键配置项S7-200 SMART做运动控制我强烈建议用Micro/WIN SMART里的运动控制向导而不是自己写脉冲程序。向导帮你把方向控制、回零流程、加减速包络、限位处理全部生成为后台子程序和中断逻辑你只需要在每个扫描周期调用对应的轴控制块。打开向导后依次组态AXIS0、AXIS1、AXIS2对应Q0.0、Q0.1、Q0.2。有几个配置项必须认真对待测量单位选择“工程单位”填入脉冲当量之后轴位置、速度单位全部用mm或mm/s程序可读性很强调试时一眼能看出位置对不对。方向控制我习惯用“脉冲方向”模式也就是脉冲输出点负责发脉冲另一个输出点负责方向电平。这种模式兼容绝大多数步进和伺服驱动器排查问题也简单看方向输出点的状态就能判断方向选择是否正确。限定速度与加减速最大速度和启动停止速度要按机械实际承受能力设置。加减速时间一般先给300ms左右太快会丢步太慢影响节拍。回原点方式建议优先选“信号开关Z相”方式也就是碰到原点开关减速再等编码器Z相脉冲精确定位。这样每次回原点位置重复性很好不会出现越冲越远的问题。向导配置完成后会占用一段V存储区这个地址要记录好。后续在同一个CPU里做触摸屏变量表或通信数据区时要注意避开这段区域否则程序运行中可能发生数据覆盖轴突然乱走。3.2 手动运行和自动运行必须分开做程序结构上我坚持把手动模式和自动模式做成两条独立路径。手动模式用于调试和故障处理点动按钮接通时轴以固定速度连续运动松手即停。自动模式用于正常生产状态机按顺序触发各轴定位指令每一步都要等“到位完成”信号后才进入下一步。在S7-200 SMART的运动指令里手动模式用的是AXISx_MANUAL自动定位用的是AXISx_GOTO。手动和自动切换时必须断开当前模式再切换否则两个指令同时对同一个轴下命令输出脉冲会打架。我的做法是在手动/自动切换按钮的上升沿先调用一次AXISx_STOP停止当前轴运动再切换使能标志。3.3 自动流程状态机用状态字代替散乱的M点很多初学者喜欢每个动作用一个M继电器写最后十几个M点缠成一团改一步就要找半天。我这边统一用一个状态字存放流程编号每个编号对应一个工艺动作。状态机伪代码逻辑如下状态1X轴绝对定位到A工位取料坐标等待X轴到位信号状态字加一。 状态2Y轴下降到取料高度到位后状态字加一。 状态3Z轴伸出到抓取位置到位后状态字加一。 状态4向从机发送“夹爪夹紧”命令等待从机返回完成位完成后方可继续。这里唯一要注意的是等待从机返回时一定要设超时。我在主站用定时器计时如果发送命令后3秒内没有收到完成标志直接进入报警状态并停机。这样即使从机故障或通信断掉整台设备也不会悬在半空等死。3.4 GOTO指令调用的三个细节AXISx_GOTO指令在调用时有几个参数要留意。Pos是目标位置Speed是目标速度Mode是运动模式0代表绝对位置运动1代表相对位置运动2代表连续运动。绝对定位的前提是已经完成回原点否则坐标基准是错的设备会跑飞。所以每次上电后我强制设备先执行回原点流程原点没到位之前自动按钮无效。另外START输入端要用边沿触发而不建议一直保持接通。如果一直给START轴到位后指令会再次触发造成重复定位或误动作。还有一点别在整个状态机里反复给同一轴的GOTO指令喂位置数据位置只在状态激活时更新一次避免程序扫描周期不同步导致位置被覆盖。4. 双机通信机制PUT/GET的数据规划与握手协议4.1 两台PLC通信前必须确认的三件事第一件事从机的CPU属性里要勾选“允许其他主站通过GET/PUT访问”否则主机指令发过去会超时报错。第二件事IP地址要规划好不能冲突。第三件事通信触发方式不能用脉冲式的一直执行PUT/GET指令持续恒ON会占满通信缓冲我一般用一个50ms的定时脉冲触发一次通信任务既保证数据及时更新又不会让通信队列拥堵。在Micro/WIN SMART里配置S7通信主站侧建立一个连接填从机IP然后分配通信数据区。主站想读从机的哪些V区想在本地写从机哪些V区都要在这个向导里定义。向导生成的通信块带使能端按我上面说的定时调用即可。4.2 一张手工约定的数据表双机通信最难的不是指令用法而是通信数据区规划。我在项目实施前会把这张表打印出来当作两台PLC之间的“通信协议”方向地址长度含义主站→从站从机VB2001字节命令号0空闲1夹紧2松开3旋转到位10回零主站→从站从机VW201字目标旋转角度0.1°主站→从站从机VB2031字节夹爪控制字节从站→主站主站VB1001字节状态字节0空闲1忙碌2完成3错误从站→主站主站VW101字当前旋转角度从站→主站主站VB1031字节报警码从站→主站主站VW104字心跳计数V区规划时有一条铁律通信区必须和运动向导生成的V区、触摸屏变量区互相避开。我的习惯是从V3000以后开始划通信区前面留给运动向导和程序内部变量宁可多浪费一些地址也不要冒险重叠。4.3 四步握手协议防止命令重复执行两台PLC各自独立扫描如果不做握手主站发“夹紧”命令从站可能在同一个扫描周期里连续执行好几次夹紧动作后果轻则重复报警重则机械机构卡死。我设计的握手逻辑分四步第一步主站把命令号写入从站V区。第二步从站检测到命令号变化后先回写一个“忙碌”状态再开始执行动作。第三步从站执行完成后回写“完成”状态同时把命令号清零。第四步主站收到“完成”状态后确认命令结束从站看到命令号清零后把“完成”状态改为“空闲”等待下一个命令。这套流程的关键在于“命令号清零”是一个边沿信号从站每次只在命令号从0变为非0时触发动作执行完把命令号清掉就不会有重复执行的问题。如果主站发完命令后发现从站超过3秒没有进入“忙碌”或者超过5秒没有返回“完成”主站直接报警提示通信或从站故障。心跳检测也要加上。从站程序里用一个定时器每500ms把自己的心跳字加一主站定时读取这个心跳字如果连续3次读数没变化就认为通信中断并在触摸屏上报警。这个机制在项目调试时救过我很多次——很多通信问题不是线松了而是从站CPU死机或程序跑飞有心跳才能第一时间发现。5. 调试实录四轴设备跑起来三个坑躲不掉5.1 轴不转查了半天才发现CPU型号不对第一台样机装配完成后上电测试时发现R轴怎么给程序都不转。现场查了接线、查了驱动器使能、查了方向信号最后翻到CPU铭牌一看供应商采购的是SR40继电器输出型CPU。继电器输出虽然有高速脉冲的“硬件条件”不够输出点根本达不到高速翻转的要求脉冲发出来驱动器的频率上不去电机要么不动要么一跳一跳。这个坑提醒我两点第一S7-200 SMART选型时凡是涉及运动控制必须选ST系列也就是晶体管输出型而且要核对订货号第二轴不转的排查顺序应该是“CPU输出类型→接线→驱动器参数→程序使能”而不是一上来就改程序参数。程序里轴使能没有置位也是常见原因运动向导生成的AXISx_CTRL指令必须每个扫描周期都调用并且EN端保持接通否则轴根本不会被激活。5.2 回原点每次差半圈问题出在“冲过开关”Y轴回原点时经常出现位置偏差而且偏差值是固定半圈脉冲数。现场查波形后发现升降轴从高速状态直接撞到原点开关由于惯性冲过头到位信号已经变了轴还在继续滑行导致每回一次原点都差那么一点。解决思路分两层第一层是用带Z相脉冲的伺服或步进系统回零流程改成“碰到原点开关后减速再等Z相上升沿锁停”精度可以长期保持在几个脉冲以内第二层是把原点开关安装位置留出足够减速距离程序里回零速度不要给满速建议用慢速回零或两级速度。还有一个细节容易被忽略原点开关的信号抖动。接近开关或者机械开关在动作瞬间会有信号毛刺如果PLC输入滤波时间太短抖动会被当成有效边沿。我后来把原点信号对应的输入点滤波时间调大了一些抖动导致的偶发误判就消失了。5.3 PUT/GET偶发不更新通信时序卡顿设备连续运行一段时间后偶尔出现从站状态不刷新、主站误报通信故障的现场。重启后又能好一阵子。最终定位到两个原因一是主站程序里PUT/GET指令的调用方式不对之前在某处用恒ON的方式一直执行通信功能导致通信队列里积压了大量排队任务;二是从站程序里业务逻辑太长CPU处理一圈耗费的时间远大于通信扫描周期GET数据来了但业务程序还没跑完。对策是通信调用改成50ms定时脉冲触发一次只执行一轮从站主程序里把耗时的夹爪动作、旋转定位拆成独立子程序需要时再调不要让每个扫描周期都从头到尾跑一遍全部功能。改完之后通信状态明显平稳一个星期连续运行都没有再出现偶发中断。5.4 现场调试用的表格工具最后分享一个我自己的调试习惯每个轴都建一张“问题排查小表”手动、自动、回零、限位、报警五类状态分别记录出问题时直接对表定位。表里包含轴的脉冲当量、方向输出点、原点输入点、正负限位输入点、当前程序里的轴使能标志和报警字。这张表在双PLC方案里尤其有用因为两台CPU的程序分着写但调试要当成一台设备来查轴和IO点很容易记混。6. 程序复用与设备提速从单台案例到可复制模板6.1 把位置参数做成“数据”而不是焊死在程序里初期版本里各工位的X轴坐标是直接用立即数写在GOTO指令里的。后来换了一个工位规格每个坐标都要去程序里改还要重新下载非常麻烦。我改成把所有目标位置放到固定的V区触摸屏上用配方功能或者直接设置变量程序里只读取这些V区值作为GOTO的Pos输入。换规格时现场改触摸屏参数不用动程序。轴号也要做统一约定。X轴永远是AXIS0、Y轴永远是AXIS1、Z轴永远是AXIS2从机R轴就是从机的AXIS0。这套约定沿用在新项目里程序块可以直接复制只需要重新组态向导和IO地址省掉大量重复劳动。6.2 节拍优化的两个突破口这套设备调试到稳定后客户提提速要求。节拍瓶颈一般出现在两个地方一个是我把所有轴动作都写成严格顺序X轴动作时Z轴闲着另一个是夹爪动作要和机械手配合指令发了但没做并行处理。第一个突破点是并行动作S7-200 SMART虽然没有插补功能但点位运动完全可以并行——只要机械结构不干涉X轴在横移的同时Z轴可以开始缩回或伸出。我修改状态机让X轴到达前Z轴提前启动回退动作单周期能省出几秒钟。这里必须加安全限制路径重叠区域不能并行防止发生碰撞。第二个突破点是通信预写主站在Y轴还没下降到位之前就把“旋转到放料角度”命令发给从机从机提前执行R轴定位等Y轴真正到位时旋转动作已经完成。这其实是把握手协议里的“等待完成”改成“命令先行、到位校核”但前提是旋转动作不会和Y轴下降发生干涉机械设计上要保证安全。6.3 双PLC方案的一点心得这套四轴搬运取料机案例真正落地的体会是双PLC协同并不是把程序写两遍那么简单而是要把“通信协议”当作整个设备的中枢神经系统来设计。哪台CPU负责哪些动作、数据怎么握手、故障怎么传递这些在设计初期就要白纸黑字定清楚。调试时也是按协议来逐项验证先通信后动作先手动后自动先单轴后联动每过一关再放行下一步。如果让我重新做一次我会把状态机和通信数据表做得比现在更早电气图纸一出来就开始联调程序而不是等柜子装完再写逻辑。事实证明双PLC设备的大部分问题都出在时序协调上而不是单台CPU的程序复杂程度上。
阅读完成 · 觉得有帮助?
咨询建站