modbus协议功能码及格式

合集下载

MODBUS协议说明文档

MODBUS协议说明文档

MODBUS通讯协议说明1、概述Modbus 协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。

它已经成为一通用工业标准。

有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

本文档通信协议说明详细地描述了MODBUS设备的输入和输出命令、信息和数据,以便第三方使用和开发。

1.1通信协议的作用使信息和数据在上位机(主站)和MODBUS设备之间有效地传递,允许访问MODBUS设备的所有测量数据。

MODBUS设备可以实时采集现场各种数据值,具备一个RS485通讯口,能满足MODBUS监控系统的要求。

MODBUS设备通信协议采用MODBUS RTU协议,本协议规定了应用系统中主机与MODBUS 设备之间,在应用层的通信协议,它在应用系统中所处的位置如下图所示:本协议所处的位置从机:1.2 物理接口:连接上位机的主通信口,采用标准串行RS485通讯口,使用压接底座。

信息传输方式为异步方式,主要配置参数,一般默认:起始位1位,数据位8位,停止位1位,无校验,数据传输缺省速率为9600b/s2、MODBU通信协议详述2.1 协议基本规则以下规则确定在回路控制器和其他串行通信回路中设备的通信规则。

1)所有回路通信应遵照主/从方式。

在这种方式下,信息和数据在单个主站和从站(监控设备)之间传递。

2)主站将初始化和控制所有在通信回路上传递的信息。

3)无论如何都不能从一个从站开始通信。

4)所有环路上的通信都以“打包”方式发生。

一个包裹就是一个简单的字符串(每个字符串8位),一个包裹中最多可含255个字节。

组成这个包裹的字节构成标准异步串行数据,并按8位数据位,1位停止位,无校验位的方式传递。

串行数据流由类似于RS232C 中使用的设备产生。

5)所有回路上的传送均分为两种打包方式:A) 主/从传送B) 从/主传送6)若主站或任何从站接收到含有未知命令的包裹,则该包裹将被忽略,且接收站不予响应。

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是一种串行通信协议,是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协议报文功能码介绍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。

MODBUS协议整理——功能码简述

MODBUS协议整理——功能码简述
寄存器
种类
说明
PLC
类比
举例说明
线圈状态
输出端口。可设定端口的输出状态,也可以读取该位的输出状态。可分为两种不同的执行状态,例如保持型或边沿触发型。
DO
数字量输出
电磁阀输出,MOSFET输出,LED显示等。
离散
输入状态
输入端口。通过外部设定改变输入状态,可读但不可写。
DI
数字量输入
拨码开关,接近开关等。
1.MODBUS功能码简述
下表列出MODBUS支持的部分功能代码:以十进制表示。
表1.1 MODBUS部分功能码
代码ห้องสมุดไป่ตู้
中文名称
寄存器PLC地址
位操作/字操作
操作数量
01
读线圈状态
00001-09999
位操作
单个或多个
02
读离散输入状态
10001-19999
位操作
单个或多个
03
读保持寄存器
40001-49999
保持
寄存器
输出参数或保持参数,控制器运行时被设定的某些参数。可读可写。
AO
模拟量输出
模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限。
输入
寄存器
输入参数。控制器运行时从外部设备获得的参数。可读但不可写。
AI
模拟量输入
模拟量输入
1.4 PLC地址和协议地址区别
PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛。
1.4.1寄存器PLC地址
寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。

MODBUS协议(功能码和报文解析)

MODBUS协议(功能码和报文解析)

MODBUS协议Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。

事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。

Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制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的高速令牌旋转。

它使用1Mb it/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。

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 米。

modbus ascii通信协议06功能码报文格式详解

modbus ascii通信协议06功能码报文格式详解

modbus ascii通信协议06功能码报文格式详解Modbus ASCII通信协议是一种基于ASCII码的Modbus通信协议。

它使用ASCII字符来表示数据,以 ASCII 字节对数据进行传输。

Modbus ASCII协议支持常见的数据读取、写入、寄存器写入和寄存器写入多个值等操作。

Modbus ASCII协议的功能码06是用于写单个寄存器的功能码。

下面是该功能码的报文格式的详细解释:1. 起始符:每个Modbus ASCII报文以":"作为起始符,表示报文的开始。

2. 从站地址:接下来的两个ASCII字符表示从站的地址。

从站地址是指要接收或响应该报文的目标从站的地址。

3. 功能码:接下来的两个ASCII字符表示功能码,即06,表示写单个寄存器。

4. 寄存器地址:接下来的四个ASCII字符表示要写入的寄存器的地址。

该地址通常以十六进制表示。

5. 数据值:接下来的四个ASCII字符表示要写入到寄存器的数据值。

该值通常以十六进制表示。

6. 校验和:接下来的两个ASCII字符表示校验和。

校验和是用于检测数据的正确性的一种校验方法。

它是将从站地址到数据值的全部ASCII字符的二进制值相加,然后取结果的低8位。

7. 终止符:每个Modbus ASCII报文以回车符和换行符作为终止符。

表示报文的结束。

总结:Modbus ASCII通信协议的06功能码报文格式如下:起始符 + 从站地址 + 功能码 + 寄存器地址 + 数据值 + 校验和+ 终止符注意:在ASCII通信中,每个ASCII字符都由两个字节表示,因此每个十六进制数需要四个ASCII字符来表示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、“01”读取线圈状态
发送:
功能代码1字节 0x01
起始地址2字节 0x0000~0xFFFF 线圈数量2字节 1~2000(0x7D0)
接收:
功能代码1字节 0x01
字节数1字节 N
线圈状态n字节n = N/N+1
N=读取线圈个数 / 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 C5
FC 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+1
N=读取输入点个数 / 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 E2
FC BN N1 N2 N3 N4 CRC
3、“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的线圈置一。

返回:01 05 00 00 FF 00 8C 3A
返回线圈的状态
5、“06”写单一寄存器
发送:
功能代码1字节 0x06
寄存器地址2字节 0x0000~0xFFFF 写入值2字节 0x0000~0xFFFF 接收:
功能代码1字节 0x06
寄存器地址2字节 0x0000~0xFFFF 写入值2字节 0x0000~0xFFFF 出错时的返回:
功能代码1字节 0x86
错误代码1字节 01/02/03/04
例子:
发送:01 06 00 00 00 0A 09 CD
往地址为0的寄存器写入10。

返回:01 06 00 00 00 0A 09 CD
返回寄存器的值。

6、“15(0x0F)”写多线圈
发送:
功能代码1字节 0x0F
起始地址2字节 0x0000~0xFFFF 写入线圈个数2字节 0x0001~0x07B0 写入字节数1字节 N
写入值N字节
N=写入线圈个数 / 8 ,如果余数不为0则N=N+1
接收:
功能代码1字节 0x0F
起始地址2字节 0x0000~0xFFFF 写入线圈个数2字节 0x0001或0x07B0
出错时的返回:
功能代码1字节 0x8F
错误代码1字节 01/02/03/04
例子:
发送:01 0F 00 00 00 0A 02 01 01 25 68
FC ADDR C BN N1 N2 CRC
写10个线圈状态
返回:01 0F 00 00 00 0A D5 CC
FC ADDR C CRC
7、“16(0x10)”写多寄存器
发送:
功能代码1字节 0x10
起始地址2字节 0x0000~0xFFFF 写入寄存器个数2字节 0x0001~0x007B 写入字节数1字节 2*N
写入值 N*2字节
N=写入寄存器个数
接收:
功能代码1字节 0x10
起始地址2字节 0x0000~0xFFFF 写入寄存器个数2字节 0x0001或0x007B
出错时的返回:
功能代码1字节 0x90
错误代码1字节 01/02/03/04
例子:
发送:01 10 00 00 00 02 04 00 01 00 02 23 AE
FC ADDR C BC N1 N2 CRC
返回:01 10 00 00 00 02 41 C8
FC ADDR C CRC。

相关文档
最新文档