Modbus通讯协议详细解释

Modbus通讯协议详细解释Modbus一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。先来简单分析一条MODBUS-RTU报文,例如:0106000100179804010600010017

大家好,又见面了,我是你们的朋友全栈君。

Modbus一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。

先来简单分析一条MODBUS-RTU报文,例如:01  06  00 01  00 17  98 04 
    01             06            00 01           00 17          98 04 
  从机地址        功能号          数据地址          数据         CRC校验

这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。

1、报文
   一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。

2、CRC校验
意义:例如上面的  98 04  是它前面的数据(01 06 00 01 00 17)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。

3、功能号
  意义:modbus 定义。见附录1。
  作用:指示具体的操作。

MODBUS-RTU
一、一个报文分析
先声明下我们的目的,我们是要两个设备通讯,用的是MODBUS协议。上面简单介绍了:“报文”“CRC校验”“功能号”。
在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如:

Modbus通讯协议详细解释

 

数组后面的注释,说明
OX[20]   代表是输出线圈,用功能码 0x01,0x05,0x0F 访问, 开头地址是 0 (这个后续说明)
IX[20]    代表是输入线圈,用功能码 0x02 访问,             开头地址是 1 (这个后续说明)
另外两个一样的道理。
注意:所谓的“线圈”“寄存器”就是“位变量”“16位变量”,不要被迷惑。之所以称“线圈”我觉得应该是对于应用的设备,MODBUS协议是专门针对485总线设备(例PLC)开发的。

1、主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:
    01             06            00 01           00 17          98 04 
  从机地址        功能号          数据地址          数据         CRC校验

假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:
            HoldDataReg[1]  =  0x0017;
MODBUS主机就完成了一次对从机数据的写操作,实现了通讯。

2、主机对从机读数据操作
主机进行读HoldDataReg[1] 操作,则报文是:
    01             03            00 01           00 01          D5 CA 
 从机地址        功能号          数据地址      读取数据个数       CRC校验
那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
返回内容:  
    01         03            02             0017          F8 4A
  从机地址   功能号     数据字节个数    两个字节数据    CRC校验
MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。

二、MODBUS报文模型

以上了解到了MODBUS的一帧报文是如何通讯的,其实每个报文的格式都基本一样的。

Modbus通讯协议详细解释

                             
这里两个缩略词以前不知道,但是现在要明白指的是什么,“ADU”“PDU”
ADU: 应用数据单元
PDU: 协议数据单元

三、MODBUS数据模型

 

Modbus通讯协议详细解释

 

 

Modbus通讯协议详细解释

  

四、MODBUS事务处理
  下列状态图描述了在服务器侧MODBUS事务处理的一般处理过程。

Modbus通讯协议详细解释

五、MODBUS请求与响应
  看MODBUS协议手册,中文第 10 页开始,英文第 24 页开始。手册非常详细举例说明了MODBUS协议各个功能号的请求与响应。 
modbus协议在单片机上实现过程

MODBUS 任务处理函数

Modbus通讯协议详细解释

函数中,RcvBuf 为串口接收缓冲区,如果接收了一个报文则,RcvBuf[0] 为从机地址,RcvBuf[0] 为MODBUS功能号。根据功能号做出响应,而具体的操作根据功能号在各自的函数中执行,相当于解析接收到的数据。

附录1:MODBUS-RTU功能码
 最常用功能码:
 下面“线圈”“寄存器”其实分别直的就是“位变量”“16位变量”
        01 (0x01)        读线圈 
        02 (0x02)        读离散量输入
        03 (0x03)        读保持寄存器
        04(0x04)         读输入寄存器
        05 (0x05)        写单个线圈 
        06 (0x06)        写单个寄存器
        15 (0x0F)        写多个线圈 
        16 (0x10)        写多个寄存器

Modbus通讯协议详细解释

附录2:CRC Generation

 

 

Modbus通讯协议详细解释

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157940.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月12日 下午4:00
下一篇 2022年7月12日 下午4:00


相关推荐

  • python线性回归算法「建议收藏」

    python线性回归算法「建议收藏」1.线性回归算法2.在Python中实现线性回归那我们如何在Python中实现呢?利⽤Python强⼤的数据分析⼯具来处理数据。Numpy提供了数组功能,以及对数据进⾏快速处理的函数。Numpy还是很多⾼级扩展库的依赖,⽐如Pandas,Scikit_Learn等都依赖于它。Scikit_Learn扩展库,这是⼀个机器学习相关的库。它提供了完善的机器学习⼯具箱,包括数据预处理、分类、回归、预测等。2.1安装sklearn⼯具本⾸先进⼊到虚拟环境cd~/Desktop/env_s

    2022年8月21日
    10
  • kmalloc 代码

    kmalloc 代码Kmalloc kmalloc do kmalloc cache alloc cache alloc cache alloc refill cache grow kmem getpages alloc pages exact node alloc pages nbsp include linux Slab def h

    2026年3月18日
    3
  • Android 从零开始(一)[通俗易懂]

    Android 从零开始(一)[通俗易懂]Activity在我以网页web角度来认为的:Activity就是界面Layout就是html布局java就是js进行各种dom数据操作style就是cssAndroidManifest.xml-清单文件也可以简称为「manifest文件」。清单文件非常重要,它告诉系统我们的app有哪些activity,用到了什么权限等等信息。如果要新建activity,需要在清单中注册。<applicationandroid:allowBackup=”true” and

    2022年6月16日
    29
  • 圆桌排序公式_大圆桌怎么坐

    圆桌排序公式_大圆桌怎么坐假设有来自 m 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 ri(i=1,2,…,m)。会议餐厅共有 n 张餐桌,每张餐桌可容纳 ci(i=1,2,…,n) 个代表就餐。为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。试设计一个算法,给出满足要求的代表就餐方案。输入格式第 1 行有 2 个正整数 m 和 n,m 表示单位数,n 表示餐桌数。第 2 行有 m 个正整数,分别表示每个单位的代表数 ri。第 3 行有 n 个正整数,分别表示每个餐桌的容量 ci。输

    2022年8月10日
    6
  • Fiddler的安装和使用教程(详细)

    Fiddler的安装和使用教程(详细)一 安装 1 fiddler 工具下载网址 http www telerik com download fiddler 2 运行 FiddlerSetup exe 一键完成安装 3 安装成功后点击关闭按钮 所选路径下多出一个 Fiddler 文件夹 4 运行 fiddler exe 二 Fiddler 的配置 1 Fiddler 的抓包原理 Fiddler 是以代理 web 服务器的形式工作的 它使用代

    2026年3月19日
    0
  • 《大型网站技术架构》读书笔记一:大型网站架构演化

    思维导图一、大型网站系统特点(1)高并发、大流量:PV流量巨大(2)高可用:7*24小时不间断服务(3)海量数据:文件数目分分钟XXTB(4)用户分布广泛:网络情况复杂(5)安全环境恶劣:

    2021年12月29日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号