
随便在工控群里一搜FactoryIO十个人里有九个都在问怎么把几条输送线安全地汇到一起。说实话这个题目看着简单就是个“合流”嘛但真正用梯形图往上写的时候一堆人卡在互锁、放行时序、物料追尾这些问题上。今天我把这套输送线汇流仿真实验程序的完整思路拆开讲从场景配置到每一段梯形图的写法再到调试时踩过的坑一次性说清楚。这个程序的核心逻辑并不复杂难的是把“逻辑清晰”“注释详细”“通俗易懂”这三点同时做到。我用的是最简单的梯形图写法没有跳转满天飞也没有一堆让人看不懂的中间地址全程就靠几个内部继电器加定时器把汇流动作梳理得明明白白。不管是刚接触PLC的在校学生还是在工厂里想快速验证工艺逻辑的电气工程师这套思路都值得参考。1. 项目概述与场景分析1.1 FactoryIO是什么为什么要用它做输送线汇流实验FactoryIO是一款工业自动化仿真软件里面内置了大量贴近真实产线的3D场景比如传送带分拣、机械手搬运、AGV调度、立体仓库当然也包括我们今天要说的输送线汇流。它的价值在于你不需要真的搭一条皮带线、装一堆传感器、接一个PLC就能在电脑上把完整的控制逻辑跑通。对你没看错是用软件去虚拟调试。在实际教学和项目预研里FactoryIO特别适合干一件事——验证程序逻辑。我见过太多人直接在真机上调试传感器还没装好程序先写了一堆结果一上电就撞机现场噼里啪啦响领导在旁边看着那叫一个尴尬。所以用仿真软件先把逻辑吃透再上真机这是成熟工程师的做法也是FactoryIO最核心的用途。具体到输送线汇流这个场景它模拟的是两条或多条进料输送带向同一条主输送带合流的过程。别小看这个工艺它是所有物料搬运系统里的基础单元。饮料灌装线、快递分拣线、汽车焊装线的零部件配送本质都是这个逻辑的变体。控制得好产线流畅高效控制不好物料在汇流点打架、堵料、甚至掉落生产线被迫停机损失是连续的。1.2 汇流场景的工艺需求与控制难点先花两分钟把工艺捋清楚。整体布局通常是这样A输送带从左侧送料B输送带从右侧送料两条线在中间位置汇入同一条主输送带主输送带将物料统一送往下一工位。每条进料带靠近汇流点的位置装有一个光电传感器用来检测物料是否到达等待区汇流点后方的主带上也装有一个传感器用来判断汇流区域是否已经被物料占用。说白了控制需求就三条当某条进料线有物料到达等待区且汇流点空闲时放行该物料进入主带。当两条进料线同时有物料等待时必须保证一次只放行一条线上的物料不能让两个物料在汇流点撞车。物料进入主带后要与前一个物料保持安全间距避免追尾。听起来挺简单但难点全藏在细节里。第一传感器信号有响应时间物料在皮带上有惯性挡停装置释放后物料不会瞬间到汇流点这个时间差如果处理不好就会导致两条线的物料同时进入主带。第二互锁不能只做在“放行”这一个动作上还要考虑物料已经越过等待区、但还没完全离开传感器检测范围时的状态否则程序会在一个物料还没走完的时候就重复放行造成连锁堵塞。第三也是最现实的问题很多初学者写的梯形图能“跑通”但只要物料间距稍微变一变或者两条线的节拍同时到达峰值程序就崩了。1.3 程序整体设计原则为什么“简单”反而更难写在做这个程序之前我给自己定了三条原则也建议你写任何PLC程序之前都问一遍自己这三个问题。第一逻辑必须能跟着扫描周期走。PLC程序是循环扫描执行的你在纸上画逻辑图的时候是一维的、理想化的但实际运行是每几个毫秒重新扫描一遍所有触点状态。如果程序里到处是跳转、循环嵌套、复杂的中间标志那你的程序在执行顺序上就很容易出问题。第二注释必须写到“别人看一行就懂一行”的程度。很多初学者有个坏习惯程序写完不写注释三个月后自己回头看都懵。梯形图本来就是给电气工程师看的不是给编译器看的。一套注释清晰的程序不仅是给别人看的更是给未来的自己看的。这套程序里我坚持每条网络Network都写明“这段在干什么、为什么这么写、触发条件是什么”。第三能用基础指令解决的就不要上复杂指令。汇流这种场景用常开常闭触点、线圈输出、置位复位、TON定时器最多再加个上升沿指令就能写得很漂亮。堆一堆功能块、数组、结构体看起来高大上但出了问题排查起来极其痛苦。简洁、可读、可靠这三者才是工业程序的真正“高级”。2. 硬件配置与I/O地址规划2.1 FactoryIO场景搭建与通信配置场景搭建这一步很多人觉得“不就是拖几个传送带进去吗”结果一上手就发现不是那么回事。FactoryIO里传送带的方向、位置、角度都需要精细调整。我用的汇流场景是直接选了软件内置的汇流Converging相关场景模板然后在此基础上微调了传送带长度和传感器位置。如果你用的FactoryIO版本里没有现成的汇流场景也可以自己搭。打开场景编辑器选两条直线传送带Conveyor一条主传送带把两条进料带的尾端对准主传送带的侧边让它们的运动方向都指向主带。这里有一个非常关键的点进料带与主带的夹角和位置决定了物料能否顺利交接。最常见的问题就是两条进料带和主带之间存在缝隙物料过不去卡在交接处仿真里表现为物料原地抖动或者直接穿透。通信配置方面我用的是TIA Portal S7-PLCSIM作为PLC仿真环境通过FactoryIO的S7通讯驱动与虚拟PLC连接。具体操作是在FactoryIO的“File”菜单里打开“Drivers”选择Siemens S7设置IP地址为PLCSIM实际使用的地址通常默认就行点击“Connect”。这里强烈建议先单独跑通一个最简单的启停程序验证通信再开始写汇流逻辑。我第一做的时候就是先写了“按一个按钮主线启动”的程序确认FactoryIO里的场景能被PLC信号驱动然后再开始写正式的汇流程序。这一步能帮你把“通信问题”和“程序问题”隔离开排查起来心里有底。2.2 I/O地址映射与传感器布置通信通了接着就是I/O地址规划。这一步我放在写程序之前做并且用一个表格把地址钉死后续写梯形图时严格按表引用绝不临时改地址。这是避免程序写到一半地址冲突的基础。下面是我这个实验程序的I/O分配方案信号名称PLC地址类型说明A线启动按钮I0.0数字量输入按下后系统启动A/B线同时运转停止/复位按钮I0.1数字量输入按下后所有输出停止并复位内部状态A线等待区光电传感器I0.2数字量输入A线物料到达汇流前等待点时置1B线等待区光电传感器I0.3数字量输入B线物料到达汇流前等待点时置1汇流区占用传感器I0.4数字量输入主带上有物料经过汇流点时置1A线输送带电机Q0.0数字量输出控制A线皮带运转/停止B线输送带电机Q0.1数字量输出控制B线皮带运转/停止主输送带电机Q0.2数字量输出主带常转除非急停注意看A线和B线的“放行”我没有用单独的挡停气缸输出而是直接通过控制对应输送带电机的启停来实现。这个方案在FactoryIO里最稳定因为你不需要额外配置夹具装置。物料到等待区后进料带停止物料就停在传感器位置等待汇流区允许放行时再启动该进料带物料就会被送往主带。传感器布置有个要点A线和B线的等待区传感器位置,不能离汇流点太近也不能太远。太近物料还没稳定停下来就触发容易误判太远程序放行后要等很久物料才到汇流区降低效率。我经过调参把等待区传感器放在离汇流点约一个物料直径的位置这样既能准确检测物料到位又能在放行后较快进入主带。汇流区占用传感器就安装在主带上位于两条进料带汇入点下游一点点保证它检测到的“占用”覆盖整个汇流区域。2.3 梯形图编程环境准备与任务分区TIA Portal里新建项目时CPU型号要和PLCSIM一致。我用的CPU 1214C DC/DC/DC这个型号IO点数够用指令也齐全。设置好IP地址后在程序块里新建一个OB1主组织块所有逻辑都写在OB1里。我这个程序比较简单不需要用OB100初始化或者OB35定时中断全部在一个主循环里搞定这也符合“简单清晰”的初衷。写程序之前我习惯先把任务分区列出来相当于给程序画个地图。这套程序我分成了四个块不是程序结构上的FC/FB而是逻辑上的段落系统启停逻辑处理启动、停止、复位动作决定整个系统是否处于运行状态。A线放行逻辑检测A线物料是否到位判断汇流区是否空闲决定A线皮带是否运转。B线放行逻辑与A线完全对称同时加入与A线之间的互锁。状态指示与辅助逻辑记录当前放行状态防止重复放行以及做一些边缘检测。这样的分区方式让我在写梯形图时思路很明确每段程序完成一件事。工厂里经验丰富的电气工程师看到这种程序一眼就知道这个作者是系统地想过问题的而不是想到哪写到哪。3. 梯形图核心逻辑设计与实操3.1 系统启停与复位逻辑所有动作的“总开关”先看最常见的启停逻辑。我用一个内部继电器M0.0作为系统运行标志。启动按钮I0.0按下后M0.0置位并自保持停止/复位按钮I0.1按下后M0.0复位同时所有输出全部复位所有内部状态标志全部清零。这里要特别说明为什么用置位复位指令SP和RP而不是用简单的线圈输出。如果用线圈输出启动按钮和停止按钮要按常规自锁方式接成“启动回路”这在逻辑上也行但一旦系统里出现急停、故障复位等复杂情况自锁回路很容易出现触点和线圈互相干扰的问题。用置位复位逻辑关系更明确后续做故障复位也更灵活。梯形图的网络结构大致是这样Network 1“系统启动”常开触点I0.0启动按钮串联常闭触点I0.1停止按钮后驱动置位线圈M0.0。意思就是按启动且没有按停止时把运行标志置位。Network 2“停止复位”常开触点I0.1直接驱动复位线圈M0.0。同时这个复位线圈还可以并联其他复位线圈把Q0.0、Q0.1、Q0.2以及M0.1、M0.2等所有中间状态全部复位。在编写复位逻辑时有一个容易忽略的细节把“Q0.0、Q0.1、Q0.2全部复位”这一动作放在停止按钮这个网络里还是单独用一个M0.1“急停中”标志这两种思路都行。我最终选择的方式是直接复位所有输出和状态不做急停标志因为这个实验场景比较单一不需要区分“急停”和“停止”两种状态。但如果你的场景里有多个工位建议还是用一个内部继电器来表示“系统整体停机”避免每次复位时到处都要改线圈。另外要特别提一下启动条件的互锁。我在这里用了一个常闭触点I0.1串联在启动回路里这保证了只有没按停止按钮时启动才有效。这个设计在工厂里叫“安全原则”任何状态下停止按钮的优先级永远高于启动按钮。即使在程序运行中意外按到了启动也不能把已经停止的系统重新拉起来除非先复位再按启动这样避免了误操作导致设备突然动作。3.2 汇流防冲突互锁逻辑两条线不能同时放行这是整个程序最核心的部分。汇流场景里最怕的就是A线和B线同时放行两个物料在汇流点撞车。所以必须有硬互锁。我用一个内部继电器M0.1来表示“A线当前正在放行”M0.2表示“B线当前正在放行”。这两个标志必须遵循一个铁律M0.1和M0.2在同一时刻只能有一个为1绝对不允许同时为1。先看A线的启动条件A线等待区光电传感器I0.2为1说明A线有物料在等且系统运行标志M0.0为1且汇流区占用传感器I0.4为0说明汇流点空着且B线不在放行中即M0.2为0。这四个条件串联在一起结果驱动A线放行标志M0.1的置位线圈同时驱动A线皮带电机Q0.0输出。这里要注意我用的是置位指令也就是一旦满足条件M0.1会被一直保持为1直到复位条件满足。同理B线的启动条件B线等待区光电传感器I0.3为1且M0.0为1且I0.4为0且A线不在放行中即M0.1为0。这就是互锁。A线的条件里串了B线的常闭触点M0.2B线的条件里串了A线的常闭触点M0.1。只要B线正在放行M0.2为1它的常闭触点就断开A线的放行条件永远不满足A线皮带电机会立即停止或者无法启动。反过来也一样。用梯形图画出来就是两个对称的网络看起来特别清爽。很多初学者在这里会犯一个错只用“汇流区占用传感器I0.4”来做互锁认为只要汇流区没物料就可以放行。这在两个物料同时到达、但都还没进入汇流区检测范围的情况下会出现什么结果A线和B线同时判断“汇流区空闲”同时放行两个物料同时冲进汇流区撞个正着。所以仅靠汇流区传感器互锁是不够的必须引入“放行中”标志的互锁把两条线在决策层面就隔离开。3.3 顺序放行与定时控制实现防止“释放过早”和“重复放行”光有互锁还不够还要处理“什么时候复位放行标志”的问题。如果物料已经被放行并离开了等待区传感器但汇流区还没检测到物料这时候程序告诉你“A线正在放行”是合理的因为物料正在路上。但如果物料已经过了汇流点I0.4从1变0了程序必须把M0.1复位否则A线会一直占着放行权B线永远没机会放料。所以A线放行标志的复位条件是什么我用的方案是当A线放行标志M0.1为1且汇流区传感器I0.4从0变成1即物料进入到汇流区检测范围后延迟一段时间再复位M0.1同时停止A线皮带电机。这里为什么要有延迟因为物料进入汇流区检测范围时它的尾部可能还在A线皮带上如果你立即把A线皮带电机停住物料的尾巴会被A线皮带拽住或者物料停在汇流点中间把主带堵住。所以需要让A线皮带再转一段时间确保物料完全离开A线、完全进入主带。这个时间我用TON定时器实现通常设置0.8到1.2秒具体数值取决于A线皮带速度和物料长度。我程序里用了两个定时器TON定时器T1A线放行后的“尾部脱离时间”A线放行条件满足M0.1置位同时启动这样一个定时器定时1秒。定时时间到说明尾部已经完整离开A线等待区此时如果物料已经到达汇流区就把M0.1复位并停止A线皮带电机Q0.0。TON定时器T2B线放行后的“尾部脱离时间”逻辑和A线完全对称定时也是1秒。用TON定时器的时候有一个容易出错的点定时器的触发条件。如果你把M0.1直接接到定时器使能端上那么只要M0.1为1定时器就一直计时。但问题在于M0.1从置位到复位可能持续好几秒甚至更长如果后面主带堵了物料一直没离开M0.1就要一直保持那定时器早就计到1秒了它会不停地输出1。这样会导致什么结果M0.1因为“定时时间到”条件复位然后因为汇流区还在占用A线又不会立刻再次放行那还好但如果你稍加改动把定时器输出用作了其他用途就会产生混乱。我最终的写法是TON定时器的使能端接的是“M0.1为1且I0.4为1”。也就是物料已经到达汇流区之后才开始计时1秒。这样更精准地模拟了“尾部脱离”的物理过程。当定时器输出为1时复位M0.1并让Q0.0停止。这个思路同样适用于B线。3.4 完整梯形图结构说明与注释规范把这套逻辑串起来完整梯形图从Network 1到Network 8总共8个网络结构如下Network功能使用指令注释重点1启动逻辑常开/常闭触点、置位说明启动条件、为什么串停止按钮常闭2停止/复位逻辑常开触点、复位线圈说明复位的范围包括输出和内部标志3A线放行条件判断常开/常闭触点、置位说明四个条件各自的作用重点强调与M0.2的互锁4A线放行执行与定时TON、常开触点、复位说明“尾部脱离”的物理过程定时器的由来5B线放行条件判断常开/常闭触点、置位与Network 3对称强调互锁的对称性6B线放行执行与定时TON、常开触点、复位与Network 4对称7主带电机控制常开触点、线圈主带一直运行但停止时也必须停8辅助状态记录常开触点、线圈记录A/B线当前是否有物料正在汇入方便监控注释我写得很细每条Network前面都有一段中文注释说明完整逻辑。比如Network 3的注释我会写“当A线等待区传感器检测到物料、系统在运行、汇流区空闲、且B线未在放行时置位A线放行标志同时启动A线皮带将物料送往汇流区。”写注释有几个技巧我分享一下。第一注释里写“为什么”而不是只写“是什么”。比如你写“I0.2为1”那别人不知道I0.2是什么但如果你写“A线等待区有物料”别人一眼就看懂了。第二关键条件用“且”“或”“非”这样的逻辑词写清楚这样即使不太会梯形图的人也能顺着注释读通程序。第三定时器的时间值要在注释里给出依据比如“1秒按A线皮带速度0.3m/s、物料长度0.15m计算得出”而不是模糊地写“延时”。4. 调试运行与常见问题排查4.1 仿真联调步骤与运行效果验证程序下载到PLCSIM后在FactoryIO里点运行就可以看到动态效果了。下面是我调试时的标准步骤建议你也按这个顺序来。第一步空载测试。不投料只在FactoryIO里启动场景点启动按钮确认A线、B线、主带三条皮带都转起来且方向正确。如果哪条带反转直接去梯形图里看输出线圈对应的Q点查通信映射别上来就改场景。第二步单线测试。只用A线投料放一个物料在A线入口看它到等待区后A线皮带是否停止物料是否稳定停在传感器位置。然后手动操作或者场景自动产生物料让物料触发等待区传感器此时A线皮带应该重新启动物料进入主带汇流区传感器亮起然后A线皮带延时1秒后停止。这一条线走通说明A线的顺序逻辑没问题。第三步B线单测。把A线的物料清空用同样的方式测B线确认对称逻辑没问题。第四步双线汇流测试。这是最关键的环节。同时在A线和B线放物料故意让它们同时到达等待区观察程序是否只放行其中一条线等该物料完全进入主带、A线放行标志复位后B线才开始放行。我调试时遇到的一个很典型的现象是两条线的物料几乎同时到达等待区程序也正确地只放行了A线但A线物料完全进入主带后B线却迟迟不放行像卡死了一样。后来一查问题出在B线放行条件的“等待区传感器”上。由于A线物料经过主带汇流点时物理上会遮挡住B线等待区传感器吗并不会但是B线物料在等待时可能刚好处于传感器检测范围的边缘信号不稳定导致程序里I0.3一会儿为1一会儿为0。当A线放行结束后B线的I0.3刚好是0B线以为没有物料自然就不放行了。这个问题怎么解决我在程序里把B线放行条件里的“B线等待区传感器I0.3为1”改成了用“置位保持”的方式处理。具体来说B线等待区传感器I0.3为1时置位一个内部继电器M0.3“B线有待放行物料”然后用M0.3代替I0.3作为放行条件只有当B线真正放行完成后才复位M0.3。这样即使传感器的瞬时信号抖动也不影响放行判定的连续性。这个调整虽然只改了几个触点但效果立竿见影双线汇流从此不再卡死。这个方案也推荐给你算是这套程序里最值钱的一个优化。4.2 常见问题速查表调试过程中我把遇到和预判到的典型问题整理成了一个速查表建议收藏备用。现象可能原因排查与解决方法物料到等待区后皮带不停等待区传感器信号没进PLC检查通信映射、I0.2地址是否配置正确在TIA里监控I0.2是否能变化两条线物料同时进主带互锁失效检查A线条件里是否串了M0.2常闭B线条件里是否串了M0.1常闭确认M0.1/M0.2没有同时为1B线永久不放行放行标志未复位检查B线放行标志M0.2的复位条件是否依赖I0.4上升沿检查传感器抖动导致的信号丢失物料在汇流点来回抖动皮带方向或位置不对在FactoryIO里检查进料带与主带的相对位置调整进料带速度启动后马上停止停止/复位按钮信号异常检查I0.1是否在PLCSIM中被强制为1查Network 2复位逻辑是否误触发定时时间到了物料还没走完定时器时间偏短测量物料从等待区到完全离开汇流点的实际时间把T1/T2时间加长通常1.5秒更保险4.3 踩坑经验与优化建议第一次跑这套程序时我把所有时间都调得很快想着反正是仿真速度快一点省时间。结果物料在汇流点上连环撞场面一度失控。后来我仔细一想仿真里的速度和真实产线是可以等比例映射的如果仿真里都跑不顺真机只会更严重。所以我最终把传送带速度调到接近真实产线的水平大概是0.2到0.4米/秒然后重新调定时器参数逻辑才变得和预期一致。这里要说一个重要经验仿真调程序一定要让速度接近真实场景不要因为“反正是仿真”就乱调参数。你调出来的定时器、互锁、放行时序最终是要落到真机上的参数差得太多逻辑看起来对但实际没法用。第二个优化是加一个“汇流区堵塞报警”。这个是我的扩展经验不一定每个人都需要但有了它调试时省了很多时间。在梯形图里加一个Network如果A线放行标志M0.1或B线放行标志M0.2为1且汇流区占用传感器I0.4在10秒内都没有变为0说明物料卡在汇流点了输出一个报警标志。你在PLCSIM里看到报警标志就可以直接定位到“汇流区堵料”而不是满世界去查传感器地址。工厂里这叫“设备自我诊断”是高级工程师和普通电工程序拉开差距的地方。第三个建议是在程序顶部用注释块写清楚版本信息、修改记录、适用场景。这套程序我已经改了三个版本每版都记录了改动原因。有一天你回过头来看老程序你会感谢自己当时写下的那几行版本说明。5. 扩展方向与学习建议场景本身很简单但它的扩展价值非常大。做完这套输送线汇流实验你会对PLC梯形图编程里的互锁、置位复位、定时器、顺序控制这几个核心概念有全新的认识。这些概念不是独立的它们组合在一起才形成了工业自动化的“骨架”。一个自然的扩展方向是把汇流逻辑升级为多线汇流比如把两条进料线变成四条或者加入滑道式优先权控制A线优先级高于B线和C线。这时候你仍然可以用M0.1、M0.2、M0.3这样的标志但互锁条件会越来越多钳位关系也会变得复杂。另一个方向是加入分拣逻辑比如在汇流前增加颜色传感器根据物料颜色决定它走哪条支线这就是把汇流和分拣结合起来了在电商物流系统里非常常见。如果你还想把这个实验做得更“工程化”可以引入报警灯、触摸屏控制变量、甚至用SCADA系统实时监控。不过这些往大处扩展了先把这个基础版吃透再往上加你会轻松很多。踩过这么多坑之后我的体会是写PLC程序最核心的能力不是背指令而是能把物理世界里的时序关系、安全关系用程序准确地翻译出来。FactoryIO这套仿真实验恰恰是训练这种翻译能力最好的方式。你可以在电脑前反复试错把“汇流防撞”这种工艺理解得透透的再上真机时就胸有成竹了。