采集型水表 BCD 码上报协议解析
约 337 字大约 1 分钟
采集型水表 BCD 码上报协议解析
某客户使用的 RS485 采集型水表不支持标准 Modbus RTU,而采用了 BCD 码。接入 ThingsCloud 后,利用自定义数据上报规则中的云函数,便可以轻松的对上报数据进行解析,生成设备属性 JSON
。
创建规则时,选择自定义上报,如下图:
然后添加一个 属性解析函数 的操作,如下图:
编写云函数,下边是一个示例:
module.exports = function (identifier, data) {
/**
* 参数:
* identifier: 上报的自定义数据流标识符
* data: 上报的自定义数据,二进制 Buffer格式
* 返回值:
* attributes: 通过自定义上报数据解析生成的设备属性,作为函数返回值。
*/
var attributes = {};
// 验证数据长度,并校验 CRC
if (data.length == 13 && Cloud.validateCrc16Modbus(data)) {
// 读取第3-6字节的buffer
var buf1 = data.slice(3, 7);
// 读取第7-10字节的buffer
var buf2 = data.slice(7, 11);
// 分别计算对应的数值,这里根据水表手册的BCD定义
var str1 = buf1.toString("hex");
var number1 = str1.substr(0, 4)/1 + str1.substr(4, 4)/10000;
var str2 = buf2.toString("hex");
var number2 = str2.substr(0, 3)/1 + str2.substr(3, 5)/100000;
// 读取站号
const station = data[0]
// 写入属性中
attributes.station = station;
attributes.number1 = number1;
attributes.number2 = number2;
}
return attributes;
}
详细了解 ThingsCloud 消息规则,请浏览 消息规则