【S7-200smart】Modbus RTU 通信常见问题及错误代码含义 PLC发烧友 今天
常见问题
1.S7-200 SMART 是否支持 Modbus ASCII 通信模式?
STEP 7-Micro/WIN SMART 软件未提供Modbus ASCII 通信模式指令库。S7-200 SMART CPU若用于Modbus ASCII 通信时,则需要用户使用自由口通信模式进行编程。
2. S7-200 SMART CPU 集成的RS485 端口(端口 0 )以及SB CM01 信号板(端口 1 )两个通信端口能否同时作为 Modbus RTU 主站或者同时作为 Modbus RTU从站?
S7-200 SMART V2.2版本支持两个通信端口同时做MODBUS RTU主站,不支持同时做MODBUS RTU从站。
3. S7-200 SMART CPU作为 Modbus RTU 主站如何访问 Modbus 地址范围大于49999 的保持寄存器?
通常 Modbus 协议的保持寄存器范围在 40001 到 49999 之间,这个范围对于多数应用来说已经足够了,但有些 Modbus 从站保持寄存器区的地址会超出该范围。Modbus RTU 主站协议库支持保持寄存器地址范围为(40001 到 49999) 或者(400001 到 465536)。如果 Modbus 从站地址范围为 400001 – 465536,只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。
4.S7-200 SMART CPU作为 Modbus RTU 主站,多次调用 MBUS_MSG 指令时,为什么该指令会出现 6# 错误代码?
同一时间只能有一条 MBUS_MSG 指令处于激活状态,如果激活多条 MBUS_MSG 指令,将执行第一条 MBUS_MSG 指令,所有后续 MBUS_MSG 指令将中止执行并出现 6# 错误代码。多条 MBUS_MSG 指令的执行需要采用轮询方式 。
5.S7-200 SMART CPU作为 Modbus RTU 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。如何减少主站的重发次数,以提高通信效率?
MBUS_MSG 指令被激活时将发送 Modbus 请求报文帧,如果在Timeout 参数定义的时间间隔内主站未接收到从站应答,Modbus RTU 主站协议库默认的情况下还会再发送 2 次 Modbus 请求报文帧;在最后一次请求报文帧发送后,经过 Timeout 参数定义的时间间隔后还未收到应答时, MBUS_MSG 指令的 Done 完成位才被设置为 1 。将 mModbusRetries 变量的数值由 2 改为 0 ,即可取消 Modbus 请求报文帧的重试次数。mModbusRetries 变量的绝对地址可通过查询Modbus RTU 主站协议库的符号表获取,如图 1. Modbus RTU 主站指令符号表所示。
6.为什么有的 HMI 软件使用 Modbus RTU 协议可以读取作为 Modbus RTU 从站 S7-200 SMART CPU 的数据,但是不能写入数据?
可能此软件使用Modbus功能15写多个开关量输出功能到S7-200 SMART CPU时,没有遵守从站协议中“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。定义HMI 软件严格执行此规律可以避免发生写入错误的情况
7.为什么有的 HMI 软件使用 Modbus RTU 协议读取作为 Modbus RTU 从站 S7-200 SMART CPU 的浮点型数据时会出现错误?
可能此HMI软件使用Modbus RTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
Modbus RTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。HMI软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。如果HMI软件一方无法处理这种浮点数,则可在S7-200 SMART CPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。
8.S7-200 SMART紧凑型CPU作为 Modbus RTU 从站时,已经将 MBUS_INIT 指令的Mode 输入参数设置为“1”了,但是 MBUS_SLAVE 指令还是会出现 10 号错误(从站功能未启用)
S7-200 SMART紧凑型CPU 不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT 指令的MaxAI 输入参数设置不为“0”,则MBUS_SLAVE 指令会出现 10 号错误。
9.S7-200 SMART CPU作为 Modbus RTU 从站时,是否支持 Modbus RTU 主站发送的广播命令?
S7-200 SMART CPU 作为 Modbus RTU 从站时,不支持广播命令。
主站故障代码
MBUS_CTRL 错误代码 |
说明 |
0 |
无错误 |
1 |
奇偶校验类型无效 |
2 |
波特率无效 |
3 |
超时无效 |
4 |
模式无效 |
9 |
端口号无效 |
10 |
信号板端口 1 缺失或未组态 |
从站故障代码
MBUS_MSG 错误代码 |
说明 |
0 |
无错误 |
1 |
响应存在奇偶校验错误:仅当使用偶校验或奇校验时,才会出现该错误。传输受到干扰,并且可能收到不正确的数据。该错误通常是电气故障(例如,接线错误或影响通信的电气噪声)引起的。 |
2 |
未使用 |
3 |
接收超时:在超时时间内从站没有做出响应。可能原因为:与从站设备的电气连接存在问题、主站和从站的波特率/奇偶校验的设置不同、从站地址错误。 |
4 |
请求参数出错:一个或多个输入参数(“从站”(Slave)、“读写”(RW)、“地址”(Addr) 或“计数”(Count))被设置为非法值。有关输入参数的允许值的信息,请参见本文档。 |
5 |
未启用 Modbus 主站:每次扫描时,在调用 MBUS_MSG 之前调用 MBUS_CTRL。 |
6 |
Modbus 正忙于处理另一请求:某一时间只能有一条 MBUS_MSG 指令处于激活状态。 |
7 |
响应出错:收到的响应与请求不符。这意味着从站设备有问题或错误的从站设备对请求做出了应答。 |
8 |
响应存在 CRC 错误:传输受到干扰,并且可能收到不正确的数据。该错误通常是电气故障(例如,接线错误或影响通信的电气噪声)引起的。 |
11 |
端口号无效 |
12 |
信号板端口 1 缺失或未组态 |
101 |
从站不支持该地址的请求功能:请参见“使用 Modbus 主站指令”帮助主题中的所需 Modbus 从站功能支持表。 |
102 |
从站不支持数据地址:“地址”(Addr) 加上“计数”(Count) 的请求地址范围超出从站允许的地址范围。 |
103 |
从站不支持数据类型:从站设备不支持“地址”(Addr) 类型。 |
104 |
从站设备故障 |
105 |
从站接受消息,但未按时做出响应:MBUS_MSG 发生错误,用户程序应在稍后重新发送请求。 |
106 |
从站繁忙,拒绝了消息:可以再次尝试相同的请求以获得响应。 |
107 |
从站因未知原因拒绝了消息。 |
108 |
从站存储器奇偶校验错误:从站设备有故障。 |
Modbus RTU 从站执行错误代码
错误代码 |
描述 |
0 |
无错误 |
1 |
存储器范围错误 |
2 |
波特率或奇偶校验非法 |
3 |
从站地址非法 |
4 |
Modbus 参数值非法 |
5 |
保持寄存器与 Modbus 从站符号重叠 |
6 |
收到奇偶校验错误 |
7 |
收到 CRC 错误 |
8 |
功能请求非法/功能不受支持 |
9 |
请求中的存储器地址非法 |
10 |
从站功能未启用 |
11 |
端口号无效 |
12 |
信号板端口 1 缺失或未组态 |