MODBUS手册中文版VERD.docx

上传人:b****4 文档编号:24229260 上传时间:2023-05-25 格式:DOCX 页数:25 大小:21.94KB
下载 相关 举报
MODBUS手册中文版VERD.docx_第1页
第1页 / 共25页
MODBUS手册中文版VERD.docx_第2页
第2页 / 共25页
MODBUS手册中文版VERD.docx_第3页
第3页 / 共25页
MODBUS手册中文版VERD.docx_第4页
第4页 / 共25页
MODBUS手册中文版VERD.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

MODBUS手册中文版VERD.docx

《MODBUS手册中文版VERD.docx》由会员分享,可在线阅读,更多相关《MODBUS手册中文版VERD.docx(25页珍藏版)》请在冰豆网上搜索。

MODBUS手册中文版VERD.docx

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:

常数表:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1