zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    如何实现进程间的通信
    调试手记
    WinCE的一些忠告——UNICODE编码
    一道字符串复制的面试题目
    strcpy和strncpy区别
    关于#include头文件问题
    rs232串口通讯中,读串口与读端口的区别
    IP包过滤(转)
    小数点后截位问题
    一些函数
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11875368.html
Copyright © 2011-2022 走看看