跳到主要内容

M-Bus (计量)

M-Bus (Meter-Bus) 是按 EN 13757 标准化的公用事业计量专用通信协议,主要应用于热量表 / 燃气表 / 电能表 / 水表等领域。

网关的 M-Bus 驱动支持 M-Bus over TCP(通过 M-Bus master 网关将无线或有线仪表转换为 TCP 的形式)。


注册表单输入项

输入栏填写内容示例
IP 地址M-Bus 网关 IP192.168.0.150
端口M-Bus TCP 端口10001(Relay / Sentec / ETM 类厂商标准)
波特率 (baudrate)网关 ↔ 仪表2400(标准)/ 9600
响应超时 (request-timeout)仪表响应等待 (ms)5000
单台仪表 vs 多台仪表

一条 M-Bus 线路最多可挂接 250 台仪表。网关允许在一个"连接"下同时注册多台仪表,因此在标签侧的地址表记中包含仪表单位地址(primary 或 secondary)。


标签的 PLC 地址表记

M-Bus 每台仪表都有各种"记录"(instantaneous value、累计值、单位等)。表记分为 <meter>:<record> 两部分。

仪表选择

表记含义
addr:5Primary address 5
select:12345678:KAM:01:04Secondary 选择 — <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 值数据格式格式辅助
累计值 / 测量值(实数)FloatREAL
整数型计数器IntegerDW (32-bit) 或(留空)
单位 / 厂商代码StringSTR[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 响应并映射索引
Primary 还是 Secondary?

若一条线路上的仪表在 5~10 台以内,primary 更简单。若运行 100 台以上仪表,或 primary 会动态变化的系统,则 secondary(基于序列号)更稳定。


常用示例

一台热量表 (heat meter) 的标准注册:

标签名称地址数据格式格式辅助
累计热量 (kWh)addr:5:1:0FloatREAL
累计流量 (m³)addr:5:2:0FloatREAL
瞬时功率 (kW)addr:5:3:0FloatREAL
供水温度 (°C)addr:5:4:0FloatREAL
回水温度 (°C)addr:5:5:0FloatREAL
仪表序列号addr:5:0:idStringSTR[8]

更详细的示例 / 自动化注册

请参考高级 — REST API 中的 M-Bus 示例。