可能此软件使用Modbus功能15写多个开关量输出功能到S7-200 SMART CPU时,没有遵守从站协议中“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。定义HMI 软件严格执行此规律可以避免发生写入错误的情况
2.为什么有的 HMI 软件使用 Modbus RTU 协议读取作为 Modbus RTU 从站 S7-200 SMART CPU 的浮点型数据时会出现错误?
可能此HMI软件使用Modbus RTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
Modbus RTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。HMI软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。如果HMI软件一方无法处理这种浮点数,则可在S7-200 SMART CPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。
3.S7-200 SMART紧凑型CPU作为 Modbus RTU 从站时,已经将 MBUS_INIT 指令的Mode 输入参数设置为“1”了,但是 MBUS_SLAVE 指令还是会出现 10 号错误(从站功能未启用)?
S7-200 SMART紧凑型CPU 不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT 指令的MaxAI 输入参数设置不为“0”,则MBUS_SLAVE 指令会出现 10 号错误。
4.S7-200 SMART 使用S7-200的Modbus slave库无法初始化成功?
如下图所示,使用STEP 7-Micro/WIN SMART 直接打开S7-200 MODBUS 通信程序并做相关设置后测试,
首先,图中的MBUS_INIT的相关参数针对200smart来说,设置均正常,但是从测试结果可以看出,初始化MBUS_INIT报错1:存储器范围出错,而且MBUS_SLAVE报错10:从站功能未启用
图2. MODBUS Slave报错
这是因为200的库程序里针对过程映像区MaxIQ(0-128),AaxAI(0-32)做的报警判断,如下图Modbus Slave程序所示,S7-200的过程映像区大0-31,所以超过31会报错,【但S7-200smart的AI过程映像区大255】
图3. MODBUS Slave报警判断
所以当S7-200 SMART需要设计AI大于31的地址时,考虑还是使用STEP 7-Micro/WIN SMART自己的库。
5.S7-200 SMART CPU作为 Modbus RTU 从站时,是否支持 Modbus RTU 主站发送的广播命令?
S7-200 SMART CPU 作为 Modbus RTU 从站时,不支持广播命令。