最近一年,我在技术群里看到最频繁的一个话题,就是"软件定义自动化是不是要把PLC淘汰"。说真的,这个话题每隔几年就会被翻出来吵一轮,每次都能吵出几百条,但真正落到产线上能做出判断的没几个。我自己的态度很明确:PLC不会死,但也不可能再像过去三十年那样,作为一台"铁疙瘩"安安静静躺在电柜里了。从2005年我第一次对着S7-200写红绿灯梯形图,到后来用TwinCAT做EtherCAT运动控制,再到现在帮客户搭建基于OPC UA的数据采集平台,我算是一路看着控制器形态变化的。这篇文章就围绕软件定义自动化与PLC这个核心矛盾,聊聊我这些年做现场调试、做数字化项目、用软PLC和仿真器踩出来的经验,也顺便解答一些大家搜索时经常遇到的问题。如果你也是自动化工程师、PLC学徒、或者正在搞数字孪生和产线IT化改造的朋友,这篇文章可以给你一个相对务实的判断框架,而不是人云亦云。
1. 先说结论:PLC死不了,但要换一种活法
1.1 "PC会取代PLC"早在二十年前就喊过
1990年代末到2000年代初,PC-based控制喊得特别响。当时很多厂商推出了基于Windows的SoftLogic,论调跟今天几乎一模一样:"PLC又贵又封闭,性能也不行,随便一台工控机就能搞定,还便宜。"结果怎么样呢?PC确实在HMI、SCADA层面全面接管了上位机,但在设备控制层,PLC依然是出货量最大的控制器,三菱FX系列、西门子S7-1200/1500、罗克韦尔这些品牌越卖越多。
这不是因为工程师保守。产线停一小时的损失,足够买几百台PLC,在可靠性面前,没人愿意用"试试看"的态度做选型。所以每一次"PLC要死"的论调,最后都变成了"PLC的上层架构被重构"——控制设备还在,控制逻辑的承载方式变了。
1.2 把PLC拆开看,真正值钱的是哪几层
我经常跟刚入行的朋友说,看待PLC别把它当成一个"产品",要拆成四层来看:
- 实时执行内核:固定扫描周期、看门狗、优先级固定的循环调度。
- IO映射层:把物理输入输出与程序变量绑定,保证每个扫描周期的数据一致性。
- 工程开发层:梯形图、ST、FBD编程,在线监控、强制变量、故障诊断。
- 通信协议栈:Profinet、EtherNet/IP、Modbus、OPC UA等。
这四层现在每一层都在发生变化,但里面有一个不可撼动的核心诉求:确定性。实时内核保证"这个周期必须在规定时间内跑完",IO映射保证"我读到的是一致的一个快照",工程开发环境保证"现场工程师能快速定位问题",通信栈保证"数据可以在设备间可靠交换"。软件定义自动化可以改变这些层之上的上层架构,但改变不了"确定性执行"这个工业刚需。
所以我说"换一种活法",指的是PLC的形态会被吸收、被虚拟化、被重新定义为"运行在合适硬件上的实时控制运行时",但PLC所代表的控制方法论,不会消失。
2. "软件定义自动化"到底想定义什么
2.1 控制面与执行面的解耦:从SDN借来的逻辑
软件定义这个提法,最早被大众熟知是因为软件定义网络(SDN)。它把网络设备的控制面(路由决策)和转发面(数据转发)拆开,让一台集中控制器下发流表,交换机专心转发。工业自动化的软件定义思路也有类似影子:以前控制逻辑写在PLC里,改逻辑就得改设备;现在很多人在做的,是把逻辑尽量往上层平台提,让设备层只负责采集和执行。
在这个架构里,OPC UA是一个关键接口标准。很多人以为OPC UA只是一个数据读取协议,但它真正厉害的地方在信息建模——可以把"轴的当前位置""电机的报警状态""当前工艺参数"统一成一个可查询、可订阅的对象模型。所以它天然适合做软件定义自动化中各设备的"开放接口"。你去看现在高频的搜索词,比如"modbus、opc ua协议读取plc、传感器、数控机床等设备的运行状态数据",这就是最典型的落地场景:设备层保持原样,数据层率先软件化。
2.2 虚拟调试与数字孪生,逼着逻辑从硬件里"搬出来"
另一个推动力是数字孪生和虚拟调试。搜索里经常出现"process simulate通过opcua与西门子plc进行通讯",这类软件存在的意义,就是让你在没有真实产线的情况下,把PLC程序跑起来,配合机器人仿真、物流仿真去验证节拍和干涉。这是制造业降本增效的重要一环——调试周期直接压缩到原来的三分之一甚至更短。
想做到这一点,单靠传统PLC的仿真功能是不够的。真实PLC的仿真器往往只能模拟逻辑,模拟不了通讯延迟、扫描周期抖动、IO信号变更。所以PLC厂商和第三方软件都在推出更接近真实的虚拟PLC环境。这就是软件定义自动化在工程工具链层面的真实含义:让控制逻辑具备可移植、可仿真的能力。注意,可移植和可仿真不是"淘汰PLC",而是把PLC的逻辑内核变成一套能在多平台运行的软件资产。
2.3 别把"软件定义"误解成"用普通PC直接控制"
我见过很多做IT的朋友,一谈软件定义,就以为要把PLC换成一台Ubuntu服务器加Python脚本。这种想法在设备控制层非常危险。普通PC上的操作系统为了通用性,牺牲了太多确定性:后台服务、网卡中断、桌面渲染、杀毒扫描,任何一项都能打断你的控制周期。
工业领域真正的软件定义,反而是在用一个严格控制逻辑的运行时环境,去屏蔽底层硬件的差异。你在TwinCAT里写ST程序,可能根本不关心扫描周期到底是跑在IPC的核上,还是PLC专用硬件上——你只关心周期是否严格、抖动是否达标。从这个意义上说,PLC厂商早就进入了软件定义阶段,只是它们的定义方式比IT圈更保守、更工程化。
3. 为什么PLC的"确定性执行"仍是工业现场的硬底线
3.1 三重实时指标:响应时间、抖动、确定性
聊到实时性,我建议先分清三个概念:
- 响应时间:从输入信号变化到输出动作的时间。
- 抖动:同一任务每次执行时间的差异。
- 确定性:在规定时间内一定能够完成执行的保证度。
办公软件对前两个指标无所谓,对第三个更是毫无要求。控制不一样。一个安全急停回路,从拍下按钮到变频器断使能,通常要求几十毫秒内完成;一台伺服轴的位置环更新周期是1ms甚至125us,抖动必须控制在几十微秒内。这三个数字里,响应时间可以通过提高硬件性能压缩,抖动和确定性却要靠体系架构来保证。PLC的循环扫描模型,本质上就是一个"最坏情况可预估"的执行模型——只要程序不超时,每个IO周期内,输入采样、逻辑执行、输出刷新都是严格有序的。
3.2 为什么通用运行时扛不起这个责任
用一句通俗的话讲:通用系统上有太多"不可控的线程"在抢你要的资源。
拿Java虚拟机举例,JVM的垃圾回收(GC)会导致Stop-The-World暂停,暂停时间可能从几十毫秒到几百毫秒不等。你很难告诉一个安全联锁:"请你在垃圾回收暂停期间,把急停信号处理完。"Windows的情况也类似,线程优先级可以拉高,但驱动、DPC、ISR的随机抢占永远存在。
这就是工业实时领域会出现INtime、RTX64这些Windows实时扩展的原因。而PLC更极端,直接裸核跑逻辑:没有页面调度、没有虚拟内存、没有后台服务,所有CPU周期都归扫描任务支配——确定性就是这样"裸"出来的。每当有人跟我争论"PC性能这么强,为什么控制不了伺服",我都会让他用性能监视器抓一组调度抖动数据,再回来讲话。
3.3 伺服同步案例:控制器的存在不是为了算得动,而是为了算得稳
我最直接的体会来自一次EtherCAT现场总线轴同步调试。从站设备全部挂在总线上,主站每个周期要完成周期通信、报文解析、位置规划、输出更新。轴越多,整个周期压力越大。这种场景里,PLC或运动控制器的价值不是CPU主频高,而是它有一个"不被打断"的周期节奏。
如果改用非实时通信底座来跑,很可能遇到这种场景:IPC忙于写日志,周期被拖到3ms甚至10ms,轴跟轴的跟随误差在监视曲线上直接拉出一条波浪。你说它算不动吗?算得动。但它算得"不稳",结果就是抖、是振动、是废品。所以运动控制里,确定性比绝对算力更稀缺,这也是PLC短期内无法被通用计算机彻底替代的根本原因。
4. 热词里的高频故障:从PLCSIM启动失败到PLC重置后失联
4.1 PLCSIM Advanced启动失败:一次完整排查链路
很多人搜"s7-plcsim advanced v5.0 plc实例为什么启动不了,且没有报错",或者是"plcsim advanced plc启动不了 error11"。这两个问题我踩过坑,这里给你一套完整的排查链路。
第一优先看版本配套。PLCSIM Advanced V5.0对TIA Portal的版本有明确兼容要求,不同版本之间经常一个补丁对不上就启动不了。而且V5.0对操作系统版本也很挑剔,不是所有Windows版本都受官方支持。建议直接对照西门子官方兼容性列表逐项核对,别相信"应该能用"。
第二步确认虚拟化支撑。PLCSIM Advanced的工作模式依赖CPU虚拟化技术。如果你是在虚拟机里跑它,必然更麻烦——需要在宿主机BIOS里打开VT-x,然后在虚拟机设置里开启嵌套虚拟化,否则V5.0可能直接闪退,连个日志都不留。这个问题非常隐蔽,因为它不报错。
第三步查防火墙和许可证。防火墙拦截PLCSIM与外界通信时,经常表现为"连接没有报错,但就是连不上",这种"假死"很坑。许可证方面,PLCSIM Advanced除了需要安装PLCSIM许可证,有时候还要额外的选项才能建立通信。
最后,去PLCSIM的日志目录看详细输出。Error 11通常不是最终原因,真正的上下文信息往往在后面几行。这也是一个通用排查技巧:遇到"无报错"问题,先去日志里找有报错的记录,再反推触发条件。
4.2 "设备PLC已重置,伺服不工作":丢的不只是程序
另一个搜索高频问题是"某设备plc已重置,伺服电机不工作"。这里的"重置"我理解多半是电池没电,或者有人执行了恢复出厂设置,程序备份没做好。
这种问题我见过太多版本。PLC只剩空壳,设备当然不会动。许多人第一反应是"赶紧把程序灌进去就能跑",但实际还差几步:
- 恢复PLC程序后,先检查固件版本是否和目标设备一致。
- 核对伺服驱动器参数:电子齿轮比、脉冲模式或总线模式、电机是否被正确识别、编码器方向。
- 检查IO映射与现场接线:安全门回路、使能信号、急停继电器。
- 执行回零:对位置控制来说,没有原点,位置闭环无从谈起。
- 手动点动每个轴,确认正反向和限位信号。
PLC重置这件事最大的教训是备份。程序备份之外,伺服参数、轴的设定值、PID参数、配方数据都要定期导出。很多老师傅习惯只保存程序,却不备份伺服参数,出了事只能翻原厂说明书一个人慢慢调,浪费的时间远比备份多得多。
4.3 为什么这些热词恰好说明PLC依然是"硬通货"
把这一批搜索词整体看一遍:有问"mcgs与信捷plc的驱动"的,有问"c#读取plc频率多少"的,有找"基于西门子plc大棚灌溉"的,有做"plc毕业设计"的,还有搜"西门子plc时间锁程序案例"的。
这说明了两个基本事实。第一,PLC在教育、工业现场、自动化改造层面的渗透率不但没有下降,反而因为数字化改造而在扩大。第二,大量工程师的核心烦恼仍然集中在"怎么让设备通信起来、怎么把程序稳定跑起来"这类基础能力上。软件定义自动化讨论得再热闹,自动化行业的基本盘,还是每天要面对的一台台PLC。PLC的人才缺口短期内不会消失,反而更值钱——因为懂PLC的人开始往上层平台走,只知道装接线的人会慢慢失去优势。
5. 软PLC、虚拟PLC与云PLC:形态在变,内核没变
5.1 IEC 61131-3是软件定义最早的一次胜利
聊软件定义而不提IEC 61131-3是说不过去的。这个标准定义了ST、IL、LD、FBD、SFC五种语言,让控制逻辑第一次有了跨厂商的表达方式。今天你在Codesys里写的ST程序,移植到倍福TwinCAT、汇川AM系列、博途里,语法差异并不大。这其实已经完成了软件定义里最艰难的一步:把控制逻辑从特定厂商的特定CPU中解放出来。
剩下的,只是运行时硬件的差异和库函数的差异。所以从编程语言的视角看,PLC的工程生态早就在软件化了。所谓"淘汰",只是有些人看不到这份历史积累。
5.2 Codesys、TwinCAT到底算不算PLC
很多初学者会问:Codesys不是软件吗?为什么说它也算PLC?这个问题其实很好回答。
Codesys确实是IDE加运行时,但它的运行时遵循IEC 61131-3执行模型,拥有确定的扫描周期、IO映射和诊断机制。把它装到工控机上,这台工控机就被"软件定义"成了一台软PLC。TwinCAT更直接,它通过Windows实时扩展,把Windows的某颗核心变成实时任务处理器,本质上就是把PC变成PLC。
我在用TwinCAT做运动控制时,系统会要求专用实时网卡,任务周期可以配置到500us甚至125us,实测抖动量级和传统PLC相当。这就是"形态变了,内核没变"的最好例证。
5.3 虚拟PLC离产线主系统还有多远
西门子PLCSIM Virtual Controller、倍福在虚拟化环境下的运行,确实都在往虚拟PLC方向走。但目前更多被用在虚拟调试、操作员培训、数字化产线仿真的场景里,真要放到产线承担安全联锁,绝大多数用户还是会选择保守方案。
原因很现实:虚拟机一打快照、一迁移,控制任务就可能跳周期。硬件PLC出故障,工程师都知道查电源、查CPU;虚拟PLC出故障,你还要排查宿主机资源、热迁移策略、虚拟网卡丢包。对工艺车间来说,这种隐性复杂度很难买单。虚拟PLC会慢慢长大,但它长大的地方可能先是大规模设备集群的集中管理、边缘控制、教学仿真,而不是直接取代每个电柜里那台PLC。
6. 工程师怎么应对:从背指令到懂接口、懂诊断、懂数据
6.1 编程能力重心的转移
如果你刚学PLC,我建议别把大量时间花在背某个品牌的特殊指令上。指令会变、品牌会换,但IEC 61131-3的通用语言结构、数据块、功能块、全局变量、面向对象的ST编程,才是跨平台通用的能力。
另一个明显的趋势是混合编程。博途里可以集成SCL甚至C#编写的功能块,Codesys也支持对接外部动态库。现在很多客户要求设备数据能直接对接MES,PLC工程师如果不懂JSON、MQTT、OPC UA,很难在方案里说清楚。这不是要求你变成IT专家,而是让你把"数据接口"当作控制方案的一部分来设计。
6.2 通讯协议栈的理解比具体品牌更重要
以搜索里的"c#读取plc频率多少"为例。很多做上位机的新手,上来就开一个线程死循环每10ms读一次PLC,结果常常把PLC的CPU占满或者导致通信阻塞。你以为频率越高数据越实时,实际却是阻塞频发。
正确的思路是分清数据特性:
- 需要实时响应的信号(急停、故障),走硬接线或PLC内部联锁逻辑,不要依赖上位机轮询。
- 需要监控和统计的数据(产量、温度曲线),上位机以100ms到1s的周期按块读取即可。
- 如果需要更快刷新,优先考虑OPC UA的订阅机制,让PLC主动推送变化,而不是上位机傻轮询。
Modbus TCP一次读取的寄存器数量有限,S7协议可以按块读取若干字节,不同协议的最优读取批次完全不同。不懂协议栈的轮询设计,是很多上位机把PLC通讯拖垮的真正原因。
6.3 把"离线调试前置"练成肌肉记忆
最后聊聊我对软件定义自动化最直接的使用体会。现在我做项目,在硬件还没到齐时,就会先用PLCSIM Advanced或者TwinCAT的仿真模式,把逻辑、报警、配方、甚至HMI联动全部过一遍。搜索里那么多"plc仿真""数字孪生plc抢答器程序"相关的词,说明大家也开始意识到,能把控制逻辑提前跑起来,是让项目交付不再靠"现场烧香"的关键。
这套方法彻底改变了做集成的心态:以前是设备到场才启动调试,现在是在办公室就把大部分逻辑错误全部消灭掉,到现场只剩联调、用户验收和工艺调整。PLC非但没有被淘汰,反而因为软件定义自动化带来的仿真、虚拟调试和接口标准化,让真正掌握控制核心逻辑的工程师变得更值钱。
我在实际项目里有一个习惯:每次交付都额外给客户整理一份"通信点表 + 数据字典 + 备份清单"。项目结束后的维护期,客户照着这份文档就能自己排查八成的问题。这也是我在软件定义自动化大背景下,认为比技术本身更重要的东西——把控制逻辑变成可维护、可移植、可交接的资产,而不是只存在于某台PLC内存里的秘密。