1. 玩具分拣项目需求拆解
这个玩具分拣生产线的需求看似简单,但包含了多个需要协同工作的子系统。我们先拆解核心功能模块:
传送带控制是整个系统的基础,需要响应启动/停止按钮信号(X4/X5),控制电机运行(Y0)。这里有个细节:启动时不仅要控制传送带,还要初始化数据寄存器(D0-D3),这个复位操作很容易被初学者遗漏。
流水灯控制模块要求三盏灯(Y4-Y6)以0.1秒间隔循环点亮,形成"绿-黄-红"的流动效果。我在实际调试中发现,定时器的精度设置很关键,太快会导致视觉上无法分辨,太慢又会影响生产节拍。
尺寸检测是项目的核心逻辑,三个传感器(X0-X2)的组合状态对应不同尺寸:
- 仅X0触发 → 小尺寸(D3+1)
- X0+X1触发 → 中尺寸(D2+1)
- X0+X1+X2触发 → 大尺寸(D1+1)
计数模块有两个层级:总计数器(D0)和分尺寸计数器(D1-D3)。特别注意X3(传感器④)是计数触发点,这里需要做信号边沿检测,避免一个玩具被重复计数。
2. SFC与梯形图混合架构设计
2.1 为什么选择混合编程
纯梯形图实现这个项目会非常混乱,因为要处理多个并行的时间序列(流水灯、尺寸检测、计数等)。而纯SFC在数据处理方面又不够灵活。GXWorks2的混合编程模式完美解决了这个问题:
- SFC负责主流程控制(启动→运行→停止)
- 梯形图处理具体逻辑(传感器判断、计数器运算)
- 两种语言可以互相调用和跳转
2.2 程序框架搭建
在GXWorks2中新建工程时,记得选择"SFC/Ladder混合编程"模式。我建议这样划分程序结构:
MAIN(SFC) ├─ 初始步(复位所有输出) ├─ 运行步 │ ├─ 梯形图块1:传送带控制 │ ├─ 梯形图块2:流水灯逻辑 │ ├─ 梯形图块3:尺寸判断 │ └─ 梯形图块4:计数处理 └─ 停止步(保持输出状态)特别注意步与步之间的转移条件,比如从初始步到运行步的条件是X4(启动按钮)的上升沿。我在第一个版本就犯过错,用了常开触点导致无法稳定切换。
3. 关键功能实现细节
3.1 流水灯的精确定时
流水灯效果需要三个定时器协同工作:
|--[T0 K10]--(Y4) 绿灯亮10ms |--[T1 K10]--(Y5) 黄灯亮10ms |--[T2 K10]--(Y6) 红灯亮10ms |--[T3 K10]--(回到T0) 循环实测发现,机械继电器的响应时间会影响效果,建议:
- 使用晶体管输出型PLC
- 定时器值不要小于5ms
- 添加互锁逻辑防止多灯同时亮
3.2 尺寸判断的防抖处理
传感器信号可能抖动,需要添加滤波逻辑:
|--[X0]--[T4 K5]--[MOV K1 D10] 小尺寸标志 |--[X0][X1]--[T5 K5]--[MOV K2 D10] 中尺寸标志 |--[X0][X1][X2]--[T6 K5]--[MOV K3 D10] 大尺寸标志这里D10临时存储尺寸结果,5ms的定时器(T4-T6)能有效消除触点抖动。注意要先判断大尺寸,再中尺寸,最后小尺寸,否则逻辑会错乱。
3.3 计数器的安全自锁
当X3检测到玩具通过时:
|--[X3上升沿]--[INC D0] 总数+1 |--[D10=1]--[INC D3] 小尺寸+1 |--[D10=2]--[INC D2] 中尺寸+1 |--[D10=3]--[INC D1] 大尺寸+1 |--[MOV K0 D10] 清除临时标志一定要用上升沿触发,我见过有人用常开触点导致单次触发多次计数。当D0=20时,要通过SFC的转移条件跳转到停止步。
4. 调试技巧与常见问题
4.1 在线监控技巧
GXWorks2的监控功能非常强大:
- 右键寄存器选择"监控开始"实时查看数值
- 对SFC步右键"强制转移"可以跳过故障步
- 使用"设备测试"功能模拟输入信号
遇到问题时,建议先单独测试每个功能块。比如先屏蔽计数逻辑,只调通流水灯部分。
4.2 典型故障排查
- 流水灯不同步:检查定时器编号是否重复使用
- 尺寸判断错误:确认传感器接线顺序与程序一致
- 计数器不工作:检查是否是上升沿触发
- SFC不转移:查看转移条件中的触点类型
有个坑我踩过:GXWorks2不同版本对SFC的支持有差异,如果发现程序异常,先确认软件版本是否匹配。建议统一使用1.77F以上版本。
5. 项目优化与扩展
5.1 性能优化方案
当前方案每个扫描周期都要处理所有逻辑,可以改进为:
- 使用SFC的并行分支处理独立功能
- 对不频繁变化的逻辑改用子程序调用
- 关键路径采用中断处理(如X3触发)
5.2 功能扩展建议
这个基础框架可以扩展更多实用功能:
- 添加触摸屏显示各尺寸比例
- 设置班次统计功能(早/中/晚班数据分开)
- 增加异常检测(如卡料报警)
- 通过RS485上传数据到MES系统
我在实际产线上还添加了自动调速功能,根据计数速度动态调整传送带速度,这个需要增加模拟量输出模块。