在億佰特介紹了西門(mén)子PLC如何通過(guò)函數塊連接MQTT服務(wù)器和發(fā)布消息,本文為大家介紹如何通過(guò)函數與函數塊實(shí)現MQTT云消息的訂閱,直接切入重點(diǎn)。 一、飛燕物聯(lián)網(wǎng)平臺配置 這里的配置和上一篇發(fā)布的配置基本相同,唯一的不同在于將數據的讀寫(xiě)屬性修改為支持讀寫(xiě),其余部分根據實(shí)際情況配置不同參數,這里我已控制關(guān)照為例說(shuō)明,如下圖所示:
二、服務(wù)器下發(fā)數據格式分析 先從阿里云官方資料中獲取Alink JSON通訊協(xié)議的格式,選擇“消息通訊”選項下的“設備屬性、事件、服務(wù)”;
找到“設置設備屬性”展開(kāi)“Topic和數據格式”的介紹;
下發(fā)數據格式如下:{"id":"123","version":"1.0","params":{"temperature":30.5},"method":"thing.service.property.set"} 對于PLC來(lái)說(shuō)首先需要找到關(guān)鍵詞“"temperature":”是否存在,若存在再將其后的數據字符串提取出來(lái),再將該字符串轉換為數據用于修改PLC變量實(shí)現控制功能; 這里查找關(guān)鍵詞就會(huì )用到上傳提到的“FIND” 在字符串中查找字符的功能塊,先看官方提供的使用例程,這個(gè)功能塊會(huì )將第一次找到的字符位置輸出,否則輸出為零。
這里我們主要使用輸出的位置信息結合“LEN”(計算判斷字符串長(cháng)度)和“SUB”(判斷字符串長(cháng)度-1個(gè)字符長(cháng)度)功能塊(用于計算相對偏移)來(lái)定位數據點(diǎn)位置,在使用“DELFTE”功能塊刪除多余的無(wú)效字符,方便后續提取有效數據;
注意這里傳入的需要刪除的字符串數量并非“FIND”功能塊輸出的位置值,而是該位置值加上相對偏移,這樣我們就得到了一個(gè)從有效數據開(kāi)始的字符串,接下來(lái)可以利用“STRG_VAL”功能塊遇到不可轉換字符停止轉換的特性轉換為數值(JSON中數據的結束一般有‘,’與‘}’來(lái)結束該數據,字符型數據除外),還是以官方的例程說(shuō)明:
剛才在飛燕平臺配置的數據類(lèi)型都是整數,因此需要修改為下圖實(shí)列,若為浮點(diǎn)數還需要單獨配置,方法和整形一致僅轉換類(lèi)型需要調整。
經(jīng)過(guò)上述步驟就可以將數值型變量的值提取出來(lái),不過(guò)上述方法不支持提取字符數據,需要提取字符型數據的可以參照該方法實(shí)現,字符型數據就需要判斷數據的長(cháng)度在通過(guò)”MID”功能塊提取,字符串的結束字符為‘"’,通過(guò)“FIND”功能塊便能或者字符長(cháng)度。 轉載文章來(lái)源:https://www.ebyte.com/new-view-info.html?id=2205 |