搞自动化这些年跟托盘输送机打了无数次交道。每次有人问我在做什么我常回一句就是给一堆辊筒、链条、电机写“怎么走、什么时候停、撞了怎么办”的程序。听上去不难可真把一条输送线跑顺让托盘不堵、不撞、不叠盘、不掉线里面门道不少。这篇就把托盘输送机程序从需求拆解、硬件选型、核心逻辑到现场调试、故障排查完整过一遍给准备入行物流自动化或者正在折腾类似项目的朋友一个参考。无论你是刚开始接触堆垛机、穿梭车配合的立体库输送系统还是做生产线联线改造只要程序里牵扯到托盘搬送这篇文章都适合你。我会尽量少用教科书语言多讲实际怎么想、怎么写、怎么调。1. 先搞清楚托盘输送机到底要干哪些活1.1 输送机在物流系统里的角色托盘输送机不是一台独立设备它更像物流系统里的“血管”。立体库里的堆垛机负责把托盘送进库位但托盘怎么从入库口到堆垛机面前怎么从堆垛机手里接出来再送到出库口靠的全是输送机。也就是说程序的核心不是“让电机转”而是协调各段输送机、配合上下游设备完成托盘的有序流动。很多新手容易犯一个错一上来就盯着单段输送机的正反转写把每段设备当成独立小项目写。结果单段都是好的联机一跑就出问题——不是因为动作逻辑写错了而是段与段之间的交接时序、互锁关系、异常处理没考虑。托盘输送机程序真正难的地方恰恰在这层“协调逻辑”上。我在项目里一般把输送任务拆成几类直行输送、积放等待、分流合流、顶升平移、顶升旋转、拆叠盘、称重剔除。每个动作看似简单但叠加起来程序的结构设计就决定了后期调试和运维的难度。1.2 程序要管的“动作清单”列个清单方便对应到代码上输送动作电机正转把托盘往前送反转做退回或双向输送。停止定位托盘到指定位置后准确停下靠光电或接近开关触发减速、停止。积放后面的托盘在前一个托盘后保持安全间距停下等前面放行再走。常见于辊筒线和链条线避免连环碰撞。分合流两条来料线汇成一条或者一条线分到两条需要互斥、排队、优先逻辑。顶升平移把托盘从一条线垂直搬到另一条线码垛机、拆垛机、RGV接驳口很常见。顶升旋转把托盘旋转90度或者180度配合货物朝向要求。拆叠盘空托盘垛逐层拆下、单盘放行或者反向叠盘。靠光电、升降台高度检测、夹爪配合。与上位机交互接收任务指令托盘号、去几号口上报完成信息。这层通信往往用报文或者DB块通信口和输送逻辑最好分开写。这些需求列出来之后再去做IO表、程序框架、报警设计思路会清晰很多。我见过很多人拿到需求就开写结果写着写着发现漏了“空托盘补给的联锁”“叉车取货时的安全停位”回头改结构费时费力。2. 程序框架从硬件选型到地址规划2.1 控制架构怎么搭为什么这样搭托盘输送机控制系统一般用PLC做主站需要通过总线带远程IO。我见过用一体机直接点对点接线的也有线一多、距离一远调试时查线能查到崩溃。只要输送机数量超过10台或者分布长度超过30米就老老实实上总线主站PLC放电控柜。每段输送机就近放远程IO模块或小型从站。现场传感器、电机接触器、变频器全部接到就近IO模块。总线介质一般用网线或者光纤按现场环境选。为什么这么搭第一接线量大幅减少。第二故障定位快。某一段没信号直接看从站状态就能锁定范围不用抱着一把螺丝刀在线槽里翻线。第三扩展性好后期加一段输送机硬件上就近加模块、程序里加段号就行。需要注意总线接线的工艺决定了稳定性网线水晶头压不好、屏蔽层没接地现场干扰会给你上一课。我遇到过输送机跑着跑着某一排传感器集体闪烁查了半天下雨导致端子箱进水所以现场防护等级、端子密封、线缆固定这些“非程序”的事一样要认真管。2.2 传感器布局和托盘识别方案托盘输送机上用得最多的是对射光电、反射光电、接近开关和编码器。光电不同功能叫法也不一样就位检测托盘到设备中心或某个关键位置。满位检测某个工位上有托盘防止后续托盘顶进来。通过检测托盘经过时计数或者超时判断用。拆叠盘检测检测托盘层数、托盘是否分离常用光电配合升降编码器。传感器布局上有个基本原则能做“位置闭环”就别靠时间估算。比如顶升台上升到位光靠“电机转了3秒”不可靠必须用行程开关或者接近开关确认实际到位信号。输送机定位也一样最好有两个光电一个提前减速、一个最终停止避免托盘惯性冲过头。托盘识别方案要看现场要不要自动追踪货物。简单场合用光电计数、靠任务顺序排队系统简单但对账靠外部MES或WMS。要精确追溯托盘号和货物信息时用RFID读写器或者条码扫描器。RFID不怕油污、不怕遮挡适合长期重复使用条码便宜但纸质标签在粉尘大、摩擦多的环境容易磨损我做过一条线条码读不到导致托盘反复退回人工处理后来统一换RFID才消停。2.3 IO清单与地址表规划程序写得好不好很大程度看IO表理得顺不顺。我的习惯是每个设备单元按“段”建地址区间不要东一个西一个。比如段号功能说明输入点示例输出点示例CV-01入库输送机1段原点光电、满位光电、变频故障、手动/自动电机正转、电机反转、报警灯CV-02入库输送机2段原点光电、满位光电、到位光电电机正转、电机反转IL-01顶升平移台上到位接近、下到位接近、有托盘检测顶升上升、顶升下降、电机正转、反转DP-01拆叠盘机各层光电、叉臂前位/后位、升降编码器升降上升/下降、夹紧/松开、输送正转RT-01旋转台旋转0度检测、旋转90度检测、托盘到位旋转电机正转/反转、输送正转内部地址规划时我习惯按功能分块输入镜像区统一读取现场IO之后程序里只使用标签变量。输出镜像区逻辑只写“电机正转请求”最后统一映射到物理输出。运行状态区每段设备的运行模式手动/自动/维护、当前状态等待/运行/故障。任务数据区托盘号、目标地址、当前地址、任务状态。报警区每条报警有自己的编号、触发条件、是否可自动复位。这个习惯看着平平无奇但后期查问题速度完全不是一个级别。大量设备同时动作时通过状态区变量就能瞬时看出谁在等谁、谁卡住了不用拿万用表对着接线端子捅。3. 核心逻辑设计状态机与关键互锁3.1 用状态机管理每段输送机托盘输送机程序从逻辑层面看最适合用“状态机”来管理每段设备的状态。每一段输送机我习惯定义这些状态空闲IDLE没有托盘任务电机可以停着。请求进料REQUEST上位机或前段设备告知有托盘要进来本段做好接收准备。接收中RECEIVING托盘正在进入本段判断是否到位。已就位READY托盘在本段停留等待下一步指令。输送中SENDING托盘正在离开本段向后段移交。故障FAULT检测异常停止动作等人工处理。写成状态机的好处是逻辑不会乱。比如“接收中”状态里只有托盘到位信号从不亮变成亮之后才能进入“已就位”。这样就避免光电抖动造成误判。处理光电信号的典型做法是加滤波时间和连续确认次数比如信号持续50毫秒以上才算有效现场干扰严重时可以适当加长。每段设备的状态机做好之后整线就是把相邻两段的状态做握手。后段空闲时前段才能放行。后段正在接收时前段继续等待不能硬推。这种“握手交接”比单纯看到前段有托盘就启动要可靠得多。3.2 积放与防撞逻辑积放是输送机程序里最常见、也最容易被人忽略的功能。说白了就是让托盘一段一段排队中间保持距离。积放逻辑处理不好会出现两种典型故障一种是后托盘直接怼上前托盘造成托盘变形或货物跌落另一种是积放后托盘一直顶着前托盘导致前托盘想走也走不了。我的做法是在每段输送机上规划两个关键检测点——前段末端光电和后段起始光电。后段有托盘且未放行时前段电机不能启动。等后段把托盘送走并确认离开后前段接到“放行命令”再启动。这里面必须有“离开确认”不能只看电机转了就算完成光电信号要落到实处。积放压力的物理问题也要程序配合。链条输送机或辊筒输送机如果采用连续运行方式后面托盘一直顶着前面托盘电机负载和托盘摩擦力都会变大。程序上我会安排“节拍放行”比如前面前面的托盘走出一个车身位后后一个才起步而不是等前一个完全走完再动这样能提高效率又不至于追尾。关于防撞除了积放距离还要考虑“禁止同向双启动”。如果一条直线上存在多个驱动段程序要保证任何时刻只有相邻的前段在给托盘提供动力不能让几个驱动段同时推一个托盘否则各段速度不一致会造成卡滞、跑偏甚至托盘侧翻。这个逻辑我在每条线都会专门写不能省。3.3 叠盘、拆盘、顶升转位的细节拆叠盘机和顶升转位台是事故重灾区程序上要特别小心。拆盘最核心的问题是判断“这一层真的被拆下来了”。光电装在侧向当升降台带着上层托盘上升或者下降时光电反映的是层与层之间的缝隙变化。如果光电位置不对或者升降速度和判断时序不对会出现多拆一层、少拆一层的情况。我的做法是拆盘时用编码器跟踪升降高度光电触发只作为辅助判断两个信号互相印证。比如正常拆一层升降高度应该变化某个量光电应该出现一次“通→断→通”的变化两个条件凑齐才算拆盘成功。叠盘则相反难点在于防止“盘子没对准就砸下来”。程序上要等托盘完全停到位、两侧定位导向确认、升降台上托盘没有歪斜信号后才允许升降动作。上升到高位后还要检查顶层光电是否稳定确认托盘真的叠上了才允许下一个托盘进来。顶升转位台看着不复杂托盘到位、顶升、旋转、到位、落下。实际写代码时旋转原点、旋转到位、顶升上下限位缺一不可。特别是旋转电机停止时如果没做减速斜坡托盘上的货物会因为惯性移位。程序上我会给旋转台加“预减速”逻辑目标角度还剩几度时先降到低速等真正到位信号再停止减少冲击。3.4 调度与分合流的协调分合流是单机上最复杂的调度场景。两条线汇成一条如果两条线同时放托盘合流处就会撞。常规做法是“先到先过”“方向互锁”以合流点前的一个光电为准哪边的托盘先进入等待区就放哪边。放行A方向时B方向的等待区锁定不允许电机启动。A方向托盘通过合流点并离开足够距离后再解除B方向锁定。这个逻辑不是简单互锁还要加超时保护。万一A方向托盘走到一半卡住B方向一直等就会把整线堵死。所以每个方向等待时间超时后要报警让人工介入。高流量的合流点为了提升效率我会加二级缓存区B方向的中间段可以作为临时缓存先预放一个托盘到离合流点比较近的位置等A方向一离开就立刻顶上减少等待间隙。分流逻辑相对简单根据任务目标地址托盘到分流点前判断左边还是右边然后摆好挡停器或换向机构再放行。麻烦的是目标地址判断错所以分流前必须有准确的托盘识别。如果是靠任务序列做跟踪那么在分流前任何一个环节的补料、人工搬走、读码失败都会导致后续跟踪错位。这种场景我强烈建议用RFID或者条码在分流点前做二次确认别的都不可靠。4. 实操步骤从写代码到现场调试4.1 程序骨架与ST代码示例实际编程我不建议全用梯形图硬写大规模输送线。梯形图适合单点逻辑展示状态机和复杂数据处理用结构化文本ST更清晰。主流PLC都支持ST下面给一段简化的“单段输送机接收托盘”逻辑示例展示状态机的代码形态。// 单段输送机 CV01 状态机示例 CASE state_CV01 OF IDLE: // 前段有托盘要来并且本段没有故障 IF sensor_front_tray AND NOT fault_active THEN state_CV01 : RECEIVING; motor_fwd_request : TRUE; END_IF; RECEIVING: // 托盘到达本段停止位 IF sensor_at_pos THEN motor_fwd_request : FALSE; state_CV01 : READY; END_IF; // 超时保护如果一直不到位报警 IF receive_timeout THEN fault_code : 101; state_CV01 : FAULT; END_IF; READY: // 后段空闲且上位机放行才允许送出 IF next_seg_ready AND release_cmd THEN motor_fwd_request : TRUE; state_CV01 : SENDING; END_IF; SENDING: // 托盘离开本段检测到离开信号后停止 IF NOT sensor_at_pos AND sensor_exit THEN motor_fwd_request : FALSE; state_CV01 : IDLE; END_IF; FAULT: // 故障状态必须有复位信号才能恢复 IF reset_cmd AND NOT fault_active THEN state_CV01 : IDLE; END_IF; END_CASE;注意这段是骨架实际项目里要加密封信号、手动自动切换、互锁条件等。变量命名我习惯统一前缀sensor_表示输入、motor_表示输出、state_表示状态、fault_表示故障后期程序和HMI对标签时省很多事。程序结构上我一般分成几个任务或功能块模式管理块自动/手动/维护模式的切换和权限。输送段功能块每段一个实例化功能块内部封装状态机。特殊设备块拆叠盘、顶升旋转、升降台单独写。调度块负责放行指令、分合流互斥、任务排队。报警块集中采集各功能块故障统一上报HMI和上位机。通信块和上位机、堆垛机、AGV等设备进行报文交换。这个结构最大的优点的是“一把尺子量到底”所有输送段共用同一个功能块改逻辑只改一处全线的段都生效。现场要调整某段的减速距离调参数就行不用翻梯形图。4.2 参数设定和调试工具把逻辑写好只是第一步参数标定才是工程师真正的修罗场。主要参数有几类速度参数电机高速值、低速值、加减速时间。位置参数减速光电到停止位的距离、顶升到位的判断高度。时间参数到位稳定时间、积放等待超时、旋转定位超时。计数参数拆盘层数、积放队列长度。速度参数的设定有个经验公式可以参考托盘停止距离 当前位置到停止位的剩余距离程序按这个距离给减速指令。实际线上运行速度不高还好速度一快就要考虑过冲量。我的标定方法是先跑低速逐步加速每个速度档都测一次从减速光电到完全停止的距离回写到参数里顺便留出20%到30%的余量。调试工具方面PLC的在线监视功能必不可少。我调试时常用三件事在线改状态变量手动强制输出确认每个IO点正确。用趋势图记录光电信号和电机指令的变化判断时序是否合理。用断点或者单步执行针对某个状态机的异常分支做定位。现场如果没有上位机画面HMI上也要做两个关键页面一个是设备状态总览页每个输送段用色块显示当前状态堵料、故障一目了然另一个是点动操作页方便维护人员单动电机、顶升、旋转干起活来快很多。4.3 仿真、单动、联动三步走直接上车试线是新手常见的玩法风险高、效率低。我每次都是三步走第一步仿真。现在的PLC编程软件基本都支持仿真把程序下载到虚拟PLC里用模拟信号把流程跑一遍。仿真阶段主要查逻辑分支有没有漏、状态机会不会死锁。虽然传感器信号是模拟的但状态迁移的完整性基本能在仿真阶段发现。第二步单动调试。把设备切到手动模式逐个动作测试。每台电机正反转、每个顶升升降、每把夹爪开合都要单独核对。单动这一步也是核对IO点接线的最后机会接线错了在单动阶段就能暴露。第三步联动调试也就是自动跑流程。先不放真实托盘用人工触发信号模拟托盘到来确认程序按预期流转再放空托盘慢速跑最后带载跑。这里我强烈建议从最小流程跑起比如“入库→输送→出库”先跑通再逐步加入分流、合流、拆码垛、旋转这些特殊设备。不要一上来全线自动出问题根本不知道从哪里查。联动阶段最花时间的是节拍调整。输送线跑得顺不顺取决于积放放行时机、减速点位置、特殊设备交接时间。这些没有统一公式基本靠现场一遍遍调调一两个小时都是常事。调好了之后把参数固化下来备份程序防止现场被谁改了参数找不回原因。5. 常见问题与排查技巧实录5.1 现场高频故障和排查表托盘输送线跑起来之后问题基本都是重复出现的。我整理一份现场高频故障对照表每一条都是实际踩过的现象可能原因排查方向处理建议托盘送到位还不停停止光电被遮挡、减速过冲太大、光电信号被干扰看IO状态和趋势图清洗光电减速点后移加滤波时间托盘卡在交接处两段输送机高度差不一致、交接间隙过大、速度不同步量两端辊筒高度差检查水平调整机械安装统一交接时速度积放不释放后段“离开确认”信号没消失、放行条件被别段占用查看后段状态机和放行链优化放行条件加超时释放拆盘多拆一层光电位置判断错误、升降高度和光电时序不匹配录一段拆盘过程的传感器时序用编码器高度做辅助判断重新标定旋转台冲过头制动电阻不够、减速时间太短、旋转到位信号延迟查变频器/伺服参数增加预减速距离加装机械缓冲托盘跑偏掉线侧向导条磨损、辊筒老化、输送线水平超差检查导向条和水平度修复机械程序上加边界光电保护排查时我有个原则先看硬件状态再查逻辑。很多程序“背锅”的故障最后查出来是光电没对好、电机刹车打不开、机械卡阻。用在线监视看IO点就能分辨别急着改程序。5.2 几个印象深刻的调试案例讲一个合流撞车案例。甲方反馈合流处偶尔撞托盘比例不高但很顽固。查程序发现互锁逻辑本身没问题但互锁条件是“后段托盘没有进入等待区”。由于两个方向的光电位置不对称某方向托盘在某个位置时互锁条件的扫描时机出现了间隙导致两边同时放行。后来我在合流逻辑里增加了“任何方向正在输送时另一方向强制锁定且锁定信号必须保持到托盘完全离开”彻底解决。这个案例让我养成了一个习惯带托盘位置信息的互锁永远用“进入后保持”的逻辑不要用“瞬时电平”判断。还有一个叠盘误判案例。叠盘机经常报“叠盘失败”现场去看托盘明明叠上了。原因是对射光电在叠盘完成后由于托盘之间缝隙太小光电信号一直不稳定程序在极短的瞬间误判为失败。后来把判定条件改成“上升到位后延时2秒再读取光电且连续读取5次都没有变化才算稳定”再没误报过。类似问题在拆盘机上也会有凡是和光电抖动相关的判定都要加稳定时间和连续确认。最后一件事程序里每一条报警都不要只是“报警”两个字。报警文本要写清楚是哪个段、哪个动作超时、哪个传感器没到位最好还要给维护人员提示排查方向。现场维护的人不是写程序的人报警信息不够具体再好的判断逻辑也会被当成“破系统”。一条好报警能省掉半夜从家往现场跑的一个电话。6. 给新接触托盘输送机程序的同行几句实在话想把这行做好除了会写状态机、会调参数更重要的是对现场物理过程的理解。托盘多大、多重、启停的惯性、光电装在哪个高度、输送机间隙有多大这些机械和工艺细节决定了程序逻辑怎么写。代码是死的现场是活的多蹲在现场看几次托盘跑动比多读几遍手册管用得多。调试中还有一个容易忽略的点备份程序和参数。每次调好一版就完整备份一次标注好日期和改动内容。我见过调试后期参数被改乱翻遍电脑找不到初始版本最后只能靠记忆重调白白搭进去一整天。好记性不如烂笔头这个道理在自动化调试上体现得淋漓尽致。
阅读完成 · 觉得有帮助?