4. 包装机光电计数与批次累计
任务场景与计数对象
某饼干包装线在装盒机入口安装一只漫反射式光电传感器,检测每盒产品经过时产生的遮挡脉冲。PLC需要完成两件事:一是对脉冲做高速计数,得到实时产量;二是当累计数达到批次设定值(例如每批 1200 盒)时,输出一个换批信号,驱动换批指示灯并复位计数器,进入下一批。
本例的关键约束是:产品间距小、线速高,普通输入滤波可能漏计;同时换批信号必须"只发一次",避免计数器在设定值附近抖动导致重复换批。因此程序采用高速计数指令 + 边沿触发 + 自锁复位结构。
硬件接线与输入输出分配
| 信号 | 地址 | 类型 | 说明 |
|---|---|---|---|
| 光电传感器 | I0.0 | DI(高速输入) | 产品遮挡时输出高电平,接入支持 HSC 的输入点 |
| 启动按钮 | I0.1 | DI | 常开,启动计数 |
| 停止/复位按钮 | I0.2 | DI | 常开,停止并清零 |
| 换批指示灯 | Q0.0 | DO | 达到批次数量时点亮 |
| 批次设定值 | VW100 | 整数 | 默认 1200,可由触摸屏修改 |
| 当前计数值 | VD200 | 双字 | 高速计数器当前值 |
注意:光电传感器必须接到 PLC 支持高速计数功能的输入点(如 S7-200 SMART 的 I0.0 对应 HSC0),普通输入点的扫描周期滤波会丢失窄脉冲。
高速计数器组态
以西门子 S7-200 SMART 为例,使用 HSC0 工作在模式 0(内部方向控制、单相计数)。组态要点:
- 计数模式:单相计数,内部方向由控制位决定,本例固定为加计数。
- 计数方向:加计数。
- 复位方式:程序复位(由停止按钮触发)。
- 初始值:0,预设值:由 VW100 换算后写入。
- 计数倍率:1×,即每个脉冲计 1。
组态完成后,HSC0 的当前值存放在 HC0(双字),可直接读取。
梯形图程序实现
程序分为三段:启动/停止控制、高速计数读取与批次比较、换批输出与复位。
// 网络1:启动/停止控制
LD I0.1 // 启动按钮
O M0.0 // 运行自锁
AN I0.2 // 停止按钮
= M0.0 // 运行标志
// 网络2:高速计数器使能(HSC0 模式0)
LD M0.0
= SM37.0 // HSC0 使能位(依具体型号定义)
// 网络3:读取当前计数值
LD SM0.0
MOVD HC0, VD200 // 将 HSC0 当前值送入 VD200
// 网络4:批次比较,达到设定值置位换批标志
LD M0.0
AD>= VD200, VW100 // 当前值 >= 批次设定值
S M0.1, 1 // 置位换批标志
// 网络5:换批输出
LD M0.1
= Q0.0 // 点亮换批指示灯
// 网络6:换批后复位计数器与标志
LD M0.1
R M0.1, 1 // 复位换批标志
MOVD 0, HC0 // 清零高速计数器
MOVD 0, VD200 // 清零显示值
说明:AD>= 为双字整数比较指令,比较 VD200 与 VW100 时需注意数据类型一致,实际编程中可将 VW100 扩展为双字或使用 ID>= 比较。网络6 在换批标志置位后的下一个扫描周期执行复位,保证换批信号只输出一个扫描周期,避免重复触发。
计数逻辑与换批时序
图中可见:每个产品遮挡产生一个脉冲,计数器逐次累加;当计数值达到设定值 1200 时,换批输出只产生一个扫描周期的脉冲,随后计数器清零,重新开始下一批累计。这种"比较—置位—复位"结构保证了换批信号不重复。
调试与验证要点
- 脉冲丢失检查:用示波器或 PLC 状态表观察 HC0 是否与产品实际数量一致。若偏少,检查传感器响应时间与输入滤波设置,必要时缩短输入滤波时间或提高传感器响应频率。
- 换批信号抖动:若换批指示灯闪烁多次,说明复位逻辑未生效或比较条件在复位前被多次扫描。确认网络6 的复位指令在置位后的下一周期执行。
- 批次设定值修改:运行中修改 VW100 时,若新值小于当前计数值,会立即触发换批,属于正常逻辑;若需避免,可在修改时先停止计数。
- 断电保持:若要求断电后继续累计,需将 HC0 当前值定期写入保持寄存器(如 VD300),上电后重新装载。
高速计数器的当前值寄存器(HC0)是只读的,不能直接用 MOV 指令写入;清零必须通过 HSC 的复位位或重新初始化实现。不同品牌 PLC 的 HSC 编号与使能位不同,编程前务必查阅对应型号的系统手册。
常见问题排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 计数偏少 | 输入滤波过强、传感器响应慢 | 缩短滤波时间,更换高频响应传感器 |
| 计数偏多 | 产品边缘抖动产生双脉冲 | 在传感器前加装遮光板或使用单稳延时 |
| 换批不输出 | 比较数据类型不一致 | 统一为双字比较,检查 VW100 扩展 |
| 换批重复输出 | 复位逻辑缺失或顺序错误 | 确保置位后下一周期复位并清零 HC0 |