Modbus RTU通信无校验位时停止位是否默认两位
1.1 Modbus RTU通信规约
根据Modbus RTU通信规约的定义,Modbus RTU字符帧包括:
- 1个起始位
- 8个数据位
- 1个或无校验位
- 1个或2个停止位 其中,无校验位时,停止位个数为2位,1个校验位时,停止位为1位;Modbus RTU通信规约规定,其字符帧需要保证11位的通信格式。 Modbus RTU通信规约的描述如下图1所示:
图1
1.2 S7-1200 Modbus RTU通信停止位个数的设置
在SIMATIC S7-1500和S7-1200 PLC中,通过Modbus_Comm_Load指令对通信模块或通信板进行组态操作,包括波特率、奇偶校验、停止位等参数。
在本文档中,我们以S7-1200为例,加以说明。
在图2所示的变量STOP_BITS中设置停止位个数,默认值为1,即默认1个停止位,可以在Modbus_Comm_Load指令的背景DB块中找到该变量。
图2
注意:修改Modbus_Comm_Load指令引脚或背景DB块中相关参数后,需要重新触发Modbus_Comm_Load指令,否则新参数不会生效。
1.3 使用示波器验证Modbus RTU通信停止位
在上述分析中,我们知道Modbus RTU通信规约中定义了,无校验位时停止位是2位,那在S7-1200 PLC中也同样适用该原则吗?即在S7-1200中设置Modbus RTU通信字符帧为无校验位时,停止位默认是2位。
针对这个疑问,我们使用CM1241作为Modbus RTU主站,通过Modbus_Master指令读取1号从站保持性寄存器40001地址的数据,其对应报文帧为01 03 00 00 00 01 84 0A,通过初始化指令Modbus_Comm_Load设置字符帧为无校验位,并使用示波器分别在STOP_BITS为1和为2的情况下,发送该报文帧信息,从捕捉到的报文帧波形中读取实际停止位的个数。
其中,波特率为9.6K bits/s,故单个位时间为0.1ms,即1个停止位,其占用0.1 ms,2个停止位,其占用0.2 ms。
需要注意:起始位为低电平,停止位为高电平,空闲位为高电平,数据位中的1为高电平,数据位中的0为低电平。
使用硬件和软件如表1所示:
设备 | 型号 | 订货号 |
---|---|---|
硬件 | S7-1215 DC/DC/DC V4.4 | 6ES7 215-1AG40-0XB0 |
CM1241 (RS422/485) V2.2 | 6ES7 241-1CH32-0XB0 | |
软件 | TIA V16 |
表1
字符帧设置如图3所示:
图3
1、STOP_BITS=1时,示波器捕捉到的波形如图4所示:
图4
通过软件测量报文帧中站地址信息01的停止位时间,其值为0.08ms,占用1个位时间,测量数据如图5所示:
图5
2、STOP_BITS=2时,示波器捕捉到的波形如图6所示:
图6
通过软件测量报文帧中站地址信息01的停止位时间,其值为0.16ms,占用两个位时间,测量数据如图7所示:
图7
1.4 结论
通过上述的分析中,我们可以得出,在SIMATIC S7-1500 和S7-1200 PLC中进行Modbus RTU通信,字符帧设置为无校验位时,停止位不会默认是2位,停止位的个数是通过Modbus_Comm_Load指令背景DB块中的STOP_BITS来定义的,这样可以使SIMATIC PLC能够更加灵活自如的应对多样化的Modbus RTU应用场景。