4. Modbus RTU在食品包装线上的部署

食品包装线通常由多台设备串联组成:枕式包装机、称重计量装置、喷码机、金属检测机、输送带变频器等。这些设备往往来自不同厂商,却需要把温度、速度、运行状态等数据统一送入PLC,再由SCADA集中监视。Modbus RTU凭借实现简单、成本低、抗干扰能力尚可的特点,成为包装线上最常见的现场总线之一。本节围绕三个落地问题展开:RS-485物理层怎么接、从站地址与寄存器怎么规划、PLC如何实际读取包装机的温度与速度。

一、RS-485物理层的接线要点

Modbus RTU运行在RS-485电气层上,采用差分信号传输,A、B两根线构成一对双绞线。工程上首先要明确极性约定:多数设备标注为A(D+)与B(D−),但个别厂商的A、B定义相反,接线前必须核对说明书,否则总线表现为“全部从站无响应”。所有从站以菊花链方式手拉手串接,严禁星形分支——星形接法会在分支点产生阻抗不连续,导致信号反射,表现为通信时好时坏、距离一长就丢帧。

终端电阻用于吸收线路末端的信号反射。规范做法是在总线物理两端各接一只120Ω电阻,中间节点不接。若总线较短(例如小于10米)且波特率不高(9600bps),可只在主站端接一只;但包装线常见长度在30~80米、波特率19200bps,两端各接120Ω更稳妥。屏蔽层处理是另一个易错点:屏蔽层应单点接地,通常在主站(PLC柜)侧通过接地端子排接到保护地,从站侧屏蔽层剪断悬空,避免两端接地形成地环流,反而把变频器干扰耦合进总线。

布线时让RS-485双绞线远离变频器输出电缆和伺服动力线,平行间距保持20cm以上;必须交叉时采用垂直交叉。包装线的封切加热器属于大功率阻性负载,其通断瞬间的干扰常是通信误码的根源。

二、从站地址与寄存器映射规划

Modbus RTU总线上每个从站必须有唯一地址,有效范围1~247,地址0为广播地址。规划时应按设备类型分段,便于后期维护和故障定位。例如一条包装线可约定:1~9为包装机,10~19为称重装置,20~29为变频器,30~39为喷码与检测设备。地址一旦确定应写入设备参数并登记在《通信点表》中,避免调试时临时改地址造成混乱。

寄存器映射规划的核心是把“设备内部变量”翻译成“Modbus寄存器地址”。以某枕式包装机为例,厂商手册给出:封切温度实际值存放在保持寄存器40001(即协议地址0x0000,功能码03),当前包装速度存放在40003(协议地址0x0002),单位为包/分钟,温度单位为0.1℃。这里必须区分“PLC地址”和“协议地址”:手册常以4xxxx表示保持寄存器,编程时需减去40001得到从0开始的偏移量,不同PLC软件的填法不同,是初学者最常踩的坑。

包装线Modbus RTU总线拓扑与寄存器映射 PLC主站 地址:主站 19200 8N1 RS-485 双绞线(A/B)菊花链 120Ω 120Ω 包装机 从站地址 1 温度/速度 称重装置 从站地址 10 重量值 输送变频器 从站地址 20 频率/状态 喷码机 从站地址 30 报警字 包装机(从站1)寄存器映射示例 PLC地址 协议偏移 功能码 含义 数据类型/单位 40001 0x0000 03 封切温度实际值 INT,0.1℃ 40003 0x0002 03 包装速度 INT,包/分钟 40010 0x0009 01 运行状态位 BOOL(线圈)

三、PLC读取温度与速度的实际配置

以西门子S7-1200通过CM 1241 RS-485模块读取上述包装机为例,配置分三步。第一步在硬件组态中设置通信模块参数:波特率19200、数据位8、无校验、停止位1(即8N1),与包装机面板中的通信参数完全一致;同时设置字符间超时和帧间延时,默认值在长线缆场合可适当放宽。第二步调用Modbus主站指令,例如MB_COMM_LOAD用于初始化端口,MB_MASTER用于发起请求。第三步为每个数据点建立轮询逻辑。

读取温度时,MB_MASTER的REQ由轮询定时器触发,MB_ADDR填1(从站地址),MODE填0(读保持寄存器),DATA_ADDR填0(协议偏移),DATA_LEN填1,将结果存入DB1.DBW0。由于温度单位为0.1℃,若读到数值1850,实际温度为185.0℃。读取速度时,DATA_ADDR改为2,结果存入DB1.DBW2,读到120即120包/分钟。注意同一时刻总线上只能有一个主站请求在途,因此温度与速度应分时轮询,例如每200ms读温度、每500ms读速度,用两个定时器交替触发,避免请求冲突导致异常码6(从站忙)。

// 轮询逻辑示意(梯形图思路转写)
// 定时器T1每200ms置位读温度请求
// 定时器T2每500ms置位读速度请求
IF T1.Q THEN
    MB_MASTER(REQ:=TRUE, MB_ADDR:=1, MODE:=0,
              DATA_ADDR:=0, DATA_LEN:=1, DATA_PTR:=DB1.DBW0);
END_IF;
IF T2.Q THEN
    MB_MASTER(REQ:=TRUE, MB_ADDR:=1, MODE:=0,
              DATA_ADDR:=2, DATA_LEN:=1, DATA_PTR:=DB1.DBW2);
END_IF;
// 温度换算:实际温度 = DB1.DBW0 / 10.0
// 速度换算:实际速度 = DB1.DBW2(包/分钟)

配置完成后如何判断读取成功?观察MB_MASTER的输出参数:DONE置位表示本次请求完成,ERROR为0且STATUS为0表示正常;若ERROR置位,STATUS给出具体错误码,例如STATUS=0x80C8表示从站响应超时,应检查地址、波特率与接线极性;STATUS=0x80C9表示从站返回异常码,需查手册确认寄存器是否越界。此外可在SCADA画面上同时显示温度与速度趋势,若数值长期不变或跳变为0,往往是通信中断而非设备真实状态。

调试阶段建议先用Modbus调试助手单独与包装机通信,确认地址、寄存器偏移和数据类型无误后,再接入PLC轮询。直接上PLC调试会把物理层问题、地址问题和映射问题混在一起,排查效率极低。

最后形成一份可执行的通信点表:记录设备名称、从站地址、寄存器PLC地址、协议偏移、功能码、数据类型、单位、换算系数和轮询周期。这份点表既是PLC编程的依据,也是SCADA变量组态和后期故障排查的索引。物理层接对、地址不冲突、映射与换算一致,包装线的温度与速度数据才能稳定地进入监控系统。