制造业数字化的讨论最终总会撞上同一堵墙:ERP 知道应该生产什么,机器知道实际正在发生什么,但两者之间没有任何东西能实时把一方的信息翻译给另一方。这正是制造执行系统(MES)存在的意义——按照 ISA-95 标准,它被定义为 Level 3,介于负责计划的 Level 4 系统与负责现场控制的 Level 1–2 之间。
simpliMES 是 Simplico 针对这一断层给出的答案:一个单一的本地部署 MES 核心,让离散生产(机加工、装配、包装)与批次生产(热处理、化工、连续工艺)运行在同一套数据模型和同一个执行引擎之上,而不是先分别搭建再事后打通。本文将梳理系统实际构建的内容——架构决策、操作员使用体验、数据采集方式,以及系统中唯一的 AI 功能——并明确区分今天已经上线的能力与仍在路线图上的功能。在涉及等保 2.0测评、《个人信息保护法》(PIPL)与《数据安全法》对生产数据的合规要求,以及许多地方政府推动的"智改数转"(智能化改造、数字化转型)专项验收时,这种区分尤为关键。
1. simpliMES 究竟是什么
- ISA-95 Level 3。 它从 Level 4(负责计划、采购、财务的 ERP)接收工单,并驱动 Level 1–2 层的设备执行——PLC、仪表、SCADA。
- 一个厂区一套栈,完全本地部署。 每家工厂运行自己独立的 Docker Compose 栈。不依赖云端,不是多租户 SaaS——即便断网,车间也能继续运转。
- 是产品,不是一次性项目。 与 ERP 的对接只通过连接器契约进行,因此无论是 ERPNext、SAP、Odoo,还是一个 CSV 导入,本质上都只是不同的连接器实现。任何特定 ERP 的假设都不会渗入核心系统。
- 离散与批次共用一套模型。 机加工、装配、包装与热处理、化工、连续批次生产,共用同一套
WorkOrder与工序模型,由同一个运行引擎驱动。
有必要先厘清产品边界,因为 Simplico 在同一领域还有另外两款产品:面向中小制造企业迈出数字化第一步的 SimpliMES Lite 更轻量、部署更快;而simpliFactory的 IMCS/simpliInterface 层专注解决测量数据路由与现场连接问题。simpliMES 则是面向需要在同一系统中完成工单派工、追溯谱系与多协议设备集成的工厂的完整执行与追溯核心。真正确定 simpliMES 实施范围与报价的地方,是 Simplico 的 MES 开发服务页面。
2. 架构:决定一切的设计取舍
| 设计取舍 | 为什么重要 |
|---|---|
| 模块化单体架构 | 只有一个可部署的核心应用(Django),但模块之间的内部边界十分严格——模块之间只通过公开的服务函数和进程内事件总线通信,绝不直接引用彼此的模型。运行简单,改动依然干净可控。 |
| 边缘 I/O 独立成进程 | 设备通信运行在一个独立的异步服务(连接器)中,与 Web 应用的生命周期完全隔离。重启 UI 不会丢失一条数据。 |
| 边缘端 Store-and-Forward | 每一条读数在尝试发布之前都会先写入本地磁盘队列。如果消息代理或核心服务宕机,读数会在磁盘上持续累积,待连接恢复后按顺序重放。数据摄入按 (tag, time) 设计为幂等,重放是安全的。"不丢失生产数据"是一项设计约束,而不是一句口号。 |
| 连接器配置由数据库统一管理 | 核心系统是"每个连接器应该轮询什么"的唯一权威来源。在界面中添加一个标签点位后,后台任务会将完整配置重新发布到一个保留的 MQTT 主题;连接器无需重启即可热加载驱动。连接器同时会把配置缓存到本地磁盘,即使核心系统离线也能启动。 |
| 一套数据模型,两条执行路径 | 工单的 mode 字段为 discrete 或 batch。发布工单时,会根据物料的工艺路线(discrete)或工艺规范(batch)生成工序。同一个运行引擎驱动两者;批次运行还会额外将实时遥测数据与规范限值进行比对。 |
| 按时间而非外键拼接遥测数据与工单 | 传感器读数与运行记录之间没有外键关联。读数是通过以运行的开始、结束事件为锚点的时间范围查询,与对应的运行关联起来的——这种设计能够干净地应对重放与时钟漂移。 |
flowchart TD
ERP["ERP Level4计划层"]
CORE["simpliMES核心 Django领域逻辑"]
MQTT["MQTT消息代理 Mosquitto"]
CONN["连接器进程 asyncio边缘IO"]
TS["TimescaleDB 标签样本"]
PLC["PLC与仪表 OPC UA S7 Modbus"]
ERP -->|"工单"| CORE
CORE -->|"结果与同步日志"| ERP
CORE -->|"发布的配置"| MQTT
MQTT -->|"配置热加载"| CONN
CONN -->|"读数"| MQTT
MQTT -->|"标签事件"| CORE
CORE --> TS
CONN --> PLC
PLC --> CONN
一个厂区由四个进程组成:core(Django——负责界面、API、领域逻辑)、connector(asyncio——负责设备 I/O)、Celery worker 以及 MQTT 消费者。基础设施为 PostgreSQL + TimescaleDB、Redis 和 Mosquitto。core 与 connector 只通过 MQTT 通信,从不直接调用对方的 API——这正是二者能够各自独立重启的原因。
3. 工单与派工
工单可以从 ERP 导入,也可以手动创建。发布工单会根据物料的工艺路线和工序(离散)或工艺规范(批次)生成工序。派工看板按工作中心顺序展示已发布的工作,工序会自动流转——一道工序完工,下一道随即就绪;最后一道工序完成时,整张工单随之完成。
4. 操作员终端:真正的一体机,而非缩小版桌面界面
/execution/terminal/ 是一个无浏览器外框、触屏友好的一体机界面,刻意与后台管理界面分离:
- 终端与工作站一次性绑定,操作员按班次通过工牌或"工号+PIN"验证身份。
- 操作流程为:选择任务和机台,然后开始 → 上报产量或不良品(附原因)→ 暂停/恢复 → 完成。每次点击都会调用一次服务并只重新渲染一个面板——任务过程中不会发生页面跳转。
- 批次运行时,面板会显示实时工艺参数与规范限值的对比——例如保温温度、炉门状态等——数据来自设备在运行期间的遥测。
- 每个操作都是事务性的,会写入审计记录并发布领域事件,完整记录归属信息:哪位操作员、哪个工作站、哪次运行。
5. 自动化数据采集,深度覆盖三种协议
- 目前已上线的三种工业协议: OPC-UA、西门子 S7 和 Modbus TCP/RTU。每个驱动都会将数据归一化为统一的标签模型——包含设备、标签键、原始时间戳、数值或文本值,以及数据质量。
- 读数存入按标签和时间为键的 TimescaleDB 超表。
- 手动录入用于覆盖没有数字接口的设备。
- 带原因代码的停机记录驱动机台的实时状态,并为 OEE 风格的看板提供数据。
这正是我们在别的文章中专门讨论过的协议碎片化问题——大多数车间实际上同时"说着好几种方言"。simpliMES 的边缘连接器,与 simpliFactory 的 simpliInterface 一样,是 Simplico 真正为解决这一问题而构建的桥接层之一。
6. 设备:层级结构、实时状态与真正可用的车间平面图
- 层级结构遵循 ISA-95——厂区、区域、产线、单元、设备——但用通俗语言描述,而非纯标准术语。
- 实时状态看板按区域和连接器分组,自动刷新展示每台设备的当前状态(运行中、空闲、停机、调机)。
- 实时状态由事件驱动,而非轮询获取:一次运行开始会将设备切换为运行中,结束则切换为空闲;开启一次停机会切换为停机(并附带原因),关闭停机后,如果仍有运行在进行,则恢复为运行中。设备模块只需响应总线上的执行事件即可维护这一切。
- 车间平面图展示每台设备的实际物理位置,并按实时状态着色。工程师可以在编辑模式下通过拖拽放置设备,位置信息会作为带审计记录的坐标保存在设备记录中。
- 校准与维护涵盖带到期日期的通用校准记录、维护事件日志,以及每台设备的参考文档(手册、规格书)及其文本提取。
7. 追溯谱系——部分已实现,我们如实说明
物料批次/序列号、消耗记录(工单消耗了什么)以及母子批次链接的数据模型已经构建完成——这是将工单或批次的实际生产过程,追溯回所用物料与设备的基础骨架。仍在为下一个版本搭建中的部分,是运行完成时的自动链接生成,以及正向/反向追溯界面和完整的追溯报告。 如果你的评估依赖于今天就拿到一份完整的追溯谱系报告——尤其是在需要满足"数据不出境"要求、数据需留存在境内系统中备查的场景下——这正是在确定项目范围前应当直接询问清楚的一点。
8. AI Analyze:完全可选、完全本地部署的大模型分析面板
"AI Analyze" 面板出现在运行详情、停机详情、设备详情,以及跨设备的校准页面上:
- 它会针对当前查看的对象生成一份紧凑的结构化摘要——按标签统计的遥测数据、规范限值的越限情况、状态/停机/生产事件、上传参考文档中的摘录——并且从不发送原始采样数据。
- 该摘要会被发送给一个本地运行的 Ollama 模型(默认使用一个 30 亿参数的小模型)。处理任务以后台任务方式运行并带缓存,面板会轮询直至结果就绪。
- 该功能完全可选、完全部署在本地——没有任何数据离开厂区网络;如果本地模型端点不可达,按钮本身就不会出现。这一点在满足《个人信息保护法》《数据安全法》及"数据不出境"相关要求时尤为重要。
- 支持两种方式进行引导:操作员可以添加一段自由文本的关注点说明(例如"为什么废品率突然升高");设备已上传的手册会作为事实依据提供给模型,并明确要求模型优先信任这些文档,而非自身的通用知识。
这与我们此前介绍的、在 simpliSOC 一侧用于读取车间日志的架构模式完全一致——一个小型本地模型读取结构化上下文,生成通俗易懂的摘要,仅作为建议,绝不会对设备进行任何写回操作。simpliMES 的 AI Analyze 面板正是把这一模式落地在 MES 系统内部,聚焦于运行记录、停机与校准,而不是安全告警。
9. ERP 集成:一份连接器契约,而非一个绑定某个 ERP 的核心系统
- 唯一能让 ERP 接触 simpliMES 的方式,是一份统一的连接器契约(
ErpConnector);具体实现自行注册。ERPNext 是参考实现,同时也附带一个通用 REST 连接器。 - 一个按计划执行的拉取任务驱动连接器,并通过主数据与派工服务执行 upsert 操作,每个实体写入一行同步日志——这样一来,单个条目的同步失败就不会被隐藏在批次级别的"成功"提示背后。
- ERPNext webhook 端点接收工单事件,使用等时间比较的共享令牌进行身份验证。
- 仍需特定客户确认的字段映射假设,会直接在代码中标注,并在连接器规格文档中列出——不会留作隐含约定。
10. 报表、两套 Web 体验,以及可实时编辑的设置
- 批次证书与质量证书通过后台任务渲染为 PDF。
- 应用内看板采用服务端渲染的 HTMX 构建,覆盖四类信息板:生产(工单状态、活跃运行、按期/逾期)、设备(运行中/空闲/停机的环形图、当前停机情况)、当日(良品/废品、按原因分类的停机)以及关注事项(逾期校准、同步错误、卡滞的工单)。
- Metabase 以独立容器的形式运行,连接一个只读数据库角色,用于覆盖固定看板无法预见的临时 BI 分析需求。
- 两套界面分别服务两类用户:员工后台——左侧导航、服务端渲染、按角色过滤导航项并附带每项的提示说明——以及前文所述的操作员一体机(无需员工账号即可访问)。
- 可实时编辑的设置页面涵盖 AI Analyze 的模型、URL 与超时设置、厂区身份信息,以及设备或标签变更是否自动发布连接器配置——全部无需重新部署即可生效。
11. v1 已实现的功能,以及有意推迟的功能
明确区分这一点,比任何单一功能本身都更重要——把路线图上的功能当作现有能力来报价,是在实施过程中最快失去工厂信任的方式。尤其是在需要向地方"智改数转"专项验收提交实际功能清单,或应对等保 2.0 测评时,这种诚实的区分至关重要。
v1 已上线: 离散与批次两种模式下的工单派工与执行、覆盖三种协议的自动化数据采集加上手动录入与停机记录、包含实时状态/车间平面图/校准/维护的完整设备层级、基础的追溯谱系与消耗记录追踪、批次证书、应用内看板套件、ERPNext 与通用 REST 集成,以及基于本地大模型的 AI Analyze 面板。
推迟到后续版本: 正向/反向追溯界面与完整追溯报告、通过文件/CSV 及 REST webhook 方式采集数据、过程中质量检查、不合格品与保留处置工作流、完整的 OEE 看板套件、特定标准的合规包(AMS2750、CQI-9 测温)、SPC 统计过程控制、多厂区数据汇总,以及有限产能排程。
常见问题
simpliMES 今天能实现完整的正向和反向追溯吗?
底层数据——批次、序列号、消耗记录、母子链接——今天已经在采集。但查询这些数据的追溯界面和完整追溯报告仍在构建中,计划在下一个版本推出,而非当前版本。
AI Analyze 面板会操作设备或修改设定值吗?
不会。它只读取结构化摘要并生成文本——通俗语言的说明,以及在适用时给出的关注建议。它从不写入 PLC,不调整设定值,也不会自动关闭任何工单或案例。由人来阅读并做出决策。
simpliMES 可以在完全不连接 ERP 的情况下运行吗?
可以。工单可以在 simpliMES 内部手动创建;ERP 连接器是附加能力,并非日常执行运行所必需的硬依赖。
simpliMES 是否自带 SPC 或完整的 OEE 功能?
目前还没有。今天已经可以通过看板信息板和设备实时状态追踪获得 OEE 风格的视图,但完整的 OEE 看板套件和统计过程控制被列入了后续版本的推迟清单。
12. 模拟器与实际演示的路径
代码仓库中自带设备模拟器——OPC-UA 炉子、Modbus 压力机、S7 回火炉——每一个都通过共享注册表驱动数值变化,带有逼真的噪声逐步逼近目标值。此外还有一个 Web 控制面板,支持按信号手动覆盖,以及按设备触发场景按钮(加热、保温、冷却、卡滞、过热)。自动巡航模式会让整个模拟车间在设定时长内经历一系列真实场景,然后将所有设备停回静止状态——这在需要展示一套可运行系统、但背后没有真实工厂的演示、培训或销售会谈场景中非常实用。
13. 部署模型与技术栈,写给真正要运维它的人
每个工厂厂区一套 Docker Compose 栈:core、connector、worker、MQTT 消费者、PostgreSQL/TimescaleDB、Redis、Mosquitto、Caddy 与 Metabase。Caddy 负责 TLS 终结与反向代理;connector 会缓存配置并将读数缓冲到磁盘,因此即便核心系统因维护而下线,厂区也能在不丢失数据的情况下继续运转。
| 层级 | 选型 |
|---|---|
| 核心应用 | Python 3.12、Django 5、Django REST Framework |
| 边缘连接器 | asyncio、OPC-UA/Modbus/S7 客户端库、本地 SQLite 缓冲队列 |
| 消息传递 | MQTT(Mosquitto)——core 与 connector 之间唯一的通信通道 |
| 时序数据 | PostgreSQL + TimescaleDB 超表 |
| 异步任务 | Celery + Redis,配合定时任务处理周期性工作 |
| 本地大模型 | Ollama,可选,本地部署 |
| 界面 | 服务端渲染的 Django 模板 + HTMX,不使用 CDN,不使用前端框架 |
| 报表 | PDF 生成,BI 分析使用 Metabase |
14. 在实际项目中如何落地
simpliMES 并非一款开箱即用的标准化产品,而是按厂区逐一确定范围。Simplico 的 MES 开发服务页面列出了此类项目对应的分级方案、价格区间,以及按周划分的试点路线图。如果你的车间本身就存在多协议、多年代设备混杂的情况——也就是所谓的"多方言车间"问题——那正是 simpliMES 的边缘层被设计用来承接的范围。
如需联系团队,可发邮件至 hello@simplico.net,或拨打电话/WhatsApp (+66) 97 496 6397,亦可通过 LINE ID iiitum1984 联系。
来源:
最新文章
- 深入解析 simpliRecycle:六个应用组成的流水线,如何把废料回收场从过磅一路管到增值税发票 August 29, 2026
- 通行密钥的「注册」才是新的攻击面:Pass-the-Passkey 对身份提供商配置意味着什么 August 22, 2026
- 你的攻击者可能已经是一个 AI Agent 了:OpenAI 与 Hugging Face 事件给 SOC 团队的启示 August 17, 2026
- OCPI 2.2.1 实现指南:如何构建 Locations、Sessions 与 CDR 模块 August 7, 2026
- OCPI 详解:CPO 与 eMSP 要实现电动车漫游充电,究竟需要搭建什么 August 7, 2026
- 你的车间在说五种方言:为什么单靠OPC UA解决不了协议碎片化问题 July 30, 2026