Modbus通信协议学习

Modbus 通讯是工业上用的比较广泛的通讯协议,它包含Modbus TCP ,RTU,ASCII,在日常的工作中我们用到的并比较多的是ModbusRTU.ModbusRTU与ModbusAscii均支持RS485通信协议。

1.这里介绍下ModbusTcp与ModbusRTU的区别在哪里:

     1.1 通信硬件连接的区别:

            RTU依托的的工业串口连接,例如RS485,TCP则依托的以太网传输。

      1.2 通信协议的报文的区别,下文会列举。

2. 协议

    协议:就是双方的通信约定,我需要以那种格式,及格式的内容代表的何种意思能够达成我们双方的沟通。

    MoubusRTU 通信报文格式:

    报文:简单的说就是我们发送的一连串完整的数据,就是我们发送的一帧数据,可以把他们叫做报文。

    CRC校验

          其实就是检测发送的报文与接收方收到的报文是否一致,如果一直就发送给成功,否则代表发送有误,具体以的CRC如何实现检验的呢?就是将前面的一连串的报文进行    累加求和得到一个数据,再将高低位分别存放到CRC校验的高低八位上,就是先了CRC检验(TCP没有CRC校验)。

    报文格式:那报文格式到底是长个啥样子呢?下面来进一步学习。

                     Eg:  

                     01    06    00 01    0017    98 04


           那上面的这一长串的数据代表什么意思呢?其实这就是RTU的报文格式及数据,下面一一列举所带代表的意思;

           01   从机的地址,也就是你要往哪台设备上发送数据的那台设备的地址。

           06   功能号,意思是你要对这台从机做何种操作,读线圈/寄存器?写线圈/寄存器?注意一点的是这个线圈与寄存器的区别,是个啥玩意,其实就是对位变量与16位变量的操作。

     00 01 操作的寄存器地址,代表往0001地址上操作。

           00 17  向寄存器上写入的数据,数据就是16位数据00 17.

           98 04  CRC 校验(将 01 06 00 01 00 17累加后得到的16位数据98 04)

   说到这大家对报文格式有了初步的认识了,下面列举下到底有多少功能码?他们分别的作用是什么?

   功能码列举

                  0x01  读线圈状态

                  0X02  读取输入状态

                  0x03  读保持寄存器

                  0x04  读输入寄存器

                  0x05  读取单个线圈

            0x06  写单个寄存器

              0x0F  写多个线圈

                  0x10   写多个寄存器

 

 

   ModbusTCP与RTU区别与联系可以参考如下链接https://wenku.baidu.com/view/43b10bc26294dd88d0d26b8e.html(来自百度文库)本文不做赘述

 

上一篇:CRC循环冗余校验码


下一篇:CRC源码生成工具