博图V18与Factory IO连接:PLCSIM Advanced避坑指南

发布时间:2026/10/1 13:46:00
博图V18与Factory IO连接:PLCSIM Advanced避坑指南 1. 这套连接方案到底在解决什么问题先说结论博图 V18 和 Factory IO 连起来本质上是让一个跑在电脑里的虚拟 PLC去驱动一个跑在同一台电脑里的三维工厂场景让传感器信号能传进 PLC、PLC 的输出能点亮场景里的电机和气缸。听起来像个玩具但凡是做过自动化调试的人都知道这套组合真正的价值在于——你可以在没有一台真实设备的情况下把一段控制逻辑从零写到能跑通并且是带反馈的闭环验证而不是对着空变量表瞎点。我最早接触这类仿真练习是为了给新人做培训。真机成本高、占用场地、还容易因为接线错误烧模块一个分拣单元配下来动辄几万块。后来把逻辑验证环节全部搬到 Factory IO 上新人先在这里把程序调熟再上真机的时候就只处理机械和电气问题了效率差出一大截。Factory IO 这个仿真软件下载之后装好配合博图 V18 和 PLCSIM Advanced一台普通笔记本就能跑起来。那为什么大家总在问连接问题因为这套组合的连通性不是装完软件就自动有的它牵扯到四个层面的东西同时对齐PLC 项目的组态参数、PLCSIM Advanced 的虚拟网卡实例、Factory IO 的驱动配置、以及操作系统层面的防火墙和网络适配器状态。任何一环没对上现象都长得差不多——连不上、超时、驱动里报红。这篇内容适合三类人正在自学博图但苦于没有硬件的学生、需要给团队搭练习环境的工程师、以及已经会写梯形图但一到联调就卡住的从业者。我会把三到七章的重点放在真正会踩坑的地方尤其是访问权限和地址映射这两块这两处是连接失败率最高的区域很多教程一笔带过实际却最要命。2. 三条可选通信路径先想清楚再动手2.1 主流方案对比与选型逻辑Factory IO 对西门子 PLC 的支持实际上能走的路不止一条。我梳理成表格方便你直接对号入座。方案依赖组件优点局限S7 协议 PLCSIM Advanced博图 V18、S7-PLCSIM Advanced V5.0、Factory IO 4.x延迟低、配置直观、官方支持Advanced 需独立授权虚拟网卡配置有门槛Modbus TCP博图 V18、PLCSIM Advanced 或真机、Factory IO 4.x协议通用、跨品牌、点位映射自由度大需要写 MB_SERVER/MB_CLIENT地址要按寄存器规划OPC UAS7-1500固件达标、Factory IO 4.x语义化强、适合对接上层系统组态繁琐、刷新周期偏长、新手容易绕晕S7 协议 真实 PLC博图 V18、物理网卡、真机最接近现场需要硬件成本和场地是门槛选哪条我的建议很直接练逻辑就用第一条。Factory IO 原生的 Siemens S7-1200/1500 驱动就是为 PLCSIM Advanced 设计的配置窗口里填 IP、Rack、Slot 三个值就能通比 Modbus 少写一堆通信指令。这里必须强调一个高频误区随博图一起安装的那个 S7-PLCSIM也就是大家常说的 PLCSIM V18不具备对外的以太网接口。它能仿真 PLC 内部逻辑能让你在博图里点在线、看程序跑但外部程序看不到它。所以 Factory IO 用 S7 驱动去连标准 PLCSIM永远连不上。这个坑我见过太多人反复踩甚至怀疑自己装错了版本。要对外通信必须是 PLCSIM Advanced或者真机。2.2 通信链路的底层走向把链路拆开看会清楚很多。PLCSIM Advanced 在创建实例时会虚拟出一块网卡名字通常叫 Siemens PLCSIM Virtual Ethernet Adapter你给这个实例分配一个 IP比如 192.168.0.1这个 IP 就是虚拟 PLC 的 IP。博图项目里组态的 PLC IP 必须和它完全一致一个字都不能差。Factory IO 的 S7 驱动启动后会以 S7 通信的方式向 192.168.0.1 发起连接底层走的是 ISO-on-TCP标准端口 102。连上之后它周期性地读取 %I 区、写入 %Q 区这个周期默认在 10 到 20 毫秒量级肉眼看起来是实时的。理解这条链路之后排查就有了方向感连接失败要么是虚拟网卡没起来要么是 IP 不在一个网段要么是 PLC 侧拒绝了外部访问请求。三条原因对应三个完全不同的操作位置比盲目重启软件高效得多。注意PLCSIM Advanced 的实例有两种通信模式TCP/IP communication 和 Softbus。想和 Factory IO 通信必须选 TCP/IP communication。Softbus 只用于多个虚拟实例之间互连外部程序根本摸不到它。这个模式选错现象就是一切看起来都正常但就是连不上。3. 上机前的环境准备版本对齐是第一步3.1 软件清单与版本匹配表博图这个软件的版本迭代很密从 v15.1 到 v20 每一代都有人用但和 PLCSIM Advanced、Factory IO 之间的兼容关系是有讲究的。我整理了一张实际验证过的对应表博图版本配套 PLCSIM配套 PLCSIM AdvancedFactory IOTIA V16S7-PLCSIM V16V3.04.xTIA V17S7-PLCSIM V17V4.04.xTIA V18S7-PLCSIM V18V5.0 / V5.0 SP14.xTIA V19 及以上对应版本V6.0 及以上4.x如果版本错配典型症状是博图里能正常编译和仿真但 PLCSIM Advanced 控制面板里创建实例时报错或者创建成功却搜不到设备。这种情况别急着怀疑配置先回头核对版本号。除了这三个主角还有几个配角不能省博图的安装包要完整版不要精简安装.NET 运行库版本要满足 Factory IO 的要求如果电脑上装了多个版本的博图建议用虚拟机隔离避免授权和注册表互相打架。3.2 安装顺序与那些让人血压升高的报错安装顺序我建议这样先装博图 V18 本体和 S7-PLCSIM再装 PLCSIM Advanced最后装 Factory IO。原因是 PLCSIM Advanced 会安装虚拟网卡驱动需要系统重启才能生效放在博图之后装能减少一次重启。安装过程中有几类报错我遇到过多次列出来供对照。第一类是端口占用。安装某些组件时会检查特定端口如果被占用会直接报错中断网上常提到的端口号 5111 就属于这一类。解决办法不复杂打开命令行用netstat -ano | findstr 5111查出占用进程的 PID再到任务管理器里结束它然后重试。实在找不到占用者重启一次电脑通常也能解决。第二类是虚拟网卡驱动没装上。表现是设备管理器里看不到 Siemens PLCSIM Virtual Ethernet Adapter或者看到一个黄色感叹号的未知设备。这通常是驱动签名或安全策略拦截导致的需要在安装时留意有没有被系统静默拦截的提示。装完后到网络连接页面确认一下有没有这块虚拟网卡没有的话连接这件事后面根本无从谈起。第三类是安装中途提示需要重启但你没重启后续组件注册失败。这类问题的排查成本很高最省事的做法是卸载干净重装别硬扛。:: 查端口占用找到对应 PID netstat -ano | findstr :5111 :: 也可以用这个看完整列表确认是哪个服务 tasklist | findstr PID3.3 授权与许可证的合规处理关于授权我只说合规路径。博图本身和 PLCSIM Advanced 都是需要授权的组件PLCSIM Advanced 属于独立授权的软件不等同于博图自带的 PLCSIM。官方提供限期试用版本用来评估和练习是足够的如果用于正式项目走正规采购渠道或者找公司内部的软件管理员协调。网上搜到的所谓万能授权一类的文件我的态度很明确一律不要碰。来源不明的东西往工业软件里塞轻则功能异常、仿真起不来重则系统环境被破坏恢复的时间成本远超省下的那点事。我见过一台培训用的工作站因为装了来路不明的授权工具导致博图反复提示找不到许可证最后重装系统才彻底解决那台机器上积累的所有项目模板全丢了。提示如果你的博图提示找不到许可证先确认授权管理器里许可是否正常传递再看是不是开了多个版本的软件互相抢占。这类报错十有八九出在授权传递上而不是软件本身坏了。4. Factory IO 侧配置从场景到驱动4.1 场景搭建与传感器、执行器布局打开 Factory IO你的第一步不是去点驱动而是先把场景搭出来。我推荐新手直接用它自带的 Demo 场景比如 Sorting Station 或者 Pick and Place结构清晰、点位不多适合用来摸清连接流程。等流程熟了再自己用库里的零件搭复杂场景。自己搭场景的时候有个经验先规划点位再放零件。F 系列工厂场景里传感器和执行器数量一多很容易出现点位冲突两个设备抢同一个地址程序跑起来行为诡异。我的做法是在白纸上先画一张点位表左边写传感器、右边写执行器逐个分配地址确认没有重复之后再动手。零件的朝向也要注意。传送带的运行方向、光电传感器的检测面、气缸的推出方向这些在场景里如果放反了程序逻辑再对也会出现物料反向跑、传感器不触发的情况。这种问题不是通信故障但现象很像排查时容易走偏。场景搭好后按 CtrlS 保存建议单独建一个项目目录后面和博图项目放在一起方便对照管理。4.2 驱动选型与地址映射策略点开右上角的 Driver 面板在驱动列表里找到 Siemens S7-1200/1500 这一项。选中它之后Settings 页里要填三样东西IP 地址、Rack、Slot。IP 填 PLCSIM Advanced 实例的 IP比如 192.168.0.1Rack 和 Slot 对 S7-1200/1500 来说基本都是 0 和 1。接下来是最关键的地址映射环节。Factory IO 的标签分两类传感器属于 PLC 的输入也就是 %I 区执行器属于 PLC 的输出也就是 %Q 区。这个方向极易搞反我见过的典型错误是把传送带拖到 %I 地址上结果程序里怎么写传送带都不动因为 Factory IO 根本没去读那个地址。在 Tags 页面里逐个点击设备选中对应的标签行然后选择地址。绝对地址模式下你直接在输入框里填 I0.0、Q0.0 这样的格式即可。填的时候建议按字节对齐规划比如输入从 %I0.0 到 %I0.7输出从 %Q0.0 起别东一个西一个后面写变量表会省很多力气。Factory IO 较新版本还支持符号寻址也就是直接填 PLC 变量的符号名。这个功能好用但前提是 PLC 侧开启了相应的访问权限具体后面会讲。新手阶段我建议先用绝对地址稳。4.3 场景存档与工程模板复用每次连接都重新配置一遍是浪费时间。我的做法是调通一次之后把 Factory IO 场景文件、博图项目、PLCSIM Advanced 的实例参数记录全部归到一个文件夹里命名成分拣站模板之类下次开新练习直接复制一份改改就行。PLCSIM Advanced 的实例配置是可以导出导入的控制面板里就有这个选项。把常用的实例参数存成一个配置文件新机器上导入就能用省去每次填 IP 和模式的重复劳动。注意别把 Factory IO 的场景文件和博图项目分开存放。这两个文件是强耦合的点位表一变两边都得改。放在同一个目录下并且用同一套命名规则能帮你避免程序改了点位忘了改场景这类低级事故。5. 博图 V18 侧设置让 PLC 愿意被外部访问5.1 硬件组态与 IP、接口设置新建项目添加 CPU 1511-1 PN 或者你手头有的 S7-1500 型号。S7-1200 也可以用但对固件版本有要求早期固件在 PLCSIM Advanced 里跑不起来建议至少用 V4.0 以上固件。为了少折腾我下面的示例全部基于 S7-1500。进入设备视图双击 CPU 打开属性切到以太网地址这一栏。新建一个子网把 IP 地址设成 192.168.0.1子网掩码 255.255.255.0。这个 IP 必须和 PLCSIM Advanced 实例的 IP 一模一样。很多人的连接问题就出在这里——项目里顺手套了个 192.168.0.10实例里是 192.168.0.1两个不同的地址怎么都握不上手。顺带说一句如果你电脑的物理网卡也在 192.168.0.x 这个网段建议换个网段比如虚拟侧用 192.168.1.1避免路由表里两个同网段接口打架。这个现象很隐蔽会在连接时表现为时通时断。5.2 访问级别与 PUT/GET 通信权限这一节是整篇内容里最重要的一段我把它单列出来。Factory IO 通过 S7 协议访问 PLC 的 I/Q 区本质上是一种外部访问行为。S7-1500 默认的保护设置会拒绝这类请求所以必须在 CPU 属性里把权限放开。操作路径CPU 属性 → 保护与安全 → 访问级别选择完全访问权限无保护。然后在同一个页面往下找到连接机制勾选允许来自远程伙伴的 PUT/GET 通信访问。这两个开关缺一个都不行。我遇到过一位同事只改了两处中的一处结果现象是 Factory IO 的驱动显示已连接但所有点位读回来的值都是零写入也不生效。他花了两个小时怀疑地址填错最后发现是访问级别还停在默认值。这个坑的迷惑性就在于连接状态是绿的让你以为链路没问题。提示做完这一步记得重新编译并下载硬件组态光改不下载是不生效的。改完属性后最好在博图里执行一次全部重建能把一些缓存问题一并清掉。5.3 PLCSIM Advanced 实例创建与下载打开 PLCSIM Advanced 控制面板在 Online Access 里选中你电脑上的虚拟网卡接口。接着在 Instance 区域填实例名称比如 Instance1IP 地址填 192.168.0.1通信模式务必选 TCP/IP communication。点击 Start面板上会显示实例已经运行。回到博图点下载到设备。在下载对话框里PG/PC 接口选 PLCSIM Virtual Ethernet Adapter接口类型选 TCP/IP然后点开始搜索。正常情况下能搜到 192.168.0.1 上的设备选中它就可以下载了。如果搜不到按这个顺序排查实例是不是真的在跑、IP 是不是真的对得上、虚拟网卡是不是被禁用了、防火墙是不是拦了。大部分情况能在这四步里定位。下载完成后把 CPU 切换到 RUN 模式。这时候可以打开一个监控表手动给某个 %Q 点位写一个 TRUE然后切到 Factory IO 看对应的执行器有没有动作。这个动作是连接成功的第一个确凿证据比任何状态指示都可靠。5.4 变量表与地址规划博图的 PLC 变量表建议按物理意义命名而不是随手起个 Tag1、Tag2。我给个命名参考入口传感器叫I_EntrySensor推料位传感器叫I_PushPosSensor传送带叫Q_Conveyor推缸叫Q_Pusher。这样程序里读起来一目了然Factory IO 那边的标签名也可以保持一致对照排查省事。如果你打算用 MOVE_BLK 这类指令做批量数据搬运变量表的规划就更有讲究了。MOVE_BLK 搬运的是数组源数组和目标数组的元素类型和长度必须完全一致差一个元素都会报错或者搬出乱码。我一般会把同类信号整理成连续的地址区间比如把所有输入传感器集中在 %I0.0 开始的连续字节里这样需要批量处理时直接对整个数组操作不用一个个写。注意MOVE_BLK 的执行是单次扫描完成的如果源数据在扫描过程中会变化要加触发条件或者把它放在合适的程序段里。别在循环里无脑调用容易出现数据撕裂。6. 跑通一个分拣站完整联调实例6.1 点位分配表与工艺逻辑梳理说了一堆配置还是得跑个真东西才有体感。我用一个简化的推料分拣站做例子场景里放一条传送带、一个入口漫反射传感器、一个推料位传感器、一个推料气缸。方向地址标签名物理含义输入%I0.0I_EntrySensor入口光电检测来料输入%I0.1I_PushPosSensor推料位到位检测输入%I0.2I_StartBtn启动开关输入%I0.3I_StopBtn停止开关输出%Q0.0Q_Conveyor传送带电机输出%Q0.1Q_Pusher推料气缸输出%Q0.2Q_RunLamp运行指示灯工艺逻辑梳理清楚启动后传送带运行物料从入口进来被入口传感器捕获时计数加一物料走到推料位推料位传感器触发传送带暂停推缸推出保持一秒后缩回随后传送带恢复运行。这个逻辑简单但不单调它包含了自锁、边沿检测、延时、顺序控制这几个基本要素足够把联调流程走一遍。6.2 SCL 控制程序与状态机思路梯形图当然能写但我更推荐用 SCL 写状态机逻辑清晰、改起来方便。下面这段可以直接参考。// OB1 中调用或在 FB 内实现 // 状态定义0停止 1待料 2推料 3复位 REGION 运行控制 RunFlag : I_StartBtn AND NOT I_StopBtn; END_REGION REGION 状态机 CASE #step OF 0: // 停止态 Q_Conveyor : FALSE; Q_Pusher : FALSE; Q_RunLamp : FALSE; IF RunFlag THEN #step : 1; END_IF; 1: // 待料传送带运行 Q_RunLamp : TRUE; Q_Conveyor : TRUE; Q_Pusher : FALSE; IF I_PushPosSensor THEN Q_Conveyor : FALSE; #step : 2; #tonPusher(IN : TRUE, PT : T#1S); END_IF; 2: // 推料 Q_Pusher : TRUE; #tonPusher(IN : TRUE, PT : T#1S); IF #tonPusher.Q THEN #step : 3; #tonReturn(IN : TRUE, PT : T#800MS); END_IF; 3: // 推缸缩回 Q_Pusher : FALSE; #tonReturn(IN : TRUE, PT : T#800MS); IF #tonReturn.Q THEN #step : 1; #tonPusher(IN : FALSE); #tonReturn(IN : FALSE); END_IF; END_CASE; END_REGION这段代码里有两个地方值得说。一是定时器的调用方式我用的是 IEC 定时器的多重背景调用形式注意每次调用都要传入 IN 和 PT并且当状态切换时要记得把定时器复位否则下一次进入这个状态时定时器可能直接从已完成状态开始导致推缸动作一闪而过。这个细节不写出来新手照着抄很容易踩。二是入口传感器的计数我没有放在这段里实际项目中我会在入口信号的上升沿做一个累加用来统计产量。边沿检测用 R_TRIG注意它必须放在循环调用的块里且背景数据块要单独分配。编译通过后下载到 PLCSIM Advanced 实例。6.3 联机调试现场记录与验证方法下载完成后先在博图监控表里手动置位Q_Conveyor切到 Factory IO应该能看到传送带转起来。这一步验证的是输出通路。然后在 Factory IO 里手动拖动一个物料到入口传感器的检测范围回到博图监控表看I_EntrySensor有没有变成 TRUE。这一步验证的是输入通路。两条通路都通基本就稳了。接下来把程序切到 RUN打开启动开关观察物料从入口进来、传送到位、推缸动作、物料被推出、传送带恢复的完整流程。整个过程如果卡在某一步用监控表追一下状态变量 #step 停在了哪个值问题范围立刻缩小。我在第一次调这套流程时卡在了推缸不动作。监控表显示 step 已经到 2Q_Pusher也置位了但场景里气缸纹丝不动。最后发现是 Factory IO 里推缸标签填的是 %I0.1跟到位传感器撞了地址。改回 %Q0.1 立刻正常。这种错误在地址表不统一的时候特别容易发生所以我在第 4 章特意强调先规划再落地址。7. 常见故障排查速查7.1 连接与通信类故障现象可能原因处理动作Factory IO 驱动一直转圈连不上实例未启动或模式选了 Softbus检查控制面板状态改回 TCP/IP搜不到设备IP 不在同一网段核对项目 IP 与实例 IP 完全一致显示已连接但点位无数据PUT/GET 权限未开打开访问级别与连接机制开关重新下载时通时断物理网卡与虚拟网卡同网段冲突更换虚拟侧网段下载报无法建立连接PG/PC 接口选错改为 PLCSIM Virtual Ethernet Adapter最后一条我单独展开说。博图下载时如果 PG/PC 接口还停在物理网卡上会提示找不到兼容的设备这时候别怀疑 PLC 组态先去接口设置里换一下。7.2 仿真与程序类故障博图仿真无法启动这类问题排查思路和上面不太一样。先看编译结果有没有未解决的块引用错误再看 PLCSIM 是不是装了但服务没起最后看项目里是不是引用了当前版本不支持的指令。我遇到过几次都是编译报了个不起眼的警告但真正卡住仿真的是另一个块的接口不匹配重新全部编译一次就好了。还有一个高频问题是 HMI 仿真时按钮按下去没反应。这个跟本文主题不是一回事但原理相通HMI 变量和 PLC 变量之间的连接没建立或者 HMI 的变量读写方向配反了。检查方法是在 HMI 变量表里看连接状态再确认按钮事件绑定的是置位而不是取反。把 HMI 仿真和 PLC 仿真放在一起跑的时候两个仿真实例的网络配置要对齐否则 HMI 找不到 PLC。7.3 独家避坑清单按我的经验下面几条平时不太有人写但每一条都真实影响效率。每次改完 CPU 硬件属性一定要重新编译下载只改不生效是常态。Factory IO 场景里同一个设备的标签不要复用到两个地址冲突后现象是一半功能正常。用 SCL 写状态机时定时器的背景数据块每次状态切换后记得复位。虚拟网卡的 IP 一旦确定博图项目和实例两边都写进模板文档别靠记忆。跑长流程测试前把 Factory IO 的仿真速度调成正常加速模式下偶发信号丢失会误导判断。电脑内存建议 16G 起步Factory IO 的三维渲染加上 PLCSIM Advanced 实例8G 机器会明显卡顿。提示排查永远从最小的可验证动作开始。先验证一个输出再验证一个输入别一上来就跑整条工艺。这两步各花三十秒能帮你省掉半小时的无效怀疑。8. 进阶玩法与效率提升8.1 Modbus TCP 作为备用路线如果你的 PLCSIM Advanced 授权一时半会批不下来可以考虑用真机加 Modbus TCP 的方式过渡。做法是在 S7-1200/1500 里调用 MB_SERVER 指令把 PLC 做成服务器Factory IO 那边选 Modbus TCP Client 驱动然后按寄存器地址做映射。这个方案的麻烦点在于地址要换算输入寄存器、保持寄存器、线圈各占一套编址刚开始容易绕晕。好处是协议通用不绑定西门子生态将来对接其他品牌的上位机也是同一套思路。需要提醒的是MB_SERVER 在 S7-1200 上对固件版本有要求并且用到的端口要跟工厂网络环境协调。练习环境里随便用接现场的时候一定要先确认端口策略。8.2 让它跑得更像真机跑通基础流程之后可以往场景里加料让它更接近真实产线。比如加个料仓和上料机构让物料是源源不断进来的加个分拣滑道按物料颜色分流加个急停回路验证程序的故障恢复能力。这些改动会让你的程序从能跑进化到扛得住这才是真正能写进简历的东西。如果你有条件做多实例PLCSIM Advanced 支持同时跑多个虚拟 PLC可以让两个实例之间互相通信模拟主从站或者产线联动的场景。这个玩法对理解分布式 IO 和通信组态帮助很大。8.3 练习效率的几个小技巧第一把博图的监控表和 Factory IO 并排放用双屏或者分屏观察信号变化不用来回切窗口。第二把常用的调试片段做成代码模板比如边沿检测、定时器调用、状态机框架新项目直接复制别每次重写。第三养成记录问题的习惯我今天整理出来的这几条坑都是当时随手记下来的隔半年再遇到翻记录比重新排查快得多。我个人在实际操作中的体会是这套仿真组合最大的价值不在于省了买设备的钱而在于它把调试这件事的反馈周期压缩到了秒级。真机上改一段程序要重新下载、重新上电、重新等机械动作而在 Factory IO 里改完编译下载几秒钟就能看到结果。同样的时间里你能试错的次数是原来的十几倍。我当年就是靠这种高频迭代把顺序控制和状态机的写法练成了肌肉记忆后来上真机做项目程序框架基本一次成型。最后再分享一个小习惯每跑通一个场景把当时的项目包整体打个压缩包留档命名带上日期和场景名。半年后你回头看能清晰地看到自己在哪一步想通了什么问题这种积累比任何教程都值钱。