1. 为什么我劝你先用仿真跑通逻辑,再碰真机
干这行时间长了你就知道,PLC项目最尴尬的场景不是程序写不出来,而是程序写完了,设备还没到场,或者现场调试窗口只有两三天,根本不够你慢慢捋逻辑。这个时候博途仿真(PLCSIM)就是救命的东西。我见过不少同行,尤其是刚接触博途的人,装了TIA Portal之后根本不知道那个绿色的"开始仿真"按钮是干什么用的,一直以为必须有实物PLC才能调试程序。其实西门子的软件生态早就把这一步做成了标准能力——只要装好博途和对应的PLCSIM组件,你的电脑就是一台虚拟的S7-1200或者S7-1500,CPU能运行、程序能下载、变量能监控、甚至HMI画面都能跟着一起仿真。
但也别把仿真想得太神。仿真的本质是把你的程序逻辑放到一个虚拟CPU里跑,CPU的存储区、定时器、计数器、位运算这些内部资源是真实存在的,模拟出来的结果和你将来下载到实物PLC上几乎一致。可是有一点必须摆清楚:仿真替代不了真实I/O。那台真实电机到底转不转、传感器信号是常开还是常闭、接线端子是不是压得牢靠,这些仿真一概管不了。所以我的建议一向很明确——逻辑层面的验证、工艺流程的预演、甚至操作员培训前的演示,全部用仿真搞定;到了现场,你的精力只需要集中在接线、硬件组态和外围设备联调上,程序基本不用动。
这篇文章要解决的就是一件事:从零开始把博途仿真跑起来,并且把我在实际使用中踩过的那些坑一并讲清楚。适合谁看?刚接触博途的电气工程师、自动化专业的学生、做设备集成项目但还没到手真机的工程师,都适用。全程按我自己的操作习惯来,你打开电脑跟着点就行,但更重要的是理解我为什么要这么点。
2. 环境准备:博途、PLCSIM和中间件版本怎么搭才不吵架
2.1 版本匹配是第一个大坑
很多人仿真跑不起来,根本不是操作有问题,而是软件版本搭配不合理。博途的TIA Portal从V13一路出到V20,每个大版本必须搭配相同大版本的S7-PLCSIM,跨版本基本没戏。比如你装的是TIA V16,那PLCSIM也必须是V16;你装的V18,PLCSIM用V16的就算能装上,仿真时也大概率提示找不到可仿真的设备。
除了PLCSIM,还有一个容易忽略的S7-PLCSIM Advanced。我个人的经验是:调试S7-1200和S7-1500的一般逻辑,用标准的S7-PLCSIM就够了;而PLCSIM Advanced是用来做更高级的通讯仿真、以及配合外部软件(比如Factory IO、OPC UA客户端)做联合仿真的,它对系统资源消耗更大,安装也更挑剔,不建议一上来就用。标准版和Advanced版的区别是很多初学者最先懵的点,一句话记住:标准版相当于一台虚拟PLC,Advanced版相当于一台带扩展网卡、可以对外通信的虚拟PLC。
2.2 安装中的经典报错
搜索"博途v18安装教程"的人相当多,我猜大多数是在安装环节卡住了。最典型的报错就是博途安装完毕后提示"一些已安装产品需要许可证,请启动Automation License Manager"。这个不用慌,先把所有西门子软件关掉,从Windows开始菜单找到Automation License Manager,打开后看一下左侧的许可证文件有没有正常识别。正常情况下,博途主程序和PLCSIM的许可证文件会在安装时自动拷贝到本地,如果没有,手动指定许可证文件的路径,指向安装包里的License文件夹,一般都能解决。
还有一个非常隐蔽的问题:装完博途之后Windows防火墙弹窗问你要不要允许通信,很多人随手点了取消。这个操作对正常编程没影响,但当你点"开始仿真"、博途要跟PLCSIM建立内部通信的时候,可能就会莫名其妙地连不上。我第一次遇到这种情况还以为是自己破解不完全,来回重装了两遍,最后发现就是防火墙把内部端口封了。所以安装完第一次打开博途,如果蹦出防火墙提示,务必勾选"允许",或者事后去控制面板里把TIA Portal相关的几个程序全部加到入站规则里,省得后面排查半天。
2.3 硬件资源别省
博途仿真对电脑的配置要求比普通编程高不少,尤其是打开仿真之后,CPU占用率会明显上升。我自己的主力机器是i7-12700H配32GB内存,跑一个S7-1500加一个HMI画面仿真,还算流畅。如果你的电脑只有8GB内存,建议关掉所有浏览器再开仿真,否则下载程序进虚拟PLC的时候可能卡到怀疑人生,甚至直接把整个项目崩掉。这个建议很土,但是非常实用。
软件版本这块还有一个很小的细节:如果你同时装了多个版本的博途,比如V16和V17共存,务必注意PLCSIM的版本也要对应安装两套。博途启动时会自动加载当前项目版本对应的PLCSIM,但有时候注册表会串,导致明明选的是V16项目,却去调V17的PLCSIM,报一堆奇怪的错误。遇到这种问题别重装系统,先把所有西门子软件退出,重新启动对应版本的License Manager,再打开项目,通常能恢复正常。
3. 完整仿真流程:从建项目到监控变量,别看漏这几步
3.1 新建项目和选CPU时的隐性限制
打开博途,新建项目,在添加设备这一步就要留个心眼。不是所有S7-1200 CPU都支持仿真,很老的固件版本(比如2.2之前的)仿真支持度很差,建议直接选择固件V4.0及以上的CPU。我自己做练习或预调试时,最常用的型号是CPU 1214C DC/DC/DC和CPU 1511-1 PN,这两个型号在PLCSIM里的运行表现比较稳定,仿真出来的行为跟实物几乎没有区别。
选型号的时候同时注意订货号,同一个1214C也有不同版本,如果你照着现场设备的订货号选,仿真的时候却提示设备不支持,那就换一个同类型但固件版本更新的,程序逻辑完全不影响。
3.2 写一个能被仿真的最小程序
为了演示完整流程,我建议第一次跑仿真的新手别一上来就写几百行SCL,先写一个简单的电机启停控制:一个启动按钮I0.0、一个停止按钮I0.1、一个接触器输出Q0.0,再加上互锁和自锁。这段逻辑放在OB1里,用梯形图写完,编译通过就行。
这里有个细节:OB1的属性里有一个"循环周期"的选项,默认是150ms,仿真情况下建议保持默认,不要去改。有些人为了让仿真跑得更快,把周期改成10ms甚至1ms,结果定时器逻辑全部乱套,因为虚拟CPU的调度精度毕竟不如真实硬件。程序逻辑调试阶段,越接近默认配置,仿真结果才越有参考价值。
3.3 点击"开始仿真"到下载程序的全过程
程序写好后,在项目树里选中PLC设备节点,然后点工具条上的"开始仿真"按钮(一个绿色的类似播放的图标)。第一次点它,博途会弹出一个确认窗口,问你要不要以仿真模式启动,确认后PLCSIM的独立窗口就会弹出来,里面有一个虚拟的CPU面板,上面有RUN、STOP按钮和运行指示灯。
等PLCSIM的窗口变成可操作状态之后,回到博途的下载界面。这里要特别看清楚:下载对话框里"目标"那一栏,默认可能是你的设备名,你要手动选中"S7-1200/S7-1500仿真模块",而不是那个真实的设备条目。选错了的话,下载会一直停留在"建立连接"的状态,最后超时。下载之前,博途还会让你确认是否要"初始化所有模块",这个选项第一次仿真时全选是没问题,但如果你需要保留之前的装载存储区数据,可以只选"硬件配置"和"软件",不要勾"复位PLC"。不过新手阶段没关系,全部勾上反而干净。
下载完成之后,把PLCSIM里的CPU运行状态切换到RUN,虚拟PLC就开始跑你的程序了。
3.4 监控变量、强制变量和仿真表的使用
程序下载进去之后,回到OB1的编辑器界面,点上面那个"眼镜"图标启用监控功能。你会发现程序里的梯形图线条变成彩色,触点闭合的时候颜色会变,线圈得电也有状态显示,整个过程和连接真实PLC一模一样。
要改变输入变量的状态,有两条路。一条是直接在变量监控表里强制:打开"监控与强制变量"表,在I0.0那一行右键选择"强制为1",I0.0就相当于被外部通了电,程序里的常开触点立即闭合,Q0.0跟着得电。注意,强制变量之后,PLCSIM窗口里CPU的面板会显示一个"FORCE"指示灯,这说明当前有强制值在生效,记得调试完把强制全部删除,不然下次开机还会带着强制去运行。
另一条路是用仿真表(SIM Table)。从PLCSIM的菜单中选择"仿真表",打开一个类似变量表的界面,你可以直接往I区里写数值。这个做模拟量输入测试特别方便,比如模拟温度传感器的工程量,往IW64写入一个0~27648之间的数,程序里的量程转换逻辑立即跟着动。
我用仿真实战的经验是:仿真表适合模拟连续量,强制变量适合模拟开关量,两者配合使用效率最高。新手最容易犯的错是在变量监控表里双击I点直接改数值,改完之后发现程序没有反应——因为监控表只能监控,不能改输入,你得用强制或仿真表才行。
3.5 保存和复用仿真状态
跑了一段时间的仿真,你可能会调试出一组比较满意的中间状态,比如所有模拟量都处于正常范围、设备运行在自动模式。这个状态是可以保存的。在PLCSIM窗口里选择"保存",会生成一个仿真快照文件。下次重新打开博途和PLCSIM,用"加载"把这个快照读回来,CPU的存储区状态、变量当前值都能恢复到保存时的那一瞬间。这个功能在做一个大型工程项目的演示时非常有用,不用每次从头触发一堆条件才能进入演示状态。
4. HMI仿真联调:WinCC Runtime和面板按钮没反应的问题排查
4.1 添加HMI设备与建立连接
程序逻辑在虚拟PLC里跑通了,下一步通常是HMI的仿真实战。很多人搜"博图HMI仿真按钮无反应",大概率是卡在这一步没搞明白。在同一个项目里,你需要在PLC设备旁边添加一个HMI设备,比如KTP700 Basic PN。添加之后,HMI会自动生成一个PROFINET连接,但如果你的项目里已经有PLC,且HMI是在PLC之后添加的,博途一般会自动把连接指向那个PLC,前提是设备的子网一致。
关键动作在HMI设备的"连接"设置里。右键打开HMI的设备配置,找到"连接"表格,确认连接对象选的是你的PLC,并且连接类型是PROFINET。如果这里显示"未连接",点那个方向的箭头,手动指定到PLC的以太网接口上,编译HMI画面今天就先到这里。
4.2 启动HMI仿真和PLCSIM的顺序
HMI仿真必须和PLC仿真同时运行才有意义,但启动顺序有个讲究。我的习惯是先把PLCSIM启动起来、程序下载完成、CPU切到RUN状态,然后再回到HMI画面的编辑器界面,点击"开始仿真"按钮。这样HMI仿真一启动,就能顺利连上虚拟PLC,画面上绑定的变量会有实时数值反馈。
如果你反着来,先启动HMI仿真,再启动PLCSIM,HMI画面起来之后会一直处于"连接中断"的状态,按钮点了毫无反应。这时候虽然在HMI画面上按启动按钮,按钮也会有按下的动画效果,但变量不会变化,程序自然也不会动。很多人遇到这个问题就认为是博途的BUG,其实只是启动顺序反了。
4.3 按钮"没反应"的三种真实原因
除了启动顺序,HMI仿真按钮没反应通常还有三种诱因。第一种是画面上的按钮根本没关联到变量——编辑按钮时属性里"事件"标签页设置了按下时置位某变量,但变量的地址写错了或者没关联到PLC变量表里,点起来当然没反应。第二种是HMI里建立的物理连接跟实际子网对不上,特别是你修改过PLC的IP地址之后HMI那边的连接还是旧的。第三种是仿真时HMI提示找不到了——因为PLCSIM的窗口被最小化或关闭,HMI仿真一直等不到PLC的响应,表现也是按钮没反应。
排查方法很简单:打开HMI的在线诊断视图,看连接状态是否绿色。如果不是绿色,优先检查PLCSIM的CPU是不是在RUN状态;确认在RUN之后,再看HMI连接的目标IP和PLCSIM中设置的IP是否一致。仿真的IP并不影响你实际的网络规划,但是建立在两台"虚拟设备"之间的通信地址也要保持一致,这是很多人忽略的。
4.4 触摸面板和WinCC Runtime的区别
博途里的HMI画面仿真有两种出口:一种是针对KTP、TP系列面板的Basic仿真,另一种是WinCC Runtime Advanced的仿真。前者用在入门级面板,界面和运行逻辑跟实物面板高度一致;后者用于IPC或PC环境,能模拟更多的系统功能和脚本运行。
做联调之前先确认你的项目里HMI是哪种类型。如果你用的是WinCC RT Advanced,在仿真的时候有个优势——可以直接在本机运行WinCC Runtime,不用等模拟面板加载,启动速度快很多,而且中文输入法不会出问题。Basic面板的仿真在部分系统上会出现中文输入法无法切换的毛病,这是一个已知但官方没彻底修干净的小问题,别在上面浪费时间。
5. 仿真跑不通?先按这套链路查一遍
5.1 检查清单和具体报错对照
博途仿真报错,报的种类其实就那么几类,但每次都能把人搞得头大。我整理了一张最常遇到的排查对照表,都是自己踩过的,分辨率比官方文档高:
| 报错或现象 | 根本原因 | 解决方式 |
|---|---|---|
| 点击"开始仿真"是灰色的 | 选中的设备不支持PLCSIM,或PLCSIM未安装 | 检查CPU固件版本;去控制面板确认S7-PLCSIM已装 |
| 下载时报"无法建立连接" | 下载目标选错,或PLCSIM未打开 | 目标改为"S7-1200/S7-1500仿真模块" |
| 程序下载后CPU停在STOP | 程序编译有严重错误,或OB块启动条件不满足 | 看PLCSIM面板的诊断缓冲区,逐一排查SMC和编程错误 |
| 仿真运行时间一长就卡死 | 电脑内存不足或程序里有死循环 | 减小仿真运行负载;检查SCL里有无WHILE死循环 |
| HMI按钮点了无反应 | 启动顺序错、连接断开、变量关联失败 | 按上文4.3节逐项排查 |
其中"程序下载后CPU停在STOP"这个最隐蔽。明明编译的时候没有报错,下载也提示成功,但CPU就是停在STOP状态,点RUN很快又跳回STOP。这种多半不是程序逻辑的问题,而是硬件组态里有些模块在仿真环境里没有对应的虚拟设备,CPU在启动自检时发现找不到模块就跑"系统错误"把CPU拽回STOP了。解决办法是打开设备视图,检查所有站的模块是否齐全。如果你组态了一个信号板(SB1232),但PLCSIM可能并不完全模拟它,先移除再下载,一般都能解决。
5.2 仿真的"恢复出厂设置"大法
排查到最后要是真的找不到原因,别急着卸载重装。PLCSIM窗口里有一个MRES按钮,相当于真实PLC上那个带小方框的复位按钮。点击它,虚拟CPU会执行一次完全复位,把已下载的程序全部清空,恢复出厂状态。复位完成之后,再从博途里重新下载程序,很多诡异的问题就这么简单粗暴地解决了。
但注意,MRES之后你的下载程序、变量值、数据块内容全都没了,所以复位前先把项目保存好,比如用归档功能备份一个项目副本。这个习惯对真实PLC现场调试同样适用,毕竟把设备恢复出厂了重新下载,如果程序没保存好就真的欲哭无泪了。
5.3 仿真环境下的"网络通信不通"
还有一个常见问题是仿真环境下PROFINET通信连不上。真实PLC之间通过交换机通信很正常,仿真环境下想测试两台PLC之间的数据交换,最常用的方式是PLCSIM Advanced配合多个实例,但标准版PLCSIM同时只能模拟一个PLC设备,多PLC仿真需要靠一台PLCSIM Advanced来做。如果你只有标准版PLCSIM,又想测网络通信,有一个委曲求全的办法:把两台PLC的逻辑合并到一个项目里,用共享数据块模拟通信数据;或者直接用博途的Open User Communication块模拟TCP/UDP报文,在仿真里这些块是可以自己跟自己收发数据的。虽然这种做法不完全等价于两台真实PLC通信,但至少能把报文状态机调通。
6. 仿真还能这么玩:SCL调试、Factory IO联动和G120组态验证
6.1 在仿真里给SCL程序下断点
博途的SCL编程器自带调试功能,但在没有实物的前提下,很多人不知道PLCSIM也支持断点调试。当你的SCL程序在仿真里运行起来之后,在某一行的行号左边右键,选择"设置断点",然后在另一处让变量变化的事件(比如仿真表里强制一个条件),程序跑到断点处就停住,并会在变量观察窗口里显示出当前所有变量的实时值。你可以单步执行每一行,看每一条语句执行完之后的数值变化,这在排查复杂算法时极其高效。
不过有个限制:博途的断点调试对S7-1200的支持不如S7-1500完整,部分优化访问块或FB内部变量可能无法在断点处查看。这时候你就得在几个关键中间变量上先做数据记录,或者干脆把那一段逻辑临时挪到OB1里调试,调试完再放回去。这个土办法很多人不知道,但极其好用。
6.2 和Factory IO联动做产线仿真
很多人都搜过"Factory IO 西门子博途工程模板",想着把博途仿真的PLC和Factory IO的三维仿真场景结合起来,在电脑上做一条虚拟产线。这个方向是对的,但一定要用PLCSIM Advanced,标准版根本提供不了对外通信的TCP端口。PLCSIM Advanced可以从博途里添加一个虚拟的S7-1500 PLC,然后通过S7通信协议让你的程序跟Factory IO交换数据。Factory IO里的传感器信号发送到对应的DB块地址,博途程序算出的输出又写回DB块去控制气缸动作,逻辑闭环完全打通。
不过必须说清楚,PLCSIM Advanced的安装比标准版麻烦不少,而且对Windows版本、杀毒软件非常敏感。我第一次装的时候死活连不上虚拟设备,最后发现是Windows防火墙拦截了内部回环通信。如果你也遇到这个情况,打开防火墙设置,把PLCSIM Advanced相关的进程全部加入允许列表,大概率就能解决。
6.3 用GSD文件组态G120变频器后,仿真能验证什么
搜索记录里还有一条"博途用GSD组态G120变频器分配设备名称视频",这其实连着另一个问题:组态完G120之后,仿真到底能不能验证通信?答案是可以验证一部分,但要理解边界。你用GSD文件把G120作为PROFINET IO设备加入博途项目,控制字和状态字做成通信数据块,然后用PLCSIM让CPU与虚拟的G120进行周期性报文交换——仿真PLC的CPU可以周期地在网络端口上发出报文,但G120本身并没有一个"虚拟仿真器"来回应你,所以接收区可能一直是0。你可以验证发送逻辑的正确性,但没法看到真实的变频器反馈波形。
退一步说,即便仿真只能验证单向控制字,这件事仍然有意义。很多运动控制逻辑的起始条件是先看"变频器是否准备好",你再给"使能运行"。即便反馈没值,你也可以在仿真表里手动把"准备就绪"信号注入到程序里,把整个控制状态机的流程跑通。等到了现场,变频器的真实反馈自动把你这个临时注入的信号替换掉,程序照样能顺滑运行。这种"以仿真表补缺失信号"的做法,是我自己处理仿真和实物差异时最重要的技巧。
6.4 SCL和梯形图,仿真时怎么选择
编程语言的选择,仿真里也有讲究。SCL和梯形图在仿真条件下的执行结果没有本质区别,但调试体验差异很大。梯形图可视化程度高,输入输出看得清楚;SCL方便做复杂计算和数组处理,能下断点单步调试。我的建议是:逻辑控制部分用梯形图方便维护,算法和数据处理部分用SCL方便调试。这两个配合着写,仿真的价值能最大化。
有人会纠结优化访问和标准访问的问题。博途里数据块的默认属性是"优化的块访问",这种模式下FB的接口变量无法在仿真表里直接写入。如果你用仿真表强制一个DB变量的值总是失败,多半就是这个原因。把DB块的属性改成"标准访问"再编译下载,强制就没障碍了。这个细节在实物调试中同样存在,提前在仿真阶段摸透,能省不少去现场后的时间。
从我自己的使用感受说,仿真这个功能一旦用熟了,你会自然地调整自己的开发习惯:先写一小段就仿真一次,逻辑复杂度高就先在仿真里把边界情况测透,再去现场。这样的节奏下来,我最近几个项目的现场调试时间明显缩短了很多,每次打开仿真环境的时候也觉得心里很踏实。建议你把上面提到的各种坑过一遍,安装的时候注意版本匹配,启动的时候注意顺序,遇到问题先看诊断缓冲区,你的仿真体验应该会顺畅不少。