资讯动态

PLC程序架构拆解:立库、码垛机器人、视觉与AGV如何联动

发布时间:2026/10/24 6:55:40 来源:尧图企业网站定制
干我们这一行的最怕听到一条线全包这四个字。前阵子刚调完一套项目立体库、码垛机器人、伺服定位、视觉引导、AGV搬运全串在一起主控用的是1200系列PLC。乍一看这台设备那台机器人程序又多又乱其实拆开来看就是一个交通系统加几台专机加两只眼的事。这篇文章就围绕这套系统的PLC程序展开讲清楚堆垛机定位、码垛机器人坐标生成、视觉对位补偿、AGV站台握手这几大块到底怎么写、怎么调、有哪些坑。做产线集成、想碰立库和AGV联动的朋友这篇对你应该有点用。1. 系统级程序架构先分块再谈联动1.1 这套系统由哪些角色组成一套完整的立库码垛AGV系统设备上至少包含四层最上层是WMS或调度系统负责该生产什么、该送哪一托中间是主控PLC也就是1200系列PLC负责调度所有设备按节拍动作底层是执行机构包括堆垛机、输送线、码垛机器人、伺服定位台、AGV以及地面安全设备。程序上如果把所有逻辑都塞进主PLC的OB1里那调试时基本是灾难因为改一个输送电机启停都可能把堆垛机的位置互锁搞乱。我在这个项目里就把程序拆成了五个功能域立库存储域、输送搬运域、码垛机器人工位、视觉检测工位、AGV站台对接域。每个功能域都有独立的数据块和状态字功能块之间只通过数据块里的交换区通信不直接调用对方的输出点。这么做的好处是单机调试时互不干扰联调时出了问题能按域定位不会出现动了甲、乙莫名其妙停了的情况。1.2 主循环与中断分配的思路基于这段时间的调试经验我建议主程序OB1只做三件事调用各功能域的周期扫描块、处理全局报警汇总、刷新状态到人机界面。时间中断OB10用来处理高速计数和视觉结果锁存。别小看这个划分码垛机在高速抓取时伺服定位和视觉拍照的结果必须在同一个周期内保持一致性如果用主循环里的扫描边沿去锁存一旦扫描周期抖动视觉坐标就会偶尔跳点。通信方面这套系统里PLC要同时跟机器人、视觉控制器、AGV调度系统、变频器、分布式IO打交道。我的做法是在PLC内部建一张通信映射表把所有第三方设备的状态字映射到同一片DB区。比如机器人的交互区从DB100开始视觉结果在DB200AGV状态在DB300。这样写梯形图时不用到处查从站地址直接看映射表就行。1.3 为什么通信映射表这么重要实际调试时最烦的就是查一个信号翻半天图纸。建好映射表后每条线的信号含义、地址、数据类型都固定下来。我在项目开工第一天就把这张表发给参与调试的几位同事后续不管谁都按这张表做点位核对。这是整个程序的地基地基歪了后面全歪。2. 堆垛机与输送线的程序核心细节2.1 堆垛机控制从货位表到轴运动堆垛机是立库最核心的执行设备通常是三轴行走、升降、货叉伸叉。运动方式常见有两种伺服绝对定位和变频编码器定位。我们项目里因为货架高度不高用的是变频加编码器方案行走轴靠编码器做位置闭环升降轴靠接近开关加编码器做粗定位。这种方案成本低但程序里必须处理好目标位置换算和轴安全互锁。程序里最重要的一张表是货位坐标表可以理解为一个数据块DB_HOME_POS条目号就是货位编号条目内容包含X坐标、Y坐标、Z坐标、载货状态、锁定标志。当上位系统给PLC下发入库到A区03列02排01层时PLC第一步不是让电机动而是先查表把货位号换算成三个轴的目标坐标。如果当前坐标和目标坐标在同一行程序会判断只需要升降不需要行走这样能省掉一次行走动作节拍能快不少。2.2 轴运动的步进控制逻辑堆垛机的动作顺序我一般写成步进字S_STEP0空闲、1行走中、2升降中、3伸叉、4取货、5缩叉、6升降回中、7行走回待机位。每一步的跳转条件都必须是上一动作已到位且允许。这些条件在梯形图里看起来很啰嗦但少一个就会出大问题。比如伸叉动作的允许条件里必须同时包含行走轴已到位和升降轴已到位而且货叉的伸叉命令只能用脉冲保持不能一直置位否则会顶到货架。调试中最常见的事故是手动操作时货叉还没完全缩回就启动行走结果货叉撞到货架立柱。为了防这个我在程序里加了一条全局互锁只要货叉不在缩回原位状态行走和升降的使能信号一律被切断。这条互锁放在最底层优先级高于任何手动自动切换信号。2.3 输送线辊筒逻辑状态机比自锁电路强输送线电机的梯形图很多老工程师习惯用启保停电路但多段输送线联在一起时自锁电路改起来非常痛苦。我在这套系统里全部改成条件触发的方式每个输送电机的运行条件是一个PLC地址BOOL这个地址由输送状态机统一刷新电机输出模块只做条件为真就运行、为假就停止。这样调整输送逻辑时你只需要改状态机不需要翻继电器回路。输送线上的货物移动程序里用光眼延时去跟踪。两个工位之间货物到达目标位后要停够稳定时间一般300到500ms再触发下一步动作否则惯性滑动会导致货物歪斜视觉拍照就难以识别。项目里初始参数设的是200ms实际测试发现抓取时偶发偏位后来改到400ms问题消失。3. 码垛机器人接口与垛型数据管理3.1 PLC和机器人之间到底交互什么码垛机器人一般有自己的控制器PLC不做机器人轨迹规划。PLC要处理的只是告诉机器人现在该用什么垛型、去哪个工位抓取、抓几次放几次。我们项目里PLC和机器人交互区有16个字第1字PLC到机器人的任务号比如101表示取箱放到托盘L1第2字PLC到机器人的垛型编号第3字PLC到机器人的抓取坐标偏移量X单位0.1mm第4字偏移量Y第5字偏移量R角度单位0.01度第6字PLC到机器人的指令字0无命令、1请求抓取、2请求码放、3请求复位第8字机器人到PLC的状态字0空闲、1运行中、2完成、3报警、4急停第9字机器人到PLC的当前循环次数3.2 握手协议的防误触发处理这里必须强调PLC给机器人发请求抓取信号时不能只发一个脉冲然后等机器人动作因为一旦机器人通信抖动或者快扫描周期错过这个脉冲整条线就停在那里。我的做法是请求信号保持置位机器人执行完动作后回一个完成PLC收到完成后才复位请求信号。这是最稳妥的握手方式也方便排查问题——看交互字就知道卡在哪一端。垛型数据的管理也要上心。码垛机器人内部的垛型不是PLC算出来的机器人厂家会在示教器里预定义好。PLC只负责把当前产品对应的垛型编号发给机器人。但节拍计算上PLC要自己知道每个垛型能码多少箱这样才能决定什么时候补托盘、什么时候请求AGV拉走满托。所以我建了另一个数据块DB_PALLET_TYPE每个垛型编号对应一行里面有额定箱数、当前箱数、满托标志位。当前箱数的累计由机器人完成信号去加1达到额定箱数时置位满托标志同时向AGV调度系统发送搬运请求。3.3 混合码垛里的等待子程序我们项目里偶尔会出现两种产品混码的情况这时候机器人程序里有一个等待PLC选择的子程序。PLC要做的不是把两种产品的坐标直接发给机器人而是根据当前进料口的产品类型把对应的垛型编号重新发一遍并重新触发请求信号。实际测试时这里出过一次问题两种产品快速切换时机器人上一个动作还没完成PLC已经刷新了垛型编号导致机器人用新垛型去码放了旧产品。解决方案是在PLC里加一个垛型锁定逻辑产品类型改变后必须先等机器人空闲再清空计数器最后更新垛型编号整个过程要半秒到一秒的间隔。4. 视觉定位与伺服轴的深度配合4.1 视觉系统到底在解决什么问题上了视觉工位不是为了高大上是因为箱体在输送线上停稳后的位置有偏差偏差来源包括输送链的累积公差、箱体本身尺寸公差、挡停机构的回弹量。视觉就是每次来料时拍一张照算出这个箱子相对于基准位置偏移了多少、旋转了多少然后把偏移量补偿给机器人抓取坐标。视觉系统输出的原始坐标是像素值程序里必须转换到机器人坐标系。标定环节是所有问题的核心。我们在现场用的是九点标定加角度校验把一块带圆孔的标定板放在机器人抓取平面上机器人末端走九个点位视觉拍九个圆孔PLC内部算出像素坐标到机器人坐标的仿射变换系数。标定时有两点容易忽略一是标定平面必须和实际抓取平面同高度否则X/Y补偿方向会漂二是标定板不能只放一个位置最好左上、中心、右下都试拍确认坐标变换矩阵在全视野范围内都收敛。4.2 视觉结果如何安全送到机器人视觉控制器算完偏移后会把结果写到PLC的DB_VISION区。PLC程序里要有拍照完成标志和数据有效标志两个信号调试时我吃过亏只看了完成信号没看有效信号结果视觉在漏检时给出一组全零数据机器人差点把箱子抓到半空。从那以后我要求视觉工程师把漏检状态也写到通信区0正常、1漏检、2未到位、3通信错误。PLC拿到结果后先判断状态字状态字不是0就直接进入异常处理流程——重新请求拍照或者报警停机绝不能让机器人带着假坐标动作。给机器人的偏移量也需要做一次限幅处理。正常偏差一般在±15mm以内超过这个范围大概率是箱子没放正或者视觉误检。我在程序里写死了偏移量上限X/Y超过±25mm按25mm处理并触发报警R角度超过±3度按3度处理。这样即使视觉有偶尔的异常读数也不会让机器人走飞。4.3 伺服轴的定位控制回零、扭矩与节拍伺服定位台是输送线和码垛机器人之间的转运手。整条输送线把箱子送到定位台伺服轴带着箱子精确移动到机器人抓取位置移动到位后挡停动作和侧向夹紧动作同时执行。伺服控制程序里有三个关键点第一绝对式还是增量式编码器。增量式系统断电后会丢失位置程序上电时必须强制回零。我们在程序里做了未回零标志位只要伺服驱动器报异常或者PLC重新上电这个标志就置位系统不允许进入自动模式直到操作员完成一次手动回零。安全回路里也串了这个标志防止回零没做就自动联动。第二扭矩限制。伺服定位台在夹紧箱子时如果直接以位置模式顶住箱子容易把箱子挤坏甚至把电机堵转。我在伺服驱动器的配置里加了扭矩限制位置到位后进入保持模式的扭矩设为额定扭矩的60%。这样既保证夹紧力又不会硬顶坏箱子。PLC程序侧不要频繁修改伺服的速度和加速度参数最好在驱动器里预先设好三组速度参数PLC只负责切换设定值组号。第三节拍计算。伺服定位台一个往复动作大概3秒视觉拍照加运算大概1.2秒。这两者可以并行箱子在定位台移动的过程中相机已经抓拍完成等箱子停稳后视觉结果也出来了PLC直接取结果发给机器人省掉拍照前的等待时间。我在程序里就是这样安排触发的定位台移动中段发预触发信号给视觉而不是等完全停止后再触发。这套组合下来整线节拍比原先快了两秒多。5. AGV对接与站台调度的编程关键点5.1 PLC在AGV系统里承担的角色很多人以为AGV调度是上位系统的事PLC只是给个信号让它走。实际上如果PLC接口设计不好AGV和输送线对接时会出现各种互相等待甚至撞车。这套系统里AGV调度系统负责全局路径规划和多车调度PLC负责站台级别的安全确认和任务节拍。两者之间通过TCP网口通信交换数据包括任务号、目标站台号、允许装货信号、允许卸货信号、当前站台状态、AGV到位反馈、任务完成确认。PLC里最核心的是站台状态机站台空闲、AGV预到、AGV到位锁定、输送线允许装载、装载完成释放、AGV离位。每个站台有一份状态字。当输送线码满一托PLC把站台状态切成空闲但有待运任务然后把任务号和站台号发送给调度系统。调度系统收到后分配一台空闲AGV去这个站台同时告诉PLC车辆已分配预计到达时间。PLC收到这个信息后就开始准备输送线减速、码垛机暂停补料、站台入口闸门打开。5.2 物理到位判别要比通信到位更可靠通信到位只是AGV说它到了物理到位要靠站台下面的地坑开关或者RFID读码器确认。我在程序里做的是双确认必须同时收到调度系统的到位指令和站台地坑开关的接通信号PLC才允许后续的装载动作。这样能防止通信延迟或漂移导致AGV还没停稳就提前放行。装载完成后的释放逻辑也要谨慎。AGV给出装载完成信号后PLC不能立刻复位站台状态而是要等AGV驶离、地坑开关断开后再复位。我在项目里加了个小延时确认AGV完全离开站台区域后才把站台标志切回空闲。不然调度系统会认为站台还是占用的后续任务就一直堵在那里。5.3 多站台排队与防搬空逻辑如果现场不止一个AGV站台站点分配不能靠调度系统单方面决定PLC侧要有排队表。我的排队表DB里每一行代表一个站台预约任务号、任务状态、小车编号、时间戳。调度系统下发任务前会先查询PLC的预约状态如果某个站台已经被占用但还没开始装载调度系统会把新任务派给另一个空闲站台而不是在同一个站台上排两辆车。这种设计简化了AGV的路径规划不会出现两台车在同一个站台前你等我我等你。防搬空逻辑也很重要。如果AGV驶入站台后输送线上没有货物程序要能判断出空任务然后给调度系统返回一个任务作废指令。我在PLC里做的是装载计数校验站台收到装载请求时比较输送线区段的光眼计数和任务单上的数量不一致就禁止AGV进入。这个校验在试运行阶段抓出过几次数据错乱相当实用。6. 程序调试与现场踩坑实录6.1 通信超时心跳位是救命稻草多设备联调阶段最容易出问题的就是通信。机器人控制器偶尔会重启、视觉控制器偶尔会死机AGV调度系统偶尔会断线重连。我给每台从站设备都做了一个心跳字设备每100ms翻转一次心跳位PLC在500ms内没收到翻转就置位对应的通信故障标志。程序里在自动模式下如果发现心跳超时除了报警还会自动把全线动作暂停防止设备在半失控状态下硬跑。这个心跳机制在排查故障时特别有用。有一次站台下方的AGV到了但PLC死活收不到到位信号查下来发现是通信线被叉车压断了PLC的心跳位已经翻红一下子就定位到的问题不用再去翻一堆IO点。6.2 视觉偶发读数为零状态字优于数据值前面讲过视觉的有效信号问题这里再补充一个排查案例。试运行有一周时间码垛机器人偶尔会停在取料位不动报警显示抓取坐标异常。排查发现视觉结果里X/Y坐标正常但角度R偶尔是0。原因不是相机问题而是视觉程序里初始化变量时没把角度值清零导致某次视觉处理内部异常时角度被当成0输出。后来在PLC侧加了角度变化率判断相邻两次拍照角度差超过1.5度就认为是无效数据重新拍照并报警。从那之后这个故障再没出现过。6.3 急停恢复后的重新回零伺服和堆垛机在急停恢复后都必须重新确认原点。我把重新回零合并成一条复位序列操作员按一次复位按钮PLC按顺序执行堆垛机回零、伺服定位台回零、码垛机器人回原点、AGV复位到待命区。这个序列每一步都有完成反馈全部完成后才允许重新启动自动模式。这条序列调试时要多加验证因为有次发现堆垛机升降轴回零后没把货叉缩回后续自动运行货叉直接撞上了货架横梁。6.4 联调时间必须留足最后说点经验层面的东西。整套系统的程序其实不是最难的部分最难的是把所有设备按一个节拍凑到一起。我一般把调试分成三轮第一轮单机手动验证每台设备的运动和安全互锁第二轮空车自动运行验证输送线、堆垛机、机器人之间的状态流转第三轮带料联动验证视觉补偿和AGV节拍。三轮都过了才敢让系统开始小批量生产。项目收尾时我还会把所有DB块的变量表导出一份连同通信映射表、货位坐标表一起整理成技术附件交给现场维护的人这套文档的价值比程序本身还大。做一个多设备联动的程序我的实际体会是程序里70%是互锁和状态切换20%是运动控制10%才是业务逻辑。只要把各设备的交互状态字和握手协议定得清清楚楚整套程序就能像齿轮一样咬合起来。码垛、视觉、AGV这些概念单独看都不算新奇但把它们拧在一个PLC框架里时细节全在接口里面。希望这篇拆解能帮到正被立库和AGV对接折磨的朋友调试顺利、少走弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑