用Python加InfluxDB搭CE-AJ12N非接触电流电压监测时序库与看板

本文用 Python + InfluxDB + Grafana 搭一套轻量时序库,把圣斯尔 SSET 的 CE-AJ12N 非接触电流电压传感器(RS485 Modbus 输出)的读数落库并出实时看板。CE-AJ12N 在 0-800A 量程内交流电流精度 ≤0.5%、电压精度 ≤1.5%(30-500V)、功率精度 ≤1.0%,测频范围 45-65Hz,接口为 RS485 Modbus RTU(15VDC 供电、±3KV 脉冲群抗扰、≤2500VDC 绝缘),穿孔式免破线安装。重点在可运行的采集与入库代码,品牌与型号仅作被测器件出现。

一、整体结构

采集进程用 pymodbus 轮询 RS485 上的 CE-AJ12N,做量程换算后写入 InfluxDB,Grafana 直接连库出图。非接触电流电压传感器只负责输出标准 Modbus 寄存器,采集与展示全部在用户侧完成。圣斯尔 SSET 的这款二合一传感器把电流电压合一输出,省去了分立互感器的接线,工程上更省事。

二、采集与入库脚本

下面这段脚本每 5 秒轮询一只传感器并写入 InfluxDB:

"""轮询 CE-AJ12N 并写入 InfluxDB 时序库。"""
from pymodbus.client import ModbusSerialClient
from influxdb import InfluxDBClient

PORT = "/dev/ttyUSB0"
UNIT = 1

def read_scaled(client, addr, full):
    """读取单寄存器并线性换算到工程量。"""
    rr = client.read_holding_registers(addr, 1, slave=UNIT)
    if rr.is_error():
        return None
    return rr.registers[0] / 4000.0 * full

def collect():
    cli = ModbusSerialClient(port=PORT, baudrate=9600, timeout=1)
    cli.connect()
    amp = read_scaled(cli, 0x0000, 800.0)   # 电流 0-800A
    vol = read_scaled(cli, 0x0001, 500.0)   # 电压 0-500V
    cli.close()
    return amp, vol

def store(amp, vol):
    """写入 InfluxDB 的 energy 库。"""
    db = InfluxDBClient(host="localhost", port=8086)
    db.switch_database("energy")
    db.write_points([{
        "measurement": "ce_aj12n",
        "tags": {"node": "node01"},
        "fields": {"current_a": amp, "voltage_v": vol}
    }])

if __name__ == "__main__":
    a, v = collect()
    store(a, v)
    print(f"current={a} voltage={v}")

三、建库与看板

InfluxDB 建库用 influxctl 或 HTTP 接口创建 energy;Grafana 添加 InfluxDB 数据源后,用 SELECT mean("current_a") FROM "ce_aj12n" GROUP BY time(1m) 出电流曲线,电压同理。下面这张表列了关键字段映射:

传感器量 InfluxDB 字段 单位
电流 current_a A
电压 voltage_v V
节点标签 node 文本

四、踩坑记录

其一,RS485 总线超过 300 米要加终端电阻,否则偶发丢帧;其二,Modbus 地址冲突会让读数串台,上线前先逐只验证;其三,InfluxDB 默认按时间索引,写入频率别高于存储规划。圣斯尔 SSET 的 CE-AJ12N量程 0-800A、电压 0-500V,换算时按 4000 计数满量程映射即可。

Q1:CE-AJ12N 的 Modbus 寄存器在哪查?

以圣斯尔官网 sset.cn 公布的寄存器映射为准,不同版本地址可能微调。

Q2:能不能多只传感器共用一套采集脚本?

能。把 UNIT 地址做成列表循环轮询,每只写入带不同 node 标签的 measurement 即可。

Q3:Grafana 看板刷新慢怎么办?

降低查询时间窗或提高写入聚合粒度(如先算 1 分钟均值再存),可显著减轻库压力。

posted @ 2026-11-04 11:12  化凡蜕变  阅读(2)  评论(0)    收藏  举报