在之前文章中小編已經(jīng)介紹了西門(mén)子PLC如何接入阿里云MQTT服務(wù)器,這里使用飛燕平臺(tái)方便通過(guò)低代碼的開(kāi)發(fā)方式實(shí)現(xiàn)手機(jī)控制界面與Web網(wǎng)頁(yè)控制界面接入,使用該功能需要先對(duì)MQTT數(shù)據(jù)收發(fā)機(jī)制具有初步的認(rèn)知。
在通訊過(guò)程中,MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶(hù)端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。
MQTT傳輸?shù)南⒎譃椋褐黝}(Topic)和負(fù)載(payload)兩部分:
(1)Topic,可以理解為消息的類(lèi)型,訂閱者訂閱(Subscribe)后,就會(huì)收到該主題的消息內(nèi)容(payload);
(2)payload,可以理解為消息的內(nèi)容,是指訂閱者具體要使用的內(nèi)容。
通過(guò)“功能定義”定義上報(bào)的數(shù)據(jù)點(diǎn)標(biāo)簽與數(shù)據(jù)點(diǎn)類(lèi)型,用于接收PLC上報(bào)數(shù)據(jù),使用飛燕平臺(tái)需要遵守飛燕規(guī)定的上報(bào)方式與數(shù)據(jù)格式,否則無(wú)法使用其他控件開(kāi)發(fā)可視化程序,具體規(guī)則詳情以阿里云官方提供的為準(zhǔn),規(guī)則有時(shí)會(huì)有細(xì)微的調(diào)整這里不再重復(fù)。
小編這里就以上報(bào)溫度傳感器采集數(shù)據(jù)為例,可通過(guò)傳感器使用手冊(cè)查詢(xún)到他的采集范圍為-40℃到+120℃,PLC類(lèi)使用浮點(diǎn)型(REAL類(lèi)型)緩存該數(shù)據(jù),平臺(tái)配置如下:
點(diǎn)擊“確認(rèn)”即可。
通過(guò)阿里云提供的“物模型數(shù)據(jù)解析使用示例”可以查詢(xún)到上報(bào)阿里云的數(shù)據(jù)格式如下:
手冊(cè)地址:https://help.aliyun.com/document_detail/114621.html
{"method":"thing.event.property.post","id":"2241348","params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1},"version":"1.0"}
"params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1}為上報(bào)的數(shù)據(jù),其余的為一幀數(shù)據(jù)固有的包頭包尾,根據(jù)將要使用的上報(bào)屬性對(duì)應(yīng)調(diào)整報(bào)文數(shù)據(jù),本案例數(shù)據(jù)如下:
{"method":"thing.event.property.post","id":"2241348","params":{"temperature":31.5},"version":"1.0"}。
接下來(lái)就是通過(guò)PLC動(dòng)態(tài)組合該數(shù)據(jù)包,該數(shù)據(jù)包由固定部分和變化的溫度組成,JSON的報(bào)文為字符串類(lèi)型數(shù)據(jù),因此第一步應(yīng)當(dāng)將采集的溫度轉(zhuǎn)換為字符型數(shù)據(jù),利用功能塊“VAL_STRG”進(jìn)行轉(zhuǎn)換,下圖為該功能塊的使用實(shí)例:
根據(jù)實(shí)際情況調(diào)整轉(zhuǎn)換格式,比如“FORMAT”選擇16#0000(正數(shù)不需要符號(hào)的帶小數(shù)類(lèi)型),由于傳感器分度值最小為0.1因此“PREC”和“P”配置為1,由于最長(zhǎng)字符串為120.0或者-40.0都是長(zhǎng)度不超過(guò)5位的字符將“SIZE”配置為5以上即可(不足的位數(shù)自動(dòng)填充空格,而空格不影響JSON數(shù)據(jù)的解析),如下圖所示:
還需要將溫度字符串組合到“params”屬性的"temperature":字段后面,因此還需要使用字符串插入功能塊“INSERT”,官方提供的使用示例如下:
這個(gè)功能塊非常的簡(jiǎn)單,只需要配置兩個(gè)字符串一個(gè)插入位置,本案例由于只有一個(gè)數(shù)據(jù)點(diǎn)需要上報(bào),插入值就不通過(guò)動(dòng)態(tài)計(jì)算所得,直接使用固定值,如有需要可以通過(guò)“FIND”功能塊查找字符串的位置再結(jié)合其他的功能塊實(shí)現(xiàn)動(dòng)態(tài)調(diào)整,動(dòng)態(tài)組合可以只爭(zhēng)對(duì)變化數(shù)據(jù)進(jìn)行上報(bào)達(dá)到節(jié)省流量的目的,本章意在教會(huì)使用MQTT上報(bào)數(shù)據(jù),不易將程序復(fù)雜化,若有興趣可在實(shí)現(xiàn)上報(bào)功能后再來(lái)優(yōu)化程序。
由于該MQTT連接例程發(fā)布消息是通過(guò)數(shù)組存儲(chǔ)緩存,因此需要將剛才轉(zhuǎn)換的字符串通過(guò)字符串轉(zhuǎn)數(shù)組功能塊存入發(fā)送緩存數(shù)組,官方提供的使用方法如下:
每次上報(bào)都需要完全覆蓋上一次的上報(bào)數(shù)據(jù),因此“pChars”配置為0,將剛才轉(zhuǎn)換的字符串填入“Strg”,將MQTT發(fā)布緩存數(shù)組填入“Chars”,將功能塊輸出的長(zhǎng)度存入MQTT發(fā)布數(shù)據(jù)長(zhǎng)度緩存區(qū),后續(xù)用于可變字符長(zhǎng)度計(jì)算(功能塊內(nèi)部調(diào)用,只需提供發(fā)送字符長(zhǎng)度即可),具體配置如下圖所示:
到這里基本完成了MQTT上報(bào)數(shù)據(jù)的全部分析過(guò)程。
在“上報(bào)數(shù)據(jù)格式分析”基本對(duì)將要使用到的功能塊進(jìn)行了逐個(gè)講解,利用FB函數(shù)塊將上述功能塊串聯(lián)起來(lái),首先定義變量表(輸入變量、靜態(tài)變量、中間變量)。
輸入變量(Input):“temperature”,外部輸入溫度數(shù)據(jù)用于協(xié)議組包與數(shù)據(jù)上傳;
靜態(tài)變量(Static):“Static_1”,用于存儲(chǔ)協(xié)議報(bào)文的固定部分;
中間變量(Temp):“temp_post_data”,緩存過(guò)程中的上報(bào)數(shù)據(jù);
“temp_to_str”,緩存數(shù)值轉(zhuǎn)字符的溫度數(shù)據(jù);
合并上述功能塊為FB函數(shù)塊,并在主函數(shù)中調(diào)用該函數(shù)塊。
配置物模型的發(fā)布地址,可在設(shè)備詳情的Topic列表下查詢(xún)到物模型的訂閱發(fā)布地址;
配置“MqttDb數(shù)據(jù)塊”的默認(rèn)發(fā)布與訂閱地址,配置發(fā)布等級(jí),這里使用0,該例程功能塊不支持等級(jí)2,加之阿里云物模型可能也不支持等級(jí)2,只能使用0和1。
第一步進(jìn)入“MqttDb數(shù)據(jù)塊”,第二步點(diǎn)擊“監(jiān)控”,小編這里已經(jīng)成功連接阿里云,可以直接進(jìn)行數(shù)據(jù)發(fā)布,若沒(méi)有連接應(yīng)當(dāng)先觸發(fā)“connect”變量,不知道怎么連接的可以回看之前發(fā)布的“西門(mén)子PLC利用函數(shù)塊連接MQTT服務(wù)器”,連接成功后“output”下的“status”會(huì)反饋16#7004表示連接成功;
給變量“publish”一個(gè)上升沿信號(hào)即可觸發(fā)一次數(shù)據(jù)上報(bào),小編這里就通過(guò)在線(xiàn)監(jiān)控的方式實(shí)現(xiàn)手動(dòng)上報(bào),上報(bào)成功會(huì)輸出提升信息,如下圖所示:
通過(guò)云平臺(tái)查詢(xún)上報(bào)數(shù)據(jù)日志,如下圖所示:
也可以在“設(shè)備詳情”的“運(yùn)行狀態(tài)”下查詢(xún)上報(bào)數(shù)據(jù)曲線(xiàn),如下圖所示:
這里并未連接真實(shí)的傳感器進(jìn)行采集,因此可以方便地對(duì)最大值和最小值進(jìn)行測(cè)試,可以看出極限值都能正確上報(bào)。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)和企業(yè)公眾號(hào)(微信號(hào):cdebyte)進(jìn)行了解,也可以直接撥打400電話(huà)咨詢(xún)技術(shù)專(zhuān)員!
相關(guān)閱讀:
1、【教程】PLC利用函數(shù)塊連接MQTT訂閱消息(一)
2、【教程】PLC利用函數(shù)塊連接MQTT訂閱消息(二)
3、串口服務(wù)器快速接入MQTT3.1協(xié)議服務(wù)器鏈接配置教程
4、NB114單路串口服務(wù)器如何配置MQTT軟件教程