首页 > 其他分享 >MODBUS简述

MODBUS简述

时间:2022-11-26 15:55:06浏览次数:37  
标签:Modbus 数据 校验 MODBUS CRC 简述 RTU ASCII

MODBUS简述

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。

Modbus可将不同厂商生产的控制设备可以连成工业网络,进行集中监控,是一种通用工业标准。Modbus是一个master/slave架构的协议,有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点,每一个slave设备都有一个唯一的地址。只有被指定为master节点的节点可以启动一个命令。所有的Modbus数据帧包含了校验码,保证传输的正确性。基本的ModBus命令能指令一个slave设备改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。

标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。也可以使用RS485甚至TCP传输!

RTU模式和ASCII模式

Modbus有两种传输模式,RTU(Remote Terminal Unit)模式和ASCII模式。TRU模式下的数据帧是源数据,效率高,是最常用的传输方式,而ASCII模式的数据帧源数据的ASCII码!在Modbus标准中,RTU是必须要求的,而ASCII是可选项,即作为一个Modbus通信设备可以只支持RTU,也可以同时支持RTU和ASCII,但不能只支持ASCII。
RTU模式

RTU模式下的数据帧格式如下所示
起始位 设备地址 功能代码 数据 CRC校验 结束符
T1-T2-T3-T4 8Bit 8Bit n个8Bit 16Bit T1-T2-T3-T4

消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。但由于没有起始位和结束位,协议要求消息帧的发送至少要有3.5个字符时间的停顿间隔!

8位二进制,十六进制数0...9,A...F
消息中的每个8位域都是两个十六进制字符组成每个字节的位
1个起始位
8个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
CRC(循环冗长检测)

ASCII模式

ASCII模式下的数据帧格式如下所示,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。
起始位 设备地址 功能代码 数据 LRC校验 结束符
1个字符 2个字符 2个字符 n个字符 2个字符 2个字符

消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔最长可达到1秒而不产生错误。

十六进制,ASCII字符0...9,A...F(注意是大写字符)
消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位
1个起始位
7个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域:LRC(纵向冗长检测)

两种模式数据格式的区别

发送同样的源数据,RTU和ASCII的区别如下。
源数据 RTU模式 ASCII模式
0x45 0x45

0x34 0x35

比如要发送0xFFFE,RTU模式下是直接发送这个数据的二进制bit流,而ASCII模式是发送这个数据的十六进制的字符!
0XFFFE
F F F E
0X46 0X46 0X46 0X45

将一个数据转换成ASCII(大写字符)的代码如下:
1
2

if(data < 10){data += '0';}
else {data += ('A'-10);}

校验方法
CRC校验

CRC即循环冗余校验(Cyclic Redundancy Check),是利用约定多项式对信道数据进行计算产生一定位数的校验码的一种信道编码技术,被广泛用于监测信道传输过程中是否误码。循环冗余校验码包括n位信息码和k位校验码。循环冗余校验码的字长为n+k,所以循环冗余校验码又称为(n+k,n)码。通常k位校验位紧跟在n位数据位的后面。这里的n位信息码可以用一个多项式M(x)表示,它的最高次为xn-1。此外还需要约定一个生成多项式G(x),G(x)表示的是一个长度位k+1的二进制码,它的最高次为xk。将M(x)乘以xk(相当于对信息码进行左移k位),再除以生成多项式G(x),得到的长度为k的二进制余数就是校验位。二进制的除法运算也是模2除法,其计算方法与逻辑异或一致,CRC码的计算方法可以表示为公式如下:
CRC = (M(x)·xk )⊕ G(x)
尽管理论上CRC校验原理的生成多项式G(x)和校验的数据长度n是任意的,但实际上,行业内规定了各种数据格式生成多项式的国际常用的CRC参数模型,其中MODBUS的多项式公式为x^{16} + x^{15} + x^2 + 1,校验码长度为16bit。

在使用中可以通过两种方式对数据进行校验,一种是直接计算法,另一种是查表法。如果内存不是非常有限,建议使用查表法。

关于CRC的更详细的内容点这篇博文。进行CRC校验计算工具点击这里。
LRC校验

纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验。它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。

具体算法如下:
1、对需要校验的数据(2n个字符)两两组成一个16进制的数值求和。
2、将求和结果与256求模。
3、用256减去所得模值得到校验结果(另一种方法:将模值按位取反然后加1)。
例如16进制数据:01 A0 7C FF 02
(16进制计算)  求和:01 + A0 + 7C + FF + 02 = 21E  取模:21E % 100 = 1E  计算:100 - 1E = E2
(10进制计算)  求和:01 + 160 + 124 + 255 + 02 = 542  取模:542 % 256 = 30  计算:256 - 30 = 226

LRC校验计算工具戳这里。

标签:Modbus,数据,校验,MODBUS,CRC,简述,RTU,ASCII
From: https://www.cnblogs.com/jiftle/p/16927579.html

相关文章

  • 简述五种开源NAS存储服务器--转
    存储对于公司来说是必不可少的:数据必须被存储、检索、共享和保护。下面小编为大家介绍一下5款开源的NAS存储服务器一、云计算云计算正在蓬勃发展,比任何云存储系统都要快......
  • 基于LSM树的存储机制简述
    下午听了关于MyRocks-PASV的研究讲座,很有意思所以学习了一下LSM树的一些简单的底层原理。现在整理一下我们都知道目前Key:Value型的数据库普遍较之关系型数据库有着更......
  • NModbus4项目4——数据的读写框架
    上位机与PLC之间进行数据读写时一般采用两种方式,一种是使用定时器进行读,一种是使用一个独立的线程进行读,但是无论使用哪种方式,都要求写优先级高于读,这里就涉及到读写状态......
  • 简述linux系统中软件包管理系统
    前几篇文章一一介绍了LINUX进程管理控制命令,详细介绍了静态查看ps命令和动态查看top命令,以及中断、停止命令在实际管理控制过程中的一些实践操作等这篇文章主要简单介绍下......
  • BL200PN耦合器Modbus RTU串口模块
    上电后,耦合器自动识别所有与之相连的I/O模块,并根据模块的类型、数据宽度和模块在节点中的位置创建内部本地过程映像。如果添加、更改或移除I/O模块,会建立新的过程映像,过......
  • NModbus4项目3——异步读写数据的方法
    使用NModbus4进行一部数据读取。以读寄存器数据和写寄存器数据为例,其他功能的使用方法类似。读寄存器数据:ushort[]datas=newushort[8];Task<ushort[]......
  • Modbus协议
    一、前言为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。二、定义Modubs协议是应用应用于电子控制器上的一种通用语言。三、数......
  • Modbus协议-使用串行接口的区别
    一、接口的电子特性1、RS232:传输电平信号接口的信号电平值较高(信号“1”为“-3V至-15V”,信号“0”为“3至15V”),易损坏接口电路的芯片,又因为与TTL电平(0“<0.8v”,1“>2......
  • 转速测量脉冲信号采集 Modbus模块 编码器脉冲计数器pnp/npn转485
    特点:●编码器解码转换成标准ModbusRTU协议●可用作编码器计数器或者转速测量●支持编码器计数,可识别正反转●也可以设置作为2路独立DI高速计数器●计数值支持断电自动......
  • 简述 flux 思想?(必会)
    简述flux思想?(必会)点击查看代码1、用户访问View2、View发出用户的Action3、Dispatcher收到Action,要求Store进行相应的更新4、Store更新后,发出一个"change......