智能微电网项目选电能质量分析仪,硬件能力只是一半,另一半是软件集成能不能把告警、复费率、事件记录这些功能用起来。这篇从开发者角度讲 Smart X96-5S 的软件对接要点。
数据采集层:一次轮询拿全参数
微电网监控需要持续采集一组参数,软件轮询周期建议 1~2 秒:
POLL_INTERVAL = 1.0 # 秒
def poll_cycle(client):
data = {
"timestamp": now(),
"voltages": read_three_phase(client, REG_VOLTAGE),
"currents": read_three_phase(client, REG_CURRENT),
"power": client.read_long(REG_ACTIVE_POWER),
"frequency": client.read_float(REG_FREQUENCY),
"pf": client.read_float(REG_POWER_FACTOR),
"thd_v": client.read_float(REG_THD_V),
"thd_i": client.read_float(REG_THD_I),
}
save_to_timeseries_db(data)
return data
所有数据落到时序数据库,做趋势分析和越限判断。
24 通道越限告警的软件配置
Smart X96-5S 硬件支持 24 通道越限告警,但阈值要在软件侧或设备本地配置。典型配置:
ALARM_THRESHOLDS = {
"voltage_high": 253.0, # 过压, V
"voltage_low": 198.0, # 欠压, V
"current_over": 100.0, # 过流, A
"thd_v_high": 5.0, # 电压THD越限, %
"thd_i_high": 8.0, # 电流THD越限, %
"freq_high": 50.5,
"freq_low": 49.5,
"unbalance": 2.0, # 三相不平衡, %
}
def check_alarms(data):
triggered = []
for param, threshold in ALARM_THRESHOLDS.items():
value = data[param.split("_")[0]]
if abs(value - threshold) > ABS_THRESHOLD:
triggered.append((param, value, threshold))
return triggered
告警既可以在设备本地硬件触发(DO 输出或内部记录),也可以在 EMS 软件侧做二次判断。生产环境建议两层都做:设备本地快速响应,EMS 侧做长期趋势和通知。
SOE 事件记录读取
Smart X96-5S 内置 30 条 SOE(Sequence of Events)事件记录。软件侧要定期拉取:
SOE_BASE = 0x0200 # 事件寄存器基址
def read_soe_log(client):
events = []
for i in range(30):
addr = SOE_BASE + i * 4
seq = client.read_register(addr)
timestamp = client.read_long(addr + 1)
event_code = client.read_register(addr + 3)
events.append({
"seq": seq,
"time": timestamp,
"code": event_code,
})
return [e for e in events if e["seq"] != 0xFFFF] # 过滤空记录
SOE 带毫秒级时间戳,是故障溯源的关键数据。软件侧按时间排序,结合波形记录,可以还原事件全过程。
复费率配置
Smart X96-5S 支持一套复费率方案,最多 6 个时区、10 个时段。软件配置接口:
TOU_CONFIG = {
"time_zones": 6,
"time_periods": 10,
"periods": [
{"start": "00:00", "end": "08:00", "tariff": "valley"},
{"start": "08:00", "end": "22:00", "tariff": "peak"},
{"start": "22:00", "end": "24:00", "tariff": "valley"},
]
}
def write_tariff_config(client, config):
"""写入复费率时段配置"""
for i, period in enumerate(config["periods"]):
start_min = to_minutes(period["start"])
end_min = to_minutes(period["end"])
client.write_register(REG_TOU_START[i], start_min)
client.write_register(REG_TOU_END[i], end_min)
client.write_register(REG_TOU_TARIFF[i], tariff_id(period["tariff"]))
不同时段电量分别累计,EMS 读取后做峰谷电费核算。
DI/DO 联动
设备带数字量输入输出,软件侧编程:
def on_di_change(client, di_state):
"""数字输入状态变化回调"""
if di_state == TRIPPED:
client.write_single_coil(RELAY_DO, ALARM_ON) # 触发DO输出
log_event("breaker_tripped")
notify_ems("断路器跳闸")
DO 可以直接驱动外部告警灯或联动其他设备,不用 EMS 远程发指令,本地响应更快。
L 型号扩展:温度和漏电
Smart X96-5S-L 多两路安全监测数据:
def read_safety(client):
return {
"temperature": client.read_float(REG_TEMP),
"residual_current": client.read_float(REG_RCD),
}
def check_safety(data):
if data["temperature"] > 70:
trigger_alarm("overtemp", data["temperature"])
if data["residual_current"] > 300: # mA
trigger_alarm("leakage", data["residual_current"])
温度超限预警电缆过热,漏电超限预警人身安全。这两路数据直接进告警链路。
微电网监控软件集成架构
Smart X96-5S ──Modbus──> 采集服务 ──> 时序数据库
│
├──> 告警引擎(越限/SOE/温度/漏电)
├──> 复费率电量统计
├──> 波形存储(事件触发)
└──> SCADA/EMS平台展示
一台设备把计量、谐波、告警、复费率、事件记录、安全监测全做了,软件侧按数据类型分模块对接就行。