H5U-通讯-MODBUS元件地址编码和功能码定义
- 格式:pdf
- 大小:632.08 KB
- 文档页数:20
MODBUS协议Modbus是一种串行通信协议,是于____年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议,并且现在是工业电子设备之间相当常用的连接方式。
Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口物理层进行。
对于通过(例如)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus 有一个扩展版本Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和Modbus不同。
它需要一个专门的协处理器来处理类似的高速令牌旋转。
它使用1Mbit/s的,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。
Modbus协议是一个master/slave 架构的协议。
有一个节点是master 节点,其他使用Modbus协议参与通信的节点是slave 节点。
每一个slave 设备都有一个唯一的地址。
在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。
一个ModBus命令包含了打算执行的设备的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网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表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是一种串行通信协议,是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的功能码
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功能码Modbus功能码是一种数据通信协议,常用于工业自动化领域的设备间通信。
Modbus功能码定义了设备之间传输数据的操作类型,包括读取和写入数据。
以下是常见的几个Modbus功能码:1. 读取线圈状态(Read Coils)功能码 0x01:该功能码用于从Modbus设备中读取开关型线圈的状态(0或1),线圈通常用于控制外部开关和继电器等设备。
2. 读取输入状态(Read Input Discrete)功能码 0x02:该功能码用于从Modbus设备中读取输入开关型变量的状态,输入开关型变量与外部设备的输入信号相对应。
3. 读取保持寄存器(Read Holding Registers)功能码 0x03:该功能码用于从Modbus设备中读取保持寄存器中的数据,保持寄存器通常用于存储需要读取或写入的数据。
4. 读取输入寄存器(Read Input Registers)功能码 0x04:该功能码用于从Modbus设备中读取输入寄存器中的数据,输入寄存器通常用于存储传感器测量得到的实时数据。
5. 写单个线圈(Write Single Coil)功能码 0x05:该功能码用于向Modbus设备中写入单个线圈的状态,可以用于控制外部开关和继电器等设备。
6. 写单个保持寄存器(Write Single Register)功能码 0x06:该功能码用于向Modbus设备中写入单个保持寄存器的数据,可以用于设置设备的参数或发送控制命令。
7. 写多个线圈(Write Multiple Coils)功能码 0x0F:该功能码用于向Modbus设备中连续写入多个线圈的状态。
8. 写多个保持寄存器(Write Multiple Registers)功能码0x10:该功能码用于向Modbus设备中连续写入多个保持寄存器的数据。
以上是常见的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是一种串行通信协议;是于1979年;为使用可编程逻辑控制器PLC而发表的..事实上;它已经成为工业领域通信协议;并且现在是工业电子设备之间相当常用的连接方式..Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说;修改移动原生的位或字节没有很多限制Modbus允许多个设备连接在同一个网络上进行通信;举个例子;一个由测量温度和湿度的装置;并且将结果发送给计算机..在数据采集与监视控制系统SCADA中;Modbus通常用来连接监控计算机和remoteterminalunitRTU..Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本..大多数Modbus设备通信通过串口物理层进行..对于串行连接;存在两个变种;它们在数值数据表示不同和协议细节上略有不同..Modb usRTU是一种紧凑的;采用二进制表示数据的方式;ModbusASCII是一种人类可读的;冗长的表示方式..这两个变种都使用串行通讯serialcommunication方式..RTU格式后续的命令/数据带有的校验和;而ASCII格式采用纵向冗余校验的校验和..被配置为RTU变种的节点不会和设置为ASCII变种的节点通信;反之亦然..对于通过例如的连接;存在多个Modbus/TCP变种;这种方式不需要校验和的计算..对于所有的这三种通信协议在数据模型和功能调用上都是相同的;只有封装方式是不同的..Modbus有一个扩展版本ModbusPlusModbus+或者MB+;不过此协定是Modicon专有的;和Modbus不同..它需要一个专门的协处理器来处理类似的高速令牌旋转..它使用1Mbit/s 的;并且每个节点都有转换隔离装置;是一种采用转换/边缘触发而不是电压/水平触发的MODBUSTCP报文实际上MODBUSRTU与ASCII的内容是完全相同的;不同的的ASCII方式用“:”标识帧起始;用“CRLF”标识帧结束..校验采用LRC;把RTU帧中一个字节的内容换成了2个ASCII 字符..比如在RTU方式下设备地址01只有一个字节;在ASCII方式下转换成字符串“01”1MODBUS协议相当复杂;但是常用的命令也就简单的几个;01;02;03;04;05;06;15;16号N=读取数量/8如果余数不为0则N=N+1举例举例举例MODBUS协议在智能设备中的应用上面讲述了MODBUS协议的报文以及命令;那么在智能设备中如何使用这个协议呢如果智能设备有开关量输入输出;模拟量输入输出;有计数器等..很明显开关量输入可以映射到10001地址;第一路开关量输入为10001;第二路为10002;………开关量输出映射到00001地址;第一路为00001;第二路为00002;…….模拟量输入映射到30001地址;第一路为30001;第二路为30002;……模拟量输出和计数器输入映射到40001地址;第一路为40001;第二路为40002;……当然也可以把所有的数据都放在保持寄存器中;这样对于MODBUS主设备访问时要简单;访问效率能提高;但是处理起来略显繁琐..。
●00001 ~ 09999 :离散量输出继电器编号●10001 ~ 19999 :离散量输入继电器编号●30001 ~ 39999 :模拟量输入寄存器编号●40001 ~ 49999 :保持型输出寄存器编号二、3区是读模拟量输入寄存器,4区是用于写数据到输出寄存器。
通讯帧里的设备地址=(4位十进制设备编号-1)转换成16进制如用功能码02读取1区中编号为10012的输入继电器的状态,通讯帧里的设备地址就要转换成:0012-1=(0011)十进制=(000B)十六进制MODBUS协议整理——功能码简述1.MODBUS功能码简述下表列出MODBUS支持的部分功能代码:以十进制表示。
表1.1 MODBUS部分功能码1.1功能码说明功能码可以分为位操作和字操作两类。
位操作的最小单位为BIT,字操作的最小单位为两个字节。
【位操作指令】读线圈状态01H,读(离散)输入状态02H,写单个线圈06H和写多个线圈0FH。
【字操作指令】读保持寄存器03H,写单个寄存器06H,写多个保持寄存器10H。
1.2寄存器地址分配表1.2 MODBUS寄存器地址分配1.3寄存器种类说明表1.3 MODBUS寄存器种类说明1.4 PLC地址和协议地址区别PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛。
1.4.1 寄存器PLC地址寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。
PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。
第一位数字和寄存器类型的对应关系如表1所示。
PLC地址例如40001、30002等。
1.4.2 寄存器协议地址寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。
再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然两个PLC寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。
MODBUS通讯协议及编程ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBus RTU 通讯协议,如:YD2000智能电力监测仪、巡检表、数显表、光柱数显表等。
下面就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从设备执行的操作类型的数字代码。
Modbus协议定义了许多不同的功能码,但在常见的Modbus RTU和Modbus TCP通信中,最常用的功能码是读取保持寄存器和写入单个寄存器。
下面我将从两个角度分别介绍这两个功能码。
首先,读取保持寄存器的功能码是03。
这个功能码用于从Modbus从设备中读取连续的保持寄存器的值。
保持寄存器是一种存储器件,用于存储数据。
通过使用功能码03,主站可以向从站发送请求,从而获取保持寄存器中的数据。
这个功能码是在Modbus协议中非常常见的,因为它允许主站实时监控和获取从站中的数据。
其次,写入单个寄存器的功能码是06。
这个功能码用于向Modbus从设备中写入单个寄存器的值。
通过使用功能码06,主站可以向从站发送请求,从而将特定数值写入从站的寄存器中。
这个功能码通常用于控制类的应用,主站可以通过写入单个寄存器来改变从站设备的状态或参数。
总的来说,这两个功能码是Modbus通信中非常常用的,它们分
别用于读取和写入寄存器的操作。
通过使用这两个功能码,Modbus 通信可以实现数据的采集和控制,非常适用于工业自动化等领域。
希望这样的回答能够满足你的需求。
(完整版)MODBUS协议(功能码及报文解析)(可编辑修改word版)MODBUS 协议Modbus 是一种串行通信协议,是Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Mod bus 比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus 通常用来连接监控计算机和 rem ote 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 的高速令牌旋转。
..;. 关于 MODBUS 各地址的说明MODBUS 协议中设备类型为 0x,1x,3x,4x,5x,6x,还有 4x_bit,3x_bit 等,下面分别说明这些设备类型在 MODBUS 协议中支持哪些功能码。
0x:是一个可读可写的设备类型,相当于操作 PLC 的输出点。
该设备类型读位状态的时候,发出的功能码为 01H,写位状态的时候发出的功能码为 05H。
1x:是一个只读的设备类型,相当于读 PLC 的输入点。
读位状态的时候发出的功能码为 02H。
3x:是一个只读的设备类型,相当于读 PLC 的模拟量。
读数据的时候,发出的功能码为 04H。
3x-DINV:是一个只读的设备类型,双字寄存器, 3X地址读取双字寄存器时,高字在前,低字在后。
3x-DINV正好相反。
4x:是一个可读可写的设备类型,相当于操作 PLC 的数据寄存器。
当读数据的时候,发出的功能码是 03H,当写数据的时候发出的功能码是 10H。
4x-DINV:是一个可读可写的设备类型,双字寄存器, 4X地址表示双字寄存器时,高字在前,低字在后。
4x-DINV正好相反。
例如,使用4x设备类型读到的数据是0x56781234,那么使用4x-DINV设备类型读到的数据是0x12345678。
5x:该设备类型与4x的设备类型属性是一样的。
即发出读写的功能码完全一样,不同之处在于:当为双字时,例如32_bitunsigned格式的数据,使用5x和4x两种设备类型分别读取数据时,高字和低字的字节位置是颠倒的。
例如,使用4x设备类型读到的数据是0x56781234,那么使用5x设备类型读到的数据是0x78563412。
6x:是一个可读可写的设备类型,读取数据的时候,发出的功能码也是03H,与4x不同之处在于写数据的时候发出的功能码时06H,即写单个寄存器的数据。
3x_bit:该设备类型支持的功能码与 3x 设备类型完全一致,不同之处是,3x 是读数据,而3x_bit 是读数据中的某一个 bit 的状态。
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 是一种串行通信协议,是Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Mod bus 比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus 通常用来连接监控计算机和 rem ote 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 的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
H5U-通讯-MODBUS元件地址编码和功能码定义汇川H5U系列控制器内置Modbus协议说明协议驱动名称建议按通信网络类型分别命名为:INOVANCE_H5U_ModbusRTUINOVANCE_H5U_ModbusTCP目录目录 (2)概述: (3)1、MODBUS协议支持的功能码: (3)2、H5U控制器支持外部访问的软元件: (4)3、软元件和变量的地址定义: (4)3、MODBUSRTU通讯帧格式说明 (5)3.1命令码0X01(01)/0X02(02):读线圈 (6)3.2命令码0X03(03)/0X04(04):读寄存器 (7) 3.3命令码0X05(05):写单线圈 (8)3.4命令码0X06(06):写单个寄存器 (9)3.5命令码0X0F(15):写多个线圈 (10)3.6命令码0X10(16):写多个寄存器 (11)3.7错误响应帧 (12)4、MODBUSTCP通讯帧格式说明 (13)4.1命令码0X01(01)/0X02(02):读线圈 (13)4.2命令码0X03(03)/0X04(04):读寄存器 (15)4.3命令码0X05(05):写单线圈 (16)4.4命令码0X06(06):写单个寄存器 (17)4.5命令码0X0F(15):写多个线圈 (18)4.6命令码0X10(16):写多个寄存器 (19)4.7错误响应帧 (20)概述:本文档旨在说明将H5U系列PLC作为MODBUS从站进行访问时,需采用的通讯格式进行说明,并对访问其中各种软元件和变量的索引编址方式进行了说明,便于MODBUS主站侧的编程。
本文介绍了基于RS485网络的ModbusRTU、基于以太网的ModbusTCP两种通信帧格式的说明。
用于HMI、SCADA等Host设备访问汇川公司H5U系列控制器的通讯驱动设计。
通信访问的主要有bit型和word型两种变量。
按照行业惯例,本文中将bit型变量有时称为“线圈”或“触点”,将word型变量则称为“寄存器”,以方便用户理解。
M O D B U S常用功能码及
对应地址
Revised final draft November 26, 2020
表1ModBus功能码
功能码名称作用
01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02读取输入状态取得一组开关输入的当前状态(ON/OFF)
03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05强置单线圈强置一个逻辑线圈的通断状态
06预置单寄存器把具体二进值装入一个保持寄存器
15强置多线圈强置一串连续逻辑线圈的通断
16预置多寄存器把具体的二进制值装入一串连续的保持寄存器
表2ModBus功能码与数据类型对应表?
代码功能数据类型对应地址
01读位0000X
02读位1000X
03读整型、字符型、状态字、浮点型4000X
04读整型、状态字、浮点型3000X
05写位0000X
06写整型、字符型、状态字、浮点型4000X
15写位0000X
16写整型、字符型、状态字、浮点型4000X。
汇川H5U系列控制器
内置Modbus协议说明
协议驱动名称建议按通信网络类型分别命名为:
INOVANCE_H5U_ModbusRTU
INOVANCE_H5U_ModbusTCP
目录
目录 (2)
概述: (3)
1、MODBUS协议支持的功能码: (3)
2、H5U控制器支持外部访问的软元件: (4)
3、软元件和变量的地址定义: (4)
3、MODBUSRTU通讯帧格式说明 (5)
3.1命令码0X01(01)/0X02(02):读线圈 (6)
3.2命令码0X03(03)/0X04(04):读寄存器 (7)
3.3命令码0X05(05):写单线圈 (8)
3.4命令码0X06(06):写单个寄存器 (9)
3.5命令码0X0F(15):写多个线圈 (10)
3.6命令码0X10(16):写多个寄存器 (11)
3.7错误响应帧 (12)
4、MODBUSTCP通讯帧格式说明 (13)
4.1命令码0X01(01)/0X02(02):读线圈 (13)
4.2命令码0X03(03)/0X04(04):读寄存器 (15)
4.3命令码0X05(05):写单线圈 (16)
4.4命令码0X06(06):写单个寄存器 (17)
4.5命令码0X0F(15):写多个线圈 (18)
4.6命令码0X10(16):写多个寄存器 (19)
4.7错误响应帧 (20)
概述:
本文档旨在说明将H5U系列PLC作为MODBUS从站进行访问时,需采用的通讯格式进行说明,并对访问其中各种软元件和变量的索引编址方式进行了说明,便于MODBUS主站侧的编程。
本文介绍了基于RS485网络的ModbusRTU、基于以太网的ModbusTCP两种通信帧格式的说明。
用于HMI、SCADA等Host设备访问汇川公司H5U系列控制器的通讯驱动设计。
通信访问的主要有bit型和word型两种变量。
按照行业惯例,本文中将bit型变量有时称为“线圈”或“触点”,将word型变量则称为“寄存器”,以方便用户理解。
1、Modbus协议支持的功能码:
作为MODBUS主站和MODBUS从站时,支持的功能码见下表:
(1)主站支持的功能码:
(2)从站支持的功能码:
2、H5U控制器支持外部访问的软元件:
H5U系列控制器支持M/B/S/X/Y等bit型变量(也称线圈)的访问、D/R等word型变量的访问;
其中M/B/S/X/Y等bit型变量的访问,是以不同的地址偏移来区分的,D/R等word型变量的访问,也是以不同的地址偏移来区分的;
H5U控制器内部W元件,不支持通信访问。
3、软元件和变量的地址定义:
作为MODBUS从站时,支持线圈和寄存器访问,线圈和寄存器的地址定义如下:
1、线圈、位元件、位变量地址定义:
注:
2、寄存器、字元件、字变量地址定义:
注:
(1)、作为通信从站,当接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
3、ModbusRTU通讯帧格式说明
本协议说明定义了H5U传输数据单元的内容和数据格式、属性。
对应简单的RS485网络传输的数据,如下图所示的PDU部分,其他部分遵循Modbus通信帧标准定义:
请求帧格式:从机地址+0x01/0x02+线圈起始地址+线圈数量+CRC检验
响应帧格式:从机地址+0x01/0x02+字节数+线圈状态+CRC检验
错误响应:见错误响应帧。
请求帧格式:从机地址+0x03/0x04+寄存器起始地址+寄存器数量+CRC检验
响应帧格式:从机地址+0x03/0x04+字节数+寄存器值+CRC检验
错误响应:见错误响应帧
3.3 命令码0x05(05):写单线圈
请求帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
响应帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
错误响应:见错误响应帧
3.4 命令码0x06(06):写单个寄存器
请求帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验
响应帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验。
错误响应:见错误响应帧。
3.5 命令码0x0f(15):写多个线圈
请求帧格式:从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态+CRC检验。
响应帧格式:从机地址+0x0f+线圈起始地址+线圈数量+CRC检验
错误响应:见错误响应帧。
3.6 命令码0x10(16):写多个寄存器
请求帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值+CRC检验。
响应帧格式:从机地址+0x10+线圈起始地址+线圈数量+CRC检验。
错误响应:见错误响应帧。
3.7 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应:从机地址+(命令码+0x80)+错误码+CRC校验。
本错误帧适合所有的操作命令帧。
4、ModbusTCP通讯帧格式说明
在以TCP/IP网络中,ModbusTCP通信帧的端口号是:502
从站的地址判别,是以IP地址作为主站访问本站的判别依据,而不是以通信帧中的“从机地址”作为判断依据;
从站在回答帧时,“事务元标识符”和“单元标识符”字段会原样返回主站请求帧中对应字段的数值。
4.1命令码0x01(01)/0x02(02):读线圈
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x01/0x02+线圈起始地址+线圈数量
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x01/0x02+字节数+线圈状态
错误响应:见错误响应帧。
4.2命令码0x03(03)/0x04(04):读寄存器
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x03/0x04+寄存器起始地址+寄存器数量
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x03/0x04+字节数+寄存器值
错误响应:见错误响应帧
4.3 命令码0x05(05):写单线圈
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x05+线圈地址+线圈状态
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x05+线圈地址+线圈状态
错误响应:见错误响应帧
4.4 命令码0x06(06):写单个寄存器
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x06+寄存器地址+寄存器值
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x06+寄存器地址+寄存器值
错误响应:见错误响应帧。
4.5 命令码0x0f(15):写多个线圈
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x0f+线圈起始地址+线圈数量+字节数+线圈状态。
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x0f+线圈起始地址+线圈数
错误响应:见错误响应帧。
4.6 命令码0x10(16):写多个寄存器
请求帧格式:事务元标识符+协议标识符+长度+单元标识符+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值
响应帧格式:事务元标识符+协议标识符+长度+单元标识符+0x10+线圈起始地址+线圈数量。
错误响应:见错误响应帧。
4.7 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应:事务元标识符+协议标识符+长度+单元标识符+(命令码+0x80)+错误码。
本错误帧适合所有的操作命令帧。