干自动化这行十来年调试过的产线里托盘输送机算是最常见也最容易被低估的设备。锂电装配、汽车零部件、家电总装、仓储物流分拣到处都有它的身影。很多人觉得托盘输送机程序没技术含量无非就是让电机转让顶升台升让传感器给个信号。可真到了项目现场托盘卡死、顶升错位、信号误报、节拍跟不上一堆问题全冒出来。程序写得规不规范考虑得周不周全直接决定设备能不能稳定跑起来。这篇文章我就把托盘输送机程序那些事儿从需求拆解、程序框架、核心细节到调试排故系统梳理一遍。不管你是刚入行的电气小白还是被现场问题折磨过几次的调试工程师这篇内容应该能帮你少走不少弯路。1. 托盘输送机程序设计的思路拆解从需求到框架1.1 先搞清楚设备侧的基本盘写程序之前先得把输送机的机械结构和工艺需求摸透。托盘输送机在项目里通常分为几类辊筒式、链式、皮带式还有倍速链。结构不同控制逻辑也有差异。辊筒式适合重载靠摩擦传动托盘容易打滑链式带动力强定位相对稳但噪音大、成本高倍速链用在装配线多托盘在工位间节拍流转控制相对复杂。从功能模块看一台典型的托盘输送线一般包含输送段、停止定位机构、顶升移载机、旋转台、升降机、阻挡器以及各种指示灯和操作按钮。这些模块拆开看都不难但组合起来程序要处理的状态就多了。我个人接到一个托盘输送机项目时第一步不是打开博途或者GX Works而是拉一张流程图。先明确托盘在哪些工位停留每个工位做什么动作物料从哪来、往哪去哪一段需要积放哪一段需要精确定位。搞清楚这些程序架构自然就清楚了。1.2 程序需求拆解控制对象和数据流把设备侧搞明白以后再来看程序到底要解决什么问题。我从控制对象的角度拆解了一下托盘输送机程序主要管这三类东西第一是输送的执行机构就是电机和变频器。单段输送一般是异步电机加变频器控制启停也可以用接触器直接启停。速度要求不高的场合变频器主要用来软启动和调速。第二是定位和状态检测机构包括传感器、接近开关、编码器这些是所有联锁逻辑的来源。第三是通信设备要和上位机MES或者WCS系统交互接收任务指令反馈托盘码、工位状态和完成信号。程序的数据流说白了就是检测信号进来经过逻辑判断输出执行信号。但难点在于信号之间互相耦合比如A工位托盘到位了B工位还在加工这时候要不要放行如果挡住了后面输送机一直转会不会把托盘顶坏这些联锁逻辑才是程序的核心价值。1.3 主控选型与程序框架的对应关系托盘输送机的主控现在用得最多的是中小型PLC西门子S7-1200、S7-1500三菱FX5U、Q系列国产的汇川、信捷也占了很大份额。选型主要看IO点数、通信协议和现场使用习惯不是越贵越好。但无论用哪个平台程序框架都建议按模块化来组织。我习惯这样分手动控制模块单台设备独立动作方便检修调试。自动运行模块按工艺顺序自动运行包含各输送段联锁和分合流逻辑。报警处理模块传感器异常、通信故障、托盘堵料、急停复位等。数据交互模块与上位机、下游设备交换信号。这样分的好处是故障排查时不用在几百行程序里翻找。我有一次去现场处理问题上一位工程师把输送带启停逻辑写在OB1里面IO点注释又不全找了一下午才定位到一个传感器信号取反的问题。从那以后我写程序一定会把功能块分开注释写清楚。2. 托盘输送机程序的核心细节解析与实操要点2.1 传感器布局与信号采集的讲究托盘输送机程序的基础是信号信号不靠谱程序写得再花哨也一样报警。传感器这里有几个细节我重点说。传感器类型选择上到位检测最常用的是对射光电、反射光电和接近开关。对射光电最可靠发射端和接收端分开检测距离远不容易误触发缺点是安装要两侧对中。反射光电安装方便但对表面反光的托盘容易误报选型时要注意灵敏度调节。金属接近开关一般用来检测托盘上的感应块或者定位销不直接检测托盘本体。我现场调试时经常遇到一种情况托盘是深色的或者上面盖着反光的塑料膜反射光电一会儿有一会儿没。后来我总结了一个规律凡是托盘本体规格不统一、表面状态差异大的场合优先用对射光电或者接近开关少用反射光电。实在要用反射式必须做抗干扰处理比如调整灵敏度、加遮光罩、改检测方向。传感器的安装位置也要参与设计。前到位和后到位两个检测点之间的距离至少要大于托盘的停止精度要求。如果两个传感器的间距太近托盘速度又比较快PLC扫描周期跟不上就可能出现冲过位的情况。这时候要么把传感器间距拉开要么在程序里做输入滤波和延时处理。2.2 地址分配与数据组织的实战经验地址分配看似是小事实际影响编程效率和后期维护。我见过一些项目IO表打出来X点和Y点乱得像一团麻程序里到处是绝对地址注释还写的“手动”“自动”这种模糊字眼读起来非常痛苦。合理的地址分配我建议按功能区和机台号划分。比如X0-X31号工位传感器X4-X72号工位传感器Y0-Y31号工位输送电机Y4-Y72号工位输送电机M区中间状态和联锁标志位如果你用的是西门子S7-1200这种符号寻址为主的PLC建议直接在符号表里给每个IO起有意义的名字比如Sensor_TrayAtPos_01、Motor_ConvRun_01而不是用I0.0这种原始地址写满全程序。这样不仅程序可读性好出问题了别人接手也容易查。内存储区规划也一样。托盘输送机程序里经常有“工位忙/闲”“请求放行”“任务完成”这类状态位最好建立一个统一的内部位区不要东一个M100西一个M300到后面自己都记不住哪个是哪个。2.3 程序架构与PLC功能块划分关于程序架构我用得最多的做法是给每个输送段建一个功能块FB比如“单段输送控制”“顶升移载控制”“阻挡器控制”。每个FB内部有输入、输出、静态变量通过调用接口来做联锁。这样做的好处是不同段的逻辑相似只需要复制FB再分配不同背景数据块就行。以单段输送控制为例典型逻辑是这样的段内无报警、上游有放行请求、下游允许接收满足条件才运行。托盘到达段内目标位置后停止输送并给上游发“忙”信号。若下游工位空本段结束放行托盘进入下一段。把这些逻辑封装在FB里主程序调用时一眼就能看明白哪些段在跑、哪些段在等待。顶升移载机则建议用状态机的方式编写一个步骤一个状态的切换清晰又不容易出错。后文我会给出参考代码。2.4 手动、自动、报警三大模式如何配合托盘输送机的程序至少要包含手动、自动和报警处理三种模式。手动模式是设备调试和现场维护的保底手段自动模式是生产运行的主模式报警处理则贯穿始终。手动模式的控制逻辑简单但要注意安全。我一般会在手动模式下做“互锁保护”比如顶升台的升降和横移不允许同时动作输送电机运行时不允许手动操作阻挡器。原因很简单检修时如果旁路保护全开很容易发生托盘倾覆或者顶升台卡死的事故。自动模式的核心是联锁。输送段之间的联锁可以总结为“前段给、后段收”只有前段有托盘且后段空闲时前段才允许放行。这个联锁如果没做好托盘就会在输送线上挤成一堆轻则卡停重则把托盘上的工件顶歪。报警处理模块不能只做一个总报警灯最好把每类问题单独分出来比如“传感器信号异常”“顶升超时”“通信超时”“急停触发”“伺服报警”等每个报警类型对应一个独立的输出或HMI消息。这样现场操作工看到报警一眼就能判断问题在哪个环节而不是只知道设备停了还要逐个排查。3. 实操过程与关键环节实现从单段逻辑到联机调度3.1 单段输送和停止定位逻辑的实现思路托盘输送机最基础的程序段就是单段输送。拿一个典型的工位举例托盘从上一段进来经过一个停止定位机构停在作业位置工人或机器人完成作业然后托盘放行到下一段。这个逻辑用SCL语言描述大概是这样// 单段输送控制示意 IF #bAlarm THEN #bRunConveyor : FALSE; ELSIF #bModeAuto AND #bUpstreamRelease AND #bDownstreamReady THEN // 无报警、自动模式、上游放行、下游就绪 #bRunConveyor : TRUE; ELSE #bRunConveyor : FALSE; END_IF; // 托盘到位检测 IF #bTrayAtPos THEN #bRunConveyor : FALSE; #bTrayArrived : TRUE; #bRequestRelease : TRUE; END_IF;看着简单但里面有个细节容易踩坑“上游放行”这个信号到底是电平信号还是脉冲如果上游一直给放行电平而下游工位上已经有托盘没走输送机就会不停地把后面的托盘往前送最后在停止器前面堆好几层。所以我在设计时放行信号一般用“请求-应答”的方式上游给一个放行请求下游确认接收了上游才真正启动输送。停止定位机构一般有两种一种是靠阻挡气缸挡停程序上就是到位检测满足后气缸伸出托盘被挡在指定位置另一种是依靠变频器减速停车定位托盘到达减速点后减速到达停止点后停车。前者成本低、定位简单适合一般装配工位后者速度平稳适合对托盘停止冲击有要求的场景。3.2 顶升移载机的状态机控制实战顶升移载机是托盘输送线上故障率最高的设备之一。机械上的问题先不说程序上最容易出现的问题就是状态不明确顶升台升到一半停住了横移电机在动托盘卡在中间现场乱成一锅粥。为了避免这个问题我习惯用状态机的方式来编写顶升移载机的控制逻辑。一个完整的顶升移载流程包含以下几个状态等待托盘到位。托盘停止定位顶升台下降到位。顶升台上升把托盘抬离输送线。横移机构动作把托盘移到目标输送段上方。顶升台下降托盘落到目标段输送线上。横移机构回原位等待下一次动作。用结构化文本写一个简化的示意CASE #uiState OF 0: // 空闲等待 IF #bTrayAtPos AND #bLiftDown AND #bMoveHome THEN #bRequestLiftUp : TRUE; #uiState : 1; END_IF; 1: // 顶升台上升 IF #bLiftUp THEN #bRequestLiftUp : FALSE; #bRequestMove : TRUE; #uiState : 2; END_IF; 2: // 横移前进 IF #bMoveForwardDone THEN #bRequestMove : FALSE; #bRequestLiftDown : TRUE; #uiState : 3; END_IF; 3: // 顶升台下降 IF #bLiftDown AND #bTrayReleased THEN #bRequestLiftDown : FALSE; #bRequestMoveHome : TRUE; #uiState : 4; END_IF; 4: // 横移回原位 IF #bMoveHome THEN #bRequestMoveHome : FALSE; #uiState : 0; END_IF; END_CASE;状态机的好处是每一步都有明确的条件和输出一旦卡住了看当前状态就能知道是哪一步条件不满足。实际调试时我还会在状态机里加一个“超时监视”比如顶升上升动作超过5秒还没到位直接报警停机防止气缸卡滞导致电机长期堵转烧掉。3.3 节拍与速度匹配的计算方法托盘输送机程序不仅要保证功能正常还要满足节拍。节拍算不准程序跑得再稳产线产能也上不去。举一个实例。假设一条装配线托盘长度1.2米相邻工位间距3米输送速度12米/分钟每个工位的装配动作是35秒。那么一个托盘从进入某个工位段到完全离开这个工位段需要走行的距离是4.2米托盘长加间距时间就是4.2/120.35分钟也就是21秒。装配动作35秒大于21秒所以瓶颈在装配工位输送线上不会出现托盘堆积。但如果装配动作缩短到15秒输送段走行21秒就变成瓶颈了托盘会卡在工位前面导致后面的托盘连续积压。这时候程序上能做的调整是提高输送速度把走行时间压到15秒以内或者优化联锁逻辑让托盘提前启动在前一个托盘离开时就占位而不是等它完全离开才启动。速度调整时还要考虑托盘的停止精度。速度越快停止惯性越大如果停止定位机构是变频器减速停车刹车距离就会变长容易冲出定位点。所以提高速度不能只看节拍还要和机械制动能力匹配起来。3.4 联机通信与上位机调度的信号约定托盘输送机不是孤立设备它要接入整个产线的控制系统。小的项目用硬接点信号大的项目走Profinet、EtherCAT或者Modbus TCP通信。这里涉及两个层面的问题PLC之间的联锁通信以及PLC与上位机调度系统的数据交互。PLC之间的联锁信号点一般约定为“放行请求”“已接收”“工位忙”“暂停放行”“故障”“急停”这几个。需要注意的是跨设备的联锁信号一定要用上升沿触发不能用电平触发避免通信扫描周期不同步导致误动作。另外通信故障时程序要有一个明确的处理策略我一般默认“通信断开即停机”而不是保持最后一次状态继续运行避免两个设备各干各的最后撞在一起。PLC与WCS/MES系统的交互要点是数据定义要统一。我调试过一个项目上位机给PLC发送一个16位的整数表示目标工位号PLC这边用数组映射工位结果上位机工程师把工位号从0开始编PLC这边从1开始编实际执行的时候所有托盘的目标工位全偏了一位整个线跑了十分钟才发现。从那以后我接到联机项目第一件事就是跟通信双方确认数据字典工位号、托盘号、命令码、完成码全部列清楚再写程序。4. 调试实录常见问题与排查技巧4.1 托盘堵料误报和传感器误触发托盘输送机现场最常见的故障就是“堵料报警”——实际托盘没堵但传感器误触发了。这个我处理过无数遍原因五花八门。最常见的是强光干扰。车间顶灯、窗外阳光直射对射光电的接收端导致传感器短暂复位PLC误认为托盘不在位后续托盘继续输送就报了堵料。解决办法有两个一个是换用带遮光罩的传感器支架另一个是在程序中给到位信号加延时确认比如信号必须稳定保持100毫秒才认为有效这样可以过滤掉大部分光干扰脉冲。反光误触发的坑也很多。托盘上沾了油污或者贴了标签反射光电就会把标签当成托盘导致托盘还没到指定位置程序就认为它到位了。我建议在这种场合传感器选型就避开反射式改用对射式或者接近开关。实在要用反射式务必现场实测不同托盘表面状态下的信号余量。4.2 托盘定位跑偏的机械与程序双重排查托盘定位不准确表现为两种情况一种是每放一个托盘位置偏差都差不多方向也一致另一种是偏差随机忽前忽后。第一种情况多数是机械问题比如停止定位块的安装位置偏了或者阻挡气缸的缓冲行程调整不当。这种情况不要先动程序参数先拿尺子量机械定位尺寸把机械基准找正了再试程序。第二种情况多数和托盘在输送过程中的打滑有关。辊筒输送机靠摩擦传动托盘底部和辊筒之间有油污货物偏心或者输送加速度太快都会造成托盘走过头或者差一点到。程序上的对策是在到达停止点之前先让变频器进入低速爬行状态用低速完成最后的定位。这个低速值一般调到2-3米/分钟太小会影响节拍太大力又停不准需要现场反复试验。4.3 通信干扰与总线异常的处理记录托盘输送线的通信问题最典型的特征是“时好时坏”。设备运行一段时间后PLC报通信超时复位一下又能跑一阵过会儿又断。这种问题光靠程序解决不了必须从硬件上找原因。我自己总结的排查顺序是先看网线和总线电缆的走线路径是不是和动力电缆捆在一起了。通信线必须和动力线分开走距离保持20厘米以上。检查屏蔽层的接地。屏蔽层要单端接地一般是PLC侧接地。两头都接地容易产生地环流反而干扰更大。检查通信接头的做工整个网络里有一个端子没压紧整条线都会断断续续。如果以上都正常再在程序里加通信超时重连逻辑并做报警提示。有一次我排查一个Profinet网络闪断问题查了一天最后发现是一台变频器的接地线接触不良造成了共模干扰。把接地螺丝拧紧之后问题就消失了。通信类的故障很多时候是机械安装问题不是程序问题。4.4 现场安全与急停复位逻辑的设计安全逻辑是托盘输送机程序不能妥协的部分。急停、安全门、光幕这些信号一定要硬接线到安全回路不能只依赖PLC程序。急停触发后所有执行机构必须立即停止并且要保持停止状态直到复位操作完成。这里有一个细节急停复位后程序不能自动恢复自动运行必须让操作人员手动把设备恢复到安全状态再切回自动模式。比如顶升台急停时正升到一半复位后位置不确定这时候直接进入自动项升台可能带着托盘乱动。我的做法是急停复位后强制进入手动模式操作员先手动把设备复位到安全状态确认所有执行机构都在原位然后才能切自动。光幕和安全门也一样触发后自动模式要退出等安全条件恢复后重新手动启动。安全逻辑宁可设计得繁琐一点出事了就是大事。4.5 常见问题速查表故障现象可能原因排查顺序堵料误报传感器光干扰、表面反光、传感器松动先看信号灯再查安装最后调滤波托盘定位不准机械定位偏移、托盘打滑、速度过快先量机械再试低速爬行通信闪断走线干扰、屏蔽接地不良、接头松先查工装再查接地最后查程序顶升卡滞气缸气压不足、横移不到位联锁先查气压和机械再查状态机程序自动运行不启动安全条件不满足、联锁信号未复位检查急停、光幕、上游放行信号托盘在输送段上停不住变频器停车减速时间设置太长调整减速时间加停止定位机构5. 程序规范的积累模块化组件库的建立托盘输送机项目做多了以后我慢慢积累了一套自己的标准程序块。比如单段输送FB、顶升移载FB、阻挡器FB、积放控制FB这些块在不同项目里反复用只改接口参数和IO映射就能很快适配新设备。这样做的好处很明显一是编程效率高同样的功能不用写第二遍二是程序质量稳定以前踩过的坑已经在标准块里规避掉了。比如我的单段输送FB里默认就带了“到位确认延时”和“通信超时停机”逻辑即使别人拿去用也不会把这两个环节漏掉。标准块也不是一次成型每个项目都会暴露新问题我会把现场遇到的典型故障和解决方案回填到标准程序里。这也是为什么我建议程序工程师一定要跟设备调试只有现场踩过坑写出来的程序才有生命力。这个内容后续还可以扩展比如把输送段的控制逻辑做成参数化配置工具输入几个参数自动生成PLC程序或者把上位机调度逻辑和PLC联锁逻辑的对接做成标准接口文档减少每个项目都要重新沟通数据字典的麻烦。都是很实际的方向。