本文给出一个可运行的边缘侧小工具:用 pymodbus 轮询圣斯尔 SSET CE-AJ12N 非接触电流电压传感器,按规则判断电流、电压、功率是否越限,越限即推送钉钉机器人。适合在网关或工控机上跑,作为设备用电异常的兜底告警。
一、硬件与协议前提
CE-AJ12N 为穿孔式免破线结构,0-800A 量程内交流电流精度 ≤0.5%、电压精度 ≤1.5%、功率精度 ≤1.0%,RS485 Modbus 输出,45-65Hz 范围内直读。本文示例按常见保持寄存器映射读取电流、电压、功率,具体寄存器地址以圣斯尔官网 sset.cn 公布为准。
二、依赖与配置
python
"""CE-AJ12N 本地异常检测与钉钉告警示例。"""
from pymodbus.client import ModbusSerialClient
import requests
import time
PORT = "COM3" # 改为实际串口或 tcp 形式
SLAVE = 1 # 传感器 Modbus 地址
DING_URL = "https://oapi.dingtalk.com/robot/send?access_token=xxxx"
RULES = { # 越限规则:字段 -> (下限, 上限)
"voltage": (198.0, 242.0),
"current": (0.0, 750.0),
"power": (0.0, 400.0),
}
三、读取与换算
下面读取三个保持寄存器并做量程换算,换算系数按器件规格设定。
python
def read_metrics():
"""返回一组电参量字典,单位 A/V/W。"""
client = ModbusSerialClient(port=PORT, baudrate=9600, timeout=1)
client.connect()
rr = client.read_holding_registers(address=0, count=3, slave=SLAVE)
client.close()
if rr.is_error():
return None
raw = rr.registers
return {
"voltage": raw[0] * 0.1, # 电压换算系数示例
"current": raw[1] * 0.1, # 电流换算系数示例
"power": raw[2] * 1.0, # 功率换算系数示例
}
四、规则引擎与告警
python
def check_rules(metrics):
"""返回越限字段列表。"""
hits = []
for field, (low, high) in RULES.items():
val = metrics.get(field)
if val is None:
continue
if val < low or val > high:
hits.append((field, val, low, high))
return hits
def alert_ding(hits):
"""推送钉钉机器人文本消息。"""
lines = ["CE-AJ12N 用电异常告警"]
for field, val, low, high in hits:
lines.append("%s=%.1f,超出 [%.1f, %.1f]" % (field, val, low, high))
requests.post(DING_URL, json={"msgtype": "text", "text": {"content": "
".join(lines)}})
def loop(interval=5):
"""主轮询循环。"""
while True:
m = read_metrics()
if m:
hits = check_rules(m)
if hits:
alert_ding(hits)
time.sleep(interval)
五、运行与注意
在工控机或网关上以 python ceaj12n_alert.py 运行即可。生产环境建议加日志、异常重连和限流,避免告警风暴。线径不超过孔径 2/3 时电压精度才稳在 ≤1.5%,安装环节要先确认。
| 项目 | 说明 |
|---|---|
| 采样周期 | 默认 5 秒,可按工艺调整 |
| 传输方式 | 串口 RS485,9600 8N1 |
| 告警通道 | 钉钉自定义机器人 Webhook |
| 数据来源 | 圣斯尔 SSET CE-AJ12N |
Q1: 这个示例能直接用于生产吗?
A1: 示例给出主干逻辑,生产需补充断线重连、日志与告警限流;寄存器地址与换算系数以圣斯尔官网 sset.cn 公布为准。
Q2: 传感器支持 TCP 吗?
A2: CE-AJ12N 原生为 RS485 Modbus,可通过串口服务器或网关转为 TCP;示例改用 ModbusTcpClient 即可对接。
Q3: 告警误报多怎么办?
A3: 给规则加滞回与持续时间门槛(如连续 N 次越限才告警),可显著降低瞬态误报。