97人妻精品一区二区三区软件,人妻偷拍在线,插丝袜美女小穴视频,美女午夜福利在线

      • <i id="89dc3"></i>
        當前位置: 首頁 >應用方案 >技術應用 >

        利用云平臺腳本解析連接物模型(一)

        不久前億佰特小編發(fā)布在《串口服務器接入阿里云物模型》一文中通過編寫TPC-7062MCGS腳本)的腳本程序解析Alink JSON數(shù)據(jù),從而實現(xiàn)阿里云物模型采集控制RTU設備。

        本文將介紹另一種方式實現(xiàn)阿里云物模型控制RTU設備,之前是通過設備進行數(shù)據(jù)解析,因此開發(fā)者既需要了解MCGS腳本程序還需要了解Modbus協(xié)議導致使用門檻較高,而本文使用方法無需使用設備解析Alink JSON數(shù)據(jù),因此不需要編寫MCGS腳本從而降低是使用門檻。

        小編將通過物模型查詢RTU設備的保持寄存器(0x0000)的值講解如何實現(xiàn)該功能。

        一.軟硬件準備

        1.硬件準備

        串口服務器一臺用于連接MQTT服務器,本例程的從機將通過Modbus Slave仿真實現(xiàn)(方便觀察數(shù)據(jù)變化);

        可上網(wǎng)路由器一臺;

        網(wǎng)線兩根,一根連接串口服務器與路由器,一根連接電腦與路由器;

        電腦一臺,用于配置串口服務器以及調(diào)試云平臺;

        2.軟件準備

        MQTTX調(diào)試工具(https://mqttx.app/zh),用于接入前數(shù)據(jù)幀分析;

        Modbus Slave仿真工具(https://www.modbustools.com/),用于Modbus RTU從機仿真;

        億佰特網(wǎng)絡配置工具(http://www.sunredled.com/product/1465.html,相關下載),用于配置串口服務器,可以不適應軟件通過網(wǎng)頁配置,由于設備采用DHCP獲取本機IP,因此采用上位機配置更為方便;

        二.云平臺

        第一次使用阿里云的數(shù)據(jù)解析功能,并且這是筆者第一次使用JavaScript(ECMAScript 5)編寫腳本,因此接下的云平臺配置都將參考阿里云幫助中性的最佳實例下的設備通過DTU接入物聯(lián)網(wǎng)平臺”進行開發(fā),建議開發(fā)者仔細閱讀阿里云手冊可以發(fā)現(xiàn)不一樣的世界,活學活用里面案例能對初學者有很好的引導和啟發(fā)。

        阿里云平臺

        三.產(chǎn)品與設備創(chuàng)建

        1.產(chǎn)品創(chuàng)建

        這次創(chuàng)建的產(chǎn)品和以往的不同不能無腦點擊下一步,需要調(diào)整數(shù)據(jù)收發(fā)協(xié)議為透傳/自定義,如下圖:

        阿里云產(chǎn)品創(chuàng)建2

        其余參數(shù)保持默認。

        2.設備創(chuàng)建

        阿里云設備創(chuàng)建3

        3.物模型配置

        在產(chǎn)品詳情下的功能定義目錄下點擊編輯草稿”,選擇添加自定義功能;

        物模型配置4

        一共需要添加兩個自定義功能,一個用于保存寄存器值(左圖),一個用于物模型發(fā)起讀取指令;

        物模型配置5

        這里需要分析下Modbus響應數(shù)據(jù)幀,0103020064320C,可以看到響應幀只有地址用于標記,未標記寄存器地址,因此只有在平臺對收發(fā)數(shù)據(jù)進行標記,本例程重點介紹連接使用不需要考慮標記,保留接口待后續(xù)使用。因此在定義功能時使用枚舉變量。

        腳本語言JavaScript(ECMAScript 5)配置

        復制參考實例的腳本,并調(diào)整部分配置,如下:

        var ALINK_ID = "12345";

        var ALINK_VERSION = "1.1";

        var ALINK_PROP_POST_METHOD = 'thing.event.property.post';

        var ALINK_PROP_SET_METHOD = 'thing.service.property.set';

        /*此函數(shù)將設備上報數(shù)據(jù)轉換為Alink JSON物模型數(shù)據(jù)。*/

        function rawDataToProtocol(bytes) {

        ? ?/*將設備上報的原始數(shù)據(jù)轉換為數(shù)組。其中bytes對象中存儲著設備上報原始數(shù)據(jù)。*/

        ? ?var uint8Array = new Uint8Array(bytes.length);

        ? ?for (var i = 0; i < bytes.length; i++) {

        ? ? ? ?uint8Array[i] = bytes[i] & 0xff;

        ? ?}

        ? ?var params = {}; ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 定義屬性存放對象。

        ? ?var jsonMap = {}; ? ? ? ? ? ? ? ? ? ? ? ? ? // 定義模擬Alink數(shù)據(jù)報對象。

        ? ?/*填寫Alink數(shù)據(jù)報協(xié)議頭部分。*/

        ? ?jsonMap['version'] = ALINK_VERSION; ? ? ? ? // Alink 協(xié)議版本號。

        ? ?jsonMap['id'] = ALINK_ID; ? ? ? ? ? ? ? ? ? // 消息ID。

        ? ?jsonMap['method'] = ALINK_PROP_POST_METHOD; // 設備上行數(shù)據(jù)方法:設備屬性上報。

        /*填寫Alink數(shù)據(jù)報屬性部分。*/

        //0103020064320c

        ? ?params['register'] = uint8Array[3]*265+ uint8Array[4]; ? ? ? ? ? ?// 將收到的第一和第二字節(jié)轉換為十進制數(shù)存儲。

        ? ?jsonMap['params'] = params; ? ? ? ? ? ? ? ? // 將參數(shù)打包到數(shù)據(jù)幀中。

        ? ?return jsonMap; ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 返回結果會發(fā)送給物聯(lián)網(wǎng)平臺。

        }

        //以下是部分輔助函數(shù)。

        function buffer_uint8(value)

        {

        ? ?var uint8Array = new Uint8Array(1);

        ? ?var dv = new DataView(uint8Array.buffer, 0);

        ? ?dv.setUint8(0, value);

        ? ?return [].slice.call(uint8Array);

        }

        /*此函數(shù)實現(xiàn)由物聯(lián)網(wǎng)平臺下發(fā)數(shù)據(jù)轉換為設備能識別的16進制數(shù)。*/

        function protocolToRawData(json)

        {

        ? ?var method = json['method'];

        ? ?var id = json['id'];

        ? ?var version = json['version'];

        ? ?var payloadArray = [];

        ? ?if (method == ALINK_PROP_SET_METHOD) ? ?// 接收來自物聯(lián)網(wǎng)平臺的“設置設備屬性”的命令。

        ? ?{

        ? ? ? ?var send_params = json['params'];

        ? ? ? ?var prop_cur = send_params['READ_R']; ? // 將設置的具體值抽取出來。

        ? ? ? ?//按照自定義協(xié)議格式拼接rawdata。

        //0103000000018833

        ? ? ? ?payloadArray = payloadArray.concat(buffer_uint8(0x01));

        payloadArray = payloadArray.concat(buffer_uint8(0x03));

        payloadArray = payloadArray.concat(buffer_uint8(0x00));

        payloadArray = payloadArray.concat(buffer_uint8(0x00));

        payloadArray = payloadArray.concat(buffer_uint8(0x00));

        payloadArray = payloadArray.concat(buffer_uint8(0x01));

        payloadArray = payloadArray.concat(buffer_uint8(0x88));//校驗錯誤,但保留錯誤,引導學習如何分析問題,見“從機仿真”,正確校驗0x840A

        payloadArray = payloadArray.concat(buffer_uint8(0x33));//

        ? ?}

        ? ?return payloadArray; ? ?// 返回時,將數(shù)據(jù)發(fā)送至設備端。

        }

        function transformPayload(topic, rawData) {

        ? ?var jsonObj = {};

        ? ?return jsonObj;

        }

        將上述腳本粘貼到產(chǎn)品詳情下的數(shù)據(jù)解析”,如圖所示:

        物聯(lián)網(wǎng)云平臺配置6

        腳本語言測試與提交

        測試數(shù)據(jù)上報功能,如下圖所示:

        數(shù)據(jù)上報7

        測試數(shù)據(jù)下發(fā)功能,如下圖所示:

        數(shù)據(jù)下發(fā)8

        測試完成點擊“提交”,自此云平臺腳本與產(chǎn)品配置完成。

        四.軟件調(diào)試

        1.MQTT X軟件測試

        使用MQTT X軟件連接MQTT服務器進行測試,配置如下:

        MQTT協(xié)議服務器9

        查詢“訂閱”“發(fā)布”的地址,如下圖所示:

        MQTT協(xié)議服務器10

        平臺發(fā)送讀取請求,如下圖所示:

        MQTT協(xié)議服務器11

        MQTT X發(fā)送響應幀,如下圖所示:

        MQTT協(xié)議服務器12

        通過調(diào)試軟件可以更加直觀的對數(shù)據(jù)幀進行分析,若發(fā)現(xiàn)數(shù)據(jù)幀錯誤可以更加方便定位問題,這里是沒有錯誤的可進入下一步串口服務器演示。

        五.設備演示

        串口服務器參數(shù)配置,如下圖所示:

        串口服務器13

        從機仿真

        Modbus Slave并非免費軟件,可免費試用30天,若有長時間使用需求請購買正版授權。

        點擊Connection”配置連接參數(shù),選擇“Serial Port”,并配置正確端口與匹配的波特率參數(shù),如下圖所示:

        串口服務器14

        配置仿真軟件的保持寄存器值,如下圖所示:

        串口服務器15

        物模型發(fā)送查詢指令,仿真從機收到云平臺下發(fā)指令,仿真設備未響應,檢查發(fā)現(xiàn)之前使用的校驗工具沒有配置正確導致校驗錯誤。

        串口服務器16

        修改腳本中關于校驗的兩位,注意需要先調(diào)試才能提交生效。

        串口服務器17

        修改后再次發(fā)送,如下圖所示:

        串口服務器18

        效果演示,如下圖所示:

        串口服務器19

        利用云平臺腳本解析連接物模型(



        點擊撥打: 億佰特官網(wǎng) 4000-330-990