Modbus通讯协议RTUASCIITCP详细介绍完整版

合集下载

Modbus协议讲解

Modbus协议讲解

Modbus协议讲解一、概述Modbus协议是一种通信协议,用于在自动化领域中传输数据。

它是一种简单且广泛应用的协议,被用于连接不同设备和系统,如工业控制系统、仪器仪表和数据采集设备等。

本文将详细讲解Modbus协议的基本原理、通信方式以及数据传输格式等内容。

二、Modbus协议的基本原理Modbus协议基于主从架构,其中主设备负责发起通信请求,而从设备则负责响应请求并提供数据。

通信可以通过串行或以太网等方式进行。

三、Modbus协议的通信方式1. Modbus RTU通信方式Modbus RTU是一种串行通信方式,使用二进制编码进行数据传输。

在Modbus RTU通信中,每个数据帧由起始位、从站地址、功能码、数据和校验位组成。

2. Modbus ASCII通信方式Modbus ASCII也是一种串行通信方式,但使用ASCII编码进行数据传输。

与Modbus RTU相比,Modbus ASCII通信方式更易于调试,但传输速度较慢。

3. Modbus TCP通信方式Modbus TCP是一种基于以太网的通信方式,使用TCP/IP协议进行数据传输。

与串行通信方式相比,Modbus TCP具有更高的传输速度和更大的通信距离。

四、Modbus协议的数据传输格式1. 寄存器地址Modbus协议使用寄存器地址来标识设备中的数据。

寄存器地址可以是输入寄存器(IR)、保持寄存器(HR)、离散输入寄存器(DI)或线圈寄存器(CO)。

2. 功能码功能码用于指定通信请求的类型。

常见的功能码包括读取单个寄存器(03H)、写入单个寄存器(06H)和读取多个寄存器(10H)等。

3. 数据格式Modbus协议支持多种数据格式,如16位整数、32位整数、浮点数等。

数据格式的选择取决于具体的应用需求。

五、Modbus协议的应用场景1. 工业控制系统Modbus协议广泛应用于工业控制系统中,用于实现设备之间的数据交换和控制命令传输。

modbus rtu和modbus ascii命令示例和传输原理

modbus rtu和modbus ascii命令示例和传输原理

modbusrtu和modbusascii命令示例和传输原理在工业自动化和物联网领域,Modbus协议是一种广泛使用的通信协议。

它支持多种数据传输模式,包括ModbusRTU和ModbusASCII。

在这篇文章中,我们将详细介绍ModbusRTU和ModbusASCII的命令示例以及它们的传输原理。

一、ModbusRTU命令示例和传输原理ModbusRTU是一种基于RS-485串行通信协议的模式,它支持远程终端(RemoteTerminal)数据的传输。

ModbusRTU通信使用的是波特率9600,数据位8,无校验,停止位1的配置。

在这种模式下,Modbus命令通常以RTU帧的形式进行传输,包括从站地址、功能代码和数据部分。

以下是一个简单的ModbusRTU命令示例:地址0x03(功能码)0x01(起始地址)0x03(数量)命令流程:1.发送方将起始地址和数量放入数据区,并将地址和功能码一起打包成RTU帧发送。

2.接收方接收到数据后,解析出起始地址和数量,并根据功能码执行相应的操作。

3.操作完成后,接收方将结果数据打包成RTU帧并发送回发送方。

ModbusRTU的优势在于其适用于远距离传输和大批量数据传输,因此在工业自动化系统中应用广泛。

然而,由于其传输速率较慢,且对错误较为敏感,因此在一些对实时性要求较高的场景中,可能需要考虑其他通信协议。

ModbusASCII是一种基于串行通信协议的模式,它支持ASCII码的文本数据传输。

在这种模式下,Modbus命令通常以文本形式进行传输,包括从站地址、功能代码和数据部分。

每个字符都被编码为ASCII 码,并通过串行线路传输。

以下是一个简单的ModbusASCII命令示例:地址0x03(功能码)数据0x010x020x03......命令流程:1.发送方将数据按照ASCII码编码后,按照ModbusASCII的格式打包成文本数据,并通过串行线路发送。

2.接收方接收到数据后,解析出ASCII码对应的字符,并根据功能码执行相应的操作。

Modbus协议概念最详细介绍

Modbus协议概念最详细介绍

Modbus协议概念最详细介绍★⼀⽂认识Modbus协议;”1 什么是Modbus?2 主从模式3 协议的分类3.1 Modbus ASCII3.2 Modbus RTU3.3 Modbus TCP3.4 Modbus Plus4 libmodbus5 freemodbus6 总结1 什么是Modbus?Modbus是Modicon(施耐德)公司于1979年开发的串⾏通信协议。

它最初设计⽤于公司的可编程逻辑控制器(PLC)。

Modbus是⼀种开放式协议,⽀持使⽤RS232/RS485/RS422协议的串⾏设备,同时还⽀持调制解调器。

它的简单性以及制造商可以免费将其纳⼊其产品的事实使其成为连接⼯业电⼦设备的最流⾏的⽅法。

Modbus⽐其他通信协议使⽤的更⼴泛的主要原因有以下⼏点:公开发表并且⽆著作权要求;易于部署和维护;对供应商来说,修改移动本地的⽐特或字节没有很多限制;Modbus通过设备之间的串⾏线进⾏数据传输。

最简单的设置是使⽤⼀根串⾏电缆连接两个设备(主设备和从设备)上的串⾏端⼝。

数据以称为⽐特的1和0的序列发送。

每个位都作为电压发送。

0被发送为正电压,1被发送为负电压。

如下图所⽰;在这⾥插⼊图⽚描述2 主从模式Modbus解决了通过串⾏线路在电⼦设备之间发送信息的问题。

该协议在遵循该协议的体系结构中实现主/从模型。

Modbus主站(Master)负责从其他设备(Slave)请求信息。

标准Modbus⽹络中有⼀个Modbus主站。

具体如下图所⽰;主设备向从设备请求信息,最多⼤约可达到240个 . 每个从设备都有⾃⼰唯⼀的从设备地址标识(Slave Address)。

除了从从设备请求信息之外,主设备还可以写⼊从设备的内部寄存器。

3 协议的分类Modbus的应⽤⼗分⼴泛,特别是在⼯业控制领域,具体如下图所⽰;我们可以看到最常⽤Modbus协议总共有以下四种:Modbus ASCII, Modbus RTU, Modbus Plus,Modbus TCP;具体如下图所⽰;3.1 Modbus ASCII当设备设置为使⽤ASCII(美国信息交换标准代码)模式在MODBUS串⾏线上进⾏通信时,消息中的每个8位字节将作为两个ASCII 4位字符发送。

MODBUS协议详细讲解

MODBUS协议详细讲解

MODBUS协议详细讲解MODBUS协议是一个常用的工业领域通信协议,用于在不同设备之间进行数据传输和通信。

它具有简单、易于实现和可靠的特点,被广泛应用于现代工业自动化系统中。

一、MODBUS协议的基本原理MODBUS协议使用主从结构进行通信,其中主机通常是一个上位机(如计算机),而从机则是各种设备(如传感器、控制器等)。

主机通过发送请求命令来获取或修改从机中的数据,而从机则通过相应命令来响应主机的请求。

这种简单的请求-响应机制使得MODBUS协议非常易于理解和实现。

二、MODBUS协议的消息格式1. MODBUS RTU格式:MODBUS RTU格式是MODBUS协议中最常用的一种格式。

它使用二进制编码,每个字节之间不使用分隔符。

一个MODBUS RTU消息包括以下几个部分:- 从机地址:指定要操作的从机设备- 功能码:表示执行的操作类型(读取数据、写入数据等)- 数据域:包含具体的数据信息- CRC校验:用于检测数据的完整性2. MODBUS ASCII格式:MODBUS ASCII格式使用ASCII码来表示消息,相比RTU格式更容易诊断和调试。

它与RTU格式相比,消息包含的信息量更大,但传输效率较低。

三、MODBUS协议的功能码在MODBUS协议中,功能码用于指示主机要执行的操作类型,常用的功能码包括:- 读取线圈状态(功能码01)- 读取离散输入状态(功能码02)- 读取保持寄存器(功能码03)- 读取输入寄存器(功能码04)- 写单个线圈(功能码05)- 写单个寄存器(功能码06)- 写多个寄存器(功能码16)四、MODBUS协议的应用领域MODBUS协议被广泛应用于工业自动化系统中,包括以下几个方面:1. 监控和控制:MODBUS协议可以用于监控和控制设备的状态和操作。

2. 数据传输:MODBUS协议支持在不同设备之间传输数据,实现数据的共享和交换。

3. 设备管理:MODBUS协议可用于管理和配置各种设备,例如设备的参数设置和固件更新等。

Modbus通讯协议详解 (2)

Modbus通讯协议详解 (2)

Modbus通讯协议详解协议名称:Modbus通讯协议详解一、引言Modbus通讯协议是一种常用的工业自动化通讯协议,广泛应用于工业控制系统中。

本协议详解将介绍Modbus通讯协议的基本原理、通讯方式、数据帧格式以及常见应用场景等内容,旨在帮助读者全面理解和掌握该协议。

二、Modbus通讯协议概述Modbus通讯协议是一种基于主从架构的串行通讯协议,用于实现设备间的数据交换。

该协议支持多种物理层接口,如串口、以太网等,可实现不同设备之间的通讯。

三、通讯方式Modbus通讯协议主要有两种通讯方式:RTU和ASCII。

RTU方式使用二进制编码进行数据传输,具有较高的传输效率;ASCII方式使用ASCII码进行数据传输,具有较好的可读性。

根据实际需求,可以选择合适的通讯方式。

四、数据帧格式Modbus通讯协议的数据帧格式如下:1. RTU方式:- 起始位:1个起始位,用于标识数据帧的开始。

- 设备地址:1个字节,用于标识通讯的设备。

- 功能码:1个字节,用于标识通讯的功能。

- 数据域:N个字节,用于传输数据。

- CRC校验:2个字节,用于校验数据的完整性。

- 结束位:1个结束位,用于标识数据帧的结束。

2. ASCII方式:- 起始符:1个起始符“:”,用于标识数据帧的开始。

- 设备地址:2个字符,用于标识通讯的设备。

- 功能码:2个字符,用于标识通讯的功能。

- 数据域:N个字符,用于传输数据。

- LRC校验:2个字符,用于校验数据的完整性。

- 结束符:2个字符“\r\n”,用于标识数据帧的结束。

五、常见应用场景Modbus通讯协议广泛应用于工业控制系统中,常见的应用场景包括:1. 监控系统:通过Modbus通讯协议,实现对工业设备的数据监控和远程控制,提高生产效率和安全性。

2. 仪器仪表:将仪器仪表与上位机进行通讯,实现数据的采集和分析,为生产决策提供依据。

3. 自动化控制:通过Modbus通讯协议,实现对生产线的自动化控制,提高生产效率和质量。

Modbus通讯协议详解

Modbus通讯协议详解

Modbus通讯协议详解一、引言Modbus通讯协议是一种常用于工业控制系统中的通信协议,它基于主从结构,用于实现不同设备之间的数据交换。

本文将详细介绍Modbus通讯协议的基本原理、通信方式、数据格式以及常见应用场景。

二、协议原理Modbus通讯协议是基于串行通信的协议,它使用简单的请求/响应模式进行数据交换。

协议包括两种通信方式:Modbus ASCII和Modbus RTU。

Modbus ASCII使用ASCII码表示数据,而Modbus RTU使用二进制码表示数据。

协议规定了数据的传输格式、通信命令、错误检测等。

三、通信方式1. Modbus ASCII通信方式Modbus ASCII通信方式使用ASCII码表示数据,每个字节使用两个ASCII字符表示,其中包括一个校验和。

通信过程中,主站发送请求命令,从站接收并处理请求,然后从站发送响应。

请求和响应之间使用回车换行符进行分隔。

2. Modbus RTU通信方式Modbus RTU通信方式使用二进制码表示数据,每个字节使用8位二进制表示。

通信过程中,主站发送请求命令,从站接收并处理请求,然后从站发送响应。

请求和响应之间使用帧间隔进行分隔。

四、数据格式1. Modbus ASCII数据格式Modbus ASCII数据格式由起始字符、从站地址、功能码、数据区、校验和和结束字符组成。

起始字符是冒号,结束字符是回车换行符。

校验和是通过对除起始字符和校验和本身外的所有字符进行异或运算得到的。

2. Modbus RTU数据格式Modbus RTU数据格式由从站地址、功能码、数据区、CRC校验和组成。

CRC校验和是通过对从站地址、功能码和数据区的所有字节进行CRC校验运算得到的。

五、常见应用场景Modbus通讯协议广泛应用于工业自动化领域,常见的应用场景包括:1. 监控系统:通过Modbus通讯协议,可以实现对各种传感器、仪表的数据采集和监控。

2. 控制系统:Modbus通讯协议可用于实现对各种执行器、控制器的控制和调节。

Modbus的RTU、ASCII、TCP傻傻搞不清楚?一文全解读

Modbus的RTU、ASCII、TCP傻傻搞不清楚?一文全解读今天来聊一聊Modbus,先看看今天的主要内容:1、术语解读2、背景3、协议原理4、传输方式5、Modbus RTU与Modbus ASCII有什么区别6、Modbus TCP及其注意点7、功能码作用8、Modbus协议安全分析01术语解读校验码:校验码通常是一组数字的最后一位,由前面的数字通过某种运算得出,用以检验该组数据的正确性。

代码作为数据在向计算机或其它设备进行输入时,容易产生输入错误,为了减少这种输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校验码。

常用的校验有:累加和校验SUM、字节异或校验XOR、纵向冗余校验LRC、循环冗余校验CRC……离散量输入:主要用来读取单个位的数据,如IO的状态;线圈:开关输出信号,主要用来写入单个位的数据,与离散量构成组成对位的操作;输入寄存器:主要用来读取16位,也就是两个字节的数据;保持寄存器:主要用来写入16位的数据;PLC:可编程逻辑控制器,是一种采用一类可编程的存储器,用于其内部存储程序和执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。

串口通信:随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要。

这里所说的通信是指计算机与外界的信息交换。

因此,通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。

由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此特别适合于远距离传输。

对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。

在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各 CPU 之间的通信一般都是串行方式。

所以串行接口是微机应用系统常用的接口。

详解Modbus协议的RTU帧和ASCII帧(2)

详解Modbus协议的RTU帧和ASCII帧(2)前面已经分析过RTU帧和ASCII帧的报文区别,细心的朋友应该会发现在两种不同的报文传输模式下都有一个共同的组成部分——差错校验。

这个差错校验在RTU模式和ASCII模式下也不是不相同的。

看下面的对比:RTU模式的差错校验:ASCII模式的差错校验:总而言之,RTU模式下用的是CRC校验,ASCII模式下用的是LRC 校验。

下面会说明这两者不同的校验方式是怎么实现的。

1、RTU模式的CRC校验在RTU 模式中基于循环冗余校验( CRC -- Cyclical RedundancyChecking) (算法)的错误检验域。

CRC 域检验整个报文的内容。

不管报文有无奇偶校验,均执行此检验。

CRC 包含由两个8 位字节组成的一个16 位值,作为报文的最后的域附加在报文之后。

计算后,首先附加低字节,然后是高字节。

CRC高字节为报文发送的最后一个子节。

附加在报文后面的CRC 的值由发送设备计算。

接收设备在接收报文时重新计算CRC 的值,并将计算结果于实际接收到的CRC 值相比较。

如果两个值不相等,则为错误。

这样的操作是可以防止数据在传送过成发生错误,导致最后出现异常现象。

(1)CRC生成的原理CRC 的生成过程中,每个8–位字符与(寄存器)中的值异或。

然后结果向最低有效位(LSB) 方向移动(Shift) 1 位,而最高有效位(MSB) 位置充零。

然后提取并检查LSB:如果LSB 为1,则寄存器中的值与一个固定的预置值异或;如果LSB 为0,则不进行异或操作。

这个过程将重复直到执行完8 次移位。

完成最后一次(第8 次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。

当所有报文中子节都运算之后得到的寄存器中的最终值,就是CRC。

(2)CRC的生成过程1. 将一个16 位寄存器装入十六进制FFFF (全1). 将之称作CRC 寄存器.2. 将报文的第一个8 位字节与16 位CRC 寄存器的低字节异或,结果置于CRC 寄存器.3. 将CRC 寄存器右移1 位(向LSB 方向),MSB 充零. 提取并(检测)LSB.4. (如果LSB 为0): 重复步骤3 (另一次移位).(如果LSB 为1): 对CRC 寄存器异或多项式值0xA001 (1010 0000 0000 0001).5. 重复步骤3 和4,直到完成8 次移位。

Modbus 协议详解

Modbus 协议详解协议介绍:Modbus 是一种通信协议,用于在不同设备之间传输数据。

它广泛应用于工业自动化领域,特殊是在监控和控制系统中。

本文将详细介绍 Modbus 协议的基本原理、数据格式、功能码以及常见的应用场景。

一、基本原理:Modbus 协议采用主从结构,其中主机负责发起请求并控制通信过程,从机负责响应请求并提供所需的数据。

通信可以通过串行通信(RS-232/RS-485)或者以太网进行。

二、数据格式:1. Modbus RTU:采用二进制编码,每一个数据字节使用 8 位表示。

每一个数据帧由起始位、地址域、功能码、数据域、错误检测和住手位组成。

2. Modbus ASCII:采用可见字符编码,每一个数据字节使用 2 个 ASCII 字符表示。

每一个数据帧由起始字符、地址域、功能码、数据域、错误检测和结束字符组成。

3. Modbus TCP:采用基于 TCP/IP 的通信方式,数据以字节流的形式传输。

每一个数据帧由事务标识符、协议标识符、长度字段、单元标识符、功能码、数据域和错误检测组成。

三、功能码:1. 读取线圈状态(功能码 01):用于读取从机的开关量输出状态。

2. 读取输入状态(功能码 02):用于读取从机的开关量输入状态。

3. 读取保持寄存器(功能码 03):用于读取从机的摹拟量输出状态。

4. 读取输入寄存器(功能码 04):用于读取从机的摹拟量输入状态。

5. 强制单个线圈(功能码 05):用于控制从机的开关量输出状态。

6. 预置单个寄存器(功能码 06):用于设置从机的摹拟量输出状态。

7. 强制多个线圈(功能码 15):用于同时控制从机的多个开关量输出状态。

8. 预置多个寄存器(功能码16):用于同时设置从机的多个摹拟量输出状态。

四、应用场景:1. 监控系统:Modbus 协议可用于监控系统中的数据采集和状态监测。

通过读取输入状态和输入寄存器,可以实时获取设备的状态信息。

modbus通讯协议格式详解

modbus通讯协议格式详解Modbus是一种常用的通信协议,用于在工业自动化系统中不同设备之间进行通信。

下面是Modbus通信协议的详解。

1. Modbus协议类型:- Modbus ASCII:使用ASCII字符进行数据传输,每个字节使用两个ASCII字符表示。

- Modbus RTU:使用二进制编码进行数据传输,每个字节使用8个二进制位表示。

2. Modbus通信格式:- 帧起始符:通常为冒号(ASCII字符)或启动位(RTU模式)。

- 地址字段:定义要与之通信的设备地址。

- 功能码:指示所需执行的操作类型。

- 数据域:包含要传输或接收的数据。

- 校验和:用于验证帧数据的完整性,通常是通过计算和比较CRC校验值或校验和字节来实现的。

3. Modbus功能码:- 读取数据:用于读取设备的状态或数据。

- 功能码0x01(读取线圈状态):用于读取数字输出或线圈的状态。

- 功能码0x02(读取输入状态):用于读取数字输入或线圈的状态。

- 功能码0x03(读取保持寄存器):用于读取设备的保持寄存器的值。

- 功能码0x04(读取输入寄存器):用于读取设备的输入寄存器的值。

- 写入数据:用于写入设备的状态或数据。

- 功能码0x05(写单个线圈):用于写入单个数字输出或线圈的状态。

- 功能码0x06(写单个寄存器):用于写入单个保持寄存器的值。

- 功能码0x0F(写多个线圈):用于写入多个数字输出或线圈的状态。

- 功能码0x10(写多个寄存器):用于写入多个保持寄存器的值。

4. Modbus数据格式:- 线圈状态:用于表示开关状态的数据,以位为单位(0表示关,1表示开)。

- 输入状态:用于表示输入设备状态的数据,以位为单位。

- 保持寄存器:用于存储设备状态或数据的数据,以字为单位。

- 输入寄存器:用于存储输入设备状态或数据的数据,以字为单位。

总结:Modbus通信协议定义了一套通用的格式,用于在工业自动化系统中进行设备之间的通信。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M o d b u s通讯协议
R T U A S C I I T C P详细介

集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]
Modbus通讯协议RTU ASCII TCP详细介绍
Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。

此协议支持传统的RS-232、RS-422、RS-485和以太网设备。

许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。

有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。

如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。

此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。

标准的Modicon控制器使用RS232C实现串行的Modbus。

Modbus的ASCII、RTU 协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用
Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。

另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。

因此,Modbus 协议的可靠性较好。

下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。

所以在这里我仅介绍一下Modbus的ASCII和RTU协议。

下表是ASCII协议和RTU协议进行的比较:
协议开始标记结束标记校验传输效率程序处理
ASCII模式 :(冒号) CR,LF LRC 低直观,简单,易调试
RTU 无无 CRC 高不直观,稍复杂
通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。

但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。

所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

下面对两种协议的校验进行一下介绍。

1、LRC校验
LRC域是一个包含一个8位二进制值的字节。

LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。

LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。

它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。

下面是它的VC代码:
.[数据n][CRC校验的低8位] [CRC校验的高8位]
例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]
意义如下:
<1>设备地址和命令号和上面的相同。

<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n 的值。

<3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。

比如例子中,表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。

<4>CRC校验同上。

2、读只可读数字量寄存器(输入状态):
和读取线圈状态类似,只是第二个字节的命令号不再是1而是2。

3、写数字量(线圈状态):
计算机发送命令:[设备地址] [命令号05] [需下置的寄存器地址高8位] [低8位]
[下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][05][00][AC][FF][00][CRC低][CRC高]
意义如下:
<1>设备地址和上面的相同。

<2>命令号:写数字量的命令号固定为05。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的开关的地址。

<4>下置的数据高8位,低8位:表明需要下置的开关量的状态。

例子中为把该开关闭合。

注意,此处只可以是[FF][00]表示闭合[00][00]表示断开,其他数值非法。

<5>注意此命令一条只能下置一个开关量的状态。

设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

4、读可读写模拟量寄存器(保持寄存器):
计算机发送命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
意义如下:
<1>设备地址和上面的相同。

<2>命令号:读模拟量的命令号固定为03。

<3>起始地址高8位、低8位:表示想读取的模拟量的起始地址(起始地址为0)。

比如例子中的起始地址为107。

<4>寄存器数高8位、低8位:表示从起始地址开始读多少个模拟量。

例子中为
3个模拟量。

注意,在返回的信息中一个模拟量需要返回两个字节。

设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n]
[CRC校验的低8位] [CRC校验的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
意义如下:
<1>设备地址和命令号和上面的相同。

<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n 的值。

例子中返回了3个模拟量的数据,因为一个模拟量需要2个字节所以共6个字节。

<3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。

例子中返回的值分别是555,0,100。

<4>CRC校验同上。

5、读只可读模拟量寄存器(输入寄存器):和读取保存寄存器类似,只是第二个字节的命令号不再是2而是4。

6、写单个模拟量寄存器(保持寄存器):
计算机发送命令:[设备地址] [命令号06] [需下置的寄存器地址高8位] [低8位]
[下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][06][00][01][00][03][CRC低][CRC高]
意义如下:
<1>设备地址和上面的相同。

<2>命令号:写模拟量的命令号固定为06。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模拟量寄存器的地址。

<4>下置的数据高8位,低8位:表明需要下置的模拟量数据。

比如例子中就把1号寄存器的值设为3。

<5>注意此命令一条只能下置一个模拟量的状态。

设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

相关文档
最新文档