安徽藍普特種電纜集團有限公司 【聯系電話:13965984935 0550-7531654 郭中清】
MODBUS 是MODICON公司先倡導的一種軟的通訊規約,經過大多數公司
的實際應用,逐漸被認可,成爲一種標準的通訊規約,只要按照這種規約進行
數據通訊或傳輸,不同的系統就可以通訊。目前,在RS232/RS485通訊過程中,
更是廣泛採用這種規約。
常用的MODBUS 通訊規約有兩種,一種是MODBUS ASCII,一種是MODBUS RTU。
一般來說,通訊數據量少而且主要是文本的通訊則採用MODBUS ASCII規約,通訊數據數據量大而且是二進制數值時,多採用MODBUS RTU規約。
在實際的應用過程中,爲了解決某一個特殊問題,人們喜歡自己修改MODBUS規約來滿足自己的需要(事實上,人們經常使用自己定義的規約來通訊,這樣能解決問題,但不太規範)。更爲普通的用法是,少量修改規約,但將規約格式附在軟件說明書一起,或直接放在幫助中,這樣就方便了用戶的通訊。
MODBUS-RTU通訊協議簡介在本章主要講述如何利用軟件通過通訊口來操控該系列儀表。本章內容的掌握需要您具有MODBUS協議的知識儲備並且通讀了本冊其它章節所有內容,對本產品功能和應用概念有較全面了解。本章內容包括:MODBUS協議簡述,通訊應用格式詳解,本機的應用細節及參量地址表。 1.1 MODBUS協議簡述ACRXXXE系列儀表使 用的是MODBUS-RTU通訊協議,MODBUS協議詳細定義了校驗碼、數據序列等,這些都是特定數據交換的必要內容。MODBUS協議在一根通訊線上 使用主從應答式連接(半雙工),這意味着在一根單獨的通訊線上信號沿着相反的兩個方向傳輸。首先,主計算機的信號尋址到一臺的終端設備(從機),然 後,終端設備發出的應答信號以相反的方向傳輸給主機。MODBUS協議只允許在主機(PC,PLC等)和終端設備之間通訊,而不允許獨立的終端設備之間的數據交換,這樣各終端設備不會在它們初始化時佔據通訊線路,而僅限於響應到達本機的查詢信號。 1.2 查詢—回應周期 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位二進制碼)組成,十進制爲0~255,在我們的系統中只使用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進制)。安徽藍普特種電纜集團有限公司【聯系電話:13965984935 0550-7531654 郭中清】
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個字節)UA、UB、UC,其中UA的地址爲0025H, UB的地址爲0026H, UC的地址爲0027H。安徽藍普特種電纜集團有限公司【聯系電話:13965984935 0550-7531654 郭中清】
Addr | Fun | Data startAddr hi | DatastartAddr lo | Data#ofregs hi | Data #ofregs lo | CRC16 lo | CRC16 hi |
01H | 03H | 00H | 25H | 00H | 03H | 14H | 00H |
l 響應數據幀響應包含從機地址、功能碼、數據的數量和CRC錯誤校驗。下面的例子是讀取UA、UB、UC (UA=082CH,UB=082AH,UC=082CH的響應。安徽藍普特種電纜集團有限公司 【聯系電話:13965984935 0550-7531654 郭中清】
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字節)數據。 下面的例子是預置ACR220EK、ACR320EFK及ACR420EK地址都爲1時同時輸出開關量Do1和Do2。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 |