MODBUS手册中文版VERD.docx
- 文档编号:10386398
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:25
- 大小:21.94KB
MODBUS手册中文版VERD.docx
《MODBUS手册中文版VERD.docx》由会员分享,可在线阅读,更多相关《MODBUS手册中文版VERD.docx(25页珍藏版)》请在冰点文库上搜索。
MODBUS手册中文版VERD
MODBUS协议
用户手册
Ver:
D
2010-10-20
目录
1数据传输模式4
2寄存器和数据类型5
2.1COIL5
2.2FLOAT5
2.3INT5
2.4LONG5
3数据帧格式定义6
3.1CMD=0x03(读1个或多个寄存器)6
3.2CMD=0x05(写COIL变量)7
3.3CMD=0x06(写单个寄存器)8
3.3CMD=0x10(写多个寄存器)9
3.4故障返回帧10
4数据帧校验算法11
4.1LRC校验11
4.2CRC16校验12
5仪表变量地址定义14
6附录1:
常数表:
故障码17
7附录2:
常数表:
流量单位18
8附录3:
报警定义23
版本声明:
Ver:
D
支持寄存器连读功能
仪表的modbus通讯协议设置项处有V10版本标志的均支持此功能
2010/10/20
1数据传输模式
MODBUS采用RTU和ASCII两种方式进行数据传输。
RTU模式下,采用8bit二进制字符,ASCII模式下采用7bitASC字符。
将RTU模式下的一个字节的高4位和低4位分开,变成2个字节,这样就是ASCII模式下传输的字节。
比如RTU模式下的数据0x1A,那么ASCII模式下就是0x310x41两个字节,所以ASCII模式下的帧长度为RTU模式下的1倍。
RTU传输模式的数据帧采用CRC校验,ASCII模式采用LRC校验。
下表总结了两种传输模式的区别:
传输模式
ASCII(7bit)
RTU(8bit)
编码格式
ASCII码(‘0’-‘9’‘A’-‘F’)
8bit二进制(0x00–0xff)
起始位
数据位
校验位
停止位
1
7、8
无、奇、偶
1、2
1
8
无、奇、偶
1、2
帧校验
LRC
CRC16
2寄存器和数据类型
下表列举了几种寄存器和数据类型
寄存器类型
数据长度
寄存器数量
描述
COIL
1bit
-
布尔变量(ONOFF)
FLOAT
32bit
2
32位浮点数(IEEE754格式)
INT
16bit
1
无符号整型(0x0–0xFFFF)
LONG
32bit
2
无符号长整型(0x0–0xFFFFFFFF)
2.1COIL
布尔变量0xFF00->ON0x0000->OFF
2.2FLOAT
使用2个寄存器存储单精度IEEE754格式的浮点数。
每个浮点数包含4个字节,具体定义如下:
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM
S:
符号位0->正1->负
E:
阶码
M:
尾数的小数部分
例如:
0xC1480000=-12.5
2.3INT
使用1个寄存器存储无符号整型数。
例如:
0x0025=370x1234=4660
2.4LONG
使用2个寄存器存储无符号长整型数。
例如:
0x12345678=305419896
3数据帧格式定义
3.1CMD=0x03(读1个或多个寄存器)
本例数据为读取瞬时流量的数据帧,仪表地址=1。
注:
瞬时流量的寄存器起始地址=0x0253,但数据帧中的寄存器起始地址必须是0x0253-0x0001=0x0252
请求帧:
上位机->仪表
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
03
3033
寄存器起始地址高字节
02
3032
寄存器起始地址低字节
52
3532
寄存器数量高字节
00
3030
寄存器数量低字节
02
3032
帧校验
6462
4136
包尾
NONE
0D0A
应答帧:
仪表->上位机
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
03
3033
数据长度
04
3034
寄存器0x0253的数据高字节
C1
4331
寄存器0x0253的数据低字节
48
3438
寄存器0x0254的数据高字节
00
3030
寄存器0x0254的数据低字节
00
3030
帧校验
47D9
4546
包尾
NONE
0D0A
本应答帧返回的IEEE754格式的瞬时流量数据C1480000=-12.5
3.2CMD=0x05(写COIL变量)
本例数据为清除累计流量的数据帧,仪表地址=1。
注:
清累计流量的寄存器起始地址=0x0003,但数据帧中的寄存器起始地址必须是0x0003-0x0001=0x0002
请求帧:
上位机->仪表
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
05
3035
寄存器起始地址高字节
00
3030
寄存器起始地址低字节
02
3032
COIL变量高字节
FF
4646
COIL变量低字节
00
3030
帧校验
2DFA
4639
包尾
NONE
0D0A
应答帧:
仪表->上位机
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
05
3035
寄存器起始地址高字节
00
3030
寄存器起始地址低字节
02
3032
COIL变量高字节
FF
4646
COIL变量低字节
00
3030
帧校验
2DFA
4639
包尾
NONE
0D0A
3.3CMD=0x06(写单个寄存器)
本例数据为写流量单位=m3/h的数据帧,仪表地址=1。
注:
流量单位的寄存器起始地址=0x0042,但数据帧中的寄存器起始地址必须是0x0042-0x0001=0x0041
请求帧:
上位机->仪表
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
06
3036
寄存器起始地址高字节
00
3030
寄存器起始地址低字节
41
3431
变量高字节
00
3030
变量低字节
13
3133
帧校验
9813
4135
包尾
NONE
0D0A
应答帧:
仪表->上位机
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
06
3036
寄存器起始地址高字节
00
3030
寄存器起始地址低字节
41
3431
变量高字节
00
3030
变量低字节
13
3133
帧校验
9813
4135
包尾
NONE
0D0A
3.3CMD=0x10(写多个寄存器)
本例数据为写阻尼时间=3s的数据帧,仪表地址=1。
注:
阻尼时间的寄存器起始地址=0x0189,但数据帧中的寄存器起始地址必须是0x0189-0x0001=0x0188
请求帧:
上位机->仪表
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
10
3130
寄存器起始地址高字节
01
3031
寄存器起始地址低字节
88
3838
寄存器数量高字节
00
3030
寄存器数量低字节
02
3032
数据长度
04
3034
写入寄存器0x0189的高字节
40
3430
写入寄存器0x0189的低字节
40
3430
写入寄存器0x018A的高字节
00
3030
写入寄存器0x018A的低字节
00
3030
帧校验
E3ED
4538
包尾
NONE
0D0A
本例中的4个数据字节为IEEE754格式的浮点数40400000=3.0
应答帧:
仪表->上位机
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
10
3130
寄存器起始地址高字节
01
3031
寄存器起始地址低字节
88
3838
寄存器数量高字节
00
3030
寄存器数量低字节
02
3032
帧校验
C01E
3643
包尾
NONE
0D0A
3.4故障返回帧
对于不能正确完成操作的请求帧,仪表将返回一个报告故障代码的返回帧,以报告不能完成操作的具体原因。
比如将流量单位设置成Hz,由于仪表不能支持Hz这个流量单位,所以将返回如下的故障应答帧。
故障应答帧:
仪表->上位机
数据场名称
RTU示例数据(HEX)
ASC示例数据(HEX)
包头
NONE
3A
仪表地址
01
3031
功能码
86
3836
故障码
43
3433
帧校验
0391
3931
包尾
NONE
0D0A
注:
1.故障返回帧中的功能码=请求帧的功能码+0x80
2.具体的故障代码请参考附录1:
常数表:
故障码
4数据帧校验算法
4.1LRC校验
//LRC校验范围:
从“仪表地址”到LRC帧校验码的前一个字节
voidLRC(unsignedchar*buf,unsignedintlen)
{
unsignedinti;
LRC=0;
for(i=0;i { LRC+=buf[i]; } LRC=0xff-LRC; LRC++; } 4.2CRC16校验 constunsignedcharTAB_CRC_H[]={ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40 }; constunsignedcharTAB_CRC_L[]={ 0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04, 0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8, 0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC, 0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10, 0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4, 0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38, 0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C, 0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0, 0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4, 0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68, 0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C, 0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0, 0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54, 0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98, 0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C, 0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40 }; //CRC校验范围: 从“仪表地址”到CRC帧校验码的前一个字节 voidCRC(unsignedchar*buf,unsignedintlen) { unsignedinti; unsignedcharCRC_H,CRC_L,index,ch; CRC_H=0xff; CRC_L=0xff; for(i=0;i { ch=buf[i]; index=CRC_H^ch; CRC_H=CRC_L^TAB_CRC_H[index]; CRC_L=TAB_CRC_L[index]; } } 5仪表变量地址定义 以下为仪表支持数据变量信息列表,数据均为HEX类型 变量名 寄存器地址 寄存器长度 读指令 写指令 COIL类型 清累计 0003 --- --- 05 INT类型 流量单位(附录2: 常数表流量单位) 0042 0001 03 06 累计单位(附录2: 常数表流量单位) 0046 0001 03 06 功率单位(附录2: 常数表流量单位) 6003(热能表) 0001 03 06 热能单位(附录2: 常数表流量单位) 6004(热能表) 0001 03 06 报警(附录3: : 报警定义) 0419 0001 03 --- LONG类型 扩展正向累计 0309 0002 03 --- 正向累计 0311 0002 03 --- 扩展反向累计 0313 0002 03 --- 反向累计 0315 0002 03 --- 扩展正向累计热量 0317(热能表) 0002 03 --- 正向累计热量 0319(热能表) 0002 03 --- 扩展反向累计热量 0321(热能表) 0002 03 --- 反向累计热量 0323(热能表) 0002 03 --- FLOAT类型 主变量(瞬时流量) 0253 0002 03 ---- 瞬时功率 2000(热能表) 0002 03 ---- 入口温度 2002(热能表) 0002 03 ---- 出口温度 2004(热能表) 0002 03 ---- 阻尼时间s 0189 0002 03 10 小信号切除% 0197 0002 03 10 刻度流量 0209 0002 03 10 4-20mA电流测试(mA) 0143 0002 --- 10 输出电流值mA 0203 0002 03 --- 输出频率值Hz 0229 0002 03 --- 频率上限Hz 0223 0002 03 10 脉冲当量L/p 1103 0002 03 10 脉冲宽度ms 0227 0002 03 10 连读: (通讯协议V10版本) 瞬时流量累计流量 主变量(瞬时流量)float 0500 0002 03 --- 扩展正向累计unsignedlong 0502 0002 03 --- 正向累计unsignedlong 0504 0002 03 --- 扩展反向累计unsignedlong 0506 0002 03 --- 反向累计unsignedlong 0508 0002 03 --- 连读: (通讯协议V10版本) 瞬时流量 累计流量: 此处的累计量为仪表现场读数*1000的结果, 比如仪表现场读数=10m3,则通过通讯读过来的数据为10,000L 比如仪表现场读数=10L,则通过通讯读过来的数据为10,000mL 主变量(瞬时流量)float 0510 0002 03 --- 扩展正向累计unsignedlong 0512 0002 03 --- 正向累计unsignedlong 0514 0002 03 --- 扩展反向累计unsignedlong 0516 0002 03 --- 反向累计unsignedlong 0518 0002 03 --- 连读: (通讯协议V10版本&热能表) 瞬时流量瞬时功率入口温度出口温度累计流量累计热量 主变量(瞬时流量)float 0520 0002 03 --- 瞬时功率float 0522 0002 03 --- 入口温度0Cfloat 0524 0002 03 --- 出口温度0Cfloat 0526 0002 03 --- 扩展正向累计unsignedlong 0528 0002 03 --- 正向累计unsignedlong 052A 0002 03 --- 扩展反向累计unsignedlong 052C 0002 03 --- 反向累计unsignedlong 052E 0002 03 --- 扩展正向热能累计unsignedlong 0530 0002 03 --- 正向热能累计unsignedlong 0532 0002 03 --- 扩展反向热能累计unsignedlong 0534 0002 03 --- 反向热能累计unsignedlong 0536 0002 03 --- 注: 累计量的计算方法如下 假设读出的“扩展正向累计”=2,“正向累计”=1234 则总的正向累计流量=2*1000,0000+1234=20001234 6附录1: 常数表: 故障码 0x01: 无效指令码 0x02: 无效的寄存器地址 0x30: 参数超上限 0x31: 参数超下限 0x32: 参数选择项错误 0x40: 无效的寄存器长度 0x41: 寄存器不支持当前的指令码 0x42: 寄存器未指定功能 0x43: 流量单位不存在 0x44: 总量单位不存在 0x45: 最高频率输出超上限 0x46: 最低频率输出超下限 0x47: 最高流速超上限 0x48: 占空比超上限 7附录2: 常数表: 流
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MODBUS 手册 中文版 VERD