modbus通信协议简短说明

第二章:Modbus 通信协议说明

Modbus 通信协议基本上是遵循Master and Slave 的通信步骤,有一方扮演Master 角色采取主动询问方式,送出Query Message 给Slave 方,然后由Slave 方依据接到的Query Message 内容准备Response Message 回传给Master 。即使目前硬件通信已经可以达到双方互相主动通信的能力,但是于Modbus 通信协议的规定,必须一方为Master ,另一方为Slave 不能互换角色。一般使用上,监控系统(HMI)都为Master ,PLC 、电表、仪表等都为Slave ,HMI 系统一直Polling Slave 的各种relay and register 最新数值,然后做显示及各种逻辑计算及控制调整等处理。

1 共享的通信协议

1.1 Query and Response Cycle

图(2-1):Master / Slave and Query / Response Cycle

Device Address :表示该设备的编号,于同一个串行式网络上此为唯一的号码。于TCP/IP 上可以使用IP Address 区分之,所以该Device Address 保留此字段可以使用或不使用。

Function Code :表示要求Slave 处理各种不同资料或程序的Command ,以不同的Function Number 来区分之。

Eight-Bit Data Bytes :依据Function Code 而有不同的详细资料定义,Slave 设备依据此两字段资料,做各种处理。

Error Check :当通信传送资料时,因考虑信号可能会受外界干扰,所以必须加上Error Check Code ,使得message 接收方可以就接到的资料再计算一次Code ,如果正确则做正常处理,不正确则不做处理。于串行式通信规定有CRC and LRC 等两种方式。于TCP/IP 通信,因为通信Error Check 已经被TCP/IP 的阶层处理掉,所以于Modbus/TCP 通信协议上不用此字段。

Device Address Function code Eight-Bit Data Bytes Error Check Device Address Function code Eight-Bit Data Bytes Error Check Query message from Master Response message from Slave Master Slave

1.2 基本资料格式(Data Format )说明

以上Query and Response Message 基本格式如下图所示。所有资料格式最大长度为256字符。

z RTU 格式:

图(2-2):RTU data format

?T1-T2-T3-T4:RTU规定每次Query或Response Message的结束,是以未再接到下一个字符间隔时间来判断。其规定为3.5字符的

通信时间,举例来说:通信速率为9600 bps、每个字符含8 bits

再加上1 start bit 及1 stop bit后,一个字符为10 bits。计算3.5

字符的通信时间为(3.5 * 10) / 9600 = 0.00365秒。于通信协议的文

件上以T1-T2-T3-T4来表示此数值。

?所有传送的字符都是照原值8 Bits传送,不做任何处理加工。

?Data:Number of 8 Bits是表示每个Function Code有不同数目的详细资料规定。

?通信资料的Error Check采用CRC计算方式,于「串行式通信协议」小节内说明。

z ASCII 格式:

图(2-3):ASCII data format

?起始字符及结束字符:因为所传送资料都是为ASCII码,以十六进制表示,也即是一定为0123456789ABCDEF等16个ASCII码。

所以用特殊的字符规定开始或结束。

?由Device Address至Data等资料,都是将8 bits原始值转换为两码的十六进制ASCII码,所以其实际传送的字符数约为RTU格式

的两倍。

?Data:数个字符是表示每个Function Code有不同数目的详细资料规定。

?通信资料的Error Check采用LRC计算方式,于「串行式通信协议」小节内说明。

z TCP/IP 格式:

图(2-4):TCP/IP data format

?起始字符组:于前面再多加6个字符,以定义一些TCP/IP的需要系数。说明如下:

Byte 0:本次通信Message的编号以2 bytes整数(Byte 0、1)表

示,此byte为上字符,一般是由Master编号之,以区分

每次Message。如果是Slave则将Master传来的Query

Message照转至Response Message。

Byte 1:本次通信Message的编号下字符。

Byte 2:通信协议识别号码以2 bytes整数(Byte 2、3)表示,此byte

为上字符,于此处为零。

Byte 3:通信协议识别号码下字符,于此处为零。

Byte 4:Message长度以2 bytes整数(Byte 4、5)表示,此byte

为上字符(由Device Address至Data为止),因为长度不

能超过256位,所以此位永远为零。

Byte 5:Message长度下字符(由Device Address至Data为止)。

?由Device Address至Data内容同RTU格式。

?Modbus规定IP Port No. 为502。

z举例说明三种格式:

Function Code-3读取Output Register数值为例。Device address:6。Start Address:40123(Modbus规定Output Register由40001开始)。通信协议内则将40001去除,以122表示也就是十六进制0x007A、读取点数:3。

Query Message 通信内容

十六进制ASCII

Code

RTU

8-bits field

二进制

TCP

8-bits field

二进制

TCP Byte-0 0000 0000 TCP Byte-1 0000 0001 TCP Byte-2 0000 0000 TCP Byte-3 0000 0000 TCP Byte-4 0000 0000 TCP Byte-5 0000 0110 ASCII 起始字符:

Device Address 06 0 6 0000 0110 0000 0110

Function Code 03 0 3 0000 0011 0000 0011 Start Address (Hi byte) 00 0 0 0000 0000 0000 0000 Start Address (Lo byte) 7A 7 A 0111 1010 0111 1010 No. of registers (Hi byte) 00 0 0 0000 0000 0000 0000 No. of register (Lo byte) 03 0 3 0000 0011 0000 0011 Error Check Byte-0

Error Check Byte-1

结束字符

图(2-5):Example of Query Message

回传的3点register数值为789、12345、-567也就是十六进制0x0315、0x3039、0xFDC9等

Response Message 通信内容

十六进制ASCII

Code

RTU

8-bits field

二进制

TCP

8-bits field

二进制

TCP Byte-0 0000 0000 TCP Byte-1 0000 0001 TCP Byte-2 0000 0000 TCP Byte-3 0000 0000 TCP Byte-4 0000 0000 TCP Byte-5 0000 1001 ASCII 起始字符:

Device Address 06 0 6 0000 0110 0000 0110 Function Code 03 0 3 0000 0011 0000 0011 Byte count 06 0 6 0000 0110 0000 0110 Data-1 (Hi byte) 03 0 3 0000 0011 0000 0011 Data-1 (Lo byte) 15 1 5 0001 0101 0001 0101 Data-2 (Hi byte) 30 3 0 0011 0000 0011 0000 Data-2 (Lo byte) 39 3 9 0011 1001 0011 1001 Data-3 (Hi byte) FD F D 1111 1101 1111 1101 Data-3 (Lo byte) C9 C 9 1100 1001 1100 1001 Error Check Byte-0

Error Check Byte-1

结束字符

图(2-6):Example of Response Message

1.3Function Code说明

Function Code有二十几种,但是一般使用上都以1、2、3、4、5、6、

15、16等八种最为常用,以及另外特殊使用的20、21两种,此为General

Reference Register,绝大部份的Modbus设备并不会提供此Register。于PLC 上主要的控制数据有下列四种型式。此八种Function Code就是处理这些控制资料,详细说明如下各点:

控制数据四种型式:

z DI:Digital Input,以一个bit表示On/Off,用来记录控制信号的状态输入,例如:开关,接触点,马达运转,超限switch…等等。

于PLC上被称为Input relay、input coil等。

z DO:Digital Output,以一个bit表示On/Off,用来输出控制信号,以激活或停止马达,警铃,灯光…等等。于PLC上被称为Output relay、Output coil等。

z AI:Analog Input,以16 bits integer表示一个数值,用来记录控制信号的数值输入,例如:温度、流量、料量、速度、转速、文件板开度、液位、重量…等等。于PLC上被称为Input register。

z AO:Analog Output,以16 bits integer表示一个数值,用来输出控制信号的数值,例如:温度、流量、速度、转速、文件板开度、饲料量…等等设定值。于PLC上被称为Output register、Holding

register。

Modbus Function Code说明

01 Read Coil Status (output relay)

02 Read Input Status (input relay)

03 Read Holding Registers (output register)

04 Read Input Registers

05 Force Single Coil

06 Preset Single Register

07 Read Exception Status

08 Diagnostics

09 Program 484

10 Poll 484

11 Fetch Comm. Event Ctr.

12 Fetch Comm. Event Log

13 Program Controller

14 Poll Controller

15 Force Multiple Coils

16 Preset Multiple Registers

17 Report Slave ID

18 Program 884/M84

19 Reset Comm. Link

20 Read General Reference

21 Write General Reference

22 Mask Write 4x Register

23 Read/Write 4x Register

24 Read FIFO Queue

43 Read Device Identication

65 to 72 开放给一般使用者定义

100 to 110 开放给一般使用者定义

图(2-7):Modbus Function Code 一览表

以下说明常用10种Function Code:每种Function Code以举例说明其中间Message的格式至于前面的TCP Byte,ASCII起始字符及后面的Error Check、结束字符等都是一样规定,参考前一节内容即可。

Function Code-1:读取DI资料,于Modbus规定Relay Address由00001开始。但是通信协议内取后面四位数,且由零起算,例

如:于文件上Relay Address为00345,其通信协议内转

换的Address为344。

由Device Address 17读取Relay Address 20 – 32的DI资料,通信协议内Start Address为19,读取点数13。

Query Message 通信内容

十六进制

Device Address 11

Function Code 01

Start Address (Hi byte) 00

Start Address (Lo byte) 13

No. of points (Hi byte) 00

No. of points (Lo byte) 0D

回传资料以一个Byte即8 bits为一组,每一个Bit表示一点Relay On/Off 状态。例如下表

Data(Relay 27 – 20)的状态为ON-ON-OFF-ON-OFF-OFF-ON-ON。

Data(Relay 32 – 28)的状态为OFF-ON-OFF-ON-ON-ON。(前面3 bit不算,因为只到Relay 32为止)

其个别Relay状态,举例:Relay 27为ON、Relay 31为ON、Relay 23为OFF。

Response Message 通信内容

十六进制

Device Address 11

Function Code 01

Byte count 02

Data (Relay 27 – 20) D3

Data (Relay 32 – 28) 17

图(2-8):Example of Function Code - 1 Message

Function Code-2:读取DO资料,于Modbus规定Relay Address由10001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上Relay Address为10678,其通信协议内转换的Address为677。

由Device Address 23读取Relay Address 10102 – 10134的D0资料,通

信协议内Start Address为101,读取点数33。

Query Message 通信内容

十六进制

Device Address 17

Function Code 02

Start Address (Hi byte) 00

Start Address (Lo byte) 65

No. of points (Hi byte) 00

No. of points (Lo byte) 21

回传资料以一个Byte即8 bits为一组,每一个Bit表示一点Relay On/Off

状态。例如下表

Data(Relay 109 – 102)的状态为ON-OFF-ON-OFF-ON-OFF-ON-OFF。

Data(Relay 117 – 110)的状态为OFF-ON-OFF-OFF-OFF-ON-OFF-ON。

Data(Relay 125 – 118)的状态为OFF-OFF-ON-OFF-OFF-ON-ON-ON。

Data(Relay 133 – 126)的状态为ON-OFF-OFF-OFF-OFF-OFF-ON-ON。

Data(Relay 134 – 134)的状态为ON。(前面7 bit不算,因为只到Relay

134为止)

Response Message 通信内容

十六进制

Device Address 17

Function Code 02

Byte count 05

Data (Relay 109 – 102) AA

Data (Relay 117 – 110) 45

Data (Relay 125 – 118) 27

Data (Relay 133 – 126) 83

Data (Relay 134 – 134) 01

图(2-9):Example of Function Code - 2 Message

Function Code-3:读取AO资料,于Modbus规定Register Address由40001开始。但是通信协议内取后面四位数,且由零起算,例

如:于文件上Register Address为44321,其通信协议内

转换的Address为4320。

由Device Address 41读取Register Address 40765 – 40770的A0资料,通信协议内Start Address为764,读取点数6。

Query Message 通信内容

十六进制

Device Address 29

Function Code 03

Start Address (Hi byte) 02

Start Address (Lo byte) FC

No. of registers (Hi byte) 00

No. of registers (Lo byte) 06

回传资料以两个Bytes表示16 bits整数值。例如下表

Register 40765整数值:99

Register 40766整数值:12336

Register 40767整数值:-1417

Register 40768整数值:789

Register 40769整数值:767

Register 40770整数值:1

Response Message 通信内容

十六进制

Device Address 29

Function Code 03

Byte count 0C

Data-1 (Hi byte) 00

Data-1 (Lo byte) 63

Data-2 (Hi byte) 30

Data-2 (Lo byte) 30

Data-3 (Hi byte) FA

Data-3 (Lo byte) 77

Data-4 (Hi byte) 03

Data-4 (Lo byte) 15

Data-5 (Hi byte) 02

Data-5 (Lo byte) FF

Data-6 (Hi byte) 00

Data-6 (Lo byte) 01

图(2-10):Example of Function Code - 3 Message

Function Code-4:读取AI资料,于Modbus规定Register Address由30001开始。但是通信协议内取后面四位数,且由零起算,例

如:于文件上Relay Address为30988,其通信协议内转

换的Address为987。

由Device Address 30读取Register Address 30123 – 30127的AI资料,通信协议内Start Address为122,读取点数5。

Query Message 通信内容

十六进制

Device Address 1E

Function Code 04

Start Address (Hi byte) 00

Start Address (Lo byte) 7A

No. of registers (Hi byte) 00

No. of registers (Lo byte) 05

回传资料以两个Bytes表示16 bits整数值。例如下表

Register 30123整数值:2581

Register 30124整数值:57

Register 30125整数值:969

Register 30126整数值:-24544

Register 30127整数值:170

Response Message 通信内容

十六进制

Device Address 1E

Function Code 04

Byte count 0A

Data-1 (Hi byte) 0A

Data-1 (Lo byte) 15

Data-2 (Hi byte) 00

Data-2 (Lo byte) 39

Data-3 (Hi byte) 03

Data-3 (Lo byte) C9

Data-4 (Hi byte) A0

Data-4 (Lo byte) 20

Data-5 (Hi byte) 00

Data-5 (Lo byte) AA

图(2-11):Example of Function Code - 4 Message

Function Code-5:写入DO一点资料,Address规定与Function Code-2一样。

由Device Address 10写入Relay Address 10012 的D0资料,通信协议内Start Address为11。如果设定为ON于Force Data设定十六进制0xFF00,如果设定为OFF于Force Data设定十六进制0x0000。

Query Message 通信内容

十六进制

Device Address 0A

Function Code 05

Start Address (Hi byte) 00

Start Address (Lo byte) 0B

Force Data (Hi byte) FF

Force Data (Lo byte) 00

以Query Message作为Response Message传回。

Response Message 通信内容

十六进制

Device Address 0A

Function Code 05

Start Address (Hi byte) 00

Start Address (Lo byte) 0B

Force Data (Hi byte) FF

Force Data (Lo byte) 00

图(2-12):Example of Function Code - 5 Message

Function Code-6:写入AO一点资料,Address规定与Function Code-3一样。

由Device Address 13写入Register Address 40112 的A0资料,通信协议内Start Address为111。设定16 bits整数值为999即是十六进制0x03E7。

Query Message 通信内容

十六进制

Device Address 0D

Function Code 06

Start Address (Hi byte) 00

Start Address (Lo byte) 6F

Preset Data (Hi byte) 03

Preset Data (Lo byte) E7

以Query Message作为Response Message传回。

Response Message 通信内容

十六进制

Device Address 0D

Function Code 06

Start Address (Hi byte) 00

Start Address (Lo byte) 6F

Preset Data (Hi byte) 03

Preset Data (Lo byte) E7

图(2-13):Example of Function Code - 6 Message

Function Code-15:写入DO多点资料,Address规定与Function Code-2一样。

由Device Address 17写入Relay Address 10011 – 10022的D0资料,通信协议内Start Address为10,写入点数12。所设定状态如下:

第一个Force Data byte

Bit 0 1 0 1 0 1 0 1

Relay 18 17 16 15 14 13 12 11

第二个Force Data byte

Bit 0 0 0 0 0 0 1 1

Relay - - - - 22 21 20 19

Query Message 通信内容

十六进制

Device Address 11

Function Code 0F

Start Address (Hi byte) 00

Start Address (Lo byte) 0A

No. of relay (Hi byte) 00

No. of relay (Lo byte) 0C

Byte Count 02

Force Data (Relay 18 – 11) 55

Force Data (Relay 22 – 19) 03

以Query Message前面6 bytes作为Response Message回传。

Response Message 通信内容

十六进制

Device Address 11

Function Code 0F

Start Address (Hi byte) 00

Start Address (Lo byte) 12

No. of relay (Hi byte) 00

No. of relay (Lo byte) 03

图(2-14):Example of Function Code - 15 Message

Function Code-16:写入AO多点资料,Address规定与Function Code-3一样。

由Device Address 39写入Register Address 40310 – 40312的A0资料,通信协议内Start Address为309,写入点数3。写入数值如下所示:每个register数值为16 bits整数值。

Register 40310设定值:784

Register 40311设定值:12706

Register 40312设定值:-16183

Query Message 通信内容

十六进制

Device Address 27

Function Code 10

Start Address (Hi byte) 01

Start Address (Lo byte) 35

No. of registers (Hi byte) 00

No. of register (Lo byte) 03

Byte count 06

Data-1 (Hi byte) 03

Data-1 (Lo byte) 10

Data-2 (Hi byte) 31

Data-2 (Lo byte) A2

Data-3 (Hi byte) C0

Data-3 (Lo byte) C9

以Query Message前面6 bytes作为Response Message回传。

Response Message 通信内容

十六进制

Device Address 27

Function Code 10

Start Address (Hi byte) 01

Start Address (Lo byte) 35

No. of registers (Hi byte) 00

No. of register (Lo byte) 03

图(2-15):Example of Function Code - 16 Message

Function Code-20:读取General Reference Register,此为Extended Memory File 。此Register可分成10个File编号为File No. 1 - 10,

每个File开头Address都为600000。每个Register都可以

读取或写入。注意此Register Address使用者定义时

600000起算,Protocol内部offset由0起算。与Holding

Regsiter(使用者定义40001起算,Protocol内部offset由

0起算)稍有不同。本Function Code可以分成多数个Group

读取不同Address的资料。

由Device Address 17读取下列两个Group的Register 值

Group 1由File 4、开始Address offset为1、读取2点Register。

Group 2由File 3、开始Address offset为9、读取2点Register。

Query Message 通信内容

十六进制

Device Address 11

Function Code 14

Byte Count 0E

Group-1 Reference Type 06

Group-1 File No. (Hi byte) 00

Group-1 File No. (Lo byte) 04

Group-1 Start Addr. (Hi byte) 00

Group-1 Start Addr.(Lo byte) 01

00

Group-1 Registers Count (Hi

byte)

02

Group-1 Registers Count (Lo

byte)

Group-2 Reference Type 06

Group-2 File No. (Hi byte) 00

Group-2 File No. (Lo byte) 03

Group-2 Start Addr. (Hi byte) 00

Group-2 Start Addr.(Lo byte) 09

00

Group-2 Registers Count (Hi

byte)

Group-2 Registers Count (Lo

02

byte)

Response Message如下。

Response Message 通信内容

十六进制Device Address 11 Function Code 14

Byte Count 0C

Group-1 Byte Count 05

Group-1 Reference Type 06

Group-1 Data-1 (Hi byte) 0D

Group-1 Data-1 (Lo byte) FE

Group-1 Data-2 (Hi byte) 00

Group-1 Data-2 (Lo byte) 20

Group-2 Byte Count 05

Group-2 Reference Type 06

Group-2 Data-1 (Hi byte) 33

Group-2 Data-1 (Lo byte) CD

Group-2 Data-2 (Hi byte) 00

Group-2 Data-2 (Lo byte) 40 图(2-16):Example of Function Code - 20 Message

Function Code-21:写入General Reference Register,Address规定与Function Code-20一样。

由Device Address 17写入下列一个Group的Register 值

Group 1由File 4、开始Address offset为7、写入3点Register。Register 600007设定值:1711

Register 600008设定值:1214

Register 600009设定值:4109

Query Message 通信内容

十六进制

Device Address 11

Function Code 15

Byte Count 0D

Group-1 Reference Type 06

Group-1 File No. (Hi byte) 00

Group-1 File No. (Lo byte) 04

Group-1 Start Address (Hi byte)00

Group-1 Start Address (Lo byte)07

00

Group-1 Registers Count (Hi

byte)

03

Group-1 Registers Count (Lo

byte)

Group-1 Data-1 (Hi byte) 06

Group-1 Data-1 (Lo byte) AF

Group-1 Data-2 (Hi byte) 04

Group-1 Data-2 (Lo byte) BE

Group-1 Data-3 (Hi byte) 10

Group-1 Data-3 (Lo byte) 0D

以Query Message全部bytes作为Response Message回传。

图(2-17):Example of Function Code - 21 Message

1.4 Exception Code说明

异常码(Exception Code)是用来表示,当有任何通信资料异常时,由

Slave不回传正常资料,而回传错误码号(Error Code)以提供Master做异

常处理。其Message格式以下表为例说明:

由Device Address 13写入Register Address 42450 的A0资料,通信协议

内Start Address为2449。设定16 bits整数值为999即是十六进制0x03E7。

Query Message 通信内容

十六进制

Device Address 0D

Function Code 06

Start Address (Hi byte) 09

Start Address (Lo byte) 91

Preset Data (Hi byte) 03

Preset Data (Lo byte) E7

因为该Modbus 设备,只提供最大Register Address为42048,所以超出

范围,需要回传Error Code:2(ILLEGAL DATA ADDRESS)。同时将 Function

Code最左边 Bit 设定为 1 表示此Function有Exception Code。

Response Message 通信内容

十六进制

Device Address 0D

Function Code 86

Error Code 02

图(2-18):Exception Message format

由以上可知处理Exception Code,将原有的Function Code的最左边Bit

设定为1,然后将适合的Error code代入。

Error Code 内容说明

1 ILLEGAL FUNCTION

此Function Code不能被Slave所处理。可能Function Code错误或此Slave

设备未定义此Function。

2 ILLEGAL DATA ADDRESS

所要求的Address超出范围。最常见的错误为Start Address加上处理的

点数超出Address最大值。

3 ILLEGAL DATA VALUE

所传送过来的数值不合Slave的规定。例如:Function Code-6为设定某

一点Coil ON 或OFF,其Value只能有两个值ON: 0xFF00、OFF: 0x0000,

如果是其它值则为不合法。

4 SLAVE DEVICE FAILURE

当Slave处理所要求的Function Code,发生不可预期的错误。

5 ACKNOWLEDGE

当Slave接到一种Function Code需要较长时间处理时,避免Master等

待Response Message未到而产生通信逾时。所以先送此Code,然后

Master再以Polling Program Function Code要求处理结果。

6 SLAVE DEVICE BUSY

Slave正处理其它事情,目前没有时间处理所要求的Function Code,先

回传此Error Code,然后Master稍后传送再一次Query Message。

7 NEGATIVE ACKNOWLEDGE

以Function Code-13、14要求处理时,Slave无法处理则回传此Error

code,然后Slave必须再要求Slave传送检查(diagnostic)后讯息。

8 MEMORY PARITY ERROR

使用于Function Code-20、21的extension memory的处理,当此memory

发生parity错误时,回传此Error Code。

9 未定义。

10 GATEWAY PATH UNAVAILABLE

适用于Gateway的产品,表示Gateway无法于内部建立一个input port

至output port的路径或处理程序等。最常见的错误是此Gateway未做

使用上定义(configuration)。

11 GATEWAY TARGET DEVICE

FAILED TO RESPOND

适用于Gateway的产品,当转送Master Query Message至目标Slave设

备时,对方未有响应,可传送此Error code至Slave。此种最常见的现

象是该目标Slave设备并未于网络上。

图(2-19):Exception Code定义表

2 串行式的通信协议

2.1 Device Address的规定

此Device Address是用来表示于Modbus Device的编号,于同一条串行

式联机上,此编号必须是唯一的,才能区分出各别Modbus Device。于

Modbus Message内,规定ASCII格式为2 bytes字符,或RTU为1 byte (8

bits)。其有效数值为0 - 247,其中1- 247各别Modbus Device编号用,0

做为广播(broadcast)通信的特殊用途,会被所有Slave Device接受执行,

此种broadcast用法,并不是为每一种Modbus Device的标准功能请注意。

实际使用上常常会发生的无法通信的现象,必须确认Device Address

是否有设定或重复设定的操作,此为最常发现的错误点。

2.2 RTU 及 ASCII两种资料格式

前一个章节已经举例说明两种资料的基本格式,于此再说明一些重要

原则。列于下表

RTU ASCII

Message内容照原始值传送每一个原始值字符都转换为2个十六进

制ASCII Code,所传送的数目为RTU的

两倍。

以未收到下一个字符的时间间隔,来区分出每段Message,于通信应用程序的设计上较复杂。通信协议定义是未接到3.5字符的时间,表示Message结束。但是实际上每种Device硬件执行效率不同,完全依照协议设计,有时还会通信断线现象。最好的设计是比协议时间稍长,以保证收到完整Message。以特殊的起始字符及结束字符,区分出每段Message,于通信应用程序的设计较为简单。

字符硬件信号

1 start bit

8 data bits, least significant bit send first

1 bit for parity check

1 stop bit if parity is used;

2 bits if no parity 字符硬件信号

1 start bit

7 data bits, least significant bit send first

1 bit for parity check

1 stop bit if parity is used;

2 bits if no parity

图(2-20):RTU and ASCII format比较表

2.3 CRC及LRC两种 check

两种Message防止内容错误的检查机制,是当双方要将Message传给对方时,必须先做每个资料字符的特定计算方式(CRC或LRC),将结果放置于Message后面。然后对方接到此Message时,也照同样公式计算一次,如果内容相同,则可以正常处理。如果内容不同,则可能是传送过程中,受到外部信号干扰,使得资料不对,例如某一个Bit原为1变成0,则必须放弃此Message不做处理。

z CRC check:RTU格式所使用。CRC全名为Cyclical Redundancy Check 是一个16 bits的数值,计算步骤如下。

1.首先将一个十六进制0xFFFF存入一个unsigned short变量内。称做

CRC Register。

2.将第一个Message 8 bits byte与CRC Register low byte做Exclusive

OR,将结果带入CRC Register low byte。

3.将CRC Register往右移1 bit(LSB位置),于最左bit补0(MSB

位置)。

4.取入LSB位置bit,如果为0再进入第3步骤。如果为1将CRC

Register与十六进制数0xA001 Exclusive OR。

5.重复第3、4步骤,直到此byte的8 bits都处理完成。

6.然后每一个Message 8 bits byte都做同样处理,得到一个16 bits数

值。将此数值以Low byte and High byte顺序置于Message最后面。

7.注意Low byte and High byte顺序,此刚好与Message内High byte and

Low byte顺序相反。

Query Message 通信内容

十六进制

RTU 二进制

Device Address 0D 0000 1101

Function Code 06 0000 0110

Start Address (Hi byte) 09 0000 1001

Start Address (Lo byte) 91 1001 0001

Preset Data (Hi byte) 03 0000 0011

Preset Data (Lo byte) E7 1110 0111

CRC Check (Lo Byte) 1001 1011

CRC Check (Hi Byte) 1100 1101

图(2-21):CRC计算例

z LRC check :ASCII格式所使用。LRC全名为Longitudinal Redundancy Check。计算原理是将全部Message不包含起始字符「:」及结束字符,由第一个至最后一个字符照顺序相加(注意:此为原始值的字符,也就是先将两个十六进制码转换回原始字符),相加之间如果产生8 bit以上的溢位(carries)舍弃溢位,得到一个8 bits 位值,最后将相加结果取1的补码,得到一个最后值转换成两个十六进制ASCII码置于Message后面。

Query Message 通信内容

十六进制ASCII Code

起始字符:Device Address 0D 0 D Function Code 06 0 6 Start Address (Hi byte) 09 0 9 Start Address (Lo byte) 91 9 1 Preset Data (Hi byte) 03 0 3 Preset Data (Lo byte) E7 E 7 LRC Check 字符– 1 6 LRC Check 字符– 2 9

结束字符– 1

十六进制

0x0D 结束字符– 2

十六进制

0x0A 图(2-22):LRC计算例

modbus_通讯协议_实例

上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC

例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86

基于Modbus协议实现单片机与PLC之间的通讯

基于Modbus协议实现单片机与PLC之间的通讯 来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云 关键词:可编程控制器 Modbus 通讯协议 1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议[4] Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。 (1) 典型的RTU消息帧 典型的RTU消息帧如表1所示。

RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。 从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代 码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。 当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。 (2) 所有的Modbus功能码 Modbus的功能码定义如表2所示。

(完整版)MODBUS通讯协议-RTU要点

Modbus 通讯协议 (RTU传输模式)本说明仅做内部参考,详细请参阅英文版本。

第一章Modbus协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.1 传输方式 传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以RTU 模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与Modebus 协议– RTU方式相兼容的传输方式。 代码系统 ?8位二进制,十六进制数0...9,A...F ?消息中的每个8位域都是一个两个十六进制字符组成 每个字节的位 ?1个起始位 ?8个数据位,最小的有效位先发送 ?1个奇偶校验位,无校验则无 ?1个停止位(有校验时),2个Bit(无校验时) 错误检测域 ?CRC(循环冗长检测)

很好的威纶通MODBUSRTU通讯协议与变频器通讯案例

很好的威纶通 M O D B U S R T U通讯协议与变频器通讯案例 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。 图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或“断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有 3x_bit,4x_bit,6x_bit,0x_multi_coils等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。

modbus协议下上位机编程实例

竭诚为您提供优质文档/双击可除modbus协议下上位机编程实例 篇一:modbus协议下的上位机地址 Rs485采取流量计数据,经串口com1的2号地址读到int ouch中来,双字40001、40002为浮点型瞬时流量,读到上位机项目为40001F双字40004、40005为长整型累计流量,读到上位机项目为40004l 驱动设置与intouch标记名的设置 驱动设置: 项目名设置 注:在不修改驱动设置的情况下,s=s1+s2*65535 s=s2+s1*65535 根据各个厂家的仪表,上面工式有区别,设计时各个测试一下。 篇二:modbus通讯协议实例 上海安标电子有限公司 ——pc39a接地电阻仪通信协议 通信协议:

波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 注:1id:1个字节,由单机来定(0~255) 2command:1个字节,读:3或4,写:6 3数据地址:2个字节,寄存器地址,读从100开始,写从200开始4Value:2个字节,读:个数(以整型为单位),写:命令/数据(以整型为单位)5cRc:计算出cRc下位机(pc39a ):注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位)4Value:n个字节,是返回上位机的数据5cRc:计算出cRc 写命令,若正确返回收到的数据:若错误注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令错误指令 1:表示command不存在2:表示数据地址超限 4cRc:计算出cRc 例如读pc39a电流数据: 机器地址为12,电流的数据地址100,数据为15.45(a)(一个整型数据)

Modbus通讯协议(TCP和RTU)

1MODBUS RTU 读寄存器请求序号意义所占字节字节存放格式 1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3起始寄存器基地址两个字节高字节在前 4寄存器个数两个字节高字节在前 5CRC校验码两个字节低字节在前 读寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3数据长度1个字节寄存器个数×2 4数据寄存器个数×2个字节每个寄存器高字节在前5CRC校验码两个字节低字节在前 写单个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x06 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 写单个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 1

写多个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5数据长度 1个字节 寄存器个数×2  6数据寄存器个数×2个字节每个寄存器高字节在前7CRC校验码 两个字节 低字节在前 写多个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 错误返回序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节请求功能码+0x80 3错误码1个字节 其代号见下面表格4CRC校验码 两个字节 低字节在前 错误代号错误代号意义 0x01不支持该功能码 0x02越界 0x03寄存器数量超出范围 0x04读写错误 2

电磁流量计实用标准MODBUS通讯协议详情(1)

电磁流量计转换器 通讯协议 2012-10-12

目录 一、概述................................................................................................. - 2 - 二、网络结构及接线................................................................................ - 2 -

三、Modbus协议RTU帧格式 .............................................................. - 2 - 四、Modbus协议命令编码定义............................................................. - 4 - 五、电磁流量计MODBUS寄存器定义 ................................................... - 5 - 1. 电磁流量计MODBUS寄存器地址定义............................................... - 5 - 2.PLC地址设置说明................................................................................ - 5 - 3.组态王地址设置说明............................................................................. - 6 -4.数据含义说明 .................................................................................... - 6 -六、通讯数据解析................................................................................... - 7 -1读瞬时流量 .......................................................................................... - 7 -2.读瞬时流速:....................................................................................... - 8 -3读累积流量 .......................................................................................... - 8 - 5.读总量流量单位 ................................................................................. - 10 - 6.读报警状态 ........................................................................................ - 10 - 七、应用举例........................................................................................ - 11 - 1.C语言MODBUS 示例程序............................................................... - 11 - 2.modbus调试软件modbus poll通讯实例....................................... - 13 - 3.modbus调试软件modscan32通讯实例 ......................................... - 15 - 4.组态王6.53通讯实例 ........................................................................ - 17 - 5.力控 6.1通讯实例.............................................................................. - 21 -

modbus通讯协议

Modbus通讯协议 图片: 图片: 图片:

Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master 端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP 协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。 下表是ASCII协议和RTU协议进行的比较: 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII 字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

MODBUS标准通讯协议

MODBUS 标准通讯协议(简版) (基于Modbus 应用协议RTU 通讯模式) 1. 前言 本协议适用于符合MODBUS 标准通讯协议的规定以及在Modbus 网络上以RTU 模式通信运行的设备和应用软件。本协议按照Modbus 应用协议标准制定。 2. 波特率可选范围 代码 6 7 8 9 10 11 12 13 14 波特率 2400 4800 9600 14400 19200 28800 38400 57600 115200 3. RTU 通讯数据传输模式 3.1 RTU 模式每个字节( 11 位 )的格式为 : 通讯传输为异步方式,并以字节(数据帧)为单位。在主站和从站之间传递的每一个数据帧都是11位的串行数据流。 编码系统: 8–位二进制,报文中每个8 位字节含有两个4 位十六进制字符(0–9, A –F) 数 据 位: 1个 起始位 8个 数据位, 首先发送最低有效位 1个 奇偶校验(注:偶校验是要求的,其它模式( 奇校验,无校验 )也可以使用) 1个 停止位 (注 :使用无校验时要求2个停止位) 帧校验域:循环冗余校验(CRC) 3.2 字符的串行传送方式: 每个字符或字节按如下顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB) 通过配置,设备可以接受奇校验、偶校验或无校验。如果无奇偶校验,那么传送一个附加的停止位来填充数据帧使其成为完整的11位异步字符: 3.3 数据编码: Modbus 处理的所有数据按照存储数据的类型可以分为位寄存器(容量为1位)和16位寄存器(容量为16位)两种,它们的宽度都是16位(Data is packed as two bytes per register),协议允许单个选择65536个数据项,而且其读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。在Modbus PDU 中从0~65535寻址每个数据。 Modbus 使用一个‘big-Endian ’表示地址和数据项,即最高有效字节在低地址存储,最低有效字节在高字节存储。这意味着当发送多个字节时,首先发送最高有效位例如: 寄存器大小 值 16位 0x1234 发送的第一字节为0x12,然后发0x34。 4. RTU 报文帧结构 Modbus RTU 报文帧格式如下: 地址码 功能码 数据区 错误校验码 2 字节 1字节 1字节 0到252字节 CRC 低 CRC 高

Modbus协议讲解

Modbus协议讲解 一、基本术语 1、字word、字节byte、位bit 1 word = 2 byte; 1 byte = 8 bit. 2、校验码 校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代 码作为数据在向计算机或其它设备进行输入时,容易产生输入错误,为了减少 这种输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校 验码。 常用的校验有:累加和校验SUM、字节异或校验XOR、纵向冗余校验LRC、循环冗余校验CRC…… 3、协议和接口 协议是一种规范和约定,是一种通讯的语言,规定了通信双方能够识别并使用 的消息结构和数据格式。 接口是一种设备的物理连接,指的是在物理层上的定义,像 RS422/RS232/RS485/以太网口等。协议和接口并不是一个概念,不能混淆。 Modbus协议一般运行在RS485物理接口上,半双工的,是一种主从协议。 二、Modbus协议概述

Modbus协议是应用于电子控制器上的一种通用语言,实现控制器之间、控制器由网络和其它设备之间的通信,支持传统的RS232/RS422/RS485和最新发展的以太网设备。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中控制。此协议定义了一个控制器能认识使用的消息结构。 Modbus协议是一种请求——应答方式的协议。 三、两种传输方式 1、ASCII模式 ASCII:美国标准信息交换代码 特点: ②消息中每个8bit都作为两个ASCII字符发送 ②1个起始位、7个数据位、1个奇偶校验位和1个停止位(或者两个停止位) ③错误检测域是LRC检验 ④字符发送的时间间隔可达到1秒而不会产生错误 2、RTU模式 RTU:远程终端单元 特点: ①消息中每个8bit字节包含两个4bit的十六进制字符,因此,在波特率相 同的情况下,传输效率比ascii传输方式大 ②1个起始位、8个数据位、1个奇偶校验位和1个停止位(或者两个停 止位)

2019很好的威纶通MODBUS RTU通讯协议与变频器通讯案例

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或 “断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有3x_bit,4x_bit,6x_bit,0x_multi_coils 等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。 1x:是一个只读的设备类型,相当于读取PLC的输入点。读取位状态的时候发出的功能码为02H。 3x:是一个只读的设备类型,相当于读取PLC的模拟量。读数据的时候,发出的功能码是04H。 4x:是一个可读可写的设备类型,相当于操作PLC的数据寄存器。当读取数据的时候,发出的功能码是03H,当写数据的时候发出的功能码时10H,可写多个寄存器的数据。 6x:是一个可读可写的设备类型,读取数据的时候,发出的功能码也是03H,与4x不同之处在于写数据的时候发出的功能码时06H,即写单个寄存器的数据。 三、变频器参数设置: F0-02 命令源选择为:通讯命令通道(1正转运行、2反转运行、3正转点动、4反转点动、5自由停车、6减速停机); F0-03 主频率源选择为:通讯给定; F0-28 串口通讯协议选择:MODBUS 协议; Fd-00 通讯波特率:9600 BPS; Fd-01 MODBUS 数据格式:偶校检(8-E-1); Fd-02 本机地址:1 Fc-00—Fc-15 1到16段多段速运行速度

关于51单片机上实现modbus协议

你找一个MODBUS的协议详细资料好好看看,就是一种通讯约定,你按照它规定的格式通讯就可以了 协议发送给询问方。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP 模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP 和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。下表是ASCII协议和RTU协议进行的比较:协议开始标记结束标记校验传输效率程序处理 ASCII :(冒号)CR,LF LRC 低直观,简单,易调试 RTU 无无CRC 高不直观,稍复杂 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII 就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。 下面对两种协议的校验进行一下介绍。 1、LRC校验 LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。 LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它的VC代码: BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码 {

相关文档
最新文档