电表参数读取与设置
能读取什么
本页的全部内容都是电表内部参数,不是库的连接参数。两者的区别见配置速查。
设备信息类的字符串参数在设备信息读取,时钟参数在日期时间与校时。
DeviceLayout 的三个字段中,有两个必须从设备读回来:
数据地址表
400C 时区时段数
索引可选顶层字段:索引 1~5 分别读这 5 个字段。
4030 电压合格率参数
索引 1~4 对应四个字段,索引 0 读整个结构。
单值参数
engineering_values
除最大需量周期和滑差时间(有倍率 0,单位 min)外,400D、4010、400E 都是纯计数,没有倍率。对它们调用 engineering_values 会返回:
这是设计取舍,不是缺陷。直接用 data.as<model::UInt8>().value 取原始整数。
最小完整示例
先读布局参数,再读电能:
常用变体
读最大需量周期和滑差时间
这两个有倍率(倍率 0,单位 min):
读电压合格率参数
只读单个上下限
判断接线方式
这是间接判断:计量元件数不等同于接线方式,但 1 个元件基本对应单相。
写参数
AttributeDefinition::writable = true 只表示标准定义了写入能力。实际写入要过三关:
- 客户端 schema:必须在
Client的运行 schema 里显式开放该属性 - 设备策略:设备可能拒绝(如参数越界、厂家锁定)
- 权限:现场设备通常需要授权才能改
写入详情见写参数与执行方法。
请求与响应报文
以下示例固定:SA 六个 00 字节、逻辑地址 0、CA=0、PIID=0、控制域请求 43/响应 C3。
读取时区时段数
请求(400C/2/0):
响应(年时区 1、日时段表 1、日时段 8、费率 4、公共假日 0):
第 4 个字段就是 DeviceLayout::tariff_count 的来源。
读取阶梯数
请求(400D/2/0):
响应(UInt8 4):
读取谐波分析次数
请求(400E/2/0):
响应(UInt8 21):
400E 和 200D/5 不一定是同一个值
400E(谐波分析次数)是电表内部参数,决定设备自己算到什么次数200D/5(最高谐波次数)是谐波对象的属性,声明该对象数组的长度
标准上它们应一致,但设备可能填不同的值。以 200D/5 为准构造 harmonic_order,因为它直接决定数组长度。
读取计量元件数
请求(4010/2/0):
响应(UInt8 3):
读取周休日特征字
请求(4012/2/0):
响应(BitString 8 位):
04 是 BitString,08 十六进制 = 8 位,一个字节 00。
读取电压合格率参数
请求(4030/2/0):
响应(198.0 / 162.0 / 220.0 / 176.0 V):
读单个上下限
请求(4030/2/3,只读合格上限):
响应(UInt16 2200,即 220.0 V):
读取最大需量周期
请求(4100/2/0):
响应(UInt8 15,即 15 min):
读取滑差时间
请求(4101/2/0):
响应(UInt8 1,即 1 min):
写最大需量周期
请求(设为 15):
响应(DAR=3,设备拒绝):
注意:这次 SET 成功了(帧收发正常),但业务上被拒绝(DAR=3)。