输送线汇流控制:基于FactoryIO与梯形图的PLC仿真方案

发布时间:2026/9/8 6:35:05
输送线汇流控制:基于FactoryIO与梯形图的PLC仿真方案 1. 先搞明白输送线汇流到底要解决什么问题1.1 FactoryIO里的典型场景两条支线挤一个出口用FactoryIO做输送线汇流实验最常见的布局就是一条A线、一条B线两条支线在中段汇入一条主线C物料从A、B两个来料口不断生成最后全部经主线出口离开。这个布局在现实工厂里极其常见包装车间多条包装机汇入同一条码垛输送线、仓储分拣区几个料口汇入主轴、装配线多个工位汇入总装线本质都是同一个模型。很多人第一次拿到这个任务第一反应是让输送带一直转不就行了汇流口又不需要额外动作。但真正把场景一跑起来就发现问题了两条线的物料随机到达汇流点如果谁都不让谁箱子和箱子就在交汇处顶在一起轻则卡死停线重则物料侧翻掉落。FactoryIO的物理引擎虽然比真实产线温柔但物料互相挤压、堵住传送带的现象模拟得很真实肉眼就能看出乱套。所以在动手写梯形图之前一定要先把这个场景拆成明确的控制任务汇流点同一时间只允许一个方向的车流进入另一个方向必须等待。等待机制靠什么实现答案是传感器检测、气缸挡停、定时器延时三件套。理清了任务再写梯形图思路会顺很多。1.2 汇流真正难控的三个点互锁、排队、时序先说互锁。两条支线汇入同一个出口最基础的要求就是把两路同时放行这个可能性从逻辑上彻底消灭。梯形图里最常见的做法是把对方方向的放行允许常闭触点串在自己支路里A方向放行时B方向的放行支路被硬性断开B再想置位也置不上。再说是排队。如果B线已经有一个物料停在汇流口等待A线的物料这时候也到了怎么办理想的做法不是让A线也冲过去而是让A线物料在汇流口前停住等B线那个物料通过主线传感器并留出安全距离之后再放A线。这就需要一套优先级逻辑可以让A先走、B等待也可以让两条线轮流走甚至按物料类型分配优先级。仿真实验里我把优先级作为可调参数实测下来比固定顺序灵活得多。最后是时序。气缸伸出挡停只需要一个瞬间但缩回放行之后物料从挡停位置走到主线传感器需要时间物料进入主线后开出汇流区也需要时间。如果放行脉冲太短后一个物料可能在气缸还没完全缩回时就顶上来了。时序参数没调好互锁再严密也会出现卡顿式放行。这三个点是整套程序的骨架后面所有梯形图都是围着它们转的。2. 仿真环境链路TIA博途、PLCSIM与FactoryIO怎么连2.1 选通信方式S7-PLCSIM驱动比Modbus TCP省事在哪FactoryIO支持的驱动不少常见的有Modbus TCP、Siemens S7-PLCSIM、OPC UA、Allen-Bradley等。我在这个实验里用的是TIA博途 S7-1200方案FactoryIO侧直接选择Siemens S7-PLCSIM驱动。为什么不用Modbus TCPModbus TCP本身很通用但它的地址是基于保持寄存器和线圈地址的你需要自己在PLC程序里把I/O和M变量映射成Modbus地址两边地址表要对应得严丝合缝稍微错一位就查半天。S7-PLCSIM驱动的好处是FactoryIO直接识别TIA博途里的符号表变量你在场景里点一个启动按钮直接把它分配到程序里的I0.0变量名都能对应上省掉一层映射的脑力负担。OPC UA也是一个选择适合跨品牌、跨平台但配置里要写服务器地址、节点路径对刚接触仿真的同学来说门槛略高。我的判断是如果手头是西门子全家桶老老实实走S7-PLCSIM驱动这是最顺的一条路。2.2 从建工程到变量映射的完整配置具体步骤我走了一遍关键节点如下打开TIA博途新建一个项目CPU选S7-1200系列的1214C DC/DC/DC不需要真实的硬件组态扩展。在PLC变量表里把输入、输出、中间变量按规划命名好例如I0.0叫SYS_STARTI0.2叫SENS_A_READYQ0.0叫MOT_A_CONV。注意变量的数据类型和地址区间不能冲突。在OB1里编写梯形图程序编译无误后点击下载到仿真器PLCSIM。PLC要切到RUN状态此时CPU模块上能看到绿色的运行灯。打开FactoryIO在顶部菜单文件 - 驱动或者右侧驱动配置面板里选择Siemens S7-PLCSIM点击连接。FactoryIO会自动和PLCSIM建立会话然后弹出一个变量映射窗口。在映射窗口里把场景中的每个输入元素按钮、传感器关联到PLC输入位把每个执行器输送带、气缸关联到PLC输出位。关联后场景里按下按钮PLCSIM里的I点就会变化PLC输出Q点置位场景里的输送带就会转起来。这中间最容易忽略的细节是CPU属性里的防护与安全设置。有的版本默认禁止仿真器远程访问FactoryIO怎么连都连不上。需要到CPU属性-防护与安全-连接机制勾选允许来自远程对象的通信不同博途版本翻译略有差异改完重新编译下载一次。2.3 连不上、地址不亮的排查顺序我调试时遇到过三次连不上的情况总结出固定排查链路先看PLCSIM状态。CPU不在RUN模式FactoryIO那边的连接按钮就是灰色的怎么点都没反应。把CPU切到RUN再试一次。再看变量映射方向。场景里的启动按钮如果映射到了输出区Q点按下按钮时I点当然不会有变化。新手最容易犯的错就是把输入输出映射反了场景里传感器信号进来了但PLC这边是Q点在变化逻辑自然全乱。最后看监控冲突。TIA博途在线监控和FactoryIO驱动同时访问PLCSIM偶尔会导致通信中断。我的做法是程序下载调试阶段用博图监控确认逻辑无误后关闭在线监控让FactoryIO单方面连接稳定很多。这也能让人专心观察场景里的动作是否满足控制预期。3. 梯形图程序架构怎样做到逻辑清晰又带详细注释3.1 按输入映射-中间逻辑-输出驱动三段式划分很多学梯形图的人都有个坏习惯把外部I点直接串到输出线圈上程序是怎么想的就怎么接。比如Q0.0输出直接接I0.0常开看着很直接但一旦程序超过10个网络这种写法就是灾难。改一个逻辑输出网络跟着乱查故障时满屏都是物理地址。我在这个项目里坚持三段式结构把所有网络分成三个区输入映射区把I点的信号状态统一搬到M变量上必要时在这里做信号反向和滤波处理后续逻辑一律用M变量不再直接碰I点。逻辑处理区启保停、互锁、排队、放行、定时计数全部在这一区完成参与运算的只有M变量、T定时器、C计数器。输出驱动区把逻辑处理完成后的M变量搬到Q点驱动FactoryIO里的输送带和气缸。这样分的好处是现场换传感器接线时只需改输入映射区某一两个网络逻辑区不用动排查故障时先看M变量状态是否符合预期再看输出驱动区问题立即缩小到一小段范围内。3.2 符号表与M变量命名让注释不再多余有详细注释的前提是程序本身命名清晰。我在符号表里用的是一套固定的英文缩写格式前缀表示类型下划线后面是具体含义。类型前缀示例含义数字量输入II0.2 SENS_A_READYA线物料到达汇流前检测点数字量输出QQ0.3 CYL_B_STOPB线挡停气缸中间变量MM0.1 A_PASS_GRANTA方向放行允许定时器TT2 B_BLOCK_TIMEB线挡料持续时间看到M0.1叫A_PASS_GRANT不需要翻注释就知道是A放行允许。看到Q0.4叫CYL_A_STOP就知道是A线挡料气缸。符号命名规范了梯形图的可读性会提升一大截注释只需要在关键位置解释为什么不需要每行都写这是常开触点。3.3 写注释的具体规范哪些位置必须写、怎么写我的注释规范是三条互锁条件必须写定时器时间必须写复杂置位/复位条件必须写。举个例子A方向放行置位网络注释我写的是当A线物料到达且B方向没有放行、主线无占用时允许A方向放行。此条件是汇流互锁的关键修改前必须确认B方向互锁逻辑。而不是写A物料到位后置位A放行允许。前者在讲逻辑意图和修改风险后者只是复述电路状态写了对维护者也没帮助。定时器参数的注释更要写清楚时间依据。比如T2设为3秒注释写明从主线传感器检测到A物料通过到A方向气缸复位期间预留1秒安全距离时间按传送带速度0.5m/s估算物料完全离开汇流区约需2秒。前100字融入核心关键词FactoryIO、仿真、梯形图这些会自然出现。4. 汇流控制核心逻辑拆解互锁、放行与统计4.1 系统启保停网络所有逻辑的总开关整套程序的根是一个启保停电路我用M0.0 SYS_RUN表示系统运行状态。启动按钮I0.0的常开触点并联M0.0自锁停止按钮I0.1的常闭触点串联在其间输出M0.0。这个网络看起来简单但它决定了整个系统的行为基线。M0.0为OFF时所有输送带输出全部为0所有中间变量通过复位网络清零气缸全部缩回。我在调试时发现如果不在停止逻辑里统一复位放行允许和占用标志系统重新启动时可能残留旧状态导致第一次放行动作异常。所以我会在多处网络里加入M0.0的常闭触点做总复位条件保证停机即清零。梯形图文本示意网络1 系统启停 I0.0启动 I0.1停止 M0.0系统运行 ---| |-------|/|----------( )--- | M0.0系统运行 | |---| |---------------|这里不使用置位指令而是用启保停基本电路原因很简单启保停电路天然具备停止优先特性I0.1一旦按下不管启动信号是否还保持M0.0立即复位。汇流控制中安全优先级最高停止按钮必须能随时切断一切输出。4.2 支线送料与汇流互锁网络先到先得支线输送带的驱动逻辑不复杂A线输送带Q0.0在系统运行且A线气缸未挡停时运行B线同理。真正见功夫的是汇流互锁网络。我的互锁策略采用先到先得两条支线谁先触发到位传感器谁就获得放行允许另一条被强行压制直到先到者完全通过主线传感器并经过一段时间延时。梯形图里用置位指令实现A方向放行允许置位条件A线物料到位 且 B方向放行允许为OFF 且 主线无占用为OFF B方向放行允许置位条件B线物料到位 且 A方向放行允许为OFF 且 主线无占用为OFF把B_PASS_GRANT的常闭触点串进A的置位网络把A_PASS_GRANT的常闭触点串进B的置位网络这就在硬件回路上保证了两者不可能同时为ON。即使两个传感器同时被触发扫描周期内也只能有一个方向先完成置位另一个方向的置位条件被破坏。这里要特别提一点不能只靠先到先得的置位逻辑还要处理先到者已经离开但信号没复位的情况。所以我用主线通过传感器SENS_C_PASS触发一个延时定时器延时结束才复位对应方向的放行允许确保物料完全离开汇流区前另一个方向不会被放入。4.3 挡停气缸动作的定时与复位挡停气缸是汇流控制的执行器动作逻辑直接决定物料会不会撞车。A线挡料气缸Q0.3的驱动条件是系统运行 且 A线有物料等待 且 A方向放行允许为OFF。也就是说物料到了汇流点但放行条件不满足时气缸伸出把物料挡在汇流口之前放行条件一满足气缸缩回物料顺利通过。气缸动作需要注意一个细节气缸伸出后物料会压在传感器SENS_A_READY上传感器信号一直保持ON。如果不做处理放行允许一复位气缸又立刻伸出去挡同一批物料造成反复伸缩。我的处理是引入一个已放行锁定标志当A方向获得放行后即使物料仍压在传感器上也保持放行状态直到主线传感器确认物料通过后才解除。梯形图里气缸复位网络要跟放行复位网络写在一起思路是放行结束时同步检测物料是否越过气缸如果越过了气缸不再伸出。第一次写这个逻辑的时候我漏了这一步导致物料被同一个气缸来回挡了两次后来才把放行结束和物料已离开气缸位置两个条件合在一起做复位动作就干净利落了。4.4 生产计数与运行指示仿真实验的加分项汇流控制跑通之后我建议加两样东西计数器和工作状态指示灯。用C1统计A线实际放行的物料数C2统计B线放行数C3统计主线总通过数。计数触发条件分别取气缸复位且物料离开气缸的上升沿。这里要小心计数重复我在调试中多次遇到一个物料被计两次的问题究其原因是传感器抖动后来在计数网络中加了传感器信号的延时滤波问题才消除。运行指示灯可以用Q点连接场景里的信号灯系统运行时亮绿灯系统停止时亮红灯报警时黄灯闪烁。这个在FactoryIO里看起来非常直观做课程设计答辩或者给领导汇报时一个灯比一百行注释更有说服力。信号灯输出在梯形图里就是几个简单的M变量映射成本极低值得加。5. 实测调试中踩过的坑从现象到根因5.1 物料在汇流口穿模传感器安装位置的学问第一次把程序跑起来看到了一个很诡异的画面A线物料明明被气缸挡住了但物理上还是慢慢挤进了主线甚至和B线过来的物料重叠。有同事开玩笑说FactoryIO物理引擎出Bug了但我很清楚问题出在传感器的安装位置。FactoryIO的3D场景里传感器和气缸的位置是可以在属性面板里拖动的。我把传感器放在了离气缸很近的位置物料一触发传感器PLC需要几个扫描周期做逻辑运算再驱动气缸存在一个响应延迟。虽然PLC扫描周期很快但传送带速度也不慢物料在气缸伸出前已经滑过了一段距离互相挤压之后就会出现穿模感。解决办法把传感器位置移到气缸前方更远的距离留出至少一个物料长度的响应距离。真实产线里这个原则也成立传感器离挡料气缸太近检测到来不及挡停就必须把传感器前移。我在FactoryIO里把传感器前移了大概一个箱子的长度同样的梯形图程序动作一下子变得干净利落。5.2 气缸还没收回物料就冲过去了另一个高频问题出现在放行瞬间。现象是气缸缩回指令已经给出但物料像是挤过去一样和气缸边缘发生明显摩擦甚至卡顿一下再过。原因不是气缸动作慢是我给放行允许复位设定的时间太短。最初我设的是0.5秒认为传感器检测到物料通过后0.5秒足够。实际监控发现气缸缩回需要行程时间物料在缩回过程中就开始移动挤压产生摩擦。后来我把放行延时改为3秒物料完全离开汇流区后另一方方向才被允许置位整个汇流动作就流畅了。这个坑在真产线更明显气缸行程越长、气源压力越低动作时间越不稳定。梯形图里定时器时间不能拍脑袋最稳妥的方法是先测出从放行指令发出到物料完全通过传感器的实际时间再在定时器上加20%到30%的余量。5.3 PLCSIM偶发断连与扫描周期的影响仿真实验跑久了还有一个很烦的问题PLCSIM和FactoryIO连接突然断掉博途里报警黄色感叹号FactoryIO场景卡住不动。多数情况是电脑性能不够FactoryIO的3D渲染和PLCSIM的实时通信同时抢CPU偶发通信超时。我的处理办法有三步。第一把FactoryIO的图形质量从高降到中场景是教学演示不追求4K画质第二关闭博途的在线监控窗口减少对PLCSIM的并发访问第三把FactoryIO场景速度从1.0降到0.8牺牲一点运行速度换通信稳定性。按这三步调整之后连续运行一个多小时没有再断过。还有一个概念问题值得提梯形图扫描周期和FactoryIO刷新率不需要严格同步。PLC扫描周期是毫秒级FactoryIO场景刷新通常是几十毫秒一次跑仿真观察动作只要逻辑正确时序不要求同步但如果要在仿真里验证精确时序就必须考虑刷新率的量化误差。6. 把这个程序移植到真产线之前必须想清楚的事很多人做完FactoryIO仿真会觉得程序写通了真设备直接抄就行。真这么干是要吃大亏的。虚拟仿真和物理产线之间至少有三个方面存在本质差异。传感器响应时间。FactoryIO里的光电传感器是理想的光线被遮挡立即输出但真实的光电传感器存在十几毫秒到几十毫秒的响应延迟有的还会受环境光干扰误触发。梯形图里的互锁逻辑如果依赖传感器瞬时信号到了现场可能需要增加延时滤波或重复检测逻辑。气缸到位反馈。仿真里气缸伸出、缩回都是理想动作但真气缸的磁性开关是必须接进PLC的。我程序里气缸动作完全靠定时器控制现场就必须改成定时器超时 AND 气缸到位传感器有信号才算动作完成否则气缸卡住时程序根本不知道。急停和安全回路。仿真场景可以没有急停但真产线的急停必须走硬接线串进主接触器回路不经过PLC。梯形图里写再多急停逻辑也不能替代安全继电器。之前我见过一个学生把急停直接接到PLC输入然后通过M变量控制所有输出这个方案在安全评审是通不过的。6.2 从汇流到分流、分拣的扩展思路如果不想止步于汇流这个程序框架可以很自然地扩展。把主线C延长在后面加一个光电传感器和一个推杆气缸就变成一个汇流加分拣场景通过颜色传感器识别物料类型符合条件的物料推到副线滑槽其余的继续直行。互锁和排队逻辑沿用原来的新增的分拣逻辑单独放在一个程序区用M变量衔接。我在做扩展实验时最大的体会是三段式结构让扩展变得特别轻松。输入映射区加三个I点输出驱动区加两个Q点逻辑处理区新增几个网络原有汇流部分完全不用动。要是当初把所有I/O直接串在输出上现在改起来会像拆毛线团一样痛苦。最后再分享一个小心得。这个实验我坚持全部用梯形图完成没有用SCL或顺序功能图目的就是想验证一个结论梯形图只要命名规范、分段清楚、注释到位完全能写出跟高级语言一样易读易维护的程序。汇流控制说难不难说简单也不简单关键不在于用多高级的指令而是有没有把互锁条件、放行时序、气缸动作这三件事想透。你在FactoryIO里把这三件事跑顺了别说课程实验就是接到真实的输送线项目也不虚。