
上个月去一家注塑件厂看现场老板想做PLC数据采集上云客户审核需要每台注塑机的实际产量和停机记录过去全靠班组长手写报表数据根本对不上。这种需求在制造业里太普遍了——PLC品牌五花八门车间里的数据孤岛比想象中严重得多想远程监控、想算OEE、想给ERP喂数据第一步都是把PLC的数据采集上来再传到云端。这篇文章就把我从PLC到云端的完整方案思路写出来覆盖通讯协议选型、边缘网关配置、云端链路搭建和上线后的坑给做自动化集成、工业物联网改造以及正在做物联网毕业设计的同学一个能直接落地的参考框架。1. 先想清楚为什么上云三种需求对应三种架构1.1 数据孤岛的代价大多数人以为PLC数据上云就是把设备状态读出来发到网上这么简单。真正做了几个项目就会发现如果一开始没想清楚数据要用来干什么后面的架构设计、点位规划、云端存储成本都会出问题。我在现场经常看到这样的场景中控室里有台工控机跑着组态软件画面能实时显示温度、压力、产量看起来一切正常。但老板在办公室看不到出差在外地更看不到。每天的生产报表靠班长下班前手动抄表再录入Excel。不同班次之间的数据口径对不上夜班设备停了40分钟没人记录第二天查停机原因只能靠猜。数据采集上云最直接的价值就是把“躺在PLC里的实时数据”变成“随时能看的远程数据”让管理层和IT系统能实时拿到真实的生产状态。再往深一层上云不是目的数据能用起来才是。设备综合效率OEE的计算需要时间开动率、性能开动率、良品率三项数据。时间开动率里的计划外停机就必须有设备启停记录良品率需要产量和合格数。这些数据如果靠人工统计误差大且滞后。设备维护也一样一台电机的电流曲线如果一直在缓步上升说明机械负载在变大这是预测性维护的典型信号。工业数据采集上云后这类分析才有数据基础。1.2 三种需求决定三种架构做PLC上云方案我习惯先把需求归成三类因为每一类对数据频率、网络要求、云端组件的选择完全不同。需求类型典型场景采集频率实时性要求主要技术重点远程监控型看设备状态、看产量、告警通知1~5秒秒级链路稳定、告警准确数据分析型OEE计算、能效分析、预测性维护100ms~1s准实时时序存储、数据质量反向控制型远程下发配方、修改参数100ms~1s毫秒~秒级权限控制、操作审计、安全防护远程监控型最常见投入也最低。网关把PLC的启停状态、当前产量、报警信息读上来传到云平台做看板设备异常时推送消息。这类架构不追求毫秒级响应断了几秒数据也无所谓关键是链路不能长时间断告警不能误报。数据分析型对数据完整性要求高。你要做设备趋势分析就不能漏点。比如某台空压机的运行电流每100ms采一次一天产生86万个点一台PLC至少几十个点位这个数据量不算小。这种架构必须考虑边缘端的缓存、补偿机制云端要有时序数据库存储周期和降采样策略也得提前规划。反向控制型最容易翻车。远程下发参数这种事如果网络抖动导致指令重复执行或者权限管控不严可能造成设备误动作甚至安全事故。所以这类架构需要额外设计确认机制——操作者下发指令后必须收到设备的实际执行反馈云端要有完整的审计日志。我现在的建议是能只读就只读非必要不做反向控制。真要远程干预也要人工二次确认加设备侧超时保护所有操作指令加时间戳和操作人标识。1.3 哪些产线值得先上云不是所有设备都适合一窝蜂上云。我见过一个工厂给十几台老旧皮带机装采集网关那些设备连传感器都没几个采上来的点位数少得可怜折腾半年没看到什么价值。判断一台设备值不值得上云按这个顺序看设备价值是不是高。一台几百万的数控加工中心停机一小时损失上千块这种设备必须优先监控几千块的电风扇再坏也不影响生产没必要折腾。设备故障影响是不是大。有些设备是产线瓶颈一停全线停就算设备本身便宜也得监控。设备分布是不是散。多厂区、异地车间的设备远程监控的收益明显高于都在一个车间里的设备。有没有明确的数据消费者。如果你的云平台接入了MES、ERP或者每天要出报表给客户看那就值得如果数据采上去没人看那不如不做。2. PLC数据采集的底层逻辑协议、寻址与采集频率2.1 主流PLC通讯协议速览搞PLC数据采集上云第一个绕不开的问题就是这PLC用什么协议能读数据各品牌PLC的通讯协议差异很大但基本都支持以太网通讯常见的有下面这几类。PLC品牌常用协议默认端口说明西门子 S7-1200/1500S7comm、ProfinetTCP 102直接读DB块、I/O、M区也支持Modbus TCP和OPC UA西门子 S7-200 SmartPPI、Modbus TCPTCP 102/502老设备多为PPI串口需加网关转换三菱 Q/L/FX系列SLMPMC协议、CC-LinkUDP或TCP三菱自己的一套协议读D寄存器很直接罗克韦尔 AB CompactLogix/ControlLogixEtherNet/IPTCP 44818CIP协议标签寻址配置稍复杂欧姆龙 NJ/NXFINS over UDPUDP 9600老协议但很稳定注意UDP丢包问题汇川、信捷、台达、昆仑通态等Modbus TCP为主TCP 502国产设备基本都能用Modbus TCP兜底如果你是做综合集成的直接面向多种PLC最好选一个支持多协议的采集工具或网关。比如Node-RED里node-red-contrib-s7可以读西门子node-red-contrib-modbus可以读Modbus TCP商业网关像映翰通、有人、四信多数自带协议解析库相当于把各种PLC协议从盒子里直接放出来。2.2 从程序块到内存地址寻址方式决定了采数效率PLC里的数据存在不同的存储区针对不同品牌要搞清楚寻址方式否则数据永远读不对。西门子S7系列最喜欢用DB块数据块。你需要在TIA Portal里建一个DB块把要采集的变量集中放在一块——比如DB100里面偏移量0.0放运行状态bool偏移量2.0放当前温度real。S7通讯读取时要告诉网关DB编号100偏移量从0开始读几个字节。很多人第一次读到乱码往往就是偏移量算错或者数据类型对应错。三菱PLC的软元件是D寄存器比如D100、D200一个寄存器16位。如果你要读一个32位浮点数就要连续读两个寄存器而且要注意寄存器顺序——三菱默认低字在前还是高字在前不同型号还有区别。Modbus TCP则要把数据放到保持寄存器区地址范围对应关系要查PLC的映射表。举个例子某个国产PLC的Modbus地址40001对应内部D040002对应D1。读保持寄存器40001~40003就是连续读D0~D2。这里最要命的是数据类型转换Modbus寄存器读出来的是16位整数两个寄存器合起来才能变成一个32位浮点数而字节序可能有ABCD、CDAB、BADC等组合错一个序数据就完全不对。我的经验是在正式采集之前先拿一个已知值去验证。比如PLC里放一个常数108.5读出来看看浮点数对不对字节序对不对。这个验证过程花10分钟能省后面排查数据异常的几个小时。另外建议给每个点位维护一张测点表列清楚设备ID、PLC地址、数据类型、字节序、倍率、单位这张表就是采集配置的源头后面做数据清洗、可视化都要靠它。2.3 采集频率怎么定别让数据量大到没用也别小到失真采集频率是架构设计里最容易被低估的参数。频率设太高网络带宽和云端存储费用直线上升设太低有些过程数据根本看不出规律。实际操作中我按设备类型和数据用途区分设备状态量运行、停止、报警、待机用1秒采集足够因为状态切换本来就是秒级以上的事件。温度、压力、液位这些工艺量变化慢的用3~5秒变化快的用1秒。电流、功率、转速这些和设备健康相关的量最好1秒以下做趋势分析才有意义。振动信号如果要做频谱分析那是kHz级的普通网关根本处理不了得用专业振动采集器一般不在PLC数据采集范畴里。数据量估算有个简单公式点数乘以每秒采样次数乘以每个点的字节数再乘以冗余系数。比如100个点1秒采一次每个点平均8字节64位双精度一天的数据量就是100×1×8×86400≈6912万字节大约69MB。这还只是一台设备如果你有100台设备一天就是近7GB。云端存储费用、时序数据库性能都要按这个量级去规划别到时候存储空间不够再扩容。还要考虑PLC的通讯负载。你把PLC的数据读出来用的是PLC的通讯处理器资源。如果采集频率太高或者网关轮询的点位太多PLC的通讯负载会占用CPU影响本身的控制周期。我遇到过一台S7-200 Smart网关每100ms轮询一次所有点位结果PLC程序运行时段明显卡顿。后来把轮询周期调成1秒又做了区域批量读取问题才解决。批量读取特别重要一次把连续地址的字节读回来在本地解析比一个点位读一次效率高一个数量级。3. 边缘物联网网关连接车间和云端的关键桥梁3.1 网关选型工业网关、边缘盒子还是PC软采数据从PLC出来以后需要一个东西把它转成云端的格式再发出去这就是边缘物联网网关。选型上有三种常见形态各有各的适用场景。第一种是工业物联网关一个小铁盒子有网口、串口、4G模块内置协议解析功能。适合分布式的单台设备采集比如野外泵站、分散的注塑机直接插网线连PLC4G卡插上就能上网。它的优点是小巧、免维护、工业级环境适应性强缺点是处理能力弱跑不了复杂的边缘计算存储空间有限一般只能做简单的缓存和协议转换。第二种是边缘计算盒子本质是一台小工控机装Linux或Windows上面可以跑Docker、Node-RED、Python脚本。适合车间里集中采集的场景——比如一个车间有20台设备一台盒子的多路网卡分别接到几台PLC跑Node-RED统一采集本地做数据清洗、缓存再通过MQTT批量上云。这种方案灵活性高可以随时加逻辑是我做集成项目主力推荐的形态。如果你想搞stm32物联网网关这种嵌入式方案也可以往这个方向靠但生产环境里我更信任成熟的工控机加通用软件成本高一点但稳定性和可维护性都强很多。第三种是PC软采也就是在已有的上位机或SCADA系统里直接加一层数据上云功能。如果现场本来就有组态软件比如WinCC、组态王在采集PLC数据那就没必要再引入一套网关直接在PC上部署一个转发程序把SCADA已经采集到的数据定时转发到云端。缺点是这个PC一关机数据链路就断了而且SCADA本身的点位可能不全二次开发工作不可控。3.2 网关与PLC的网络组网IP规划和安全边界网关和PLC通讯之前网络必须先打通。这看起来简单实际翻车很多。PLC的IP地址和网关必须在同一个网段或者能通过路由器互相访问。你的工控机上配置的IP最好设置为固定IP避免DHCP重新分配导致链路断开。现场网络环境复杂的话我建议在交换机上划分VLAN把PLC控制网、办公楼宇网、云端接入网关网段隔离开。PLC控制网是生产命脉不该让办公电脑直接访问云端采集网关放在一个单独的网段只放通它和PLC之间的通讯端口其他全部禁止。通过防火墙白名单策略只允许网关访问PLC的指定IP和端口比如S7协议只放行TCP 102Modbus TCP只放行TCP 502。这样即使某个环节出了问题影响面也在可控范围内。网关到云端的连接优先有线网络比如工厂的宽带出口如果现场没有有线网络用4G/5G专网卡也行。当设备分布在不同地点时我遇到过网关通过WiFi连接现场路由器的情况说实话稳定性并不好——WiFi受到干扰会瞬间丢包PLC通讯链路一旦断开重连需要十几秒这段时间数据就丢了。能用有线的场景绝对不用无线这就是我做了几年采集项目最想说的话。3.3 边缘端必做的三件事缓存、清洗、协议转换数据在边缘端不能被当作透明的搬运工至少要做三件事缓存、清洗、协议转换。缓存是可靠性的基础。车间网络不稳定、云端服务器偶尔维护都会导致数据发送失败。网关本地要有一个环形缓冲或落盘缓存通常用SQLite或简单的CSV文件。数据先写本地再由发送模块按顺序向云端推送云端确认收到后标记发送完成如果云端连不上数据继续写缓存等链路恢复后按时间戳顺序补传。要特别注意控制缓存文件的大小——我给一台网关设置了2GB的SQLite上限超出后按先进先出淘汰防止缓存文件把存储写满导致整个网关卡死。清洗和协议转换是数据质量的保障。PLC里的原始数据有不少是“脏”的——传感器断线时的最大值、设备刚启动时的不稳定值、单位换算错误的值。边缘端要做越限剔除、死区过滤、单位换算。比如PLC里温度寄存器的值是305实际上是30.5℃倍率是0.1这个换算在边缘端一次做完云端收到的就是标准工程单位。死区过滤的意思是变化量小于设定值就不上报温度一整天都在30.1和30.2之间波动没必要每秒都上报两次设置一个0.5℃死区一天下来数据量能下降一半以上这在低频窄带网络场景下非常实用。协议转换则是把S7、Modbus、CIP这些五花八门的工业协议统一成云端平台认识的标准格式。目前最通用的还是MQTT协议加JSON消息体。我会统一管理Topic和Payload格式比如Topic设计成factory/line01/machine07/propertiesPayload是一个紧凑的JSON对象包含deviceId、timestamp、键值对。上游不管是接物联网平台、时序数据库还是自建Web服务处理逻辑都是统一的。4. 云端架构设计从接入到可视化的完整链路4.1 云平台选型自建MQTT还是用现成物联网平台边缘端的数据推到哪里去是上云架构的核心问题。选择上我有两种思路自建MQTT服务或者使用现成的物联网平台。自建MQTT服务适合有一定技术团队、想对数据链路有完全控制的项目。核心组件是一个MQTT Broker比如EMQX、VerneMQ、Mosquitto。EMQX在工业界用的很多最大的优点是集群能力强、插件生态丰富支持TLS加密、设备鉴权、规则引擎。用Docker启动一个单机版EMQX非常快适合中小项目和测试环境生产环境建议至少双节点集群避免单点故障。Broker的上游可以接数据订阅程序或者规则引擎把数据写入时序数据库、触发告警或者转发给其他系统。现成的物联网平台国内有阿里云IoT、华为云IoT开源的有ThingsBoard、JetLinks、ThingLinks这些。选择平台的好处是接入、可视化、告警、设备管理都现成开发量小适合快速交付或做物联网毕业设计。缺点是灵活性受平台限制数据模型、界面风格、二次开发都受约束。我自己的经验是给客户做生产系统的数据采集项目我一般用自建MQTT加自定义Web数据链路完全可控给高校做物联网实验室或者给预算有限的小工厂做快速demo直接上ThingsBoard这类开源平台一周就能出效果。4.2 数据链路规划从MQTT到时序数据库的完整管道无论选哪种平台数据链路的大框架都是一样的网关采集PLC数据 - 本地缓存与清洗 - MQTT发布 - MQTT Broker - 规则引擎处理 - 时序数据库存储 - API服务 - 可视化看板与移动端规则引擎承担的是数据处理中枢的角色。它把MQTT收到的原始数据进行过滤、聚合、补算。比如一分钟内收到60条温度数据规则引擎聚合算出这一分钟的平均温度、最高温度、最低温度然后写入另一个聚合桶同时在判断温度超过80℃且持续10秒时触发告警事件。中小规模项目里EMQX自带的规则引擎或者Node-RED的服务端节点就能胜任数据量特别大、需要复杂流计算时才考虑引入Kafka加Flink这套重量级方案但说实话90%的工厂数据采集项目用不到那么重。时序数据库选型我目前的主力是TDengine。它在处理工业时序数据上性能不错SQL风格接近传统数据库支持数据保留策略、降采样、聚合查询而且开源版本够用。InfluxDB也很经典生态成熟但连续查询和降采样配置要自己打理。如果你想用国产的Apache IoTDB在高校和科研机构用得比较多。存储策略上我强烈建议设置多级保留原始数据热存储保留30天分钟级聚合保留一年小时级聚合保留三年。这样既保证近期分析需要的精度又控制存储成本。4.3 可视化与告警设计不仅要看得见还要看得懂数据到了云端最后一步是让人用起来。可视化看板我用两类一类是实时监控型显示设备当前状态、本周产量、当前报警列表给车间主任和老板每天看另一类是分析型展示趋势曲线、OEE走势、故障原因分布给工艺工程师和设备维护团队做月度分析。Grafana是我常用的可视化工具数据源接TDengine或InfluxDB画折线图、柱状图、热力图都很顺手。ThingsBoard自带仪表盘拖拽式操作适合快速交付给客户自己改。如果要做大屏展示用Grafana配合大屏分辨率格式或者用ECharts写定制化图形效果更灵活。告警设计有几个容易忽略的细节。第一是告警必须去抖——温度超限一次不算报警持续3秒才算避免设备瞬间抖动产生误报第二是告警要分组和升级——普通告警推送到值班室严重告警推送到设备工程师连续告警超过10分钟再升级到厂长第三是告警通知渠道微信、企业微信、钉钉、短信都要支持不同级别用不同渠道短信留给最严重的。告警风暴也要防设备断电那一瞬间几十个点位同时报警要是每一条都推送所有负责人手机都会被打爆。我的处理办法是设置设备级告警聚合比如某台设备离线超过1分钟就只发一条“设备离线”告警不再发散各个点位告警。5. 端到端实施实录一台西门子S7-1200从PLC到云端的完整过程5.1 PLC侧准备建DB块、开通讯、通网络以一台西门子S7-1200为例我把完整过程走一遍这是我在项目里反复验证过的路径。先在TIA Portal里打开PLC程序在程序块里新建一个DB块命名为“DataToCloud”。在DB块里添加要采集的变量比如运行状态Bool、当前温度Real、累计产量DInt。建好后右键DB块属性勾选“优化块访问”相关设置同时记下DB块的编号比如DB100。S7-1200默认支持S7通讯但要注意连接数限制——基础型号S7-1200最多支持同时几个HMI/上位机连接如果现场已经接了人机界面再添加网关可能超限需要在连接机制里进行限制设置或者改用PUT/GET通讯方式。如果PLC程序允许修改可以创建一个专用的DB块不参与控制逻辑只作为数据镜像区这样对原程序的影响最小。PLC的IP地址设置成192.168.0.10子网掩码255.255.255.0。网关工控机设置固定IP为192.168.0.20用一根网线把PLC和工控机接到同一个工业交换机上。工控机上装一个S7通讯测试工具可以用开源库如Snap7写个小命令行程序也可以用商业库HslCommunication的Demo直接填IP、Rack、Slot去读。能读出DB100的数据说明链路是通的可以进行下一步。5.2 网关侧配置Node-RED从读取到发布工控机上安装Node-RED这一步我踩过不少坑。Node-RED在Node.js环境下运行国内安装时经常遇到npm源下载慢的问题建议先配置npm淘宝源再装。然后安装三个关键节点库node-red-contrib-s7读西门子PLC、node-red-contrib-modbus读Modbus设备、node-red-contrib-mqtt-brokerMQTT发布。创建流程的思路是S7节点定时读取DB块 - function节点解析和格式化成JSON - MQTT节点发布到云端。S7节点的配置里填PLC的IP、Rack0、Slot1变量列表按“DB号;偏移量;数据类型”的格式填写比如“100;0.0;bool”、“100;4.0;real”。轮询周期我按2秒设置这个频率对大部分场景足够。中间一个function节点把读取结果包装成统一格式代码大致是这个逻辑// 读取到的变量在msg.payload中重新组装消息 var deviceId S7-1200-Line1-01; var ts new Date().toISOString(); var values { running: msg.payload.running, temperature: parseFloat(msg.payload.temperature.toFixed(2)), totalCount: msg.payload.totalCount }; return { topic: factory/line1/machine01/properties, payload: JSON.stringify({ deviceId: deviceId, timestamp: ts, values: values }) };MQTT节点配置云端Broker的地址。发布QoS根据数据重要程度选择我一般用QoS 0或1不用QoS 2因为QoS 2的性能开销大而且工业数据偶尔丢一条影响不大。如果断网Node-RED本身没有自动缓存能力所以我在这条链路里加入了一个SQLite缓存逻辑数据先写成一条消息插入SQLite再由发送节点读取并推送推送成功后删除记录。5.3 云端接入与端到端验收云端这边用一台云服务器Docker部署EMQX。docker run -d --name emqx -p 1883:1883 -p 1883:8083 -p 8084:8084 -p 18083:18083 emqx/emqx:5.xEMQX启动后通过Dashboard创建账号在客户端连接测试里用MQTTX填入服务器地址和账号密码订阅Topic然后回到PLC程序里把模拟量强制改成一个新值。观察传感器——如果MQTTX里收到了更新说明整条链路通了。接下来把数据接入时序数据库。我用EMQX规则引擎将MQTT消息直接写入TDengine创建一条规则SQL语句从Topic中提取字段目标动作写入TDengine的数据表。TDengine里建一张超级表字段包括ts、device_id、running、temperature、total_count通过设备ID创建子表。这样查询任意一台设备的历史曲线就非常方便了。端到端验收建议做三个检查一是在PLC里强制修改温度值看云端实时值和告警是否正确二是断开网关的网络连接模拟断网恢复后看补传数据是否完整、时间是否连续三是连续跑24小时对比PLC侧累计产量和云端入库的产量误差要为零。这三个检查都通过了这套采集链路的可靠性才算达标。6. 项目上线之后踩过的坑安全、可靠性和长期运维6.1 安全边界别让PLC直接暴露在公网上很多人做PLC数据采集上云图省事直接把PLC映射到公网或者把网关的MQTT端口裸奔在公网。这是工业现场最大的安全隐患。一旦有人扫描到了这些端口可以尝试对PLC发起恶意通讯轻则干扰控制逻辑重则导致设备停线。我的做法是三条线隔离。第一PLC控制网和采集网分离网关只通过白名单访问特定PLC的特定端口第二云端Broker只开放MQTT TLS端口使用证书对网关做设备认证不允许匿名连接第三即使网关被攻破它也只能读写采集用的数据区无法触达控制指令。如果一定要做远程控制加一层专用控制服务器所有指令写审计日志且指令必须经过设备返回的确认信号才算执行成功。这套体系在我做的项目里运行了一年多没有发生过安全性问题。6.2 断网续传与数据补偿工厂的办公网络确实容易出幺蛾子——上次客户把交换机重启了一下配置没保存网关和云端断了整整半天。如果网关没有本地缓存那半天数据就全丢了。断网续传我在5.2提过SQLite缓存基本能解决但还有一个细节值得强调补传时的时序一致性。云端存储数据的timestamp必须用设备侧或者网关侧的时间戳而不是云端接收数据的时间。因为补传的数据接收时间是延迟后的如果云端按接收时间入库整个时间序列就乱了。解决办法是网关在发布数据时就带上时间戳云端写入时序数据库时以该时间戳为准。就有一次我没注意补传的数据时间戳全部是同一秒——因为网关发送时统一打了当前时间结果那一段的曲线变成了一根垂直的线。后来改成分条记录原始采集时间问题才解决。6.3 时钟同步PLC时钟不准比你想的更常见PLC时钟不准是所有数据采集项目里最容易忽略又最难排查的问题。很多老PLC的时钟芯片精度低加上长期不断电时钟会逐渐漂移。如果网关、PLC、云端三者的时钟不统一你看到的数据曲线会被细节失真的时间戳搞乱。解决思路是三级同步网关工控机使用NTP同步网络时间PLC侧尽量在程序里做一次校时逻辑——开机时从网关读取时间写入PLC时钟云端所有时间处理统一使用UTC存库页面展示时按时区转换。如果某些PLC实在不支持校时那就以网关接收时间为准但必须在数据表里标注清楚时间来源免得后续分析时拿错时间字段。6.4 长期运维的几条建议项目上线容易长期跑下去难。几个运维上的经验分享给各位。第一PLC侧改动要谨慎。每次修改PLC程序前必须全量备份程序采集配置里的DB地址变了要及时同步修改否则第二天云端数据全是空的。我吃过一次亏客户更新了一条产线的PLC程序加了几行逻辑导致DB块里面的偏移量整体后移网关还在读原来的地址读出来的全是“接近零”的垃圾值。第二采集配置要版本管理。网关里跑了一大堆节点、数据库配置、脚本建议全部用Git管理每次改动记录清楚。Node-RED的流程可以导出成JSON文件放到仓库里换一台网关几秒钟就能恢复。第三监控采集链路本身。这个反直觉但很重要数据采集系统自己不监控自己断了也没人知道。我会在云端定期发一个探活消息给网关网关回复心跳如果超过两分钟没收到心跳云端自动告警比客户发现数据断了再反馈给我们要主动得多。网关的CPU占用率、内存使用量、MQTT连接状态这些指标也要纳入监控范围尤其是缓存文件大小——缓存无限膨胀导致磁盘写满是最常见的网关宕机原因。第四关于上位机读PLC的频率。用C#写读取程序时我看到很多人用线程循环去高频读PLC有的甚至每10ms读一次这其实非常不健康。读取频率应该和实际用途挂钩监控用途1秒足够数据采集用网关统一处理上位机尽量通过本地缓存或订阅变更事件来减少IO交互。如果确实要高频读取改成批量读取连续地址一个请求把几十个变量读回来远远比分别读几十次效率高。做PLC数据采集上云这件事技术难点从来不在一块传感器或者一个看板而是在整条链路上任何一个环节的可靠性。我第一次把PLC数据真正跑到云端的实时看板上时客户盯着屏幕看了半天说了句“原来这台设备每班要停这么多次”。那一刻我就知道这个方案是有价值的。如果你正准备做类似项目我的建议是别急着铺设备覆盖面先打通一台设备、一条数据流、一个看板再慢慢往四周扩展。架构想清楚链路走一遍坑踩过几个后面的规模化就是水到渠成的事。