Modbus-RTU协议模式学习

目录

1.Modbus定义

2.Modbus协议组成

3.协议定义

4.协议定义例子

5.报文定义

6.Modbus-RTU报文简单分析

7.CRC校验知识点

 8.功能号

9.采用Modbus协议在两个设备间建立通讯

10.Modbus报文模型

11.Modbus数据模型

12.Modbus事务处理

13.Modbus请求和响应

内容

1.Modbus定义:
   是一种串行通信协议,一开始是为使用PLC(即可编程逻辑控制器)设备通信而发表,已成为工业上通信协议的标准,是工业电       子设备间常用连接方式。
2.Modbus协议组成:
   包括RTU、ASCII、TCP三种模式,其中RTU模式(即Modbus-RTU)最常用。
3.协议定义:
   所谓协议,就是互相之间的约定。如果不让别人知道那就是暗号。
4.协议定义例子:
   协议: "A"  --  “LED灭”

               "B"  --  "报警"

               "C"  --  "LED亮"

    单片机接收到"A"控制一个LED灭,单片机接收到"B"控制报警,单片机接收到"C"控制一个LED亮。

    总结:当收到已定义的协议中对应指令(比如:A、B、C等)时就执行协议中相应的动作。

5.报文定义:

   一个报文就是一帧数据,一个数据帧就是一个报文,是指一串完整的指令数据(比如下面的一串数据" 01  16  00  01  00  17  98     04")。

6.Modbus-RTU报文简单分析:

   首先,给出报文如下:

   01  16  00  01  00  17  98  04

   然后,分别解释报文中数字的含义:

   01 --> 从机地址;16 -->功能号;(00  01) -->数据地址;(00  17) -->数据;(98  04) -->CRC校验。

   接着,总结:

   上述报文的大致意思:把数据 0x0017(十进制:23)写入1号从机地址 0x0001数据地址。

7.CRC校验知识点:

   7-1.定义:

   CRC是循环冗余校验码,简称循环码,是一种具有检错、纠错能力的校验码。

   7-2.原理:(为方便理解该原理通过具体实例说明,这里参考百度百科)

   假设约定的生成多项式二进制表示为"10011"(共5位),然后假设要发送数据序列的二进制为"101011"(共6位),接着在要发送数据的后面加4个0且二进制表示为"1010110000"(共10位),用已约定好生成多项式二进制(即"10011")去除乘积1010110000(共10位),按"模2算法"(注意不是直接二进制相除)求得余数比特序列为"0100",接着将余数添加到要发送数据之后得到真正要发送数据的比特流"1010110100"(共10位其中前6位为原始数据后4位为CRC校验码)。

   上面讲的是发送端所做工作流程,下面讲接收端。

   接收端在接收到带CRC校验码的数据后,如数据在传输过程中未出错将一定能被(和发送端)已约定好的生成多项式(即"10011")整除,如数据在传输过程中出错利用已约定好的生成多项式(即"10011")就不会整除。

   7-3.作用:

   在数据传输过程中可能数据会发生错误,CRC校验检测接收的数据是否正确。比如主机发出"01 06 00 01 00 17 98 04",那么从机接收到后要根据"01 06 00 01 00 17"再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如不相等则说明数据传输有错误。(理解:即便在最终看来从机是重复计算CRC校验值但根据CRC校验内部机制也必须这么做)

 8.功能号:

    意义:这里只讲Modbus-RTU的最常用功能码,如下:

     01(0x01) --> 读线圈 ;02(0x02) --> 读离散量输入;03(0x03) --> 读保持寄存器;04(0x04) --> 读输入寄存器;

     05(0x05) --> 写单个线圈;06(0x06) --> 写单个寄存器;15(0x0F) --> 写多个线圈;16(0x10) --> 写多个寄存器。

     总结:上述讲到的"线圈"和"寄存器"分别指的是"位bit"和"内存大小2个字节的变量",后面出现这两个概念也是同样意思。

9.采用Modbus协议在两个设备间建立通讯:

    9-1.首先,目光转向单片机(以PLC设备为例)在其中拿出部分内存(RAM)进行两个设备(即与PC)通讯,例如:

    数组后的注释说明:0X[20] --> 输出线圈,用功能码0x01、0x05、0x0F访问,开头地址是0(这个后面解释);

                                    1X[20]  --> 输入线圈,用功能码0x02访问,开头地址是1(后面解释)。

     另外两个同样道理。

     9-2.然后,要实现主机对从机写数据操作:

     如果单片机接收到一个报文那么就对报文进行解析并执行相应处理。以前面讲的报文为例,假设本机地址是1,那么单片机接       收到这串数据根据已约定好的生成多项式计算CRC校验判断数据是否正确,如判断数据无误则结果是:                                         HoldDataReg[1]=0x0017;

      就这样,Modbus主机就完成一次对从机数据的写操作即实现通讯。

      接着,要实现主机对从机读数据操作:

      主机进行读HoldDataReg[1]操作,则报文是:"01  03  00  01  00  01  D5  CA",其中:01 --> 从机地址;03 --> 功能号;

      (00  01) --> 读取数据个数;(D5  CA) --> CRC校验。

      那么单片机接收到这串数据根据已约定好的生成多项式计算"CRC校验"判断数据是否正确,如判断数据无误则结果是: 返回        信息给主机且返回信息的格式为:"01  03  02  00  17  F8  4A",其中01 --> 从机地址;03 --> 功能号;02 --> 数据字节个数;

      (00  17) --> 两个字节数据;(F8  4A) --> CRC校验。

      就这样,Modbus主机就完成一次对从机数据的读操作即实现通讯。

  10.Modbus报文模型:

        以上已了解Modbus一帧报文的通讯。且每个报文格式基本一致。如下图:

        

        modbus 入门篇,详细介绍(值得收藏)

 

           这里的"ADU"指:应用数据单元;这里的"PDU"指:协议数据单元。    

    11.Modbus数据模型

         modbus 入门篇,详细介绍(值得收藏)

    

            modbus 入门篇,详细介绍(值得收藏)

    12.Modbus事务处理:

        下列状态图描述了在服务器端Modbus事务处理的一般处理过程:

           

         modbus 入门篇,详细介绍(值得收藏)

    13.Modbus请求和响应:

        看Modbus协议手册(链接:http://www.360doc.com/document/19/0403/08/63055906_826089114.shtml),中文第10页开              始。手册详细举例说明了Modbus协议各个功能号的请求和响应。

        

 

 

     

     

 

   

   

       

    

    

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Modbus-RTU通信协议是一种用于控制器间通信的协议。它定义了消息结构和公共格式,描述了一个控制器请求访问其他设备的过程。 Modbus-RTU协议使用串行通信,通过在RTU协议上加上MBAP报文头和CRC校验码来实现数据传输。 这种协议通常用于支持Modbus RTU的设备之间的通信。 当控制器只支持以太网总线或为了方便管理而使用Modbus TCP与支持Modbus RTU的设备配合使用时,可以使用一种方案将Modbus TCP数据和Modbus RTU数据相互转换。这种转换可以通过实际的模块来实现,并应用到项目中。 这样,就可以实现Modbus-RTUModbus TCP之间的通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Modbus 通讯协议RTU传输模式)](https://blog.csdn.net/u011041241/article/details/109240555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Modbus-RTU通信协议](https://download.csdn.net/download/shushengzheng/87774948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值