Modbus标准通讯协议格式
Modbus通讯协议详解
Modbus通讯协议详解一、引言Modbus通讯协议是一种常用的串行通信协议,广泛应用于工业自动化领域。
本文将详细解析Modbus通讯协议的基本原理、数据格式、通信流程以及常见问题。
二、基本原理1. Modbus通讯协议采用主从结构,主要包括一个主站和多个从站。
主站负责发起通信请求,从站负责响应请求并返回数据。
2. Modbus通讯协议基于传统的串行通信方式,支持RS-232、RS-485等物理层接口。
3. Modbus通讯协议采用简单的请求/响应模式,主站发送请求帧,从站响应并返回数据帧。
三、数据格式1. Modbus通讯协议的数据单元被称为“寄存器”,分为输入寄存器(Input Register)、保持寄存器(Holding Register)、线圈(Coil)和离散输入(Discrete Input)四种类型。
2. 输入寄存器用于从站向主站传输只读数据,保持寄存器用于双向传输读写数据,线圈用于从站向主站传输开关量数据,离散输入用于主站向从站传输只读开关量数据。
3. Modbus通讯协议采用16位的数据单元标识符,用于标识寄存器的类型和地址。
4. 数据帧包括起始符、设备地址、功能码、数据区、错误校验等字段。
四、通信流程1. 主站向从站发送请求帧,请求帧包括设备地址、功能码、数据区等字段。
2. 从站接收到请求帧后,根据功能码执行相应的操作,并将结果存储在数据区中。
3. 从站发送响应帧,响应帧包括设备地址、功能码、数据区等字段。
4. 主站接收到响应帧后,解析数据区中的结果,并进行相应的处理。
五、常见问题1. Modbus通讯协议的数据传输是基于字节的,因此在不同字节序的系统中需要进行字节序转换。
2. Modbus通讯协议的速率、数据位、停止位和校验位等参数需要保持一致,否则通信将无法建立。
3. Modbus通讯协议的设备地址是唯一的,主站通过设备地址来区分不同的从站。
4. Modbus通讯协议的功能码定义了不同的操作类型,主站通过功能码来指定所需的操作。
modbus协议通讯协议
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通讯协议一、引言Modbus通讯协议是一种常用的串行通信协议,用于在工业自动化系统中实现设备间的数据交换。
本协议旨在规范Modbus通讯协议的使用方式和数据格式,以确保各设备之间的互操作性和数据准确性。
二、范围本协议适用于所有使用Modbus通讯协议的设备和系统。
三、术语定义1. Modbus主站:指发起通讯请求的设备。
2. Modbus从站:指响应主站通讯请求的设备。
3. 寄存器:指存储数据的内存单元。
4. 线圈:指设备的开关量输入或输出。
四、通讯方式1. 物理层:Modbus通讯协议可以通过串口、以太网等多种物理层实现。
2. 传输层:Modbus通讯协议使用传统的请求/响应模型,主站发送请求,从站响应请求。
五、数据格式1. Modbus RTU格式:- 起始位:1个起始位,逻辑值为低。
- 数据位:8个数据位。
- 奇偶校验位:1个奇偶校验位,用于校验数据传输的准确性。
- 停止位:1个停止位,逻辑值为高。
2. Modbus ASCII格式:- 起始符:冒号(:)。
- 数据:使用ASCII码表示的16进制数据。
- 校验和:两个ASCII字符表示的校验和,用于校验数据传输的准确性。
- 结束符:回车换行符(CR LF)。
六、功能码Modbus通讯协议定义了一系列功能码,用于标识通讯请求的类型。
以下是一些常用功能码的介绍:1. 读取线圈状态(功能码01):主站向从站发送请求,从站返回线圈的状态。
2. 读取输入状态(功能码02):主站向从站发送请求,从站返回输入状态。
3. 读取保持寄存器(功能码03):主站向从站发送请求,从站返回保持寄存器的值。
4. 读取输入寄存器(功能码04):主站向从站发送请求,从站返回输入寄存器的值。
5. 强制单个线圈(功能码05):主站向从站发送请求,强制从站的一个线圈状态。
6. 预置单个寄存器(功能码06):主站向从站发送请求,预置从站的一个寄存器值。
Modbus+RTU+标准通讯协议格式
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通讯协议的标准格式,包括协议的结构、消息格式、功能码、数据类型、错误处理等方面的内容。
二、协议结构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 通讯协议
1、数据帧基本形式:
设备地址
功能码
数据
效验码
8-Bits
8-Bits
N * 8-Bits
16-Bits
2、设备地址:为保护装置的通讯地址ID号。
3、功能码列表:
功能码
含义
注释
03H
读遥测量
读采样值
02H要遥信
05H遥控
04H SOE数据
06H设置通播校时
4、效验码:
5、上下位机的通讯帧:
上来
01 02 02 00 01 78 78 /*因为只要了0X0A个,所以上来两字节就够了0X0001里面包含了16个遥信了*/
解释:
为要遥信量,要了0xA=10个遥信量,但是实际上遥信量一个装置最多就64个,一个字节就能包含8个遥信量。F80D为CRC校验,不用管,程序里不检测。01为保护装置的通讯地址;
·上位机要求数据格式举例
设备地址
功能码
数据起始地址(HI)
数据起始地址(LO)
数据字节数(HI)
数据字节数(LO)
CRC16(LO)
CRC16(HI)
00H
01H
00H
00H
00H
01H
FCH
1BH
·下位机回应数据格式举例
设备地址
功能码
字节数
数据
CRC16
CRC16
00H
01H
01H
02H
D4H
89H
字节计数
数据
校验和CRC
01H
03H
08H
00 00 01 30 0000 f964
97H B9H
00 00 01 30为有功电度数据(除以100为真实值)
modbus通讯协议
modbus通讯协议协议名称:Modbus通讯协议一、引言Modbus通讯协议是一种用于工业自动化领域的通信协议,用于在不同设备之间进行数据传输和通信。
本协议旨在定义Modbus通信的规范和格式,确保在不同设备之间的数据交换的准确性和可靠性。
二、协议概述Modbus通讯协议基于主从架构,其中一个设备作为主站,其他设备作为从站。
主站负责发起通信请求和控制从站设备,从站设备则负责响应主站的请求并提供相应的数据。
三、协议要求1. 协议支持串行通信和以太网通信两种方式。
2. 协议必须支持多种数据格式,如16位整数、32位整数、浮点数等。
3. 协议必须支持读取和写入数据的操作。
4. 协议必须支持不同寄存器类型的访问,如线圈寄存器、输入寄存器、保持寄存器等。
5. 协议必须支持不同的功能码,如读取线圈状态、写入单个保持寄存器等。
6. 协议必须支持错误检测和恢复机制,以确保数据的准确性和可靠性。
7. 协议必须具备良好的扩展性,以便支持未来的功能拓展和升级。
四、协议格式Modbus通讯协议的数据帧格式如下:1. 串行通信格式:- 起始位:1个起始位- 数据位:8个数据位- 停止位:1个停止位- 奇偶校验位:无校验位2. 以太网通信格式:- 采用TCP/IP协议进行通信- 数据帧格式符合Modbus RTU格式五、协议功能码Modbus通讯协议定义了以下常用的功能码:1. 读取线圈状态:功能码为01,用于读取线圈寄存器的状态。
2. 读取输入状态:功能码为02,用于读取输入寄存器的状态。
3. 读取保持寄存器:功能码为03,用于读取保持寄存器的值。
4. 读取输入寄存器:功能码为04,用于读取输入寄存器的值。
5. 写入单个线圈:功能码为05,用于写入单个线圈寄存器的值。
6. 写入单个保持寄存器:功能码为06,用于写入单个保持寄存器的值。
7. 写入多个线圈:功能码为15,用于写入多个线圈寄存器的值。
8. 写入多个保持寄存器:功能码为16,用于写入多个保持寄存器的值。
modbus通讯协议模板
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是一种常用的通信协议,用于在工业自动化系统中不同设备之间进行通信。
下面是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通讯协议
标准modbus通讯协议Modbus通讯协议是一种用于工业自动化领域的通讯协议,它是一种串行通讯协议,广泛应用于工业控制领域。
Modbus通讯协议具有简单、易实现、可靠等特点,因此备受工程师和技术人员的青睐。
本文将对标准Modbus通讯协议进行详细介绍,包括其基本原理、通讯方式、协议格式等内容,以帮助读者更好地理解和应用Modbus通讯协议。
Modbus通讯协议的基本原理是基于主从结构的通讯方式,通讯的主要对象是寄存器。
在Modbus通讯协议中,主要包括Modbus主站和Modbus从站两种设备。
主站负责向从站发送请求,从站接收主站的请求并作出相应的响应。
Modbus通讯协议的通讯方式包括RTU、ASCII和TCP/IP三种方式,其中RTU是最常用的一种方式,它采用二进制方式进行数据传输,通讯速度快,效率高。
在Modbus通讯协议中,通讯的数据格式一般包括地址码、功能码、数据、校验码等部分。
地址码用于标识设备的地址,功能码用于标识请求的功能,数据部分包括请求或响应的数据内容,校验码用于校验数据的完整性。
在Modbus通讯协议中,常用的功能码包括读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器等,这些功能码能够满足不同的通讯需求。
Modbus通讯协议的应用范围非常广泛,它可以应用于各种工业控制系统中,如PLC控制系统、传感器设备、仪表设备等。
通过Modbus通讯协议,不同厂家生产的设备可以实现互联互通,实现设备之间的数据交换和共享,极大地方便了工程师和技术人员的工作。
总的来说,标准Modbus通讯协议是一种简单、可靠的工业通讯协议,它在工业自动化领域有着广泛的应用。
通过本文的介绍,相信读者对Modbus通讯协议有了更深入的了解,能够更好地应用于实际工程项目中。
希望本文能够对读者有所帮助,谢谢阅读!。
Modbus+RTU+标准通讯协议格式
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。
modbus协议通讯协议
modbus协议通讯协议协议名称:Modbus协议通讯协议一、引言Modbus协议是一种通讯协议,用于在不同设备之间进行数据交换。
本协议旨在规范Modbus通讯协议的使用,确保设备之间的数据传输准确、可靠。
二、范围本协议适合于使用Modbus协议进行通讯的设备,包括但不限于工业自动化、楼宇自控、能源监控等领域。
三、术语定义1. Modbus协议:一种开放的通信协议,用于在不同设备之间进行数据交换。
2. 主站:通过Modbus协议主动发起通讯请求的设备。
3. 从站:响应主站请求的设备。
4. 寄存器:用于存储数据的内存单元。
四、通讯方式1. 物理层:Modbus协议支持多种物理层接口,包括串行通讯(如RS-232、RS-485)和以太网通讯。
2. 数据链路层:Modbus协议使用简单的二进制传输格式,包括起始位、数据位、校验位和住手位等。
3. 传输方式:Modbus协议支持两种传输方式,即RTU(Remote Terminal Unit)和ASCII(American Standard Code for Information Interchange)。
五、功能码Modbus协议定义了一系列功能码,用于不同类型的通讯请求和响应。
以下是常用的功能码:1. 读取保持寄存器(Read Holding Registers):用于从从站读取保持寄存器中的数据。
2. 写入单个保持寄存器(Write Single Holding Register):用于向从站写入单个保持寄存器的数据。
3. 写入多个保持寄存器(Write Multiple Holding Registers):用于向从站写入多个连续保持寄存器的数据。
4. 读取输入寄存器(Read Input Registers):用于从从站读取输入寄存器中的数据。
5. 诊断(Diagnostics):用于执行诊断操作,如清除通讯错误计数器等。
六、通讯流程1. 主站发起请求:主站向从站发送通讯请求,包括功能码和相关参数。
Modbus通讯协议
Modbus通讯协议Modbus通讯协议是一种常用的工业控制领域的通讯协议,它是一种串行通讯协议,用于工业自动化领域的设备之间的数据传输。
Modbus通讯协议广泛应用于工业控制系统中,包括PLC、传感器、仪器仪表等设备之间的通讯。
本文将介绍Modbus通讯协议的基本原理、通讯格式、常见应用场景等内容,希望能够帮助大家更好地理解和应用Modbus通讯协议。
Modbus通讯协议基本原理。
Modbus通讯协议采用主从结构,通常由一个主站和多个从站组成。
主站负责发起通讯请求,而从站则响应主站的请求,并返回相应的数据。
在Modbus通讯中,主站和从站之间通过串行通讯或者以太网通讯进行数据交换。
Modbus通讯协议的通讯格式。
Modbus通讯协议采用简单的报文格式进行通讯,包括功能码、数据地址、数据内容等部分。
在Modbus通讯中,主站向从站发送请求报文,从站接收到请求后进行处理,并返回响应报文。
通讯中使用的功能码包括读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器等,不同的功能码对应不同的数据读取方式。
Modbus通讯协议的常见应用场景。
Modbus通讯协议广泛应用于工业控制系统中,常见的应用场景包括工业自动化控制、数据采集、远程监控等。
在工业自动化控制中,PLC与传感器、执行器之间的通讯通常采用Modbus通讯协议,实现对生产过程的监控和控制。
此外,Modbus通讯协议还被应用于楼宇自动化系统、智能电网、智能家居等领域。
总结。
Modbus通讯协议作为一种常用的工业控制通讯协议,具有通讯简单、易于实现、稳定可靠等特点,因此在工业控制领域得到了广泛的应用。
通过本文的介绍,相信大家对Modbus通讯协议有了更深入的了解,希望能够帮助大家更好地应用和实践Modbus通讯协议,为工业控制系统的建设和应用提供帮助。
modbus通讯协议格式
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主机:发起通信请求的设备。
2. Modbus从机:响应通信请求的设备。
3. 寄存器:用于存储和传输数据的内存单元。
4. 线圈:用于存储和传输布尔数据的内存单元。
三、通信格式1. 物理层Modbus通讯协议支持多种物理层,包括串行通信(如RS-232、RS-485)和以太网通信(如TCP/IP)。
具体的物理层协议需根据实际应用场景进行选择。
2. 数据帧结构Modbus通讯协议使用二进制格式进行数据传输。
每一个数据帧由以下几部份组成:- 地址码:用于标识通信的主机或者从机。
- 功能码:用于指定通信的操作类型。
- 数据域:包含具体的数据内容。
- 校验码:用于校验数据的完整性。
3. 功能码Modbus通讯协议定义了一系列功能码,用于指定不同的通信操作。
常用的功能码包括:- 读取线圈状态(功能码01)- 读取输入状态(功能码02)- 读取保持寄存器(功能码03)- 读取输入寄存器(功能码04)- 写单个线圈(功能码05)- 写单个寄存器(功能码06)- 写多个线圈(功能码15)- 写多个寄存器(功能码16)四、通信流程1. 主机发送请求Modbus主机向从机发送请求数据帧,包括地址码、功能码以及相关的参数。
2. 从机响应请求Modbus从机接收到主机的请求后,根据功能码执行相应的操作,并将执行结果封装在响应数据帧中发送给主机。
3. 错误处理如果从机无法正确执行主机的请求,将在响应数据帧中返回错误码,主机根据错误码进行相应的处理。
五、数据格式1. 线圈状态线圈状态用于存储布尔数据,每一个线圈占用一个位。
线圈状态的读取和写入通过对应的功能码进行操作。
Modbus标准通讯协议格式
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,给变频器发正转命令。
Modbus通讯协议详解
Modbus通讯协议详解一、引言Modbus通讯协议是一种用于工业自动化领域的通讯协议,广泛应用于监控、控制和数据采集等领域。
本文将详细介绍Modbus通讯协议的标准格式和相关内容。
二、协议结构Modbus通讯协议采用主从结构,主要包括以下几个组成部分:1. 物理层:定义了Modbus通讯的物理接口,包括电气特性、传输速率等。
2. 数据链路层:负责数据的传输和校验,包括帧的起始标识、地址、功能码、数据、错误检测等。
3. 应用层:定义了Modbus通讯的功能码和数据格式,包括读写数据、配置参数等。
三、功能码Modbus通讯协议定义了一系列功能码,用于实现不同的功能。
常用的功能码包括:1. 读取线圈状态(功能码01):用于读取远程设备的线圈状态。
2. 读取输入状态(功能码02):用于读取远程设备的输入状态。
3. 读取保持寄存器(功能码03):用于读取远程设备的保持寄存器。
4. 读取输入寄存器(功能码04):用于读取远程设备的输入寄存器。
5. 写单个线圈(功能码05):用于写入远程设备的单个线圈状态。
6. 写单个寄存器(功能码06):用于写入远程设备的单个保持寄存器。
7. 写多个线圈(功能码15):用于写入远程设备的多个线圈状态。
8. 写多个寄存器(功能码16):用于写入远程设备的多个保持寄存器。
四、数据格式Modbus通讯协议中的数据格式采用二进制格式表示。
具体的数据格式如下:1. 线圈状态和输入状态:采用位(bit)表示,每个位表示一个线圈或输入的状态,0表示OFF,1表示ON。
2. 保持寄存器和输入寄存器:采用16位的字(word)表示,每个字表示一个寄存器的值,取值范围为0~65535。
五、通讯流程Modbus通讯协议的通讯流程如下:1. 主机向从机发送请求帧,包括从机地址、功能码、数据等。
2. 从机接收到请求帧后进行处理,并返回响应帧,包括从机地址、功能码、数据等。
3. 主机接收到响应帧后进行解析和处理。
modbus协议格式
modbus协议格式Modbus是一种通信协议,常用于工业自动化领域中的数据传输。
该协议定义了一种以主从架构进行通信的方式,其中主设备(通常是一个控制器)通过发送命令来读取或写入从设备(如传感器、执行器等)的数据。
下面是Modbus协议的格式。
Modbus协议包括了不同的功能码,每个功能码对应一种操作。
常用的功能码包括读取和写入寄存器、读取和写入多个寄存器等。
以下是Modbus协议的格式:1. 通讯起始位:一个起始位用于标记通讯的开始。
通常是一个高电平信号。
2. 从设备地址位:一个8位的二进制数,用于标识从设备的地址。
每个从设备都有一个唯一的地址。
3. 功能码:一个8位的二进制数,用于标识所需执行的操作。
例如,功能码03表示读取多个寄存器的值。
4. 数据位:根据功能码的不同,数据位的格式也会有所不同。
在读取寄存器的操作中,数据位表示了要读取的寄存器地址以及寄存器数量。
在写入寄存器的操作中,数据位表示了寄存器地址和要写入的值。
5. CRC校验:一个16位的循环冗余校验码,用于检测数据传输过程中是否出现错误。
发送方会计算CRC校验码并将其附加到消息的末尾,接收方在接收消息后也会重新计算CRC校验码并与接收到的校验码进行比较,如果两者不一致,则说明数据传输过程中出现了错误。
6. 通讯结束位:一个结束位用于标记通讯的结束。
通常是一个低电平信号。
总体来说,Modbus协议的格式是比较简单且易于理解的。
通过定义好的功能码和数据位,主设备可以以统一的方式与不同的从设备进行通讯,实现数据的读取和写入操作。
同时,通过CRC校验码的使用,可以有效地检测和纠正数据传输过程中的错误,提高通讯的可靠性。
需要注意的是,Modbus协议有两种常用的传输方式:串行和以太网。
串行通信是通过RS485或RS232等物理层接口进行数据传输的,而以太网通信则是通过TCP/IP协议在局域网或广域网中进行数据传输的。
不同的通信方式会影响到数据帧的封装和物理层的传输。
modelbus协议格式
Modbus 协议是一种串行通信协议,用于在工业自动化领域中进行设备之间的数据交换。
它是一种开放的、标准化的协议,被广泛应用于各种工业设备中。
Modbus 协议的基本格式包括以下几个部分:
1.帧头:用于标识一个Modbus 帧的开始,通常为2 个字节。
2.地址:表示要通信的设备地址,通常为1 个字节。
3.功能码:表示要执行的操作类型,通常为1 个字节。
4.数据:包含要传输的数据,长度可以为0 到252 个字节。
5.校验:用于检测数据传输的错误,通常为2 个字节。
例如,一个简单的Modbus 请求帧的格式如下:
plaintext
其中:
•01:表示设备地址为1。
•03:表示功能码为读取保持寄存器。
•00 00:表示要读取的寄存器地址为0。
•00 06:表示要读取的寄存器数量为6。
•CRC:表示校验码。
需要注意的是,Modbus 协议有多种变体,例如ASCII 模式和RTU 模式,它们在数据传输方式和帧格式上略有不同。
此外,不同的设备可能会对Modbus 协议进行一些自定义的扩展,因此在实际应用中需要根据具体情况进行相应的调整。
Modbus通讯格式详解教程
Modbus通讯协议格式Modbus通讯协议格式为主机发送:[开始] [从机地址] [功能代码] [起始寄存器地址高8 位] [低8位] [写单寄存器数高8 位] [低8 位] [LRC 校验码] [CR] [LF]所以本文依据格式逐个介绍解疑:[开始] 为:[从机地址] 为已知;[功能代码] 的名称、作用将在下面介绍;[寄存器地址]分配及寄存器中值的含义将在下面介绍;[LRC 校验码] 可以用Commix软件算出来,详细请参考Commix相关资料;最后是实例加以说明验证。
功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时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 保留用于异常应答保护器Modbus 通讯协议:半双工RS485 口,传输距离≤1200 米。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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网络协议发送出去即可。
所以在这里我仅介绍一下Modbus的ASCII和RTU协议。
下表是ASCII协议和RTU协议进行的比较:协议开始标记结束标记校验传输效率程序处理ASCII:(冒号)CR,LFLRC低直观,简单,易调试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代码:BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码{BYTE byLrc = 0;char pBuf[4];int nData = 0;for(i=1; i<end; i+=2) //i初始为1,避开“开始标记”冒号 {//每两个需要发送的ASCII码转化为一个十六进制数pBuf [0] = pSendBuf [i];pBuf [1] = pSendBuf [i+1];pBuf [2] = '\0';sscanf(pBuf,"%x",& nData);byLrc += nData;}byLrc = ~ byLrc;byLrc ++;return byLrc;}2、CRC校验CRC域是两个字节,包含一16位的二进制值。
它由传输设备计算后加入到消息中。
接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。
仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。
LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。
整个过程要重复8次。
在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。
最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
CRC添加到消息中时,低字节先加入,然后高字节。
下面是它的VC代码:WORD GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码{WORD wCrc = WORD(0xFFFF);for(int i=0; i<nEnd; i++){wCrc ^= WORD(BYTE(pSendBuf[i])); for(int j=0; j<8; j++){if(wCrc & 1){wCrc >>= 1;wCrc ^= 0xA001; }else{wCrc >>= 1;}}}return wCrc;}对于一条RTU协议的命令可以简单的通过以下的步骤转化为ASCII协议的命令:1、把命令的CRC校验去掉,并且计算出LRC校验取代。
2、把生成的命令串的每一个字节转化成对应的两个字节的ASCII码,比如0x03转化成0x30,0x33(0的ASCII码和3的ASCII码)。
3、在命令的开头加上起始标记“:”,它的ASCII码为0x3A。
4、在命令的尾部加上结束标记CR,LF(0xD,0xA),此处的CR,LF表示回车和换行的ASCII 码。
所以以下我们仅介绍RTU协议即可,对应的ASCII协议可以使用以上的步骤来生成。
下表是Modbus支持的功能码:功能码名称作用01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02读取输入状态取得一组开关输入的当前状态(ON/OFF)03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05强置单线圈强置一个逻辑线圈的通断状态预置单寄存器把具体二进值装入一个保持寄存器07读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定08回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时读取通信事件记录可是主机检索每台从机的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号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
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。