开发者社区> 问答> 正文

一个RTU同时接了多个485传感器,已通过485透传数据到云端,如何在云端解析出每个传感器的数值?

我是一个初学者,不懂代码之类的,刚好手上有一个RTU设备,自带4路模拟量输入和一路485输入,485接口下接了两个温湿度传感器,自己在云端物模型配置如下: alywd.png 云端RS485透传数据已经能接收到原始的Hex数据,但是这个数据不直观,于是我设置了四个物模型,分别用来展示传感器数值,但是试了很久都不能显示传感器数据。开始只用一个传感器,试着解析数据,但是始终每办法解析成功,数据解析的代码如下:

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

//上行数据,自定义格式转物模型JSON格式。 function rawDataToProtocol(bytes) {

var uint8Array = new Uint8Array(bytes.length);
for (var i = 0; i < bytes.length; i++) {
    uint8Array[i] = bytes[i] & 0xff;
}

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

var jsonMap = new Object();

    //属性上报method。
    jsonMap['method'] = PROPERTY_REPORT_METHOD;
    //协议版本号,固定字段,取值1.0。
    jsonMap['version'] = '1.0';
    //表示该次请求的ID。
    jsonMap['id'] = new Date().getTime();
    var params = {};
           //14、15对应产品属性中temperature。
    params['485wd'] = (dataView.getUint8(15)*256+dataView.getUint8(14))/10;
    //16、17对应产品属性中humidity。
    params['485sd'] = (dataView.getUint8(17)*256+dataView.getUint8(16));
           jsonMap['params'] = params;

return jsonMap;

} //下行指令,物模型JSON格式转自定义格式。 function protocolToRawData(json) { var payloadArray = [1];//此设备只有上报数据功能,无法接收云端指令。 return payloadArray; }

//将设备自定义Topic数据转换为JSON格式数据。 function transformPayload(topic, rawData) { var jsonObj = {} return jsonObj; } 我对代码一窍不通,大神们帮我想想办法,这个问题不解决,我的Web可视化就每办法进行呢。这个问题困扰我两个月了!

展开
收起
1936408524768880 2022-09-14 00:22:39 1464 0
2 条回答
写回答
取消 提交回答
  • 首先需要明确一下,设备上报的自定义格式数据的解析规则,例如前2位表示属性A,中间4位表示属性B,等等。没有代码可以适用所有设备的,都需要根据自己的设备上报数据格式,来定制化数据解析脚本。

    举个例子,参考目前的官方示例:https://help.aliyun.com/document_detail/147612.html

    示例数据: 设备上报属性数据: 传入参数: 0x000000000100320100000000 输出结果: {"method":"thing.event.property.post","id":"1","params":{"prop_float":0,"prop_int16":50,"prop_bool":1},"version":"1.0"}

    传入参数和输出结果是如何对应上的,看下面的解释:

    jsonMap['id'] = '' + dataView.getInt32(1); 四个字节,8个字符,对应00000001。16进制转10进制后,等于1

    params['prop_int16'] = dataView.getInt16(5); 两个字节,4个字符,0032。16进制转10进制后,等于50

    params['prop_bool'] = uint8Array[7]; 一个字节,两个字符,01。16进制转10进制后,等于1

    params['prop_float'] = dataView.getFloat32(8) 四个字节,八个字符,00000000。16进制转10进制后,等于0

    2022-10-31 12:01:18
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    这个问题实在不行楼主可以提工单咨询一下阿里专业技术人员。

    2022-10-27 14:38:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像