很多年前我入行做自动化项目时,最头疼的不是梯形图怎么写,而是“PLC的数据怎么弄上来”。现场设备品牌五花八门,西门子、三菱、欧姆龙、汇川、台达、信捷都有,上位机要么用组态软件,要么自己写程序。一旦遇到跨品牌数据采集、老设备改造、远程监控这类需求,就得重新评估方案。最近好几个朋友来问“PLC采集方案到底怎么选”,网上资料零散,要么只讲某个品牌,要么只给几条命令。我干脆结合这些年实际做过的项目,把主流的PLC数据采集方案从头到尾拉通横评一遍,从实时性、稳定性、开发效率、成本这几个维度说清楚,顺带把踩过的坑也抖出来,供准备做采集的朋友参考。
1. 为什么要做PLC采集方案横评?先理清需求
1.1 不同品牌PLC的协议生态差异
先说一个最容易被新手忽略的事实:PLC数据采集从来不是“插根网线就能读”的事。每个品牌都有自己的私有协议,甚至同一品牌不同系列协议也不一样。
西门子老款S7-200/300用的PPI、MPI协议,S7-1200/1500走S7协议,同时也支持Modbus TCP和OPC UA;三菱FX系列常见的是MC协议(三菱专用),Q/L系列有MC协议、CC-Link,新版机型也开始支持OPC UA;欧姆龙则常见HostLink、FINS协议,NJ/NX系列支持EtherNet/IP和OPC UA;国产品牌里汇川、台达、信捷大多以Modbus RTU/TCP为主,部分支持OPC UA。
这意味着,想用一个统一的采集方案把所有PLC的数据都拿回来,基本不现实。要么想方设法去适配各种协议,要么借助中间件统一转换,要么就换一个能兼容多协议的硬件网关。做横评之前,必须把你现场涉及的PLC品牌和具体型号列清楚,再看方案是否覆盖,这一步省不了。
1.2 横评的维度:如何判断一个采集方案好坏
很多人评判采集方案时只看“能不能通”,这个标准太低了。做横向对比,我习惯从六个维度去打分:
- 实时性:从PLC内部数据变化到上位机看到数据变化之间的延迟,单位毫秒级别,能直接影响控制效果。
- 稳定性:长时间运行有没有断线、卡死、丢数据,断网后能不能自动恢复。
- 并发能力:几个客户端同时读数据会不会冲突,采集程序会不会影响PLC主循环。
- 易用性:开发难度,要不要写协议,要不要配复杂映射。
- 成本:软件授权、中间件费用、硬件投入,以及后续维护的人工成本。
- 落地维护:是不是依赖于某个特定大牛才能改,还是普通电气工程师也能维护。
我见过很多项目,前期贪便宜选了一个“免费”方案,结果上线后每周都要重启服务,最后算维护成本比买授权还贵。所以横评不是比参数表,核心是看方案和你的实际场景是否匹配。
2. 主流PLC采集方案逐项拆解
2.1 方案一:原生上位机组态软件(如WinCC、GT Designer、威纶通EBPro)
你要是只想在产线旁边挂一块触摸屏或一个监控电脑,那直接用组态软件是最省心的。西门子对应WinCC,三菱有GT Designer配合GX Works,台达、威纶通、昆仑通态这类主流触摸屏软件基本都内置了自家PLC的驱动,选好型号、填好IP就能读。
这个方案最大的优势是稳定性和实时性极好。毕竟组态软件是原厂或深度适配厂商开发的,对自家协议理解最透彻,而且有成熟的驱动层,不需要你自己处理报文细节。西门子S7-1200配WinCC,数据刷新能做到几十毫秒,画面动画很流畅。触摸屏也一样,威纶通连自家设备几乎即插即用。
但缺点同样明显。一是软件授权贵,WinCC的RC版一个点位几百块很正常,大型系统几十万个点位的费用高得离谱。二是平台封闭,WinCC只能在Windows下跑,GT Designer也是绑定Windows,做不了跨平台部署。三是灵活性差,你想对数据做复杂的算法、报警联动、数据库存储、Web发布,组态软件要么内置功能有限,要么写脚本巨痛苦。四是采集来源受限,它主要做监控人机界面,如果要做旁路采集或数据中继,就有点力不从心。
所以我把这方案定位为“最稳但不灵活”,适合纯画面监控,不适合做数据深度处理和系统集成。
2.2 方案二:基于OPC UA/OPC DA的数据网关(如KepwareEX、Simatic NET、IoTDB)
做了多年数据采集的工程师肯定绕不过OPC。OPC是工业通信的“翻译官”,它定了一套统一的数据接口,PLC厂家只需要提供OPC Server,上层系统用OPC Client就能读取数据,而不再关心底层是西门子、三菱还是欧姆龙。
实际项目中,KepwareEX是使用率最高的OPC网关软件,它内置了大量PLC驱动,比如西门子S7协议、三菱MC协议、欧姆龙FINS等,配置一个设备,填IP、选型号,软件就会自动轮询并把数据映射成OPC标签。上层再用Python写一个OPC UA Client,就能把数据读出来进MES或数据库。
OPC方案最大的好处是“统一接口”,尤其适合多品牌设备混合的车间。你换个PLC品牌,只需在Kepware里重新配一下驱动,上层代码几乎不用改。而且OPC UA本身支持加密、数据模型、历史数据,能很好地面向未来工业互联网场景。
但这个方案也有坑。一是软件和授权费不便宜,Kepware按驱动和点位收费,一个驱动开发授权几千上万很常见。二是部署复杂,OPC UA Server需要一台常驻的服务器或工控机,这台机器不能随便关机,否则采集就断了。三是实时性受轮询和缓存影响,如果点位很多、PLC扫描周期又短,OPC Server可能成为瓶颈。四是OPC DA依赖Windows COM/DCOM,跨域、防火墙配置极其痛苦。现在新项目我都尽量让客户上OPC UA,踩过一次OPC DA跨域安全配置的坑,真的不想再体验。
2.3 方案三:基于Modbus TCP/RTU的直接轮询
如果PLC支不支持OPC,或者不想买Kepware,那Modbus是很多人的第二选择。Modbus协议是公开标准,报文结构也简单,几乎所有PLC都支持作为Modbus从站或主站。国产品牌比如汇川、信捷、台达更是默认支持Modbus,西门子S7-1200也可以通过指令块或固件扩展支持Modbus TCP。
用Modbus采集,意味着你可以直接写程序去读,Python有pymodbus、C#有NModbus,Node-RED也有现成的Modbus节点。开发起来门槛比OPC低得多,不需要服务器,嵌入到设备程序里就行。成本几乎为零,因为就用了PLC自带的一个通信口。
但缺点也非常直接:你需要自己搞清楚PLC里哪些数据在哪些寄存器地址上。比如三菱D100在Modbus映射里是400101还是400001,每个品牌都不一样。而且PLC的保持寄存器、线圈、输入寄存器之间的映射规则需要查手册,很容易搞混。另外,Modbus轮询是“一问一答”模式,PLC只能被动响应,实时性取决于轮询周期和点位数量。点位少的时候几十毫秒没问题,点位一多,轮询周期就得往上加,否则会拖垮PLC。
这个方案还有一个隐藏问题:PLC作为Modbus从站时,很多PLC默认只允许一个主站连接。也就是说,你写了采集程序之后,触摸屏就不能再通过Modbus连同一个PLC了(有些支持多连接但要看型号)。实际项目里头,触摸屏和上位机同时连接的情况非常多,这一点要在选型之初就确认清楚。
2.4 方案四:基于以太网Socket直连原厂协议(如S7协议、MC协议)
再往高级一点走,就是绕过一切中间件,直接用Socket跟PLC通信,读取和写入底层报文。西门子的S7协议、三菱的MC协议,都是基于TCP/IP的应用层协议,只要抓包分析出报文格式,就能用任何语言实现。
这个方案的好处是性能极高、控制力极强。我曾经用C#写过一个基于Sharp7库的S7采集程序,读西门子S7-1200的100个点位,刷新周期能做到5毫秒以内,比OPC和Modbus都快。而且因为是直接建立TCP连接,不依赖操作系统里杂七杂八的服务,运行时资源占用很小,适合嵌入式设备或高性能场景。
但它也是门槛最高的方案。协议文档不公开,需要靠抓包、查社区、读厂家库反推。即使有Sharp7、S7netplus这类开源库,也基本只挑了核心功能覆盖,遇到特殊数据类型、复杂数据结构,还是得自己啃协议。此外,每个品牌都有自己的私有协议,三菱MC和S7完全不同,你不可能用一个库通吃。
所以实际中,我通常只在“单品牌、点位多、实时性要求高于50ms、有专门开发人员”的场景下推荐Socket直连。比如电池焊接设备的压力曲线采集,数据刷新慢了就捕捉不到峰值,这种场景就是Socket直连的主场。
2.5 方案五:边缘计算网关/工业物联网关
最近几年最热门的采集方式,就是上一台工业物联网关。这类网关本质是个嵌入式小盒子,内置了各种PLC协议和Modbus、OPC UA等标准协议解析,用户只需要在网页端配置好PLC型号和IP,指定要采集的数据点,网关就会自动把数据读出来,再通过MQTT、OPC UA、Modbus TCP转发到上位机或云平台。
我做过的项目里用过蓝蜂物联网关、华辰智通网关,也用过开源的Node-RED跑在工控机上的“软网关”方案。硬件网关的好处是部署极其简单,不用写一行代码,几百个点位通过Excel导入就能配完。而且网关一般都有断电保护和断网缓存,数据在本地保存一段时间,网络恢复后自动补传,稳定性远强于自写程序。对于现场没有专职IT人员的小工厂,这是最友好的方案。
缺点也很现实:单台网关的价格通常在几百到两三千不等,点位多时还要换更高配置的型号。其次是二次开发能力弱,网关的配置是“菜单式的”,你想做任意逻辑、定制告警、数据清洗,很难在网关里实现。另外,部分网关在轮询大量点位时性能会明显下降,要注意选择。
我个人的感受是,边缘网关适合“采集传输”这个环节,不适合“数据应用”。它把数据和云端之间的通道打通了,但要是你想做复杂的数据分析,还是需要后面接一套软件或者自己写程序。
3. 实战横评:五大方案在真实项目中的表现对比
3.1 测试环境与搭建细节
光说不练假把式,我在工作室搭了一个模拟现场环境,把五个方案都实际跑了一遍。测试对象是一台西门子S7-1200 PLC(固件版本V4.5,支持S7协议、Modbus TCP、OPC UA),另加一台国产信捷PLC做Modbus TCP从站。上位机是一台i5工控机,Windows 10系统,安装了Python 3.10、KepwareEX(OPC UA)、TIA博途和Sharp7库。
我预先在S7-1200里建了100个DInt类型的数据点,周期1秒更新一次,模拟设备运行数据。采集周期统一设为100毫秒,连续跑48小时,记录数据刷新延迟、丢包率、CPU占用率以及断网重连恢复时间。测试时用串口服务器 + 网线做了断网模拟,人为拔掉网线30秒再插回去,观察各方案恢复情况。
3.2 实时性指标对比
先说结论:Socket直连(Sharp7)实时性表现最好。同样100毫秒轮询周期下,Sharp7采集程序从数据更新到上位机收到变化,延迟基本在5~15毫秒,这是因为TCP直连没有中间层缓存,报文一到就解析。而且Sharp7支持批量读取,一次性把100个DB块数据读回,效率很高。
排在第二的是OPC UA方案,KepwareEX + Python OPC UA Client,延迟约20~50毫秒。Kepware内部有自己的缓存,当服务器轮询完PLC后更新时间戳,客户端读取的是缓存数据,所以会有一定延迟。好处是点位多了以后,Kepware会做批量优化,数据一致性较好。
第三是Modbus TCP直连轮询,延迟约30~80毫秒。因为我用的是pymodbus逐个读寄存器,100个点分了几次请求,加上PLC内部处理Modbus请求的耗时,延迟自然就上去了。如果优化成连续读取多个寄存器,速度可以提升不少,但要小心跨寄存器区域的限制。
组态软件(我用西门子WinCC Unified做测试)实时性表现也不错,刷新延迟约20~40毫秒,毕竟原厂驱动优化做得很好,但必须配合原厂环境,而且我测试时才连接了100个点,点位一旦上千,刷新时间难免变慢。
边缘网关实时性最差,延迟约100~200毫秒。这主要是网关内部为了保证数据可靠性,默认做了缓存和批量上报,比如500毫秒打包一次数据,自然会增加延迟。如果现场只做监控显示不涉及控制,这个延迟可以接受。
3.3 稳定性与断线重连对比
48小时连续运行后,所有方案数据都基本完整,差异在断线重连环节体现出来了。拔掉网线30秒再恢复连接,各组恢复情况如下:
- 边缘网关恢复最快,基本在1秒内自动重连,而且断线期间的数据(30条)在恢复后自动补传上来,一条不丢。
- 组态软件和Kepware恢复也很快,约5秒内恢复,但断线期间数据会丢失,Kepware会标记数据质量变“Bad”,恢复后重新读取最新值。
- 自写Python Modbus程序恢复较慢,我这里卡了大约15秒,因为我只做了简单的socket重连循环,没有做指数退避和连接状态检测,导致重连时还在尝试旧连接。
- Sharp7直连程序稳定,恢复约3秒,但恢复后也需要重新订阅数据块,需要代码处理事件。
这个结果很能说明问题:前期多花点时间把断线重连和缓存机制做扎实,比后期处理数据丢包要划算得多。我自己第一次写采集程序时,就是忘写了断线重连,结果现场一断网,整个监控页面就“死了”,后来只能天天跑现场重启服务。
3.4 开发效率与成本对比
从启动开发到拿到第一个点数据的时间来算:
- 边缘网关最快,从拆包装到配置完100个点,大约2小时,因为直接在网页里选型号、填IP、导入点位表就行,开发成本几乎为零,但硬件单价会高一些。
- 组态软件也快,威纶通或WinCC里新建项目、选驱动、填IP、批量建变量,3小时左右可以搞定。不过软件授权费用高,点位多了授权费递增明显。
- Modbus直连开发需要1~2天,主要时间花在地址映射和数据类型转换上。网上的pymodbus示例很多,照葫芦画瓢不算难,但搞错一个起始地址就可能读出一堆乱数。
- OPC UA方案,如果单纯用Kepware配置也就半天,但如果要从头写OPC UA Server(比如用open62541),那就是一周以上的活了。一般项目中还是用Kepware现成的多。
- Socket直连最耗时,虽然Sharp7库很成熟,但理解S7报文结构和数据块偏移地址就需要一周,如果是三菱MC协议还要自己抓包分析,开发周期轻易拉到两周以上。
成本上,按100个点位、单台PLC、本地采集为例,授权费低到高的排序是:Modbus自写程序(0元)、Sharp7自写程序(0元)、边缘网关(硬件约几百元)、Kepware OPC(授权几千元)、WinCC(半万起步)。但这里只算了软件/硬件费,没算调试工时,实际上自写程序一旦出了问题,调试成本远高于买授权。
3.5 综合评分表
我按五个维度给各方案打一个个人向的分数(10分制),仅代表实测感受,大家结合自己项目调整:
| 方案 | 实时性 | 稳定性 | 易用性 | 成本低 | 扩展性 | 综合推荐指数 |
|---|---|---|---|---|---|---|
| 组态软件 | 8 | 9 | 9 | 3 | 4 | 6.6 |
| OPC UA(Kepware) | 7 | 8 | 7 | 5 | 9 | 7.2 |
| Modbus直连 | 6 | 6 | 6 | 9 | 6 | 6.6 |
| Socket直连 | 9 | 7 | 4 | 9 | 7 | 7.2 |
| 边缘网关 | 4 | 9 | 9 | 6 | 7 | 7.0 |
注意这张表只针对“单PLC、中小点位”的常规场景。如果是大型多点位、多品牌,OPC UA和边缘网关的扩展性权重会迅速拉高,Modbus和Socket就没那么香了。
4. 结合项目场景的选型建议与避坑指南
4.1 不同场景选型建议
根据我的经验,没有绝对最好的方案,只有结合具体场景最合适的方案。下面几个典型的选型场景,可以直接照抄作业:
- 场景A:单台设备,旁边配一台触摸屏看数据 —— 首选组态软件自带驱动或触摸屏直连,不用搞复杂的采集方案,稳定且容易维护。
- 场景B:多台不同品牌PLC,数据要汇总到一个MES系统 —— 首选OPC UA方案。Kepware负责把各种协议转为OPC UA,MES系统统一用OPC UA Client读,架构清晰,后期换设备品牌都不用改上层。
- 场景C:高频数据采集,比如振动、压力曲线 —— 首选Socket直连原厂协议,延迟最低,能捕捉到更细腻的数据变化。但前提是必须有一个熟悉协议的开发人员。
- 场景D:设备分散在各地,要求上云远程监控 —— 首选边缘网关+MQTT,网关在本地缓存数据,断网续传,云端负责存储展示,省去现场电脑维护成本。
- 场景E:预算极低,只要临时采集数据做测试 —— 用Python+Modbus TCP,几百行代码跑起来,能做灵活的数据处理。如果PLC不支持Modbus,那就只能写Socket或找个采集盒子。
4.2 常见实施踩坑记录
横评过程中我踩过不少坑,这里挑几个典型的写出来,每一个都是血泪教训。
第一,VMware虚拟机连接PLC的网络模式问题。开发上位机时,我习惯在虚拟机里跑测试工具,结果死活ping不通PLC。折腾半天发现是虚拟机的网络模式用了NAT,PLC和服务器的IP段根本不在同一层。解决方法是把网络模式改成“桥接模式(Bridge)”,同时虚拟机的IP要和PLC设置在同一个网段,比如PLC是192.168.0.10,虚拟机就设置成192.168.0.20,才能正常通信。这个坑看着小,但真的能卡掉一下午。
第二,西门子通信模块报警8180错误。用S7-1200做通信时,有时候CPU模块会报8180错误,多半不是硬件问题,而是IP地址冲突或通信连接数超限。比如同时有多个客户端连接同一个PLC,连接数被占满,新的连接就会失败。解决办法是给PLC的IP做固定分配,并且控制同时连接的数量,或者开启PUT/GET通信权限,在CPU属性里勾选“允许从远程伙伴(PUT/GET通信)访问”,不加这个选项,很多第三方采集工具根本连不上。
第三,台达PLC做485从站时,最容易踩的坑是站号设置和停止位配置。RS485现场总线不像以太网,所有参数必须通信双方完全一致,不仅波特率、数据位、停止位、校验位要一致,站号也不能重复。我遇到过一台台达PLC配置成站号1,另一台也站号1,导致上位机读到两组错乱的数据。排查时建议先用串口调试助手逐个设备扫描,确认每个站点的响应。
第四,信捷PLC作为Modbus TCP服务器和海康相机通信时,最大的坑是地址映射。信捷PLC的寄存器地址和Modbus地址不是直接对应,比如D寄存器在Modbus报文里可能映射为4xxxx,但偏移量要按手册转换。海康相机作为Modbus客户端,需要你把相机的读写寄存器和PLC的地址严格规划好,否则数据就会错位。类似问题在汇川、三菱上也常见,做之前先查每个品牌的Modbus映射表。
第五,关于PLC数字量输出点控制变频器,经常有人问“开关量控制变频器和数字量控制变频器是不是一回事”。本质上数字量输出点输出的就是开关量,两者可以认为是一回事。实际区别在于硬件接口形式:变频器的数字量输入端子一般支持干接点,PLC的晶体管输出是DC24V电平信号,直接接可能电压不匹配,需要中间继电器做隔离转接。常见故障就是PLC输出端烧了,因为电流超过了晶体管输出的最大能力,正确做法是加中间继电器(比如24VDC线圈+触点)再去接变频器端子。
4.3 从热词看行业趋势:AI生成PLC代码与采集结合
最近“AI PLC代码生成”这个话题很火,我也体验过一些基于GPT的PLC编程辅助工具。它们能根据自然语言自动生成梯形图或结构化文本,比如直接说“读取M100,如果为ON,则置位Q0.0”,AI能生成对应代码。这确实能提高编程效率,尤其是在做数据块定义、通信配置这些重复劳动时非常有用。
但用在PLC采集方案里,我还是建议保持谨慎。PLC直接参与设备控制,代码错误可能导致安全事故。AI生成的代码可以用于辅助生成数据采集的映射配置、协议示例,但一定要在仿真环境里跑测试,并且让有经验的工程师审查关键逻辑。我在测试AI生成的S7通信配置时,发现它把数据块地址算错了两位,这种错误如果直接下发到现场,后果很严重。
另外,AI在导出OPC UA节点映射表、生成Modbus寄存器地址清单这类“表格型”工作上也很好用,能省不少时间。我现在的习惯是:用AI辅助生成初稿,用自己的检验脚本核对地址偏移和数据类型,确认无误后再上真机。这比完全相信AI靠谱多了。
5. 部分核心代码示例与配置参考
5.1 Python Modbus TCP 采集西门子S7-1200
如果你PLC里组态了Modbus TCP从站,可以直接用pymodbus读。以下示例从S7-1200的保持寄存器地址400001开始读10个字:
from pymodbus.client import ModbusTcpClient PLC_IP = '192.168.0.10' PLC_PORT = 502 client = ModbusTcpClient(PLC_IP, port=PLC_PORT) client.connect() # 读取保持寄存器,起始地址0,数量10,从站单元ID为1 read = client.read_holding_registers(address=0, count=10, slave=1) if read.isError(): print("读取失败:", read) else: for i, val in enumerate(read.registers): # 根据实际数据类型做转换,比如DInt可能占两个字 print(f"寄存器 {i}: {val}")注意几个坑:一是很多PLC在组态Modbus从站时,映射的起始地址是从0开始的,但上位机看到的Modbus地址是400001,对应就是地址偏移0。二是西门子数据是大端模式,读取多字节时高低字节有可能颠倒,需要按需要做字节交换。三是如果PLC里没有组态Modbus从站指令块,直接连上去会超时,别问我怎么知道的。
5.2 基于Sharp7的C#直连S7-1200示例
Sharp7是C#下非常成熟的开源S7通信库,操作直观。下面是一个简单的读取示例:
using Sharp7; string ip = "192.168.0.10"; S7Client client = new S7Client(); int result = client.ConnectTo(ip, 0, 1); if (result == 0) { // 读取DB1中的前4个字节 byte[] buffer = new byte[4]; result = client.DBRead(1, 0, 4, buffer); if (result == 0) { int value = S7.GetIntAt(buffer, 0); Console.WriteLine("DB1.DBW0 = " + value); } client.Disconnect(); }Sharp7的好处是直接操作字节流,速度快。缺点是你要自己知道DB号和字节偏移。实际项目里我从TIA博途导出DB块后,是用Excel辅助生成偏移地址映射,再手动对应到Sharp7的DBRead/DBWrite调用里。如果不做映射管理,几十个DB块找地址会找到崩溃。
5.3 三菱PLC MC协议读取D寄存器要点
三菱FX/Q系列最常用的以太网协议是MC协议(3E帧)。如果自己写Socket程序,报文大概是这样:请求头包含子头、网络编号、PLC编号、IO编号、站号,然后是指令字(0401表示批量读取)、起始地址和长度。比如读取D100开始的10个寄存器:
- 请求:D0 00 00 FF FF 03 00 00 00 01 04 01 00 00 64 00 0A
- 响应:D0 00 00 FF FF 03 00 00 00 01 00 00 14(后跟20字节数据)
MC协议地址计算要特别注意,D寄存器的起始地址一般公式为地址 = 目标寄存器数值 ÷ 2,比如D100对应的地址字是0x0064。三菱MC协议有专有二进制帧和ASCII帧两种,二进制的效率更高,但调试时不如ASCII直观。自己写过多台三菱采集之后,我还是建议直接用现成的库,比如MCProtocol开源库,或者用三菱官方MX Component,省去造轮子的麻烦。
5.4 Node-RED快速实现PLC数据可视化
如果你不是程序员,又想让数据上大屏,Node-RED是个特别好的工具。它图形化拖拽节点就可以搭建采集链路。
安装node-red-contrib-modbus节点后,新建一个Modbus TCP客户端,配置PLC的IP和端口,然后添加一个“读保持寄存器”节点,设置起始地址和数量。输出节点可以连到Dashboard的Gauge控件,或者直接连到MQTT节点发到云平台。
我用Node-RED做过一条产线的数据看板,从安装到出界面不到两个小时,对非专业程序员非常友好。唯一的坑是老版本Node-RED对多字节数据类型支持不够好,比如32位浮点数需要自己组合两个字,最新的4.x版本已经有Buffer解析节点,灵活很多。
最后分享一个实操体会
横评做到后面,我心里有一个很深的感受:PLC采集方案没有标准答案,每个人手里都有一套适合自己的牌。我从Modbus自写程序入坑,中途被VMware网络连接折磨过,也被Kepware授权费用劝退过,最后在不同项目里分别用不同方案,才算把这条链路摸透。如果你想入这行,我建议从最简单的Modbus TCP开始,拿手头的一台PLC做实验,把数据读通、看到实时变化,再逐步尝试OPC UA和Socket直连。真正跑通一遍之后,再去选哪一个方案,心里就会非常有底。至少你在现场再遇到“连不上PLC”的鬼问题,大概率能自己排查出是IP冲突、协议没开、还是地址映射错了——这些,都是花钱也买不来的经验。