M-Bus (计量)
M-Bus (Meter-Bus) 是按 EN 13757 标准化的公用事业计量专用通信协议,主要应用于热量表 / 燃气表 / 电能表 / 水表等领域。
网关的 M-Bus 驱动支持 M-Bus over TCP(通过 M-Bus master 网关将无线或有线仪表转换为 TCP 的形式)。
注册表单输入项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | M-Bus 网关 IP | 192.168.0.150 |
| 端口 | M-Bus TCP 端口 | 10001(Relay / Sentec / ETM 类厂商标准) |
| 波特率 (baudrate) | 网关 ↔ 仪表 | 2400(标准)/ 9600 |
| 响应超时 (request-timeout) | 仪表响应等待 (ms) | 5000 |
一条 M-Bus 线路最多可挂接 250 台仪表。网关允许在一个"连接"下同时注册多台仪表,因此在标签侧的地址表记中包含仪表单位地址(primary 或 secondary)。
标签的 PLC 地址表记
M-Bus 每台仪表都有各种"记录"(instantaneous value、累计值、单位等)。表记分为 <meter>:<record> 两部分。
仪表选择
| 表记 | 含义 |
|---|---|
addr:5 | Primary address 5 |
select:12345678:KAM:01:04 | Secondary 选择 — <id>:<mfg>:<ver>:<med> |
select:12345678 | 仅 Secondary id(mfg/ver/med 为通配符 FF) |
mfg 为 3 位厂商代码(例如 KAM = Kamstrup),ver 为固件版本,med 为介质类型(1=Oil、4=Heat、7=Water 等)。
记录 (data block index)
仪表的响应中包含多个数据块 (DIB/VIB),按顺序编号为 0、1、2、...。网关以索引 + 子字段的表记方式暴露。
| 表记 | 含义 |
|---|---|
1:0 | 数据块 1 的第 0 个字段(通常为"当前值") |
1:unit | 数据块 1 的单位(字符串) |
1:tariff | 数据块 1 的 tariff(费率区分) |
1:storage | 数据块 1 的 storage number |
完整表记示例:addr:5:1:0 — primary 为 5 的仪表的数据块 1 的值。
或者:select:12345678:KAM:01:04:3:0 — Kamstrup 热量表的数据块 3 的值。
数据格式匹配
| M-Bus 值 | 数据格式 | 格式辅助 |
|---|---|---|
| 累计值 / 测量值(实数) | Float | REAL |
| 整数型计数器 | Integer | DW (32-bit) 或(留空) |
| 单位 / 厂商代码 | String | STR[8] |
| Tariff / Storage 编号 | Integer | (留空) |
M-Bus 仪表会混用 BCD / 32-bit 整数 / 64-bit 整数 / IEEE 实数等多种编码。驱动会根据 DIB / VIB 头自动解码后以"物理值"暴露,因此大多数情况下使用 Float : REAL 接收即可。
常见问题与解决
| 现象 / 消息 | 可能原因 | 解决 |
|---|---|---|
| "Address not responding" | primary 未使用 / 冲突 | 用网关侧的 "M-Bus scan" 确认实际响应的 primary |
| "Invalid secondary" | secondary 的 4 个字段 (id/mfg/ver/med) 中有一处输入错误 | 重新核对仪表标签上的 8 位序列号和标签上标注的 3 字母 mfg 代码 |
| 数值过大 / 过小(1000 倍) | scaling 错误 | M-Bus 通常自动 scaling。若仍异常,用计算公式进行修正 |
| 频繁出现 "Timeout" | 波特率不一致 | 统一网关 ↔ 仪表的波特率(多为 2400) |
| 数据块编号不明确 | 各仪表顺序不同 | 通过网关的 "M-Bus telegram view" 查看 raw 响应并映射索引 |
若一条线路上的仪表在 5~10 台以内,primary 更简单。若运行 100 台以上仪表,或 primary 会动态变化的系统,则 secondary(基于序列号)更稳定。
常用示例
一台热量表 (heat meter) 的标准注册:
| 标签名称 | 地址 | 数据格式 | 格式辅助 |
|---|---|---|---|
| 累计热量 (kWh) | addr:5:1:0 | Float | REAL |
| 累计流量 (m³) | addr:5:2:0 | Float | REAL |
| 瞬时功率 (kW) | addr:5:3:0 | Float | REAL |
| 供水温度 (°C) | addr:5:4:0 | Float | REAL |
| 回水温度 (°C) | addr:5:5:0 | Float | REAL |
| 仪表序列号 | addr:5:0:id | String | STR[8] |
更详细的示例 / 自动化注册
请参考高级 — REST API 中的 M-Bus 示例。