MODBUS通信协议.docx

上传人:b****6 文档编号:7147028 上传时间:2023-01-21 格式:DOCX 页数:15 大小:21.83KB
下载 相关 举报
MODBUS通信协议.docx_第1页
第1页 / 共15页
MODBUS通信协议.docx_第2页
第2页 / 共15页
MODBUS通信协议.docx_第3页
第3页 / 共15页
MODBUS通信协议.docx_第4页
第4页 / 共15页
MODBUS通信协议.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

MODBUS通信协议.docx

《MODBUS通信协议.docx》由会员分享,可在线阅读,更多相关《MODBUS通信协议.docx(15页珍藏版)》请在冰豆网上搜索。

MODBUS通信协议.docx

MODBUS通信协议

MODBU通信协议

HZRHZC系列产品采用RS485RS232CANEtherNet(TCPIF)等通信方式与当地监控系统或上一级调度自动化系统连接。

MODBU是应用层协议,可基

于上述通信媒介进行系统互连。

MODBU采用直接内存访问的模式,其基本协议定义了内存访问的具体细节,各应用程序或系统互连时只须提供内存地址表即可。

一、HZRHZC系列产品支持的MODBU命令

1、连续读n个字(功能码03H)

下行:

设备地址(BYTE:

01H-FFH

功能码(BYTE):

03H

起始地址(WORD0000H〜FFFFH

读的字数(WORD0001H〜007DH

校验码(WORD以上所有字节的CRC16校验和

上行:

设备地址(BYTE)01H〜FFH

功能码(BYTE)03H

数据长度(BYTE)01H〜FAH

数据内容(BYTE)读到的具体数据

数据内容(BYTE)读到的具体数据

数据内容(BYTE)读到的具体数据

校验码(WORD以上所有字节的CRC16校验和

 

2、写1个字(功能码06H)

下行

设备地址(BYTE)01H〜FFH

功能码(BYTE)06H

起始地址(WOR)D0000H〜FFFFH

写入数据(WOR)D0001H〜FFFFH

校验码(WORD以上所有字节的CRC16校验和

上行

设备地址(BYTE)01H〜FFH

功能码(BYTE)06H

起始地址(WOR)D0000H〜FFFFH

写入数据(WOR)D0001H〜FFFFH

校验码(WORD以上所有字节的CRC16校验和

3、连续写n个字(功能码10H)

下行:

设备地址(BYTE:

01H-FFH功能码(BYTE):

10H

起始地址(WORD0000H〜FFFFH

写的字数(WORD0001H〜007DH

数据长度(BYTE):

01H〜FAH

数据内容(BYTE:

写入的具体数据

数据内容(BYTE:

写入的具体数据

数据内容(BYTE:

写入的具体数据校验码(WORD以上所有字节的CRC16校验和上行:

设备地址(BYTE):

01H〜FFH

功能码(BYTE):

10H

起始地址(WOR)D:

0000H〜FFFFH写的字数(WOR)D:

0001H〜007DH

校验码(WORD以上所有字节的CRC16校验和

CRC计算例程:

unsignedshortCalculateCRC(unsignedshort*pData,unsignedshortwLength)

{

unsignedshortwCRC;wCRC=0xffff;

while(wLength--)wCRC=(wCRC»8Fc_wTableCRC[(wCRCA*pData++)&0x00ff];

returnwCRC;

}

unsignedshortc_wTableCRC[256]=

{

0x0000,0xc0c1,0xc181,0x0140,0xc301,0x03c0,0x0280,0xc241,

0xc601,0x06c0,0x0780,0xc741,0x0500,0xc5c1,0xc481,0x0440,

0xcc01,0x0cc0,0x0d80,0xcd41,0x0f00,0xcfc1,0xce81,0x0e40,

0x0a00,0xcac1,0xcb81,0x0b40,0xc901,0x09c0,0x0880,0xc841,

0xd801,0x18c0,0x1980,0xd941,0x1b00,0xdbc1,0xda81,0x1a40,

0x1e00,0xdec1,0xdf81,0x1f40,0xdd01,0x1dc0,0x1c80,0xdc41,

0x1400,0xd4c1,0xd581,0x1540,0xd701,0x17c0,0x1680,0xd641,

0xd201,0x12c0,0x1380,0xd341,0x1100,0xd1c1,0xd081,0x1040,

0xf001,0x30c0,0x3180,0xf141,0x3300,0xf3c1,0xf281,0x3240,

0x3600,0xf6c1,0xf781,0x3740,0xf501,0x35c0,0x3480,0xf441,

0x3c00,0xfcc1,0xfd81,0x3d40,0xff01,0x3fc0,0x3e80,0xfe41,

0xfa01,0x3ac0,0x3b80,0xfb41,0x3900,0xf9c1,0xf881,0x3840,

0x2800,0xe8c1,0xe981,0x2940,0xeb01,0x2bc0,0x2a80,0xea41,

0xee01,0x2ec0,0x2f80,0xef41,0x2d00,0xedc1,0xec81,0x2c40,

0xe401,0x24c0,0x2580,0xe541,0x2700,0xe7c1,0xe681,0x2640,

0x2200,0xe2c1,0xe381,0x2340,0xe101,0x21c0,0x2080,0xe041,

0xa001,0x60c0,0x6180,0xa141,0x6300,0xa3c1,0xa281,0x6240,

0x6600,0xa6c1,0xa781,0x6740,0xa501,0x65c0,0x6480,0xa441,

0x6c00,0xacc1,0xad81,0x6d40,0xaf01,0x6fc0,0x6e80,0xae41,

0xaa01,0x6ac0,0x6b80,0xab41,0x6900,0xa9c1,0xa881,0x6840,

0x7800,0xb8c1,0xb981,0x7940,0xbb01,0x7bc0,0x7a80,0xba41,

0xbe01,0x7ec0,0x7f80,0xbf41,0x7d00,0xbdc1,0xbc81,0x7c40,

0xb401,0x74c0,0x7580,0xb541,0x7700,0xb7c1,0xb681,0x7640,

0x7200,0xb2c1,0xb381,0x7340,0xb101,0x71c0,0x7080,0xb041,

0x5000,0x90c1,0x9181,0x5140,0x9301,0x53c0,0x5280,0x9241,

0x9601,0x56c0,0x5780,0x9741,0x5500,0x95c1,0x9481,0x5440,

0x9c01,0x5cc0,0x5d80,0x9d41,0x5f00,0x9fc1,0x9e81,0x5e40,

0x5a00,0x9ac1,0x9b81,0x5b40,0x9901,0x59c0,0x5880,0x9841,

0x8801,0x48c0,0x4980,0x8941,0x4b00,0x8bc1,0x8a81,0x4a40,

0x4e00,0x8ec1,0x8f81,0x4f40,0x8d01,0x4dc0,0x4c80,0x8c41,

0x4400,0x84c1,0x8581,0x4540,0x8701,0x47c0,0x4680,0x8641,

0x8201,0x42c0,0x4380,0x8341,0x4100,0x81c1,0x8081,0x4040};

11位的字

通讯数据的类型及格式说明:

信息传输为异步方式,并以字节为单位。

在主站和从站之间传递的通讯信息是格式:

字格式(串行数据)

11位二进制

起始位

1位

数据位

8位

奇偶校验位

1位:

有奇偶校验位/无:

无奇偶校验位

停止位

1位:

有奇偶校验位/2位:

无奇偶校验位

•通讯数据(信息帧)格式

 

地址码

功能码

数据区

错误校检

1字节

1字节

N字节

16位CR(码(冗余循环码)

数据格式:

数据长度:

★注:

1、1个字节由8位二进制数组成(既8bit)。

2、ModBus是Modicon公司的注册商标。

3、“从机”在本文件中既为PDM

、通讯信息传输过程:

当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,

然后把执行结果(数据)返送给主机。

返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。

如果CRC校验出错就不返回任何信息。

1.1地址码:

地址码是每次通讯信息帧的第一字节(8位),从1到255。

这个字节表明由用户设置地

址的从机将接收由主机发送来的信息。

每个从机都必须有唯一的地址码,并且只有符合地址

码的从机才能响应回送信息。

当从机回送信息时,回送数据均以各自的地址码开始。

主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。

相应的

地址码表明该信息来自于何处。

1.2功能码:

是每次通讯信息帧传送的第二个字节。

ModBus通讯规约可定义的功能码为1到127。

PDM

系列仪表/变送器仅用到其中的一部分功能码。

作为主机请求发送,通过功能码告诉从机应执行什么动作。

作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从

机已响应主机并且已进行相关的操作。

表8.1MODBUS部分功能码

功能码

定义

操作(二进制)

02

读开关量输入

读取一路或多路开关量状态输入数据

01

读开关量输出

读取一路或多路开关量输出状态数据

03

读寄存器数据

读取一个或多个寄存器的数据

05

写开关量输出

控制一路继电器“合/分”输出

06

写单路寄存器

把一组二进制数据写入单个寄存器

10

写多路寄存器

把多组二进制数据写入多个寄存器

1.3数据区:

数据区包括需要由从机返送何种信息或执行什么动作。

这些信息可以是数据(如:

开关

量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。

例如,主机通过功能码03

告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的

数据包括寄存器的数据长度及数据内容。

对于不同的从机,地址和数据信息都不相同(应给

出通讯信息表)。

二、MODBU功能码简介

2.1功能码“02”:

读1路或多路开关量状态输入

例如:

主机要读取地址为01,开关量DI1—DI4的输入状态。

从机(PDM数据寄存器的地址和数据为:

起始位地址

DI寄存器数据(16进制)

备注

0000

0B

DI1/DI2/DI4状态为“1”,DI3状态为“0”

 

主机发送的报文格式:

主机发送

字节数

发送的信息

备注

从机地址

1

01

发送至地址为01的从机

功能码

1

02

读开关量输入状态

起始BIT位

2

0000

起始BIT位地址为0000

读数据长度

2

0004

读取4路开关量输入状态位

CRC码

2

79C9

由主机计算得到CRC码

从机(PDM响应返回的报文格式:

从机响应

字节数

返回的信息

备注

从机地址

1

01

来自从机01

功能码

1

02

读开关量输入状态

数据长度

1

01

1个字节(8个BIT位)

DI状态数据

1

0B

DI寄存器内容

CRC码

2

E04F

由从机计算得到CRC码

22功能码“01”:

读1路或多路开关量输出状态

例如:

主机要读取地址为01,开关量DO1,DO2的输出状态。

从机(PDM数据寄存器的地址和数据为:

起始位地址

DO寄存器数据(16进制)

备注

0000

02

DO2输出状态为“1”,DO1输出状态为“0”

主机发送的报文格式:

 

主机发送

字节数

发送的信息

备注

从机地址

1

01

发送至地址为01的从机

功能码

1

01

读开关量输出状态

起始BIT位

2

0000

起始BIT位地址为0000

读数据长度

2

0002

读取2路继电器输出状态位

CRC码

2

BDCB

由主机计算得到CRC码

从机(PDM响应返回的报文格式:

 

从机响应

字节数

返回的信息

备注

从机地址

1

01

来自从机01

功能码

1

01

读开关量输出状态

数据长度

1

01

1个字节(8个BIT位)

DO状态数据

1

02

DO寄存器内容

CRC码

2

D049

由从机计算得到CRC码

2.3功能码“03”:

读多路寄存器输入

例如:

主机要读取地址为01,起始地址为0116的3个从机寄存器数据。

从机(PDM数据寄存器的地址和数据为:

寄存器地址

寄存器数据(16进制)]

对应PDM电量

0116

1784

UA

0117

1780

UB

0118

178A

UC

主机发送的报文格式:

主机发送

字节数

发送的信息

备注

从机地址

1

01

发送至地址为01的从机

功能码

1

03

读取寄存器

起始地址

2

0116

起始地址为0116

数据长度

3

0003

读取3个寄存器(共6个字节)

CRC码

2

E5F3

由主机计算得到CRC码

从机(PDM)响应返回的报文格式:

 

从机响应

字节数

返回的信息

备注

从机地址

1

01

来自从机01

功能码

1

03

读取寄存器

读取字

1

06

3个寄存器共6个字节

寄存器数据1

2

1784

地址为0116内存的内容

寄存器数据2

2

1780

地址为0117内存的内容

寄存器数据3

2

178A

地址为0118内存的内容

CRC码

2

5847

由从机计算得到CRC码

2.4功能码“05”:

写1路开关量输出(“遥控”)

例1:

开关量输出点DO1,其当前状态为“分”,主机要控制该路继电器“合”

控制命令为:

“FF00”为控制继电器“合”;

“0000”为控制继电器“分”;

主机发送的报文格式:

主机发送

字节数

发送的信息

备注

从机地址

1

01

发送至地址为01的从机

功能码

1

05

写开关量输出状态

输出BIT位

2

0000

对应输出继电器BIT位(DO1

控制命令

2

FF00

控制该路继电器输出为“合”状态位丁

CRC码

2

8C3A

由主机计算得到CRC码

从机(PDM响应返回的报文格式:

与主机发送的报文格式及数据内容完全相同。

例2:

开关量输出点DO2其当前状态为“合”,主机要控制该路继电器“分”

主机发送的报文格式:

主机发送

字节数

发送的信息

备注

从机地址

1

01

发送至地址为01的从机

功能码

1

05

写开关量输出状态

输出BIT位

2

0001

对应输出继电器BIT位(DO2

控制命令

2

0000

控制该路继电器输出为“合”状态位—

CRC码

2

9C0A

由主机计算得到CRC码

从机(PDM响应返回的报文格式:

与主机发送的报文格式及数据内容完全相同。

2.5功能码“06”:

写单路寄存器

例如:

主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)。

通讯数据保存结束后,地址为002C的PDM表原存储信息为:

地址

原来存储数据(16进制)

002C

04B0

主机发送的报文格式:

主机发送

字节数

发送的信息

举例

从机地址

1

01

发送至地址为01的从机

功能码

1

06

写单路寄存器

起始地址

2

002C

要写入的寄存器地址

写入数据

2

07D0

对应的新数据

CRC码

2

4BAF

由主机计算得到的CRC码

从机(PDM)响应返回的报文格式:

与主机发送的报文格式及数据内容完全相同。

2.6功能码“10”:

写多路寄存器

主机利用这个功能码把多个数据保存到PDM表的数据存储器中去。

Modbus通讯规约中

的寄存器指的是16位(即2字节),并且高位在前。

这样PDM勺存储器都是二个字节。

由于Modbus通讯规约允许每次最多保存60个寄存器,因此PDM一次也最多允许保存60个数据

寄存器。

例如:

主机要把0064,0010保存到地址为002C,002D的从机寄存器中去(从机地址码为01)。

通讯数据保存结束后,地址为002C/002D的PDM表内存储信息为:

地址

原来存储数据(16进制)

002C

04B0

002D

1388

主机发送的报文格式:

主机发送

字节数

发送信息

举例

从机地址

1

01

:

发送至从机01

功能码

1

10

写多路寄存器

起始地址

2

002C

要写入的寄存器的起始地址

保存数据字长度

2

0002

保存数据的字长度(共2字)

保存数据字节长

1

04

保存数据的字节长度(共4字节)

保存数据1

2

04B0

数据地址002C

保存数据2

2

1388

数据地址002D

CRC码

2

FC63

由主机计算得到的CRC码

 

从机(PDM响应返回的报文格式:

从机响应

字节数

字节数

举例

从机地址

1

01

来自从机01

功能码

1

10

写多路寄存器

起始地址

2

002C

起始地址为002C

保存数据字长度

2

0002

:

保存2个字长度的数据

CRC码

2

8001

由从机计算得到的CRC码

三、错误校验码(CRC校验):

主机或从机可用校验码进行判别接收信息是否正确。

由于电子噪声或一些其它干扰,信

息在传输过程中有时会发生错误,错误校验码(CRC可以检验主机或从机在通讯数据传送

过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的

安全和效率。

MODBU通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。

CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。

接收信息的设备(从机)再重新计算接收到信息的CRC比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。

在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。

•CRC码的计算方法是:

1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;

2•把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低

8位相异或,把结果放于CRC寄存器;

3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;

4.如果移出位为0:

重复第3步(再次右移一位);

如果移出位为1:

CRC寄存器与多项式A001(1010000000000001)进行异或;

5•重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;

6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;

7•将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低

字节进行交换;

8.最后得到的CRC寄存器内容即为:

CRC码。

四、通讯错误信息及数据的处理:

当PDM表检测到除了CRC码出错以外的错误时,必须向主机回送信息,功能码的最高位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128。

以下的这些代

码表明有意外的错误发生。

PDM从主机接收到的信息如有CRC错误,则将被PDM表忽略。

PDM返送的错误码的格式如下(CRC码除外):

地址码:

1字节

功能码:

1字节(最高位为1)

错误码:

1字节

CRC码:

2字节。

PDM响应回送如下错误码:

81.非法的功能码。

接收到的功能码PDM表不支持。

82.非法的数据位置。

指定的数据位置超出PDM俵的范围。

83.非法的数据值。

接收到主机发送的数据值超出PDM相应地址的数据范围。

欢迎您的下载,

资料仅供参考!

致力为企业和个人提供合同协议,策划案计划书,学习资料等等

打造全网一站式需求

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

当前位置:首页 > 高等教育 > 其它

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

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