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