本系统是一套面向离散制造车间的设备稼动率统计与运行监控系统,由我独立开发,核心目标是用自动采集的真实数据算出设备稼动率,而不是靠人工填报估算。
引入前的主要痛点是:管理者并不清楚设备一天到底运转了多少小时,稼动率只能靠班组长事后填写,数据失真且口径不一;设备大量时间处于待机、空转或故障停机状态却无人察觉,产能被白白浪费;想提升稼动率时,也说不清损失究竟来自待机、故障还是调试停机,改进无从下手。
系统围绕稼动率这一目标提供四块能力:
状态实时采集与看板:通过 MQTT 持续采集设备状态(运行/待机/故障/停机),按车间展示每台设备的当前状态与三色灯,并汇总各状态设备数量,让管理者随时掌握"此刻全厂有多少台在跑";同时对超过 65 分钟未上报的设备判定为离线,防止通讯中断造成的"假运行在岗"拉高稼动率。
状态变化全量留痕:设备每次状态切换都会记录一条带精确时间戳的日志,据此可用相邻日志的时间差还原每台设备在各状态下的持续时长,进而统计任意时间段(当班、当日、当月)、任意维度(单台设备、单车间、全厂)的运行时间、待机时间、故障停机时间及稼动率。
日志查询与追溯:支持按车间、设备、状态筛选查询,既能作为稼动率数据的核对依据,也能直接定位某台设备何时发生故障、持续多久,找出拉低整体稼动率的瓶颈设备与主要损失原因。
异常报文记录与对外接口:无法解析的报文自动留存备查,保证采集不丢数、稼动率不失真;同时提供实时状态与日志探测 REST 接口,可对接车间大屏或 MES 等第三方系统取数。
由此带来的价值是:稼动率从"拍脑袋填报"转变为"系统自动统计",口径统一、可追溯;管理者能清晰看到时间究竟损失在待机还是故障上,从而针对性压缩非运行时间;真实稼动数据也为排产排期、产能评估、班组绩效考核和后续设备投资提供了量化依据。
项目采用 Django 6.0.4 + paho-mqtt 2.1.0 架构,数据库使用 SQLite,前端采用 Django 模板渲染,我独立负责了全部模块的设计与实现。整体分层为:模型层(Workshop、Device、DeviceStatusLog、IngestErrorLog)、服务层(parse_status_message、normalize_status 等解析归一逻辑)、视图层(dashboard、status_logs、API 接口)以及管理命令层(mqtt_consumer)。为了让不同厂商的网关都能顺利接入,状态解析既支持标准 JSON,也兼容 Python 字典字符串、松散对象格式和中文引号自动替换;状态码同时兼容现场实测码(RUN=57、IDLE=58、FAULT=60、OFF=56)与厂商码(62/61/59/63),统一映射后入库,从而支撑"统一接入标准"这一目标。为保障数据可用于追溯与统计,我通过 message_key/seq 字段与数据库唯一约束实现消息幂等去重,避免网关重发产生脏数据;并按 last_seen_at 与 65 分钟阈值判定离线,实现通讯失真识别。开发中的主要难点是 payload 格式不统一导致解析失败、同一状态存在多套码值需归一化、以及去重与过期消息处理,我通过多层解析兼容、统一映射表、事务内先查后写的方式逐一解决,最终实现了稳定运行的设备监控服务。