功率因数读取
能读取什么
功率因数是瞬时量,表示有功与视在之比。
与功率对象一样,数组是 总量 + 三相,长度 = wiring == three_phase ? 4 : 2。
数据地址表
功率因数是
Int16,符号有明确含义
线上值 894 是 0.894(倍率 -3),1000 就是 1.000。符号含义:
没有符号的功率因数在工程上是无意义的,只取绝对值会丢失容性/感性判断。用 Int16 解析,不要用 UInt16。
单位枚举是 255(无单位),unit_symbol 会返回空字符串,这是正确行为,不是缺陷。输出时自己补 PF 或留空。
最小完整示例
常用变体
只读总功率因数
判断容性还是感性
ScaledNumber::raw 是 variant<int64_t, uint64_t>,功率因数落在有符号分支:
与功率交叉校验
两者偏差超过几个百分点时,先确认功率的单位和倍率(W 还是 kW),再看设备是否配置了错误的互感器变比。
请求与响应报文
以下示例固定:SA 六个 00 字节、逻辑地址 0、CA=0、PIID=0、控制域请求 43/响应 C3。
读取总功率因数
请求(200A/2/1):
响应(Int16 894,即 0.894):
03 7E = 894,乘以 10^-3 得 0.894。数据类型 10 是 Int16,与功率的 05(Int32)不同。
读取功率因数数组
请求(200A/2/0):
响应(四项 Int16):
解析:01(Data)→ 01(数组)→ 04(4 项):
B 相的 FC 90 是补码表示的 -880(0x10000 - 0x0390 = 0xFC90),这正是符号位生效的地方。decimal_text 会输出 -0.880。
读取 A 相功率因数
请求(200A/2/2,索引 2 = A 相):