[TS]S7-1200 G2 Modbus‑RTU 作为主站通讯故障排查记录

AI摘要S7-1200 G2加CM1241作Modbus-RTU主站通讯时报16#7002超时,TX亮、RX无应答,但同链路S7-200 SMART正常。根因是新版Modbus_Comm_Load指令在两线RS485下仅设MODE=4不够,还需设LINE_PRE=2,否则收发切换异常。修改背景DB参数后通讯恢复。另需注意Modbus-RTU依赖总线静默时间分帧,高速波特率下t1.5和t3.5为固定值。

一、明确问题

1.1 故障现象

S7-1200 G2+CM1241 作为 Modbus-RTU 主站无法和从站通讯;线缆、接线无异常,同链路更换 S7-200 SMART 做主站,通讯正常。CM1241 仅 TX 灯闪烁,无 RX 应答。

1.2 涉及硬件

订货号 描述
6ES7 214-1HH50-0XB0 CPU 1214C DC/DC/Rly
6ES7 241-1EA50-0XB0 CM1241 RS422/485 模块
第三方 Modbus 从站
RS485 总线线缆

1.3 错误信息

Modbus_Master 状态码:16#7002,从站响应超时

1.4 复现步骤

按照指南中的程序进行编程:

  1. TIA 中调用新版 Modbus_Comm_Load + Modbus_Master 指令;
  2. 初始化 DB 设置 MODE=4;
  3. 下载程序,触发 Modbus 读 / 写任务,稳定报 7002 超时。

6585af8addbd2eb58dd5cdf32ce66267

二、收集信息

2.1 检查日志与状态

  • Modbus_Comm_Load:DONE=1,初始化无报错; 此标志位为瞬时标志,需编写程序判断初始化后是否能置位一个标志位。
  • Modbus_Master:REQ 正常触发,持续返回 16#7002;
  • 模块指示灯:TX 闪烁、RX 不闪烁,报文发出但无返回。

2.2 核对环境配置

波特率、校验、站号、寄存器地址、A/B 接线、终端电阻、接地全部匹配从站;硬件组态端口参数设置为 RS485。

image

三、假设与测试

3.1 初步假设

  1. 总线链路、从站设备故障(替换测试推翻);
  2. 硬件组态串口参数不匹配(核对后排除);

3.2 验证过程

测试 1:替换主站为 S7-200 SMART,通讯正常 → 物理层、从站侧无问题;

测试 2:确认 MODE=4(两线 RS485 半双工),故障依旧;

测试 3:接入电脑的485通讯口,监测通讯报文,PLC发送数据是一样的,但是电脑端接收的数据不一致,经常发生变化。

957885d0f3b401440cc13433586b5c46

3.3 根因确认

image

新版 Modbus_Comm_Load 指令依靠 LINE_PRE 控制总线空闲电平、RTS 收发切换时序;两线 RS485 场景只设置 MODE=4,LINE_PRE 默认值不匹配总线时序,导致发报后切换异常,收不到从站应答。

硬件组态不会自动同步该 DB 内部参数,同时修改硬件组态内的设置也无法使得功能块的参数发生变化。

四、实施修复

4.1 解决方案

在 Modbus_Comm_Load 背景数据块静态变量中同时配置: MODE = 4,LINE_PRE = 2

4.2 升级步骤

image

  1. 打开 Modbus_Comm_Load 背景 DB,修改静态参数;或者直接编写程序进行赋值。
  2. 编译、下载 PLC 程序;
  3. PLC 断电重启,保证 CM1241 参数加载生效。

image

image

4.3 验证效果

重新触发读写任务,Modbus_Master 无报错,TX/RX 灯交替闪烁,寄存器读写稳定正常。

五、记录复盘

5.1 问题归档

故障类型:S7-1200 新版 Modbus-RTU 指令参数遗漏;特征:链路正常、200SMART 可通、报错 7002。

5.2 经验沉淀

  1. CM1241(G2)新版 Modbus 指令两线 RS485,MODE=4 和 LINE_PRE=2 必须成对配置;
  2. 硬件组态串口模式 ≠ 指令 DB 内部时序参数,二者独立;
  3. 替换法(200SMART)可快速隔离物理层问题,缩小排查范围。

5.3 后续行动

将该检查项加入项目标准检查表;新项目使用 CM1241 Modbus-RTU 主站时,强制核对这两个参数。

六、Tips Modbus‑RTU 区分报文

Modbus‑RTU 帧格式:从站地址(1B)+功能码(1B)+数据域(NB)+CRC低字节(1B)+CRC高字节(1B),不存在 0x7E 这类起始 / 结束标记,依靠总线静默时间来切分帧边界。

image

官方标准两条核心时序规则(Modbus over Serial Line V1.02):

1.帧间间隔 t₃.₅:两帧报文之间总线空闲静默时间必须≥3.5 个字符时间。接收端检测到总线静默达到 t₃.₅,就把前面收到字节当做一完整帧上交 CRC 校验。

image

2.帧内最大字符间隔 t₁.₅:同一帧内部,相邻两个字节之间间隔不能超过 1.5 字符时间。如果接收中途停顿大于 t₁.₅但不足 t₃.₅,判定为破碎帧,直接丢弃,防止错位扩散。

image

字符时间计算公式:t_char = 11 / 波特率,1 个字符包含:1 起始位 + 8 数据位 + 1 停止位,无校验模式合计 11bit。

⚠️重要陷阱:波特率>19200(38400/57600/115200),不再按公式计算,官方强制固定:t₁.₅=750μs;t₃.₅=1.75ms。

高速波特率下如果继续用公式计算,中断抖动就会把正常报文误切分,通信直接瘫痪。

很多人误以为 “收到固定字节数就是一帧”,这是测试状态时的侥幸,不是协议标准,多设备、干扰环境必然出问题。

纪小年

Jing

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。