概念介紹
- Modbus協議:一種串行通信協議,是Modicon公司(現在的施耐德電氣Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標準(De facto),并且現在是工業電子設備之間常用的連接方式。
- 通信具象化解釋:類似人的交流過程,需要有通信角色(主從,客戶端服務器…),通信介質(串口,以太網,無線…),通信協議(modbus,S7,MC…)三個要素。
- 網絡協議三要素:語法(數據與控制信息的結構或格式),語義(發出何種控制信息),同步(事件實現順序,匹配速度等的詳細說明)。
modbusRTU協議介紹
語法結構:
- 地址碼:用于標識從站設備,范圍是0到247,其中0為廣播地址,所有從站設備都會接收該地址的數據。
- 功能碼:用于指示要執行的操作類型,例如讀取寄存器值、寫入單個寄存器等。
- 數據:包括寄存器地址、數據值等信息,根據功能碼的不同,數據的內容和長度也會不同。
- CRC校驗碼:用于檢測數據在傳輸過程中是否出現錯誤。在數據幀的最后添加兩個字節CRC校驗碼,接收方收到數據后,重新計算CRC校驗碼,并與接收到的CRC校驗碼進行比較,如果不同,則說明數據在傳輸過程中出現了錯誤。
功能碼:
- 功能碼01:讀取線圈狀態(Read Coils),用于從遠程設備中連續讀取1到2000個線圈的狀態。
- 功能碼02:讀取輸入狀態(Read Inputs),取得一組開關輸入的當前狀態ON/OFF。
- 功能碼03:讀取保持寄存器(Read Holding Registers),在一個或多個保持寄存器中取得當前的二進制值。
- 功能碼04:讀取輸入寄存器(Read Input Registers),在一個或多個輸入寄存器中取得當前的二進制值。
- 功能碼05:強置單線圈(Force Single Coil),強置一個邏輯線圈的通斷狀態。
- 功能碼06:預置單寄存器(Preset Single Register),把具體二進值裝入一個保持寄存器。
- 功能碼15:強置多線圈(Force Multiple Coils),強置一串連續邏輯線圈的通斷。
- 功能碼16:預置多寄存器(Preset Multiple Registers),把具體的二進制值裝入一串連續的保持寄存器。
例:
讀取(03)從站(01)中的窗簾打開程度(從第二個開始讀:00 02 讀一位 00 01 CRC校驗 25 CA):