导读:
1 MBAP报文头(MBAP: ModbusApplication Protocol,Modbus应用协议)
分四个域,共7个字节,见表1。
表1
域 长度 描述 客户端 服务器端
传输标志 2字节 标志某个Modbus
询问/应答的传输
由客户端生成 应答时复制该值
协议标志 2字节 0=Modbus协议
1=UNI-TE协议
由客户端生成 应答时复制该值
长度 2字节 后续字节计数 由客户端生成 应答时由服务器
端重新生成
单元标志 1字节 定义连接于目的
节点的其它设备
由客户端生成 应答时复制该值
2 Modbus功能代码
共有三种类型分别为:
· 公共功能代码 已定义好的功能码,保证其唯一性,由Modbus.org认可。
· 用户自定义功能代码 有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
· 保留的功能代码 由某些公司使用在某些传统设备的代码,不可作为公共用途。
常用公共功能代码见表2。
表2 常用公共功能代码
常用公共功能代码 功能码
十进码 子码 十六进制
位
操
作
开关量输入 读输入点 02 02
内部位或开关量输出 读线圈 01 01
写单个线圈 05 05
写多个线圈 15 0F
16
位
操
作
模拟量输入 读输入寄存器 04 04
内部寄存器或输出寄存器(模拟量输出) 读多个寄存器 03 03
写单个寄存器 06 06
写多个寄存器 16 10
读/写多个寄存器 23 17
屏蔽写寄存器 22 16
文件记录 读文件记录 20 6 14
封装接口 写文件记录 21 6 15
读设备标识 43 14 2B
功能代码划按应用深浅分,可分为三个类别:
(1) 类别0,对于客户机/服务器最小的可用子集。
· 读多个保持寄存器(fc.3);
· 写多个保持寄存器(fc.16)。
(2) 类别1,可实现基本互易操作的常用代码。
· 读线圈(fc.1);
· 读开关量输入(fc.2);
· 读输入寄存器(fc.4);
· 写线圈(fc.5);
· 写单一寄存器(fc.6)。
(3) 类别2,用于人机界面、监控系统的例行操作和数据传送功能。
· 强制多个线圈(fc.15);
· 读通用寄存器(fc.20);
· 写通用寄存器(fc.21);
· 屏蔽写寄存器(fc.22);
· 读写寄存器(fc.23)。
3 Modbus应用举例:读寄存器
请求 功能码 1字节 0x03
起始地址 2字节 0x0000到0xFFFF
寄存器数 2字节 1到125(0x7D)
应答 功能码 1字节 0x03
字节数 1字节 2 x N
寄存器的值 N x 2字节
(N为寄存器的数量)
出错 出错码 1字节 0x83
例外码 1字节 01或02或03或04
4 ModbusTCP 请求报文举例,见表3。
表3
描述 大小(字节) 示例 备注
MBAP 传输标志Hi 1 0x15 传输标志用于和应答配合使用
传输标志Lo 1 0x01 每对传输使用唯一的标志
协议标志 2 0x0000 该域可用作寻址Modbus/
Modbus+子网络的路由,这
时,此值含有目的设备的地址
长度 2 0x0006
单元标志 2 0xFF
Modbus
请求
功能代码 1 0x03 读寄存器
起始地址 2 0x0005
寄存器数 2 0x0001
本文转自
http://www.fieldbuses.com/n1016c45.aspx
1 MBAP报文头(MBAP: ModbusApplication Protocol,Modbus应用协议)
分四个域,共7个字节,见表1。
表1
域 长度 描述 客户端 服务器端
传输标志 2字节 标志某个Modbus
询问/应答的传输
由客户端生成 应答时复制该值
协议标志 2字节 0=Modbus协议
1=UNI-TE协议
由客户端生成 应答时复制该值
长度 2字节 后续字节计数 由客户端生成 应答时由服务器
端重新生成
单元标志 1字节 定义连接于目的
节点的其它设备
由客户端生成 应答时复制该值
2 Modbus功能代码
共有三种类型分别为:
· 公共功能代码 已定义好的功能码,保证其唯一性,由Modbus.org认可。
· 用户自定义功能代码 有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
· 保留的功能代码 由某些公司使用在某些传统设备的代码,不可作为公共用途。
常用公共功能代码见表2。
表2 常用公共功能代码
常用公共功能代码 功能码
十进码 子码 十六进制
位
操
作
开关量输入 读输入点 02 02
内部位或开关量输出 读线圈 01 01
写单个线圈 05 05
写多个线圈 15 0F
16
位
操
作
模拟量输入 读输入寄存器 04 04
内部寄存器或输出寄存器(模拟量输出) 读多个寄存器 03 03
写单个寄存器 06 06
写多个寄存器 16 10
读/写多个寄存器 23 17
屏蔽写寄存器 22 16
文件记录 读文件记录 20 6 14
封装接口 写文件记录 21 6 15
读设备标识 43 14 2B
功能代码划按应用深浅分,可分为三个类别:
(1) 类别0,对于客户机/服务器最小的可用子集。
· 读多个保持寄存器(fc.3);
· 写多个保持寄存器(fc.16)。
(2) 类别1,可实现基本互易操作的常用代码。
· 读线圈(fc.1);
· 读开关量输入(fc.2);
· 读输入寄存器(fc.4);
· 写线圈(fc.5);
· 写单一寄存器(fc.6)。
(3) 类别2,用于人机界面、监控系统的例行操作和数据传送功能。
· 强制多个线圈(fc.15);
· 读通用寄存器(fc.20);
· 写通用寄存器(fc.21);
· 屏蔽写寄存器(fc.22);
· 读写寄存器(fc.23)。
3 Modbus应用举例:读寄存器
请求 功能码 1字节 0x03
起始地址 2字节 0x0000到0xFFFF
寄存器数 2字节 1到125(0x7D)
应答 功能码 1字节 0x03
字节数 1字节 2 x N
寄存器的值 N x 2字节
(N为寄存器的数量)
出错 出错码 1字节 0x83
例外码 1字节 01或02或03或04
4 ModbusTCP 请求报文举例,见表3。
表3
描述 大小(字节) 示例 备注
MBAP 传输标志Hi 1 0x15 传输标志用于和应答配合使用
传输标志Lo 1 0x01 每对传输使用唯一的标志
协议标志 2 0x0000 该域可用作寻址Modbus/
Modbus+子网络的路由,这
时,此值含有目的设备的地址
长度 2 0x0006
单元标志 2 0xFF
Modbus
请求
功能代码 1 0x03 读寄存器
起始地址 2 0x0005
寄存器数 2 0x0001
本文转自
http://www.fieldbuses.com/n1016c45.aspx
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1897724