串口初始化是Modbus RTU通信穩定可靠的關鍵起點。本篇深入剖析Air8000開發板串口參數配置、初始化代碼實現及調試要點,結合master_rtu示例,分享實際操作中的經驗與避坑指南,讓您的RTU通信搭建牢固無憂。
一、MODBUS 概述
Modbus 是一種廣泛應用于工業自動化領域的串行通信協議,由 Modicon 公司(現為施耐德電氣旗下)于 1979 年推出,主要用于可編程邏輯控制器(PLC)與工業設備之間的通信。其設計簡單、開放、易于實現,成為工業通信的事實標準。
1.1核心特點
主從架構:由主設備(Master)發起請求,從設備(Slave)響應,支持單主或多從模式。
典型應用:一臺工控機(主)與多個傳感器/執行器(從)通信。
1.2 常用協議變體
Modbus RTU:基于二進制編碼,通過串行接口(RS-232/RS-485)傳輸,緊湊高效。
Modbus ASCII:使用 ASCII 字符編碼,可讀性強但效率低。
Modbus TCP/IP:基于以太網,適用于現代工業網絡。
協議類型對比:

1.3 數據模型
1.3.1 Modbus 定義四種數據類型,每種通過不同功能碼訪問:
線圈(Coils):可讀可寫的布爾量(功能碼 01 讀,05 寫單個,15 寫多個)。
離散輸入(Discrete Inputs):只讀布爾量(功能碼 02 讀)。
保持寄存器(Holding Registers):可讀可寫的 16 位整數(功能碼 03 讀,06 寫單個,16 寫多個)。
輸入寄存器(Input Registers):只讀的 16 位整數(功能碼 04 讀)。
1.3.2 簡單報文結構
請求幀:功能碼 + 數據地址 + 數據長度 + CRC 校驗(RTU)或 TCP 頭(Modbus TCP)。
響應幀:功能碼 + 返回數據 + 校驗。
1.4 優缺點
1.4.1 優點:
開放免費,兼容性強。
在多種電氣接口(RS232、RS485)及多種通信介質(以太網,串行電路,藍牙,wifi 等)中運行 。
報文幀簡單緊湊。
1.4.2 缺點:
無內置安全機制(需依賴網絡隔離或加密層)。
僅支持基礎數據類型(需擴展協議處理浮點數等)。
二、演示功能概述
本篇文章演示的內容為:通過 RTU、ASCII 和 TCP 三種常用協議,Air8000 開發板作為主站(客戶端)與從站連接通訊的過程,或開發板作為從站(服務器)與主站連接通訊的過程。
三、準備硬件環境
3.1 硬件準備
參考:硬件環境清單第二章節內容,準備以及組裝好硬件環境。(硬件環境清單:https://docs.openluat.com/air8000/luatos/common/hwenv/)
485/232 轉 USB:

網線:

3.2 開發板組合演示
3.2.1 RTU 協議和 ASCII 協議測試連接

3.2.2 TCP 協議測試連接

四、準備軟件環境
在開始實踐本示例之前,先籌備一下軟件環境:
1. Luatools 工具;
2.LuatOS-SoC_V2014_Air8000_2;此頁面有新版本固件的話選用最新版本固件。
3.LuatOS 需要的腳本和資源文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/modbus
4.lib 腳本文件:使用 Luatools 燒錄時,勾選 添加默認 lib 選項,使用默認 lib 腳本文件;
準備好軟件環境之后,接下來查看(如何燒錄項目文件到 Air8000 開發板中:https://docs.openluat.com/air8000/luatos/common/download/),將本篇文章中演示使用的項目文件燒錄到 Air8000 開發板中。
5.上位機下位機模擬軟件:https://gulink.cn/
5.1 API 接口介紹
https://docs.openluat.com/osapi/core/modbus/
5.2 代碼解析
5.2.1 RTU
5.2.1.1 MASTER_RTU
1.初始化通訊串口

2.Modbus 主站創建

3.添加從站

4.創建數據區和通信消息

5.啟動 Modbus 設備

6.定時狀態檢查

7.數據讀取并轉化為 json

5.2.1.2 SLAVE_RTU
1.初始化設置

2.Modbus 從站創建:創建了一個 RTU 模式的 Modbus 從站,添加了兩個數據塊:保持寄存器區和線圈區

3.啟動 modbus 從站

4.數據更新

5.2.1 ASCII
5.2.2.1 MASTER_ASCII
1.初始化通訊串口

2.Modbus 主站創建

3.添加從站

4.創建數據區和通信消息

5.啟動 Modbus 設備

6.定時狀態檢查

7.數據讀取并轉化為 json

5.2.2.2 SLAVE_ASCII
1.初始化設置

2.Modbus 從站創建:創建了一個 RTU 模式的 Modbus 從站,添加了兩個數據塊:保持寄存器區和線圈區

3.啟動 modbus 從站

4.數據更新

5.2.3 TCP
5.2.3.1 MASTER_TCP
1.初始化

2.SPI 和以太網驅動初始化

3.創建主站

4.添加從站

5.創建數據請求消息

6.啟動 Modbus 主站

7.從站狀態監控

8.數據處理

5.2.3.2 SLAVE_TCP
1.網絡硬件初始化

2.SPI 和網絡驅動初始化

3.等待網絡連接

4.IP 地址配置

5.DHCP 和 DNS 服務

6.系統監控任務

7.創建 Modbus TCP 從站

8.創建數據存儲區

9.啟動 Modbus 從站

10.定時數據更新

六、運行結果展示
6.1 RTU 協議運行結果
6.1.1 modbus.master_rtu
6.1.1.1 完整代碼展示

6.1.1.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后可以看到 4 個 com 口,選擇 485 通道的 com 口進行配置。

由設備管理器可知 485 通道是 com20

5.點入配置,按照代碼中 uart.setup 設置參數后,點擊確定即可,設置完畢后在通道管理界面配置的通道顯示屬于正常狀態,用戶如果接的是自己的下位機,請將 uart.setup 傳入的參數成自己下位機的配置參數。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置過的 485 通道 COM20,設備類型是模擬從機,地址是添加從站的 id。

8.增加數據配置,數據條目是寄存器的數量。

點擊確定后可以看到增加了 4 個條目,雙擊數值一欄,然后再雙擊固定值一欄即可按需選擇模擬數據的方法。


9.數據配置完成后,在主界面可以看到數值按照設置的通訊時間間隔開始變換,在日志中也可以看到收到的數據,modbus 連接和通訊成功。

6.1.2 modbus.slave_rtu
6.1.2.1 完整代碼展示

6.1.2.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后可以看到 4 個 com 口,選擇 485 通道的 com 口進行配置。

由設備管理器可知 485 通道是 com20

5.點入配置,按照代碼中 uart.setup 設置參數后,選擇 RTU 傳輸協議,點擊確定即可,設置完畢后在通道管理界面配置的通道顯示屬于正常狀態。用戶如果接的是自己的下位機,請將 uart.setup 傳入的參數成自己下位機的配置參數。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置過的 485 通道 COM20,設備類型是模擬主站,地址是創建從站的 id。

8.增加數據配置,根據需要選擇讀取的寄存器與線圈數據。


9.添加成功后,雙擊數值欄就可以獲取目前從站的數據了,開發板做從站和主站連接通訊成功。

6.2 ASCII 協議運行結果
6.2.1 modbus.master_ascii
6.2.1.1 完整代碼展示

6.2.1.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后可以看到 4 個 com 口,選擇 485 通道的 com 口進行配置。

由設備管理器可知 485 通道是 com20

5.點入配置,按照代碼中 uart.setup 設置參數后,選擇 ASCII 傳輸協議,點擊確定即可,設置完畢后在通道管理界面配置的通道顯示屬于正常狀態。用戶如果接的是自己的下位機,請將 uart.setup 傳入的參數成自己下位機的配置參數。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置過的 485 通道 COM20,設備類型是模擬從機,地址是添加從站的 id。

8.增加數據配置,數據條目是寄存器的數量。

點擊確定后可以看到增加了 4 個條目,雙擊數值一欄,然后再雙擊固定值一欄即可按需選擇模擬數據的方法。


9.數據配置完成后,在主界面可以看到數值按照設置的通訊時間間隔開始變換,在日志中也可以看到收到的數據,modbus 連接和通訊成功。


6.2.2 modbus.slave_ascii
6.2.2.1 完整代碼展示

6.2.2.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后可以看到 4 個 com 口,選擇 485 通道的 com 口進行配置。

由設備管理器可知 485 通道是 com20

5.點入配置,按照代碼中 uart.setup 設置參數后,選擇 ASCII 傳輸協議,點擊確定即可,設置完畢后在通道管理界面配置的通道顯示屬于正常狀態。用戶如果接的是自己的下位機,請將 uart.setup 傳入的參數成自己下位機的配置參數。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置過的 485 通道 COM20,設備類型是模擬主站,地址是創建從站的 id。

8.增加數據配置,根據需要選擇讀取的寄存器與線圈數據。


9.添加成功后,雙擊數值欄就可以獲取目前從站的數據了,開發板做從站和主站連接通訊成功。

6.3 TCP 協議運行結果
6.3.1 modbus.master_tcp
6.3.1.1 完整代碼展示
mian.lua

lan.lua

6.3.1.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后選擇網絡通道,然后進行網絡參數配置。

5.連接模式選擇 tcp 服務器,本地 ip 在把腳本燒錄后可以看到開發板分配的 ip,端口號設置為代碼中 mb_slave1 = modbus.add_slave(mb_tcp, 1, "192.168.4.100", 6000)創建從站的端口號。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置的 NET001 網絡通道,設備類型是模擬從機,地址是創建從站的 id。

8.增加數據配置,根據需要選擇寄存器或線圈數據。

9.點擊確定后可以看到增加了 4 個條目,雙擊數值一欄,然后再雙擊固定值一欄即可按需選擇模擬數據的方法。


10.設置完成后則可以看到模擬從機數據開始變化,日志上顯示開發板獲取數據,主站與從站連接通訊成功。

6.3.2 modbus.slave_tcp
6.3.2.1 完整代碼展示
main.lua

lan.lua

6.3.2.2 效果展示
1.打開 MThings(第四章中 第五項提到的上位機下位機軟件 摩爾信使),界面如下。

2.點擊右上角進入通道管理。

3.點擊通道管理。

4.進入后選擇網絡通道,然后進行網絡參數配置。

5.連接模式選擇 tcp 客戶端,本地 ip 在把腳本燒錄后可以看到開發板分配的 ip,目標 ip 是開發板的 IP,為 192.168.4.1,目標端口號為腳本中 mb_tcp_s = modbus.create_slave(modbus.MODBUS_TCP, slave_id, 6000, socket.LWIP_ETH)設置的。

6.返回初始界面,點擊添加設備。

7.通道選擇剛剛配置的 NET001 網絡通道,設備類型是模擬主站,地址是創建從站的 id。

8.增加數據配置,根據需要選擇寄存器或線圈數據。


9.點擊數值欄獲取到從站寄存器和線圈的數據,主站與從站連接與通訊成功。

七、總結
本教程演示了 Air8000 modbus 在 RTU、ASCII 和 TCP 三種協議下的使用過程,請根據具體場景選擇您需要的 demo 即可。
八、常見問題
1.刪除從站地址和句柄位刪除失敗
刪除失敗可能是主站為關閉,刪除從站需要在主站關閉后,刪除后可再次打開主站觀察從站是否刪除成功。
2.開發板用 TCP 協議,如何修改開發板與 PC 端的連接方式
在 lan.lua 中修改socket API。
今天的內容就分享到這里了!
審核編輯 黃宇
-
MODBUS
+關注
關注
28文章
2457瀏覽量
83189 -
串口通信
+關注
關注
34文章
1662瀏覽量
57962
發布評論請先 登錄
雙 Air8000 核心板實現 BLE 中心模式的開發實踐 !
基于Modbus RTU的串口調試軟件的實現
如何讓串口和Modbus初始化的參數同步起來呢
STM32F103、FreeModbus從站設計(6)-讓串口和Modbus初始化的參數同步起來
STM32F407VET6 的所有串口初始化 并進行回環測試
初始化串口后,電流小了很多是什么原因
基于Modbus rtu串口通信的上位機開發案例
Air8000 Wi-Fi功能實操指南:固件升級與網絡配置步驟!
開源即自由,Air8000—— Modbus功能全面開放源代碼!
BLE 5.4時代下,Air8000藍牙通知與手機讀寫操作實戰攻略
快速上手Air8000 AP模式:Wi-Fi熱點創建與設備管理
揭秘Air8000對講黑科技:AirTalk+MQTT開發示例深度解析
從站模擬秘籍:Air8000實現Modbus服務器的深度教程
串口通信基石:Air8000下Modbus RTU串口初始化詳解!
評論