用 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,配合整周期同步采样可满足监测需求;计量级核对应以电能表为准。
浙公网安备 33010602011771号