做工业数字化这些年,我一直有个体会:真正能落地的项目,往往不是那些大而全的平台,而是把一个大问题拆成一个小场景,用最轻的方式先跑起来。空压机行业就是这样。
空压机这个设备,在工厂里存在感很低,平时没人注意,但一旦停机就很要命。电费单上,压缩空气系统常年占整个厂区总能耗的10%~30%;设备科最怕的不是零件损耗,而是非计划停机——一台55kW的螺杆式空压机突然跳机,整个车间的气动工具、气力输送、气缸抓手全部停摆,损失的是一个班次的产量,金额远超过一次保养费用。
我们团队用数熵ED这套轻量化边缘数字化应用引擎,为空压机行业做了一款微信小程序工具,名字就叫“空压机百宝箱”。目标很简单:把空压站的运行监控、异常报警、维保管理、能耗分析这些能力,以一个小程序的形式装进运维人员的手机里。扫码即用、免安装、更新无感,这是它和传统工业APP最大的区别。这篇文章就把这个项目从需求拆解到落地交付的全过程梳理一遍,包括方案选型、功能设计、小程序开发的工程细节,以及那些只有到现场才会踩到的坑。
1. 项目背景与需求拆解
1.1 空压机行业的运维现状:被忽视的“电老虎”和“停摆王”
先聊清楚为什么选空压机这个行业切入。工业现场的设备五花八门,但空压机有几个非常鲜明的特点,让它成为轻量化智能运维的最佳试验田。
第一,它属于高能耗设备。空压站的能耗通常要占到工厂总电费的10%到30%,一个中等规模的制造基地,空压机一年的电费可能就是百万级别。但大多数人只关心空压机能不能用,很少关心它有没有在最优效率区间运行,很多工厂的空压机常年处于“开着就是满负荷”的状态,哪怕没有用气需求也在空载运行,这里面的浪费非常可观。
第二,它是连续生产的关键节点。空压机一旦跳机,全厂的气动设备都会受影响。和电机、水泵这类“停了还能等一下”的设备不同,压缩空气是不能断的。真正常见的情况是:空压机偶尔报警,维修师傅根据经验判断“还能撑一撑”,结果某天夜里突然停机,第二天早上车间全线停产,这时候才开始翻通讯录找服务商。
第三,维保信息极度分散。每台空压机的保养记录、故障代码、备件更换周期,往往散落在纸质巡检表、Excel表格、服务商的售后微信里。设备管理员想查一台机器的历史故障,需要翻半天资料。这直接导致维修决策没有数据支撑,很多故障都是“这次修完下次还犯”。
这些痛点叠加在一起,本质上指向一个问题:空压机需要的不只是“能监控”,而是一套围绕设备全生命周期的小型运维管理系统。系统必须足够轻,因为真正的使用者是车间设备管理员和维修班,他们不可能抱着厚厚的操作手册去点一个工业级大平台。
1.2 目标用户与需求清单:三类人三种诉求
做产品之前,我们先列出了三类关键用户,他们的诉求差异很大,这决定了小程序的功能设计不能是“一刀切”。
| 用户角色 | 核心诉求 | 最关注的功能 |
|---|---|---|
| 设备管理员 | 减少非计划停机,掌握设备运行状态 | 实时监控、异常报警、运行趋势 |
| 维修班成员 | 快速定位故障,高效完成巡检保养 | 故障代码、报修流程、巡检二维码 |
| 能源管理科/厂长 | 控制能耗成本,量化运维效益 | 能耗分析、比功率趋势、报表导出 |
当时我们到几个工厂去蹲点调研,发现一个很有意思的细节:设备管理员确实需要数据,但他们每天不可能一直盯着电脑屏幕看组态画面;维修师傅天天跑现场,但他们根本不关心“负荷率”这种指标,只想扫个码就能看到这台机器的报警历史和保养记录。这让我下定决心,一定要做移动端优先的产品,而且操作路径要足够短。
需求清单最后整理成四个模块:运行监控、报警推送、维保闭环、能耗分析。后来在版本迭代中又加了一个“百宝箱”式的知识库模块,把说明书、操作视频、故障代码速查表都塞进去,这也是“空压机百宝箱”这个名字的由来。
2. 数熵ED产品定位与整体方案设计
2.1 数熵ED到底是什么:不止是一个开发框架
说到数熵ED,很多不熟悉的人会以为它只是个低代码平台或者一个小程序模板。我们在落地过程中对它的定位是:一套面向设备侧的轻量化边缘数字化应用引擎。
按照我们项目里的理解,数熵ED解决的核心问题是工业互联网领域的一个老矛盾——大平台太重,单点工具又太散。传统的工业互联网平台通常要部署一整套IoT平台、数据中台、组态工具,前期投入大、实施周期长,最后做出来的东西可能只是一个大屏看板,真正用在日常运维里的功能寥寥无几。而数熵ED的做法是把“数据接入—边缘计算—业务应用”这条链路压缩成一站式的解决方案,计算规则可以下放到边缘侧执行,前端以轻量应用为载体交付,这次落地在微信小程序上,天然具备跨平台和免安装的优势。
在空压机这个场景里,数熵ED承担了三个角色:设备数据采集器、报警规则引擎、业务逻辑服务器。数据从空压机控制器或边缘网关上来之后,先在边缘侧做清洗和阈值判断,有效数据再推到云端或本地服务器,小程序通过接口获取数据并渲染。这样做的好处是,即使外网断掉,现场的报警判断和本地历史存储依然能正常工作,这是空压站这种工业现场非常看重的可靠性。
2.2 为什么是“小程序”而不是APP、网页或大屏
技术上能实现同样功能的方案很多,但产品形态的选择直接影响用户愿不愿意用。我在这个项目里对四种形态做了详细对比:
| 形态 | 优点 | 缺点 | 落地成本 |
|---|---|---|---|
| 原生APP | 功能最完整,体验流畅 | 需要应用商店审核、安装包更新、跨平台开发成本高 | 高 |
| PC网页 | 适合看板展示、数据分析 | 完全不适合巡检和手机端应急查看 | 中 |
| 工业大屏 | 领导参观有面子,实时性好 | 终归是“给别人看的系统”,运维人员不常用 | 高 |
| 微信小程序 | 免安装、扫码即用、触达成本低 | 包体限制,无法直接操作底层硬件 | 低 |
最后选了微信小程序,除了免安装这个显而易见的优势,还有两个很现实的原因。
第一个原因是微信的“扫一扫”天然适合工业巡检场景。空压机上贴一个二维码,运维师傅拿手机扫一下就能看到这台设备的档案、实时数据和历史故障,完全符合现场工人的使用习惯,不需要任何培训。第二个原因是消息触达。微信小程序可以通过订阅消息把报警信息直接推送到责任人手机上,这在工厂场景里非常关键——不需要让工人额外装一个APP并且把它设成允许通知,微信通知的到达率和使用习惯是现成的。
当然,小程序也有它的边界。比如它不能常驻后台跑状态机,复杂的离线计算还得靠边缘网关;再比如微信的包体限制导致我们不能塞入过大体积的图表库和文档资源。这些限制在方案设计前期就要想清楚,后文我会展开讲对应的处理办法。
2.3 整体架构与“百宝箱”功能矩阵规划
整个项目的架构遵循“端—边—云—应用”四层,但在落地时做了大量轻量化裁剪。
设备层,也就是空压机本体,我们通过空压机控制器自带的RS485接口或网口,用Modbus RTU/TCP协议采集排气压力、排气温度、运行电流、累计运行时间、加载/卸载状态等核心参数。对于没有控制器通讯协议的老旧机型,加装一个带有4~20mA模拟量采集和DI/DO开关量输入功能的数据采集器,用物理接线方式把传感器信号接进来,同样能实现数据上云。
边缘层,这是数熵ED比较有优势的地方。边缘网关不单纯做数据透传,它内置了轻量级的计算规则引擎,可以在断网时独立完成阈值报警判断和本地缓存。当网络恢复后,再把缓存的补传数据交给上层。
平台层和应用层,服务端负责设备管理、用户权限、报警规则配置、数据分析汇总,前端输出到一个微信小程序。小程序内部不是一上来就给用户看一堆曲线和表格,而是按“一机一档”逻辑来组织,用户扫码后先看到一个单台设备的健康总览,然后才点进详情看趋势、报警、保养、图纸等具体信息。
功能矩阵规划如下:
- 设备档案:每台空压机的基础参数、品牌型号、启用日期、关联备件列表。
- 实时监控:电流、压力、温度、加载状态,支持所有设备列表切换。
- 报警管理:实时报警、历史报警、报警确认流程,支持订阅消息推送。
- 维保管理:保养计划、到期提醒、巡检扫码、工单流转。
- 能耗分析:实时功率、日/月电量、比功率趋势、多台机负载对比。
- 知识库:说明书PDF、操作视频、常见故障代码速查。
这个矩阵看起来不大,但每个模块背后都有对应的业务逻辑。下一部分挑几个核心功能展开讲,顺便说说我们踩过的技术坑。
3. 核心功能落地与实操拆解
3.1 设备接入与实时监控:Modbus点位表是最大的拦路虎
这个项目里,设备接入看起来是最“标准”的活,实际上是最折腾人的环节。空压机控制器品牌五花八门,有些是进口品牌自带封闭协议,有些是国内厂商基于Modbus开发的,点位表不一定对外公开,更没有标准格式可言。
我们的做法是拿到一台机器先做通讯摸底测试。用USB转RS485线连上控制器,逐个测寄存器地址,确认哪些地址能读到压力、温度、电流这些关键数据。这里要特别提醒一点,Modbus的寄存器地址和实际点位表不是一回事,地址偏移、数据格式(int16、int32、float)、字节序(大端小端),任何一个地方弄错,读出来的数据都是乱码。我们在接入一台国产螺杆机的时候,厂家给的点位表上写着“排气温度地址40021”,实际调试发现正确的Modbus地址是0x0021减去1,折腾了半天才反应过来。
设备数据上来之后,前端展示设计也要考虑空压机行业的阅读习惯。我们没有用传统工控组态那种模拟管道和阀门的动画效果,而是直接上卡片式数字面板,一台设备一张卡片,显示排气压力、排气温度、运行电流、运行状态(运行/加载/卸载/停机)、累计运行时间。运维人员最关心的是这些数值有没有超过阈值,所以数字颜色会随状态变化,正常是深灰,超限是红色,边缘状态是橙色。
实时刷新频率也是一个需要权衡的点。空压机是连续运行设备,不是变化极快的瞬态工艺,我们最终把刷新频率设置为3秒轮询一次,配合边缘侧的阈值触发,既能控制在微信性能和流量消耗的合理范围,又能保证看到的数据基本是实时的。没必要追求毫秒级,那只会增加成本,没有实际价值。
3.2 报警与故障诊断:规避“狼来了”式告警
报警模块是整个小程序里最受运维人员欢迎、也最容易做砸的部分。做砸的原因通常是告警太多太LOW,一个压力轻微波动就推一条消息,一天推几十条,最后大家把消息提醒直接屏蔽,真正的严重故障反而没人看见。
我们在数熵ED上配置报警规则时,没有简单设一个上限值,而是用了三层判断逻辑:阈值条件、持续时间、变化趋势。比如排气温度报警,不是温度涨到105℃就立刻报警,而是先发出“预警”,持续30秒仍然超限才生成正式报警事件;如果温度在1分钟内上升超过15℃,则直接判定为快速上升异常,即使当前数值还没到上限也要报警。这套规则非常有效,一件事从“被看见”到“被确认”形成完整闭环。
报警推送用了微信小程序订阅消息。这里有个常见的坑,微信小程序订阅消息的模板需要提前在公众平台申请,而且用户必须主动订阅一次才能收到后续通知。很多开发者在用户第一次进入页面时就弹窗要求订阅,结果用户点了拒绝,后面就再也收不到报警了。我们在产品上做了一个小设计:用户扫码进入某台设备的页面后,系统先提示“开启这台设备的报警推送”,并给出一段说明,让用户明确订阅的意义,同时提供“本次”和“总是保持以上选择”两种选项,订阅率大幅提升。
还需要提一下报警确认闭环。报警推送到小程序后,责任人需要点击“确认”按钮表示已知悉,如果超过15分钟没人确认,系统会自动升级通知到直属主管。这一步是后期和工厂设备科负责人共同设计的,他们说以前报警信息发到群里就石沉大海,有了这个确认机制,才能真正把设备管理的责任压实。
3.3 巡检维保闭环:从纸质巡检到扫码闭环
空压机的保养是周期性刚需,油气分离器、空气滤清器、润滑油,都有明确的更换周期。但现实是,很多工厂的保养记录形同虚设,纸质表格填没填都没人管,到了该保养的时候没人提醒,最后变成故障停机才更换。
“空压机百宝箱”里的维保模块,核心设计是“一机一码”结合“到期提醒”。每台空压机生成一张专属二维码,贴在电控柜门上,扫码后小程序自动识别设备编号,展示该设备当前的保养计划,包括下一次保养时间、已经运行的累计小时数、上次保养时间和责任人。现场师傅做完保养后,在手机上拍照上传、填写更换件型号和参数,工单状态自动从“待执行”变更为“待验收”,再由设备管理员确认闭环。
这个流程的价值在实施三个月后开始显现。其中一个项目的设备管理员说,以前他们压根不知道两台空压机的保养周期差了多久,经常出现一台超期服役、一台过度保养的情况。现在系统会根据累计运行小时数自动计算保养到期日,提前7天推送给负责人,他只需要在手机上确认和分派任务,维保工作从“靠记忆”变成了“靠系统”。
顺便说一个现场实施时容易忽略的细节:二维码贴纸一定要用防油防水耐磨的材质,空压机房温度高、油雾重,普通A4纸打印的二维码贴上去两周就模糊得扫不出来了。我们第一次试点时就用了普通标签纸,结果第二个月回访发现大部分二维码已经失效,后来统一换成覆膜PVC硬标牌才解决。
3.4 能耗分析:比功率才是空压机效率的“照妖镜”
能耗分析模块是我们和能源管理人员沟通时反复打磨出来的。他们一开始提的需求是“要看每台空压机的用电量”,但单纯看电量意义不大,因为不同机型的排气量不同,运行时间也不同。我们最终引入了空压机行业最核心的能效指标——比功率,也就是产生单位体积压缩空气所消耗的电能,单位是kW/(m³/min)。
比功率的计算并不复杂:用空压机输入功率除以实际排气量。实际运行中,输入功率可以从电参数模块直接读,排气量则有两个来源,一是空压机控制器内部计算值,二是外装流量计。对于大多数工厂来说,用控制器自带的排气量数据就够做管理参考了,精度虽然比不上流量计,但趋势判断和横向对比完全够用。
小程序端做了两个维度的能耗视图:单机趋势和多机对比。单机趋势展示一台空压机过去24小时、7天、30天的功率曲线和比功率曲线,方便判断这台机器是否处于健康运行区间;多机对比用柱状图显示各台设备的比功率排行,差距一旦拉大,往往意味着某台机器存在滤清器堵塞、润滑油老化、主机磨损等问题。
这里要特别说明,能耗分析模块不要太追求计算精度,因为目的不是做电费结算,而是做健康状态判断和运行优化参考。我们第一次尝试把所有电参数损耗都算进去,弄得又复杂又容易出错,后来简化成“输入功率/排气量”这个核心公式,配合负载率一起看,反而现场使用者反馈最好。
3.5 “百宝箱”知识库:把经验沉淀到手机里
“百宝箱”除了是一个工具集合,还承担知识库功能。我们发现空压机运维的一个普遍问题:故障代码查不到、说明书找不到、老工程师的经验传不下来。有些进口品牌的控制器报警代码全是英文缩写,很多维修师傅看不懂。
知识库模块收录了三类内容:设备说明书和操作手册PDF、常见报警代码对照表、维保操作短视频。这部分的开发工作量不大,但需要花时间做内容整理。我们在项目上线前专门找工厂的维修班长一起梳理了几台主力机型的常见故障,每一个故障都写清楚“可能原因”“检查步骤”“处理方法”,做成卡片式条目,既可以直接看,也可以在小程序内搜索。
有个意外的收获是,维修师傅对短视频的接受度远超我们的预期。我们发现一段手机拍的“更换油气分离器”的2分钟视频,在一周内被看了上百次。后来我们要求实施人员在每次维保服务时录制操作视频,经客户允许后上传到知识库,慢慢形成了一个很有价值的设备维护内容库。
4. 小程序开发工程细节避坑实录
4.1 技术选型:uniapp还是原生微信小程序
关于技术栈,这是团队内部争论最多的问题之一。我们最终选择了uni-app作为跨端框架,主要原因是这套产品后续还可能输出到支付宝小程序和抖音小程序,用uni-app可以最大程度复用业务代码。但如果你是纯微信生态项目且团队时间紧张,直接写原生小程序也完全够用,开发工具链和调试体验反而更加省心。
用uni-app做微信小程序,有几个细节必须提前规避。第一个是条件编译,如果将来要考虑多端发布,从一开始就要规范使用#ifdef MP-WEIXIN这种条件编译语法,否则后面拆分的代价很大。第二个是uni-app的生态组件和微信原生组件之间的兼容问题,比如scroll-view在iOS上滚动惯性明显不如原生组件流畅,复杂的列表页面我们干脆用了原生页面结构来承接。
我建议在项目初期就固定一套组件库方案,不要今天换个图表库明天换个UI库。小程序包体限制是2MB,虽然现在可以通过分包扩展到20MB,但包体越大加载越慢,工业现场的网络环境通常并不好,保持轻量是第一原则。
4.2 动态设置标题和顶部导航栏适配:颜值细节要注意
小程序开发里一个容易被忽略但直接影响体验的细节是页面标题和导航栏。设备详情页如果没有动态设置标题,所有设备都显示同一个页面名称,用户分不清自己在看哪台机器。必须在页面加载拿到设备数据后,调用wx.setNavigationBarTitle把标题改成“1号空压机-运行监控”,这个操作要放在接口回调里,不要在页面初次渲染就执行。
顶部导航栏的适配在安卓和iOS上表现不一致。微信小程序的胶囊按钮(右上角那三个点)在iOS上距离顶部约44px,在安卓上约48px,如果自定义导航栏,必须用wx.getMenuButtonBoundingClientRect()动态计算胶囊位置,再推导出导航栏高度和占位视图高度。我们第一次上线时偷懒写死了高度,结果一批安卓机顶栏文字和胶囊重在一起,被客户当场截图,非常尴尬。
还有一种常见的调整是“新进入时的加载页面”,也就是通常说的启动屏/loading页。如果项目想要一个好看的开屏效果,可以用onLoad里控制变量显示一个自绘的加载动画,但要注意别让用户等待太久。我们在首屏加载时只请求设备列表核心数据,其他统计数据异步拉取,保证扫码进入后2秒内能看到主要信息。
4.3 从weixin://dl/business到业务跳转:链接生成与触发的避坑
小程序里经常会用到web-view组件跳转到外部H5,或者通过微信的开放链接跳转到公众号文章、微信客服。最常见的是需要跳转到微信公众号图文资料时,可以直接拼接weixin://dl/business/?t=xxx这类链接。这里避坑的关键在于,这类链接只能在微信内置浏览器里被识别,如果在外部浏览器或调试工具里打开就是无效链接,所以在生成跳转入口前务必判断当前环境是否是小程序或微信环境。
另外,动态链接里如果带参数,参数中包含&、=、?等符号,一定要提前做encodeURIComponent编码。我们有次把设备的报警详情通过URL参数传给H5页面,参数里刚好有一串带等号的base64字符串,结果H5页面收到的是被截断的数据,排查了大半天才发现是链接没编码。同理,在小程序里通过getCurrentPages()获取路由参数时,如果参数被微信自动转成百分号编码,要先decodeURIComponent再使用。
小程序之间跳转用wx.navigateToMiniProgram,这个接口要求appid在白名单内,需要在微信公众平台后台配置跳转信任关系,而且正式版小程序跳转需要经过用户点击授权,不能直接代码里静默触发。测试时需要先在开发版/体验版里调试好appid,否则上线后才发现跳不过去就晚了。
4.4 联调与抓包:把小程序和边缘服务的口径对齐
整个系统联调阶段,最让人头疼的是小程序端和边缘服务之间的接口联调。小程序发起请求到服务端,这个链路里只要有一层网络代理或防火墙策略,就可能导致请求被拦截或响应被篡改。
遇到接口数据对不上,我的习惯是先抓包再看代码。PC端的微信开发者工具自带网络面板可以直接查看请求和响应,但真机调试时的请求不会自动展示在开发者工具里,可以借助Charles这类工具做手机代理抓包。具体做法是让手机和电脑连同一个局域网,手机WiFi代理指向电脑IP,然后用Charles安装证书解密HTTPS流量。需要注意,微信小程序的请求域名必须是HTTPS,并且在微信公众平台后台配置request合法域名,否则真机调试时直接报“url not in domain list”。
还有一个很容易踩的坑是局域网内抓包时,手机系统时间必须和电脑一致,否则证书校验会失败,Charles抓到的全是SSL错误。我们有一次花了整整一个下午排查这个问题,最后发现是手机和电脑时间差了十几分钟。
4.5 小程序与边缘侧通信:断线重连和缓存策略
空压站现场的WiFi信号通常不可靠,设备端口网络拥堵也是常事,小程序端请求边缘服务时必须做好容错设计和缓存策略。我们的服务端返回的每一条设备实时数据都带一个timestamp字段,小程序端根据时间戳判断数据是否新鲜,超过30秒没有更新就在卡片上显示“离线”或“数据延迟”,避免运维人员看到旧数据误以为是当前状态。
轮询接口失败时的重试策略也很关键。不能用“请求次数无上限”的重试逻辑,否则网络一抖,每个用户每分钟给服务器打几百次请求,很容易把边缘网关打挂。我们采用了指数退避策略:第一次失败后等待1秒重试,第二次等2秒,第三次等4秒,最多重试到5次就不再轮询,转而提示用户下拉刷新。这套策略在项目上线后帮我们扛住了一次边缘服务重启的突发状况。
如果是停机、报警这类需要立即感知的事件,轮询显然不够及时。处理方式是边缘侧主动通过WebSocket或MQTT推送消息,小程序在前台时维持WebSocket长连接,退到后台后自动断开,由微信订阅消息兜底推送。这里要注意,小程序的WebSocket连接是有超时机制的,而且App进入后台几十秒就可能被系统挂起,所以长时间保活不可行,必须设计“前台长连接+后台订阅消息”的双通道方案。
5. 常见问题与排查技巧实录
5.1 高频问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 小程序页面白屏 | 域名未配置/证书过期/接口崩溃 | 开发者工具看Network面板 | 配置合法域名,检查服务端日志 |
| 设备显示离线 | 边缘网关断网/数据上报超时 | 检查网线、网关运行指示灯 | 网关异常后自动重启,恢复后补传数据 |
| 报警消息收不到 | 用户未订阅/模板审核未通过 | 查看订阅消息授权记录 | 优化订阅引导,重新提交模板 |
| 定位或扫码在个别机型失效 | 二维码太小/清晰度不足 | 用手机相机测试识别 | 更换PVC标牌,提高二维码尺寸 |
| 页面滚动卡顿 | 数据量过大/图片未懒加载 | 查看Performance面板 | 分页加载,压缩图片 |
| 历史报警记录缺失 | 时间筛选条件不对/数据库被清理 | 检查接口传参 | 统一时间字段格式,增加数据备份 |
5.2 告警风暴:规则引擎的“降噪”实践
告警风暴是设备联网项目上线初期一定会遇到的问题。有一家试点工厂,第一周接了12台空压机,平均每天产生400多条报警消息,大部分是压力波动、加载频率过高这类边缘性告警,设备管理员直接崩溃,把小程序提醒关了个干净。
这个问题的根源不是报警功能做错了,而是初始阈值设置太“理论化”。比如空压机排气压力,设备铭牌上写着额定0.8MPa,但实际工艺允许范围可能只有0.6到0.75MPa,如果按照铭牌值设报警,那这台机器一天到晚都在报警。我们后来调整策略,上线两周内先进入“观察模式”,所有报警只记录不发推送,等积累了两周真实运行数据后,再按实际运行分布的5%和95%分位值来设定报警阈值,这样报警量一下降到一个合理水平。
另外,对同类型设备可以做“告警聚合”,比如同一空压站的三台机器同时出现“排气温度偏高”,就不需要推三条消息,而是聚合为一条“空压站1号站3台机组排气温度偏高”,减少信息轰炸。
5.3 多厂区多角色权限怎么设计
一个空压机服务商通常管理着几十个工厂的几百台设备,而每个工厂的设备管理员只能看到自己厂区的数据;超级管理员需要看到全局。我们最开始只实现了“设备级”权限,结果联调的时候发现厂商售后工程师需要按服务区域查看设备,工厂主管又需要审批维修工单,整个权限模型越搞越复杂。
最后落地时用了“组织—角色—设备组”三层权限模型。组织对应服务商或集团,角色分为超级管理员、厂区管理员、维修工程师、普通巡检员四类,设备组则是按项目或物理位置创建的集合。用户在微信小程序登录后,服务端根据JWT鉴权解析出用户可访问的设备组列表,每次请求设备数据时都做一次权限校验,避免越权访问。这个模型并不复杂,但必须在一开始就设计好,如果上线后再改,权限数据的迁移和用户重新绑定非常麻烦。
5.4 现场网络受限:离线可用性是底线
有些工厂的机房里压根没有外网,边缘网关只能上内网。刚开始我们试图说服客户开放一个外网端口,后来发现安全合规部门根本不会同意。最后采用的方案是局域网部署模式:边缘网关和数熵ED服务部署在客户内网,小程序在工厂内通过内网地址访问服务,出了厂区则无法实时查看。在这个模式下,报警推送改用企业微信或邮件渠道,但移动端只能查看缓存的历史数据。
这个方案虽然牺牲了远程实时性,却换来了极佳的稳定性和数据安全。客户不再担心数据出域,我们也不用疲于应对各种网络策略变更。做工业项目要理解一个事实:稳定安全的死板,比灵活花哨的失控更让客户放心。
6. 落地效果与可复制经验
6.1 效果数据:一个典型案例的变化
以某个实施了三个月的制造基地为例,一共接入12台空压机,涵盖3个品牌,配置了6类报警规则,建立32项保养计划。上线三个月后,我们对运行数据做了量化对比:
- 非计划停机次数从上季度4次降到1次,且这唯一一次也提前1小时收到了报警推送,产线提前调整了生产计划。
- 平均排气压力明显趋于稳定,原来波动范围在0.55~0.85MPa之间,现在稳定在0.62~0.75MPa,初步估算节电占比约为5%。
- 维保工单执行率从不足60%提高到95%,后台有完整的电子化记录。
- 比功率排行发现一台老旧机组的能效比新机组低6%,客户据此制定了淘汰替换计划。
当然,这些数据是试点期的阶段性结果,距离“全生命周期最优”还有距离,但方向和路径已经清晰了。
6.2 推广路径:先单点突破,再横向复制
这个项目给我的最大启发是,工业数字化产品千万不能指望一次上一个大而全的系统,尤其在传统制造企业,推行阻力会非常大。“空压机百宝箱”的打法是先单点突破,选择客户最痛的一台或几台设备,用一周时间完成接入和上线,让车间主任和维修师傅实实在在体会到“报警主动推送”和“巡检扫码闭环”带来的变化,再推动扩大到整个空压站。等空压站跑顺了,再谈能不能把同样的模式和方案复制到水泵、风机、冷却塔这类设备上。
对小程序的传播也是如此。我们做了“设备分享卡片”,把一个空压机的运行状态卡片分享到微信群里,其他管理人员点开后可直接预览数据,想长期看就扫码绑设备。这个功能大大降低了产品推广门槛,很多新设备是工厂之间口口相传带过来的。
6.3 给后来者的实施建议
如果你是准备做类似轻量化智能运维项目的团队,我在这个项目里积攒了几条值得反复回味的建议:
第一,需求调研一定要下现场,坐办公室里设计不出能用的设备管理软件。哪怕只是跟着维修师傅巡检半天,你也能发现真实操作逻辑和画原型图时的想象完全不同。
第二,报警阈值务必用真实数据训练,不要拍脑袋。先记录观察两周,再按数据分布设定阈值,这是避免告警风暴最有效的方式,没有之一。
第三,边缘侧的可靠性远比云端功能重要。空压站的网络随时可能断开,边缘网关的本地判断和缓存补传能力,是整套系统的生命线。
第四,二维码标牌虽然不起眼,却是整个系统的入口,别省这个钱,从第一天就用高品质的覆膜标牌。
最后再分享一个我在这个项目里印象最深的小事。试点工厂有一位干了二十多年的维修老师傅,刚开始他对小程序非常抵触,说“我用耳朵听就知道空压机有没有毛病”。后来有一次他在办公楼休息,手机突然弹出报警推送,赶到车间一看,果然是油气分离器压差过大导致排气温度异常,提前避免了跳机。从那以后他成了“百宝箱”最积极的使用者,还主动帮我们录了一段更换油分的操作视频放进了知识库。
这件事让我更坚信一个判断:智能运维不是用数据去替代老师傅的经验,而是用数据把老师傅的经验放大、沉淀、传承下去。轻量化的产品形态只是敲门砖,真正有价值的是让运维这件事变得更有交付感,更可持续。