⚡ 通用可复用方案

能源管理 / 电表数据采集方案

Modbus RTU 电表批量采集 + 采集网关 + TDengine 时序存储 + Grafana 能耗看板 + Node-RED 分时电价计算,适用于工厂/园区/楼宇的能耗监控与电费管理

⚡ Modbus RTU电表 数据源头
📡 采集网关 协议转换
💾 TDengine 数据存储
📊 Grafana 能耗看板
⚙️ Node-RED 电费计算/报警
⚡ 适用:工厂/园区/楼宇 📊 采集:电压/电流/功率/电能 💰 支持:尖峰平谷分时电价 📈 粒度:15分钟~1小时

01 方案背景与适用场景

为什么需要能源管理系统

  • 电费占成本比例高:制造业电费通常占生产成本的5-15%,高耗能行业甚至超过30%,但大多数企业只知道每月总电费,不知道每台设备/每个区域用了多少
  • 浪费看不见:设备空转、空压机漏气、照明未关、空调温度过低……这些浪费加起来可能占总用电量的10-20%,但没有数据就发现不了
  • 分时电价用不好:尖峰电价是谷段的3-4倍,如果能把高耗能工序调到谷段,每月能省不少电费。但没有分时能耗数据,就不知道哪些设备在尖峰时段用电
  • 政策要求:重点用能单位(年综合能耗1万吨标煤以上)强制要求安装能耗在线监测系统,对接政府平台。中小企业也越来越重视能耗管理

适用场景

🏭
工厂车间
按车间/产线/设备分级计量,能耗成本分摊到产品
🏢
园区/楼宇
按楼层/租户/区域计量,物业能耗管理与分户计费
🔋
高耗能设备
空压机/中央空调/电炉等重点设备单独计量,节能改造效果评估
📋
政策合规
重点用能单位能耗在线监测,对接政府平台,满足合规要求

02 系统架构

5层架构,从电表到看板,通用可复用,适用于大多数能源管理场景

01
⚡
电表层
Modbus RTU电表
车间/楼层/设备级电表,支持Modbus RTU协议,RS485总线手拉手连接,每块电表唯一从站地址,采集电压/电流/功率/电能/功率因数
→
02
📡
采集层
采集网关/串口服务器
RS485转以太网,Modbus RTU转Modbus TCP/MQTT,支持多串口(每路最多32块电表),轮询采集,断线重连,本地缓存
→
03
💾
存储层
TDengine
电能数据时序存储,15分钟粒度(电表常见更新周期),自动计算增量用电量,分时电价标记,保留3年以上,支持按区域/楼层/设备多维查询
→
04
📊
展示层
Grafana
能耗总览大屏(当日/当月电费、同比环比、TOP10高耗能设备)、趋势分析、分时电价饼图、设备对比、报表导出(Excel/PDF)
→
05
⚙️
逻辑层
Node-RED
分时电价自动计算(尖/峰/平/谷)、电费日结/月结、超阈值报警(用电异常/功率因数过低)、日报自动生成并邮件发送、数据转发到上级平台
💡 架构设计要点:
  • 分层计量:总表→区域表→楼层表→设备表,四级计量,逐级校验(下级之和≈上级,差值>5%触发报警排查偷电/漏电/计量错误)
  • Modbus RTU是主流:90%以上的工业电表支持Modbus RTU(RS485),成本低(100-300元/块),布线简单(手拉手总线),是最成熟的方案
  • 预聚合是关键:电表数据量大(30块×15分钟×365天=105万行/年),必须做15分钟/1小时/1天预聚合,看板查预聚合数据,查询速度提升100倍
  • 分时电价要配置化:不同地区/不同月份/工作日vs周末/节假日,电价时段都不一样,必须做成可配置的电价表,不能写死在代码里

03 部署要点(关键配置)

01

RS485布线与电表配置

RS485总线手拉手连接(不要星型),总线长度不超过1200米,两端加120Ω终端电阻。每块电表设置唯一从站地址(1-247),波特率统一115200,数据位8,停止位1,校验位无/偶校验。超过16块电表分两路总线

02

采集网关部署

用多串口网关(如ThingsGateway部署在工控机上,或专用串口服务器),每路RS485配置独立的串口参数和从站列表。配置采集点表:每块电表读哪些寄存器(电压/电流/有功功率/无功功率/功率因数/正向有功电能),设置采集频率(功率2秒,电能30秒)。开启本地缓存和MQTT上报

03

TDengine建表与预聚合

创建数据库(保留3年,副本1),创建超级表(标签:电表编号/区域/楼层/设备类型,字段:时间戳+电压+电流+功率+电能+功率因数)。创建连续查询:15分钟预聚合(平均功率/最大电流/电能增量)、1小时预聚合、1天预聚合。创建电价表(时段/单价/月份/日期类型)

04

Node-RED电费计算流程

订阅MQTT电表数据→写入TDengine→每15分钟触发电费计算:查该时段电价(根据时间判断尖峰平谷)→计算用电量(当前电能-上一时刻电能)×电价→累加到日/月电费。每天8点生成昨日电费报表(Excel)→邮件发送。超阈值报警(日用电量同比增长>30%触发)

05

Grafana能耗看板

配置TDengine数据源,创建4个仪表盘:① 能耗总览(当日/当月电费、同比环比、实时功率、功率因数、TOP10高耗能设备);② 趋势分析(日/周/月用电量趋势、分时电价占比饼图);③ 设备对比(同楼层设备用电量对比、单位面积能耗);④ 报表中心(日报/月报/年报,支持Excel导出)

06

数据校验与运维

建立数据质量监控:每块电表在线率/数据完整率/异常值比例,每天自动检查。电表定期校验(每年1次),记录校验误差。备份策略:TDengine每天自动备份到数据盘,保留30天。系统监控:网关/数据库/Grafana进程监控,异常自动重启+报警

04 踩过的坑(真实问题与解决方案)

能源管理项目最容易出问题的是RS485通讯、电能数据类型、分时电价计算,这里是5个真实踩坑

坑 01 RS485总线上挂了20块电表,轮询一遍要10秒,数据更新太慢
原因: 默认轮询间隔太短(100ms),每块电表读10个寄存器,加上通讯延迟(RTU约50ms/次),20块×50ms=1秒,但实际因为串口缓冲区和操作系统调度,延迟翻倍。且轮询顺序不合理,把高频和低频点混在一起
解决: ① 优化采集策略:关键数据(功率/电流)2秒轮询,非关键数据(电能/电压)30秒轮询,分开两个轮询队列;② 增加波特率到115200(默认9600太慢,RTU支持到115200);③ 电表数量超过16块就分两路RS485(每路最多16块,保证通讯稳定性),用多串口网关;④ 用Modbus TCP网关(不是RTU转TCP的透明传输,而是网关内部做协议转换和缓存),上位机直接读网关缓存,速度快10倍
坑 02 电能读数偶尔跳变(从1000度突然变成65535度),导致用电量计算错误
原因: 电表电能寄存器是32位(两个16位寄存器组成),但采集时只读了低16位,高16位溢出后低16位从0开始,读数跳变。或者字节序不对(ABCD vs CDAB),高低字反了
解决: ① 确认电表电能数据类型:是32位无符号整数还是浮点数,寄存器地址是连续的两个还是分开的;② 采集时必须连续读两个寄存器(如40001-40002),在网关或上位机里组合成32位;③ 确认字节序(大端/小端/字交换),用IEEE754工具验证:读一个已知的电能值,看四种字节序哪种对得上;④ 加数据校验:如果增量用电量超过合理范围(如15分钟超过1000度),标记为异常数据,不参与统计,触发报警
坑 03 分时电价计算总是对不上,尖峰平谷时间段和实际收费有偏差
原因: ① 没有考虑节假日(节假日执行谷段电价,不是工作日的分时);② 电表数据时间戳是采集时间,不是电表内部时间,电表时钟不准(快了/慢了几分钟)导致跨时段数据归错;③ 有些地区有"尖峰"时段(夏季7-8月、冬季12-1月的特定时段),不是全年都有
解决: ① 建立完整的电价配置表:月份(哪些月有尖峰)、日期类型(工作日/周末/节假日)、时段表(尖/峰/平/谷的起止时间)、电价(各时段单价),全部可配置不用改代码;② 用采集服务器的NTP同步时间,以采集时间为准(不要用电表内部时间),采集频率设为1分钟(至少5分钟),保证跨时段数据精度;③ 节假日表每年更新一次(国务院办公厅发布的节假日安排),可以手动配置或从API获取;④ 计算电费时用"时间加权":如果一个15分钟区间跨了两个时段,按各时段占用的分钟数比例分摊电费,而不是整个区间归到一个时段
坑 04 Grafana能耗看板加载慢,查询一个月数据要等10秒
原因: 直接查询原始1分钟数据(30块电表×30天×1440分钟=1296万行),Grafana渲染压力大,TDengine查询也慢。且没有做预聚合,每次查询都实时计算
解决: ① TDengine建连续查询:1分钟数据→15分钟预聚合→1小时预聚合→1天预聚合,看板默认查15分钟或1小时预聚合数据,只有看详情才查原始数据;② Grafana设置查询时间范围限制(默认查7天,最多查3个月),超过3个月用日报表;③ 面板加刷新间隔(5分钟,不是实时),能耗数据不需要实时刷新;④ 用TDengine的降采样函数(interval/downsample),在查询时就做聚合,不要把原始数据拉到Grafana再聚合
坑 05 某块电表通讯中断后,恢复时数据出现大段空白,用电量统计少了
原因: 采集网关没有本地缓存,通讯中断期间的数据直接丢了。恢复后从当前值继续采集,但中断期间的用电量(电能表读数差值)无法计算
解决: ① 用带本地缓存的采集网关(如ThingsGateway/Neuron都支持),设置缓存大小和补传策略;② 如果网关不支持缓存,在上位机做"断点续传":通讯恢复后,主动读电表的"上1小时冻结电能"(很多电表支持冻结数据功能),补回中断期间的数据;③ 数据统计时做"差值校验":如果当前读数-上次读数 < 0(电表清零或溢出),用合理估算值(按同时段平均用电量)填充,并标记为"估算数据";④ 加通讯质量监控:每块电表的在线率/丢包率统计,低于95%触发报警,及时排查线路问题

05 分时电价计算逻辑

电价配置表结构(示例)

时段 工作日时间 电价(元/度) 说明
尖19:00-21:00(仅7-8月、12-1月)1.2夏季制冷/冬季取暖高峰
峰8:00-11:00, 13:00-19:001.0白天用电高峰
平11:00-13:00, 21:00-23:000.7过渡时段
谷23:00-次日8:000.35夜间低谷,可安排高耗能工序

电费计算公式

// 某时段电费 = 该时段用电量 × 该时段电价
// 某时段用电量 = 时段结束电能读数 - 时段开始电能读数

// 跨时段处理(时间加权):
// 如果一个采集区间(如15分钟)跨了两个时段,按分钟数比例分摊
// 例:14:50-15:05,其中14:50-15:00是峰段(10分钟),15:00-15:05是平段(5分钟)
// 峰段用电量 = 区间总用电量 × (10/15)
// 平段用电量 = 区间总用电量 × (5/15)

// 日电费 = Σ(各时段电费) + 基本电费(按变压器容量) + 功率因数调整电费
// 月电费 = Σ(日电费) + 其他附加费
⚠️ 注意:以上电价为示例数据,实际电价请以当地供电局公布的为准。不同省份/不同电压等级/不同用电类别(大工业/一般工商业/居民)电价差异很大,且每年可能调整。建议把电价表做成可配置的,每年更新一次。

06 相关软件与工具

需要能源管理或电表数据采集方案?

这个方案是通用可复用的,适用于大多数工厂/园区/楼宇的能耗监控场景。丁丁可以帮你做方案设计、电表选型、RS485布线指导、系统部署、看板定制。