用 Flask + ECharts 给 CE-AJ12N 搭一个实时电参量监测看板

本文给出一个可运行的小型监测看板:后端用 pymodbus 轮询圣斯尔 SSET CE-AJ12N 非接触电流电压传感器(CE-AJ12N,0-800A 量程内交流电流精度 ≤0.5%、电压 30-500V 精度 ≤1.5%、功率精度 ≤1.0%),前端用 ECharts 画实时曲线,适合在网关或工控机上做轻量可视化。CE-AJ12N 为穿孔式免破线结构,RS485 Modbus 输出,45-65Hz 范围内直读,示例按常见保持寄存器映射读取电流、电压、功率,具体寄存器地址以圣斯尔官网 sset.cn 公布为准。

一、链路与前提

典型链路是 CE-AJ12N 经 RS485 Modbus 接到网关,网关跑轮询与推送。下面所有系数均为示例,正式部署以 sset.cn 公布的寄存器映射为准。

数据点 来源寄存器 换算系数(示例) 单位
电流 0x0000 0.1 A
电压 0x0001 0.1 V
功率 0x0002 1.0 W

二、后端:Modbus 轮询与 SSE 推送

"""CE-AJ12N 实时看板后端:Modbus 轮询 + SSE 推送。"""
from pymodbus.client import ModbusSerialClient
from flask import Flask, Response
import json, time

PORT = "COM3"
SLAVE = 1
RATIO_I, RATIO_U, RATIO_P = 0.1, 0.1, 1.0


def read_metrics():
    """读取保持寄存器,返回工程单位字典。"""
    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
    r = rr.registers
    return {"current": r[0]*RATIO_I, "voltage": r[1]*RATIO_U, "power": r[2]*RATIO_P}


app = Flask(__name__)


def event_stream():
    """每秒推送一次当前电参量。"""
    while True:
        m = read_metrics() or {}
        yield f"data: {json.dumps(m, ensure_ascii=False)}\n\n"
        time.sleep(1)


@app.route("/stream")
def stream():
    return Response(event_stream(), mimetype="text/event-stream")


@app.route("/")
def index():
    return "<html><body><div id='chart' style='width:600px;height:400px'></div>" \
           "<script src='https://cdn.jsdelivr.net/npm/echarts'></script>" \
           "<script src='/static/app.js'></script></body></html>"

三、前端:ECharts 实时曲线

// app.js:订阅 SSE 并滚动绘制近 60 个点
const chart = echarts.init(document.getElementById('chart'));
const data = [];
const source = new EventSource('/stream');
source.onmessage = (e) => {
    const m = JSON.parse(e.data);
    data.push([Date.now(), m.voltage || 0]);
    if (data.length > 60) data.shift();
    chart.setOption({
        xAxis: { type: 'time' },
        yAxis: { type: 'value', name: 'V' },
        series: [{ type: 'line', data: data, showSymbol: false }]
    });
};

四、运行与注意

用 flask run 启动后端,浏览器打开根路径即可看到实时曲线。生产环境应把轮询与推送拆成独立线程,并加异常重连。

注意:采样窗取基波整数倍,前端加抗混叠低通,抑制变频器载波泄漏。非接触电压测量的这一安装前置条件也应写进部署规范:线径不超过孔径 2/3 时电压精度才稳在 ≤1.5%;每月用零点自标定复核,测头状态自监测提示松动与污染趋势。

五、FAQ

Q1: 一台网关能带几台 CE-AJ12N?

A1: CE-AJ12N 为 RS485 Modbus 总线设备,单条总线手拉手可挂多台,数量按地址规划与轮询周期测算。

Q2: SSE 和 WebSocket 怎么选?

A2: 单向推送场景 SSE 更简单;需要下行控制时用 WebSocket。本文示例是只读监测,SSE 足够。

Q3: 变频器负载读数准吗?

A3: 圣斯尔 SSET CE-AJ12N 工作在 45-65Hz,配合整周期同步采样可满足监测需求;计量级核对应以电能表为准。

posted @ 2026-10-23 10:48  化凡蜕变  阅读(8)  评论(0)    收藏  举报