modbus协议解析.docx

上传人:b****7 文档编号:16537233 上传时间:2023-07-14 格式:DOCX 页数:18 大小:68.02KB
下载 相关 举报
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_第6页
第6页 / 共18页
modbus协议解析.docx_第7页
第7页 / 共18页
modbus协议解析.docx_第8页
第8页 / 共18页
modbus协议解析.docx_第9页
第9页 / 共18页
modbus协议解析.docx_第10页
第10页 / 共18页
modbus协议解析.docx_第11页
第11页 / 共18页
modbus协议解析.docx_第12页
第12页 / 共18页
modbus协议解析.docx_第13页
第13页 / 共18页
modbus协议解析.docx_第14页
第14页 / 共18页
modbus协议解析.docx_第15页
第15页 / 共18页
modbus协议解析.docx_第16页
第16页 / 共18页
modbus协议解析.docx_第17页
第17页 / 共18页
modbus协议解析.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

modbus协议解析.docx

《modbus协议解析.docx》由会员分享,可在线阅读,更多相关《modbus协议解析.docx(18页珍藏版)》请在冰点文库上搜索。

modbus协议解析.docx

modbus协议解析

 

1、Modbus简介

 Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。

ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。

其系统结构既包括硬件、亦包括软件。

它可应用于各种数据采集和过程监控。

ModBus网络只有一个主机,所有通信都由他发出。

网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定.

Modbus比其他通信协议使用的更广泛的主要原因有:

(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。

目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。

(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。

(3)Modbus的帧格式简单、紧凑,通俗易懂。

用户使用容易,厂商开发简单。

其传输模式有:

RTU、ASSCII、TCP

图1modbus结构示意图

1.1MODBUS功能码简述

  下表列出MODBUS支持的部分功能代码:

以十进制表示。

表1.1MODBUS部分功能码

代码

中文名称

寄存器PLC地址

位操作/字操作

操作数量

01

读线圈状态

00001-09999

位操作

单个或多个

02

读离散输入状态

10001-19999

位操作

单个或多个

03

读保持寄存器

40001-49999

字操作

单个或多个

04

读输入寄存器

30001-39999

字操作

单个或多个

05

写单个线圈

00001-09999

位操作

单个

06

写单个保持寄存器

40001-49999

字操作

单个

15

写多个线圈

00001-09999

位操作

多个

16

写多个保持寄存器

40001-49999

字操作

多个

1.2功能码说明

  功能码可以分为位操作和字操作两类。

位操作的最小单位为BIT,字操作的最小单位为两个字节。

    【位操作指令】  读线圈状态01H,读(离散)输入状态02H,写单个线圈06H和写多个线圈0FH。

    【字操作指令】  读保持寄存器03H,写单个寄存器06H,写多个保持寄存器10H。

1.2寄存器地址分配

表1.2MODBUS寄存器地址分配

寄存器PLC地址

寄存器协议地址

适用功能

寄存器种类

读写状态

00001-09999

0000H-FFFFH

01H05H0FH

线圈状态

可读可写

10001-19999

0000H-FFFFH

02H

离散输入状态

可读

30001-39999

0000H-FFFFH

04H

输入寄存器

可读

40001-49999

0000H-FFFFH

03H06H0FH

保持寄存器

可读可写

 

1.3寄存器种类说明

表1.3MODBUS寄存器种类说明

寄存器种类

说明

PLC类比

举例说明

线圈

状态

输出端口。

可设定端口的输出状态,也可以读取该位的输出状态。

可分为两种不同的执行状态,例如保持型或边沿触发型。

DO

数字量输出

电磁阀输出,MOSFET输出,LED显示等。

离散

输入状态

输入端口。

通过外部设定改变输入状态,可读但不可写。

DI

数字量输入

拨码开关,接近开关等。

保持

寄存器

输出参数或保持参数,控制器运行时被设定的某些参数。

可读可写。

AO

模拟量输出

模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限。

输入

寄存器

输入参数。

控制器运行时从外部设备获得的参数。

可读但不可写。

AI

模拟量输入

模拟量输入

1.4PLC地址和协议地址区别

  PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛。

1.4.1寄存器PLC地址

  寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。

PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。

第一位数字和寄存器类型的对应关系如表1所示。

PLC地址例如40001、30002等。

1.4.2寄存器协议地址

  寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。

再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然两个PLC寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。

2.MODBUS指令说明

2.1读线圈寄存器01H

1)描述:

读MODBUS从机线圈寄存器当前状态。

2)查询:

例如从机地址为11H,线圈寄存器的起始地址为0013H,结束地址为0037H。

该次查询总共访问37个线圈寄存器。

表2.1.1读线圈寄存器-查询

 

Hex

从机地址

11

功能码

01

寄存器起始地址高字节

00

寄存器起始地址低字节

13

寄存器数量高字节

00

寄存器数量低字节

25

CRC校验高字节

0E

CRC校验低字节

84

 

 

3)响应

响应负载中的各线圈状态与数据容每位相对应。

1代表ON,0代表OFF。

若返回的线圈数不为8的倍数,则在最后数据字节未尾使用0代替。

表2.1.2读线圈寄存器-响应

 

Hex

从机地址

11

功能码

01

返回字节数

05

数据1(线圈0013H-线圈001AH)

CD

数据2(线圈001BH-线圈0022H)

6B

数据3(线圈0023H-线圈002AH)

B2

数据4(线圈0032H-线圈002BH)

0E

数据5(线圈0037H-线圈0033H)

1B

CRC校验高字节

45

CRC校验低字节

E6

线圈0013H到线圈001AH的状态为CDH,二进制值为11001101,该字节的最高字节为线圈001AH,最低字节为线圈0013H。

线圈001AH到线圈0013H的状态分别为ON-ON-OFF-OFF-ON-ON-OFF-ON。

表2.1.3线圈0013H到001A状态

001AH

0019H

0018H

0017H

0016H

0015H

0014H

0013H

ON

ON

OFF

OFF

ON

ON

OFF

ON

最后一个数据字节中,线圈0033H到线圈0037状态为1BH(二进制00011011),线圈0037H是左数第4位,线圈0033H为该字节的最低字节,线圈0037H至线圈0033H的状态分别为ON-ON-OFF-ON-ON,剩余3位使用0填充。

表2.1.4线圈0033H到线圈0037状态

003AH

0039H

0038H

0037H

0036H

0035H

0034H

0033H

填充

填充

填充

ON

ON

OFF

ON

ON

2.2读离散输入寄存器02H

1)说明

读离散输入寄存器状态。

2)查询

从机地址为11H。

离散输入寄存器的起始地址为00C4H,结束寄存器地址为00D9H。

总共访问32个离散输入寄存器。

表2.2.1读离散输入寄存器——查询

 

Hex

从机地址

11

功能码

02

寄存器地址高字节

00

寄存器地址低字节

C4

寄存器数量高字节

00

寄存器数量低字节

16

CRC校验高字节

BA

CRC校验低字节

A9

 

3)响应

响应各离散输入寄存器状态,分别对应数据区中的每位值,1代表ON;0代表OFF。

第一个数据字节的LSB(最低字节)为查询的寻址地址,其他输入口按顺序在该字节中由低字节向高字节排列,直到填充满8位。

下一个字节中的8个输入位也是从低字节到高字节排列。

若返回的输入位数不是8的倍数,则在最后的数据字节中的剩余位至该字节的最高位使用0填充。

表2.2.1读输入寄存器-响应

 

Hex

从机地址

11

功能码

02

返回字节数

03

数据1(00C4H-00CBH)

AC

数据2(00CCH-00D3H)

DB

数据3(00D4H-00D9H)

35

CRC校验高字节

20

CRC校验低字节

18

离散输入寄存器00D4H到00D9H的状态为35H(二进制00110101)。

输入寄存器00D9H为左数第3位,输入寄存器00D4为最低位,输入寄存器00D9H到00D4H的状态分别为ON-ON-OFF-ON-OFF-ON。

00DBH寄存器和00DAH寄存器被0填充。

表2.2.2离散输入寄存器00C4H到00DBH状态

00CBH

00CAH

00C9H

00C8H

00C7H

00C6H

00C5H

00C4H

0

0

1

1

0

1

0

1

00D3H

00D2H

00D1H

00D0H

00CFH

00CEH

00CDH

00CCH

1

1

1

0

1

0

1

1

00DBH

00DAH

00D9H

00D8H

00D7H

00D6H

00D5H

00D4H

填充

填充

1

1

0

1

0

1

2.3读保持寄存器03H

1)说明

读保持寄存器。

可读取单个或多个保持寄存器。

2)查询

从机地址为11H。

保持寄存器的起始地址为006BH,结束地址为006DH。

该次查询总共访问3个保持寄存器。

表2.3.1读保持寄存器-查询

 

Hex

从机地址

11

功能码

03

寄存器地址高字节

00

寄存器地址低字节

6B

寄存器数量高字节

00

寄存器数量低字节

03

CRC高字节

76

CRC低字节

87

 

3)响应

保持寄存器的长度为2个字节。

对于单个保持寄存器而言,寄存器高字节数据先被传输,低字节数据后被传输。

保持寄存器之间,低地址寄存器先被传输,高地址寄存器后被传输。

表2.3.2读保持寄存器-响应

 

Hex

从机地址

11

功能码

03

字节数

06

数据1高字节(006BH)

00

数据1低字节(006BH)

6B

数据2高字节(006CH)

00

数据2低字节(006CH)

13

数据3高字节(006DH)

00

数据3低字节(006DH)

00

CRC高字节

38

CRC低字节

B9

 

表2.3.3保持寄存器006BH到006DH结果

006BH

高字节

006BH

低字节

006CH

高字节

006CH

低字节

006DH

高字节

006DH

低字节

00

6B

00

13

00

00

 

 

2.4读输入寄存器04H

1)说明

读输入寄存器命令。

该命令支持单个寄存器访问也支持多个寄存器访问。

2)查询

从机地址为11H。

输入寄存器的起始地址为0008H,寄存器的结束地址为0009H。

本次访问访问2个输入寄存器。

表2.4.1读输入寄存器-查询

 

Hex格式

从机地址

11

功能码

04

寄存器起始地址高字节

00

寄存器起始地址低字节

08

寄存器个数高字节

00

寄存器个数低字节

02

CRC高字节

F2

CRC低字节

99

 

3)响应

输入寄存器长度为2个字节。

对于单个输入寄存器而言,寄存器高字节数据先被传输,低字节数据后被传输。

输入寄存器之间,低地址寄存器先被传输,高地址寄存器后被传输。

表2.4.2读寄存器-响应

 

Hex格式

从机地址

11

功能码

04

字节数

04

数据1高字节(0008H)

00

数据1低字节(0008H)

0A

数据2高字节(0009H)

00

数据2低字节(0009H)

0B

CRC高字节

8B

CRC低字节

80

表2.4.3输入寄存器0008H到0009H结果

006BH

高字节

006BH

低字节

006CH

高字节

006CH

低字节

00

0A

00

0B

2.5写单个线圈寄存器05H

1)说明

写单个线圈寄存器。

FF00H值请求线圈处于ON状态,0000H值请求线圈处于OFF状态。

05H指令设置单个线圈的状态,15H指令可以设置多个线圈的状态,两个指令虽然都设定线圈的ON/OFF状态,但是ON/OFF的表达方式却不同。

2)查询

从机地址为11H,线圈寄存器的地址为00ACH。

使00ACH线圈处于ON状态,即数据容为FF00H。

表2.5.1写单个线圈-查询

 

Hex

从机地址

11

功能码

05

寄存器地址高字节

00

寄存器地址低字节

AC

数据1高字节

FF

数据2低字节

00

CRC校验高字节

4E

CRC校验低字节

8B

 

 

3)响应

2.5.1强制单个线圈——响应

 

Hex

从机地址

11

功能码

05

寄存器地址高字节

00

寄存器地址低字节

AC

寄存器1高字节

FF

寄存器1低字节

00

CRC校验高字节

4E

CRC校验低字节

8B

 

 

2.6写单个保持寄存器06H

1)说明

写保持寄存器。

注意06指令只能操作单个保持寄存器,16指令可以设置单个或多个保持寄存器。

2)查询

从机地址为11H。

保持寄存器地址为0001H。

寄存器容为0003H。

表2.6.1写单个保持寄存器——查询

 

Hex

从机地址

11

功能码

06

寄存器地址高字节

00

寄存器地址低字节

01

数据1高字节

00

数据1低字节

01

CRC校验高字节

9A

CRC校验低字节

9B

 

 

3)响应

表2.6.2写单个保持寄存器——响应

 

Hex

从机地址

11

功能码

06

寄存器地址高字节

00

寄存器地址低字节

01

寄存器数量高字节

00

寄存器数量低字节

01

CRC校验高字节

1B

CRC校验低字节

5A

2.7写多个线圈寄存器0FH

1)说明

写多个线圈寄存器。

若数据区的某位值为“1”表示被请求的相应线圈状态为ON,若某位值为“0”,则为状态为OFF。

2)查询

从机地址为11H,线圈寄存器的起始地址为0013H,线圈寄存器的结束地址为001CH。

总共访问10个寄存器。

寄存器容如下表所示。

表2.7.1线圈寄存器0013H到001CH

001AH

0019H

0018H

0017H

0016H

0015H

0014H

0013H

1

1

0

0

1

1

0

1

0022H

0021H

0020H

001FH

001EH

001DH

001CH

001BH

0

0

0

0

0

0

0

1

传输的第一个字节CDH对应线圈为0013H到001AH,LSB(最低位)对应线圈0013H,传输第二个字节为01H,对应的线圈为001BH到001CH,LSB对应线圈001CH,其余未使用位使用0填充。

表2.7.1写多个线圈寄存器——查询

 

Hex

从机地址

11

功能码

0F

寄存器地址高字节

00

寄存器地址低字节

13

寄存器数量高字节

00

寄存器数量低字节

0A

字节数

02

数据1(0013H-001AH)

CD

数据2(001BH-001CH)

01

CRC校验高字节

BF

CRC校验低字节

0B

 

 

3)响应

表2.7.1写多个线圈寄存器——响应

 

Hex

从机地址

11

功能码

0F

寄存器地址高字节

00

寄存器地址低字节

13

寄存器数量高字节

00

寄存器数量低字节

0A

字节数

02

CRC校验高字节

99

CRC校验低字节

1B

 

 

2.8写多个保持寄存器10H

1)说明

写多个保持寄存器。

2)查询

从机地址为11H。

保持寄存器的其实地址为0001H,寄存器的结束地址为0002H。

总共访问2个寄存器。

保持寄存器0001H的容为000AH,保持寄存器0002H的容为0102H。

表2.8.1写多个保持寄存器——请求

 

Hex

从机地址

11

功能码

10

寄存器起始地址高字节

00

寄存器起始地址低字节

01

寄存器数量高字节

00

寄存器数量低字节

02

字节数

04

数据1高字节

00

数据1低字节

0A

数据2高字节

01

数据2低字节

02

CRC校验高字节

C6

CRC校验低字节

F0

表2.8.2保持寄存器0001H到0002H容

地址

0001H高字节

0001H低字节

0002H高字节

0003H低字节

数值

00

0A

01

12

 

3)响应

表2.8.3写多个保持寄存器——响应

 

Hex

从机地址

11

功能码

10

寄存器起始地址高字节

00

寄存器起始地址低字节

01

寄存器数量高字节

00

寄存器数量低字节

02

CRC校验高字节

12

CRC校验低字节

98

注意:

本文只是引用别人的资料,稍加整理而成,本着开源的精神,若有侵权,还请见谅。

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

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2