MODBUS功效码与寄存器
- 格式:pdf
- 大小:417.92 KB
- 文档页数:5
modbus协议报文功能码介绍modbus协议是一种常用于工业控制系统的通信协议,用于在主控设备(如PLC)和从设备(如传感器、执行器)之间进行数据传输。
modbus协议报文是通信过程中的基本单位,其中功能码用于指示报文的目的和操作类型。
本文将深入探讨modbus协议报文中的功能码。
功能码的定义功能码是modbus协议报文的一个字段,用于指示报文的目的和操作类型。
在modbus协议中,功能码是一个8位的无符号整数,取值范围为1到255。
根据功能码的不同取值,报文可以分为读取数据、写入数据、控制设备等不同类型。
常见的功能码modbus协议定义了一些常见的功能码,用于满足各种不同的通信需求。
下面是一些常见的功能码及其对应的操作类型:读取操作1.读取线圈状态(功能码01):用于读取从设备的离散输出线圈的状态,返回线圈的状态值。
2.读取输入状态(功能码02):用于读取从设备的离散输入线圈的状态,返回线圈的状态值。
3.读取保持寄存器(功能码03):用于读取从设备的保持寄存器的值,返回寄存器的值。
4.读取输入寄存器(功能码04):用于读取从设备的输入寄存器的值,返回寄存器的值。
写入操作1.写单个线圈(功能码05):用于写入从设备的单个线圈的状态,将线圈的状态设置为指定的值。
2.写单个保持寄存器(功能码06):用于写入从设备的单个保持寄存器的值,将寄存器的值设置为指定的值。
3.写多个线圈(功能码15):用于写入从设备的多个线圈的状态,将多个线圈的状态设置为指定的值。
4.写多个保持寄存器(功能码16):用于写入从设备的多个保持寄存器的值,将多个寄存器的值设置为指定的值。
控制操作1.屏蔽写单个保持寄存器(功能码22):用于对从设备的保持寄存器进行位屏蔽写操作,根据指定的屏蔽值和数据值进行写入操作。
功能码的使用示例下面是一个使用modbus协议报文功能码的示例:1.首先,主控设备向从设备发送一个读取保持寄存器的报文,功能码为03。
1、“01”读取线圈状态发送:功能代码1字节 0x01起始地址2字节 0x0000~0xFFFF 线圈数量2字节 1~2000(0x7D0)接收:功能代码1字节 0x01字节数1字节 N线圈状态n字节n = N/N+1N=读取线圈个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节 0x81错误代码1字节 01/02/03/04例子:返送:01 01 00 00 00 19 FD C0 即:读取25个线圈的状态返回:01 01 04 0F 03 80 01 A8 C5FC BN N1 N2 N3 N4 CRC,N1为前8位的状态以此内推。
2、“02”读取输入状态发送:功能代码1字节 0x02起始地址2字节 0x0000~0xFFFF 输入点数量2字节 1~2000(0x7D0)接收:功能代码1字节 0x02字节数1字节 N输入点状态n字节n = N/N+1N=读取输入点个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节 0x82错误代码1字节 01/02/03/04例子:发送:01 02 00 00 00 19 B9 C0读25个输入线圈的状态返回:01 02 04 00 00 00 00 FB E2FC BN N1 N2 N3 N4 CRC3、“03”保持型寄存器读取发送:功能代码1字节 0x03起始地址2字节 0x0000~0xFFFF 寄存器数量2字节 1~125(0x7D)接收:功能代码1字节 0x03字节数1字节 2*N寄存器值 N*2字节N=寄存器数量出错时的返回:功能代码1字节 0x83错误代码1字节 01/02/03/04例子:发送:01 03 00 00 00 03 05 CB读3个寄存器里面的值返回:01 03 06 01 2C 01 2C 01 2C 71 1A返回3个寄存器的值,每个寄存器的值有2个BYTE组成4、“05”写单一线圈发送:功能代码1字节 0x05线圈地址2字节 0x0000~0xFFFF 写入值2字节 0x0000或0xFF00接收:功能代码1字节 0x05线圈地址2字节 0x0000~0xFFFF 写入值2字节 0x0000或0xFF00出错时的返回:功能代码1字节 0x85错误代码1字节 01/02/03/04例子:发送:01 05 00 00 FF 00 8C 3A写单个线圈的值,把地址为0的线圈置一。
Modbus功能码一览________________________________________Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1 ModBus功能码功能码名称作用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网络只是一个主机,所有通信都由他发出。
modbus协议说明Modbus协议说明Modbus协议是一种通信协议,用于在工业自动化领域中的设备之间进行通信。
该协议最初由Modicon公司于1979年开发,现在已成为工业领域中最流行的通信协议之一。
1. Modbus协议的基本原理Modbus协议基于主从结构,其中一个设备充当主设备,而其他设备则充当从设备。
主设备可以向从设备发送命令,并接收从设备返回的响应。
这种结构使得多个设备可以同时进行通信,提高了系统的效率和可靠性。
2. Modbus协议的数据格式Modbus协议使用16位寄存器来存储数据。
每个寄存器都有一个唯一的地址,并且可以存储16位二进制数值。
数据可以以不同的方式进行传输,包括二进制、十进制和十六进制。
3. Modbus协议的功能码Modbus协议使用功能码来标识不同类型的命令和请求。
以下是几个常见的功能码:- 功能码01:读取单个线圈状态- 功能码02:读取单个离散输入状态- 功能码03:读取多个寄存器值- 功能码04:读取输入寄存器值- 功能码05:写单个线圈状态- 功能码06:写单个寄存器值- 功能码15:写多个线圈状态- 功能码16:写多个寄存器值4. Modbus协议的应用场景Modbus协议广泛应用于工业自动化领域中的各种设备之间的通信。
例如,它可以用于控制系统、传感器和执行器等设备之间的通信。
此外,Modbus协议还可以用于监控和记录数据,以及进行远程故障排除。
5. Modbus协议的优点Modbus协议具有以下几个优点:- 易于实现和使用- 可以在不同类型的设备之间进行通信- 支持多种数据格式和传输方式- 可以同时与多个设备进行通信6. Modbus协议的缺点Modbus协议也存在一些缺点:- 安全性较差,容易受到攻击- 传输速度较慢,不适合高速数据传输- 不支持大量数据的传输7. Modbus TCP/IP协议Modbus TCP/IP是一种基于TCP/IP网络的Modbus协议扩展。
ModbusASCII 是一种用于串行通信的协议,它通常用于工业自动化领域。
在实际应用中,我们经常需要发送和接收 ModbusASCII 报文,下面我们就来看几个实际的报文实例,以便更好地理解和应用ModbusASCII 协议。
1. 单个功能码读取输入寄存器假设我们需要读取一个设备的输入寄存器,并且该设备的位置区域为01,寄存器的起始位置区域为 0000,需要读取的寄存器数量为 10。
那么对应的 ModbusASCII 报文为:```发送:01 04 00 00 00 0A 3A C4解释:- 01:设备位置区域- 04:功能码,表示读取输入寄存器- 00 00:起始位置区域- 00 0A:寄存器数量- 3A C4:CRC 校验```2. 多个功能码写入多个保持寄存器假设我们需要向设备写入多个保持寄存器的数值,并且该设备的位置区域为 02,寄存器的起始位置区域为 1000,需要写入的寄存器数量为 4,数据分别为 1234、5678、xxx、1213。
那么对应的ModbusASCII 报文为:```发送:02 10 03 E8 00 04 08 9B 13 88 23 40 CA解释:- 02:设备位置区域- 10:功能码,表示写入多个保持寄存器- 03 E8:起始位置区域- 00 04:寄存器数量- 08 9B 13 88 23 40:要写入的数值- CA:CRC 校验```3. 单个功能码读取离散输入假设我们需要读取一个设备的离散输入,并且该设备的位置区域为03,输入的起始位置区域为 0000,需要读取的数量为 8。
那么对应的ModbusASCII 报文为:```发送:03 02 00 00 00 08 84 0B解释:- 03:设备位置区域- 02:功能码,表示读取离散输入- 00 00:起始位置区域- 00 08:数量- 84 0B:CRC 校验```通过以上实例,我们可以看到不同功能码对应的 ModbusASCII 报文结构,以及如何根据具体需求来构建报文。
Modbus 常见功能码分析
深圳神枪 1、 莫迪康中常见功能码描述:
寄存器 读取功能码
写入功能码功能码说明 输入继电器 02 —
02: 读取输入状态 输出继电器 01
05
15
01: 读取线圈状态 05: 强制单个线圈 15: 强制多个线圈 输入寄存器 04 —
04: 读输入寄存器 输出寄存器 03
06
16
03: 读保持寄存器 06: 预置单个寄存器 16: 预置多个寄存器
2、 国家标准中常见功能码描述:
3、分析:
读:功能码01为读内部比特量输出状态;如告警、变位、故障、异常等。
功能码02为读外部开关量输入状态;如光耦输入、继电器输入等。
功能码03为读内部输出量的寄存器;如一些配置参数、定值的读取等。
功能码04为读外部输入量的寄存器;如外部电压电流模拟量,温湿度等。
写:功能码05为写内部单个开关量状态;如光耦输出、继电器输出等。
功能码06为写内部单个寄存器的值;如更改配置参数、定值等。
功能码15为写内部多个开关量状态;如同05。
功能码16为写内部多个寄存器的值;如同06;对时是写多寄存器,用此功能码。
modbus 指令字解释Modbus协议是一种常用于工业自动化领域的通信协议,用于在不同设备之间进行数据交换。
它定义了一组指令字,通过这些指令字来实现不同设备之间的通信和数据传输。
下面将对Modbus协议中常见的指令字进行解释和说明。
1. 读取线圈状态(功能码01):该指令用于读取设备上的线圈(Coil)的状态,线圈可以理解为二进制的开关。
指令中包括读取的起始地址和要读取的线圈数量。
2. 读取输入状态(功能码02):该指令用于读取设备上的输入(Input)的状态,输入可以是触点、传感器等。
指令中包括读取的起始地址和要读取的输入数量。
3. 读取保持寄存器(功能码03):该指令用于读取设备上的保持寄存器(Holding Register)的值,保持寄存器是用于存储设备参数、控制信息等的存储单元。
指令中包括读取的起始地址和要读取的寄存器数量。
4. 读取输入寄存器(功能码04):该指令用于读取设备上的输入寄存器(Input Register)的值,输入寄存器是用于存储输入信号的存储单元。
指令中包括读取的起始地址和要读取的寄存器数量。
5. 写单个线圈(功能码05):该指令用于向设备的某个线圈写入单个值,指令中包括要写入的线圈地址和写入的值。
6. 写单个保持寄存器(功能码06):该指令用于向设备的某个保持寄存器写入单个值,指令中包括要写入的寄存器地址和写入的值。
7. 写多个线圈(功能码15):该指令用于向设备的多个线圈写入连续的值,指令中包括起始线圈地址、要写入的线圈数量和写入的值。
8. 写多个保持寄存器(功能码16):该指令用于向设备的多个保持寄存器写入连续的值,指令中包括起始寄存器地址、要写入的寄存器数量和写入的值。
9. 屏蔽写寄存器(功能码22):该指令用于指定一个屏蔽来更新设备的指定保持寄存器,其值通过AND操作与寄存器的当前值相应位进行屏蔽后再进行OR操作。
10. 强制单个线圈(功能码23):该指令用于向设备的某个线圈强制设定某个值,即不论线圈原来的值是什么,都将被设置为指定值。
modbus 功能码Modbus是一种常用于工业自动化领域的通信协议,它定义了设备之间通过串口、以太网等方式进行通信的格式和规则。
Modbus协议定义了多种功能码,用于实现不同的功能。
1. 读取线圈状态(Read Coil Status):功能码为01,用于读取设备中的线圈状态,返回的结果表示每个线圈是否被触发。
2. 读取离散输入状态(Read Discrete Inputs):功能码为02,用于读取设备中的离散输入状态,返回的结果表示每个输入是否处于高电平状态。
3. 读取保持寄存器(Read Holding Registers):功能码为03,用于读取设备中的保持寄存器的值,返回的结果表示每个寄存器的数值。
4. 读取输入寄存器(Read Input Registers):功能码为04,用于读取设备中的输入寄存器的值,返回的结果表示每个寄存器的数值。
5. 写单个线圈(Write Single Coil):功能码为05,用于设置设备中的单个线圈的状态,可以将线圈设为打开或关闭。
6. 写单个保持寄存器(Write Single Register):功能码为06,用于设置设备中的单个保持寄存器的值,可以将寄存器设定为一个指定的数值。
7. 写多个线圈(Write Multiple Coils):功能码为15,用于设置设备中多个线圈的状态,可以同时将多个线圈设为打开或关闭。
8. 写多个保持寄存器(Write Multiple Registers):功能码为16,用于设置设备中多个保持寄存器的值,可以同时将多个寄存器设定为多个指定的数值。
9. 屏蔽写寄存器(Mask Write Register):功能码为22,通过给定一个屏蔽和一个数据,在指定的保持寄存器上进行位操作。
以上仅是Modbus协议中部分常用的功能码,不同的设备可能支持不完全相同的功能码。
通过使用这些功能码,可以实现设备之间的数据读写、参数设置等功能。
Modbus功能码一览________________________________________Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1 ModBus功能码功能码名称作用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网络只是一个主机,所有通信都由他发出。
0 引言
在攀钢电讯处低压配电系统中,采用“集中监控,分散检测”的原则,由中控室计算机和变电室配电柜组成实时工业控制网,将Modbus通信总线应用于低压配电系统电量的监测。
由于所选用的ABB公司电力监测部件PMC916、RSI32具有标准Modbus通信接口,利用其本身的通信功能实现数据交换,不仅可以获得更完整的
信息,而且节省了大量的布线。
1 现场总线数据通信网络的结构
本案例充分利用了现场总线技术的优点来设计、开发系统,并满足了系统对可靠性和灵活性的要求,其数据通信网络结构如图1所示。
图1 网络结构图
该系统现场总线网络结构为RS2485通信环网,通信介质为双绞线,通信协议为Modbus,配电柜进线电压、电流、功率因素、频率等遥测信号通过ABB 公司PMC916电力监测与控制装置检测,配电柜内断路器的工作状态等遥信信号通过ABB 公司RSI32 检测,PMC916和RSI32作为RS2485通信网络的工作站节点,将采集的信号通过Modbus协议转换为控制信号传送到上位机,实现对电量信号的监控;上位PC机为研华工控机,监控软件选用的是国产软件组态王;RS2232 /RS2485转换器为研华公司4520通信模块。
总线结构安全、简洁,具有很高的可靠性和实用性。
2 Modbus数据通信
2.1 数据格式
该系统采用的Modbus总线,是一种串行总线结构,在串行通信中,不论数据类型如何,它们都以帧的形式进行传输,其基本数据帧格式如下:地址码:8位地址码为通信传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
每个从机都具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:8位,是通信传送的第二个字节。
Modbus通信规约定义功能码为
1~127,ABB PMC916和RSI32只利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
功能码对照如表1 所示。
表1 功能码对照表
数据区:N×8位,数据区包含需要从机执行什么动作或由从机采集的返送信息。
这些信息可以是数值、参考地址等。
例如,功能码告诉从机读取寄存器的值,则数据区必需包含要读取寄存器的起始地址及读取长度。
对于不同的从机,地址和数据信息都不相同。
差错校验码:16位,主机或从机可用校验码进行判别接收信息是否出错。
有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,差错校验码保证了主机或从机对在传送过程中出错的信息不起作用。
这样增加了系统的安
全和效率。
错误校验所有位采用CRC-16进行计算,计算中的多项式为
校验方法。
2.2 通信规约
当通信命令发送至PMC916、RSI32设备时,符合相应地址码的设备接通信命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及差错校验码。
如果出错就不发送任何信息。
3 Modbus实现电量监测
系统采用国产软件“组态王6.0”为上位监控软件,ABB公司的电力遥测遥信
装置PMC916和RSI32为Modbus通信网络的从站, PMC916 和RSI32支持Modbus RTU 通信协议,通过在组态王中配置完成Modbus的通信功能,实现上位机与ABB PMC916和RSI32的数据交换。
具体配置如下:①由于PMC916和RSI32具有标准Modbus通信协议,在组态
王中定义COM1设备时,选择PLC→Mod2icon→Modbus(RTU)→串行,并按如下参
数配置:波特率:9600bps数据位:8位校验位:1位(偶校验)停止位:1位②
每台PMC916、RSI32配置唯一的设备地址,地址范围为1~32。
③建立数据字典,定义通信数据的寄存器地址和数据类型。
组态王寄存器、数据类型说明如表2所示,所定义的寄存器与设备参数的对应关系如表3所示。
表2 组态王寄存器、数据类型
表3 寄存器与设备参数的对应关系表
④对应数据字典寄存器地址和设备寄存器地址
在调试过程中发现,使用Modbus协议时,定义组态王数据字典寄存器的地址时,比要读的设备的寄存器的实际地址加一,这一点相当重要。
如:
寄存器:00017数据类型:BIT逻辑线圈:对应Modbus中的功能码为1 (读)或5(写),对应设备的寄存器地址为10016或50016(这要取决于所要执行的是写还是读操作功能)。
寄存器:10012数据类型:bit输入位寄存器:对应Modbus中的功能码为
2(读),对应设备的寄存器地址为20011。
执行的是读操作功能。
寄存器:30001数据类型:UINT输入寄存器:对应Modbus中的功能码为
4(读),对应设备的寄存器地址为40000。
执行的是读操作功能。
寄存器:40002数据类型:UINT输出(保持)寄存器:对应Modbus中的功能码为3(读)或6(写),对应设备的寄存器地址为30001或60001(这要取决于所要执行的是写还是读操作功能)。
⑤配置完成,总线系统上电设备工作过程如下:初始化硬件:初始化Modbus
驱动器、初始化串行通信口;等待PMC916、RSI32配制命令;初始化模块寄存器;打开驱动端口。
以上工作完成后,上位PC就可与其节点进行实时通信,实现电量的监测。
其
监控主画面如图2所示。
图2 数据监测主画面
4 结束语
本电力参数、信号监控系统充分利用了数据通信网络技术,在上位PC机的动
态功能画面上可实现对配电站电量和信号的采集、监控、操作、记录和报警等功能。
该系统符合当前控制的需求,真正实现了“集中控制,分散危险”。
该Modbus总
线通信系统已成功投入运行,其性能可靠、数据传输速率快,完全能满足工艺要求。