谐波与波形失真度
能读取什么
四个对象分成两组:
谐波和失真度是两回事:
- 谐波含有量:每个次数的含量(%)
- 波形失真度(THD):全部次数合成的总失真度(%),由各次含量算出
设备一般两者都提供,但不一定同时提供。
数据地址表
谐波含有量对象
谐波对象是唯一一类相别放在属性号上的对象:
没有 1 次(基波)项。基波通常就是额定频率,不作为谐波统计。
属性类型与倍率
DeviceLayout::harmonic_order 决定
数组长度 = harmonic_order,不是 harmonic_order - 1。结构是「1 项总含有量 + (harmonic_order - 1) 项各次谐波」:
必须先读设备属性 5(最高谐波次数)再构造布局,否则长度校验一定失败。
最小完整示例
常用变体
先确认最高谐波次数
这是读谐波前的第一步:
engineering_values
engineering_values 只处理有数值倍率的属性。属性 5(最高谐波次数)、4010 计量元件数等是纯 UInt8 计数,对它们调用会返回:
这不是错误,是设计取舍。要读这类属性直接取 Data 里的原始整数。
读总含有量
order 传 0 取总含有量(索引 1):
一次读某相全部次数
索引 0 读整个数组:
遍历三相
读波形失真度
波形失真度用 phase_oad,相别在索引里(与谐波不同):
请求与响应报文
以下示例固定:SA 六个 00 字节、逻辑地址 0、CA=0、PIID=0、控制域请求 43/响应 C3。
本节响应做了简化:真实设备属性 2 的数组长度是
harmonic_order(最高 21 项),这里只列出前 3 项以便阅读,实际报文长度以设备返回为准。
读取 A 相总电压谐波含有量
请求(200D/2/1):
响应(Int16 320,即 3.20 %):
读取 A 相 2 次电压谐波
请求(200D/2/2):
响应(Int16 125,即 1.25 %):
读取 A 相电压谐波数组
请求(200D/2/0):
响应(前 3 项 Int16:总 320、2 次 125、3 次 0):
解析:01(Data)→ 01(数组)→ 03(3 项):
读取 B 相 3 次电流谐波
请求(200E/3/3,属性 3 = B 相,索引 3 = 3 次):
响应(Int16 215,即 2.15 %):
读取最高谐波次数
请求(200D/5/0):
响应(UInt8 21):
15 十六进制 = 21 十进制,即最高 21 次谐波,数组长度也是 21。
读取电压波形失真度
请求(200B/2/0):
响应(三项 Int16:2.15 %、1.98 %、2.07 %):