汇中 SCL-61D 超声水表对接
模型清单
可使用下列名称或 ID 在 ThinkLink 中搜索对应模型。
| 模型类型 | 名称 | id_name | 平台模型 ID |
|---|---|---|---|
| RPC | [SCL-61D GET] 23111 | scl61d_get_23111 | 110312230444077061 |
| RPC | [SCL-61D SET] 23111 | scl61d_set_23111 | 110312286060548101 |
| Template | SCL-61D | 110312390112841733 | |
| Thing Model | [SCL-61D] | scl61d_23111 | 110311140134752261 |
| Thing Model | [HZ-23111-SCL-61D资产] 区域聚合 | scl61d_asset_23111 | 119677189950959619 |
| Parameter Thing Model | [SCL-61D-PARA] | scl61d_para_23111 | 110311197902901253 |
本文档描述汇中仪表 SCL-61D5/6 超声水表通过 KC21 采集设备,基于 Modbus RTU + EB 协议接入 ThinkLink 平台的完整方案。内容包括:
- 设备接线与通信参数
- ThinkLink 平台使用方法
- 数据上报与第三方订阅方式
- EB 高级对接实现(EBHelper / 物模型 / RPC)
第 1 部分:用户使用说明
2. 对接设备信息(SCL-61D 超声水表)
2.1 基本信息
| 项目 | 内容 |
|---|---|
| 品牌 | 汇中仪表(HUIZHONG) |
| 型号 | SCL-61D5 / SCL-61D6 |
| 设备类型 | 超声水表 |
| 供电方式 | 内置电池(自供电,无需外部供电) |
2.2 通信参数(RS485 / Modbus RTU)
| 参数项 | 配置 |
|---|---|
| 通信协议 | Modbus RTU |
| 波特率 | 9600 bps |
| 数据位 | 8 |
| 校验位 | 无校验(NONE) |
| 停止位 | 1 |
| 设备地址范围 | 0x01–0xFA |
| 功能码 | 0x03(读保持寄存器) |
2.3 数据寄存器
| 寄存器地址 | 数据内容 | 单位 | 字节数 | 数据类型 |
|---|---|---|---|---|
| 0x0000–0x0001 | 瞬时流量 | 0.001 m³/h | 4 | Float Inverse(FloatLE) |
| 0x0002–0x0003 | 正累积流量 | 0.1 m³ | 4 | Long Inverse(Uint32LE) |
| 0x0004–0x0005 | 正累积运行时间 | h | 4 | Long Inverse(Uint32LE) |
| 0x0006–0x0007 | 负累积流量 | 0.1 m³ | 4 | Long Inverse 带正负号(Int32LE) |
| 0x0008–0x0009 | 负累积运行时间 | h | 4 | Long Inverse 带正负号(Int32LE) |
| 0x000A–0x000B | 水温 | ℃ | 4 | Float Inverse(FloatLE) |
| 0x000C–0x000D | 压力 | 0.001 MPa | 4 | Float Inverse(FloatLE) |
| 0x000E | 仪表信息/诊断码 | — | 2 | Hex |
仪表信息高字节固定为 0,低字节为诊断信息代码(JD),0x00 表示正常。详见附录。
2.4 接线说明
| KC21 线缆 | 连接到水表 |
|---|---|
| 蓝色(RS485 A) | RS485 A |
| 白色(RS485 B) | RS485 B |
| 黑色(GND) | GND |
⚠️ 注意:
- SCL-61D 内置电池自供电,KC21 红/棕色电源线不接水表
- 无需前导码唤醒:SCL-61D 为标准 Modbus RTU 协议,直接发送查询命令即可
3. 采集设备信息(KC21)
3.1 基本信息
| 项目 | 内容 |
|---|---|
| 设备型号 | KC21(A1 版本,内置 10800 mA 电池) |
| 供电方式 | 内置电池 |
| 对外供电能力 | 15V(本方案不使用,水表自供电) |
3.2 KC21 接线说明
| 线缆颜色 | 含义 |
|---|---|
| 红色 / 棕色 | 电源 +(本方案不接) |
| 黑色 | 电源 − / GND |
| 蓝色 | RS485 A |
| 白色 | RS485 B |
4. ThinkLink 平台使用方法
4.1 添加设备
- 登录 ThinkLink 平台
- 进入 设备管理 → 新增设备
- 搜索并选择模板
HZ-BATTERY-23111 - 完成设备创建
4.2 参数配置(抄表周期 & 地址)
路径:设备管理 → 选择设备 → 配置 → RPC
选择 RPC:[EB SET] easy para
| 参数名 | 含义 | 说明 |
|---|---|---|
| period | 抄表周期 | 单位:秒,建议 900(15 分钟) |
| addr | 水表 Modbus 地址 | 出厂默认 0x01,可按需修改 |
参数修改后,设备下次上线时自动生效。
4.3 第三方平台数据订阅
MQTT Topic
/v32/{Organization Account}/tkl/up/telemetry/{eui}上报示例数据
json
{
"eui": "6353012af10a9331",
"active_time": "2026-05-21T08:00:00.000Z",
"thingModelId": "scl61d_23111",
"thingModelIdName": "scl61d_23111",
"telemetry_data": {
"snr": 12.5,
"rssi": -55,
"battery": 3.6,
"instant_flow": -1.955,
"pos_total_flow": 155.2,
"pos_run_time": 1360,
"neg_total_flow": -13.1,
"neg_run_time": 7,
"temperature": 29.00,
"pressure": 0.9150,
"meter_info": 0,
"update_time": 1747814400000
}
}第 2 部分:高级对接说明
5. 数据采集实现(EBHelper)
5.1 通信协议
| 项目 | 内容 |
|---|---|
| 协议类型 | Modbus RTU |
| 实现方式 | EBHelper |
| BzType | 23111 |
| 单次查询范围 | 0x0000–0x000E(15 个寄存器,一次读取全部数据) |
5.2 OTA 配置参数
javascript
let otaConfig = getOtaConfig({
BaudRate: 9600,
StopBits: 1,
DataBits: 8,
Checkbit: CheckbitEnum.NONE,
Battery: true,
ConfirmDuty: 60,
BzType: 23111,
BzVersion: 1
})5.3 EB 代码
typescript
import { Buffer } from "buffer";
import { buildOtaFile } from "@EBSDK/run";
import { EBModel } from "@EBSDK/EBCompiler/EBModel/EBModel";
import { EventInfoItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import type { UserConfUPItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import { CheckbitEnum, getOtaConfig } from "@EBSDK/otaConfig";
// SCL-61D5/6 超声水表,Modbus RTU,一次读取 0x0000-0x000E(15个寄存器)
// KC21 电池供电;水表自供电,KC21 不对水表供电
// 无前导码:标准 Modbus RTU,不需要 preamble
const eventInfo: UserConfUPItem[] = [
{
name: "water",
port: 22,
version: "0x83",
dataType: "0x32",
upPeriod: "10y",
upPeriodIndex: 70,
quInfo: [
{
protocol: "modbus",
addr: "0x01",
code: "0x03",
periodIndex: 70,
indexAPP: 150, indexCMD: 0, copySize: 1,
payIndex: 3, ackAddrIndex: 0,
isLast: true,
listVal: [
{ start: "0x0000", end: "0x0001" }, // 瞬时流量 FloatCDAB (FloatLE)
{ start: "0x0002", end: "0x0003" }, // 正累积流量 UintCDAB (Uint32LE)
{ start: "0x0004", end: "0x0005" }, // 正累积运行时间 UintCDAB (Uint32LE)
{ start: "0x0006", end: "0x0007" }, // 负累积流量 IntCDAB (Int32LE)
{ start: "0x0008", end: "0x0009" }, // 负累积运行时间 IntCDAB (Int32LE)
{ start: "0x000A", end: "0x000B" }, // 水温 FloatCDAB (FloatLE)
{ start: "0x000C", end: "0x000D" }, // 压力 FloatCDAB (FloatLE)
{ start: "0x000E", end: "0x000E" }, // 仪表信息/诊断码 Uint16LE
]
}
]
}
]
let otaConfig = getOtaConfig({
BaudRate: 9600,
StopBits: 1,
DataBits: 8,
Checkbit: CheckbitEnum.NONE,
Battery: true,
ConfirmDuty: 60,
BzType: 23111,
BzVersion: 1
})
const MODBUS_TT = (ebModel: EBModel) => {
for (let i = 0; i < eventInfo.length; i++) {
let event = new EventInfoItem(eventInfo[i]);
event.upEventSetup()
event.eventInstall()
}
return JSON.stringify(ebModel, null, 2)
}
buildOtaFile(import.meta.url, otaConfig, MODBUS_TT)6. 物模型解析说明
6.1 上行帧结构
端口号:22
采用 EBHelper 标准帧结构(单次查询 15 个寄存器 = 30 字节数据):
| 字段名 | 偏移 | 长度(Bytes) | 含义 |
|---|---|---|---|
version | 0 | 1 | 协议版本号,固定 0x83 |
dataType | 1 | 1 | 固定 0x32 |
covStatus | 2 | 1 | 保留字节 |
status | 3 | 1 | 查询事件状态 |
battery | 4 | 1 | 电池电量 |
addr | 5 | 1 | 子设备 Modbus 地址 |
instant_flow | 6 | 4 | 瞬时流量,FloatCDAB(FloatLE) |
pos_total_flow | 10 | 4 | 正累积流量,UintCDAB(Uint32LE) |
pos_run_time | 14 | 4 | 正累积运行时间,UintCDAB |
neg_total_flow | 18 | 4 | 负累积流量,IntCDAB(Int32LE) |
neg_run_time | 22 | 4 | 负累积运行时间,IntCDAB |
temperature | 26 | 4 | 水温,FloatCDAB |
pressure | 30 | 4 | 压力,FloatCDAB |
meter_info | 34 | 2 | 仪表信息/诊断码,Uint16LE |
总帧长:36 字节
6.2 物模型信息
| 项目 | 内容 |
|---|---|
| 物模型名称 | SCL-61D |
| ThingModel ID Name | scl61d_23111 |
| 事件名称 | water |
6.3 字段映射
| 字段名 | 含义 | 单位 | 换算 |
|---|---|---|---|
instant_flow | 瞬时流量 | m³/h | 原始值 × 0.001 |
pos_total_flow | 正累积流量 | m³ | 原始值 × 0.1 |
pos_run_time | 正累积运行时间 | h | — |
neg_total_flow | 负累积流量 | m³ | 原始值 × 0.1 |
neg_run_time | 负累积运行时间 | h | — |
temperature | 水温 | ℃ | — |
pressure | 压力 | MPa | 原始值 × 0.001 |
meter_info | 仪表诊断码 | — | 0x00 = 正常 |
battery | KC21 电池电量 | — | — |
rssi | 信号强度 | dBm | — |
snr | 信噪比 | dB | — |
6.4 RPC 参数修改
- RPC 名称:
[EB SET] easy para - ID Name:
eb_set_easy_para
| 地址 | 含义 |
|---|---|
| app_70 | 抄读周期(period,秒) |
| app_150 | 水表 Modbus 地址(addr) |
附录:诊断信息代码说明(meter_info 低字节 JD)
| 诊断码 | 含义 |
|---|---|
| 0x00 | 正常 |
| JD & 0x0F = 0x01 | 电池电压低于 3.37V,需更换电池 |
| JD & 0x0F = 0x02 | 空管或换能器故障,无测量信号 |
| JD & 0x0F = 0x03 | 代码 01 和 02 同时发生 |
| JD & 0x0F = 0x04 | 电池电压低于 3.3V,必须更换电池 |
| JD & 0x0F = 0x05 | 计算器和换能器之间通讯故障 |
| JD & 0x0F = 0x06 | E2PROM 损坏 |
| JD & 0x10 = 0x10 | 供水温度传感器故障或供水温度低于 2℃ |
| JD & 0x20 = 0x20 | 供水温度超出 150℃ |
| JD & 0x40 = 0x40 | 回水温度传感器故障或回水温度低于 2℃ |
| JD & 0x80 = 0x80 | 回水温度超出 150℃ |
总结
- 本方案实现了 SCL-61D 超声水表 → KC21 → EB → ThinkLink 的完整闭环
- 支持:远程参数配置、周期性全量数据采集(8 个字段)、标准 MQTT 对接第三方平台
- 物模型:
scl61d_23111 - RPC 参数修改:
eb_set_easy_para - 模板:
HZ-BATTERY-23111 - 架构稳定、低功耗,适用于水务计量与管网监测场景