1. 项目背景与核心需求解析
在工业自动化控制领域,PLC(可编程逻辑控制器)与HMI(人机界面)的协同工作一直是产线控制系统的核心架构。这次遇到的典型场景是某食品包装产线的称重分拣系统,采用OMRON CJ2M系列大型PLC作为主控制器,搭配昆仑通泰TPC7062KX触摸屏实现人机交互。系统需要实时处理来自多个称重传感器的模拟量信号,并通过SCU串行通信模块与上位MES系统进行数据交换。
这个项目的技术难点主要集中在三个方面:
- 高精度模拟量信号采集与滤波处理(称重精度要求±0.5%FS)
- CJ2M与昆仑通泰触摸屏的变量地址映射与通信优化
- SCU模块的串行通信协议转换与数据包校验机制
2. 硬件架构设计与选型依据
2.1 PLC模块配置方案
CJ2M-CPU33作为主控单元,扩展配置如下:
- CJ1W-AD081-V1模拟量输入模块(8通道)
- 分辨率:1/8000
- 转换速度:250μs/点
- 输入范围:4-20mA(对应称重传感器输出)
- CJ1W-SCU41-V1串行通信单元
- 支持协议:Host Link/Modbus RTU
- 通信速率:115200bps
- 数据位/校验:8位/偶校验
关键选型提示:AD081模块的1/8000分辨率对于50kg量程的称重系统,理论最小分辨率为6.25g,满足工艺要求的±250g误差范围。实际应用中需考虑传感器非线性误差和温度漂移。
2.2 称重传感器信号调理电路
采用四线制接线方式消除引线电阻影响:
code复制EXC+(红) —— 传感器激励+
EXC-(黑) —— 传感器激励-
SIG+(绿) —— 信号+
SIG-(白) —— 信号-
在PLC端配置250Ω精密电阻将4-20mA转换为1-5V电压信号。实测中发现车间电磁干扰严重,后续在信号线增加了磁环滤波。
3. PLC程序关键逻辑实现
3.1 模拟量处理功能块
使用ST语言编写带移动平均滤波的重量计算FB:
st复制FUNCTION_BLOCK FB_WeightFilter
VAR_INPUT
rawValue : INT; // 原始AD值
zeroPoint : INT; // 空载标定值
fullScale : INT; // 满量程AD值
END_VAR
VAR_OUTPUT
weight : REAL; // 计算重量(kg)
stableFlag : BOOL; // 稳定标志
END_VAR
VAR
buffer : ARRAY[0..9] OF INT; // 滤波缓冲区
index : INT := 0;
sum : DINT := 0;
END_VAR
// 移动平均滤波算法
sum := sum - buffer[index] + rawValue;
buffer[index] := rawValue;
index := (index + 1) MOD 10;
// 量程转换
weight := (sum / 10 - zeroPoint) * 50.0 / (fullScale - zeroPoint);
// 稳定判断(最近3次波动<0.2%)
stableFlag := ABS(buffer[index] - buffer[(index+7)MOD10]) < (fullScale*0.002);
END_FUNCTION_BLOCK
3.2 SCU模块通信配置
通过CX-Programmer设置SCU模块参数:
- 创建新的串行通信板配置
- 选择协议类型为"Modbus RTU Master"
- 设置通信格式:
- Baud Rate:115200
- Data Length:8bit
- Parity:Even
- Stop Bit:1bit
- 定义通信序列:
- 功能码:03(读保持寄存器)
- 从站地址:1
- 起始地址:40001(对应MES系统DB100.DBW0)
- 读取长度:10个字
4. 昆仑通泰触摸屏开发要点
4.1 变量地址映射配置
在MCGS组态软件中建立与CJ2M的地址对应关系:
| 触摸屏变量名 | PLC地址 | 数据类型 | 备注 |
|---|---|---|---|
| Weight_Value | D100 | REAL | 当前重量值 |
| Speed_Set | D200 | INT | 传送带速度设定 |
| Alarm_Flag | M100 | BOOL | 超重报警标志 |
通信参数设置特别注意:
- 接口类型:欧姆龙Host Link
- 站号:0(PLC默认站号)
- 通信超时:3000ms
- 数据位/停止位:7/2(与PLC串口设置一致)
4.2 称重显示画面设计
- 创建动态仪表控件:
- 量程:0-50kg
- 指针颜色:绿色(正常)/红色(超重)
- 绑定变量:Weight_Value
- 添加趋势图显示:
- 时间轴范围:5分钟
- 采样间隔:1秒
- 曲线颜色:蓝色
- 报警弹窗逻辑:
javascript复制// 画面循环脚本
if(GetData("Alarm_Flag") == 1){
OpenSubScreen("AlarmWindow", 0, 0, 800, 480);
SetTimer("CloseAlarm", 5000);
}
5. 系统调试与问题排查
5.1 典型故障处理记录
问题1:称重数值周期性波动
- 现象:空载时重量显示在±0.3kg范围跳动
- 排查:
- 断开传感器接线,测量模块输入端有约2mV交流干扰
- 检查发现动力电缆与信号线平行走线
- 解决:
- 重新布线,保持30cm以上间距
- 在AD模块输入端并联0.1μF电容
- 修改滤波算法为加权平均
问题2:SCU通信间歇性失败
- 现象:每小时出现1-2次通信超时
- 排查:
- 用串口监控工具抓包发现偶有校验错误
- 测量通信线两端地电位差达1.2V
- 解决:
- 增加RS485隔离模块
- 修改通信重试机制(3次重试间隔100ms)
5.2 系统精度验证方法
采用标准砝码进行三点校准:
- 空载校准:
- 置零操作,记录AD值作为zeroPoint
- 半量程校准:
- 加载25kg标准砝码
- 调整fullScale使显示值为25.00±0.05kg
- 满量程验证:
- 加载50kg砝码
- 检查显示值应在49.75-50.25kg范围
6. 项目优化经验总结
经过三个月的生产运行验证,以下几个优化措施显著提升了系统稳定性:
-
信号处理方面:
- 在AD采样前增加硬件RC滤波(R=100Ω,C=100nF)
- 采用动态滤波算法(根据重量变化率自动调整滤波窗口)
-
通信可靠性提升:
- 实现心跳包机制(每分钟发送0x55AA)
- 关键数据采用"读取-回写-验证"三步操作
-
触摸屏操作优化:
- 增加手势操作(双指滑动查看历史曲线)
- 关键参数修改需密码确认(分级权限管理)
这个项目让我深刻体会到,工业自动化系统开发中,硬件抗干扰措施与软件容错机制必须同步设计。特别是在模拟量处理场合,不能完全依赖软件滤波,合理的接地、屏蔽和信号调理才是基础保障。