老UPS改造实战:一体化采集板+动环监控+干接点告警

发布时间:2026/10/3 6:52:23
老UPS改造实战:一体化采集板+动环监控+干接点告警 老机房的UPS已经服役快八年了电源监控这块一直是块心病。每次巡检只能跑到设备间看面板市电闪断、电池劣化这些关键信息不盯着屏幕根本不知道发生过什么。所以这次我做了一个UPS升级改造核心思路就是把原机的采集板、显示板做成一体化模块同时把网络监控和干接点告警全部配齐。改造完的效果非常直接数据中心机房的动环平台能实时看到UPS的输入输出电压、负载率、电池电压和温度机房房门一开或者电池电量掉到阈值手机马上能收到告警推送。这篇文章就把整个改造方案从原理到实操完完整整写出来给正在被老UPS监控问题困扰的朋友一个可直接抄作业的参考。1. 为什么我把老UPS的监控改造提上日程1.1 老式UPS的三大痛点看不见、管不着、报不了先说我原来那台UPS的实际状况。设备本身没坏输出一直稳定旁路切换也还灵敏但它对外提供的信息几乎等于零。面板上只有几个LED灯和一个LCD小屏循环显示输入电压、输出电压、电池容量这些基础参数。机房的人不在跟前就没有任何渠道知道UPS的状态。这种“看不见”还不是最可怕的真正麻烦的是另外两个问题。第一是“管不着”。机器没有任何远程控制能力遇到需要延时关机或者测试电池的场景必须有人到现场按按键。像我们这种异地机房一趟就是几十公里每次操作成本都很高。第二是“报不了”。老机器上有干接点端子但原厂只给引出了两个告警口一个标FAULT一个标BATTERY LOW功能非常粗。机房盈溢、温度过高、负载过重这类更细的异常状况主机根本没有上报通道。更尴尬的是这两个干接口是直接裸露的跳线端子没有隔离电路我不敢直接往动环采集器上并怕信号串扰把主板干坏。这三件事叠在一起结论就非常清楚了如果还要让这台UPS继续顶几年监控改造是绕不过去的一步。1.2 一体化改造的收益评估既然决定改方案选择就很重要。市面上现成的方案无非是加一个外置UPS监控模块通过串口或USB接UPS再用网口或422总线接到内部网络。我一开始也考虑过直接买一个现成的SNMP卡插上去但咨询后发现三个问题一是老机器的扩展槽位和协议不一定兼容新款网卡二是整卡方案基本固定了功能想同时保留本地显示、干接点扩展和网口上报往往得买两块卡再加一个接口转换盒三是价格实在不算便宜加上改造人工成本比自己做一套一体化方案也省不了太多。权衡下来我决定采用采集板加显示板一体化的自研方案。说白了就是把UPS主板上的电压、电流、电池、温度、工作状态等信号统一引到一个自制的采集板上采集板做数据汇聚、协议解析和逻辑判断显示板负责本地人机交互用LCD屏加按键把关键参数显示出来同时也能设置参数采集板再扩展一路以太网口用于网络监控扩展若干干接点输出用于告警联动。采集板和显示板之间用一组短排线或串口连起来做成一个整体模块放在UPS机箱内部预留的空间里。这个方案的实际收益我算过几笔账。硬件成本方面主控板、显示板、通信芯片加外壳所有物料加起来不到购入整卡方案的六成。功能灵活性方面我想增加模拟量告警、按时段调整告警阈值只需要在代码层面加逻辑不用改硬件。可维护性方面将来主板退役这套监控模块拆下来还能装到下一台设备上复用价值也在。最关键的一点是自己做的东西出了问题随时能改不用求着原厂售后排期。2. 改造前必须弄懂的UPS通信底子2.1 UPS工作原理与可采集的信号地图在动手接任何一根线之前先把UPS的底子摸清楚。UPS的核心功能是当市电异常时把电池的直流电通过逆变器转成稳定的交流电维持负载不断电。主流在线式UPS的工作链路大致是市电输入经过整流器变成直流一路给逆变器供电一路给电池充电市电掉电时电池立刻接替供电通过逆变器继续输出交流电。整个过程里整流器、逆变器、电池充放电回路、旁路电路是几大核心单元监控改造要采集的信号基本都围绕这几块展开。对于采集板来说需要关心的模拟量信号主要分成这么几类输入侧市电输入电压、输入频率、整流器输入电流。输出侧逆变输出电压、输出电流、输出频率、负载有功功率。电池侧电池组总电压、充电电流、放电电流、电池环境温度。状态量市电正常/异常、整流器运行/故障、逆变器运行/故障、旁路接通、电池工作状态充电/放电/浮充、过载状态、风扇停转告警。这些信号在原机主板上有的直接以电压模拟量引出有的只能通过主板自带的通信口如RS232、RS485读取。我这次改造的机器主板上留有一个自定义的12脚排针上面就带了RS232串口信号和几个模拟采样点。这给了我两个选择要么主控板直接读串口数据要么跳开原机协议自己接采样线。实际做的时候我采用了折中方式——用串口作为主要数据源再用模拟采样点做关键冗余和交叉校验这样即使串口协议解析出问题电压、电流这些核心参数也不至于全瞎。2.2 三种主流监控接口干接点、串口、网口改造UPS监控本质上是做一个协议转换和信号汇聚的工作。业内常见的接口有三大类理解清楚才能合理设计一体化模块。第一类是干接点也叫无源触点。两个接线端子之间只有通和断两种状态不传递电压电流适合做告警联动或者状态指示。优点是抗干扰能力强、简单可靠、适配范围广几乎所有的动环采集设备都能识别缺点也很明显不能传具体数值只能表达是或否精度为零。注意干接点的“干”字意思是触点本身不带电接线时绝对不能让外部电压灌到触点上。第二类是串口最常见的是RS232和RS485。RS232是全双工短距离通信传输距离十几米到头适合UPS和控制电脑之间直接连接RS485则是半双工总线支持多台设备并联传输距离可以达到1200米工业现场基本都用它。UPS的串口协议没有统一标准各家各厂都不同这也是很多第三方监控模块兼容性差的原因。第三类是网口标准说法是SNMP或Modbus TCP。这是目前数据中心动环监控的主流接口通过以太网直接接入机房网络动环平台定期用SNMP轮询UPS的MIB信息或者用Modbus TCP读取寄存器数值。好处是组网方便、远程可控性极强、信息量最大坏处是实现复杂度高且对老设备来说往往没有现成网口。我做一体化采集板的时候就把这三种接口全部考虑了显示板负责本地界面和参数配置采集板保留RS485总线出口用于旧动环对接同时增加一路以太网口做SNMP/Modbus TCP服务端再扩展六路干接点输出用于告警联动。这样一个模块就把三类主流方式都占齐了后续无论接到什么系统都不会被卡脖子。2.3 一体化方案的总体设计思路前面说了这么多背景这里把一体化的具体设计思路梳理清楚方便后面照着做。一体化不是简单把两块电路板叠在一起关键在于分工明确、接口干净。采集板是核心承担的任务包括接收UPS主板串口过来的状态数据和模拟量采样信号。完成数据解析、校验、标度变换比如把ADC采到的电压值换算成实际的交流电压数值。运行告警判断逻辑对过压、欠压、过载、电池低压、高温等异常状态做阈值比较。作为数据服务端通过以太网向外部监控平台提供SNMP和Modbus TCP服务。驱动干接点输出继电器对外提供告警触点。显示板是辅助交互层承担的任务包括通过LCD屏显示关键参数支持翻页查看可以实时轮显输入电压、输出电压、负载率、电池电压、温度、运行状态等。提供按键菜单设置本机IP、告警阈值、干接点工作模式等参数这些参数通过内部通信口下发给采集板。显示告警状态和告警历史方便现场人员不用接电脑也能看出发生过什么。采集板和显示板之间通过一条四线的TTL串口连接波特率固定为9600帧格式采用自定义的十六进制协议帧头、数据区、CRC校验一应俱全。这样即使在强电磁干扰环境下通信也能保证数据完整性不会出现花屏或者假参数。3. 采集板显示板一体化硬件怎么搭才稳3.1 核心硬件选型主控芯片选型是整体方案的基石。我选的是STM32F407系列Cortex-M4内核带浮点运算单元主频168MHz片上的资源完全够用四个串口、一个以太网MAC、大量GPIO和ADC通道。选择这款芯片的原因很实在网络协议栈支持成熟lwIP直接用、串口数量能冗余分配、带ADC可以辅助采集模拟量、开发资料多踩坑时容易找参考。显示板用芯片就简单多了STM32F103C8T6小容量版本完全够主要负责键盘扫描、LCD驱动然后通过串口跟采集板打交道。显示屏幕用的是2.4寸TFT LCD面板分辨率320乘240在UPS机箱里这个尺寸刚好嵌入长时间显示也不刺眼。干接点输出部分继电器的选择要特别注意。UPS告警回路往往和外部动环传感器共用一组24V供电继电器触点需要能承受一定切换功率我选的是HF46F超小型继电器线圈驱动电压5V触点容量做到2A/24VDC工程余量充足。继电器的驱动电路还要加续流二极管不然线圈断电瞬间产生的反向电动势容易干扰主控供电这个问题后面踩坑部分会详细说。以太网物理层芯片选的是LAN8720A配合STM32F407的内置以太网MAC用RMII接口连接时钟由外部50MHz有源晶振提供。布线时需要注意RMII接口的信号线等长控制和阻抗匹配实测50MHz差分对跑起来很稳定。3.2 供电与信号隔离设计整个改造方案里最容易出问题的就是供电。老UPS机箱内部空间紧张想从主板上找一个干净、稳定、功率余量足够的电源点并不容易。我这边没有直接从USB接口取电而是选择从原机的5V辅助电源输出端引线。这个5V电源本来是给原机通信板和风扇供电的额定电流不小但必须在进线端加装自恢复保险丝额定值选500mA用来给采集板整套模块供电。采集板的电源拓扑是这样的5V进来之后先过一个共模电感做滤波再到一个DC-DC隔离模块输出两路相互隔离的电源。一路模拟电源给ADC采样电路和传感器供电一路数字电源给主控、网络芯片和继电器驱动供电。两路电源的地也在隔离模块处分开模拟地和数字地单点连接避免采样精度被数字噪声干扰。信号隔离方面干接点输出继电器的触点本身已经是物理隔离的这个不用担心。需要重点处理的是RS485和原机串口的信号隔离。RS485这边使用了ADM2483隔离型收发器内部集成了磁隔离直接解决问题。串口从UPS主板引出的信号也先过光耦隔离再接主控的UART引脚。这样就算UPS主板内部有什么异常电压抖动也不会反向烧掉采集板的核心器件。3.3 显示板与采集板的通信协议约定采集板和显示板之间的通信协议虽然是我自己定义的但设计上不能马虎。一帧数据的格式是帧头0xAA、0x55连续两个字节、命令字、长度字节、数据区、CRC校验高字节、CRC校验低字节。命令字分几类比如0x01是查询实时数据、0x02是设置参数、0x03是告警上报、0x04是清告警历史。实时数据传输的帧内容是按固定结构排列的包括输入电压、输入频率、输出电压、输出电流、负载率、电池电压、充电电流、机内温度各字段使用16位无符号整型单位为V、0.1Hz、A、%、0.01V、0.01A、0.1摄氏度。显示板收到帧头后先把长度字节和CRC校验过一遍校验不通过就直接丢帧并请求重发保证显示数据不会被错乱值污染。参数设置命令要加上写保护密码显示板上进入参数设置菜单前要求输入四位密码。这个细节非常重要因为UPS的参数直接关系到告警阈值的正确性一旦被无关人员误改轻则误报重则漏报。我在这块还做了一个保险机制设置参数时显示板向采集板下发一个0x02命令采集板在存储参数的存储器中写入后回发相同的参数帧显示板收到后把回发的参数显示在确认框里操作员确认无误流程才算走完。4. 网络监控部分把UPS数据送上网4.1 嵌入式网口方案的搭建既然要做网络监控那采集板就必须具备接入以太网的能力。我的办法是在STM32F407上运行lwIP协议栈配合LAN8720A物理层芯片直接把UPS变成一个网络设备。开发时用STM32CubeMX初始化了ETH、RMII接口和MAC地址MAC地址自己分配了一个前三个字节用了本地管理地址范围确保不会和市面上的设备冲突。IP地址采用默认静态地址默认设为192.168.1.200子网掩码255.255.255.0网关192.168.1.1。显示板的菜单里可以修改这些网络参数修改后采集板重启网络接口生效。为了防止断电后配置丢失参数同时备份在片内Flash和外部EEPROM里启动时优先读取EEPROMEEPROM里没有有效标记再读Flash这套双保险机制保证参数不会因为在断电瞬间写Flash失败而丢错。接线方面RJ45网口选用自带网络变压器的类型这样PCB上不需要额外放变压器。RJ45的指示灯接法也需要注意ACT灯接在LAN8720A的LED1输出上SPEED灯接在LED2上通过绿灯常亮来表示物理链路100M已连接黄灯闪烁代表数据在流动这样在现场一眼就能判断网络状态是否正常。4.2 数据协议Modbus TCP与SNMP的取舍采集板作为Modbus TCP服务端我用现成的FreeModbus库改了一套寄存器地址规划如下寄存器40001地址0输入电压寄存器值乘以10存入单位0.1V。寄存器40002地址1输出电压寄存器单位0.1V。寄存器40003地址2负载功率百分比寄存器单位0.1%。寄存器40004地址3电池电压寄存器单位0.01V。寄存器40005地址4机内温度寄存器单位0.1摄氏度。凡是接入动环监控的平台直接向采集板的502端口发起Modbus TCP轮询即可。这套协议的好处是兼容性强几乎所有动环采集网关都原生支持不用装额外驱动。SNMP协议这边需要编写一个私有MIB。由于做的是完整的企业级UPS监控我参考了标准UPS MIB库的命名风格自行定义了一个节点树。MIB里把UPS的输入电压、输出电压、负载率、电池状态、内部温度等全部做了标识并提供服务端返回。轮询间隔根据动环平台习惯设为60秒一次每个SNMP请求都会附带一个系统运行时间戳这样平台可以通过时间戳判断设备是不是卡死没有响应。Modbus TCP和SNMP怎么取舍我的建议是两条路都保留。原因很简单如果动环平台用的是通用的设备接入中间件Modbus TCP往往是最快通路的如果平台偏向使用标准网管体系SNMP更方便直接纳入资产管理和自动发现。采集板的以太网服务线程同时监听502和161端口哪个轮询到达都接受互不干扰。4.3 接入监控平台与移动端推送数据送上网之后真正体现价值的是接入监控平台。我自己团队的运维平台是开源的Prometheus加Alertmanager配合Grafana做可视化。由于没有现成的UPS网关我写了一个小型的网络监控适配器程序用Go语言实现逻辑很简单每30秒向采集板的Modbus TCP端口发起一次读寄存器请求把读回来的数据转成Prometheus指标格式推送到本地Push Gateway再由Prometheus拉取入库。Grafana上的仪表盘我配置了三块内容。第一块是总览面板在一张图上同时画出输入电压、输出电压和电池电压的时变曲线颜色分别用黄、绿、蓝标记。第二块是负载趋势图按小时统计负载率的最大值、平均值用来判断这台UPS是否长期接近满负运行。第三块是事件时间线通过Alertmanager的告警事件驱动把每次告警发生和恢复的时间点展示在仪表盘上配合注释信息一目了然。移动端推送用的是Alertmanager的webhook接口告警触发时发送JSON到飞书自定义机器人。告警等级分成三档WARNING级对应电压越限或温度偏高推送通知但不反复轰炸CRITICAL级对应市电中断超过10分钟、电池电压低于设定值、过载跳闸这类会直接电话语音告警到值班人员INFO级对应告警恢复、电池充满这类状态翻转只在通知栏显示不打扰。这套分级机制上线之后真正做到了重要的事不遗漏琐碎的事不扰人。5. 干接点告警最土最可靠的那条路5.1 干接点的原理与接线网络监控和移动端推送固然现代化但工程现场永远不能只依赖一条路。干接点告警的优点在于不依赖网络、不需要协议解析、连上就能用且是最不挑剔外部设备的信号形式。干接点信号本质上就是一个开关的通断状态外部动环系统只需要检测这两根线之间是否导通就能判断UPS是否处于告警状态。干接点输出端我用了六路继电器全部接成常开触点模式。这意味着平时触点断开告警触发后继电器吸合触点闭合。之所以全部用常开而不是常闭考虑的是故障安全原则如果系统掉电、继电器烧毁或者线断了外部设备检测到的一直是断开状态容易被识别成“无告警”从而误判设备正常。规避方法是对每路告警设置了独立的告警心跳信号。对所有常开触点采集板每5秒强制吸合一次再断开外部动环只要检测到这个脉冲波形就认为采集板本身还活着。接线时需要注意干接点输出端是浮空的没有和采集板的电源地相连。老式动环的开关量采集端口往往自带24V检测电压接上去之后电流从采集端流出经过闭合的继电器触点回到采集端的公共端整个回路不经过采集板的电路。所以即使外部采集设备和采集板之间出现了地电位差也不会形成环流干扰内部的监控逻辑。5.2 告警类型与逻辑设计六路干接点的告警类型我是按照机房应用的优先级设计的通道1市电异常。市电输入掉线或电压超限时触发最重要的告警之一。通道2电池低压。电池组电压低于设定的放电终止阈值时触发通常意味着电池已经深度放电。通道3过载告警。负载率超过额定值的105%持续超过30秒继电器闭合。通道4逆变故障。逆变器报故障或输出电压偏离设定值这个告警触发说明UPS已经无法正常逆变负载随时可能切换旁路。通道5温度异常。机内环境温度超过55摄氏度时触发配合风扇转速判断散热是否失效。通道6综合故障。把充电器故障、通信丢失、霍尔传感器损坏这类非典型异常汇总到一路作为最后的兜底告警。逻辑判断全部放在采集板固件里不依赖外部监控平台。每个告警条件可以单独设置是否启用也可以设置告警触发的延时时间。比如市电异常我设置了5秒的延时因为偶尔发生的10毫秒级别暂降如果立刻告警会产生很多无意义的抖动告警但电池低压不能延时太长1秒内就要立刻上报因为这意味着逆变随时可能终止。5.3 防误报、防抖动的工程细节干接点告警最烦人的问题就是误报。系统刚上线的时候我遇到过半夜三更莫名其妙的市电异常告警第二天去检查又什么都正常。排查到最后问题出在触点抖动和仿真干扰上。第一个问题是继电器触点抖动。继电器吸合瞬间触点会发生几次快速通断的弹跳持续几个毫秒。外部动环设备如果对上升沿敏感就可能把一次动作检测成多次。解决办法是在采集板的固件里对每个继电器的控制引脚做去抖处理触发逻辑经过软件确认后先输出高电平保持50毫秒再关断或者释放原理上就是硬件电路加了RC延时软件上做一个统一的脉冲宽度保证。第二个问题是信号反射。干接点线缆如果走线和强电线路过长容易感应出尖峰脉冲尤其是在UPS机箱这种本身电磁干扰就很强的环境中。我给每路线缆都用了双绞屏蔽线屏蔽层在UPS机箱端单点接地不接动环设备端保持单侧接地以避免地环路。第三个问题是告警回路与数据上报的时序一致性。干接点触发了但网络监控上还没有数据变化这种状态不一致也会让人误判。所以采集板的固件中有一个事件序列号机制每产生一次告警事件就自增一次干接点触发的同时这个序列号也会通过Modbus寄存器对外暴露动环平台如果发现干接点和寄存器值都对上就认为告警真实存在对不上就要怀疑继电器驱动电路有问题了。6. 现场改造实录与调试心得6.1 改造流程与测试清单整个改造从拆机到验收我一个人加一个电工助手前后花了不到一天。前提是机柜顶部有足够的走线空间和散热冗余。流程大致是这样的第一步断电操作。UPS转维修旁路确认输出空开断开电池开关也断开然后用万用表在机箱内部关键端子逐点确认无残余电压。这一步省略不得免得不小心触碰到高压端子。第二步拆原机面板和通信板。把显示面板支架拆下来测量原有空间尺寸。我这个机柜里恰好有一个安装硬盘的托架位空着就把一体化采集板的安装底板加工成和托架孔位一致的形状通过四个M3螺栓固定。安装底板用1.5毫米冷轧钢板切割折弯开好各螺纹孔精度做了简单的模板对孔。第三步接线。把原机主板上的12脚排针引出线逐一识别出串口TX、RX、GND和5V供电点。用热缩管和线鼻子做了绝缘与防拉扯处理。干接点六路线全部穿到机箱侧面的出线孔接上一根多芯屏蔽电缆另一端预留10厘米到动环机柜。第四步上电调试。先不接网线直接用显示板查看各项参数是否正常。确认输入电压显示在215V上下输出维持在220V负载率有数值波动电池电压也正常才接上网线配置IP让机房网络能够访问到采集板的502端口。下面是完整的测试清单大家改造后可以照着执行市电输入侧用调压器做电压拉偏测试输入调到180V和260V确认采集板读数偏差不超过正负3V。拔掉市电输入空开模拟停电观察干接点通道1是否在5秒内闭合同时飞书推送是否到达。用电子负载拉高负载率到108%确认过载告警延时30秒后触发且恢复后自动释放。电池放电测试持续30分钟期间每5分钟记录一次电池电压曲线核对采集板数据与实际万用表差值。网线拔插测试断网后采集板不应出现数据错乱恢复后Modbus TCP和SNMP都能自动正常连接。6.2 我踩过的三个坑第一坑模拟采样干扰导致电压漂移。调试时发现采集板显示的输入电压比万用表实测低了好几伏而且数值一直在跳动。排查了ADC采样电路和滤波电容都没有问题最后发现是给采样板供电的DC-DC模块纹波太大噪声直接耦合到了采样参考电压上。解决办法是把参考电压改用独立的基准源芯片同时加大采样输入端RC滤波的时间常数问题立刻消失。第二坑串口协议解析错位。原机串口输出的数据是每秒钟发一帧每帧包括开头字符、数据体和校验和。刚开始我用了一个简单的串口接收中断把所有字节存进缓冲区然后按固定偏移解析结果频繁出现错位乱数。后来加了状态机解析逐字节匹配帧头校验不过的帧直接丢弃并且连续丢弃超过三帧就反向原机发送唤醒命令重新同步。这个机制稳定下来之后连续跑了三天没有出现异常帧。第三坑继电器线圈干扰让单片机频繁复位。第一版电路板上继电器的驱动管放在主控芯片旁边线圈释放瞬间产生的反向脉冲通过PCB地平面传导导致主控偶尔复位。加上续流二极管之后效果好了不少但为了彻底解决我干脆把继电器驱动管挪到远离主控的区域线圈供电和主控数字电源之间又加了一个磁珠。改完之后连续打了两天疲劳测试复位问题彻底消失。6.3 改造后的运行效果与日常巡检建议改造完成到现在已经正常运行了三个月。最直观的感受是机房值班同事再也不用跑到设备间看灯了。输入电压、电池健康度、负载趋势全部都在大屏和手机上。最值得说的一件事是上个月电网闪了一次市电跌到170V持续了大概6秒接近于失效采集板的市电异常告警在5秒内准确触发飞书推送和干接点信号同时到位机房值班员远程确认了电池供电状态整个过程没有一分钟的慌乱。日常使用这套系统我还是坚持几条简单的巡检习惯。每个月的第一个工作日用显示板的菜单做一次手动电池测试持续放电到电池电压降到设定阈值的80%观察干接点通道2是否正常触发以及恢复是否顺畅顺便记录电池端电压。每个季度拿万用表实测一次UPS输出端子上的电压峰峰值和采集板的读数核对一次确认ADC采样没有因为环境温度老化而出现漂移。每半年把网线和干接点线重新插拔一遍检查端子有没有氧化或者松动迹象。设备老了不可怕可怕的是对它一无所知。把采集显示一体化做好、把告警通道全部打通之后这台老UPS终于从一个“闷头干活的哑巴设备”变成了“随时可以汇报的健康管家”。如果你也在管着机房里的老UPS与其每天提心吊胆不如抽一个周末把这个改造方案落地后面能省下的是数不清的晚上跑机房的时间。