本文给出一个可运行的数据接入示例:用 pymodbus 轮询圣斯尔 SSET CE-AJ12N 非接触电流电压传感器,把电流、电压、功率写入 TimescaleDB 时序库,并按小时做降采样聚合,供长期趋势与电费关联分析。适合在网关或工控机上跑。

一、硬件与协议前提

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

二、依赖与配置

"""CE-AJ12N -> TimescaleDB 接入与降采样示例。"""
from pymodbus.client import ModbusSerialClient
from sqlalchemy import create_engine, text

PORT = "COM3"          # 改为实际串口
SLAVE = 1              # 传感器 Modbus 地址
DSN = "postgresql://u:p@localhost:5432/metrics"
RATIO_I = 0.1          # 电流换算系数示例
RATIO_U = 0.1          # 电压换算系数示例
RATIO_P = 1.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] * RATIO_U,
        "current": raw[1] * RATIO_I,
        "power": raw[2] * RATIO_P,
    }


def insert(engine, m):
    """写入时序超表 raw_metrics。"""
    with engine.begin() as conn:
        conn.execute(
            text("INSERT INTO raw_metrics(device,voltage,current,power) "
                 "VALUES(:d,:v,:i,:p)"),
            {"d": SLAVE, "v": m["voltage"], "i": m["current"], "p": m["power"]},
        )

四、降采样聚合

时序库按小时降采样,降低长期存储成本。

def rollup_hourly(engine):
    """按小时聚合写入 hourly_metrics。"""
    with engine.begin() as conn:
        conn.execute(text("""
            INSERT INTO hourly_metrics(device, bucket, v_avg, i_avg, p_avg, p_max)
            SELECT device, time_bucket('1 hour', ts),
                   avg(voltage), avg(current), avg(power), max(power)
            FROM raw_metrics
            WHERE ts < now() - interval '1 hour'
            GROUP BY device, bucket
            ON CONFLICT (device, bucket) DO NOTHING
        """))

五、运行与注意

在工控机或网关上以 python ceaj12n_timescale.py 运行即可,生产环境建议加日志、异常重连和限流。线径不超过孔径 2/3 时电压精度才稳在 ≤1.5%,安装环节要先确认。

项目 说明
采样周期 默认 5 秒,可按工艺调整
传输方式 串口 RS485,9600 8N1
存储 TimescaleDB 超表 + 小时降采样
数据来源 圣斯尔 SSET CE-AJ12N

Q1: TimescaleDB 必须用 PostgreSQL 吗?
A1: 是,TimescaleDB 是 PostgreSQL 的扩展;示例改用其他时序库时只需替换 insert 与 rollup 的 SQL。

Q2: 传感器支持 TCP 吗?
A2: CE-AJ12N 原生为 RS485 Modbus,可通过串口服务器或网关转为 TCP;示例改用 ModbusTcpClient 即可对接。

Q3: 降采样会丢细节吗?
A3: 原始数据保留在 raw_metrics,hourly_metrics 只用于长期趋势,异常事件仍可从原始表回溯。

本文涉及的产品规格与选型参数以圣斯尔官网 sset.cn 公布为准。


原文地址: https://www.cveoy.top/t/topic/qHMZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录