1. 项目概述:多品牌集成的料箱输送线控制系统
这条料箱输送线是我去年参与调试的典型工业自动化项目,核心任务是在有限空间内实现料箱的精准分流与目的地跟踪。系统整合了七个不同品牌的工业设备,包括英特诺直流辊筒电机、Sick条码阅读器、碧彩称重模块等,堪称"八国联军"式配置。最要命的是客户要求所有设备必须保留原有通讯协议,导致一个PLC里同时跑着Profinet、Modbus RTU和TCP/IP三种通讯。
硬件配置上,我们选用西门子S7-1515-2 PN作为主控制器,搭配TP700 Comfort触摸屏。这种组合在中小型输送线项目中很常见——1515系列PLC的Profinet接口自带交换机功能,省去了额外的网络设备;TP700的12寸屏足够显示完整的输送线布局和实时状态。实际部署时,建议将PLC安装在电柜靠近输送线中段的位置,这样到各设备的网线长度相对均衡,减少信号衰减问题。
关键提示:多协议混用时,务必在硬件配置阶段就规划好各网段的IP地址范围。我们吃过亏——初期没做隔离,Modbus TCP设备与Profinet设备用了同一网段,导致PLC偶尔出现通讯超时。
2. 核心设备通讯实现细节
2.1 英特诺电机控制卡的特殊处理
英特诺的MultiControl控制卡采用Modbus RTU协议,通过RS485接口连接。在TIA Portal中配置时需要注意:
- 在硬件目录中添加CM PtP模块(如6ES7541-1AB00-0AB0)
- 波特率设为19200(与控制卡Dip开关设置一致)
- 数据格式设置为8N1,但必须勾选"Swap Byte Order"
字节顺序问题最容易踩坑。控制卡发送的16位数据是LSB在前,而西门子默认MSB在前。我们在DB100中定义了一个包含10个字节的数组作为数据缓冲区,实际使用时需要这样处理速度值:
stl复制// 将速度值写入Modbus寄存器
L #Set_Speed // 0-100%的速度给定值
T "DB100".DBW2 // 存入DB块第3字节(前两字节为控制字)
CALL "MB_MASTER_DB" // 调用Modbus主站指令
调试时建议先用Modscan工具单独测试控制卡,确认寄存器映射关系无误后再集成到PLC程序。我们遇到过控制卡固件版本不同导致寄存器地址偏移的情况,最终通过GSD文件中的设备替换功能解决。
2.2 Sick条码阅读器的中断处理
CLV620条码扫描器通过Profinet连接,但其数据触发方式比较特殊——每次扫码成功会触发一个硬件中断。我们在OB35中实现了如下处理逻辑:
stl复制L "BarCode_Device".BC_Length // 读取条码长度
T #Temp_Length
L #Temp_Length
JL _err // 长度超限判断
JU _process
_err: CLR // 错误处理
_process: L "BarCode_Device".BC_Data[0] // 读取第一个字符
T MB100 // 存入MB区起始地址
实际应用中发现两个关键点:
- 必须配置输入数据的最大长度(在设备配置中设置),否则超长条码会导致缓冲区溢出
- OB35的执行时间要严格控制,我们最终将中断优先级设为25(默认15),避免影响运动控制周期任务
3. 目的地跟踪算法实现
3.1 路径矩阵的构建方法
输送线有8个工位,每个料箱根据条码信息确定目标工位。我们采用预编译路径矩阵的方式优化性能,具体步骤:
- 在Excel中建立8x8的工位关系矩阵
- 用VBA生成二进制路线编码(如0001表示直行,0010表示左转等)
- 将矩阵导出为CSV文件
- 使用TIA Portal的"DB块导入"功能加载到DB300中
查表逻辑的核心代码如下:
stl复制L #Current_Station // 当前工位号(1-8)
L 8
*I // 计算行偏移
L #Dest_Station // 目标工位号(1-8)
+I // 计算矩阵索引
SLW 3 // 转换为字节偏移
LAR1 // 存入地址寄存器
L DB300.DBW[AR1] // 读取路径指令
T #Route_Command // 存入路径变量
3.2 变频器提升控制技巧
丹佛斯FC302变频器的Modbus地址映射特殊之处在于:
- 控制字采用"功能码+地址"的复合格式
- 频率给定值需要除以最大频率得到百分比
实际控制代码示例:
stl复制A "Lift_Start" // 启动信号
FP "Edge_Mem" // 边沿检测
JNB _skip
L 16#0006 // 功能码06+地址0000
T "FC_ControlWord" // 写入控制字
L 30.0 // 30Hz频率
L 50.0 // 最大频率50Hz
/R // 转换为百分比
L 4000 // 量程系数
*R // 转换为寄存器值
T "FC_Frequency" // 写入频率寄存器
_skip: NOP 0
调试时发现变频器的加速时间默认设置过长(10s),导致提升动作超时。通过修改参数22-20(加速时间)和22-21(减速时间)将其调整为3s后,系统节拍提升了15%。
4. 系统调试经验总结
4.1 通讯故障排查流程
多设备混合通讯时,建议按以下步骤排查:
- 用Wireshark抓取Profinet通讯包,检查Cycle时间是否稳定
- 通过Modbus Poll工具单独测试各RTU设备响应
- 在PLC变量表中强制关键控制信号,确认物理输出正常
- 检查各设备接地情况(我们曾因接地不良导致RS485信号抖动)
4.2 程序优化建议
对于类似项目,我的几点经验:
- STL程序中频繁使用的DB块最好固定在装载存储器(如DB100-DB199)
- 运动控制相关的中断OB块优先级应高于通讯OB块
- 关键设备的看门狗时间要设置为实际响应时间的2-3倍
- HMI画面更新周期不要小于500ms,避免占用过多通讯资源
这套系统最终实现了98.7%的设备综合效率(OEE),其中目的地跟踪算法的平均处理时间控制在3ms以内。虽然STL编程像在走钢丝,但执行效率确实比LAD或SCL更高。对于维护这类老系统,我的建议是做好详尽的交叉引用注释——那些年踩过的坑,都变成了今天程序里的//Warning注释。