modbus-poll和modbus-slave工具的学习使用——modbus协议功能码2的解析

功能码2的功能是:读从机离散量输入信号的 ON/OFF 状态。可读取1~2000个连续的离散量输入状态,如果离散输入的数量个数不是8的整数倍,则用0填充最后数据字节的剩余位,功能码2的查询信息规定了要读的输入起始地址,以及输入信号的数量。

功能码2只能读取,不能写入,通常是拨码开关等离散信号。
下面通过modbus-poll和modbus-slave工具的进行演示

1、poll端设置:具体解释就不说了,可以详见功能码1的分析篇

 2、slave端设置:具体解释就不说了,可以详见功能码1的分析篇

  简要说明一下,从机地址是1,功能码设置为2,读取10个数量。主机每隔1s读取一次。

3、点击ok后,就可以通信了,如下图所示。

  4、可以在slave端进行数据更新,poll端就会接受到新的数据。如下动画所示:

 5、但是注意,poll端不允许设置的:modbus会提示非法操作。

 6、点击查询communication之后看到真实的hex通信数据,如下:

Tx:012-01 02 00 00 00 0A F8 0D
Rx:013-01 02 02 68 01 57 B8
Tx:014-01 02 00 00 00 0A F8 0D
Rx:015-01 02 02 68 01 57 B8
Tx:016-01 02 00 00 00 0A F8 0D
Rx:017-01 02 02 68 01 57 B8
Tx:018-01 02 00 00 00 0A F8 0D
Rx:019-01 02 02 68 01 57 B8
tx端的发送数据:

01(从机地址) 02(功能码02) 00(起始地址高位) 00(起始地址低位) 00(寄存器数高位)  0A(寄存器数低位)  F8(crc校验低位) 0D (crc校验高位)

rx的发送数据:

01 (从机地址)02(功能码02) 02(寄存器数为2个) 68(0110 1000) 01(0000 0001) 57(crc校验低位) B8 (crc校验高位)

字节数分析如下:

 总结:功能码2只能读取,不能写入,数据是根据位来保存的,因此通信效率比较高的。

 ps:sreentogif在win7上面不能运行,因此使用了gifcam,但是鼠标没有录制进去,不是很完美。

win10可以用sreentogif。

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11875368.html