1. 筛选机控制程序实战解析
在工业自动化领域,筛选机是产线上不可或缺的关键设备。最近我在产线上折腾汇川H5U PLC程序,开发了一套自动筛选机的控制系统,经过实际产线验证,效果相当不错。这套系统的核心在于两个模块:触发采图和产品剔废,这两个功能都被封装成了FB功能块,现场调试时直接拖出来就能用,大大提高了开发效率。
这套程序已经在单位的多台设备上实际应用,适用于玻璃转盘和皮带机两种常见的输送方式。程序最大的特点是采用了队列管理机制和指针传递数据,使得系统响应速度快、稳定性高,即使在120pcs/min的高速运行状态下也能稳定工作。
2. 系统架构设计
2.1 整体工作流程
系统的工作流程可以分为以下几个关键步骤:
- 工件经过触发光电传感器时,系统检测到上升沿信号
- 记录当前编码器位置值,计算工件在输送带上的实际位置
- 将位置信息存入队列,等待图像采集和检测
- 当工件到达采图工位时,触发光源和相机进行图像采集
- 上位机软件处理图像并返回检测结果
- 根据检测结果,在剔废工位执行相应的动作
整个系统采用事件驱动的方式工作,通过编码器位置实时跟踪每个工件的位置,确保动作的精准性。
2.2 硬件配置要求
要使这套系统正常工作,需要以下硬件配置:
- 汇川H5U PLC作为主控制器
- 增量式编码器(分辨率根据精度要求选择)
- 光电传感器(用于工件检测触发)
- 工业相机和光源系统
- 剔废执行机构(如电磁阀控制的气缸)
- HMI人机界面(用于参数设置和状态监控)
编码器的安装位置很关键,建议安装在驱动轴上,确保编码器读数能准确反映输送带的实际位移。如果使用皮带输送机,还需要考虑皮带打滑的补偿问题。
3. 触发采图模块详解
3.1 功能块接口设计
触发采图模块被封装为FB_ImageCapture功能块,其接口定义如下:
st复制FB_ImageCapture(
EncoderPosition := %ID200, // 编码器实时位置值
PhotoEye := %IX0.0, // 触发光电信号
QueueSize := 20, // 队列容量
LightCtrl => %QX1.0 // 光源触发信号输出
);
这个功能块的设计考虑了通用性和灵活性,通过参数化配置可以适应不同的应用场景。EncoderPosition参数接收来自编码器的实时位置值,这里使用了指针直接访问内存地址,提高了数据读取的效率。
3.2 队列管理机制
队列管理是整个系统的核心,采用环形缓冲区结构实现:
st复制TYPE QueueItem :
STRUCT
Position : DINT; // 编码器位置值
Status : BOOL; // 检测结果标记
END_STRUCT
END_TYPE
VAR
PositionQueue : ARRAY[0..19] OF QueueItem; // 20工位队列
HeadIndex : INT := 0; // 队列头指针
TailIndex : INT := 0; // 队列尾指针
END_VAR
队列的工作原理是:
- 当光电传感器检测到工件时,将当前编码器位置存入TailIndex指向的队列位置
- TailIndex递增(采用模运算实现环形缓冲)
- 系统持续比较HeadIndex位置的编码器值与当前编码器值
- 当差值达到预设的采图位置时,触发采图动作
重要提示:编码器值超过2^31时会发生溢出,因此位置比较必须使用带符号的比较指令(如>I、<I),使用无符号比较会导致逻辑错误。
3.3 采图触发逻辑
采图触发采用短脉冲方式,PLC只发送1ms的触发信号:
st复制IF (CurrentPosition - PositionQueue[HeadIndex].Position) >= PhotoPosition THEN
// 触发采图
LightTrigger(IN:=TRUE, PT:=T#1ms);
HeadIndex := (HeadIndex + 1) MOD QueueSize;
END_IF
这种设计将相机触发的具体时序控制交给光源控制器处理,简化了PLC程序的复杂度。在实际应用中,这种解耦设计提高了系统的可靠性,因为不同品牌的光源控制器可能有不同的触发时序要求。
4. 剔废模块实现
4.1 剔废控制逻辑
剔废模块根据检测结果执行剔除动作,支持可配置的脉冲宽度:
st复制IF NeedReject THEN
RejectTimer(IN:=TRUE, PT:=T#5ms);
IF RejectTimer.Q THEN
%QX2.0 := NOT %QX2.0; // 生成5ms脉冲
ClearCurrentFlag(); // 清空当前工位标记
END_IF
END_IF
这里需要注意PLC的扫描周期(默认10ms)与脉冲宽度的关系。5ms的脉冲会覆盖至少半个扫描周期,因此在实际应用中,建议使用沿触发而不是电平触发,以避免重复动作。
4.2 上位机通信接口
系统设计了20个连续的保持寄存器(%MW100-%MW119)作为检测结果区:
- 上位机软件循环写入这20个地址的检测结果
- PLC根据队列的HeadIndex读取对应的检测结果
- 当工件经过剔废工位后,自动清零对应的结果标志
这种设计简化了通信协议,上位机只需要定期更新结果区即可,不需要处理复杂的同步逻辑。我在程序中还加入了索引校验机制,当检测到结果地址索引与队列HeadIndex不同步超过3个工位时,会自动复位队列,防止错误累积。
5. 调试技巧与实战经验
5.1 编码器位置监控
调试时,将编码器值实时映射到HMI画面非常有用。我设计了一个可视化界面,显示队列中各个工件的位置和状态,看起来就像贪吃蛇在队列中游动。这种方法可以直观地发现以下问题:
- 编码器读数异常(如波动、丢脉冲)
- 队列管理逻辑错误
- 光电传感器误触发
- 系统响应延迟
5.2 队列长度调整注意事项
程序默认使用20个工位的队列长度,但可以根据实际需要修改。调整队列长度时需要注意:
- 修改ARRAY的大小定义
- 检查所有涉及队列索引的操作,特别是取模运算
- 更新相关的循环判断条件
- 调整上位机结果区的地址范围
血泪教训:有一次我将队列长度从20改为30后,忘记更新一个取模运算的除数,导致索引计算溢出,结果流水线上的产品乱飞,场面相当壮观。
5.3 高速运行优化
当产线速度提高到120pcs/min时,我做了以下优化:
- 缩短PLC扫描周期(从10ms调整到5ms)
- 优化队列管理算法,减少不必要的计算
- 使用指针操作代替数组索引访问
- 增加光电信号滤波,防止误触发
- 优化剔废执行机构的响应时间
这些优化使得系统在高速运行下仍能保持稳定,剔除准确率达到99.9%以上。
6. 系统扩展与改进
6.1 多工位支持
当前的程序架构很容易扩展到多工位应用。只需要:
- 实例化多个功能块
- 为每个工位分配独立的队列
- 配置不同的编码器偏移量
- 设置各自的采图和剔废位置参数
这种设计在玻璃瓶检测等应用中特别有用,可以在一个转盘上实现多个检测工位。
6.2 自适应速度控制
对于变速运行的产线,可以增加速度自适应算法:
- 实时计算输送带速度
- 动态调整触发提前量
- 根据速度变化自动优化队列管理参数
- 实现速度变化时的平滑过渡
6.3 数据统计分析
可以在HMI上增加以下统计功能:
- 生产计数(总数、合格数、不合格数)
- 不良品分类统计
- 设备运行效率分析
- 历史数据记录与查询
这些数据对于生产管理和质量改进非常有价值。
