本文介紹卓嵐支持MQTT和JSON的設(shè)備的用法,支持的設(shè)備包括ZLAN5143、ZLAN8303-7、ZLAN1043、ZLAN7144等。其中ZLAN5143、ZLAN8303-7、ZLAN1043的固件版本要在1.577及以上,ZLAN7144需要在1.489及以上。需要和zlvircom的5.09版本配合使用。
MQTT和JSON可以單獨(dú)使用也可以合起來使用。其中的JSON支持Modbus RTU格式轉(zhuǎn)化為JSON格式。
主要特點(diǎn)是:
1.采用MQTT為基礎(chǔ)的協(xié)議和服務(wù)器建立連接,采用訂閱發(fā)布的形式進(jìn)行數(shù)據(jù)通訊。
2.支持Modbus RTU寄存器的自主設(shè)計(jì)和自動采集。
3.支持將特定的Modbus寄存器內(nèi)容轉(zhuǎn)化為JSON格式定時主動上發(fā)。
4.支持在JSON格式中加入設(shè)備ID,方便云端識別設(shè)備。
5.支持無符號數(shù)據(jù)和有符號數(shù)據(jù),支持小數(shù)點(diǎn)表示,支持4字節(jié)長度數(shù)據(jù)。
6.所有配置都可以界面化配置完成,用戶自主配置無需定制。
卓嵐Modbus RTU轉(zhuǎn)JSON可以實(shí)現(xiàn)Modbus RTU表的自動采集,并按照J(rèn)SON格式自動上發(fā)給云端服務(wù)器。
這里我們通過一個具體的案例來講解這個用法。
假設(shè)現(xiàn)在有一個功能碼為3,地址為1的Modbus表,其寄存器地址和參數(shù)名如下。其中字節(jié)長度為4的表示需要連續(xù)讀2個寄存器。
寄存器地址 | 參數(shù)名 | 字節(jié)長度 | 備注 |
0 | 當(dāng)前總有功電能 | 4 | 無符號,保留2位小數(shù) |
97 | A相電壓 | 2 | 無符號,保留1位小數(shù) |
98 | B相電壓 | 2 | |
99 | C相電壓 | 2 | |
100 | A相電流 | 2 | 無符號,保留2位小數(shù) |
101 | B相電流 | 2 | |
102 | C相電流 | 2 | |
119 | 頻率 | 2 | |
356 | A相有功功率 | 4 | 有符號,保留3位小數(shù) |
358 | B相有功功率 | 4 | |
360 | C相有功功率 | 4 | |
362 | 總有功功率 | 4 |
所謂有符號是指,2字節(jié)或者4字節(jié)最高bit為符號位,例如0xFFFF將被認(rèn)為是-1。保留2位小數(shù)是指將數(shù)據(jù)當(dāng)作整型轉(zhuǎn)化之后,小數(shù)點(diǎn)從最右邊向左移動2位。
我們按照設(shè)備作為客戶端的方式進(jìn)行配置。
使用SocketDlgTest,在本地計(jì)算機(jī)1883端口監(jiān)聽一個TCP服務(wù)器。
使用ZLVircom對設(shè)備進(jìn)行配置。
點(diǎn)擊修改配置,可以讓設(shè)備連接上SocketDlgTest工具。再次進(jìn)入設(shè)備編輯對話框。點(diǎn)擊“固件和配置”按鈕。
首先點(diǎn)擊“網(wǎng)頁目錄下載”進(jìn)入配置下載模式。然后選擇一個新的空目錄,比如MQTTHTTPD目錄。防止之前的設(shè)計(jì)有殘留,請先點(diǎn)擊“清除全部”按鈕,這樣可以清空之前的設(shè)計(jì)內(nèi)容。設(shè)計(jì)文件將會保存在這個目錄,等一下可以通過點(diǎn)擊“下載”按鈕下載到設(shè)備內(nèi)部。
點(diǎn)擊“JSON配置”按鈕。
這里的參數(shù)說明如下:
1.上發(fā)服務(wù)器時間:默認(rèn)JSON數(shù)據(jù)每隔多少時間上發(fā)到服務(wù)器,服務(wù)器就是剛剛在設(shè)備配置界面設(shè)置的目的IP,單位是毫秒。
2.是否上發(fā)設(shè)備ID:如果選擇1則會在每次上發(fā)的JSON數(shù)據(jù)中包含有設(shè)備的ID,設(shè)備ID就是在設(shè)備編輯界面左上角看到的設(shè)備的MAC地址。
3.ID的JSON關(guān)鍵詞是自己命名的ID對應(yīng)的的JSON關(guān)鍵詞,這里寫MyID,最長為32字節(jié)。這樣以后JSON格式中會增加”MyID”:”2850002F0EEC”的內(nèi)容。這類似于注冊包,有利于服務(wù)器識別是哪一臺設(shè)備發(fā)來的數(shù)據(jù)。
4.添加/查看:點(diǎn)擊后可以進(jìn)行Modbus寄存器的設(shè)計(jì),也可以查看目前已經(jīng)內(nèi)容。
5.刪除全部:刪除由“添加/查看”按鈕設(shè)計(jì)的所有的Modbus寄存器,方便重新開始設(shè)計(jì)。
6.保存JSON設(shè)置:設(shè)計(jì)完成后只有點(diǎn)擊這個按鈕才可以保存數(shù)據(jù)到剛才的下載目錄,之后可以下載到設(shè)備內(nèi)部。
現(xiàn)在點(diǎn)擊“添加/查看”按鈕。對于之前的Modbus表的第一行:
寄存器地址 | 參數(shù)名 | 字節(jié)長度 | 備注 |
0 | 當(dāng)前總有功電能 | 4 | 無符號,保留2位小數(shù) |
對應(yīng)的配置如下:
這里的參數(shù)說明如下:
1.第1個寄存器:這里的1,表示現(xiàn)在的設(shè)計(jì)界面是配置第一個寄存器。
2.已經(jīng)添加過:如果打勾說明是已經(jīng)添加的,查看已經(jīng)配置的信息的時候會出現(xiàn)打勾的情況。
3.從站地址:Modbus的表地址。
4.Modbus功能碼:目前支持03和04功能碼。
5.寄存器地址:這里對應(yīng)的0。
6.數(shù)據(jù)長度:這里對應(yīng)是4字節(jié)。
7.數(shù)據(jù)格式:這里對應(yīng)是無符號整型。
8.保留小數(shù)點(diǎn):這里保留2位。
9.串口輪詢時間:這里設(shè)為100ms。是指這個寄存器和下個寄存器的輪詢的間隔,而不是這條指令的輪詢間隔。
10.對應(yīng)的JSON關(guān)鍵詞:對應(yīng)上發(fā)的JSON中的keyword。例如”CurrentW”:232.12。
11.設(shè)計(jì)下一個:點(diǎn)擊后進(jìn)入下一個寄存器的設(shè)置。
12.保存設(shè)計(jì):完成設(shè)計(jì),之后點(diǎn)擊上一個界面的“保存JSON配置”即可。
13.取消設(shè)計(jì):取消當(dāng)前的所有設(shè)計(jì),如果是查看設(shè)計(jì)內(nèi)容,可以點(diǎn)擊這個按鈕退出。
這里點(diǎn)擊“設(shè)計(jì)下一個”按鈕繼續(xù)設(shè)計(jì)Modbus表中的其它寄存器。全部設(shè)計(jì)完表格中的寄存器后,點(diǎn)擊“完成設(shè)計(jì)”,然后點(diǎn)擊“保存JSON配置”后退出。然后點(diǎn)擊“下載web”頁面的“下載按鈕”
然后點(diǎn)擊“確定”,設(shè)備會自動重啟。如果沒有重啟請手動重啟。
這里使用Modbus Slave來模擬一個表
測試結(jié)果顯示,使用Modbus slave工具模擬的儀表能夠被網(wǎng)關(guān)所采集。同時可以定時,按照json格式上發(fā)到SocketDlgTest模擬的服務(wù)器軟件端。
MQTT可以單獨(dú)使用也可以和JSON功能配合使用。當(dāng)單獨(dú)使用的時候MQTT功能將串口數(shù)據(jù)透傳上發(fā)MQTT服務(wù)器。也就是將串口接收的數(shù)據(jù)作為MQTT的載荷。同時MQTT的載荷會以透傳的方式從串口輸出。實(shí)現(xiàn)串口轉(zhuǎn)MQTT。
點(diǎn)擊“固件與配置”,彈出配置下載和設(shè)計(jì)對話框:
這里選擇“網(wǎng)頁目錄下載”,然后選擇一個空的目錄,比如MQTTHTTPD目錄,然后先點(diǎn)擊“清除全部”清除之前的設(shè)計(jì)(注意如果之前按有JSON設(shè)計(jì)的,則不要清除全部,否則會清除之前的JSON設(shè)計(jì))。然后點(diǎn)擊MQTT配置。
這里配置說明如下:
1.服務(wù)器域名或IP:這里填寫的是MQTT服務(wù)器的IP,最長為30個字符。
2.用戶名:是MQTT服務(wù)器的用戶名。
3.密碼:是這個用戶的登錄密碼。
4.客戶端ID:是MQTT的client ID。
5.訂閱主題:是這個設(shè)備訂閱的主題,有其它設(shè)備發(fā)布這個主題的時候,服務(wù)器會下發(fā)給這個設(shè)備。如果只是發(fā)布,一般無需填寫這個字段。
6.發(fā)布主題:這個設(shè)備串口轉(zhuǎn)MQTT的時候向服務(wù)器發(fā)送的數(shù)據(jù)的主題。
7.MQTT高級參數(shù):用于配置高級參數(shù)。
8.保存MQTT設(shè)置:設(shè)計(jì)完畢點(diǎn)擊這個按鈕進(jìn)行保存,然后點(diǎn)擊網(wǎng)頁下載目錄的“下載按鈕”下載。
現(xiàn)在先點(diǎn)擊“MQTT高級參數(shù)”(一般無需配置高級參數(shù)):
說明如下:
1.協(xié)議版本:目前主流的是3.1.1版本,如果需要選擇3.1版本,請?jiān)谶@里選擇。
2.?;顣r間:MQTT的心跳時間,最少為10秒,默認(rèn)為60秒。
3.服務(wù)器清除訂閱:客戶端斷線后服務(wù)器是否清除訂閱信息。
4.是否啟用遺愿:是否有遺愿。
5.遺愿主題:遺愿主題。
6.遺愿信息:遺愿的信息。
7.是否保存遺愿:服務(wù)器是否需要保持客戶端異常離線時發(fā)送給客戶端的遺愿消息。
8.遺愿質(zhì)量:服務(wù)器發(fā)送的遺愿消息的交付質(zhì)量級別。
9.訂閱質(zhì)量:訂閱的交付質(zhì)量級別。
10.發(fā)布質(zhì)量:客戶端發(fā)布消息的交付質(zhì)量級別。
11.是否保存發(fā)布:服務(wù)器是否保持最后一條消息(如果有新的客戶端訂閱則發(fā)送給客戶端)。
我們這里不修改高級參數(shù)。直接點(diǎn)擊“保存MQTT設(shè)置”。然后點(diǎn)擊“下載”
下載完畢點(diǎn)擊確定,此時會回到設(shè)備管理對話框,看到設(shè)備的目的IP、工作模式、目的端口已經(jīng)自動修改為MQTT的設(shè)置:
如果沒有自動修改則需要在設(shè)備編輯對話框下,設(shè)置目的IP、工作模式、目的端口。然后點(diǎn)擊“修改設(shè)置”。
這樣配置就完成了。
連接完成后設(shè)備的LINK燈(一般為中間的藍(lán)色燈)變亮。說明設(shè)備正常連接上MQTT服務(wù)器。
現(xiàn)在打開串口工具:
使用和設(shè)備一樣的波特率打開串口,并發(fā)送數(shù)據(jù)“dev send”,此后在接收窗口看到返回的數(shù)據(jù)“dev send”。這是由于我們將dev send這個信息以zlansub的主題發(fā)布給MQTT服務(wù)器。但是同時我們的設(shè)備也訂閱了zlansub這個主題,所以服務(wù)器立刻會給我們發(fā)送一個訂閱信息,訂閱信息的內(nèi)容就是dev send。這個信息作為MQTT的載荷發(fā)送下載,通過透傳的方式從串口輸出。
如果其它設(shè)備發(fā)布信息過來,這個設(shè)備也能夠收到數(shù)據(jù)。
一般來說,用戶可以直接將串口指令(比如Modbus RTU)指令直接透傳給MQTT服務(wù)器。另外也可以使用JSON功能,采用自動Modbus RTU格式采集,定時JSON格式上發(fā)的形式。另外也可以找上海卓嵐定制一些非標(biāo)的儀表和上位機(jī)協(xié)議格式。
將上述的JSON和MQTT相組合可以實(shí)現(xiàn)如下的功能:
1.采用MQTT為基礎(chǔ)的協(xié)議和服務(wù)器建立連接,采用訂閱發(fā)布的形式進(jìn)行數(shù)據(jù)通訊。
2.支持Modbus RTU寄存器的自主設(shè)計(jì)和自動采集。
3.支持將特定的Modbus寄存器內(nèi)容轉(zhuǎn)化為JSON格式定時主動上發(fā)。
4.支持在JSON格式中加入設(shè)備ID,方便云端識別設(shè)備。
如果需要MQTT+JSON轉(zhuǎn)Modbus RTU功能的,可以分別設(shè)計(jì)MQTT和JSON,不分先后次序。設(shè)計(jì)完一種不要點(diǎn)擊“清除設(shè)計(jì)”按鈕,兩個設(shè)計(jì)完,一起點(diǎn)擊“下載”按鈕下載到設(shè)備內(nèi)容。
一般可以下載后手動重啟設(shè)備,加載設(shè)置。