3、数据采集架构设计:边缘层设计、网关层设计、平台层设计
各位同行,咱们今天聊点实在的。MES系统能不能跑起来,数据采集架构是命脉。我见过太多项目,MES软件选型花了几百万,结果设备数据上不来,最后成了个“人工录入系统”。说白了,数据采集架构就是打通设备到MES的“最后一公里”。
我个人习惯把数据采集架构分成三层:边缘层、网关层、平台层。这三层各司其职,又紧密配合。你想想看,如果只有边缘层,数据就烂在车间里;如果只有平台层,那数据就是无源之水。咱们一层一层拆开看。
3.1 边缘层设计:靠近设备的“触手”
边缘层是什么?就是直接跟设备打交道的那些硬件和软件。PLC、传感器、扫码枪、RFID读写器,这些都算。边缘层的核心职责就两个:数据采集和指令下发。
我在项目中遇到过最头疼的事,就是设备协议五花八门。西门子的S7协议、三菱的MC协议、Modbus RTU、OPC UA……每个设备厂商都有自己的“方言”。边缘层要做的就是把这些方言翻译成统一的“普通话”。
边缘层核心职责:
- 数据采集:从设备寄存器、内存区、传感器接口读取实时数据
- 协议转换:将设备私有协议转换为标准协议(如MQTT、OPC UA)
- 指令执行:接收平台层下发的控制指令,写入设备寄存器
- 本地缓存:网络中断时,数据暂存本地,恢复后自动补传
嗯,这里要注意。边缘层不是越智能越好。我见过有人把边缘计算节点搞成一台服务器,结果车间高温高湿,半年就坏了。边缘层设备要满足工业级要求:宽温、防尘、抗震动。说白了,它就是个“吃苦耐劳”的角色,别指望它干太多脑力活。
3.2 网关层设计:承上启下的“枢纽”
网关层是三层架构里最容易被忽视的一层。很多人觉得,设备数据直接发到平台不就行了?为什么要多一层网关?
我告诉你为什么。车间里可能有几百台设备,每台设备每秒产生几十个数据点。如果全部直连平台,平台会疯掉的。网关层的作用就是做数据汇聚和流量削峰。
网关层的典型部署方式有两种:
| 部署方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 车间级网关 | 设备数量50-200台 | 管理方便,故障隔离 | 单点故障风险 |
| 产线级网关 | 设备数量10-50台 | 延迟低,可靠性高 | 部署成本高 |
我曾经在一个汽车零部件工厂踩过坑。当时图省事,把所有设备都连到一个网关。结果一台焊机出故障,疯狂发错误报文,直接把网关搞宕机了。整个车间数据全断了。后来我学乖了,每个产线独立部署网关,互不影响。
网关层设计要点:
- 支持断线重连和自动补传机制
- 具备数据过滤能力,剔除异常值和重复数据
- 支持边缘计算,比如简单的数据聚合(求平均、计数)
- 预留足够的计算资源,别卡在协议解析上
3.3 平台层设计:数据汇聚的“大脑”
平台层就是MES系统本身,或者更准确地说,是MES的数据服务层。它的职责是接收网关层上报的数据,做清洗、存储、分析,然后提供给MES的业务模块使用。
平台层要处理的核心问题有三个:
- 数据吞吐量:一个中型工厂每天可能产生上亿条数据记录,数据库扛得住吗?
- 数据一致性:设备上报的时间和MES记录的时间对得上吗?
- 数据时效性:从设备采集到MES界面显示,延迟控制在多少秒以内?
我个人习惯用消息队列(比如Kafka或RabbitMQ)来做数据缓冲。网关层把数据扔到队列里,平台层慢慢消费。这样即使MES系统短暂宕机,数据也不会丢。
避坑指南:
我曾经在项目里直接用数据库做数据接收,结果设备数据量一上来,数据库连接池直接爆了。后来改成消息队列+批量写入,才解决问题。记住:不要让设备数据直接写入数据库,中间一定要加一层缓冲。
3.4 三层架构的交互流程
这三层是怎么配合的?我画了一张图,你看完就明白了。
你看这个图,数据是从下往上流的。设备数据先到边缘层,边缘层做初步处理后发给网关层,网关层汇聚后再发给平台层。反过来,控制指令是从上往下流的。平台层下发指令到网关层,网关层路由到对应的边缘节点,边缘节点再写入设备寄存器。
这里有个关键点:每一层都要有缓存机制。边缘层断网了,数据先存本地;网关层宕机了,边缘层的数据不能丢;平台层重启了,网关层要能重连补传。我见过最惨的项目,就是没做缓存,车间停电半小时,数据全丢了,生产报表对不上,最后只能人工补录。
三层架构交互的核心原则:
- 松耦合:每一层独立部署,互不影响
- 异步通信:尽量用消息队列,别用同步调用
- 数据完整性:每一条数据都要有唯一ID,方便追溯
- 时间同步:所有设备、网关、服务器统一NTP时间源
嗯,说到时间同步,我再啰嗦一句。很多项目里设备时间不准,导致MES里的生产记录时间线和实际对不上。我建议在边缘层就加上时间戳,别等到平台层再打时间。设备本地时间可能不准,但边缘层网关的时间是准的,用网关时间覆盖设备时间,这样最靠谱。
最后总结一下。数据采集架构设计,说白了就是解决“数据从哪里来、怎么传、存哪里”的问题。边缘层负责“采”,网关层负责“传”,平台层负责“存和用”。三层各司其职,缺一不可。你设计的时候,别想着一步到位,先跑通一条产线,验证了架构的可靠性,再逐步推广。我在项目里就是这么干的,稳得很。
公众号:蓝海资料掘金营,微信deep3321