ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Modbus转MQTT:老旧设备数据上云采集方案全解析

Modbus转MQTT:老旧设备数据上云采集方案全解析 车间里那台用了快十年的老设备运行倒是稳定就是数据出不来。每次盯产量、查能耗都得跑到现场看触摸屏记录完再回办公室填表。领导想要数据报表设备厂家报的价格又高得离谱。后来发现设备带RS485串口走的是Modbus RTU协议但厂里信息部门又只让用MQTT往物联网平台推数据。没办法只能自己动手做一套Modbus转MQTT的采集方案。这套方案解决的核心问题很简单让只会说Modbus的老设备通过一个轻量级的协议转换环节把数据送进MQTT Broker再由上层应用统一消费。整个改造过程不用停设备、不用换控制器、不用大改电气线路适合工厂里大多数带串口或网口的老旧PLC、仪表、变频器、温控器。这个方案也特别适合做设备维保的工程师、搞自主化改造的工厂设备科以及刚开始接触工业物联网数据采集的个人开发者参考。我个人从前期设备摸底、网关选型、协议调试到最后平台上线完整走过一遍流程这篇文章就把整个实施思路和关键细节摊开来聊。1. 方案整体设计与选型思路1.1 为什么绕不开Modbus转MQTT这一步老设备的数据接口绝大多数逃不开Modbus家族。仪表盘上常见的RS485口、PLC上带编程口的通讯模块十有八九走的是Modbus RTU稍新一点的设备会带以太网口那多半是Modbus TCP。这是工业现场几十年攒下来的家底不可能一夜之间换掉。而现在的数据消费端几乎全是MQTT的天下。不管是自建的EMQX、Mosquitto还是阿里云、腾讯云上的物联网套件南北向数据接口基本都用MQTT。MQTT基于发布订阅模式主题灵活、消息体轻量、支持海量连接非常适合把车间设备的数据统一汇聚到平台再做展示和告警。所以Modbus转MQTT这个动作本质上像请了一个翻译。翻译的一头听得懂Modbus轮询和寄存器地址另一头又懂得怎么发MQTT主题、怎么维持长连接。选方案的核心就是选好这个翻译官。1.2 三条技术路线的对比与取舍真正着手做的时候通常有三条路线可选我挨个说下优缺点。第一条是直接用商用边缘采集网关。市面上像有人物联网、映翰通、四信这些厂家都有Modbus转MQTT的网关产品硬件到手网页上配一下点位表、填上MQTT Broker地址就能跑。优点是不用写代码、稳定可靠、厂家有售后缺点是价格偏贵而且遇到比较偏门的寄存器运算、报警联动逻辑内置的规则引擎不一定能完全满足。第二条是串口服务器加软件协议转换。用一个RS485转以太网的串口服务器把设备端的Modbus RTU包转成以太网传输再在同一台电脑或边缘小主机上用Python、Node-RED或Go写一个转换脚本一边发Modbus请求一边把结果发到MQTT。这种玩法灵活度很高改点位、改格式都很方便而且用的都是通用硬件成本能压到很低。缺点是需要自己维护程序现场环境如果主机频繁断电重启稳定性要额外考虑。第三条是纯4G DTU透传配合云端的服务器做协议解析。DTU只做数据透传Modbus报文经过网络送到云端再在服务器上完成Modbus到MQTT的转换。好处是车间现场几乎不需要增加计算设备坏处是调试链路长、实时性差一些而且云端服务器本身需要自己开发维护。三条路我实际都走过。如果现场条件允许我个人的倾向是第二条低成本、可控、调试透明。但如果你自己不想碰代码或者项目验收需要乙方向甲方提供稳定长期的运维保障那第一条商用网关更省心。文章后面主体以“串口服务器 边缘软件转换”为核心来展开这套东西你能看得透、改得动、出了问题能自己查根因。1.3 方案整体架构需要哪些组件整套方案运行时的数据链路大概是老设备RS485口出来经过RS485转串口服务器变成以太网网络包进入边缘网关主机或者工业小主机主机里跑一个协议转换进程既做Modbus Master轮询各设备又做MQTT客户端把数据推给Broker最终由物联网平台或者应用系统订阅展示。这套架构里每层承担的任务都相对单一。采集层负责物理链路和电气匹配转换层负责业务逻辑、点位映射和异常补偿传输层负责长连接和消息可靠投递平台层负责数据的存储、告警和展示。每一层之间通过标准的接口解耦后续要扩容或者换平台时改动的面就非常小。同时也要提前考虑设备侧的负载。设备本身的Modbus寄存器是定期被轮询才能输出数据的轮询频率太高会被设备拒绝或者加重串口总线负担频率太低数据实时性又达不到要求。所以后续在参数配置环节我会专门聊轮询周期的计算和租约空间。2. Modbus与MQTT的核心技术点拆解2.1 Modbus协议面对寄存器先搞清楚地址和功能码Modbus本身并不难难的是把现场设备的“点位表”和实际报文对应起来。现场最常见的莫过于Modbus RTU和Modbus TCP两种。RTU走串口RS232/RS485报文是十六进制字节流每一帧包含从站地址、功能码、数据区、CRC校验。常见的功能码就几个01读线圈、02读离散输入、03读保持寄存器、04读输入寄存器、05写单个线圈、06写单个寄存器、10十六进制的0x10写多个寄存器。对于数据采集来说用到最多的是03和04前者读PLC里可读可写的保持寄存器后者读仪表内部不可写的测量寄存器。举个例子一个温控器在地址40001处存放当前温度值这里的“40001”对应Modbus标准地址格式实际报文中用的协议地址是040001减40001等于0Modbus数据模型里叫保持寄存器功能码03。所以你在用Modbus Poll或者网关配置界面时要分清楚界面里填的地址是协议地址还是标准地址很多采集异常都是因为地址偏移了一位。CRC校验值得单独提一下。CRC16-Modbus算法用查表法实现非常快多项式是0xA001初值0xFFFF。很多网上的代码片段其实已经写好了但要注意高低字节的发送顺序Modbus规定CRC低字节在前、高字节在后。做协议解析时如果发现设备偶发返回错误或者通讯抖动不要急着怀疑设备坏了先检查自己组包时CRC是否正确。再补充一个RS485总线上的经验轮询是一主多从的方式总线上每一帧只能有一个设备应答所以从站地址必须唯一否则就会冲突。波特率、数据位、停止位、校验位四项参数要和设备一致最常见的是9600 8 N 1。RS485是差分信号A/B线不能接反屏蔽层单端接地超过了32个节点或者线长超过1200米要加中继器或者走Modbus TCP分组。2.2 MQTT协议主题设计和消息质量等级决定上层体验MQTT的消息模型关键词是主题Topic与发布订阅Pub/Sub。采集端发布数据到一个主题平台端订阅对应主题中间由Broker负责消息的路由和转发。设计Topic时最要紧的是规律清晰便于权限控制和数据分流。一个比较成熟的做法是按层级组织主题比如设备数据上报factory/{line}/{deviceId}/telemetry设备状态事件factory/{line}/{deviceId}/event平台下行控制factory/{line}/{deviceId}/command其中{line}表示产线编号{deviceId}可以继续用设备本身的Modbus从站地址或者自定义编码。这样的好处是权限可以按目录级别控制平台侧订阅时也可以用MQTT通配符比如订阅factory///telemetry就能一次性拿到所有设备的遥测数据。关于消息质量等级MQTT的QoS分为0、1、2三档。QoS0最多发一次适合对实时性要求极高、丢失一两帧也没关系的场景QoS1至少一次Broker收到后会回PUBACK没收到就会重发保证消息送到但可能出现重复消息需要消费端做幂等或去重QoS2恰好一次性能开销最大工业现场能用QoS1基本就足够了。还有个容易被忽略但很有用的机制是遗嘱消息LWT。采集网关掉电或者崩溃之前Broker会代替它发布一条预设的遗嘱消息通常用来标记设备离线。应用端订阅这个主题后可以在设备断线时立刻触发告警而不是等数据超时才推测离线。这一点在长周期无人值守的工况下特别重要。2.3 Broker的选型与本地化部署Broker是整个MQTT体系的核心相当于一个常驻的消息服务器。如果厂里公有云网络条件好可以直接用云平台自带的MQTT接入点如果不想让数据出厂区或者现场网络不稳定建议在边缘机房部署一个本地的轻量级Broker。常见的开源方案包括EMQX、Mosquitto和NanoMQ。EMQX功能最全支持集群、规则引擎和监控面板但相对吃内存Mosquitto非常轻量几百MB内存的小主机就能跑适合数据量不大、没有复杂路由规则的场景NanoMQ介于两者之间性能和资源占用平衡得比较好。如果只是做技术验证或工厂内部小规模采集我用得最多的是Mosquitto配置简单出现问题也好查日志。部署Broker这件事很多工程师容易忽略的一点是消息不落地就没有保障。Broker默认在内存里转发消息进程一重启消息就可能丢了。想要稳最好开启持久化会话同时把Client ID设置稳定。采集端配置了正确的Client ID之后Broker才能维护它的会话状态断线重连期间未确认的消息才能补投递。3. 硬件选型与现场实施准备3.1 串口服务器和边缘主机的搭配RS485转以太网的串口服务器是连接老设备与边缘主机的桥梁。市面上成熟型号很多像有人USR-N510、USR-TCP232-410s还有周立功、MOXA这类老牌工业级产品。选购时重点看外壳是否支持DIN导轨安装、工作温度范围够不够宽建议-20℃到70℃、是否支持TCP Server/TCP Client/Modbus网关模式。这里有个取舍要点串口服务器如果直接用“Modbus网关”模式很多型号本身就自带了Modbus TCP和RTU的转换能力那么边缘主机就可以直接用Modbus TCP方式来轮询设备不必再处理串口数据。如果串口服务器只是纯透传那边缘主机就要自己管理串口的打开、读写和帧的超时切分代码实现上会多一层麻烦。所以推荐直接用Modbus网关模式让串口服务器负责最底层的字节流处理。边缘主机不需要太豪华一个双网口的小主机、树莓派、或者旧的工控机都行。一个网口连车间局域网接串口服务器另一个网口接办公网或者上联到Broker所在的网络。双网口的意义在于做网络隔离采集网和业务网分开后续安全上有很大好处。3.2 现场设备摸底建一张寄存器点位表改造前最费时间的环节不是安装调试而是把每台设备的点位表整理清楚。设备厂家随机附带的说明书里通常会有Modbus寄存器地址表但实际发现部分设备通讯参数是隐藏的要在面板里多翻几层菜单才能找到也有的设备需要通过专门的软件设置从站地址。我建议现场调研时画一张这样的表格设备编号设备名称通讯参数功能码寄存器地址数据类型缩放系数单位备注DEV-013号温控器9600 8N10340001有符号16位0.1℃温度值需要乘0.1这张表做完后面配置网关点位、写解析脚本、做平台数据字典全都能直接复用。资料最好同步给电气和IT两个团队各一份避免沟通时来回扯皮。同时还要确认每台设备是否支持Modbus个别设备支持的是厂家私有协议只是说明书上含糊地说“支持标准通讯”这种遇到了一定要提前规避不能指望协议转换层去解决私有协议的问题。是的很遗憾私有协议只能靠协议分析仪去抓或者向厂家索要通讯规约这项工作要提前启动。3.3 网关软件的常见选型与对比如果你倾向用现成的软件而不是自己从零写可以看看这样几个方向Node-RED基于Node.js的可视化流编排工具节点生态里有现成的Modbus节点和MQTT节点拖拉拽就能搭一条采集链路非常适合快速验证和中小规模部署。它有dashboard也可以拉起一个简陋的Web页面直接看实时数值。自研脚本Python的pymodbus和paho-mqtt是经典组合适合逻辑复杂、需要深度定制的场景。Go语言的goburrow/modbus配合eclipse/paho.mqtt.golang也是我很推荐的一套组合编译出来的二进制部署非常方便没有依赖困扰。商用配置型网关软件像Kepware现在叫PTC Kepware、ThingsBoard IoT Gateway它们能对接大量工业协议也支持MQTT扩展。ThingsBoard Gateway适合配合ThingsBoard平台一起使用点位映射全部在配置文件里做后台界面还能直接做资产建模和仪表盘。有一个很常见的坑是拿Modbus Poll直接当网关用。Modbus Poll常被用来调试Modbus通讯但它本身不是一个常驻的协议转换服务不支持直接推MQTT。网上很多人卡在“Modbus Poll怎么连接MQTT”这一步其实从一开始思路就错了。调试工具归调试工具转换服务归转换服务两者不要混用。想调试设备通讯老老实实打开Modbus Poll看报文想跑采集任务用专门的网关软件或自研脚本轮询。4. 从0到1实现数据上云的全套实操过程4.1 第一步先用调试工具打通Modbus链路不管后面的软件选型是什么先把手里的工具集合齐。Modbus Poll是工程调试的经典工具可以直接从上位机发Modbus请求查看返回的寄存器和线圈数据但它专业版是按License激活的这一点很多人不知道网上搜“注册码”搜半天多半不靠谱。如果没有正版授权可以尝试完全免费开源的QModMaster功能上足够完成基本调试还可以在线解析RTU帧。调试时我习惯先“单机验证”串口服务器的串口线只接一台设备电脑上用Modbus Poll选择正确的串口参数起始地址填0数量先设1个寄存器点连接看看能不能读到值。如果读到值了再慢慢把数量调大确认连续读取是正常的。只有单机能通才允许把设备挂到总线上不然出了问题都说不清。如果通过Modbus Poll来测试的是TCP链路那么只需选择Modbus TCP模式填串口服务器的IP和端口通常端口为502注意有些串口服务器是TCP Server模式或TCP Client模式需要先确定谁做服务端谁做客户端网络端口要放通防火墙。4.2 第二步配置Broker并验证MQTT收发Broker推荐先在本机部署验证以Windows为例如果不想用安装包可以在官网下载EMQX或Mosquitto的zip包解压后手动注册为系统服务这样电脑重启后服务能自启。比如解压后是C:\emqx\bin\emqx.exe想让它开机自启可以用管理员权限的PowerShell执行New-Service -Name EMQX -BinaryPathName C:\emqx\bin\emqx.exe foreground如果用的是一般软件包也可以用NSSMNon-Sucking Service Manager来包装服务理论上任何exe都可以注册成Windows服务安装后可以在任务管理器服务页看到状态。Mosquitto的Windows部署更简单配置文件在C:\mosquitto\mosquitto.conf核心加两行监听配置就够listener 1883 allow_anonymous true匿名访问在测试环境没问题工业现场上线前一定要关闭匿名启用用户名密码甚至启用TLS证书加密。Broker起来之后可以在本机装一个MQTT客户端工具比如MQTT Explorer或者MQTTX用它订阅一个话题然后另开一个客户端发布一条测试消息看能不能收到。这块验证通了后续采集网关那边的配置就只差地址和主题名了。4.3 第三步编写或配置协议转换程序我用Python作为例子因为对做自动化出身的人最友好。一个最简的循环脚本大概是这样的逻辑from pymodbus.client import ModbusTcpClient from paho.mqtt import client as mqtt_client import time, json modbus_client ModbusTcpClient(192.168.1.20, port502) mqtt_client mqtt_client.Client(client_idgateway_dev01) mqtt_client.connect(192.168.1.100, 1883, 60) mqtt_client.loop_start() while True: rr modbus_client.read_holding_registers(0, 10, slave1) if not rr.isError(): data {device: DEV-01, values: rr.registers} mqtt_client.publish(factory/line1/DEV-01/telemetry, json.dumps(data), qos1) time.sleep(2)这段代码虽然简单但已经体现出了完整的数据采集链路。实际工程中还需要补充几件事对Modbus返回值做CRC错误校验pymodbus库本身会做一部分、对设备无响应时的异常处理、断线自动重连、寄存器原始值到工程量数据的缩放转换、时间戳的添加。缩放转换这个点容易出错。比如温度寄存器原始值是1234但说明书说分辨率是0.1℃那真正的温度是123.4℃。这步转换可以放在边缘脚本做也可以放在平台侧做我个人建议放在边缘做因为平台统一求值简单后面多类协议接入时不容易乱。4.4 第四步设计合理的轮询周期与QoS策略这里有个容易被忽略的问题串口轮询和网络并发完全不同。Modbus RTU在同一根RS485总线上是串行通讯所有设备共享一个信道一个轮询周期等于所有设备响应时间之和。做一次简单的计算假设波特率96008N1一个字节约0.833ms帧时间读10个保持寄存器的应答帧约为11220226字节加上帧间隔和RTU最短静默时间单次读操作大约需要50ms。一条总线上挂10台设备一轮下来就是500ms。如果数据需要2秒刷新一次设置轮询周期为2000ms是够用的但如果某个设备报错超时超时时间通常要设到300~500ms那整轮的周期就会被拉长。我踩过的一个坑是为了省带宽把超时时间设得特别短结果设备偶尔响应慢就被判定超时频繁重试把总线搞拥堵了。后来我总结的经验是超时时间一般设在300ms以上同一台设备连续两次无响应才判离线不要因为一次超时就触发重连。MQTT侧的QoS建议全部使用QoS1配合持久会话可以保证在断网期间边缘侧采集的数据先缓存在本地队列网络恢复后Broker再接受补充投递。注意QoS1会产生重复消息所以Broker到应用端这一层需要有去重逻辑或者在消息体里带上自增序列号由消费端自行去重。4.5 第五步字段映射、平台接入与数据核对MQTT的数据到达Broker之后平台侧需要做字段映射。不同物联网平台对接方式不同但核心流程都是创建产品、添加设备、选择Topic、配置数据解析脚本、建立设备影子/物模型。数据解析脚本是核心它决定了原始JSON怎么变成业务字段。假设边缘发的消息体是{ device: DEV-01, ts: 1700000000000, temp: 123.4, humidity: 45.6 }平台侧的物模型里定义了温度temp、湿度humidity两个属性那么解析脚本就是提取这两个字段并做类型转换。有些平台还支持“标准物模型”或者“动态超时属性”可以在设备心跳停止一段时间后自动把设备标记为离线状态这个比单纯用遗嘱消息再做一层更直观。数据核对这一步别偷懒。第一天上线时我习惯在平台上挨个点和现场仪表的显示屏做对比每台设备至少记录十组数据。如果现场显示的温度和平台温度一直差0.1℃或者差一个固定偏移那多半是缩放系数或者偏移没有处理好趁刚上线还没积累历史数据时抓紧修正点位表。5. 常见问题与排查技巧实录5.1 设备偶尔能通、经常离线这个现象多半出在电气链路上。先看RS485的A/B线是不是有松动屏蔽层是否单端接地。不要只依赖万用表量通断要用示波器看波形。示波器能看到明显的毛刺或者信号幅值过低这时候需要加偏置电阻或者终端电阻通常120欧终端电阻并联在总线末端。还有个常见原因是地址冲突。Modbus总线上两台设备如果设成同一个从站地址从站会同时响应报文在总线上一碰撞整个轮询就会乱套出现的症状就是时好时坏。排查时最好用Modbus Poll逐台设备分别测试地址确认唯一以后再挂总线。5.2 采集到平台的数据经常缺一点或者延迟首先要检查MQTT的QoS。如果用的是QoS0Broker不确认消息网络一旦拥塞就会丢消息。将QoS改为1并开启持久会话就能解决大部分丢数据的问题。其次要看边缘侧的采集速率是否超过设备处理能力。多台设备在同一总线上轮询时如果单台响应超时导致重试次数过多其他设备的数据也会被积压。减少单台设备的采集寄存器数量把采集频率要求高的设备单独分一组总线或者提升波特率到19200/38400是对治这种局面的常见招数。5.3 Broker重启后收不到消息这个问题的根因往往是Client ID变化。MQTT规定了Broker根据Client ID来维护会话状态如果边缘网关每次重连用的Client ID都是随机生成的那持久会话就形同虚设离线消息自然补投不了。解决办法是把Client ID固定下来和物理设备绑定比如gw_DEV_01。另外检查Broker是否开启了持久化。Mosquitto的配置里persistence true和persistence_location要设置好EMQX需要在配置里调整backend。Broker没有做持久化进程一重启消息队列就清空了一切都白搭。5.4 Modbus Poll提示“Error”或“Timeout”如果单机测试时报错先看几个参数设备地址、功能码、起始地址、数据长度。这里最容易出问题的是地址偏移设备说明书上写40001但工具里填的是0很多新手会把这两套体系弄混导致报文里的起始地址和数据不对应。如果通讯参数和地址都对就要看帧格式。RTU模式要求帧与帧之间有至少3.5个字符时间的静默间隔RS485转串口服务器如果转换速度慢或者串口服务器和边缘主机之间网络延迟过大会造成帧拼接错误。这种情况下可以尝试调整串口服务器上的Frame timeout参数或者用Modbus TCP模式让串口服务器完成RTU的编解码少一层自己拆帧的麻烦。5.5 数据“漂移”和跳变传感器数据偶尔跳变第一怀疑的是干扰。工业现场有大功率电机、变频器启动时电磁干扰非常严重这种瞬时干扰会污染RS485信号。处理手段是换双绞屏蔽线、屏蔽层单端接地、远离动力电缆敷设、加磁环或者光电隔离器。还有一种情况是数据解析精度不对。有些寄存器是32位浮点数或者32位整数占两个寄存器此时需要确认寄存器字节序Big Endian还是Little Endian以及字序AB还是CD否则读出来的数值会大得离谱。排查这类问题最好的办法是用Modbus Poll多读几个寄存器把原始值换算成十进制再对照说明书里的数据类型来确认字节序。6. 安全加固与上线后的运维思考6.1 别让MQTT裸奔在车间网络里我见过不少项目为了省事MQTT Broker开了匿名访问放在办公网里任何人知道了IP和端口都能订阅消息。工业数据即使不是国家秘密也是企业的核心资产裸奔非常不负责任。至少要做到这几个基本动作。启用账号密码认证每台边缘网关分配独立的用户名密码定期轮换。有条件的直接用TLS证书加密传输Broker使用CA签发的服务端证书网关端配置CA根证书做校验Arm和X86平台都支持证书文件性能开销在采集场景下完全可以接受。网络侧把采集网络和办公网络做VLAN隔离防火墙只放行所需的端口例如8883MQTT TLS和302Modbus TCP其它的端口一律不放开。更稳妥的是在Broker前面加一层防火墙或安全组只允许白名单网段访问。6.2 给边缘采集进程加上“守护”边缘网关上的转换脚本程序越简单越稳定但再简单的程序也怕孤单地跑着。Linux上用systemd做服务托管可以在进程崩溃后自动拉起同时设置开机自启。用systemd管理Python脚本的模板大概是这样[Unit] DescriptionModbus to MQTT Gateway Afternetwork-online.target [Service] ExecStart/usr/bin/python3 /opt/gateway/main.py Restartalways RestartSec5 Useriot [Install] WantedBymulti-user.targetWindows上则用NSSM把程序注册为服务设置“崩溃自动重启”和“开机自启”。这些是基础中的基础很多现场故障其实不是程序和设备的问题而是主机重启后服务没起来数据源直接断掉。6.3 数据质量监控与告警策略上线以后不要等到用户说“数据不对”才开始排查要主动建一套数据质量监控。我习惯在平台侧做三件事给每个设备加心跳超时告警心跳停止超过指定时间就推送警报到企业微信或钉钉对关键点位做阈值与变化率校验比如温度值瞬间跳变几十度多半是采集异常而非真实工况每天定时巡检对比设备总数、在线数量、消息量曲线发现消息量异常下滑提前排查总线或者网关状态。工业数据采集的可靠性不是单靠某一个环节就能保障的而是采集、传输、存储、监控每一层都做好自己的冗余和校验。这套Modbus转MQTT的方案从现场设备和工业协议出发到平台数据应用结束每一环都需要有意识地设计边界条件处理而不是只写一个简单的循环就完事。7. 一些实际摸索出来的体会这套方案从想法到落地前后调试了将近两周。前期最花时间的不是写代码而是把现场所有设备的寄存器地址和通讯参数摸清楚不同厂家的仪表说明书编写风格差异很大有的地址表写得准确清晰有的连数据类型都不标全只能靠抓包和试读来反推。我个人在实际操作中的体会是做工业现场改造转换协议本身并不难真正决定项目成败的往往是三个看上去不起眼的事第一原有设备的数据字典必须整理到一张表里哪怕是手写表格也胜过什么文档都没有第二边缘侧的异常处理要写得足够健壮宁可反复重试也不能让进程崩溃退出第三上线前一定要预留一天时间做联合调试让平台侧和现场侧的人坐在一起逐个点位核对数据和告警问题越早暴露越省钱。最后再分享一个小技巧如果你有一批设备地址表比较乱可以先做几天的Modbus原始数据采集把寄存器原始值存下来再通过枚举地址和数据类型的方式把点位摸清然后再去写转换规则。这样虽然前期慢一点但比上线后反复改点位表要省心得多。后续如果要扩展功能这套架构也完全可以往本地报警联动、预测性维护这些方向去长只要底层链路是通的上层玩法就是无穷的。
返回列表