隨著物聯網的迅速發展,越來越多的工業自動化設備需要上報數據到云。本文將基于EsDA開發套件快速實現將Modbus RTU協議的數據轉換為MQTT格式,實現更靈活的數據傳輸和遠程控制。
?項目簡介
在物聯網領域中,Modbus RTU是一種串行通信協議通常用于工業自動化領域,MQTT則是基于發布/訂閱模式的消息傳遞的協議,并廣泛應用于物聯網設備間的通信。本文將介紹如何使用 EPC6450-AWI開發板 ,以及圖形化設計工具AWFlow Designer將Modbus RTU協議轉換為MQTT協議,實現物聯網設備的數據傳輸與遠程控制。
?項目概述
本項目主要將Modbus RTU數據轉換為MQTT消息,然后通過MQTT協議將Modbus采集到的數據以主題消息的形式發送到MQTT服務器(在PC本地自搭建的emqx代理服務器),最后在PC端的MQTTX客戶端上顯示(MQTTX訂閱相關主題的消息后,即可收到由MQTT服務器轉發的Modbus數據主題的消息)。具體可以分為以下幾個步驟:
- Modbus RTU數據采集:通過modbus_master_in節點去采集Modbus RTU從站設備的數據;
- 數據轉換:將采集到的Modbus RTU從站設備的數據,通過modbus_parse_in和fscript節點轉換為有效且能被mqtt_out節點接收的數據;
- MQTT發布:mqtt_out節點可發布Modbus主題消息到MQTT云端服務器;
- MQTT訂閱:由MQTTX客戶端工具訂閱Modbus相關主題,接收并顯示發布的Modbus主題消息。
?項目準備
客戶可閱讀以下相關文章,對Modbus協議和MQTT協議在EsDA上的使用操作上可以有更多的了解:
- ModbusRTUMaster轉TCPServer
- ModbusTCPMaster轉ZWS云
- IO設備接入MQTT
- EsDAMPC-ZC1應用——串口服務器(一)
1. 硬件準備
- 在標有絲印為TF Card 絲印的卡槽處,插入SD卡。
- 在標有絲印為UTX5和URX5的模塊上,將TTL轉USB串口模塊的TX與板子絲印為RXD連接,TTL轉USB串口模塊的RX與板子絲印為TXD相連;并將串口模塊的USB端口接入電腦。
- 在標有絲印為Type-C 的接口處,插上Type-C線,并將Type-C的USB端口插入電腦。
- 在標有絲印為NET0或 NET1的RJ45網絡插座處,插上網線水晶頭,另一端的網線水晶頭插在PC的網絡插座上。
2. 軟件準備
2.1 網絡搭建因為MQTT服務器是在PC端本地搭建的,所以與開發板通信的網口網絡和PC的以太網網絡在同一局域網下即可,不需要接入互聯網。出廠固件的NET0默認網口IP為:192.168.137.251,NET1默認網口IP為:192.168.137.252。所以配置PC上的以太網的IP與開發板的IP地址在同一局域網下如圖所示。
PC端的網口配置成功后,執行電腦ping開發板的操作。
在應用開發中,可以使用shell命令行,執行開發板ping電腦的操作。硬件連接上將絲印為DUART的調試串口上接TTL轉USB的串口設備,TTL轉USB設備另一端接PC電腦上(TX接RX,RX接TX);軟件上打開第三方串口助手工具,在設備管理器中查看調試串口的端口信息,在串口助手工具上配置相對應的端口號和波特率(115200)等串口參數,就可以在輸入窗口輸入相關的shell命令了,也可在輸出框查看打印信息。輸入ping + PC設備的IP地址(本機電腦的IP地址是192.168.137.223),在輸出框中可以看到開發板是可以ping通電腦的(若ping不通可以將電腦端的防火墻關閉了再試試)。至此開發板和電腦之間互ping結束,網絡搭建完成。
2.2 MQTT服務器搭建2.2.1 下載EMQX。進入EMQX官網下載EMQX(開源物聯網的MQTT消息服務器),選擇Windows系統下的服務器版壓縮包,點擊下載。2.2.2?對下載的壓縮包解壓后,cmd到bin目錄下執行 emqx start 指令啟動MQTT服務器。2.2.3?在瀏覽器上輸入 http://localhost:18083網址登錄MQTT服務器的網站,可以在此查看和配置MQTT服務器相關的參數,初始用戶名是admin,初始密碼是public。
2.3 MQTTX客戶端使用
用戶可以在【EsDA應用】IO設備接入MQTT 文章中的3.1.1 下載MQTTX章節查看相關內容,在此不再贅述。
2.4 ModbusSlave安裝并使用2.4.1 下載并安裝Modbus Slave(Modbus從機模擬工具,軟件可以免費試用30天)。
https://www.modbustools.com/modbus_slave.html
2.4.2配置ModbusSlave工具
打開剛才安裝的Modbus Slave軟件。點擊Connection–>Connection Setup,根據用戶實際使用情況配置Modbus串行通信的設備參數,隨后點擊OK即可保存設置。
點擊Setup->Slave Definition,根據用戶實際使用情況配置Modbus通信協議的從設備參數,點擊OK保存。配置Modbus從設備對應寄存器的值如下圖。
?項目實施本項目主要分為以下四個部分:
- Modbus RTU Master采集Modbus從站設備寄存器的值;
- 將Modbus數據轉換為MQTT協議消息內容的主體;
- 開發板上搭建的MQTT客戶端發送Modbus主題消息到MQTT服務器;
- MQTT服務器將消息轉發給訂閱Modbus主題的MQTT客戶端。
1. 流圖繪制
添加modbus_master_in,modbus_parse_in,fscript和mqtt_out節點到畫布中并連線如下圖。
2. 節點配置
雙擊modbus_master_in節點,配置需要讀取的Modbus從機ID和寄存器的參數,該節點的相關屬性需要與前面配置的Modbus Slave模擬從機工具的參數一致。點擊完成即可保存配置。
雙擊modbus_master_in節點的主機參數配置屬性旁邊的鉛筆圖標配置Modbus主機的參數配置,根據用戶實際需要選擇相關參數。本項目主要是使用rtu傳輸數據,EPC6450-AWI開發板用絲印為UTX/RX5的串口設備與從站進行Modbus通信。點擊更新即可保存配置。雙擊modbus_parse_in節點,根據用戶實際需要選擇進行數據轉換的方式,該節點接收modbus輸入形節點的原始數據,支持將不同數量的寄存器地址的值按序向其消費者節點進行輸出。點擊完成即可保存配置。
雙擊fscript節點,將讀到的Modbus從站寄存器的值轉換為mqtt_out節點可以接收的數據類型的值。點擊完成即可保存配置。
var a = "modbus data is "
for(var i=0; i1) { a = join(",",a,array_get(msg.payload, i))}
wb = wbuffer_create()wbuffer_write_string(wb,a)output.payload = wbuffer_get_data(wb)output.payloadLength = len(a)
雙擊mqtt_out節點,填寫需要發布的主題名。點擊完成即可保存配置。雙擊mqtt_out節點的配置屬性旁邊的鉛筆圖標,相關參數根據用戶實際使用情況填寫,需注意的是主機地址填寫與開發板網口進行MQTT通信的以太網IP地址,若使用emqx服務器則端口號通用為1883。點擊更新按鈕即可保存配置。
3. 下載驗證
下載AWFlow流圖到核心板中。
用戶在MQTTX上位機上創建一個隨機的MQTT客戶端如下所示,點擊連接按鈕。
打開EMQX服務器網址,可以看到所有客戶端的連接情況。由下圖可知EPC6450-AWI開發板上的MQTT客戶端和MQTTX上位機創建的MQTT客戶端都已連接到EMQX服務器上了。在MQTTX上創建的客戶端上訂閱開發板上發布的Modbus主題名,就可以收到來自MQTT服務器轉發的Modbus主題消息如下圖所示。至此,Modbus Master RTU轉MQTT協議的項目就已實現。
-
MODBUS
+關注
關注
28文章
1763瀏覽量
76843 -
ESDA
+關注
關注
0文章
28瀏覽量
7498 -
RTU
+關注
關注
0文章
404瀏覽量
28627 -
MQTT
+關注
關注
5文章
649瀏覽量
22435
發布評論請先 登錄
相關推薦
評論