很多朋友装S7-PLCSIM Advanced V3.0,装到一半就卡住了,问题不是软件本身,而是它依赖的WinPcap。我前前后后在测试项目里搭过几套完整的PLC仿真环境,Wireshark、Npcap、旧版WinPcap、杀毒软件这些坑轮流踩过,最后才摸出一套稳定流程。如果你做西门子PLC程序调试、HMI画面验证,或者是想在没有真实PLC的情况下用C#/Python做自动化测试,这套S7-PLCSIM Advanced V3.0仿真环境都绕不开。这篇文章把从安装、创建实例、TIA Portal下载程序、和外部程序通信验证的完整过程拆开讲,重点把WinPcap相关的坑讲透,适合刚接触PLC仿真、以及装了多次一直不顺利的同行参考。
1. 为什么选择S7-PLCSIM Advanced:它和普通PLCSIM根本不是一回事
1.1 普通PLCSIM到底缺了什么
TIA Portal自带的S7-PLCSIM(就是那个按一下“开始仿真”的按钮)其实是一个纯逻辑仿真器。它能把OB、FB、FC、DB的执行过程模拟出来,可以监控梯形图、修改变量,对学习STEP 7编程来说完全够用。但它的致命短板在于:没有一个真正对外可见的以太网接口。
这就意味着,你如果要在WinCC Runtime里做画面连接测试,或者用一个C#程序去读写PLC的DB块,普通PLCSIM基本帮不上忙。网上总有人问“博图HMI仿真按钮无反应”,很大比例的问题不是HMI组态做错了,而是PLC这一侧根本没有对外通信能力,WinCC运行时根本连不上仿真PLC。
所以说,当项目里需要验证“PLC和上位机之间的通信链路”时,普通PLCSIM就顶不上去了。这时候需要的是S7-PLCSIM Advanced。
1.2 “高级”两个字的关键:虚拟以太网适配器
S7-PLCSIM Advanced的底层机制和普通版完全不同。它在安装时依赖WinPcap的NDIS过滤驱动,在操作系统里虚拟出一块以太网卡。这块虚拟网卡可以配置IP地址,任何使用TCP/IP的协议栈都能通过它去访问虚拟PLC的内部存储区。
你可以把它理解成:电脑里凭空多了一个“以太网口”,这个网口后面连的就是一台虚拟的S7-1500。HMI、C#程序、OPC UA客户端、Modbus TCP工具,全部可以像连接真实PLC一样去连它。
这正是我推荐这套环境最重要的原因:它把“PLC侧通信能力”也仿真了出来,而不仅仅是仿真CPU的扫描逻辑。再加上WinPcap在这套机制里扮演了“网卡驱动地基”的角色,所以标题里才专门把WinPcap拿出来说。
1.3 这套环境适合谁、解决什么问题
- 手头没有实体PLC,但需要验证S7-1500控制逻辑;
- 需要做HMI画面联动测试,但没有硬件;
- 做上位机通信程序开发,先用虚拟PLC调试通信代码;
- 做自动化测试,每次测试前用API或脚本初始化一台“干净”的PLC;
- 想模拟两台PLC之间的PROFINET通信或Modbus TCP通信。
这套环境也适合PLC编程入门阶段的自测场景,写完梯形图直接下载到虚拟PLC里观察运行效果,不用花几千块买一台实体设备。如果你刚入行PLC编程,完全可以拿它当练习场,比只看教程有效得多。
需要注意:Advanced仿真的主要是S7-1500这个家族(部分版本也可覆盖特定S7-1200),它没有办法仿真Smart 200这种老系列。如果你手上的项目是Smart 200,就要用另一套仿真方案,别在Advanced这里死磕。另外,如果你是三菱PLC阵营的,三菱的GX Works也有自己的仿真模式,与本文的西门子体系不是一条路线,别混着看。
1.4 版本与系统要求:别拿着V3.0硬配TIA V17
S7-PLCSIM Advanced V3.0对应的TIA Portal版本比较早,我用的组合是TIA Portal V15.1加PLCSIM Advanced V3.0.1,系统是Windows 10专业版,这个组合相对成熟。在工业环境里,升级TIA版本前先确认一下PLCSIM Advanced是否同步支持,省得装上后功能缺失。
操作系统方面,Win10专业版或企业版x64是最稳的。Win11上安装不是绝对不行,但WinPcap这个老驱动的兼容性风险会明显升高。如果条件允许,单独准备一台测试电脑或虚拟机来跑这套环境是最省心的。我见过有人拿Win11硬装V3.0,最后虚拟网卡一直不出来,折腾两天后换Win10问题消失,这个教训值得记下来。
2. 环境准备与安装:WinPcap是第一个真正的“坑”
2.1 安装前的准备工作清单
在点开安装程序之前,建议按这个清单过一遍。
- 先装好TIA Portal,并且确认版本能打开你的项目(V15.1对应V3.0.1);
- 在“程序和功能”里检查有没有Npcap、Wireshark、旧版WinPcap;
- 找一台Windows 10专业版x64系统,至少预留30GB硬盘空间,内存不要低于8GB;
- 准备一个管理员账户,安装时右键“以管理员身份运行”;
- 有快照条件的先做系统快照,至少确认能回滚。
TIA Portal和PLCSIM Advanced的安装顺序不要反过来。PLCSIM Advanced在安装时可能会检测TIA版本,如果TIA没装,它装完后也没法正常联调。另外,最好在安装PLCSIM Advanced之前把系统补丁都打完,因为后续装WinPcap这种内核驱动时,Windows更新经常在旁边搞事情。
2.2 WinPcap安装失败的典型表象
安装S7-PLCSIM Advanced时,向导一般在某个步骤调用WinPcap安装程序。这里要注意:这个阶段看起来像“卡住”了,其实WinPcap的驱动安装本来就需要几分钟。先等3到5分钟,不要急着点取消。如果最终报错,往往会有这几个特征之一:
- 安装日志里出现“WinPcap installation failed”;
- 进度条回滚,向导直接中断;
- 向导装完,但是打开S7-PLCSIM Advanced后,新建实例时提示没有可用的虚拟网卡;
- 设备管理器“网络适配器”里找不到“Siemens PLCSIM Virtual Ethernet Adapter”。
我见过最迷惑的情况是:安装过程完全正常,但是打开Advanced后新建实例,IP地址下拉框里空荡荡的,没有任何虚拟网卡可选。这种情况基本可以断定WinPcap的驱动层没起来,别去反复创建实例,先把驱动搞定。
2.3 Npcap、旧版WinPcap与杀毒软件的“三角关系”
我调试过几台机器,WinPcap安装失败的原因高度集中在这三个。
第一,Npcap冲突。Npcap是Wireshark新版默认的抓包驱动,它在底层也占用NDIS驱动资源。Npcap和WinPcap同时存在时,WinPcap的核心服务npf经常起不来。处理办法是把Wireshark、Npcap、旧WinPcap全部卸载干净,再重装PLCSIM Advanced自带的WinPcap。注意,卸载后最好重启一次再继续,别省这一步。
第二,旧版WinPcap残留。有些机器之前装过其他软件带进来的WinPcap,卸载不干净,服务列表里残留了npf或相关注册表项,新安装程序直接拒绝覆盖或安装失败。这时候可以先看一下服务状态。
sc query npf如果服务存在但状态是STOPPED,可以尝试手动启动。
net start npf如果连服务都没有,说明驱动没有真正装上。
第三,杀毒软件拦截。WinPcap的本质是安装一个内核驱动,杀毒软件实时防护对这类驱动文件非常敏感,常见的隔离对象是npf.sys、Packet.dll。安装前临时关闭实时保护,或者把PLCSIM Advanced安装目录加入白名单,成功后可以再打开。这类问题在安装了第三方安全软件的机器上尤其容易出现。
2.4 手动安装WinPcap并验证npf服务
如果自动安装失败,可以走手动方案。在S7-PLCSIM Advanced安装包解压后的目录里,一般能找到一个独立的WinPcap安装程序,名字类似WinPcap_4.1.3.exe,或者去安装日志里查它中途调用的路径。找到后右键管理员运行,把它装上。
安装完成后,在设备管理器里确认虚拟网卡有没有出现。如果出现但带黄色感叹号,右键卸载设备,然后“扫描检测硬件改动”重新加载。
最后在命令提示符里确认驱动服务状态:
sc query npf看到“STATE: RUNNING”说明驱动层正常。这一步如果通过,S7-PLCSIM Advanced能创建虚拟网卡的前提就有了。如果服务存在但启动失败,可以打开设备管理器,点击“查看-显示隐藏的设备”,在“网络适配器”里找有没有显示为“Packet Driver”或“npf”的灰色设备,有的话卸载掉再重装驱动。
3. 创建仿真PLC实例:虚拟以太网接口的配置原理
3.1 新建实例:命名、选型、固件版本
S7-PLCSIM Advanced的主界面左侧是Instances区域。点New Instance,填一个实例名称。这里我强烈建议你养成一套命名习惯,比如PLC_1500_100,后面那三位是IP的最后一段,这样时间久了也不会忘记实例对应哪个IP。实例名称只能使用字母、数字和下划线,不能用中文,也不能以数字开头,这跟PLC变量命名规则保持一致。
实例类型选S7-1500,然后选具体的CPU型号。TIA项目里用的CPU是1511-1 PN,仿真实例就选对应的,固件版本也要尽量一致。不一致的时候,TIA下载时经常报“目标设备的固件版本不兼容”。这个提示其实是在说:你的实例固件和项目组态里的CPU固件对不上,去实例配置里把固件版本改成和项目一致就行。
3.2 Local和External:接口模式怎么选
创建实例时会看到接口模式的选项,常见的有Local和External。我的理解是:Local模式是在本机创建一个虚拟以太网适配器,宿主机上所有应用(HMI、C#、OPC UA客户端)都可以通过这个适配器的IP访问虚拟PLC;External模式更偏向跨主机或特定网络环境的部署。
对大多数本地测试来说,选Local就足够。它创建的虚拟网卡在TIA的PG/PC接口列表里显示为“Siemens PLCSIM Virtual Ethernet Adapter”。
选择Local之后,通常还要配置IP地址。这个IP就是虚拟PLC对外服务的IP。很多人在这里随便填了一个地址,结果TIA下载时找不到设备,原因就在这里:虚拟PLC的IP和TIA项目里组态的CPU IP对不上。
3.3 IP规划:为什么实例IP必须和TIA项目一致
先说结论:实例的IP要等于TIA项目里CPU组态的IP。比如项目里给1511-1 PN分配了192.168.0.100,那么实例IP就填192.168.0.100,TIA下载时目标地址也是192.168.0.100。三者必须一致,不能各想各的。
如果你把项目IP设成192.168.1.10,实例IP却用192.168.0.100,TIA在扫描设备时发出的广播包就不会被虚拟网卡正确识别,结果就是“找不到设备”。这个细节几乎是每个初次使用Advanced的人都会卡一遍的,我早期也在这个问题上绕了半小时。后面学乖了,先把IP规划写到纸上,再动手配置。
3.4 实例启动与状态判读
配置完成以后,点创建,实例就会出现在列表里。状态一般有三种:Running、Stopped、Error。
- Running:正常运行,可以被TIA搜索到;
- Stopped:程序没有运行,TIA下载前可能是这个状态,但开始通信验证前必须启动;
- Error:绝大多数和虚拟网卡驱动有关,回到WinPcap检查。
启动方式很简单,右键实例Start。如果Start后立刻退回Error,优先重启系统,再不行就查看系统日志里有没有npf相关错误。还有一个小技巧:如果机器上有多块物理网卡,尤其是带无线网卡的笔记本,PLCSIM Advanced有时会绑定错物理适配器,导致虚拟网卡异常。这可以在网络连接设置里把其他不用的网卡暂时禁用,再启动实例试试。
4. 与TIA Portal联调:下载、在线、监控
4.1 PG/PC接口选型:最容易选错的网卡
TIA Portal的“扩展的下载到设备”窗口里,有一个“PG/PC接口类型”和“PG/PC接口”的选择。这里接口类型选PN/IE,接口一定要选到Siemens PLCSIM Virtual Ethernet Adapter。
很多人下载失败是因为接口选错了,系统里有线网卡、无线网卡、蓝牙、各种虚拟网卡一堆,TIA会全部列出来,选错一个就是“设备不可达”。选的时候注意看前缀,一定是Siemens PLCSIM这个开头的。我见过一个工程师在“PN/IE”下选了Realtek网卡,折腾了好久都连不上,其实只要往下拉一点就能看到PLCSIM的虚拟网卡。
目标地址填实例IP,比如192.168.0.100。然后点击“开始搜索”,正常情况下很快就能搜到一个PLC设备。
4.2 下载程序到虚拟PLC的流程
搜索到设备后,勾选它,点下载。TIA会做一致性检查,然后开始传输。下载过程中PLCSIM Advanced的实例会短暂变成Stopped,下载完成后自动恢复Running。这个自动状态切换,就是“虚拟PLC”和“实体PLC”在体验上比较接近的地方。
如果下载时报错,按优先级排查:
- 实例是否启动,状态是不是Error;
- IP是否一致,实例IP、项目CPU IP、目标IP三者;
- 防火墙是否拦截了PLCSIM相关进程和102端口。
测试环境里可以在隔离网段临时关闭防火墙来验证,但生产网段不建议这么干。更规范的做法是,在Windows Defender防火墙的“允许应用通过防火墙”里,把Siemens PLCSIM Advanced相关程序全部勾上,并放行TCP 102端口。要注意,有些安全软件还有自己独立的网络防护,同样需要放行。
4.3 在线监控与模拟输入信号
下载成功后,点在线监控,可以看到梯形图的实时状态。
这里有一个必须说清楚的点:仿真环境没有真正的物理输入端子。你要给I0.0一个信号,不能靠按钮,而是要用“监控表”或“修改变量”的方式,把I区的值改成TRUE或FALSE。
比如写一个电机启保停逻辑:I0.0是启动按钮,I0.1是停止按钮,Q0.0是输出继电器。在线监控表里把I0.0修改为TRUE,再观察Q0.0变成TRUE;随后把I0.0改回FALSE,Q0.0由于自锁回路继续保持TRUE。整体逻辑和实体PLC基本一致,只是输入信号来源变成了软件指令。这个差异对调试思路影响很大,实体会想到去短接端子,仿真里就要想着去改监控表的值。
4.4 和HMI仿真联调:按钮无反应的排错顺序
TIA里做HMI仿真时,PLC变量连接通常用以太网方式,目标IP指向虚拟PLC实例IP。HMI仿真按钮按下去没反应,按这个顺序查问题,基本都能定位。
第一步,看PLC侧是否在线监控正常。如果PLC在线都进不去,HMI必然连不上,先解决PLC侧通信。
第二步,看HMI连接的IP地址是否指向实例IP。HMI连接如果填成和PLC不同的网段,按钮点上去自然是石沉大海。
第三步,看防火墙。WinCC Runtime启用了动态端口,测试时可以把相关程序全部放行,或者临时关闭防火墙确认问题。
这套顺序,我自己用了很久,基本能处理八成以上的“HMI仿真按钮无反应”。还有一个冷门原因:HMI运行系统的语言和WinCC项目语言不一致,导致画面加载异常,这个概率低但确实存在,通常是换台干净机器后才暴露出来。
5. 把虚拟PLC变成外部可访问的测试节点
5.1 用C#读写虚拟PLC变量
验证了TIA联调之后,再把这个环境开放给外部程序,这才能真正体现Advanced的价值。我平时做通信测试时,会用C#配合S7netplus这个开源库去连虚拟PLC。代码非常简单:
using S7.Net; using (var plc = new Plc(CpuType.S71500, "192.168.0.100", 0, 1)) { plc.Open(); Console.WriteLine(plc.Read("Q0.0")); plc.Write("M0.0", true); }这里IP地址填虚拟PLC实例的IP,CpuType选S71500。打开连接后就可以用Read和Write读写I/Q/M/DB变量。整个过程和连实体PLC没有区别。对开发上位机的人来说,可以先在虚拟PLC上把通信代码调通,到了现场再接实体PLC,能省不少时间。
需要注意:S7通信默认端口是102,如果连接超时,优先检查防火墙有没有放行。另外,如果外部程序部署在另一台电脑上,要确认那台电脑到虚拟网卡所在机器之间的网络是通的,最简单的办法是先ping一下实例IP,再测102端口。
5.2 OPC UA地址空间验证
如果你要开发OPC UA客户端,同样可以先对着PLCSIM Advanced调。在TIA项目里给CPU启用OPC UA服务器功能,设置好安全策略,编译下载到虚拟PLC。然后用UaExpert或者其他OPC UA客户端连接“opc.tcp://192.168.0.100:4840”,就能看到PLC服务端的地址空间。
这一步对产线数字化项目特别有用。很多人到现场才发现OPC UA配置和客户端逻辑不一致,有了仿真环境,这些问题可以在办公室先暴露。我建议把OPC UA测试纳入任何牵涉上位机通信的项目的前置环节,因为虚拟PLC和实体PLC在OPC UA地址空间的结构上基本一致,提前验证能减少现场时间和沟通成本。
5.3 多实例仿真:模拟多台PLC协同
PLCSIM Advanced支持同时运行多个实例。比如实例A用192.168.0.100模拟IO控制器,实例B用192.168.0.101模拟IO设备,两台虚拟PLC之间可以做PROFINET通信联调。
这种模式适合验证分布式项目,比如一个S7-1500做主站,另一台做从站,两个TIA项目分别下载到不同实例。注意配置IO设备的GSD文件时,IP和设备名称要和虚拟PLC的实例IP对应上。多实例的组合可以模拟出接近真实产线的通信结构,而且不需要任何硬件。不过,多实例对电脑内存的消耗比较明显,我建议至少16GB内存,否则实例开多了界面会卡顿。
5.4 命令行与自动化测试的接入
做自动化测试时不可能每次都用鼠标去点界面。PLCSIM Advanced提供了Runtime API,支持从.NET环境创建实例、启动实例、停止实例、销毁实例。这意味着你可以把整个仿真PLC生命周期放进测试脚本:每个测试用例开始前创建一台干净的虚拟PLC,测试结束后销毁。
这是很多自动化测试团队的标准玩法。装上后的安装目录里能找到对应的CLI程序,用-h参数看帮助,然后按自己的测试框架去封装。配合前面的C#读写库,就是一套完整的无硬件回归测试环境。现在还有不少人用AI辅助生成PLC代码,有了这套虚拟环境,生成的代码可以先下载到虚拟PLC做冒烟测试,再进入真实设备,至少不会因为试错烧掉一台价值不菲的CPU。
5.5 VMware里的网络模式与宿主机通信
不少人在虚拟机上运行TIA和PLCSIM Advanced。如果你这样做,虚拟机的网络适配器建议选“桥接模式(自动)”,不要用NAT。原因还是WinPcap的NDIS驱动问题:NAT模式下,虚拟网卡转发逻辑是软件模拟的,WinPcap驱动的兼容性差,虚拟实例经常启动失败,或者宿主机无法访问到虚拟PLC。
我实测过的组合是VMware Workstation Pro 17,虚拟机网卡选桥接模式,PLCSIM Advanced V3.0在虚拟机里正常工作,宿主机上的C#程序可以直接连到虚拟PLC的IP。这个问题在网上被问得很多,“TIA用VMware连PLC用什么网络连接模式”的核心答案就是桥接。
如果物理机开了Hyper-V或者WSL2这类虚拟化网络组件,底层NDIS驱动环境更复杂,这种情况我建议不要和WinPcap纠缠,要么关闭相关功能,要么直接用实体机。用实体机是最省心的路径,但虚拟机的好处是可以做快照,适合长期反复折腾。
6. 踩坑复盘:一份照着做就能排错的清单
6.1 高频故障快速排查表
先给一张表,把最常见的现象、原因、处理方式列出来。
| 故障现象 | 常见原因 | 处理方式 |
|---|---|---|
| WinPcap安装失败 | Npcap冲突、旧版残留 | 卸载Npcap、Wireshark和旧WinPcap后重装 |
| 虚拟网卡不出现 | WinPcap驱动被拦截或没装成功 | 手动装WinPcap,启动npf服务,刷新设备管理器 |
| TIA搜索不到PLC | IP不一致、实例未启动 | 核对实例IP、项目CPU IP、目标IP,启动实例 |
| HMI按钮无反应 | 连接IP错误或PLC侧通信未通 | 先确认PLC在线,再核对HMI连接IP |
| 外部程序连接超时 | 防火墙拦截102端口 | 放行PLCSIM相关程序和端口 |
| 实例启动即Error | 驱动或授权异常 | 重装WinPcap,确认授权文件 |
这张表不需要背,遇到问题时先对号入座,再沿着一两条主线去排除。多数情况下,问题根源只有两个:驱动没起来,或者IP没对齐。其他都是衍生问题。
6.2 一套相对稳妥的安装顺序
如果你现在要在一台全新机器上搭环境,我建议按下面这个顺序走:
- 安装Windows 10专业版x64,先做完系统更新;
- 在“程序和功能”里确认没有Npcap、Wireshark、Hyper-V等干扰项;
- 安装TIA Portal V15.1,完成后重启;
- 管理员身份运行S7-PLCSIM Advanced V3.0安装程序;
- 等到WinPcap组件安装完成,不中途结束进程;
- 用sc query npf确认驱动服务为RUNNING;
- 打开S7-PLCSIM Advanced,新建一个实例并启动;
- 在TIA里下载一个最小测试程序,确认在线可监控;
- 系统做快照或磁盘备份;
- 再安装Wireshark等其他抓包工具。
第9、10步的顺序很容易被忽略。很多人先装了Wireshark,再用PLCSIM,遇到问题要排查的变量会多很多。建议“先通信环境,后抓包工具”,如果实在需要抓包,等PLCSIM环境跑通后再装。
6.3 给新手的几条保命建议
最后说几条我自己总结的经验,都是踩过坑换来的。
不要在项目截止前一天第一次装这套环境。WinPcap问题虽然可解,但解起来依赖系统的运气成分,第一次装很可能要一个下午。先在空闲时间把环境备好,比临阵磨枪稳妥得多。
给整个系统做一个快照,而且是在PLCSIM环境验证通过后立刻做。之后无论装什么软件、升级什么驱动,出问题就恢复快照。WinPcap这种底层网络驱动,越修越容易修出新的幺蛾子,还原战场是性价比最高的方案。曾经有一次我只是安装了一个网络抓包分析工具,随后PLCSIM Advanced的虚拟网卡就消失了,半小时排查无果后直接恢复快照,五分钟回到可用的状态,那种从焦虑到轻松的反差,经历过的人会懂。
如果你发现自己一次一次地卡在WinPcap安装,与其反复尝试,不如回到最简单的状态:干净系统、先TIA后PLCSIM、卸载一切疑似冲突软件。十次里有九次,问题就出在“系统里已经装过某些抓包驱动”这件事上。
我自己现在搭这类环境,已经固定成一套流程:先装好PLCSIM Advanced,验证下载通过,快照留好,再开始折腾其他软件。PLCSIM Advanced的环境一旦跑通,后面不管是做HMI仿真、C#通信测试还是OPC UA验证,都会特别顺,甚至比用实体PLC还方便,因为可以随时重置、随时复制。希望这篇避坑记录能帮你直接绕开WinPcap这个最大的坎,把更多时间花在真正的PLC程序调试上。