☰
Factory IO与西门子博途OPC UA联动仿真:从零搭建虚拟PLC产线
2026/9/26 23:32:55 网站建设 项目流程

前段时间一位做自动化培训的朋友问我,说手头有一批学员,PLC程序写了半年,但一上真实设备就手忙脚乱。我就给他推荐了Factory IO和西门子博途联动仿真这条路,回去自己先折腾了一套简单案例,从搭场景到联调跑通花了大概一个下午。这篇文章就把整个过程原原本本写出来,包括软件版本怎么选、OPC UA怎么连、变量怎么映射、中间踩了哪些坑,一次性说完。无论你是自动化专业的学生、刚入行的PLC工程师,还是想给客户做个方案演示的售前,这套东西都值得花时间玩一玩。

1. 这个联动仿真项目到底在做什么

1.1 两个软件各担什么角色

Factory IO(下称FIO)是一个工业级的3D虚拟仿真工具,场景库里预置了大量常见的自动化机构:传送带、光电传感器、限位开关、气缸、分拣推杆、料仓、甚至AGV和六轴机器人。它本身自带一套“演示逻辑”,但真正的价值在于可以把自己的I/O信号开放出来给外部控制器。西门子博途(TIA Portal)是西门子PLC的编程平台,一个典型的PLC程序无非是把输入信号处理后映射到输出信号。

联动仿真这个概念,就是把FIO当成虚拟设备层,把博途里的PLC程序当成控制层,中间用OPC UA这个工业通信协议把两层的I/O打通。你可以理解为:FIO是一个“身体”,博途是“大脑”,OPC UA是“神经系统”,大脑下达指令让身体动作,身体的传感器反馈又传回给大脑,形成一个完整的闭环。

1.2 为什么选用OPC UA而不是S7协议

我在最开始尝试时其实有两个选择:一是用西门子传统的S7通信协议,二是用OPC UA。S7协议在有实体PLC的时候非常好用,直接把程序下载到S7-1200/1500硬件,然后FIO通过驱动选项里的Siemens S7驱动读取就行。问题在于,如果不想接实体PLC,而是用PLCSIM Advanced仿真PLC,S7驱动配置起来非常麻烦,需要额外的网关或者S7ONLINE工具,而且FIO对虚拟PLC的S7支持并不稳定。

OPC UA就简单得多。博途从V14开始就在平台层面集成了OPC UA服务器,你只需要在CPU属性里勾选启用,然后在FIO里填一个服务器地址就能连接。不需要安装第三方驱动,不需要繁琐的组态,跨版本兼容性好。对个人学习和教学场景来说,这是最省事、最不容易出问题的路径。两种方式的差异我整理了一张表,你可以根据自己的硬件条件来选。

方案硬件要求配置难度实时性适用场景
实体PLC + S7通信S7-1200/1500硬件中等高设备调试、产线验证
PLCSIM Advanced + OPC UA仅电脑低较高教学、自学、售前演示
标准PLCSIM + 第三方网关仅电脑高中等不推荐,兼容性问题多

这里要说一句经验之谈:如果只是学程序、练逻辑,PLCSIM Advanced加OPC UA体验已经足够好,延时在可接受范围内,完全够用。如果是要给真实设备做最终程序验证,那还是老老实实用实体PLC。

1.3 这套联动方案的典型场景和收益

先说四个最常用的场景。第一是自动化教学培训,学员在博途里写完梯形图,切到FIO的3D画面里直接看到传送带走起来、气缸推出去,那种直观感是任何仿真软件内部模拟都比不了的。第二是设备预调试,在设备还没完全装配完成时,先用虚拟产线把PLC程序跑一遍,能提前发现逻辑缺陷。第三是售前方案演示,带一台高性能笔记本就能给客户展示完整的产线控制逻辑,比PPT说服力强太多。第四是个人自学,家里没有PLC硬件也能真实地跑程序,练指令、练编程思路都行。

当然,这个方案也有边界。它的重点在于验证程序逻辑和控制流程,对于精确定位、伺服带宽、PLC扫描周期抖动这些硬实时指标,虚拟环境是模拟不出来的。这一点心里要有数。

2. 准备工作:版本搭配、硬件条件和通信协议

2.1 软件版本怎么搭配才不容易出问题

版本问题是很多新人第一道坎。TIA Portal、PLCSIM Advanced、Factory IO三个软件各自迭代,版本不对应会导致仿真PLC起不来或者OPC UA连接不上。

我实际使用的组合是:TIA Portal V17 + PLCSIM Advanced V5.0 + Factory IO 1.4.x。这个组合整体稳定,网上资料也多。如果用的是TIA Portal V18及以上,PLCSIM Advanced需要对应V6.0或更高版本;V20用户则对应新版PLCSIM Advanced。原则是:PLCSIM Advanced的大版本必须和TIA Portal匹配,这个兼容矩阵在西门子官网可以查到,下载之前先确认。

还有一点很关键:CPU型号一定要选S7-1500系列,不要选S7-1200。PLCSIM Advanced不支持S7-1200仿真,选S7-1200的话OPC UA服务器根本没法在虚拟PLC上运行。我记得第一次搭的时候,习惯性选了S7-1214C,结果PLCSIM Advanced里怎么都建不出实例,查了半天才发现是CPU型号选错了。

2.2 硬件配置和网络环境的四个建议

因为要同时跑博途、PLCSIM Advanced、FIO三个大软件,硬件配置不能太寒酸。我的笔记本是16G内存,实测跑一个分拣站场景基本流畅,但场景一复杂,内存占用会到13G左右。如果你是32G内存,那就是绰绰有余。

如果电脑性能有限,有个折中方案:用虚拟机装博途和PLCSIM Advanced,宿主机装FIO。两边通过网络通信,内存分摊到两个系统里,不会出现单个系统内存爆掉的情况。要注意虚拟机的网络模式建议用桥接或者特定主机模式,保证宿主机和虚拟机之间能直接访问IP。

另外,FIO和PLCSIM Advanced里的虚拟PLC IP必须能互相ping通。PLCSIM Advanced的虚拟PLC可以手动指定IP,比如192.168.0.100,只要和本机网卡在同一网段即可。最后,连接之前关掉不必要的杀毒软件和下载工具,这些工具偶尔会干扰OPC UA的端口监听。

2.3 OPC UA连接的安全策略选择

OPC UA本身有一套完整的安全机制,包括证书、加密、用户认证等。在真实生产环境中这些都需要正确配置,但是在本地仿真这种实验环境里,建议先把“无安全(None)”策略用起来,把连接跑通再说。

具体操作时,博途的OPC UA服务器属性里需要设置允许无安全策略的连接;FIO的连接配置里也选择相同的策略。两边只要有一边不匹配,连接就会失败。等以后要接真实设备或者跨网络传输时,再研究证书和加密也不迟。防火墙设置我在第4节会单独讲,这是连接失败的大头原因。

3. 实操配置:从零搭一个传送带分拣站

3.1 Factory IO中创建场景并理解I/O分布

打开FIO后,主界面会提示选择场景或新建场景。第一次做联动,不要贪多,选一个“传送带分拣”(Conveyor Sorting)类似的简单场景就够。这个场景一般包含:一个料仓(持续出料)、一段传送带、一个分拣光电传感器、一个推杆气缸、一个料槽,以及一个启动按钮。场景里的每个机构都对应着输入或者输出信号。

如何查看这些信号?双击场景里的任意传感器或执行器,会弹出一个属性窗口,里面列出了这个组件的信号名称和默认地址。在未配置外部驱动时,地址没有实际含义,一旦切换到PLC驱动模式,这些地址就会变成真实的I/O点。建议花15分钟,把每一个传感器、执行器的名称、信号类型、地址抄到一张表格里。这一张表后面能帮你省下大半天。

3.2 在博途里创建S7-1500项目并启用OPC UA

打开TIA Portal,新建项目后添加一个S7-1500 CPU,推荐CPU 1511-1 PN起步。右键CPU,进入属性设置,在左侧菜单找到“OPC UA”,勾选“激活OPC UA服务器”。再进入“运行时设置→OPC UA”,确认“通过OPC UA访问PLC数据”是勾选状态,并且安全策略里允许“无安全”。

这里有一个容易漏的点:如果只激活OPC UA服务器,但没勾选“通过OPC UA访问PLC数据”,那么FIO就算连上了服务器也读不到PLC的I/Q区数据,表现就是驱动器配置里变量列表是空的。我第一次配置时就漏了这一步,排查了很久。配置好后先编译整个项目,确保没有报错,然后把博途项目保存一下,后面要配合PLCSIM Advanced一起用。

3.3 在PLCSIM Advanced中创建虚拟PLC实例

PLCSIM Advanced是独立于TIA Portal运行的仿真工具。启动它之后,主界面左侧的“Virtual PLCs”面板可以创建新的虚拟PLC,点击New创建一个实例,给它起个名字,比如FIO_PLC,并分配一个IP地址,比如192.168.0.100。

新建实例后,回到TIA Portal,点击“下载到设备”,目标设备选择PLCSIM Advanced里那个虚拟实例,完成硬件配置和程序下载。这一步等同于把程序“烧录”到虚拟PLC中。下载完成后在PLCSIM Advanced里启动这个实例,状态变为RUN,理论上OPC UA服务器就开始监听了。

有一个小细节:PLCSIM Advanced的实例启动后,不要随便改它的IP。如果改了,虚拟PLC的通信地址就变了,FIO里的连接配置也要同步改。另外PLCSIM Advanced和标准PLCSIM不能同时运行,如果电脑已经开了标准PLCSIM,要么关掉再启动Advanced,要么一路用Advanced到底。

3.4 Factory IO中配置OPC UA客户端并绑定变量

切换到FIO,在菜单栏选择File→Drivers,会弹出驱动选择窗口。这里选“OPC UA”作为通信驱动,然后点击Configure进入配置界面。在服务器地址栏填入opc.tcp://192.168.0.100:4840,安全策略选择None,点击Connect。如果一切正常,会显示连接成功,同时右侧会列出OPC UA服务器上可访问的节点。

接下来就是关键步骤——变量映射。FIO中的每个组件信号都有一个Address字段,在OPC UA模式下可以直接填写PLC的I/Q地址。例如把场景里的“启动按钮”信号地址填成I0.0,把“传送带电机”信号地址填成Q0.0,把“分拣光电”信号地址填成I0.3。

这个映射关系必须和博途程序里的I/Q地址一致。也就是说,你在博途里用的是%I0.0这样的绝对地址,或者给I0.0起了符号名,两边其实都能对上,关键是别改错。我最开始图省事,直接用FIO自动生成的地址,结果程序里根本没有对应的输入点,画面里按钮按了没反应。后来老老实实按变量表逐条核对,才跑通。

3.5 编写一个传送带分拣控制程序

我用博途的OB1写了一段简洁的SCL程序来实现分拣流程。逻辑很简单:启动后传送带运行,工件到达分拣位光电传感器后,传送带停下,推杆推出2秒,把工件推入料槽,然后缩回,传送带继续运行。代码如下:

// OB1主程序 IF "I0.0_Start" AND NOT "I0.1_Stop" THEN "M0.0_Run" := TRUE; ELSIF "I0.1_Stop" THEN "M0.0_Run" := FALSE; END_IF; // 传送带控制 IF "M0.0_Run" AND NOT "I0.3_SortPhoto" THEN "Q0.0_Conveyor" := TRUE; ELSE "Q0.0_Conveyor" := FALSE; END_IF; // 推杆动作 IF "I0.3_SortPhoto" AND "M0.0_Run" AND NOT "M0.1_Sorted" THEN "Q0.1_Pusher" := TRUE; "M0.1_Sorted" := TRUE; END_IF; IF "Q0.1_Pusher" THEN "T0_PushTmr"(IN := TRUE, PT := T#2S); IF "T0_PushTmr".Q THEN "Q0.1_Pusher" := FALSE; END_IF; END_IF; // 分拣完成标志复位 IF NOT "I0.3_SortPhoto" AND "M0.0_Run" THEN "M0.1_Sorted" := FALSE; END_IF;

这段程序看着简单,但体现了几条编程习惯。一是用中间变量M0.0_Run作为运行标志,后面所有输出都基于这个标志,这样停止按钮一按,所有输出同时灭掉,不会出现传送带还在跑的意外。二是推杆动作用置位加定时器组合,而不是直接靠传感器信号去驱动,防止工件还没被推出时传感器就复位导致推杆中途缩回。三是定时器用IEC格式的TON实例,每次推杆动作都重新触发,时序清晰。

写完程序后,编译、下载到PLCSIM Advanced,保持RUN状态。此时OPC UA服务器的变量列表里应该出现I0.0、Q0.0这些符号。

3.6 联调运行实测:按下启动的那一瞬间

配置完所有环节后,回到FIO主画面,点击运行。此时如果PLCSIM Advanced里程序已经RUN,FIO的驱动状态会显示连接正常。按一下场景中的启动按钮(对应I0.0),传送带开始转动,料仓里的工件一个接一个落在传送带上,运送到分拣位,光电传感器亮起,传送带停住,推杆气缸伸出把工件推入料槽,2秒后缩回,传送带重新启动继续送料。整个过程顺畅,没有卡顿。

这个看似简单的流程,其实已经把“PLC程序→OPC UA→虚拟工厂→传感器反馈→PLC程序”的闭环完整跑通了。在博途里在线监控时,你可以看到I0.3随传感器亮灭在TRUE和FALSE之间跳变,Q0.0、Q0.1随逻辑切换,完全就是一台真实PLC的监控画面。

4. 常见问题与排查技巧实录

4.1 OPC UA连接失败,从哪几步开始查

这是出现概率最高的一类问题。按我的经验,按顺序检查这五步基本能定位:第一步看FIO的Configure页面,服务器地址格式是不是opc.tcp://IP:端口,很多人在冒号或端口上打错;第二步看PLCSIM Advanced的虚拟PLC状态是不是RUN;第三步看TIA里CPU属性的OPC UA服务器有没有激活;第四步确认两边安全策略都是None;第五步检查Windows防火墙是否拦截了4840端口。

如果五步都没问题还连不上,把FIO和PLCSIM Advanced全部用管理员身份运行一次,再试。这个操作和Windows的用户账户控制机制有关,虽然不常见,但遇到过两次,值得试试。

4.2 博途防火墙设置:这个坑几乎所有新手都会踩

“西门子博途防火墙”这个关键词被很多人搜过,因为太多人栽在防火墙上了。TIA Portal在安装时会往Windows防火墙里添加规则,但这些规则只放行了TIA自家程序的通信,PLCSIM Advanced的OPC UA端口或者虚拟PLC的通信端口往往没有放行。结果就是软件一切正常,但网络层面被拦截。

标准的解决办法是手动添加入站规则。打开Windows防火墙高级设置,新建入站规则,选择端口,填TCP 4840,允许连接,然后应用。如果PLCSIM Advanced对应的虚拟网卡是自定义网络,还要确认该网络的防火墙配置文件是专用网络还是公用网络,规则的应用范围要覆盖。

顺便说一句,不建议为了省事直接关闭Windows防火墙。仿真电脑还好,如果是办公电脑或者以后要接真实产线,防火墙关闭带来的风险比调试时那点麻烦大得多。正确做法就是多花两分钟建一条规则。

4.3 变量对不上、数据不动,大概率是地址映射出了问题

连接正常但数据不动,这种情况多见于第一次配置。最典型的原因是博途侧没有勾选“通过OPC UA访问PLC数据”,导致FIO能连接服务器,却无法从节点里读取I/Q区的数据。其次是FIO组件信号填的地址和博途程序里的符号地址对不上,比如传感器是I0.3,程序里写的却是I0.2,那按按钮当然没反应。

还有一种情况是,修改博途程序里的符号名或者地址后,下载到PLCSIM Advanced时没有执行“软复位”或“重新启动”操作,导致OPC UA服务器缓存里还是旧变量列表。解决方法是重新编译下载,必要时重启PLCSIM Advanced的实例。总之,地址映射这件事,事前用表格管理,事中逐一核对,事后在线监控验证,是最稳的流程。

4.4 场景卡顿、响应延迟,如何优化

虚拟仿真最怕卡顿。FIO的场景渲染比较吃GPU,同时博途在后台编译和在线监控也会占用CPU。建议把FIO的画质设置降低一档,关闭垂直同步;在博途里不要同时开太多监控表达式;如果用了无线网络,尽量换成有线,避免网络抖动引发通信延迟。

如果用的是虚拟机装博途,还要注意虚拟机分配的内核数不能太多,否则宿主机上的FIO渲染会卡。通常给虚拟机分配2到4核,其余留给宿主机比较合理。实测下来,中等复杂度的分拣场景,在16G内存、4核处理器的笔记本上,帧率和响应速度都还过得去。

4.5 几条提升效率的小习惯

最后补几个实操中的体会。第一,每次修改程序前,在FIO里先暂停运行,改完下载再继续,避免通信数据不一致。第二,给虚拟PLC固定IP,别用DHCP,因为OPC UA地址写死以后,改了IP就要改两边配置。第三,场景文件、博途项目、PLCSIM实例配置各自多做几个备份,尤其是调试到一半的时候,一个可用备份比什么都值钱。第四,如果遇到奇怪的现象,先重启PLCSIM Advanced,再重启FIO,顺序错了有时候就是连不上。

5. 进阶方向与个人体会

5.1 从单工位到整条产线,还能玩出什么

这次跑通的只是一个分拣站。再往深走,有三个方向很值得折腾。一个是场景复杂度升级:在FIO里搭建包含多个工位、机械臂、视觉检测、仓储系统的完整产线,PLC程序从单站点控制变成顺序流程控制,对编程能力的要求会高一个档次。二个是博途工艺对象:如果FIO的场景里有伺服轴,可以在博途里用Motion Control工艺轴来控制定位,这时候“博途工艺轴”这个功能就派上用场了。三个是加入HMI画面组态,用博途自带的组态画面或者WinCC,通过OPC UA同时采集PLC和FIO的数据,形成一套完整的数字孪生演示方案。

这三个方向不需要换硬件,软件层面全部可以实现。对想深入自动化行业的人来说,这套组合可以作为通往数字孪生、虚拟调试领域的一个低成本起点。

5.2 折腾完这套案例,我最大的几点感受

第一,地址规划永远是第一位的。程序本身可以反复改,但I/O映射表乱了,整个调试过程都会变成灾难。第二,仿真和实物的差距心里要有数。OPC UA虚拟连接适合验证逻辑,不适合验证硬实时指标,这是工具的边界,不是软件的缺陷。第三,遇到问题别急着怀疑软件,先把防火墙、版本兼容性、安全策略这三件基础的事情逐一确认,绝大多数问题都出在这里。

如果你正打算在Factory IO和西门子博途之间建立联动,希望这篇记录能帮你少走点弯路。哪怕只跑通一个最简单的传送带动起来,那种“程序真的让画面动起来”的成就感,也值得体验一把。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询