Modbus 介绍

协议介绍

MODBUS协议是一种消息传递结构,广泛用于智能设备间建立主从通信。一个MODBUS消息从主机发给从机,包含了从机地址、命令(例如,读寄存器或者写寄存器)、数据、校验码(LRC或者CRC)。

由于Modbus协议只是一种消息传递结构,因此它独立于底层物理层。 传统上使用RS232,RS422或RS485实现。

查询

查询中的功能码告诉被寻址的从机设备要执行哪种类型操作。从机设备完成功能所需要的所有信息,都包含在了数据字节中。举个例子,功能码03将会向从机设备请求读取保持寄存器,并且返回他们的内容。数据段必须包含寄存器的起始地址和寄存器的个数。校验段为从机设备提供了一种验证消息内容完整性的方法。

应答

如果从机设备做出一个正常应答,功能码将会和查询中的功能码一样。数据字节包含从从机收集的数据,比如寄存器的值或状态。如果发生了一个错误,功能码将会被修改,用来表明这是一个错误应答。而且,数据字节中会包含描述错误内容的代码。校验码可以让主机检查消息内容的有效性。

在标准Modbus网络,控制器可以设置为ASCII或者RTU传输模式。

ASCII模式

在一个Modbus网络中,当控制器设置为ASCII(American Standard Code For Information Interchange)模式时,每一个8位的字节被当成两个ASCII码发送。这个模式的主要优点是它允许字符之间发生长达一秒的时间间隔而不会导致错误。

编码系统

十六进制ASCII可打印字符0...9, A...F

字节的各个位

1位起始位

7位数据位,最低有效位先发送

1位寄偶校验位,无校验时该位不存在

如果使用奇偶校验位,则1位停止位。如果没有使用奇偶校验位,则2位停止位

错误检查

纵向冗余检查(LRC)

RTU模式

在一个Modbus网络中,当控制器设置为RTU(Remote Terminal Unit)模式时,每一个8位字节包含2个4位的十六进制字符。这种模式的主要优点是,对于相同的波特率,其更大的字符密度可以比ASCII带来更好的数据吞吐量。 每条消息必须以连续的流方式进行传输。

编码系统

8位二进制,十六进制0...9,A....F

两个16进制的字符包含在一个8位的字节里面

字节的各个位

1位起始位

8位数据位,最低有效位先发送

1位奇偶校验位,无校验时该位不存在

如果使用奇偶校验位,则1位停止位。如果没有使用奇偶校验位,则2位停止位

错误检查

循环冗余校验(CRC)

ASCII帧

ASCII码模式,消息以冒号(:)字符(十六进制是0x3A)开头,以回车换行(十六进制是0x0D和0x0A)结束。

所有其他字符允许传输的字符时十六进制的0...9,A...F。为了寻找冒号,网络设备不断地监听网络总线。当收到一个时,每一个设备将解码接下来字段(地址字段)来确认它是否是被寻址的设备。

消息中的字符之间可以经过最多一秒的间隔。 如果出现更大的间隔,则接收设备会假定发生了错误。 典型的消息帧如下所示。

RTU帧

RTU模式,消息以至少3.5个字符时间的静默间隔开始。在网络上,一种很容易实现的方式是使用波特率的倍数字符时间(就像下图展示的T1-T2-T3-T4)。第一个传输的字段是设备地址。

所有其他字符允许传输的字符时十六进制的0...9,A...F。为了寻找冒号,网络设备不断地监听网络总线。当接收到第一个字段(地址字段),每一个设备解码这个设备地址来确认它是否是被寻址的设备。

在传输的字符之后,至少需要3.5个字符时间的间隔来标记消息的结束。 此间隔后可以开始新消息。

整个消息帧必须作为连续流传输。在消息帧全部传输完前,如果静默间隔超过1.5个字符时间,则接受设备刷新当前收到的不完整消息。并且,接下来的一个字节将会是新消息的地址字段。

类似的,如果新消息在前一个消息结束之前来到(就是早于前一个消息的3.5个结束静默时间),接收设备将会认为前一个消息还没有结束。这将导致一个错误。因为最终CRC字段中的值将会对这个组合信息无效。典型的消息帧如下。

地址字段

消息的地址字段包含两种格式,一种是2个字符的ASCII,另一种是8位的RTU。独立的从机设备地址是从1到247。

功能字段

功能码字段告诉从机设备执行什么功能。

Modbus poll支持以下功能:

1. 读线圈状态

2. 读输入状态

3. 读保持寄存器

4. 读输入寄存器

5. 写单个线圈

6. 写单个寄存器

15. 写多个线圈

16. 写多个寄存器

22. 掩码写寄存器

23. 读/写寄存器

数据段包含请求或者发送的数据。

错误校验段

在标准Modbus网络中,广泛使用者两种错误校验方式。采用的校验方式,决定了错误校验段中的内容。

ASCII

当消息帧使用ASCII模式,错误校验码字段包含两个ASCII码字符。通过对消息内容进行纵向冗余检查(LRC)计算,计算出的结果就是错误校验码,不对消息头的冒号和结束符回车换行进行计算。

LRC字符在回车换行字符前添加到消息帧中。

RTU

当消息帧使用RTU模式,错误校验码为16位,由两个8位组成。通过对消息内容进行循环冗余计算(CRC),得到的结果就是错误校验码。CRC字段是消息的最后一个字段。低位CRC字节先添加到消息中,然后是CRC字段的高字节。消息中最后一个需要发送的字节时CRC高位字节。

协议crc计算_从零了解modbus协议 第三篇相关推荐

  1. can协议crc计算_详解CAN/CAN FD通信中的循环冗余校验(CRC)方法

    数据校验是为保证数据的完整性进行的一种验证操作.CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据. 在现场总线通信和控制的实际应用中,工业应用环境 ...

  2. can协议crc计算_基于CAN总线的CRC校验码的原理与实现

    基于CAN总线的CRC校验码的原理与实现 王鹏 [摘 要]CAN总线又称为控制器局域网技术,属于工业现场总线,应用范围很广.CAN系统中通常 采用反馈重发机制对通信过程进行差错控制.当接收端反馈给发送 ...

  3. modbus串口调试工具_用modscan测试modbus协议离散仪表数据方法

    本文主要介绍离散仪表数据采集方法,涉及的离散仪表有电能表(97规约和07规约).皮带秤计量表.水表流量计等.其中电表数据采集较为简单,知道电表的规约,就知道了电表的波特率(这里97规约的电表波特率为1 ...

  4. java 正负号数值比较_从零学java笔录-第10篇 数据类型(四)

    从零学java笔录-第10篇 数据类型(四) 凯哥Java 凯哥java 本文是<凯哥陪你学系列之java基础篇> 感谢: 感谢网友:志远162.在上一篇中对错误指出. 在上篇中模运算正负 ...

  5. can协议crc计算_CAN总线的升级版——CAN FD简介

    为什么需要CAN FD? 在汽车行业,为什么需要CAN FD? 1. 原因主要是因为汽车功能越来越多,越来越复杂,传统的CAN总线(CAN2.0)的负载率越来越高,甚至负载率高达95%. 2. 因为传 ...

  6. can协议crc计算_CAN总线通信的CRC校验方法

    数据校验是为保证数据的完整性进行的一种验证操作.CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据. 在现场总线通信和控制的实际应用中,工业应用环境 ...

  7. 协议crc计算_CRC校验原理及代码实现(一)

    网上的有关CRC的原理和代码实现的文章,数不胜数,但比较全的好像还没看到:此文是集百家之智慧,加之自己的使用经验和理解汇聚此文,让你快速理解和使用CRC,当然不足之处欢迎评论区吐槽. 1. CRC是什 ...

  8. 均值滤波计算_从零学美颜算法保边滤波

    作者:天儿哥 有了前面的照片处理基础,这一篇开始讲美颜算法. 一.滤波为什么要保边? 人像美颜技术中,最重要的技术之一就是磨皮,没有磨皮谁还敢自拍,谁还敢直播? 磨皮本质上就是对图像进行滤波,比如前面 ...

  9. rrpp协议如何修改_产品技术-RRPP技术介绍-新华三集团-H3C

    RRPP简介 RRPP(Rapid Ring Protection Protocol,快速环网保护协议)是一个专门应用于以太网环的链路层协议.它在以太网环完整时能够防止数据环路引起的广播风暴,而当以太 ...

最新文章

  1. Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262
  2. JWT令牌创建和解析讲解
  3. java url getfile_java url构成及get属性方法解释
  4. 《鸟哥的Linux私房菜--基础篇》学习
  5. 学计算机之路写一篇作文,我的学习之路作文(2篇)
  6. JFrog Container Registry 搭建Docker镜像仓库 (tar.gz 版本)
  7. 第5章 MySQL高可用架构设计
  8. 手机电子商务进入黄金时期 主机WAP功能受重视
  9. itextpdf 更换字体
  10. 多模态融合(三)MFAS: Multimodal Fusion Architecture Search
  11. 算法初步(一)寻找最小正整数
  12. 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
  13. 结构性用工荒也是用工荒
  14. 内容交付网络(CDN)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 【Errors】Errors during downloading metadata for repository ‘AppStream‘:
  16. 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
  17. wux tab 颜色扩展
  18. Win11 如何开启休眠功能
  19. 异常中的异常——借助系统异常处理特例实现匪夷所思的漏洞利用
  20. 本科生学习GNSS算法 中级教程(三)- rtklib多系统多频单点定位算法 - 多频残差计算以及新增配置

热门文章

  1. 第二届「机器智能前沿论坛」强势来袭,众多机器学习大咖邀你共话AI未来!
  2. pytorch基本数学运算:加法 减法 乘法 除法 指数 对数 绝对值
  3. javax.mail.AuthenticationFailedException: 535 authentication failed的问题
  4. FastDFS 学习笔记
  5. linux该专接本还是工作_工作还是考研,我究竟该怎么选?
  6. mybatis-day1入门案例
  7. 牛客题霸 NC15 求二叉树的层序遍历
  8. PHP——PHP读取MySQL数据库中文乱码解决方案
  9. Memory Banks
  10. 计算机网络(谢希仁第八版)第四章:网络层