在億佰特介紹了西門子PLC如何通過函數塊連接MQTT服務器和發布消息,本文為大家介紹如何通過函數與函數塊實現MQTT云消息的訂閱,直接切入重點。
一、飛燕物聯網平臺配置
這里的配置和上一篇發布的配置基本相同,唯一的不同在于將數據的讀寫屬性修改為支持讀寫,其余部分根據實際情況配置不同參數,這里我已控制關照為例說明,如下圖所示:
二、服務器下發數據格式分析
先從阿里云官方資料中獲取Alink JSON通訊協議的格式,選擇“消息通訊”選項下的“設備屬性、事件、服務”;
找到“設置設備屬性”展開“Topic和數據格式”的介紹;
下發數據格式如下:{"id":"123","version":"1.0","params":{"temperature":30.5},"method":"thing.service.property.set"}
對于PLC來說首先需要找到關鍵詞“"temperature":”是否存在,若存在再將其后的數據字符串提取出來,再將該字符串轉換為數據用于修改PLC變量實現控制功能;
這里查找關鍵詞就會用到上傳提到的“FIND” 在字符串中查找字符的功能塊,先看官方提供的使用例程,這個功能塊會將第一次找到的字符位置輸出,否則輸出為零。
這里我們主要使用輸出的位置信息結合“LEN”(計算判斷字符串長度)和“SUB”(判斷字符串長度-1個字符長度)功能塊(用于計算相對偏移)來定位數據點位置,在使用“DELFTE”功能塊刪除多余的無效字符,方便后續提取有效數據;
注意這里傳入的需要刪除的字符串數量并非“FIND”功能塊輸出的位置值,而是該位置值加上相對偏移,這樣我們就得到了一個從有效數據開始的字符串,接下來可以利用“STRG_VAL”功能塊遇到不可轉換字符停止轉換的特性轉換為數值(JSON中數據的結束一般有‘,’與‘}’來結束該數據,字符型數據除外),還是以官方的例程說明:
剛才在飛燕平臺配置的數據類型都是整數,因此需要修改為下圖實列,若為浮點數還需要單獨配置,方法和整形一致僅轉換類型需要調整。
經過上述步驟就可以將數值型變量的值提取出來,不過上述方法不支持提取字符數據,需要提取字符型數據的可以參照該方法實現,字符型數據就需要判斷數據的長度在通過”MID”功能塊提取,字符串的結束字符為‘"’,通過“FIND”功能塊便能或者字符長度。
審核編輯黃宇
-
plc
+關注
關注
5014文章
13351瀏覽量
464486 -
函數
+關注
關注
3文章
4344瀏覽量
62820 -
MQTT
+關注
關注
5文章
653瀏覽量
22590
發布評論請先 登錄
相關推薦
評論