ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PLC数据采集上云全解析:从边缘网关到工业物联网平台的分层架构实战

PLC数据采集上云全解析:从边缘网关到工业物联网平台的分层架构实战 干工厂自动化的朋友应该都有这种体会最常被业务部门问的一句话就是“设备的状态数据能不能实时看到”“今天生产了多少、停机多久、能耗多少能不能自动汇总”早年我们的常规做法是现场接SCADA或者组态软件把PLC的数据读出来画在厂区的监控大屏上。但能看到的范围基本就限制在车间局域网里一旦想跨厂区、做集团级的集中监控或者给数据分析团队喂实时数据这套老架构就卡住了。把PLC数据采集并上云这件事本质上是把原来封闭在车间里的数据链路通过边缘网关和物联网平台延伸到云端。整个方案涉及PLC通信协议、边缘网关选型、MQTT传输、云端物联网平台、时序数据库存储再到可视化报表和告警是一条完整的技术链路。我后续会把这套架构拆成几个层次结合我做过的实际项目把每一层的选型思路、参数计算、常见坑位都讲清楚。这套东西适合自动化工程师、物联网开发者和工厂信息化负责人参考它解决的核心问题就是让设备数据从“只看本地”变成“可控、可算、可用”。1. 从PLC到云端整条链路为什么必须分层设计1.1 先搞清楚PLC数据上云到底难在哪PLC本身是个很“封闭”的设备。西门子、三菱、欧姆龙、施耐德、汇川、信捷各家通信协议不一样寄存器地址规则不一样甚至同一家不同系列差别也很大。最传统的方式是用组态软件比如WinCC、组态王、力控通过驱动把数据点读进上位机。这个模式稳定但有一个明显边界数据到了上位机之后怎么出去如果只是局域网看监控没问题一旦要上云就会遇到三个非常现实的问题。第一个问题是协议不统一。SCADA系统里的点表通常绑定在上位机软件里导出JSON或者CSV很费劲而且上位机本身不能长期稳定地扮演“数据中转站”重启、死机、授权过期都会打断数据链路。第二个问题是网络边界。车间里的PLC一般都在独立的工业网段办公网、互联网和它是隔离的硬把PLC暴露到公网端口的操作风险非常大这件事我强烈不建议做。第三个问题是数据压缩和断线续传PLC本身不会缓存历史数据网络只要抖一下这段时间的数据就丢了云端补不回来。所以从PLC到云端的链路不能只是一根网线捅到公网必须设计成分层结构把“读数据”、“转数据”、“存数据”这三个职责拆开各管一段边界清晰了问题才可控。1.2 分层架构的三大块采集层、网关层、平台层我实际落地的时候把链路拆成三层边缘采集层、边缘网关层、云端平台层。边缘采集层的核心任务是对接现场PLC把设备里的寄存器数据读出来。这一层直接决定你能采到什么协议适配、点表规划、通信参数全都在这层完成。考虑到现场PLC种类多、地址分散这一层往往是整个项目里最耗时的地方。边缘网关层是中间的“翻译官”和“守门员”。它向下通过Modbus TCP、S7、OPC UA这些协议采集数据向上通过MQTT等物联网协议把数据推送到云端。数据到了这里要做标准化把不同PLC的原始数据统一成带时间戳、带位号、带单位的JSON结构。网关还承担本地缓存的功能断网时数据存在本地网络恢复后自动补传。云端平台层负责设备接入鉴权、消息流转、数据存储、规则引擎和可视化。数据进入云端后通常写入时序数据库用于后续的实时监控、历史查询、告警触发以及和MES、ERP做集成。分层的好处我最大的体会是可替换性。有一次客户要求把原来的云平台从A厂换到B厂因为采集层和网关层没有绑定单一厂商我们只改了平台接入地址和鉴权参数现场设备完全没动。如果当初把业务逻辑全写在上位机里这次迁移成本就大了。1.3 协议选型思路下行认PLC上行认MQTT协议选型是架构设计里最容易被忽略、却最影响稳定性的环节。下行方向网关访问PLC要看PLC本身支持什么协议。西门子的S7系列可以用S7comm或者S7Plus三菱的可以用MC协议Modbus是通用兜底方案几乎所有PLC都支持Modbus RTU或Modbus TCP。如果设备种类太多或者数据点特别密集建议在PLC侧增加OPC UA服务器把统一的OPC UA接口暴露给边缘网关这样网关侧不用为每种PLC各写一套驱动。上行方向网关访问云端我基本固定选MQTT。原因很直接MQTT是长连接协议连接开销比HTTP轮询小得多它支持QoS级别消息可以离线缓存自带遗嘱机制设备异常掉线时云端能立刻感知。HTTP虽然调试方便但语义是“请求-响应”不适合高频、单向、持续的生产数据上报。在实际项目里我见过不少团队在上行协议上纠结很久最后换来换去又回到MQTT。工业物联网的数据特征就是量大、频率稳定、格式简单MQTT几乎是为这个场景量身定做的。一个经验是不要在协议选型上追求“大而全”下行走OPC UA统一上行走MQTT剩下的精力应该留给点表设计和边缘计算逻辑这两块才是项目成败的关键。2. PLC侧数据采集从寄存器到标准数据模型的实操细节2.1 采集方式的取舍改程序 vs 外部轮询到了PLC侧第一个要决定的问题就是要不要改PLC程序如果条件允许在PLC里加一段数据映射逻辑把需要上云的数据统一搬运到固定的数据块或寄存器区后续采集会非常省心。边缘网关只需要读取这个固定区域不需要关心设备内部复杂的地址布局。这种做法在新建项目里我比较推荐数据区域设计得好后期增加点位只是加映射的问题。但现实中大量项目是改造项目PLC程序是多年前的现场又不可能停机很久去修改调试这时候就走外部轮询方案。外部轮询的优势是不动PLC程序风险低上线的速度快。代价是点表采集逻辑变得更复杂某些特殊类型的数据比如字符串、数组、定时器当前值在外部不一定能完整读出来。我的建议是改造项目优先外部轮询新建项目优先做数据映射区。混合型项目可以折中核心工艺参数走外部轮询先保证上线预留程序修改窗口后续再逐步迁移到映射区。这条路线在项目里实测最稳既保证了上线速度又给长期运维留了优化空间。2.2 点表设计比网关选型更重要的“灵魂工程”数据采集上云真正的核心工作量在点表设计而不是硬件选型。所谓点表就是把所有需要上云的数据整理成一张结构化清单说明每个数据的设备位号、寄存器地址、数据类型、读写属性、缩放系数、采集周期、报警上下限。我见过不少项目网关买的是大牌云端平台也搭得有模有样结果因为点表漏了数据类型的定义导致浮点数全部解析成乱码排查了两天才发现是字节顺序不对。点表设计宁可多花半天时间也不要拍脑袋往下走。以下面这个水泵房项目为例点表的一部分可以这么设计位号描述PLC寄存器地址数据类型读写采集周期缩放系数单位报警下限报警上限P-101A_FT水泵A出口流量%MW100UINT16只读1s0.1m³/h0500P-101A_PT水泵A出口压力%MW102REAL32只读1s1MPa01.6P-101A_MT水泵A电机电流%MW106REAL32只读1s1A0120P-101A_ST水泵A运行状态%M110.0BOOL只读1s-0/1--V-101A_SV出口阀门开度设定%MW200UINT16读写5s0.1%0100注意几个细节同一类设备的数据点要命名规则统一这样云端做设备模板时才能用规则批量生成。缩放系数单独列一列因为很多模拟量在现场是工程量值除以10或者100得到的原始值这一列不写清楚到了云端迟早出乱子。采集周期不是每个点位都一样的状态量和秒级变化的模拟量用1秒非控制类的温度、液位可以用5到10秒这样可以显著降低网关和云端的负载。点表还有一个容易踩的坑地址变更后的同步。PLC程序一旦被修改点表里的地址就可能整体偏移。建议每次维护PLC程序时强制要求更新点表版本号并且由边缘网关定期校验读取值与量程范围是否合理。如果一个本来该在0到500之间的流量值突然变成负数或者一个天文数字大概率是地址偏了这类问题早发现比晚发现代价小得多。2.3 轮询周期怎么算一台边缘网关能带多少台PLC做系统设计的时候经常被问到一台网关可以接多少台PLC这个问题没法直接回答要结合数据量和实时性来算。以Modbus TCP为例每次请求读取一段连续的寄存器一般建议按地址区间批量读。假设请求120个寄存器一次通信往返耗时在10到30毫秒之间取决于网络状况和PLC的响应速度。如果一台设备需要采集200个寄存器大约拆成2个请求一轮完整采完需要20到60毫秒。网关串行扫描40台这样的设备完整轮询一轮大概是0.8到2.4秒。这个水平对于大多数监控场景是完全够用的。如果数据点更多、实时性要求更高可以启用多个连接并行读但要注意PLC的通信负载能力。过高的轮询频率可能挤占PLC本身的程序扫描周期严重的会导致PLC通信看门狗超时甚至程序卡顿。我做过一次压测同一个PLC连接数开到8个每个连接256个寄存器高频轮询PLC的CPU负载明显上升程序扫描周期从原来的5毫秒涨到了30毫秒以上。从那以后我都把并行连接数控制在2个以内。实践中我的轮询周期建议是状态量和关键保护量用1秒一般工艺量用2到5秒累计量电量、流量累计用10到30秒。不要一刀切全部1秒工业现场的数据冗余度很高很多量5秒采一次足以满足分析需求。2.4 边缘网关选型硬件不能只看算力边缘网关算是整套架构里的关键硬件。市场上的物联网网关五花八门从百元级的树莓派方案到上万元的工业级边缘计算网关价格跨度很大。选型时我重点看四个东西工业级设计、通信接口、协议兼容度、本地存储能力。工业级设计意味着宽温、无风扇、导轨安装、看门狗复位这些在车间环境下非常有用。通信接口至少要有一路工业以太网支持4G或5G模块扩展更好因为很多老旧厂区没有贯通到车间的可靠网络4G上云是性价比很高的选择。协议兼容度直接决定你能接入多少种PLC选型前把现场的PLC品牌和型号列出来让厂商提供对应的驱动列表不要只听宣传。本地存储能力相当重要网关至少要能缓存几天的数据否则网络故障时数据就直接丢了。部署位置也有讲究网关还是尽量靠近PLC放在控制柜内或柜旁用工业以太网线连接长度控制在50米以内。如果放得太远或者中间经过强电桥架通信误码率会上升调试时能折腾死人。网关的天线如果用的4G模块天线要拉出柜体向外安装柜内金属对信号衰减非常明显这是我在现场踩过的实实在在的坑。3. 边缘网关的数据处理与稳定上云的几个关键设计3.1 网关内部的数据流水线一个成熟的边缘网关数据流动大概是这样的协议采集引擎按照点表定义的周期读取PLC数据得到原始值。原始值进入处理管线经过“单位换算、缩放、死区过滤、报警判断”这一步变成标准化的业务数据。接着进入本地存储引擎按时间戳写入环状缓存或SQLite数据库。最后通过MQTT客户端将数据打包上传并确认云端ACK后才从缓存中移除这条数据。这个流水线里死区过滤是我特别推荐开启的功能。比如一个液位传感器的波动在正负0.5%以内对生产没有实际意义就可以设置死区值变化不超过死区则不上报。它可以大幅降低上行消息量和云端存储量一个车间上千个点位的项目里开启死区过滤后消息量往往能降一半以上。网关本地计算也别浪费。常见场景是累计量计算和停机判断。比如用设备的运行状态和瞬时流量在边缘端就地算出班次产量云端直接按班次读取不但简化了云端逻辑即使传输中断本地累计结果也不受影响。边缘网关名字里有“边缘”两个字很多人真的只把它当转发器用浪费了这部分算力挺可惜的。3.2 直连云端 vs 网关汇聚多数场景应该选后者我在设计跨厂区项目时会先给客户讲清楚两种上行架构一种是每台PLC各自连接一个4G模块直接上云另一种是PLC先汇总到车间边缘网关再由网关统一上云。直接上云架构的优点是部署轻不需要额外增加网关硬件新增一台设备就增加一个4G模块。但它有一个比较明显的短板每个上行链路都是独立的设备多了之后云端连接数、流量卡管理、故障排查的复杂度都上去了而且PLC侧型号不同每个模块的配置工作也得单独做。边缘网关汇聚架构更适合大多数工厂。PLC和网关都在车间内部网内通信稳定性和实时性都好控制网关统一做协议转换、数据处理和缓存云端只需要面向网关设备做管理设备数量少一个数量级。新增设备只是更新网关的点表不需要碰云端。数据传输可靠性上也更有底断网时本地有缓存恢复后补传而不需要每一台PLC模块都支持本地缓存功能。两种方式的取舍其实是在部署成本和运维成本之间做选择。少数几台设备、分布在完全不同的地点可以用直连但只要是车间级、厂区级的项目我都建议用网关汇聚。架构越简单后面踩的坑越少。3.3 MQTT上行的主题规划与参数设置经验把数据从网关推到云端MQTT是主力但怎么用MQTT里面的细节决定运维是否顺畅。第一是Topic设计。我建议按“项目/厂区/设备类型/设备ID/数据类型”这个层级来规划例如factory_a/pump_room/pump/p-101a/metrics。这样的好处是云端可以用Topic通配符直接订阅某一类设备、某台设备做告警和统计都很方便。不要在Topic里省略厂区层级否则以后扩展到第二、第三个厂区时所有设备Topic都冲突得重新规划。第二是QoS选择。MQTT的QoS分为0、1、2工业环境里我基本用QoS 1。QoS 0消息可能丢QoS 2在弱网环境下容易引发消息重发风暴QoS 1保证至少到达一次配合云端做去重是最务实的组合。第三是遗嘱消息和心跳。把网关的在线状态通过遗嘱消息告诉云端网关异常断电时云端能在几十秒内收到offline消息这个能力对设备状态监控非常有用。心跳Keep Alive设置成30到60秒是合理的太短会频繁发包太长则无法及时发现异常掉线。第四是保留消息。设备的基本信息固件版本、IP、型号、经纬度建议用retained主题发布一次云端订阅时立刻拿到最新值不至于开机后要等一次上报才有设备档案。这个细节能省下很多查询设备信息的时间。3.4 断线续传与数据一致性核心机制不能省只要经过公网断线就是躲不开的。所以边缘网关的断线续传能力在我这里是必选项不是可选项。具体的实现机制说简单也简单网关采集到的每条数据都带上本地时间戳先写入本地存储。MQTT成功上报并获得云端ACK后再删除或标记这条数据为已上传。断网期间新数据继续写入存储形成一个待传队列。网络恢复后网关按时间戳顺序补传这些积压数据。云端的规则引擎或数据入库逻辑要做去重因为QoS 1下可能重复到达去重可以通过设备ID加采集时间戳联合处理。这里有一个关键点时间戳一定要在边缘侧生成而不是等云端收到时打上服务器时间。因为断网补传的数据到达云端的时间可能晚了好几个小时如果云端以接收时间为准入库整段数据的先后关系就全乱了。网关本身要支持NTP同步保证本地时钟准确偏差超过30秒的情况都要能被监控到。数据一致性的另外一个坑是补传风暴。如果断网断了一天网关积压了上千万个点位数据恢复瞬间一次性全推上去可能把云端Broker打崩。我的做法是给网关配置补传限速比如恢复后按正常速率的2倍补传避免瞬时尖峰。补传的过程中也不耽误新产生的实时数据优先上传时间戳排序放在云端入库阶段做这样实时性和完整性都能兼顾。4. 云端平台数据接入、存储和业务价值转化4.1 云端架构的常规布局云端侧的核心架构我在具体项目里一般分成四段接入层、数据层、业务层、应用层。接入层部署MQTT Broker负责海量网关的连接和消息吞吐同时做设备认证、在线状态管理。数据层主要包含时序数据库用于点位数据和历史曲线、关系型数据库用于设备档案、用户权限、告警记录和对象存储用于文件、报表导出。业务层是规则引擎和告警服务负责把原始数据变成有价值的事件比如压力超限触发告警、设备离线通知等。应用层则是可视化大屏、数据统计分析、设备管理后台。很多项目在部署时容易把精力全铺在应用界面上先做了一堆图表后台的告警闭环和数据质量反而不够重视。我的顺序是反过来的先把“接入-存储-规则引擎”这条数据主干跑通再开始做界面。数据能通界面只是个工作量问题数据断断续续界面做得再漂亮客户看两天也会失去信心。4.2 设备接入鉴权与设备影子云端的设备管理首先碰到的是设备身份。我建议统一用“项目编码设备类型设备序号”的规则生成设备ID比如FA-SH-P01-0001。每台边缘网关在平台注册后会分配独立的用户名密码或者证书MQTT连接时校验身份。不要全部设备共用同一个账号否则出现异常数据风暴时根本没法定位到具体是哪台网关出了问题。设备影子的功能值得用起来。所谓设备影子就是云端存一份设备的期望状态和实际状态。比如修改某台泵的流量设定值云端把期望值写入影子网关通过订阅拿到差值后再下发到PLC并把实际执行结果上报回来这样“云端下发的命令”和“设备实际执行的命令”形成闭环。没有影子机制命令下发往往变成“单向广播”设备没执行成功云端完全无感知。在线状态管理我单独提一句在云端建立“设备心跳期望时间表”凡是在N分钟内没有上报任何消息的网关自动标记为疑似离线再叠加MQTT遗嘱消息确认。因为有些网关的应用数据上报频率低比如5分钟上报一次单靠数据消息判断在线并不可靠心跳机制不能省。4.3 时序数据存储选型和保留策略工业点位数据写入量是典型的时序特征高频、持续、时间戳有序。用它去存传统关系型数据库表会膨胀到无法维护。我现在的主力选择是时序数据库开源方案里InfluxDB和TDengine都用过TDengine在工业高频写入场景下表现更好集群版部署也简单InfluxDB胜在生态成熟、周边工具多。存储策略和数据保留期是设计重点。直接存原始数据存储成本会随点位数量和数据频率线性增长。我的通用做法是实时原始数据保留1个月按5分钟聚合的均值、最大值、最小值保留1年按小时聚合的归档数据永久保存。这样既保证了短期问题排查时有原始细节又控制了长期存储成本。降采样聚合的另一个用处是报表生成。月度报表直接查聚合表不需要扫描原始表查询速度会快很多。记住一个原则存储层设计时就要想清楚数据的“冷热分层”热的原始数据、温的聚合数据、冷的归档数据分别放不同的存储策略别等硬盘报警了再来搬数据。4.4 规则引擎、告警和可视化把数据变成可用的业务信息云端平台的上层价值主要体现在三个方向实时告警、可视化监控、数据回业务系统。实时告警我用规则引擎做比如“水泵出口压力低于0.1 MPa持续10秒触发低压告警通知设备负责人”。规则引擎的好处是告警条件可以热更新不用重启服务。告警通知渠道我常接企业微信、钉钉的webhook机器人也可配置短信或电话升级。持续告警要做好防抖设计同一事件在30分钟内不重复推送避免故障期间电话被打爆。可视化大屏是项目实施中看起来最出效果的部分。常见布局包括厂区地图加设备分布、实时点位列表、运行状态统计、产量和能耗趋势、告警滚动列表等。值得注意的是大屏的数据刷新要从时序数据库读聚合查询接口而不是每个点位单独轮询。我见过一个项目用前端每秒钟轮询几十个点位接口直接把数仓服务拖垮了这种问题从根上说是架构问题不是前端优化能解决的。和MES、ERP等系统的集成我建议统一走云端数据服务接口。把设备OEE、产量、能耗、质量相关的指标封装成标准API业务系统需要什么就获取什么。比如OEE计算可以落地为时间开动率×性能开动率×合格率云端按班次、按设备计算并推送报表。这样自动化数据平台就成了整个工厂的数据底座而不是一个孤立的“监控系统”。5. 现场项目中的高频问题与排障经验5.1 高频问题速查表把做过的项目里高频遇到的问题整理成一张速查表后续排查效率能提升很多现象可能原因排查思路与解决办法网关读不到PLC数据IP不在同一网段、PLC通信服务未开启、连接数超限先用ping确认链路再测试PLC侧通信参数最后看PLC内部是否有连接授权限制数据偶发性中断网关轮询周期太短、PLC通信负载高、网络存在丢包拉长轮询周期减少并行连接数启用TCP KeepAlive必要时更换屏蔽网线浮点数读出来是乱码字节序列错误、寄存器地址偏移确认PLC的数据格式是大端还是小端Modbus中部分设备返回的字序会反转云端收到的时间乱序网关本地时间不准、补传和实时数据混在一条链路开启NTP同步确保边缘侧打时间戳云端按设备ID时间戳去重和排序网关设备反复掉线心跳与Broker的KeepAlive不匹配、4G信号弱调整心跳周期检查网络否则直接更换网络方案观察MQTT连接日志上行消息量太大流量卡爆掉点位上报频率过高、未开启死区过滤在网关侧设置死区调整采集周期压缩Payload采用批量上报模式这个问题清单看着简单但每一项都对应着我实际调试过的项目。有一个项目我印象特别深客户反映雷雨天网络正常数据就是频繁中断查了两天最后发现是柜内通信线走线跟动力电缆同一桥架干扰导致TCP频繁重传后来重新布线并在网关侧启用了数据缓存和补传机制问题才算根治。环境层面的问题往往是隐性炸弹调试时不见得能触发但长期运行一定会暴露。5.2 字节序、字序与数据类型映射的坑跨品牌PLC的数据类型解析是调试期最费时间的一环。这里面的坑主要出在字节序和字序的差异上。西门子PLC的浮点数在Modbus TCP映射下通常是“大端模式”即高位字节在前而市面上一些国产PLC或部分传感器设备可能存在字序反转。醚读出来的浮点数如果变成了一个天文数字或者一个奇怪的小值十有八九是字节序不对。举个例子PLC内存中一个REAL类型的数值1.5四个字节为3F C0 00 00。网关驱动如果按错误字节序组装读出来可能是某一个完全不相关的负数或者极小的非规格化值。解决方式是在点表配置里明确指定字节序模式并在上线前用仿真值做验证。我的经验是先读一个已知数值的寄存器手工换算二进制确认不要凭空猜。数据类型映射也要提前定义清楚。常见的UINT16、INT16、UINT32、INT32、FLOAT32、BOOL、STRING等每个类型占用的寄存器数量、符号位的处理规则都不一样。点表里如果只写“地址”不写“类型”和“长度”网关解析时容易错位。比如一个UINT32占两个寄存器如果按UINT16读数据的一半可能被误当作下一个点位的值。5.3 安全基线的落地建议工业数据上云安全是绕不开的话题但安全不能只停留在口号层面必须有基线。我最强调的就是网络隔离。边缘网关必须位于PLC网络与办公网络之间PLC层尽量不直接暴露给上层。网关向下采集PLC数据向上只和云端建立出站连接不允许云端直接访问网关的内网或PLC。这样即使云端账号被盗从云端的网络视角也够不到内网PLC攻击面被限制在了单台网关。在云端侧设备接入要做好双向认证。网关连接MQTT Broker时客户端要有证书或唯一密钥平台侧可以为每台设备配置独立的鉴权信息并定期轮换。生产环境的账号权限遵循最小化原则普通运维账号不授予设备删除权限。还有一个常被忽视的点是固件更新。边缘网关、4G模块、PLC通信模块都会不定期发布安全补丁项目交付时要和客户约定固件升级窗口并在升级前做配置备份。工业现场最怕的就是“系统跑得好好的谁也别乱动”但安全漏洞不会因为没人动就消失该升级时就得升级。5.4 上线前的压测和验收建议最后说上线前的整体验收。我强烈建议在批量部署前先做小规模试运行先接3到5台设备跑一个月。期间重点观察几个指标数据完整率云端实际收到的数据点位数 / 网关采集的数据点位数、端到端延迟从PLC时刻到云端入库时刻、断网恢复后的补传耗时、网关7天不重启的稳定性。正式环境部署前可以用软件模拟器做压测。PLC侧用Modbus Slave模拟工具生成点位数据网关侧跑真实的采集和上行逻辑云端按计划配置好资源和告警阈值。压测时逐渐增加点位数和频率直到云端资源利用率达到警戒线这就是系统的上限。上线时保证实际负载低于上限的60%给突发流量留出缓冲。关于验收我建议文档化每个点位做完地址映射后抽样比对PLC原值与云端显示值每台网关做一次拔网线测试确认断线上报、缓存、补传、告警四步都正常云端做一次重启测试确认网关自动重连、数据正常入库。这套流程走完系统的稳定性才有基本保障后面运维会省下大量时间。最后再分享一个小体会整套架构从PLC到云端技术上的难点其实都不是单点技术有多深而是链路长、环节多任何一个环节的数据质量出问题都会在云端被放大。点表设计严谨一点、网关配置保守一点、云端去重和补传做充分一点这套系统的稳定运行年限就会长很多。我后来做新项目基本就是照着这套分层逻辑走现场踩坑越来越少交付也顺畅得多。
返回列表