Modbus标准通讯协议格式
- 格式:doc
- 大小:78.50 KB
- 文档页数:10
modbus协议通讯协议协议名称:Modbus协议通讯协议一、引言Modbus协议是一种用于工业自动化领域的通讯协议,用于实现不同设备之间的数据交换和通讯。
本协议旨在规范Modbus协议的通讯规则和数据格式,以确保各设备在通讯过程中能够正确地交换数据。
二、定义1. Modbus主站:指发起通讯请求的设备,负责向从站发送指令并接收从站的响应。
2. Modbus从站:指响应主站通讯请求的设备,负责接收主站的指令并返回响应数据。
三、通讯方式Modbus协议支持多种通讯方式,包括串行通讯和以太网通讯。
具体通讯方式的选择应根据实际应用场景和设备的通讯接口来确定。
四、数据格式1. Modbus协议使用16位的寄存器来表示数据,寄存器地址从0开始计数。
2. Modbus协议支持多种数据类型,包括位(Coil)、输入位(Input Coil)、寄存器(Holding Register)和输入寄存器(Input Register)。
3. 数据的读取和写入通过读写功能码来实现,具体功能码的定义如下:- 读取位:功能码0x01- 读取输入位:功能码0x02- 读取寄存器:功能码0x03- 读取输入寄存器:功能码0x04- 写入位:功能码0x05- 写入寄存器:功能码0x064. 数据的读取和写入操作可以通过单个请求实现,也可以通过多个请求分批进行。
五、通讯流程1. 主站向从站发送请求,请求包括功能码、起始地址和数据长度等信息。
2. 从站接收到请求后,根据功能码进行相应的数据读取或写入操作。
3. 从站将读取到的数据或写入操作的结果返回给主站。
4. 主站接收到从站的响应后,根据需要进行下一步的操作。
六、通讯协议1. Modbus协议使用字节顺序为大端模式(Big-Endian)。
2. 通讯数据的传输顺序为先高字节后低字节。
3. 通讯数据的校验采用CRC校验算法,具体算法如下:- 初始化CRC寄存器为0xFFFF。
- 对每个字节进行如下操作:- 将字节与CRC寄存器的低8位进行异或运算。
Modbus通讯协议Modbus协议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网络协议发送出去即可。
ModBusRTU通讯协议协议名称:ModBusRTU通讯协议一、协议概述ModBusRTU通讯协议是一种串行通信协议,用于在工业自动化领域中实现设备之间的数据交换。
本协议规定了通信的物理层、数据帧格式、功能码及其对应的数据格式,以及通信过程中的错误处理等。
二、物理层1. 通信接口:本协议使用RS485接口进行通信,支持多主机和多从机的通信方式。
2. 通信波特率:支持的通信波特率范围为9600bps至115200bps,可根据实际需求进行设置。
3. 数据位:通信数据位为8位。
4. 停止位:通信停止位为1位。
5. 校验位:通信校验位可选择为无校验、奇校验或偶校验。
三、数据帧格式1. 帧起始符:每个数据帧以一个起始符开始,起始符为一个字节,固定为0xFF。
2. 从机地址:紧随起始符之后的一个字节为从机地址,用于标识通信中的从机设备。
3. 功能码:从机地址之后的一个字节为功能码,用于指示从机设备执行的操作类型。
4. 数据域:功能码之后的数据域长度可变,根据功能码的不同而不同。
5. CRC校验码:数据域之后为两个字节的CRC校验码,用于检测数据传输过程中是否出现错误。
6. 帧结束符:每个数据帧以一个结束符结束,结束符为一个字节,固定为0x00。
四、功能码及数据格式1. 读取线圈状态(功能码:0x01)请求帧格式:[起始符][从机地址][功能码][起始地址高字节][起始地址低字节][读取数量高字节][读取数量低字节][CRC校验码][结束符]响应帧格式:[起始符][从机地址][功能码][字节数][线圈状态][CRC校验码][结束符]数据格式:线圈状态为一个字节,每个位表示一个线圈的状态(0表示OFF,1表示ON)。
2. 读取离散输入状态(功能码:0x02)请求帧格式:[起始符][从机地址][功能码][起始地址高字节][起始地址低字节][读取数量高字节][读取数量低字节][CRC校验码][结束符]响应帧格式:[起始符][从机地址][功能码][字节数][离散输入状态][CRC校验码][结束符]数据格式:离散输入状态为一个字节,每个位表示一个输入的状态(0表示OFF,1表示ON)。
HLP_SV Modbus RTU 标准通讯协议格式通信资料格式Address Function Data CRC check8 bits 8 bits N×8bits 16bits1)Address通讯地址:1-2472)Function:命令码8-bit命令01 读线圈状态上位机发送数据格式:ADDRESS 01 ADDRH ADDRL NUMH NUML CRC注: ADDR: 00000 --- FFFF(ADDR=线圈地址-1);NUM: 0010-----0040 (NUM为要读线圈状态值的二进制数位数)正确时变频器返回数据格式:ADDRESS 01 BYTECOUNT DA TA1 DA TA2 DA TA3 DA TAN CRC注: BYTECOUNT:读取的字数错误时变频器返回数据格式:ADDRESS 0X81 Errornum CRC注: Errornum为错误类型代码如:要检测变频器的输出频率应发送数据:01 01 00 30 00 10 3D C9(16进制)变频器返回数据:01 01 02 00 20 B8 24(16进制)发送数据:0030hex(线圈地址49)返回的数据位为“0020”(16进制),高位与低位互换,为2000。
即输出频率为303(Max Ref)的50%。
关于2000对应50%,具体见图1。
03读保持寄存器上位机发送数据格式:ADDRESS 03 ADDRH ADDRL NUMH NUML CRC注:ADDR: 0 --- 0XFFFF;NUM: 0010-----0040 (NUM为要读取数据的字数)ADDR=Parameter Numbe r×10-1正确时变频器返回数据格式:ADDRESS 03 BYTECOUNT DA TA1 DA TA 2 DA TA 3 DA TAN CRC 注: BYTECOUNT:读取的字节数错误时变频器返回数据格式:ADDRESS 0X83 Errornum CRC如:要读变频器参数303的设定值应发送数据:01 03 0B D5 00 02 95 BC (16进制)Parameter 303(3029)=0BD5HEX变频器返回数据:“:”01 03 04 00 00 EA 60 B5 7B返回的数据位为“00 00 EA 60”(16进制)转换为10进制数为60000,表示303设置值为60.000※当参数值为双字时,NUM的值必须等于2。
ModbusTCP通讯协议协议名称:ModbusTCP通讯协议一、引言ModbusTCP通讯协议是一种用于工业自动化领域的通信协议,旨在实现不同设备之间的数据交换和通信。
本文档旨在详细描述ModbusTCP通讯协议的标准格式,包括协议的结构、消息格式、功能码、数据类型、错误处理等方面的内容。
二、协议结构ModbusTCP通讯协议采用基于TCP/IP协议的通信方式,通过以太网进行数据传输。
协议结构如下:1. 物理层:基于以太网的物理连接。
2. 数据链路层:基于TCP/IP协议的数据链路层。
3. 应用层:ModbusTCP通讯协议的应用层。
三、消息格式ModbusTCP通讯协议的消息格式如下:1. 事务标识符(Transaction Identifier):2字节,用于唯一标识一次通讯事务。
2. 协议标识符(Protocol Identifier):2字节,用于标识ModbusTCP协议。
3. 长度字段(Length Field):2字节,用于指示后续数据的长度。
4. 单元标识符(Unit Identifier):1字节,用于标识设备的地址。
5. 功能码(Function Code):1字节,用于指示消息的类型。
6. 数据域(Data Field):可变长度,包含具体的数据内容。
7. CRC校验(CRC Checksum):2字节,用于校验消息的完整性。
四、功能码ModbusTCP通讯协议定义了一系列功能码,用于指示消息的类型和操作。
常用的功能码包括:1. 读取线圈状态(Read Coils):用于读取设备的线圈状态。
2. 读取输入状态(Read Discrete Inputs):用于读取设备的输入状态。
3. 读取保持寄存器(Read Holding Registers):用于读取设备的保持寄存器。
4. 读取输入寄存器(Read Input Registers):用于读取设备的输入寄存器。
5. 写单个线圈(Write Single Coil):用于写入设备的单个线圈状态。
MODBUS 标准通讯协议(简版)(基于Modbus 应用协议RTU 通讯模式)1. 前言本协议适用于符合MODBUS 标准通讯协议的规定以及在Modbus 网络上以RTU 模式通信运行的设备和应用软件。
本协议按照Modbus 应用协议标准制定。
2. 波特率可选范围代码678910 11 12 13 14 波特率 2400 4800 9600 14400192002880038400576001152003. RTU 通讯数据传输模式3.1 RTU 模式每个字节( 11 位 )的格式为 :通讯传输为异步方式,并以字节(数据帧)为单位。
在主站和从站之间传递的每一个数据帧都是11位的串行数据流。
编码系统: 8–位二进制,报文中每个8 位字节含有两个4 位十六进制字符(0–9, A –F) 数 据 位: 1个 起始位8个 数据位, 首先发送最低有效位1个 奇偶校验(注:偶校验是要求的,其它模式( 奇校验,无校验 )也可以使用) 1个 停止位 (注 :使用无校验时要求2个停止位)帧校验域:循环冗余校验(CRC) 3.2 字符的串行传送方式:每个字符或字节按如下顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB)通过配置,设备可以接受奇校验、偶校验或无校验。
如果无奇偶校验,那么传送一个附加的停止位来填充数据帧使其成为完整的11位异步字符:3.3 数据编码:Modbus 处理的所有数据按照存储数据的类型可以分为位寄存器(容量为1位)和16位寄存器(容量为16位)两种,它们的宽度都是16位(Data is packed as two bytes per register),协议允许单个选择65536个数据项,而且其读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。
在Modbus PDU 中从0~65535寻址每个数据。
Modbus 使用一个‘big-Endian ’表示地址和数据项,即最高有效字节在低地址存储,最低有效字节在高字节存储。
Modbus通讯协议下表是Modbus的功能格式:1、读可读写数字量寄存器(线圈状态):计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][01][00][13][00][25][CRC低][CRC高]意义如下:<1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。
例子中为想和17号(十进制的17是十六进制的11)通讯。
<2>命令号01:读取数字量的命令号固定为01。
<3>起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0)。
比如例子中的起始地址为19。
<4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关量。
例子中为37个开关量。
<5>CRC校验:是从开头一直校验到此之前。
在此协议的最后再作介绍。
此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。
设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据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。
Modbus通讯协议是一种在工业领域广泛使用的通信协议,用于在设备之间传输数据。
Modbus协议有多个变体,包括Modbus RTU(串行通信)和Modbus TCP(基于TCP/IP的通信)。
以下是一个简单的Modbus通讯协议模板,供参考:Modbus RTU 通讯协议模板:1. 起始符:Modbus RTU通讯以一帧二进制数据开始。
在串行通信中,通常使用起始符标志通讯的开始。
常见的起始符是11位的空闲时间。
2. 设备地址:Modbus RTU协议中,每个设备都有一个唯一的地址。
设备通过地址来区分通信的目标。
3. 功能码:描述要执行的操作的功能码。
常见功能码包括读取保持寄存器、写入单个寄存器、读取输入寄存器等。
4. 数据:数据字段包含读取或写入的数据。
数据的格式取决于功能码和具体的操作。
5. CRC 校验:使用CRC (循环冗余校验)进行数据校验,以确保通讯的完整性。
CRC通常包括两个字节。
6. 停止位:在Modbus RTU通讯中,停止位表示一个数据帧的结束。
通常有一个停止位。
Modbus TCP 通讯协议模板:1. Modbus TCP 头部:Modbus TCP通讯以TCP/IP帧开始。
头部包含源端口、目标端口等信息。
2. Modbus TCP 协议标识符:标识TCP报文中的Modbus协议。
通常为0。
3. 长度字段:描述Modbus数据的长度,以字节为单位。
4. 设备地址:Modbus TCP中,设备地址也包含在TCP报文的数据字段中。
5. 功能码:描述要执行的操作的功能码,与Modbus RTU相同。
6. 数据:数据字段包含读取或写入的数据。
数据的格式取决于功能码和具体的操作。
7. CRC 或校验字段:在Modbus TCP中,通常使用CRC或其他校验方法来确保通讯的完整性。
这是一个简化的模板,实际的Modbus通讯可能会涉及更多的细节和特定的实现。
使用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通信协议定义了一套通用的格式,用于在工业自动化系统中进行设备之间的通信。
通讯协议一、仪表采用modbus通讯协议,校验采用CCITT-16/N(G(x)=x16+x15+x13+1)。
二、通讯格式:1.读数据:address(仪表地址)+03H+xxH(寄存器高地址)+xxH(寄存器低地址)+xxH (寄存器数高位)+xxH(寄存器数低位)+CRCH(校验高位)+CRCL(校验低位)。
仪表回传:address(仪表地址)+03H+xxH(字节数)+xxH(高字节)+---+xxH(低字节)+CRCH(校验高位)+CRCL(校验低位)。
如:总累计为10000.84,整数部分转化为长整形16进制数为:00002710H,小数部分0.84转化为浮点型为:3f570a3dH,仪表地址为1,则读指令和回传结果如下:读:01H 03H 9cH 59H 00H 04H baH 4aH仪表回传:01H 03H 08H 00H 00H 27H 10H 3fH 57H 0aH 3dH 28H 76H 2.写数据:address(仪表地址)+10H+xxH(寄存器高地址)+xxH(寄存器低地址)+xxH (寄存器数高位)+xxH(寄存器数低位)+xxH(总字节数)+xxH(高字节)+---+xxH (低字节)+CRCH(校验高位)+CRCL(校验低位)。
如仪表接收正确后,将原数据回传。
其中根据数据不同,数据包含的字节数也可能不同,传送字节时将按高字节在前低字节在后的原则。
如:要将设定流量写为100(符点数),首先我们知道设定流量的地址为9c51H,而100的4字节符点数表示为:42c80000H,故发送数据如下:01H 10H 9cH 51H 00H 02H 04H 42H c8H 00H 00H 5bH dfH仪表接收正确后将回传从最前面到寄存器数低位的数及校验。
01H 10H 9cH 51H 00H 02H 3eH 49H当设置范围超标或地址不在范围时回复时将功能字节10H加80H后回传从最前面到寄存器数低位的数及校验。
modbus通讯协议格式详解Modbus是一种常用的通讯协议,广泛应用于工业自动化领域。
它是一种主从式通信协议,简单易懂,方便实用。
本文将详细介绍Modbus通讯协议的格式及其相关内容。
一、Modbus协议简介Modbus协议是由Modicon(一家法国自动化制造公司)于1979年开发的,用于PLC(可编程逻辑控制器)与外部设备之间的通信。
它具有开放性、简单性和可靠性等特点,逐渐成为工业自动化领域最重要的通讯协议之一。
二、Modbus通信架构Modbus通信架构主要分为两种模式:串行通信模式和以太网通信模式。
其中,串行通信模式包括RS-232、RS-485、RS-422等,常用于较短距离的通信;以太网通信模式则使用TCP/IP协议,可实现远程通信。
三、Modbus数据格式Modbus通信协议采用了简洁明了的二进制数据格式,分为查询报文和响应报文。
1. 查询报文格式Modbus查询报文包含了多个字段,包括从站地址、功能码、数据起始地址、数据数量、CRC校验等。
- 从站地址:标识通信中的设备或模块。
- 功能码:定义了读取或写入操作的种类。
- 数据起始地址:指定要读取或写入的数据在从站中的起始位置。
- 数据数量:指定要读取或写入的数据的个数。
- CRC校验:用于校验报文的完整性。
2. 响应报文格式Modbus响应报文与查询报文的格式类似,但会包含更多的字段,如错误码、数据内容等。
四、Modbus功能码详解Modbus功能码定义了读取或写入操作的种类,主要包括读读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器、写单个线圈、写单个寄存器等。
其中,读取线圈状态和读取输入状态对应的功能码分别为01和02;读取保持寄存器和读取输入寄存器对应的功能码分别为03和04;写单个线圈和写单个寄存器对应的功能码分别为05和06。
此外,还有一些其他的功能码,用于读写多个寄存器等操作。
五、Modbus通信流程Modbus通信流程较为简单,一般包括以下几个步骤:1. 主站发送查询报文给从站;2. 从站收到查询报文后,进行相应的处理;3. 从站将处理结果封装成响应报文,发送给主站;4. 主站收到响应报文后,解析出结果,并进行相应的处理。
modbus通讯协议格式Modbus通讯协议格式。
Modbus通讯协议是一种用于工业控制领域的串行通信协议,它被广泛应用于自动化控制系统中。
本文将对Modbus通讯协议的格式进行详细介绍,以便读者更好地理解和应用该协议。
1. Modbus通讯协议的基本概念。
Modbus通讯协议是一种主从式通讯协议,它包括一个主站和多个从站。
主站负责发起通讯请求,而从站则负责响应主站的请求并执行相应的操作。
在Modbus通讯协议中,主站和从站之间通过串行通信进行数据交换,通常采用RS-232、RS-485或者Ethernet等通讯方式。
2. Modbus通讯协议的数据格式。
Modbus通讯协议的数据格式包括了功能码、数据地址、数据值等信息。
其中,功能码用于指示从站应执行的操作,比如读取数据、写入数据等;数据地址用于指定要读取或写入的数据的地址;数据值则是要读取或写入的实际数值。
在Modbus通讯中,数据格式通常采用16位或32位的寄存器来进行数据交换。
3. Modbus通讯协议的报文结构。
在Modbus通讯协议中,通讯的数据是通过报文进行传输的。
Modbus报文包括了地址域、功能码、数据域和校验码等部分。
地址域用于指定从站的地址,功能码用于指示要执行的操作,数据域则包含了要读取或写入的数据,校验码用于对报文的完整性进行校验。
通过对报文结构的解析,主站和从站可以进行有效的数据交换。
4. Modbus通讯协议的应用场景。
Modbus通讯协议广泛应用于工业控制领域,比如工业自动化、楼宇自动化、能源管理系统等。
在这些应用场景中,Modbus通讯协议可以实现不同设备之间的数据交换和控制,从而实现系统的集成和优化。
此外,Modbus通讯协议还可以通过网关设备与其他通讯协议进行互联,实现不同系统之间的数据共享和协同控制。
5. Modbus通讯协议的发展趋势。
随着工业互联网的发展,Modbus通讯协议也在不断演进和完善。
新的Modbus 通讯协议版本不断推出,以满足工业控制系统对于高效、安全、可靠通讯的需求。
modbus通讯协议协议名称:Modbus通讯协议一、引言Modbus通讯协议是一种用于工业自动化领域的通信协议,它允许不同设备之间进行数据交换。
本协议旨在规范Modbus通讯协议的格式和规则,确保各设备之间能够正确地进行数据通信。
二、协议概述Modbus通讯协议采用主从结构,其中主机负责发送请求,从机负责响应请求。
协议支持多种数据类型和功能码,包括读取和写入寄存器、读取和写入线圈等。
通信方式可以是串行或以太网。
三、协议格式1. 物理层Modbus通讯协议可以在串行通信和以太网通信中使用。
- 串行通信:使用RS-232、RS-485等串行接口,通信速率可根据实际需求进行配置。
- 以太网通信:使用TCP/IP协议栈,通信速率可根据网络带宽进行配置。
2. 数据帧格式Modbus通讯协议采用二进制数据帧格式,每个数据帧由多个字节组成。
- 串行通信数据帧:起始位(1位) + 数据位(8位) + 奇偶校验位(1位) + 停止位(1位)- 以太网通信数据帧:TCP/IP数据报文格式3. 寄存器地址Modbus通讯协议中的寄存器地址用于标识设备中的不同数据寄存器或线圈。
- 线圈地址:0x0000 - 0xFFFF- 输入寄存器地址:0x0000 - 0xFFFF- 保持寄存器地址:0x0000 - 0xFFFF- 输入状态地址:0x0000 - 0xFFFF4. 功能码Modbus通讯协议定义了多种功能码,用于不同的操作类型。
- 读取线圈状态:功能码0x01- 读取输入状态:功能码0x02- 读取保持寄存器:功能码0x03- 读取输入寄存器:功能码0x04- 写单个线圈:功能码0x05- 写单个保持寄存器:功能码0x06- 写多个线圈:功能码0x0F- 写多个保持寄存器:功能码0x10四、协议规则1. 请求与响应- 请求帧:主机发送请求帧给从机,包含功能码、起始地址和数据长度等信息。
- 响应帧:从机接收请求帧后,根据功能码执行相应操作,并将结果封装到响应帧中发送给主机。
HLP A+ Modbus标准通讯协议格式注:BYTECOUNT = 2 * NUM错误时变频器返回数据格式:“ : ”ADDRESS 0X83 01 or02 or 03 0r 04LRC 0X0D 0X0A如:要读变频器功能码CD000中的设定值(假如为30.00HZ)(CD160=CD161=1 CD162=0)应发送数据:“:”03 00 00 00 01 FC 0D 0A (16进制),转为ASCII码格式为3A 30 33 30 30 30 30 30 30 30 31 46 43 0D 0A(ASCII)变频器返回数据:“:”01 03 02 0B B8 37 0D 0A(16进制),转为ASCII码格式为:3A 30 31 30 33 30 32 30 42 42 38 33 37 0D DA返回的数据位为“0BB8”(16进制)转换为10进制数为3000表示CD000设置值为30.0004 读取输入寄存器上位机发送数据格式:“: “ADDRESS 04 ADDRH ADDRL NUMH NUML LRC 0X0D0X0A注:ADDR: 0 ---- 0XFFFF;NUM: 0001 ---- 0004 (NUM为要读的输入寄存器的数量) 正确时变频器返回数据格式:“: “ADDRESS 04 BYTECOUNT DATAH1 DATAL1 ---- DA TAHN DA TALN注:BYTECOUNT = NUM * 2错误时变频器返回数据格式:“ : “ADDRESS 0X84 01 or 02 or 03 or 04 LRC 0X0D 0X0A如:要读变频器温度显示值(假如温度为36.2)(CD160=CD161=1 CD162=0)应发送数据:“:”01 04 00 06 00 01 F4 0D 0A(16进制),转为ASCII格式为:3A 30 31 30 34 30 30 30 36 30 30 30 31 46 34 0D 0A(ASCII)变频器返回数据:“:”01 04 02 01 6A 8E 0D 0A(16进制),转为ASCII码格式为3A 30 31 30 34 30 32 30 31 36 41 38 45 0D 0A(ASCII)返回的数据位为“016A”(16进制)转换为10进制为“362”表示温度为36.205 写单个线圈状态上位机发送数据格式:“: “ADDRESS 05ADDRH ADDRL DA TAH DATAL LRC 0X0D0X0A注:ADDR: 0 ---- 0XFFFF DATA: 0X0000 or 0XFF00(16进制数)正确时变频器返回数据格式:“: “ADDRESS 05 ADDRH ADDRL DA TAH DATAL LRC 0X0D0X0A错误时变频器返回数据格式:“ : ”ADDRESS 0X85 01 or02 or 03 0r 04 LRC 0X0D 0X0A06 写单个保持寄存器值上位机发送数据格式:“: “ADDRESS 06 ADDRH ADDRL DA TAH DA TAL LRC 0X0D0X0A注:ADDR: 0 ---- 0XFFFF正确时变频器返回数据格式:“: “ADDRESS 06 ADDRH ADDRL DA TAH DA TAL LRC 0X0D0X0A错误时变频器返回数据:“ : ”ADDRESS 0X86 01 or02 or 03 0r 04 LRC 0X0D 0X0A如:要对变频器功能码CD000写入30.00(CD160=CD161=1 CD162=0),应发送数据:“:”01 06 00 00 0B B8 36 0D 0A(16进制),转为ASCII格式为3A 30 31 30 36 30 30 30 30 30 42 42 38 33 36 0D 0A(ASCII)变频器返回数据:“:”01 06 00 00 0B B8 36 0D 0A(16进制),转为ASCII 格式为3A 30 31 30 36 30 30 30 30 30 42 42 38 33 36 0D 0A(ASCII)返回的数据位为“0BB8”(16进制)转换为10进制为“3000”表示CD000设置值为30.000F 写多个线圈状态上位机发送数据格式“: “ADDRESS 0F ADDRH ADDRL NUMH NUML COUNTDATAH1 DATAL1 DATA2H DATA2L ------- DA TANH DA TANL LRC0X0D 0X0A注:ADDR: 0 -------- 0XFFFF ; NUM: 1 ------- 1968 / 0X7B0 ; COUNT: NUM / 8或NUM/ 8 + 1 (NUM为要写的线圈的数量)正确时变频器返回数据格式:“: “ADDRESS 0F ADDRH ADDRL NUMH NUML LRC 0X0D0X0A错误时变频器返回数据格式:“ : ”ADDRESS 0X8F 01 or02 or 03 0r 04 LRC 0X0D 0X0A如:要使变频器正转(CD160=CD161=1 CD162=0),应发送数据:“:”01 0F 00 48 00 08 01 02 LRC 0D 0A(16进制),转为ASCII 格式为3A 30 31 30 46 30 30 34 38 30 30 30 38 30 31 30 30 30 32 LRC 0D 0A(ASCII)“0002”即0000 0010; 即线圈0x49置为1,给变频器发正转命令。
ModBusRTU通讯协议协议名称:ModBusRTU通讯协议一、引言ModBusRTU通讯协议是一种用于串行通信的通信协议,常用于工业自动化领域。
本协议旨在规定ModBusRTU通讯协议的标准格式,以确保设备之间的通信能够准确、高效地进行。
二、协议结构ModBusRTU通讯协议采用了简单的主从结构,其中包括主站(Master)和从站(Slave)。
主站负责发起通信请求,而从站则负责响应主站的请求。
三、协议帧格式ModBusRTU通讯协议的帧格式如下:1. 起始位(Start Bit):占据一个字节的最低位,用于标识一个帧的开始。
2. 地址位(Address):占据一个字节,用于标识从站的地址。
3. 功能码(Function Code):占据一个字节,用于标识主站请求的功能。
4. 数据域(Data Field):占据可变长度的字节,用于传输数据。
5. 校验位(Checksum):占据两个字节,用于校验帧的完整性。
6. 停止位(Stop Bit):占据一个字节,用于标识一个帧的结束。
四、功能码ModBusRTU通讯协议定义了一系列功能码,用于标识主站请求的功能。
以下为常用的功能码:1. 读取线圈状态(Read Coil Status):用于读取从站的线圈状态。
2. 读取输入状态(Read Input Status):用于读取从站的输入状态。
3. 读取保持寄存器(Read Holding Registers):用于读取从站的保持寄存器。
4. 读取输入寄存器(Read Input Registers):用于读取从站的输入寄存器。
5. 强制单线圈(Force Single Coil):用于强制从站的单线圈状态。
6. 预置多个寄存器(Preset Multiple Registers):用于预置从站的多个寄存器。
五、通信流程ModBusRTU通讯协议的通信流程如下:1. 主站向从站发送请求帧,包括从站地址、功能码和数据域。
Modbus通讯协议
下表是Modbus的功能格式:
1、读可读写数字量寄存器(线圈状态):
计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][01][00][13][00][25][CRC低][CRC高]
意义如下:
<1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。
例子中为想和17号(十进制的17是十六进制的11)通讯。
<2>命令号01:读取数字量的命令号固定为01。
<3>起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0)。
比如例子中的起始地址为19。
<4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关量。
例子中为37个开关量。
<5>CRC校验:是从开头一直校验到此之前。
在此协议的最后再作介绍。
此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。
设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据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>注意此命令一条只能下置一个模拟量的状态。
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。
功能码
名称
作用
下表是Modbus支持的功能码:
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
强置单线圈
强置一个逻辑线圈的通断状态
06
预置单寄存器
把具体二进值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08
回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑
10
控询(只用于484)
可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12
读取通信事件记录
可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
13
编程(184/384 484 584)
可使主机模拟编程器功能修改PC从机逻辑
14
探询(184/384 484 584)
可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
15
强置多线圈
强置一串连续逻辑线圈的通断
16
预置多寄存器
把具体的二进制值装入一串连续的保持寄存器
17
报告从机标识
可使主机判断编址从机的类型及该从机运行指示灯的状态
18
(884和MICRO 84)
可使主机模拟编程功能,修改PC状态逻辑
19
重置通信链路
发生非可修改错误后,是从机复位于已知状态,可重置顺序字节
20
读取通用参数(584L)
显示扩展存储器文件中的数据信息
21
写入通用参数(584L)
把通用参数写入扩展存储文件,或修改之
22~64
保留作扩展功能备用
65~72
保留以备用户功能所用
留作用户功能的扩展编码
73~119
非法功能
120~127
保留
留作内部作用
128~255
保留
用于异常应答
在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。