
没搞过Factory IO和西门子S7-1200 PLC联调之前我也以为仿真就是搭个场景、写段程序、点一下运行那么简单。直到第一次把码垛机场景接上虚拟PLC才发现真正的工作量在逻辑设计、信号对接和调试方法上。这篇就把整个智能码垛机仿真流程的搭建过程、程序思路和踩坑点一次讲透给正在入门或者卡在联调阶段的朋友一个完整的参考。1. 为什么用Factory IO配合S7-1200 PLC做码垛仿真先说结论这套组合几乎是目前学习工业自动化逻辑控制性价比最高的搭配。Factory IO负责把真实的产线场景用3D方式建模出来西门子S7-1200 PLC通过博途TIA Portal编程再用S7-PLCSIM仿真虚拟PLC两者通过以太网连接后PLC程序可以直接控制3D场景里的传送带、气缸、传感器、码垛机械手整个过程完全不需要真实硬件。我见过很多人一开始就去买实体PLC和传送带模型一套下来大几千块结果调试时还是会遇到各种机械、接线问题反而把学习重心带偏了。仿真方案最大的优势是你可以把100%的精力放在PLC程序逻辑本身场景里的传感器、执行器、甚至故障触发都可以用鼠标拖拽配置出来。码垛机这个场景非常适合用来练手因为它包含了一个典型自动化系统该有的全部元素传送带搬运、到位检测、推料机构、垂直升降、真空吸盘吸附、位置放料、循环计数。一套流程跑下来你对顺序控制、边沿检测、定时器、计数器、安全互锁这些PLC核心指令的理解会比单纯刷题深刻得多。这套方案适合谁三类人刚学PLC想找项目练手的初学者需要给客户做方案验证的工程师以及想快速验证程序逻辑再移植到真机的开发人员。对初学者来说最大的价值是先建立程序控制物理对象的整体认知对工程师来说最大的价值是可以在没有现场条件的情况下完成大部分逻辑验证。2. 场景搭建与硬件配置的关键步骤Factory IO 里的码垛机场景模型有好几种有的是工件通过传送带送过来机械手抓取后放到托盘指定位置有的带双工位托盘和推料机构。选场景时可以优先选带传送带、推料气缸、码垛机械手和至少一个托盘的项目结构更完整。场景搭好后最重要的一步是配置PLC连接器类型。Factory IO 的PLC连接器支持多种品牌协议这里必须选择Siemens S7-1200 PLCSIM部分版本叫Siemens S7-PLCSIM不是选S7-1500也不是选通用Modbus。选错驱动类型怎么连都连不上。2.1 场景对象的信号映射Factory IO 里的每个传感器和执行器都有自己独立的信号名比如传送带电机、工件到位检测、推料气缸伸出、吸盘真空启动、栈台升降等等。你在场景编辑器里需要逐一点开这些设备确认它们绑定的信号名和信号类型数字量输入DI还是数字量输出DO。这里我强烈建议做一个动作场景里的信号命名改成和PLC程序里高度对应的名称。Factory IO 支持给信号自定义名称比如把进入传送带的光电传感器命名为IN_CONVEYOR_SENSOR把真空吸盘命名为OUT_VACUUM。这样做的好处是后续做信号映射时不会晕否则满屏的Input1、Output2光看名字就头大。2.2 物理对象与I/O地址的绑定流程在场景中配置好信号后需要在Factory IO的连接设置中把场景信号映射到S7-1200 PLC的I/O地址上。例如传送带启动信号 - Q0.0推料气缸伸出 - Q0.1推料气缸缩回 - Q0.2码垛机下行 - Q0.3码垛机上行 - Q0.4真空吸盘启动 - Q0.5工件到位检测传送带末端- I0.0码垛工位工件检测 - I0.1码垛机上升到位检测 - I0.2码垛机下降到位检测 - I0.3映射过程其实相当于给PLC的输入输出接好了线。你在博途里看到的I0.0对应的就是场景里那个传感器Q0.0对应的就是场景里那个电机。这种一一对应的关系特别重要映射错了程序里再怎么改都白搭。2.3 初始位置与速度参数设置场景里还有几个参数经常被忽略却直接影响后续控制逻辑传送带速度默认值通常能满足演示但调试阶段建议调成可调范围的中等值方便后续做变速测试。气缸动作时间Factory IO里气缸伸出缩回有动作时间属性默认可能是0.5秒PLC程序里做超时判断时要参考这个值留足余量。初始吸盘状态确保场景从非吸附状态开始否则程序一启动就会误判工件已抓取。我第一次搭建时就吃过亏场景默认的传送带速度特别快传感器信号还没传到PLC工件已经冲过了码垛工位后面再怎么调程序都对不上最后把速度降到60%才正常。3. 编写PLC程序前的逻辑规划很多人打开博途就开始拖梯形图指令这种做法在简单单控里还行但码垛机这种多工序的场景不先规划逻辑就写基本会陷入改一处错三处的循环。我建议动手写程序前先在纸上或者文档里把流程图和状态表列清楚。3.1 码垛机的工艺流程拆解码垛机的完整动作流程可以拆成下面几步系统启动传送带运行工件从入口被送到传送带末端。末端传感器检测到工件到位传送带停止。推料气缸伸出将工件推到码垛工位。推料气缸回退到位码垛机下行。码垛机下降到位启动真空吸盘吸附工件。吸附确认后码垛机上升。码垛机上升到位水平移动或旋转到放料位置具体看场景结构。到达放料位置关闭真空吸盘放下工件。码垛机回到初始位同时码垛计数加1。如果计数器达到设定层数停止流程并给出托盘已满信号否则继续下一个循环。这10步就是码垛机控制的核心时序。PLC程序里的所有逻辑都围绕这个时序展开每一步之间都有前一步完成作为启动条件形成严格的顺序控制链。3.2 状态划分用M继电器做状态寄存器码垛机这种工序明确的设备非常适合用状态位的方式编写。我在M区开辟几个状态寄存器每个状态用单独的M点表示M10.0待机初始态M10.1传送带运行态M10.2推料态M10.3码垛机下行态M10.4真空吸附态M10.5码垛机上升态M10.6放料态M10.7回初始位态这样一来梯形图里只需要在每个网络的触发条件里加入当前状态位和转移条件动作就变得非常清晰。比如从M10.1传送带运行态切换到M10.2推料态条件就是I0.0末端传感器从0变成1同时M10.1为1。状态划分的方法在维护时特别有用因为每个网络只负责一件事不像一长串自锁互锁网络那样看半天还不明白执行到哪一步了。3.3 使用定时器与边沿检测的关键时机码垛机流程里有两个地方必须重点使用定时器真空吸附建立时间吸盘启动后并不能立刻认为吸附成功需要延时几百毫秒让真空压力建立起来。通常设300ms到500ms。推料气缸动作超时保护推料气缸伸出指令发出后如果超过2秒还没收到回位信号需要触发故障报警防止气缸卡死。边沿检测则主要用于传感器的到位信号。传送带末端的传感器如果一直是1工件还没被推走传送带会一直停着没法进下一个工件所以到位信号应该用上升沿触发一旦触发就执行推料动作。我在项目里专门用了P指令上升沿来进行到位判断。4. Factory IO与S7-1200 PLC的通信连接方法把场景和程序都准备好后接下来就是联调环节。Factory IO连接S7-1200仿真PLC官方推荐的是通过S7-PLCSIM进行连接。实际操作时可以按下面的步骤走4.1 博途侧配置在博途里创建S7-1200项目选择对应的CPU型号比如CPU 1214C DC/DC/DC设置好IP地址比如192.168.0.1。为了配合仿真需要把程序编译后下载到S7-PLCSIM中。下载之前确保PLC程序里已经组态好I/O地址且这些地址与Factory IO里映射的信号地址一致。有个容易被忽视的细节S7-PLCSIM和S7-1200之间需要指定接口类型。在博途里点击下载时目标接口要选择PN/IE也就是工业以太网接口而不是MPI或其他接口。选错接口仿真PLC状态一直是停止Factory IO连不上。4.2 Factory IO侧连接设置在Factory IO里打开文件-连接选择S7-PLCSIM作为驱动IP地址填写与博途一致的地址仿真模式下不需要真实网卡但地址要匹配。驱动配置里通常需要填机架号和槽位号S7-1200默认是0机架0槽这部分保持默认就行。连接成功之后Factory IO场景左上角会显示Online状态此时你操控场景里的传感器博途在线监控里的I区数据会同步变化反过来在博途里强制Q区输出场景里的执行器也会动作。4.3 通信失败时的排查思路联调时遇到连接失败别慌按顺序排查确认S7-PLCSIM里的PLC已经处于RUN状态绿色如果显示STOP在PLCSIM控制面板里切到RUN。确认两边的IP地址完全一致这里指的是组态IP不是电脑网卡的IP。确认Factory IO的驱动类型选的是S7-PLCSIM不是Modbus TCP。确认博途项目里没有勾选仅组态支持导致程序没真正下载到PLCSIM。我遇到过最无语的一次是博途和Factory IO一直通信超时搞了半小时最后发现是S7-PLCSIM界面被最小化到托盘仿真PLC自己在开机后被切到了STOP状态。所以第一步先看状态简单却致命。5. 码垛机PLC程序分段解析为了便于维护和理解我把码垛机的PLC程序分成了几个程序段手动模式段、自动运行段、报警处理段和计数统计段。这里重点讲自动运行段里最有代表性的几个逻辑。5.1 传送带送料与到位停止逻辑自动模式下传送带应该在无工件在码垛工位时运行。用梯形图表达就是条件启动按钮按过M0.01、没有急停、码垛工位上没有工件I0.10。动作Q0.0传送带电机置1。当传送带末端传感器I0.0被工件遮挡时置位M1.0到位标志同时复位Q0.0暂停传送带。这个M1.0作为后续推料动作的启动条件而且必须注意用置位/复位而不是简单的线圈输出这样即使工件一直在传感器前停留也不会导致推料动作重复触发。5.2 推料气缸动作控制M1.0为1时执行推料动作置位Q0.1推料气缸伸出持续0.5秒后复位。再等0.2秒让工件完全进入码垛工位然后把Q0.1复位。这里用定时器产生一个单脉冲输出比用自锁回路更简洁。需要注意推料气缸的动作和传送带停止之间必须有互锁如果传送带还没停稳就推料工件很容易被挤偏所以程序里推料动作的启动条件必须包含传送带停止标志位。5.3 码垛机升降与吸附控制工件到位后码垛机执行一次下行-吸附-上行动作置位Q0.3下行下到位的信号I0.3变为1时停止下行同时置位Q0.5真空吸盘启动。延时0.5秒后认为吸附建立复位Q0.3置位Q0.4上行。上行到位信号I0.2变为1时停止上行延时0.2秒后放料也就是关闭Q0.5。这个动作块是整个码垛机的核心。真正调试时你会发现升降控制里到位信号的边沿特别重要因为码垛机会在到位开关附近反复震动导致信号抖动。我在这段程序里对到位信号做了10ms的滤波延时抖动基本消除。5.4 托盘计数与层满处理每次完成放料计数器C1加1。设定值根据场景托盘可容纳的数量设置比如每层3件共3层设定值就是9。当C1计数值达到设定值时置位M2.0层满标志同时复位传送带运行M0.0。此时整个自动流程暂停场景里的码垛机回到初始位等待人工或仿真中的指令复位层满标志。层满标志可以接到场景的一个指示灯上便于视觉识别。我还会额外加一个M2.1用于换盘完成确认防止人工还没清理托盘就再次启动。6. 调试过程中最容易踩的坑这部分是我想认真写给后来人的因为很多问题不是程序逻辑本身复杂而是仿真平台的细节和惯性思维造成的。6.1 信号映射两边没对齐最常见的问题是博途里I0.0对应的是传送带末端传感器但Factory IO里把码垛工位传感器也映射到I0.0结果程序里逻辑没问题动作却完全错乱。建议在项目初期做一个Excel映射表左边是Factory IO信号名右边是博途I/O地址逐项核对联调时对照这张表排查。6.2 仿真里传感器极性搞反Factory IO的传感器可以有常开和常闭两种配置。有的场景模型默认传感器输出的是遮挡时为ON有些是遮挡时为OFF。如果PLC里按常开逻辑写实际信号反了程序永远检查不到到位信号。排查方法很简单在线监控里看对应I点用手动遮挡传感器看I点状态是否翻转。如果翻转和逻辑预期相反说明极性设置反了。6.3 PLCSIM的RUN状态忘记切换这个问题说起来低级但真的一再发生。尤其是多个项目来回切换时PLCSIM里的PLC可能处于STOP导致Factory IO连接界面显示已连接但信号不动。联调前养成习惯打开S7-PLCSIM确认CPU运行指示灯是绿色RUN再打开Factory IO场景。6.4 气缸动作时间参数和PLC定时器不一致Factory IO里每个气缸都有手风琴式的动作参数默认伸出/缩回时间是0.5秒或1秒。PLC程序里如果用了固定的0.2秒定时器来等待气缸到位就可能出现气缸还没伸完PLC已经进行下一步动作的问题。我建议把PLC程序里的等待时间设置成场景气缸动作时间的1.5倍以上或者尽量使用传感器的到位信号如果场景提供了而不是纯定时器。7. 优化扩展思路从仿真到接近真实项目码垛机仿真跑通后不要急着换项目。试试下面几个方向的优化对PLC编程水平的提升比多编十个新场景更有效。7.1 增加多工件类型识别与分拣逻辑在场景里放置两种不同颜色的工件增加一个颜色传感器Factory IO支持配置传感器检测颜色PLC根据不同颜色把工件码放到托盘不同区域。这个扩展会迫使你使用比较指令、数据块和更复杂的状态切换非常接近真实产线的分拣工位。7.2 增加气缸卡死与真空丢失故障模拟Factory IO支持手动触发传感器信号你可以自己做一个故障模拟按钮用PLC内部变量模拟或者直接在场景里中断某个气缸的正常动作。然后在PLC里做超时报警和故障复位逻辑。这个练习做完你对安全连锁的理解会上升一个台阶。7.3 实现在线监控与配方切换利用博途的监控表功能在线修改码垛层数、节拍时间、工件数量等工艺参数而不停机和重新下载程序。这对应到真实项目里就是配方管理功能。仿真环境里可以提前验证配方切换时程序的稳定性避免现场切换时出现中间状态错乱。8. 联调成功后的收尾检查清单最后我整理了一份个人长期使用的检查清单每次做完码垛机或者类似顺序控制项目仿真都会过一遍I/O映射表与博途符号表是否完全一致每个传感器信号有没有做边沿处理或滤波气缸动作定时器是否余量充足急停与复位逻辑是否可以在任意状态触发计数器和层满标志是否在复位后清零PLCSIM是否设置为RUN模式Factory IO场景速度是否与PLC逻辑匹配这套基于Factory IO与西门子S7-1200 PLC的智能码垛机仿真流程本质上是把需求-逻辑-程序-执行-反馈整条链路用低成本的方式打通一遍。你完全可以把它当成接触真实项目前的预演把这里面的思考方式带到真机上很多问题都能提前避开。如果还有更复杂的码垛场景比如多工位循环、机器人与PLC协同逻辑会更多但核心方法论不变。先把这套基础流程吃透后面都是举一反三的事。