MODBUS-RTU通訊協議簡介

轉自http://apps.hi.baidu.com/share/detail/2445322 謝謝

MODBUS-RTU通訊協議簡介

MODBUS-RTU通訊協議簡介

歡迎看看我的另一個小窩,說不定有意外的驚喜哦 ^_^ www.devres.info

MODBUS-RTU通訊協議簡介
在本章主要講述如何利用軟件通過通訊口來操控該系列儀表。本章內容的掌握需要您具有MODBUS協議的知識儲備並且通讀了本冊其它章節所有內容,對本產品功能和應用概念有較全面瞭解。
本章內容包括:MODBUS協議簡述,通訊應用格式詳解,本機的應用細節及參量地址表。
1.1          MODBUS
協議簡述
ACRXXXE
系列儀表使用的是MODBUS-RTU通訊協議,MODBUS協議詳細定義了校驗碼、數據序列等,這些都是特定數據交換的必要內容。MODBUS協議在一根通訊線上使用主從應答式連接(半雙工),這意味着在一根單獨的通訊線上信號沿着相反的兩個方向傳輸。首先,主計算機的信號尋址到一臺唯一的終端設備(從機),然後,終端設備發出的應答信號以相反的方向傳輸給主機。
MODBUS
協議只允許在主機(PCPLC等)和終端設備之間通訊,而不允許獨立的終端設備之間的數據交換,這樣各終端設備不會在它們初始化時佔據通訊線路,而僅限於響應到達本機的查詢信號。
1.2.1          
查詢
查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器並返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域爲從設備提供了一種驗證消息內容是否正確的方法。
1.2.2          
迴應
如果從設備產生一正常的迴應,在迴應消息中的功能代碼是在查詢消息中的功能代碼的迴應。數據段包括了從設備收集的數據:如寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用於指出迴應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。
1.3         
傳輸方式
傳輸方式是指一個數據幀內一系列獨立的數據結構以及用於傳輸數據的有限規則,下面定義了與MODBUS 協議– RTU方式相兼容的傳輸方式。
每個字節的位:
•   1
個起始位
•   8
個數據位,最小的有效位先發送

•  
無奇偶校驗位

•   1
個停止位
錯誤檢測(Error checking)CRC(循環冗餘校驗)
1.4         
協議
當數據幀到達終端設備時,它通過一個簡單的端口進入被尋址到的設備,該設備去掉數據幀的信封(數據頭),讀取數據,如果沒有錯誤,就執行數據所請求的任務,然後,它將自己生成的數據加入到取得的信封中,把數據幀返回給發送者。返回的響應數據中包含了以下內容:終端從機地址(Address)、被執行了的命令(Function)、執行命令生成的被請求數據(Data)和一個校驗碼(Check)。發生任何錯誤都不會有成功的響應,或者返回一個錯誤指示幀。
1.4.1          
數據幀格式
Address Function Data Check
8-Bits 8-Bits N x 8-Bits 16-Bits
1.4.2          
地址(Address)域

地址域在幀的開始部分,由一個字節(8位二進制碼)組成,十進制爲0255,在我們的系統中只使用1~247,其它地址保留。這些位標明瞭用戶指定的終端設備的地址,該設備將接收來自與之相連的主機數據。每個終端設備的地址必須是唯一的,僅僅被尋址到的終端會響應包含了該地址的查詢。當終端發送回一個響應,響應中的從機地址數據便告訴了主機哪臺終端正與之進行通信。
1.4.3          
功能(Function)域
功能域代碼告訴了被尋址到的終端執行何種功能。下表列出了該系列儀表用到的功能碼,以及它們的意義和功能。
代碼 意義 行爲
03
讀數據寄存器 獲得一個或多個寄存器的當前二進制值
16
預置多寄存器 設定二進制值到一系列多寄存器中(不對ACRXXXE開放)

1.4.4           數據(Data)
數據域包含了終端執行特定功能所需要的數據或者終端響應查詢時採集到的數據。這些數據的內容可能是數值、參考地址或者設置值。例如:功能域碼告訴終端讀取一個寄存器,數據域則需要指明從哪個寄存器開始及讀取多少個數據,內嵌的地址和數據依照類型和從機之間的不同內容而有所不同。
1.4.5          
錯誤校驗(Check)
該域允許主機和終端檢查傳輸過程中的錯誤。有時,由於電噪聲和其它干擾,一組數據在從一個設備傳輸到另一個設備時在線路上可能會發生一些改變,出錯校驗能夠保證主機或者終端不去響應那些傳輸過程中發生了改變的數據,這就提高了系統的安全性和效率,錯誤校驗使用了16位循環冗餘的方法(CRC16)。
1.5         
錯誤檢測的方法
錯誤校驗(CRC)域佔用兩個字節,包含了一個16位的二進制值。CRC值由傳輸設備計算出來,然後附加到數據幀上,接收設備在接收數據時重新計算CRC值,然後與接收到的CRC域中的值進行比較,如果這兩個值不相等,就發生了錯誤。
CRC
運算時,首先將一個16位的寄存器預置爲全1,然後連續把數據幀中的每個字節中的8位與該寄存器的當前值進行運算,僅僅每個字節的8個數據位參與生成CRC,起始位和終止位以及可能使用的奇偶位都不影響CRC。在生成CRC時,每個字節的8位與寄存器中的內容進行異或,然後將結果向低位移位,高位則用“0”補充,最低位(LSB)移出並檢測,如果是1,該寄存器就與一個預設的固定值(0A001H)進行一次異或運算,如果最低位爲0,不作任何處理。
上述處理重複進行,直到執行完了8次移位操作,當最後一位(第8位)移完以後,下一個8位字節與寄存器的當前值進行異或運算,同樣進行上述的另一個8次移位異或操作,當數據幀中的所有字節都作了處理,生成的最終值就是CRC值。
生成一個CRC的流程爲:
1           
預置一個16位寄存器爲0FFFFH(全1),稱之爲CRC寄存器。
2           
把數據幀中的第一個字節的8位與CRC寄存器中的低字節進行異或運算,結果存回CRC寄存器。
3           
CRC寄存器向右移一位,最高位填以0,最低位移出並檢測。
4           
如果最低位爲0:重複第三步(下一次移位);如果最低位爲1:將CRC寄存器與一個預設的固定值(0A001H)進行異或運算。
5           
重複第三步和第四步直到8次移位。這樣處理完了一個完整的八位。
6           
重複第2步到第5步來處理下一個八位,直到所有的字節處理結束。
7      
最終CRC寄存器的值就是CRC的值。
此外還有一種利用預設的表格計算CRC的方法,它的主要特點是計算速度快,但是表格需要較大的存儲空間,該方法此處不再贅述,請參閱相關資料。
1.6         
通訊應用格式祥解
本節所舉實例將儘可能的使用如圖所示的格式,(數字爲16進制)。
Addr Fun Data start reg hi Data start reg lo Data #of regs hi Data #of regs lo CRC16 lo CRC16hi
01H 03H 00H 00H 00H 03H 05H CBH
Addr
:從機地址
Fun
:功能碼
Data start reg hi
:數據起始地址 寄存器高字節
Data start reg lo
:數據起始地址 寄存器低字節
Data #of reg hi
:數據讀取個數 寄存器高字節
Data #of reg lo
:數據讀取個數 寄存器低字節
CRC16 Hi:
循環冗餘校驗 高字節
CRC16 Lo:
循環冗餘校驗 低字節
1.6.1          
讀數據(功能碼03
l        
查詢數據幀
此功能允許用戶獲得設備採集與記錄的數據及系統參數。主機一次請求的數據個數沒有限制,但不能超出定義的地址範圍。
下面的例子是從01號從機讀3個採集到的基本數據(數據幀中每個地址佔用2個字節)UAUBUC,其中UA的地址爲0025H, UB的地址爲0026H, UC的地址爲0027H
Addr Fun Data start
Addr hi Datastart
Addr lo Data#of
regs hi Data #of
regs lo CRC16 lo CRC16 hi
01H 03H 00H 25H 00H 03H 14H 00H
l        
響應數據幀
響應包含從機地址、功能碼、數據的數量和CRC錯誤校驗。
下面的例子是讀取UAUBUC (UA=082CHUB=082AHUC=082CH的響應。
Addr Fun Byte count Data1 hi Data1 lo Data2 hi Data2 lo Data3 hi Data3 lo CRC16 lo CRC16 hi
01H 03H 06H 08H 2CH 08H 2AH 08H 2CH 94H 4EH
l        
錯誤指示碼

如果主機請求的地址不存在則返回錯誤指示碼:FFH
1.6.2          
預置多寄存器(功能碼16,不對ACRXXXE開放)
l        
查詢數據幀
        
功能碼16允許用戶改變多個寄存器的內容,該儀表中系統參數、開關量輸出狀態等可用此功能號寫入。主機一次最多可以寫入16(32字節)數據。
下面的例子是預置ACR220EKACR320EFKACR420EK地址都爲1時同時輸出開關量Do1Do2
ACR220EK

Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Bytecount Value hi Value lo CRC lo CRC hi
01H 10H 00H 22H 00H 01H 02 H 30H 00H B4H D2H
ACR420EK

Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Bytecount Value hi Value lo CRC lo CRC hi
01H 10H 00H 22H 00H 01H 02 H C0H 00H F0H D2H
ACR320EFK

Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Value hi Value lo CRC lo CRC hi
01H 10H 00H 05H 00H 01H 00H C0H 0DH 96H

l        
響應數據幀
對於預置單寄存器請求的正常響應是在寄存器值改變以後迴應機器地址、功能號、數據起始地址、數據個數(ACR320EFK爲數據字節數)CRC校驗碼。如圖。
ACR220EK
ACR420EK
Addr Fun Data start reg hi Data start reg lo Data #of regs hi Data #of regs lo CRC16 lo CRC16 hi
01H 10H 00H 22H 00H 01H A1H C3H

ACR320EFK

Addr Fun Data start reg hi Data start reg lo Bytecount CRC16 lo CRC16 hi
01H 10H 00H 05H 02H 9FH 91H

l        
錯誤指示碼
如果主機請求的地址不存在或數據個數不正確則返回錯誤指示碼:FFH
1.7          ACRXXXE
的應用細節及參量地址表
該系列測量值用Modbus-RTU 通訊規約的03號命令讀出。
通訊值與實際值之間的對應關係如下表:(約定Val_t爲通訊讀出值,Val_s爲實際值)
適用參量 對應關係 單位
電壓值UAUBUC Val_s=(Val_t /10000*10^DPT (V)
電流值IAIB
IC sign
Val_s
=(Val_t /10000*10^DCT 安培(A

功率值PA PB PCP QA QBQCQ Val_s=(-1 Val_t /10000*10^DPQ 瓦(W)、
乏(Var
電度量一次側值EpI EpEEqLEqC Val_sVal_t*PT*CT 瓦時(wh
乏時(varh
功率因數值PFAPFBPFCPFS Val_sVal_t / 1000 無單位
頻率FR Val_sVal_t / 100 赫茲(Hz
範例:UA的通訊讀出值爲08C6H(2246)DPT5,則UA的實際值
Va =
2246/10000*10^5 = 22.46KV
                    IA
的通訊讀出值爲0FA0H(4000)DCT3,則IA的實際值
Ia =
4000/10000*10^3 = 400.0A
幾點說明:
1          
數據類型:“BYTE”1個字節;“word” 16位無符號整數;“Integer”16位有符號整數;“Dword” 32位無符號整數,“Fword”32位浮點數。
2          
讀寫屬性:“R”只讀,讀參量用03H號命令;“R/W”可讀可寫,寫系統參量用10H號命令。禁止向未列出的或不具可寫屬性的地址寫入。
3                   
波特率的設定範圍4800 bps,9600 bps,19200 bps,38400 bps.在此範圍外的設定是不允許的。如果寫入超範圍的設定值,儀表會啓用默認波特率:38400 bps
4           ACR320EFK
所測電能值均爲二次側電能。高字節在前,低字節在後,單位WH VARH 統計一次側電能數據的時候,請乘以相應的變比。例如10KV/100V75A/5A 的儀表,請在計量抄表的數據乘以PT=100CT=15 的乘積1500
5           ACR320EFK
提供4 路開關量輸入功能和2路繼電器開關量輸出功能。4 路開關輸入是採用溼接點電阻開關信號輸入方式,儀表內部配備+5V 的工作電源,無須外部供電。當外部接通的時候,經過儀表開關輸入模塊DI 採集其爲接通信息、顯示爲1;當外部斷開的時候,經過儀表開關輸入模塊DI 採集其爲斷開信息、顯示爲0。開關量輸入模塊不僅能夠採集和顯示本地的開關信息,同時可以通過儀表的數字接口RS485 實現遠程傳輸功能,即遙信功能;2路繼電器輸出功能可用於各種場所下的報警指示、保護控制等輸出功能。在開關輸出有效的時候,繼電器輸出導通,顯示爲1;開關輸出關閉的時候,顯示爲0,繼電器輸出關斷。

6           ACRXXXE(K)
電度一次側時的值採用浮點變量數據類型。它用符號位表示數的符號,用階碼和尾數表示數的大小。儀表採用的數據格式爲IEEE754數據格式具有24位精度,尾數的高位始終爲“1”,因而不保存,位的分佈如下
●        1
位符號位;
●        8
位指數位;
●        23
位尾數。
符號位是最高位,尾數爲最低的23位,按字節描述如下:
地址 +0 +1 +2 +3
內容
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
其中,     S:符號位,1表示負,0表示正;

E
:階碼(在兩個字節中)偏移爲127
M
23位尾數,最高位爲“1”
具體舉例如下:
讀出0 10001110 100 1011 1010 1100 0000 0000B
0            
代表符號位,“1”爲負,“0”爲正;

10001110
爲計算指數,設爲a, a10進制,a142
100 1011 1010 1100 0000 0000
爲計算尾數,設爲bb10進制,b4959232
計算公式:
                 
一次側電量=
上例計算結果爲:

==52140

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章