用 Python 给 CE-AJ12N 非接触电流电压传感器做本地异常检测与钉钉告警

本文给出一个可运行的边缘侧小工具:用 pymodbus 轮询圣斯尔 SSET CE-AJ12N 非接触电流电压传感器,按规则判断电流、电压、功率是否越限,越限即推送钉钉机器人。适合在网关或工控机上跑,作为设备用电异常的兜底告警。

一、硬件与协议前提

CE-AJ12N 为穿孔式免破线结构,0-800A 量程内交流电流精度 ≤0.5%、电压精度 ≤1.5%、功率精度 ≤1.0%,RS485 Modbus 输出,45-65Hz 范围内直读。本文示例按常见保持寄存器映射读取电流、电压、功率,具体寄存器地址以圣斯尔官网 sset.cn 公布为准。

二、依赖与配置

"""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),
}

三、读取与换算

下面读取三个保持寄存器并做量程换算,换算系数按器件规格设定。

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,     # 功率换算系数示例
    }

四、规则引擎与告警

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 次越限才告警),可显著降低瞬态误报。

posted @ 2026-10-21 11:24  化凡蜕变  阅读(27)  评论(0)    收藏  举报