Modbus通讯规约.docx

上传人:b****6 文档编号:5281442 上传时间:2022-12-14 格式:DOCX 页数:18 大小:28.94KB
下载 相关 举报
Modbus通讯规约.docx_第1页
第1页 / 共18页
Modbus通讯规约.docx_第2页
第2页 / 共18页
Modbus通讯规约.docx_第3页
第3页 / 共18页
Modbus通讯规约.docx_第4页
第4页 / 共18页
Modbus通讯规约.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Modbus通讯规约.docx

《Modbus通讯规约.docx》由会员分享,可在线阅读,更多相关《Modbus通讯规约.docx(18页珍藏版)》请在冰豆网上搜索。

Modbus通讯规约.docx

Modbus通讯规约

MODBUS通讯规约V2.0

1.通讯参数和传输特性

传输方式:

异步串行通信方式。

MODBUS规约模式:

RTU模式。

传输速率:

2400bps,4800bps,9600bps,19200bps。

串行口通讯数据格式:

1个起始位,8个数据位,无校验位,1个停止位。

最大传输距离:

1200米。

通讯介质:

推荐采用0.5mm的双绞线,不带屏蔽层。

(原因是如果使用屏蔽双绞线,但现场接地处理不好反而影响通讯质量)。

网络连接主站数目:

1个。

网络连接从站数目:

最多31个。

应答时间:

小于4.5个byte传输时间(帧间隔最小时间)+10ms。

2.网络连接

RS-485网络的匹配电阻选取:

双绞线网络两端的匹配电阻选取,以现场通信正常为准,一般地1.2km时取120Ω,600m时取220Ω,300m时取330Ω,如通信误码率较大,观察通信时的波形,匹配电阻做适当改变:

末端匹配电阻合适末端匹配电阻偏小末端匹配电阻偏大

3.通信参数选择

通信站号:

在通讯参数中修改装置地址,范围1~99,禁止使用0作为装置地址,地址0作为广播地址使用。

通信波特率:

通讯参数中修改装置485口,修改通信波特率:

选择范围:

2400bps,4800bps,9600bps,19200bps。

4.MODBUS协议通用格式

4.1支持的MODBUS功能码

功能码02H:

读取开关量输入(读实遥信和虚遥信)。

功能码03H:

读取保持寄存器(读事件记录等)

功能码04H:

读取输入寄存器(读远动遥测)

功能码05H:

强制单点继电器输出(远方复归、单步的遥控跳闸、遥控合闸)。

功能码06H:

向保持寄存器写单个字(遥控跳闸、遥控合闸的选择和执行操作)

功能码10H:

向保持寄存器(内存区)写多个16位的字(通讯对时)。

4.2异常响应报文格式

由于软件编程错误,对协议理解错误或通讯干扰等原因,MODBUS通信子站接收到主站的报文后,可以采用异常响应报文给予回答,异常响应报文格式举例如下:

异常响应报文子站=>主站

报文

内容含义

备注

1字节

MODBUS地址

01H举例

1字节

功能码

85H

1字节

异常代码

02H

1字节

CRC高字节

C3H

1字节

CRC低字节

51H

FC05H主站=>子站:

远方复归

报文

内容含义

备注

1字节

MODBUS地址

01H举例

1字节

功能码

05H

1字节

线圈地址高字节

01H

1字节

线圈地址低字节

07H

1字节

强制线圈数值高字节

FFH

1字节

强制线圈数值低字节

00H

1字节

CRC高字节

3CH

1字节

CRC低字节

07H

 

子站通过校验,发现主站报文有问题,将响应报文将主站的功能码最高位(D7)置1,如例子中的85H,异常响应报文中有固定的一个字节作为“异常代码”,表示异常原因。

异常代码

含义

01

非法功能码。

子站无法处理主站报文中的功能码。

02

非法数据地址。

子站无法处理主站报文中的数据地址。

03

非法数据内容。

主站报文中的数据不能满足子站的要求格式。

04

子站设备错误。

当子站试图执行主站报文,会产生无法恢复的设备错误。

05

确认帧。

子站接改到主站报文并执行,但由于执行时间比较长,采用本报文通知主站,防止产生主站接收报文超时错误。

06

子站忙。

4.3时间格式

本规约中使用到的对时报文的时间格式,事件记录中的时间格式,参见下面说明。

七个八位位组的二进制时间

27毫秒20

215毫秒28

IV

(RES1)0

25分20

0(SU)

(RES2)00

24时20

22星期20

24日20

(RES3)0000

23月20

(RES4)0

26年20

4.4MODBUS规约中CRC码的计算

采用RTU通讯方式的MODBUS规约,要将报文中除CRC码外的所有字节进行CRC码校验,校验程序如下:

staticunsignedcharauchCRCHi[]={/*TableofCRCvaluesforhigh-orderbyte*/

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

};

staticunsignedcharauchCRCLo[]={/*TableofCRCvaluesforlow-orderbyte*/

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};

unsignedshortModbus_CRC16(unsignedchar*puchMsg,unsignedshortusDataLen)

{unsignedcharuchCRCHi=0xFF;/*highCRCbyteinitialized*/

unsignedcharuchCRCLo=0xFF;/*lowCRCbyteinitialized*/

unsignedshortuIndex;/*willindexintoCRClookup*/

while(usDataLen--)/*passthroughmessagebuffer*/

{

uIndex=uchCRCHi^*puchMsg++;/*calculatetheCRC*/

uchCRCHi=uchCRCLo^auchCRCHi[uIndex];

uchCRCLo=auchCRCLo[uIndex];

}

return(uchCRCHi<<8|uchCRCLo);

}

5报文格式详解

以下报文以MMP-5000D为例说明,相应通讯信息点表见MMP-5000D测点表。

报文中的字节都是以16进制的方式显示。

5.1读全遥信

主站发送:

从机地址

功能码

开始地址H

开始地址L

遥信点数H

遥信点数L

CRC码H

CRC码L

01

02

00

00

00

20

79

D2

子站响应

地址

功能码

字节数

遥信数值(LSB-MSB)

CRC码H

CRC码L

01

02

04

01

本字节的LSB对应遥信点号1

02

00

00

本字节的MSB对应遥信点号32

5B

DE

注意:

1)MMP-5000D供有32个遥信(实遥信和虚遥信),因此主站从开始地址0读0x20个遥信点。

2)本例应答报文中:

数值01的D0位为1代表MMP-5000D的“远方控制”为1;数值02中的D1位为1代表MMP-5000D的跳位信号为1。

3)子站响应中的LSB,MSB指D0位和D7位,通讯点号依次采用升序的方式,比如第一个字节的D0位为遥信点号1…它的D7位为遥信点号8;第二个节字的D0位就为遥信点号9,它的D7位为遥信点号16,依次类推。

5.2读全遥测(远动遥测)

主站发送:

从机地址

功能码

开始地址H

开始地址L

遥测点数H

遥测点数L

CRC码H

CRC码L

01

04

00

00

00

0F

B0

0E

子站响应

地址

功能码

字节数

设备状态字

HL

第一个遥测值

HL

第N个遥测值

CRC码H

CRC码L

01

04

1E

00

01

6A

A0

B6

1B

“设备状态字”的D0为1,表示请求读全遥信

MMP-5000D的“频率”遥测值

注意:

1)遥测报文第一个测点为“设备状态字”,不用入库,第二个开始才是“频率”,以后依次后推。

2)远动遥测值的数据格式采用带品质描述的被测值(MEA)定义

BIT0=溢出位(OV)

BIT1=差错位(ER)

BIT2=测试位(TEST),该位置1表示本遥测量为综自功能

BIT15~BIT3=被测值(MVAL),范围-4096~4095

3)“设备状态字”占用两个字节,它的低字节的D0位为1表示有实遥信和虚遥信变位,要求主站使用“读全遥信”报文来读取,一旦执行了“读全遥信”,则“设备状态字的D0位变为0;“设备状态字”的D1位为1:

表示保护装置有事件记录,要求主站使用连续执行“读单个事件记录”来读取事件记录,子站没有新的事件记录时,D1位自动变为0。

通讯管理机可以根据需要选择是否使用“设备状态字”。

4)如果不需要使用“设备状态字”,可以将报文中的开始地址设为0x0001,则第一个读到的遥测值就是“频率”。

5)遥测值计算方法:

◆电压4095对应1.2倍的额定值1.2*100=120V

◆电流4095对应1.2倍的额定值1.2*5=6A

◆功率4095对应1.2倍的额定值(1.2*57.77*1.2*5)*3=1248W

◆频率4095对应1.2倍的额定值1.2*50=60Hz

◆功率因素4095对应1倍的额定值1.000

本例中:

6AA0为第一个遥测值(频率),它被放大8倍,满量程值为4095,对应60Hz(50Hz的1.2倍)。

因此频率如下计算:

0x6AA0/8/4095*60.0Hz=49.993Hz

例:

========MMP-5000D读全遥测========

TX:

01040000000FB00E

RX:

01041E00016AA000000000000036C04058000000000000000000000000000005C0B61B

5.3读电度值

主站发送:

从机地址

功能码

电度对象起始地址H

电度对象起始地址L

电度对象数目H

电度对象数目L

CRC码H

CRC码L

01

03

00

00

00

01

85

B2

子站响应:

地址

功能码

字节数

正向有功电度

LSBMSB

反向有功电度

LSBMSB

正向无功电度

LSBMSB

反向无功电度

LSBMSB

01

03

10

E8

03

00

00

D0

07

00

00

B8

0B

00

00

A0

0F

00

00

正向有功电度值为:

0x000003E8(1000W/1kW)

反向有功电度

0x000007D0(2000W/2kW)

正向无功电度

0x00000BB8(3000Var/3kVar)

反向无功电度

0x00000FA0(4000Var/4kvar)

CRC码H

CRC码L

B6

1B

注意:

1)每个电度值由4个字节组成一个32位字,它的单位是W(瓦特)或Var(乏)

2)报文中先收到的是电度的低位字节,后收到的是高位字节。

例:

========MMP-5000D读电度值========

TX:

01030200000185B2

RX:

010310E8030000D0070000B80B0000A00F000093CD

5.4广播对时

主站发送:

从机地址

功能码

开始地址H

开始地址L

寄存器数H

寄存器数L

字节总数

毫秒L

毫秒H

00

10

04

80

00

04

08

98

B7

分钟

小时

月份

年份

保留

CRC码H

CRC码L

16

12

17

01

07

00

87

78

说明:

1)对时时间为07年1月23日18时22分47秒000毫秒

2)广播对时的从机地址设为00

5.5广播信号复归

方式一:

采用功能码05H向单个线圈264写ON信号(0xFF00),产生远方信号复归功能。

主站发送:

从机地址

功能码

线圈地址H

线圈地址L

强制线圈数值H

强制线圈数值L

CRC码H

CRC码L

00

05

01

07

FF

00

3D

D6

方式二:

采用功能码06H向单个保持寄存器0x0000写数值0x0000,产生远方复归功能。

主站发送:

从机地址

功能码

寄存器地址H

寄存器地址L

设置数值H

设置数值L

CRC码H

CRC码L

00

06

00

00

00

00

89

CA

说明:

1)如果需要点对点复归,只要将从机地址从广播地址00改为相应设备地址即可。

2)两种方式通讯管理机可以任意选择。

5.6遥控跳闸的选择命令

采用功能码06H向单个保持寄存器0x0101写数值0xFFFF,产生遥控跳闸的选择功能。

主站发送:

从机地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

01

01

FF

FF

D8

46

子站响应:

子站地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

01

01

FF

FF

D8

46

5.7遥控跳闸的执行命令

采用功能码06H向单个保持寄存器0x0011写数值0xFFFF,产生遥控跳闸的执行。

主站发送:

从机地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

00

11

FF

FF

D8

7F

子站响应:

子站地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

00

11

FF

FF

D8

7F

5.8遥控合闸的选择命令

采用功能码06H向单个保持寄存器0x0100写数值0xFFFF,产生遥控合闸的选择功能。

主站发送:

从机地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

01

00

FF

FF

89

86

子站响应:

子站地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

01

00

FF

FF

89

86

5.9遥控合闸的执行命令

采用功能码06H向单个保持寄存器0x0010写数值0xFFFF,产生遥控合闸的执行。

主站发送:

从机地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数值L

CRC码H

CRC码L

01

06

00

10

FF

FF

89

BF

子站响应:

子站地址

功能码

寄存器地址H

寄存器地址L

寄存器数值H

寄存器数据L

CRC码H

CRC码L

01

06

00

10

FF

FF

89

BF

5.10单报文直接遥控跳闸

采用功能码05H向线圈0x0001写数值0xFF00,产生单报文直接遥控跳闸。

慎用本命令!

主站发送:

从机地址

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

当前位置:首页 > 外语学习 > 法语学习

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

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