1. 程式人生 > >MODBUS-RTU資料幀格式、報文例項

MODBUS-RTU資料幀格式、報文例項

MODBUS-RTU報文模型

裝置地址 功能程式碼 資料格式 CRC校驗L CRC校驗H
8bit 8bit N*8bit 8bit 8bit

 

一個報文就是一幀資料,一個數據幀就一個報文: 指的是一串完整的指令資料,就像上面的一串資料。

主機對從機寫資料操作

如果微控制器接收到一個報文那麼就對報文進行解析執行相應的處理

0x01 06 00 01 00 17 98 04
從機地址 功能號 資料地址 資料 CRC校驗

 主機對從機讀資料操作

0x01 03 00 01 00 01 D5 CA
從機地址 功能號 資料地址 讀取資料個數 CRC校驗

 

微控制器接收到這串資料根據資料計算CRC校驗判斷資料是否正確,如果判斷資料無誤,則結果是:返回資訊給主機,返回的資訊也是有格式的:

從機對主機返回內容

0x01 03 02 00 17 F8 4A
從機地址 功能號 資料位元組個數 兩個位元組資料 CRC校驗

這樣MODBUS主機就完成了一次對從機資料的讀操作,實現了通訊。

MODBUS-RTU常用功能碼

資料型別

讀功能碼

寫功能碼

物件型別

離散量輸入

02

 

單個位

線圈狀態

01

05,15

單個位

輸入暫存器

04

 

16位字

保持暫存器

03

06,16

16位字

暫存器起始地址(起始資料地址)

資料型別

引數地址,暫存器編號

離散量輸入

00001~0FFFF

線圈狀態

10001~1FFFF

輸入暫存器

30001~3FFFF

保持暫存器

40001~4FFFF

舉例: 
Modbus協議中暫存器地址從1開始,而實際儲存中地址從0開始。假如要讀取暫存器編號為40005(4為塊編號,5為modbus中暫存器地址)的暫存器的資料,則應把00 
04放入報文的地址域。暫存器定義,又名碼錶或者資訊點表,應由廠家提供的。

暫存器編號

屬性

定義

係數

備註

40001

RO

A相電壓

 

從40048中讀取電壓係數

40002

RO

B相電壓

 

 

如要讀A相電壓,則應將0x00 0x00放入暫存器起始地址域中。

報文例項

1、讀40005、40006兩個暫存器,假設從機地址為1

下行報文:01 03 00 04 00 02 85 ca

從機地址

功能碼

暫存器起始地址

讀取暫存器個數

CRC校驗

01

03

00 04

00 02

85 ca

上行報文:01 03 04 00 00 00 00 21 33

從機地址

功能碼

返回位元組個數

暫存器40005資料

暫存器40006資料

CRC校驗

01

03

04

00 00

00 00

21 33

2、向40005暫存器中寫入0x12,0x34,假設從機地址為1

下行報文:01 06 00 04 00 01 12 34 4a b0

從機地址

功能碼

暫存器起始地址

讀取暫存器個數

要寫入的資料

CRC校驗

01

03

00 04

00 01

12 34

85 ca

上行報文:01 06 00 04 00 01 12 34 4a b0

從機地址

功能碼

暫存器起始地址

讀取暫存器個數

寫入的資料

CRC校驗

01

03

00 04

00 01

12 34

85 ca

轉載自:https://blog.csdn.net/ouyangxin95/article/details/78169380