IAMMETER 新增 SunSpec Modbus/TCP 支持:型号映射与集成指南
IAMMETER 固件 i.91.065.18 为现有的 Modbus/TCP 服务新增了只读的 SunSpec 整数型电表模型映射。它让能够识别 SunSpec 模型的软件拥有了一种标准方式,可在本地网络中发现在线 IAMMETER 电表并读取选定的电气量。
这是接口层面的新增能力,并非替换原有的计量体系。电表仍以相同方式采集数据。现有的 IAMMETER Modbus 寄存器、HTTP API、MQTT 报文和 NEM 设置均保持不变。
SunSpec 定义了可映射到 Modbus 保持寄存器的标准设备信息模型。它的映射以 SunS 标记开头,随后是 Common(通用)模型和设备专属模型,客户端可依次读取每个模型的 ID 与长度来发现它们。SunSpec Modbus 规范包 记录了模型发现的方式,包括基于 0 的 Modbus 映射地址和未实现值的处理规则。SunSpec Modbus 广泛应用于分布式能源集成场景,涵盖电表、逆变器和储能设备。
IAMMETER 实现的是面向电表数据的一个聚焦且只读的子集。本固件尚未提交 SunSpec 认证。请勿把该功能当作认证、完整的 SunSpec 一致性,或保证任何第三方 SunSpec 客户端无需配置即可工作。
支持的 IAMMETER 型号与电表映射
| IAMMETER 电表 | SunSpec 整数型电表模型 | 电气解读 |
|---|---|---|
| WEM3080 | 201 | 单相 |
| WEM2067 | 202 | 分相 |
| WEM3050T | 203 | 三相星形(wye) |
| WEM3080T | 203 | 三相星形(wye) |
| WEM3046T | 203 | 三相星形(wye) |
| WEM3063T | 203 | 三相星形(wye) |
对于 WEM2067,模型 202 表示的是真正的分相接线方式。它不会把两条互不相关的单相回路描述为同一种电气结构。
模型 204 的代码已有主机端测试覆盖,但固件尚未为 WEM3080TD 自动检测并选择该模型。因此本文不宣称模型 204 已可用。WEM3046TE 也尚未完成专门的型号识别验证。首个版本仅提供整数型模型:浮点型模型 211 至 214 不可用。
客户端可以读取的内容
整数型电表模型对外提供相电压、相电流、相有功功率、总有功功率、频率、相功率因数,以及各相和总计的输入/输出有功电能累积量。Common(通用)模型提供设备识别信息,例如型号、固件版本和序列号。
在 SunSpec 映射中,电能以 Wh 表示;功率因数以百分比表示。总电能数据点复用该电表已有的总量字段和 NEM 语义。在此映射中,IAMMETER 不会通过把各相累积量相加来重新计算三相总量。由于 NEM 设置会影响这些累积量的含义,客户端不得假定总电能始终等于各相电能之和。
部分字段在首个版本中被有意省略:无功功率与无功电能、视在功率与视在电能、多相总功率因数以及事件标志。它们的标准位置仍保留在模型中,并返回相应的不可用标记。SunSpec 客户端必须能识别不可用值,而不能把它解读为测量值。
电压解读很重要
相值来自电表本身。部分线电压数据点是为模型映射而推导出来的:
- 模型 202 的线电压为
UA + UB。 - 模型 203 的线电压是相电压乘以
√3的近似值,并非直接测量的线间电压。系统不平衡或相角偏差都会带来误差。
对于需要直接测量线间电压的应用,这一区别很重要。在把推导值用于控制或合规性判断之前,请先核对模型数据点定义和实际接线方式。
通过 Modbus/TCP 连接
先启用电表已有的 Modbus/TCP 服务,然后连接到它的局域网地址:
| 项目 | 设置 |
|---|---|
| 主机 | 电表的局域网 IP 地址 |
| TCP 端口 | 502 |
| 读取功能码 | 03 — 读取保持寄存器 |
| SunSpec 起始地址 | 40000 |
| 写访问 | IAMMETER SunSpec 映射不支持 |
本指南中的地址均为基于 0 的 Modbus 请求地址。部分应用显示的是基于 1 的寄存器编号,因此配置读取前请确认其编号约定;地址偏移 1 会导致无法返回预期的标记。
请按以下顺序进行发现:
- 从地址
40000读取两个寄存器。预期字为0x5375和0x6E53,即 ASCII 标记SunS。 - 从
40002开始读取 Common 模型 1。 - 从
40070开始读取电表模型。读取 107 个寄存器可获得其模型 ID、长度和完整数据区。 - 读取
40177处的结束标记。
一次 Modbus 请求最多只能读取 125 个寄存器,因此请分别读取 Common 模型和电表模型。客户端应通过发现来获知模型 ID 和长度,而不是对未来的所有模型顺序硬编码一种假设。
整数值与比例因子
SunSpec 整数型数据点使用比例因子。原始整数的换算方式为:
实际值 = 寄存器整数值 × 10^比例因子
例如:
W = 12345
W_SF = 1
实际有功功率 = 123450 W
比例因子会随量程变化。请在每个轮询周期都读取完整的电表模型,使数值与其比例因子来自同一次响应。不要无限期缓存比例因子。
验证情况与当前限制
主机端测试覆盖了模型布局、数值换算、溢出、只读行为,以及针对现有寄存器的回归检查。一台 WEM3080T 测试电表已确认模型 203 的发现和连续读取,并将电压和功率与现有的 HTTP 和 Modbus 接口进行了比对。
其他电表型号以及各个第三方客户端仍需进一步的实机测试。固件 i.91.065.18 已构建、上传并重新下载以做文件校验;本次验证周期并未将该发布文件刷写进设备。
该固件不包含尚在开发中的 TCP 分帧改进。它目前期望在一次接收操作中获得一个完整请求。被拆分或合并的 TCP 请求可能导致连接关闭。请发送一个请求并等待其响应后再发送下一个请求,同时要认识到这并不能消除所有 TCP 分片风险。
在 IAMMETER 部署中的定位
当本地客户端是为了发现和读取 SunSpec 电表模型而构建时,请使用 SunSpec 映射。当应用需要 IAMMETER 专有寄存器时,请使用现有的 IAMMETER Modbus/TCP 寄存器表。现有的本地 Modbus 路径对 Home Assistant 电能表集成 仍然有用,而 HTTP、MQTT 和 IAMMETER Cloud 仍是相互独立的可选方案。
下载固件:i.91.065.18.bin。
升级前,请先确认您的电表型号、连接方式和本地网络访问条件。这是一个只读数据接口;它不提供逆变器控制、写操作,也不宣称具备完整的第三方 SunSpec 互操作性。