常见问题
1.S7-200SMART是否支持ModbusASCII通信模式?
STEP7-Micro/WINSMART软件未提供ModbusASCII通信模式指令库。S7-200SMARTCPU若用于ModbusASCII通信时,则需要用户使用自由口通信模式进行编程。
2.S7-200SMARTCPU集成的RS485端口(端口0)以及SBCM01信号板(端口1)两个通信端口能否同时作为ModbusRTU主站或者同时作为ModbusRTU从站?
版本支持两个通信端口同时做MODBUSRTU主站,不支持同时做MODBUSRTU从站。
3.S7-200SMARTCPU作为ModbusRTU主站如何访问Modbus地址范围大于49999的保持寄存器?
通常Modbus协议的保持寄存器范围在40001到49999之间,这个范围对于多数应用来说已经足够了,但有些Modbus从站保持寄存器区的地址会超出该范围。ModbusRTU主站协议库支持保持寄存器地址范围为(40001到49999)或者(400001到465536)。如果Modbus从站地址范围为400001–465536,只需在调用MBUS_MSG子程序时给Addr参数赋相应的值即可,如416768。
4.S7-200SMARTCPU作为ModbusRTU主站,多次调用MBUS_MSG指令时,为什么该指令会出现6错误代码。多条MBUS_MSG指令的执行需要采用轮询方式。
5.S7-200SMARTCPU作为ModbusRTU主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。如何减少主站的重发次数,以提高通信效率?
MBUS_MSG指令被激活时将发送Modbus请求报文帧,如果在Timeout参数定义的时间间隔内主站未接收到从站应答,ModbusRTU主站协议库默认的情况下还会再发送2次Modbus请求报文帧;在最后一次请求报文帧发送后,经过Timeout参数定义的时间间隔后还未收到应答时,MBUS_MSG指令的Done完成位才被设置为1。将mModbusRetries变量的数值由2改为0,即可取消Modbus请求报文帧的重试次数。mModbusRetries变量的绝对地址可通过查询ModbusRTU主站协议库的符号表获取,如图1.ModbusRTU主站指令符号表所示。
6.为什么有的HMI软件使用ModbusRTU协议可以读取作为ModbusRTU从站S7-200SMARTCPU的数据,但是不能写入数据?
可能此软件使用Modbus功能15写多个开关量输出功能到S7-200SMARTCPU时,没有遵守从站协议中“以整字节地址边界(如、)开始、以8的整数倍为位个数”的规约。定义HMI软件严格执行此规律可以避免发生写入错误的情况
7.为什么有的HMI软件使用ModbusRTU协议读取作为ModbusRTU从站S7-200SMARTCPU的浮点型数据时会出现错误?
可能此HMI软件使用ModbusRTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
ModbusRTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。HMI软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。如果HMI软件一方无法处理这种浮点数,则可在S7-200SMARTCPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。
8.S7-200SMART紧凑型CPU作为ModbusRTU从站时,已经将MBUS_INIT指令的Mode输入参数设置为“1”了,但是MBUS_SLAVE指令还是会出现10号错误(从站功能未启用)?
S7-200SMART紧凑型CPU不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT指令的MaxAI输入参数设置不为“0”,则MBUS_SLAVE指令会出现10号错误。
9.S7-200SMARTCPU作为ModbusRTU从站时,是否支持ModbusRTU主站发送的广播命令?
S7-200SMARTCPU作为ModbusRTU从站时,不支持广播命令。
主站故障代码
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
从站存储器奇偶校验错误:从站设备有故障。
ModbusRTU从站执行错误代码
错误代码
描述
0
无错误
1
存储器范围错误
2
波特率或奇偶校验非法
3
从站地址非法
4
Modbus参数值非法
5
保持寄存器与Modbus从站符号重叠
6
收到奇偶校验错误
7
收到CRC错误
8
功能请求非法/功能不受支持
9
请求中的存储器地址非法
10
从站功能未启用
11
端口号无效
12
信号板端口1缺失或未组态