随着物联网技术在能源计量领域的深入应用,如何高效、灵活地采集和传输热量表数据成为了关键挑战。本文将以KC22 LoRaWAN电池版M-Bus采集器为例,结合其内置的Edge-Bus (EB) 虚拟机和EB Compiler SDK,详细介绍如何通过简单的配置实现对基于CJ/T 188协议的M-Bus热量表的采集,特别是针对协议一致但厂家代码不同的嘉洁能、迈拓和艾克瑞等品牌的适配,实现快速部署和智能化边缘计算。
更多的EdgeBus代码可以查看:https://github.com/ManThink/TKL-EB-SDK
KC22是一款高性能、低功耗的LoRaWAN M-Bus采集器,专为远距离、电池供电的物联网应用设计。它通过M-Bus接口与热量表通信,并通过LoRaWAN协议将数据上传至云端。
其核心优势在于内置的EB(Edge-Bus)虚拟机 。EB允许用户通过编写TypeScript代码(使用EB Compiler SDK),在设备本地实现复杂的业务逻辑,例如:
EB Compiler SDK提供了一个事件驱动的架构,将采集和上传任务抽象为两个核心事件 :
事件类型 | 描述 | 作用 |
|---|---|---|
查询事件 (Query Event) | 周期性向子设备(热量表)发送指令,获取数据。 | 负责M-Bus通信和原始数据接收。 |
上行事件 (LoraUp Event) | 周期性或按条件将处理后的数据通过LoRaWAN发送到云端。 | 负责LoRaWAN数据封装和传输。 |
根据用户提供的资料,嘉洁能、迈拓和艾克瑞的协议基础一致,均基于CJ/T 188标准,区别主要在于厂家代码和地址格式。
以艾克瑞的读计量数据指令为例,其通信参数为:2400bps、偶校验、8位数据位、1位停止位 (2400.8.E.1) [艾科瑞协议, Page 1]。
读计量数据指令示例 (以地址12345678为例):
FE FE FE 68 20 78 56 34 12 00 00 00 01 03 90 1F 01 50 16 [艾科瑞协议, Page 3]
采集关键数据项: 协议返回数据中包含累计热量、瞬时热量、累计流量、供回水温度等关键数据,它们以BCD码格式存储,且单位在前,数据在后 [艾科瑞协议, Page 4]。
CJ188HeatMeter.ts为例)EB的配置核心在于otaConfig和QueryEvent的定义。
在CJ188HeatMeter.ts中,可以看到KC22的串口参数配置:
let otaConfig = getOtaConfig({
// ...
BaudRate: 2400,
StopBits: 1,
DataBits: 8,
Checkbit: CheckbitEnum.EVEN, // 偶校验
Battery: true, // 电池供电,Class A模式
BzType: 303, // 业务类型
BzVersion: 12 // 业务版本
})该配置与CJ/T 188协议要求的2400.8.E.1完全吻合。
cmdBuffer1定义了发送给热量表的查询指令。let cmdBuffer1=Buffer.from("FE FE FE FE FE 68 20 12 19 24 18 27 31 00 01 03 1F 90 12 0C 16".replaceAll(" ", ""), "hex")setQueryCrc和setAckCrc来配置校验模式。quEvent1.setQueryCrc({
Mode: CrcMode.SUM, // 累加和校验
CrcLen:1,
placeIndex:-2,
crcCheckRange:{
startIndex:5,
endIndex:-2
}
})
// 接收校验同理pushEBData方法定义了从接收缓冲区(quEvent1.ackBuffer)读取数据并写入上行缓冲区(upEvent1.txBuffer)的规则。例如,读取热量表地址(通常是BCD码):quEvent1.pushEBData(upEvent1.txBuffer.writeUintLE(
quEvent1.ackBuffer.readBcd(2,7), // 从偏移量2开始,读取7个字节的BCD码
3,6),{
condition: ExprCondition.ONTIME
})对于热量、流量等数据,同样使用readBcd(offset, length)方法进行读取,并根据协议规范确定正确的偏移量和长度。
由于嘉洁能、迈拓和鸿豪兴达的协议基础一致,KC22的EB配置只需关注两个核心点:M-Bus地址和厂家代码。
M-Bus协议的地址(如鸿豪兴达的AA AA AA AA AA AA AA)是查询指令的一部分。在实际应用中,DTU需要根据所连接热量表的地址来动态生成查询指令。
在EB中,可以通过将地址参数化并存入APP Buffer来实现动态配置 [EB SDK, line 162]。
QueryEvent的数据复制或计算规则中,从APP Buffer读取地址,并将其插入到cmdBuffer的相应位置。协议一致但厂家代码不同,意味着只需要在EB代码中维护一个协议模板,并根据实际连接的表计,动态修改查询指令中的厂家代码(如果协议中包含厂家代码字段)。
策略:
CJ188HeatMeter.ts的逻辑)。QueryEvent发送指令前,从APP Buffer读取厂家代码,并替换cmdBuffer中对应的字节。通过这种方式,一套EB固件可以适配所有协议基础相同的CJ/T 188表计,只需通过LoRaWAN下发指令(写入APP Buffer)来修改地址和厂家代码等配置参数,即可实现DTU的灵活部署和远程配置。
KC22 DTU的部署和配置流程主要分为三步:
步骤 | 描述 | 关键工具/技术 |
|---|---|---|
1. 编写EB代码 | 基于CJ188HeatMeter.ts模板,确认串口参数、CRC校验和数据解析逻辑,确保适配所有目标表计的关键数据项。 | EB Compiler SDK (TypeScript/Node.js) |
2. 编译与固件升级 | 使用ts-node编译TS代码,生成.obin固件文件。通过ThinkLink或第三方LoRaWAN平台,使用FUOTA(空中固件升级)功能将固件远程下发至KC22。 | ts-node、LoRaWAN NS (如ThinkLink) |
3. 远程配置 | 固件升级完成后,通过LoRaWAN下行指令,向KC22的APP Buffer写入M-Bus地址、厂家代码等动态配置参数。 | LoRaWAN NS下行指令(例如:通过214端口下发) |
KC22支持通过下行指令进行远程控制。例如,复位命令为:
控制字=0x03,起始地址=0x09,字节长度=0x01,写入内容为0x01
通过214端口下发 0xCF 03 09 01 01 会使设备复位。KC22 M-Bus转LoRa DTU结合EB虚拟机,为热量表采集提供了一个高灵活性、低功耗的解决方案。通过EB Compiler SDK,用户可以轻松实现对CJ/T 188协议的深度适配,即使面对不同厂家代码的表计,也能通过一套通用的EB逻辑和远程参数配置,实现快速、可靠的数据采集和传输。这种边缘计算能力,极大地简化了现场部署和后期的维护工作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。