Modbus通讯 功能码及实例
MODBUS协议范文(功能码及报文解析)
MODBUS 协议范文(功能码及报文解析)Modbu 是一种串行通信协议,是 Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Modbu 比其他通信协议使用的更广泛的主要原因有:公开辟表并且无版税要求相对容易的工业网络部署对供应商来说,修改挪移原生的位或者字节没有不少限制Modbu 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统( SCADA) 中, Modbu 通常用来连接监控计算机和 remoteterminalunit(RTU)。
Modbu 协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
对于通过 TCP/IP (例如以太网)的连接,存在多个 Modbu/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbu 有一个扩展版本 ModbuPlu(Modbu+或者 MB+),无非此协定是Modicon 专有的,和 Modbu 不同。
它需要一个专门的协处理器来处理类似HDLC 的高速令牌旋转。
它使用 1Mbit/的双绞线,并且每一个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
连接 ModbuPlu 到计算机需要特殊的接口,通常是支持 ISA (SA85) ,PCI或者者 PCMCIA 总线的板卡。
Modbu 协议是一个 mater/lave 架构的协议。
有一个节点是 mater 节点,其他使用 Modbu 协议参预通信的节点是 lave 节点。
每一个 lave 设备都有一个惟一的地址。
在串行和 MB+网络中,惟独被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个 Modbu 命令,但是通常也惟独一个主节点设备启动指令)。
MODBUS通讯协议解析及编码例程
MODBUS通讯协议解析及编码例程MODBUS通讯协议解析及编码例程ModBus通讯协议分为RTU协议和ASCII协议,下面就ModBus RTU协议简要介绍如下:一、通讯协议(一)、通讯传送方式:通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义也与MODBUS RTU通讯规约相兼容:编码 8位二进制起始位 1位数据位8位奇偶校验位1位(偶校验位)停止位1位错误校检CRC (冗余循环码)初始结构= ≥4字节的时间地址码 = 1 字节功能码 = 1 字节数据区 = N 字节错误校检 = 16位CRC 码结束结构= ≥4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus通讯规约定义功能号为1到127。
本仪表只利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:二字节的错误检测码。
(二)、通讯规约:当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1.信息帧结构地址码功能码数据区错误校验码8位 8位N × 8位 16位地址码:地址码是信息帧的第一字节(8位),从0到255。
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网络只是一个主机,所有通信都由他发出。
Modbus通讯功能码及实例
功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12 读取通信事件记录可是主机检索每台从机的ModBu s事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15 强置多线圈强置一串连续逻辑线圈的通断16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18 (884和MI CRO 84)可使主机模拟编程功能,修改PC状态逻辑19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20 读取通用参数(584L)显示扩展存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之22~64 保留作扩展功能备用65~72 保留以备用户功能所用留作用户功能的扩展编码73~119 非法功能120~127 保留留作内部作用128~255 保留用于异常应答实例在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
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网络只是一个主机,所有通信都由他发出。
modbus tcp通讯协议详解与实例演示
Modbus TCP是一种基于TCP/IP网络的通信协议,用于在工业自动化系统中实现设备间的数据交换。
以下是Modbus TCP通讯协议的详细解释和一个实例演示:1. Modbus TCP协议概述:- Modbus TCP是Modbus协议的一种变体,使用TCP/IP作为传输层协议,通过以太网进行数据通信。
- 它基于客户端-服务器架构,其中客户端发起数据请求,而服务器响应请求并提供数据。
- Modbus TCP使用简单的请求-响应模型,支持读取和写入数据寄存器、线圈、输入寄存器和离散输入等。
2. Modbus TCP帧结构:- Modbus TCP帧由标头和数据部分组成。
- 标头包括事务标识符、协议标识符、长度字段和单元标识符。
- 数据部分包含功能码、数据和错误检查字段。
3. Modbus TCP功能码:- Modbus TCP支持多种功能码用于不同的操作,如读取、写入、读取多个寄存器等。
- 常见的功能码包括读取线圈状态(0x01)、读取输入状态(0x02)、读取保持寄存器(0x03)、写单个寄存器(0x06)等。
4. Modbus TCP实例演示:- 假设有一个Modbus TCP服务器设备,IP地址为192.168.0.100,端口号为502。
- 客户端想要读取该设备上的保持寄存器中的数据。
- 客户端发送一个读取保持寄存器的请求帧,包括事务标识符、协议标识符、长度字段、单元标识符和功能码等。
- 服务器接收到请求后,解析请求帧,根据功能码读取保持寄存器中的数据。
- 服务器将读取到的数据封装成响应帧,并发送给客户端。
- 客户端接收到响应帧后,解析响应帧,提取出所需的数据。
Modbus TCP协议是一种常用的工业自动化通信协议,广泛应用于控制系统、仪表设备和传感器等。
通过使用Modbus TCP,不同的设备可以方便地进行数据交换和远程控制。
在实际应用中,可以使用各种编程语言和开发工具来实现Modbus TCP通讯,如Python、C#、Java等。
ModBus通信协议的【功能码】
ModBus通信协议的【功能码】
Modbus的功能码
ModBus 功能码与数据类型对应表:
RTU ⽅式读取整数据的例⼦:
解析⼀下:主机发送指令,访问从站地址为1,使⽤功能码03(读保持寄存器),起始地址⾼8位、低8位:表⽰想读取的模拟量的起始地址(起始地址为0)。
⽐如例⼦中的起始地址为38,⼗进制为:56。
寄存器数量⾼8位、低8位:表⽰从起始地址开始读多少个模拟量。
例⼦中为1个模拟量。
注意,在返回的信息中⼀个模拟量需要返回两个字节。
错误校验为CRC校验。
从站应答:设备地址和命令号和上⾯的相同。
返回的字节数:表⽰数据的字节个数,也就是数据1,2...n中的n的值。
例⼦中返回了1个模拟量的数据,因为⼀个模拟量需要2个字节所以共2个字节。
数据⾼低字节:41和24代表返回的1个模拟量的值,即⼗进制的16676。
错误校验为CRC校验。
modbus功能码10报文举例说明
modbus功能码10报文举例说明在Modbus通信协议中,功能码10用于写多个寄存器的操作。
下面是一个功能码10报文的例子,以便更好地理解其结构和用法。
首先,功能码10报文由以下部分组成:1. 从站地址:报文的第一个字节是从站地址,用于指定要操作的从站设备。
该地址通常是一个唯一的标识符,用于区分不同的设备。
2. 功能码:紧接着从站地址的下一个字节是功能码,这里使用功能码10表示要进行写操作。
3. 起始地址:接下来的两个字节表示要写入数据的起始寄存器地址。
通过指定起始地址,我们可以告诉从站设备要写入哪些寄存器的数据。
4. 寄存器数量:紧跟在起始地址后的两个字节表示要写入数据的寄存器数量。
这告诉从站设备要写入多少个连续的寄存器。
5. 字节数:下一个字节表示后续数据的字节数。
在功能码10中,每个寄存器的值需要用两个字节表示,所以字节数等于寄存器数量的两倍。
6. 数据:最后,报文中包含实际要写入的数据。
根据字节数指定的数量,每个数据值占两个字节。
举个例子,假设我们要将5个寄存器的值写入地址为1000的起始地址。
这个报文可以表示为:从站地址 | 功能码 | 起始地址 | 寄存器数量 | 字节数 | 数据------------------------------------------------1 | 10 | 03 E8 | 05 | 0A | 0F A0 21 75 92上述报文的含义是,将数据0x0FA0217592写入从站设备地址为1的寄存器1000至1004。
这是一个简单的功能码10报文的例子,用于说明如何使用Modbus协议的功能码10进行写入操作。
根据实际需求,起始地址、寄存器数量和数据可以根据实际情况进行修改。
Modbus协议提供了丰富的功能码,可以满足不同的通信需求。
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 保留用于异常应答实例在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
MODBUS协议范文(功能码及报文的详细解析)
MODBUS协议范文(功能码及报文的详细解析)Modbu是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Modbu比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbu允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbu通常用来连接监控计算机和remoteterminalunit(RTU)。
Modbu协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbu/TCP变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbu有一个扩展版本ModbuPlu(Modbu+或者MB+),不过此协定是Modicon专有的,和Modbu不同。
它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
连接ModbuPlu到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。
Modbu协议是一个mater/lave架构的协议。
有一个节点是mater节点,其他使用Modbu协议参与通信的节点是lave节点。
每一个lave设备都有一个唯一的地址。
在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbu命令,但是通常也只有一个主节点设备启动指令)。
一个ModBu命令包含了打算执行的设备的Modbu地址。
MODBUS协议(功能码及报文解析)-485功能码
MODBUS协议(功能码及报文解析)-485功能码哎呀,这可是个大家伙啊!今天我们就来聊聊MODBUS协议里的485功能码。
说到这个,我可是费了好大劲才搞明白的。
咱们得知道什么是485功能码。
简单来说,它就是一种通信协议,用来让设备之间互相传输数据。
那为什么要用到485功能码呢?因为它可以实现串行通信,而且传输距离远,抗干扰能力强。
很多设备都会选择使用485功能码来进行通信。
485功能码有哪些种类呢?其实,根据功能的不同,它可以分为很多种。
比如说,我们常见的有读线圈、写单个线圈、读离散输入线圈、写单个线圈和读/写多个线圈等。
这些功能码都有各自的作用,比如读线圈就是用来读取设备的输入状态,而写单个线圈则是用来设置设备的输出状态。
485功能码就像是一个神奇的钥匙,可以打开设备之间的沟通之门。
我们来看看如何解析485功能码。
这可不是一件容易的事情,因为每个功能码都对应着一种特定的操作。
我们需要仔细研究每个功能码的含义,才能正确地解析它们。
不过,别担心,我已经给大家整理好了一份详细的解析表,只要按照表格上的指示进行操作,就能轻松地解析出485功能码了。
光知道485功能码还不够,我们还得学会如何使用它们。
这可不是一件简单的事,因为不同的功能码需要不同的参数来支持。
在使用485功能码之前,我们必须要了解清楚每个功能码的具体用法。
只有这样,我们才能确保设备之间的通信是正常进行的。
现在我们已经知道了485功能码的基本知识。
接下来的问题就是:如何将这些知识应用到实际工作中呢?这个问题可不好回答啊!因为每个人的工作环境和需求都是不一样的。
我们需要根据自己的实际情况来选择合适的485功能码。
只有这样,我们才能发挥出485功能码的最大作用。
485功能码虽然看起来挺复杂的,但只要我们用心去学,一定能够掌握它。
而且,随着科技的发展,越来越多的设备开始采用485功能码进行通信。
学会485功能码对我们来说可是非常重要的哦!希望这篇文章能帮助大家更好地理解485功能码,让你们的工作更加顺利!。
modbus功能码10报文举例说明
Modbus功能码10报文介绍Modbus是一种通信协议,用于连接不同设备之间的通信。
Modbus功能码10报文是Modbus协议中的一种特定类型的报文,用于写入多个寄存器的值。
Modbus协议简介Modbus协议是一种基于主从通信模型的串行通信协议,广泛应用于工业自动化领域。
它定义了一种简单而有效的通信方式,可以在不同的设备之间进行数据交换。
Modbus协议有两种常用的传输方式:串行传输和以太网传输。
串行传输使用RS-232、RS-485等物理接口,而以太网传输使用TCP/IP协议栈。
Modbus协议定义了一系列功能码,用于读取和写入不同类型的数据。
功能码10用于写入多个寄存器的值。
Modbus功能码10报文结构Modbus功能码10报文是一种写多个寄存器的报文,其结构如下:字节功能1 地址2 功能码3 寄存器起始地址高字节4 寄存器起始地址低字节5 寄存器数量高字节6 寄存器数量低字节7 字节数8 数据1高字节9 数据1低字节……n 数据n高字节n+1 数据n低字节n+2 CRC校验高字节n+3 CRC校验低字节报文中的地址字段指定了从站的地址,功能码字段指定了要执行的操作。
寄存器起始地址字段指定了要写入的寄存器的起始地址,寄存器数量字段指定了要写入的寄存器的数量。
数据字段包含了要写入的寄存器的值。
CRC校验字段用于验证报文的完整性。
Modbus功能码10报文示例下面是一个Modbus功能码10报文的示例:01 10 00 01 00 03 06 01 02 03 04 05 06在这个示例中,报文的地址字段为01,功能码字段为10,寄存器起始地址为0001,寄存器数量为0003,字节数为06。
数据字段包含了要写入的寄存器的值。
Modbus功能码10报文的执行过程Modbus功能码10报文的执行过程如下:1.主站发送Modbus功能码10报文到从站。
2.从站接收报文并解析报文中的地址、功能码、寄存器起始地址、寄存器数量等字段。
MODBUS协议(功能码及报文解析)
MODBUS协议Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
M odbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
这两个变种都使用串行通讯(serial communication)方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。
被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus 有一个扩展版本 Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和 Modbus不同。
它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
modbus协议功能码及格式
modbus协议功能码及格式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、读位:一次读512 位(64BYTE)最多,最少16 位(但会读入2 个BYTE)2、写位:一次只能写1 位(针对具体地址写)3、读字:一次最多可读32 个字(64BYTE)4、写字:一次最多可写32 个字(64BYTE)支持的功能码(16 进制表示):01——读位COIL,对应PLC 的DO 状态02——读位INPUT,对应PLC 的DI 状态03——读字,对应PLC 的AO 状态04——读字,对应PLC 的AI 状态05——写位,只写一位COIL,对应PLC 的DO 输出10——写字,写多字,对应PLC 的AO 输出范例:01 功能码:例读DO,2#0X/88(二号站,88 号0X 线圈,此处88 位十进制)发出:02 01 00 50 00 10 3D E4意思:站号02,功能玛01,起始地址0050(十六进制,相当于十进制80),读位长度(0010,相当于十进制16),3DE4 为CRC 校验(先低字节后高字节)回答:02 01 02 80 00 9C 3C 意思:站号02,功能玛01,后面数据(字节)长度02,数据字节1(低字节)80,数据字节2(高字节)00,数据字节先低后高,最后CRC 校验9C3C02 功能玛,读DI 位,例:读1#1X/2,发出:01 02 00 00 00 10 3D C6意思:起始地址0000,一次读入一个字(16 位)长度0010回:01 02 02 FF FF B8 0803 功能玛:例读2#4X/88发出:02 03 00 57 00 01 35 E9回答:02 03 02 00 01 3D 84注意:此功能玛下读入的数据字节排列为先高后低,表明4X/88 的数值为000104 功能玛:读字AI,例1#3X/3发出:01 04 00 02 00 01 90 0A表示:读入的字长度为0001(1 个字)回:01 04 02 10 00 B4 F0 表示3X/3 的值为HEX1000 即十进制4096,先高字节后低字节05 功能玛:例写2#0X/88发出:02 05 00 57 FF 00 3D 9D,“FF 00”表示写“1”,“00 00”表示写“0”回应:02 05 00 57 FF 00 3D 9D,表明写“1”成功10 功能玛:例2#0010 和0011,写连续多字,例写2#0010 和0011 发出:02 10 00 10 00 02 04 XX XX XX XX XX XX 字长字节长CRC回:02 10 00 10 00 02 XX XX 字长CRC例:写-3 到1#4X/1发出:01 10 00 00 00 01 02 FF FD 26 21,负数采用补码回:01 10 00 00 00 01 01 C9。
modbus 通讯功能码
AN2002 通讯系统的应用
AN2002
COPYRIGHT © 2008
2009/02/15
概述...................................................................................................................................................2 MODBUS通讯协议.......................................................................................................................... 2
主站程序:............................................................................................................................. 12 从站程序................................................................................................................................. 15 试验步骤................................................................................................................................. 15
在没有特殊配置的情况下,PLC 总是作为 MODBUS 从站。因此只要连接没有问题,通 讯设置没有问题,并且知道从站站号(或者使用广播地址 0)。PLC 总是可以被 GUTTA 编 程软件找到。在某些 PLC 程序的配置下,将 PLC 的某个通讯口配置为主站,可能会导致通 讯口无法与 GUTTA 编程软件通讯。若将 PLC 的所有通讯口都配置为主站了,就会导致 PLC 程序无法被修改和更新。这个时候可以采用 PLC 的 FLASH 编程工具 GUTTA Flash Utility 来清除 PLC 程序。PLC 程序被清除后,所有通讯口被恢复成默认配置。之后 GUTTA 编程 软件就能轻松的找到 PLC 了。
modbus功能码10报文举例说明
modbus功能码10报文举例说明(实用版)目录1.Modbus 功能码 10 简介2.Modbus 功能码 10 报文结构3.Modbus 功能码 10 报文举例4.Modbus 功能码 10 报文的解析5.Modbus 功能码 10 的应用场景正文【Modbus 功能码 10 简介】Modbus 是一种串行通信协议,广泛应用于工业自动化领域。
它提供了一种在设备之间进行数据交换的标准方法。
Modbus 协议中有许多功能码,每个功能码都对应一种特定的数据操作。
其中,功能码 10(Read Holding Registers)是一种用于读取保持寄存器数据的功能码。
【Modbus 功能码 10 报文结构】Modbus 功能码 10 的报文结构包括:1.帧头:包括地址码、功能码、数据长度和奇偶校验。
2.保持寄存器地址:表示要读取的寄存器的起始地址。
3.寄存器数量:表示要读取的寄存器数量。
4.数据:表示读取到的寄存器数据。
5.帧尾:包括校验和和结束符。
【Modbus 功能码 10 报文举例】假设我们要读取设备 ID 为 10 的设备上的保持寄存器,起始地址为0,读取 3 个寄存器的数据。
那么,Modbus 功能码 10 的报文如下:帧头:01 0x10 03 0x00保持寄存器地址:00 01寄存器数量:03数据:0x01 0x02 0x03帧尾:0x04 0x00【Modbus 功能码 10 报文的解析】Modbus 功能码 10 的报文解析过程如下:1.根据帧头中的地址码,找到对应的设备。
2.根据保持寄存器地址,确定读取寄存器的起始地址。
3.根据寄存器数量,读取指定数量的寄存器数据。
4.将读取到的数据按照 Modbus 协议的格式返回。
【Modbus 功能码 10 的应用场景】Modbus 功能码 10 广泛应用于工业自动化领域,例如:1.采集设备上的保持寄存器数据,用于监控设备运行状态。
2.修改保持寄存器数据,用于控制设备的运行。
modbus协议功能码及格式
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 功能码一览Modbus 网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包 括软件。
它可应用于各种数据采集和过程监控。
下表1是Mo d Bus 的功能码定义。
Modbus网络只是一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
表2是ModB us各功能码对应的数据类型。
(1)在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBu s系统只能使用一种模式,不允许2种模式混用。
一种模式是AS CII(美国信息交换码),另一种模式是R TU(远程终端设备)这两种模式的定义见表3的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和P C主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为AS CII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
表4给出了以R TU 方式读取整数据的例子(CRC-16(循环冗余错误校验)CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。
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 保留用于异常应答实例在这些功能码中较长使用得就是1、2、3、4、5、6号功能码,使用它们即可实现对下位机得数字量与模拟量得读写操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
功能码名称作用
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 保留用于异常应答
实例
在这些功能码中较长使用的是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。
<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>注意此命令一条只能下置一个模拟量的状态。
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。