Modbus通讯协议12.docx

上传人:b****0 文档编号:9890287 上传时间:2023-05-21 格式:DOCX 页数:33 大小:116.51KB
下载 相关 举报
Modbus通讯协议12.docx_第1页
第1页 / 共33页
Modbus通讯协议12.docx_第2页
第2页 / 共33页
Modbus通讯协议12.docx_第3页
第3页 / 共33页
Modbus通讯协议12.docx_第4页
第4页 / 共33页
Modbus通讯协议12.docx_第5页
第5页 / 共33页
Modbus通讯协议12.docx_第6页
第6页 / 共33页
Modbus通讯协议12.docx_第7页
第7页 / 共33页
Modbus通讯协议12.docx_第8页
第8页 / 共33页
Modbus通讯协议12.docx_第9页
第9页 / 共33页
Modbus通讯协议12.docx_第10页
第10页 / 共33页
Modbus通讯协议12.docx_第11页
第11页 / 共33页
Modbus通讯协议12.docx_第12页
第12页 / 共33页
Modbus通讯协议12.docx_第13页
第13页 / 共33页
Modbus通讯协议12.docx_第14页
第14页 / 共33页
Modbus通讯协议12.docx_第15页
第15页 / 共33页
Modbus通讯协议12.docx_第16页
第16页 / 共33页
Modbus通讯协议12.docx_第17页
第17页 / 共33页
Modbus通讯协议12.docx_第18页
第18页 / 共33页
Modbus通讯协议12.docx_第19页
第19页 / 共33页
Modbus通讯协议12.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Modbus通讯协议12.docx

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

Modbus通讯协议12.docx

Modbus通讯协议12

[Modbus通讯协议]

[本页为封面,由文件管理员粘贴]

版本记录

目录

1.Modbus协议概述1

1.1.Modbus协议传输模式1

1.2.帧1

1.2.1.ASCII帧2

1.2.2.RTU帧2

2.Modbus协议3

2.1.通讯方式3

2.2.Modbus帧3

2.2.1.从站地址字段4

2.2.2.功能码字段4

2.2.3.起始数据地址字段5

2.2.4.数据长度字段5

2.2.5.数据字段5

2.2.6.校验和字段6

2.3.功能码6

2.3.1.读取开出状态(功能码01)6

2.3.2.读取开入状态(功能码02)7

2.3.3.读取模出状态(功能码03)7

2.3.4.读取模入状态(功能码04)8

2.3.5.强制单路开出(功能码05)9

2.3.6.强制单路模出(功能码06)9

2.3.7.强制多路开出(功能码15)10

2.3.8.强制多路模出(功能码16)11

3.附录A纵向冗余校验(LRC)12

4.附录B循环冗余校验(CRC)13

5.附录C功能码与数据类型对应表15

6.附录D功能码和内存映射16

7.附录E估算串口时间17

8.附录F最大参数20

9.附录G异常应答21

1.Modbus协议概述

Modbus协议是主从式通讯协议,理论上可接(寻址)一台主站和至多247①台从站。

受线路和设备的限制,最多可接一台主站和32台从站。

Modbus协议的某些特征是固定的,如帧格式、帧顺序、通讯错误和异常情况的处理,以及所执行的功能等,都不能随便改动。

其他特征属于用户可选的,如传输介质、波特率、字符奇偶校验、停止位的个数以及传输模式(ASCII或RTU)的选择等等。

用户所选择的参数对于各个站必须一致,在系统运行时不能改变。

注:

①除非特别指明或表示,本文档中所有数字均为十进制数。

1.1.Modbus协议传输模式

Modbus有两种可选的传输模式:

ASCII(美国信息交换码)和RTU(远程终端设备),选择时应视主站而定。

表1-1ASCII和RTU传输模式的特征

特征

ASCII

RTU

编码系统

十六进制0-F的ASCII码

十六进制

每个字符的位数

起始位

1位

1位

数据位

7位

8位

奇偶校验位

0或1位

0或1位

停止位

1或2位

1或2位

校验位

LRC①

CRC②

注:

1纵向冗余校验,见附录A。

2循环冗余校验,见附录B。

1.2.帧

Modbus协议的帧(报文)格式(详见2.2),对于ASCII和RTU传输模式基本相同,差别仅在于ASCII帧有帧首和帧尾,用以分断帧和同步,RTU帧无帧首和帧尾,其同步用时间间隔来实现。

帧的各个字段的意义对于ASCII和RTU是相同的,主要区别在于对报文执行的校验类型以及报文中各个字符的编码形式和数量。

一个8位的16进制RTU字符,对应于两个ASCII字符。

其转化方式是:

将8位RTU字符按二进制分成2段,每段4位;然后把每段对应的十六进制数扩展成对应的ASCII字符,就实现了RTU字符到ASCII字符的转换。

例如,假设从站地址为17,RTU模式下,从站地址字段表示为11H;ASCII模式下,从站地址表示为‘1’‘1’,即31H31H两个字节。

由此可见,ASCII所用的字符是RTU的2倍。

最大帧长255。

但有的厂家实现时可能会超过此限制,如北京13号线的HC6000就能最多一次读127个寄存器(RTU模式),计259个字节。

请参考附录F

1.2.1.ASCII帧

ASCII传输模式的帧,是以“:

”字符表示帧的开始,CR(回车)、LF(换行)表示帧

的结束。

LF(换行)字符同时作同步字符使用,表示发送站已准备好接受应答。

基本规范:

(1)使用ASCII数据通讯。

(2)每个帧使用“:

(冒号:

3AH)”作为头,CRLF(CarriageReturn-LineFeed:

0DH0AH

),作为尾。

(3)允许在字符之间的间隔是1秒。

(4)使用LRC检查错误。

(5)帧结构(ASCII数据)。

下表是ASCII传输模式的一般格式命令帧(见2.2)

帧首

从站地址

功能码

数据

校验和

帧尾

:

2字符

16位

2字符

16位

N*2字符

N*16位

2字符

16位

CR

LF

1.2.2.RTU帧

RTU传输模式的帧,无帧首和帧尾,帧同步只能通过模拟同步报文来保持。

接收设备

监视收到的数据的间隔,若大于3.5个字符时间①还未收到新字符或帧尾,则该接收设备将去除原帧,并把下一个收到的字节作为节点地址。

基本规范:

(1)使用十六进制数据通讯。

(2)没有头和尾的区分。

从地址开始,到带有CRC的帧结束。

(3)在2个帧之间至少有3.5字符时间。

(4)当在字符之间时间过去1.5倍的字符时间时,忽略当前帧。

(5)使用16位CRC检查错误。

(6)帧结构(十六进制数据)。

下表是RTU传输模式的一般格式命令帧。

3.5字符时间

从站地址

功能码

数据

校验和

3.5字符时间

8位

8位

N*8位

16位

注:

①字符时间=一个字符所占位数/波特率。

例如,假设一个字符8位,波特率9600,则3.5字符时间为3.5*8/9600秒=2.92毫秒。

2.Modbus协议

2.1.通讯方式

Modbus有两种通讯方式:

应答方式和广播方式。

应答方式是主站向某个从站(地址1~247)发出命令,然后等待从站的应答;从站接到主站命令后,执行命令,并将执行结果返回给主站作为应答,然后等待下一个命令。

广播方式是主站向所有从站发送命令(从站地址0),不需要等待从站应答;从站接到广播命令后,执行命令,也不需要向主站应答。

广播方式不需要额外的物理层支持,属于纯应用层。

例如,主站发送帧,则所有从站均会收到一份,从站进行分析,如果发现帧中的从站地址是广播地址或就是自身地址,则执行帧所要求的动作(假设帧中其它字段合法,如果非法,从站可能丢弃该帧也可能作异常应答),否则丢弃该帧。

除了回送诊断校验外,只有05,06,15和16这四项功能(见2.3)对广播方式有效。

2.2.Modbus帧

Modbus的帧按应答方式分为命令帧(询问帧)和应答帧。

命令帧又有一般格式和短格式之分,应答帧有显长度帧和隐长度帧之分,图2-1、2-2、2-3、2-4给出了典型的帧格式。

从站地址

功能码

数据

校验和

起始数据地址高位

起始数据地址低位

数据个数①高位

数据个数低位

数据②

图2-1典型的一般格式命令帧

注:

①如果是模拟量,则表示寄存器的个数,也称为寄存器个数或简称寄存器数;如果是开关量,则表示开关点数,也称为线圈个数或简称线圈数。

数据个数的最大值请参考附录F。

②在有些命令帧中,不包含数据字段。

从站地址

功能码

校验和

图2-2短格式命令帧

从站地址

功能码

数据长度

数据

校验和

图2-3显长度应答帧

从站地址

功能码

数据

校验和

图2-4隐长度应答帧

2.2.1.从站地址字段

帧中的从站地址字段表示接收主站报文的从站地址。

当从站地址字段为0时,表示所有从站,此时的报文是广播报文。

用户必须设定每台从站的专用地址。

只有被编址的设备才能对主站的命令(询问)做出应答。

从站发送应答报文时,报文中地址的作用是向主站报告正在通讯的是哪台从站。

2.2.2.功能码字段

功能码字段通知从站应执行何种功能。

表2-1列出了功能码的意义和作用。

2.3节给出了各个功能码对应报文的详细格式和功能。

表2-1Modbus功能码①

功能码

名称

作用

01

读取开出状态

取得一组开关量输出的当前状态

02

读取开入状态

取得一组开关量输入的当前状态

03

读取模出状态

取得一组模拟量输出的当前状态

04

读取模入状态

取得一组模拟量输入的当前状态

05

强制单路开出

强制设定某个开关量输出的值

06

强制单路模出

强制设定某个模拟量输出的值

07

读取异常状态

取得8个内部开关量的通断状态,这8个开关量的地址由控制器决定,用户可以定义这些开关量逻辑,以说明从站状态,短报文适宜于迅速读取状态

08

回送诊断校验

把诊断校验报文送从站,以对通讯处理进行评鉴

09

编程(只用于484②)

主站模拟编程器的作用,修改从站逻辑

10

探询(只用于484)

可使主站与一台正在执行编程任务的从站通信,探询该从站是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送

11

读取事件计数

可使主站发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时

12

读取通讯事件记录

取得通讯状态、事件次数、报文数量和至多64个事件。

可使主站检索每台从站的Modbus事务处理通信事件记录。

如果某项事务处理完成,记录会给出有关错误

13

编程(184/384484584)

主站模拟编程器的作用,修改从站逻辑

14

探询(184/384484584)

可使主站与一台正在执行编程任务的从站通信,探询该从站是否已完成其操作任务,仅在含有功能码13的报文发送后,本功能码才发送

15

强制多路开出

强制设定几个开关量输出的值

16

强制多路模出

强制设定几个模拟量输出的值

17

报告从站标识

取得从站类型和运行指示灯的状态。

可使主站判断编址从站的类型及该从站运行指示灯的状态

18

编程(884和MICRO84)

主站模拟编程器的作用,修改从站逻辑

19

重置通讯链路

使从站复位于已知状态。

发生不可修改错误后,使从站复位于已知状态,可重置顺序字节

20

读取通用参数(584L)

显示扩展存储器文件中的数据信息

21

写入通用参数(584L)

把通用参数写入扩展存储文件,或修改之

22~64

保留

作扩展功能备用

65~72

保留

留作用户功能的扩展编码

73~119

非法功能

12~127

保留

留作内部作用

128~255

保留

用于异常应答

注:

①这里列举了所有的功能码。

但实际应用中,一般只用到其中的几种,如01,02,03,04,05,06,15,16。

②圆括号中的数字或字母组成表示Modicon的PLC型号,表明该项功能只适用于所列举的PLC型号。

2.2.3.起始数据地址字段

起始数据地址字段位于所有询问帧的功能码字段后,也位于功能码05、06、15、16的应答帧的功能码后,共两个字节(高位在前,低位在后)。

数据地址表示了(但并不就是)数据点在PLC内存中的地址编号。

在Modbus帧中,所有的数据地址均编号从0开始。

例如:

◎在PLC中编址为00001的开关量在Modbus帧中的数据地址表示为0000。

◎编址为00127的开关量在Modbus帧中的数据地址表示为007E(126)。

◎编址为10127的开关量在Modbus帧中的数据地址表示为007E(126)。

◎编址为40001的模出量在Modbus帧中的数据地址表示为0000。

功能码字段已经说明了地址类型,因此,4××××在Modbus帧中是隐含的。

◎编址为40108的模出量在Modbus帧中的数据地址表示为006B(107)。

◎编址为30108的模入量在Modbus帧中的数据地址表示为006B(107)。

2.2.4.数据长度字段

数据长度字段记录的是随后的数据字段的长度,单位为字符(字节)。

数据字段的长度总是被规定为RTU模式下数据字符的总数,即不管是RTU模式还是ASCII模式,数据字符的数量总是按RTU模式下的数据字符计算。

2.2.5.数据字段

数据字段内含有从站执行某项具体功能的信息,或者含有从站应答询问的信息。

这些信息可以是数值、地址参数或范围,例如,从哪路开关量或寄存器开始,处理几个开关位或寄存器、开关量或寄存器的值等等。

2.2.6.校验和字段

校验和字段用于检查通讯报文在通讯线路中是否出错。

以ASCII模式传送报文时,校验和采用LRC;以RTU模式传送时,用CRC-16。

参见表1-1、附录A和附录B。

注意,采用CRC校验时,校验和总是低字节在前高字节在后。

2.3.功能码

尽管表2-1列出的功能码多达数十种,但其中有一部分功能码设备相关性太强(一般只有Modicon的特定型号的PLC才支持),这部分功能码将不再详述。

本节将只介绍8种通用的功能码,即01,02,03,04,05,06,15,16。

2.3.1.读取开出状态(功能码01)

本功能可使主站取得被编址从站的开关量输出的通断状态。

起始地址是指从哪一路开关量开始(编号从0开始),线圈数是指读取几路。

应答帧中的数据是按上述要求读取的开关量数据(每路一位,每八位组成一个字节,最后一个字节的不足部分补0)。

本功能不支持广播方式。

以下例子是读取17号从站开关量输出020-056的状态,读出的37位组成5个字节,最后一字节的高3位补0。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

校验和LRC

帧尾

:

11

01

00

13

00

25

B6

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

校验和CRC

11H

01H

00H

13H

00H

25H

0EH84H

应答ASCII帧:

帧首

从站地址

功能码

字节计数

数据

校验和LRC

帧尾

:

11

01

05

CD6BB20E1B

06

CRLF

应答RTU帧:

从站地址

功能码

字节计数

数据

校验和CRC

11H

01H

05H

CD6BB20E1BH

45HE6H

2.3.2.读取开入状态(功能码02)

本功能可使主站取得被编址从站的开关量输入的通断状态。

起始地址是指从哪一路开关量开始(编号从0开始),线圈数是指读取几路。

应答帧中的数据是按上述要求读取的开关量数据(每路一位,每八位组成一个字节,最后一个字节的不足部分补0)。

本功能不支持广播方式。

以下例子是读取17号从站开关量输入0197-0218的状态,读出的22位组成3个字节,最后一字节的高2位补0。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

校验和LRC

帧尾

:

11

02

00

C4

00

16

13

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

校验和CRC

11H

02H

00H

C4H

00H

16H

BAA9H

应答ASCII帧:

帧首

从站地址

功能码

字节计数

数据

校验和LRC

帧尾

:

11

02

02

ACDB35

2E

CRLF

应答RTU帧:

从站地址

功能码

字节计数

数据

校验和CRC

11H

02H

02H

ACDB35H

2018H

2.3.3.读取模出状态(功能码03)

本功能可使主站取得被编址从站的模拟量输出值。

起始地址是指从哪一路模拟量开始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前)。

应答帧中的数据是按上述要求读取的模拟量数据。

本功能不支持广播方式。

以下例子是读取17号从站模拟量输出点0108-0110的状态。

应答数据高字节在前。

108是555,109是0,110是100。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

寄存器数高位

寄存器数低位

校验和LRC

帧尾

:

11

03

00

6B

00

03

7E

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

寄存器数高位

寄存器数低位

校验和CRC

11H

03H

00H

6BH

00H

03H

7687H

应答ASCII帧:

帧首

从站地址

功能码

字节计数

数据(108-110)

校验和LRC

帧尾

:

11

03

02

022B00000064

55

CRLF

应答RTU帧:

从站地址

功能码

字节计数

数据

校验和CRC

11H

03H

06H

022B00000064H

C8BAH

2.3.4.读取模入状态(功能码04)

本功能可使主站取得被编址从站的模拟量输入值。

起始地址是指从哪一路模拟量开始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前)。

应答帧中的数据是按上述要求读取的模拟量数据。

本功能不支持广播方式。

以下例子是读取17号从站模拟量输入点0108-0110的状态。

应答数据高字节在前。

108是555,109是0,110是100。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

寄存器数高位

寄存器数低位

校验和LRC

帧尾

:

11

04

00

6B

00

03

7D

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

寄存器数高位

寄存器数低位

校验和CRC

11H

04H

00H

6BH

00H

03H

C347H

应答ASCII帧:

帧首

从站地址

功能码

字节计数

数据(108-110)

校验和LRC

帧尾

:

11

04

02

022B00000064

54

CRLF

应答RTU帧:

从站地址

功能码

字节计数

数据

校验和CRC

11H

04H

06H

022B00000064H

5C89H

2.3.5.强制单路开出(功能码05)

本功能可使主站强行设定被编址从站某路开关量输出的通断状态。

从站内部的任何一路开出量均能被强置。

起始地址是指设定开关量的哪一路(编号从0开始),数据用于设定开或关:

FF00表示开,0000表示关,其他值为非法值。

正常应答是将报文原文返回。

从站地址为0时,为广播方式。

以下例子是强制17号从站开出点173为ON。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和LRC

帧尾

:

11

05

00

AC

FF

00

3F

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和CRC

11H

05H

00H

ACH

FFH

00H

4E8BH

应答ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和LRC

帧尾

:

11

05

00

AC

FF

00

3F

CRLF

应答RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和CRC

11H

05H

00H

ACH

FFH

00H

4E8BH

2.3.6.强制单路模出(功能码06)

本功能可使主站强行设定被编址从站某路模拟量输出的值。

从站内部的任何一路模拟量均能被强制。

起始地址是指设定哪一路模拟量(编号从0开始),强制值用于设定该模拟量的值(高位在前,低位在后)。

正常应答是将报文原文返回。

从站地址为0时,为广播方式。

以下例子是强制17号从站模出点136为039EH。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和LRC

帧尾

:

11

06

00

87

03

9E

C1

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和CRC

11H

06H

00H

87H

03H

9EH

BA2BH

应答ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和LRC

帧尾

:

11

06

00

87

03

9E

C1

CRLF

应答RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

强制值高位

强制值低位

校验和CRC

11H

06H

00H

87H

03H

9EH

BA2BH

2.3.7.强制多路开出(功能码15)

本功能可使主站强行设定被编址从站一组连续开关量输出的通断状态。

从站内部的任何开出量均能被强置。

起始地址是指从哪一路开关量开始(编号从0开始),线圈数是指设定几路。

字节计数是指随后的线圈状态(1为开,0为关),每八位组成一个字节,最后一个字节的不足部分补0。

正常应答是回送从站地址、功能码、起始地址和强置的开关数量。

从站地址为0时,为广播方式。

以下例子是强制17号从站开关输出量0020-0029的状态,设定置CD(11001101)和00(00000000)表示开关量输出的第27、26、23、22和20将被强置为开状态。

询问ASCII帧:

帧首

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

字节计数

数据

校验和LRC

帧尾

:

11

0F

00

13

00

0A

02

CD00

3F

CRLF

询问RTU帧:

从站地址

功能码

起始地址高位

起始地址低位

线圈数高位

线圈数低位

字节计数

数据

校验和CRC

11H

0FH

00H

13H

00

0A

02

CD00H

7ECBH

应答ASCII帧:

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

当前位置:首页 > 小学教育 > 语文

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

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