简介:立体仓库PLC程序示例包面向国赛备赛选手与自动化工程师,以西门子1200PLC为核心,结合博图编程环境,涵盖机器人MODBUS TCP通信、信捷视觉识别以及V90三轴伺服驱动的协同控制逻辑。压缩包共45个文件,以xml配置、hsf程序块、gd设备描述和日志索引等类型为主,整体约19.88MB,便于对照学习PLC架构与通信参数设置。已有1179人学习浏览。内含“国赛设备PLC示例程序V2.4.2”全套工程文件,可帮助读者从PLC逻辑、伺服定位到视觉引导逐步拆解,理解立体仓库自动化流程和排错思路,为竞赛备赛或项目实训提供可运行参考。 如果你在备战国赛的现代物流与自动化方向,大概率绕不开立体仓库这个项目。实话讲,每年赛场上PLC程序的故障五花八门,但真正导致大面积丢分的,往往不是某个指令不会用,而是对整个立体仓库的控制流程没有形成体系。这篇文章我就从“一个反复带赛、也被设备折磨过的人”的角度,把立体仓库PLC程序从架构设计到现场调试的完整思路捋一遍,适合正在备赛的学生,也适合刚接触自动化仓储项目的工程师参考。文中涉及的程序框架、定位认址、联锁处理和调试技巧,基本覆盖国赛常见的三菱FX3U、西门子S7-200 SMART、汇川H5U等平台,换到其他品牌,逻辑思路完全通用。
1. 国赛立体仓库赛项:表面考程序,实际考的是整体控制思路
很多人一开始会把注意力全放在“写梯形图”上,这其实是本末倒置。国赛立体仓库项目真正考察的,是你拿到一台设备之后能不能快速理解它的工艺流程,能不能把机械、传感器、电机、触摸屏这些东西在脑子里串成一条完整的控制链路。程序只是这条链路的最终表达形式。
1.1 先看清控制对象:立体仓库到底由哪些机构组成
立体仓库本身不复杂,但机构种类多,输入输出点也多,第一步就是把这个“控制对象”拆清楚。一个典型的国赛立体仓库由这几部分组成:
- 货架:常见3层5列或4层5列,每个货位一般会装一个货物检测传感器,用来判断该货位有没有货。先别小看这个信号,自动入库选空货位、出库选有货货位,全靠它。
- 堆垛机:这是最核心的执行机构,分三个轴——行走轴(X轴,左右水平)、升降轴(Y轴,上下垂直)、货叉轴(Z轴,前后伸缩)。动力可能是三相异步电机加变频器,也可能是步进或伺服电机。
- 出入库平台与输送线:货物从输送线或机械手送到取货位,或者由堆垛机放到出库台。这个环节的传感器位置和动作时序,决定了自动流程从哪里开始、到哪里结束。
- 传感器系统:包括原点开关、左右上下极限限位、货叉缩回伸出到位开关、货物检测光电等。对选手来说,最难的不是认识这些传感器,而是把每一个传感器在程序里对应的输入点、常开还是常闭、信号有效时机全部搞清楚。
- 操作面板与触摸屏:手自动切换、启动停止、故障复位、状态显示。有些赛项还会加上位机组态监控。
很多选手上来就写程序,等写完才发现IO表里有一半的点位不知道是干嘛的,或者某个限位接成了常闭导致调试时程序状态永远不对。我的习惯是:写第一行程序之前,先把IO表列出来,每个输入输出都标注功能、安装位置和传感器类型,然后对照实物一个一个核对。这一步看着费时间,其实是最省时间的。
1.2 从评分标准倒推程序模块:别漏掉隐性考点
国赛评分表通常按“安装接线、程序功能、画面设计、联机调试、职业素养”几大块给分。和PLC程序直接相关的功能,往往比表面上看到的要多,我按经验整理成一张对照表:
| 评分方向 | PLC程序对应模块 | 容易遗漏的点 |
|---|---|---|
| 安全保护 | 急停、限位、互锁、门开关 | 限位被触发后只能向安全方向运行 |
| 手动操作 | 各轴点动、回原点 | 手自动切换时要无扰动 |
| 自动流程 | 入库、出库、倒库 | 状态步转移条件必须完整 |
| 故障处理 | 报警、停机、复位 | 急停恢复后设备要能回到安全状态 |
| 数据统计 | 入库数、出库数、当前货位数量 | 断电保持或复位清零逻辑 |
| 人机交互 | 触摸屏按钮与状态指示 | 当前步状态实时显示 |
| 通信联调 | 与上位机或机械手的联锁信号 | 地址规划和握手信号时序 |
建议赛前做一张这样的功能自查表,每个模块完成一项就打个勾。比赛现场时间紧张,如果心里没有这张表,容易顾此失彼,比如把自动入库做得非常顺畅,却忘了急停恢复这个单独测试项,最后照样扣大分。
2. 程序骨架:状态机控制流程的搭建方法
程序功能再多,主体骨架永远是“手动+自动+故障处理”三块,自动模式的核心又是状态步进控制。这一章我重点讲怎么把整个出入库动作拆成一串清晰的状态步,并用梯形图或者SFC实现。
2.1 手动模式:先让每个轴都能“听话”
手动模式是自动模式的基础,也是现场调试时的保命功能。手动模式下,每个轴至少要有正反两个方向的点动控制,并且必须做好互锁:行走轴不能同时左右输出,升降轴不能同时上下输出,货叉也不能一边伸一边缩。方向互锁看似简单,但如果漏了,一旦误操作就是机械碰撞,比赛时这种低级故障最伤士气。
手动模式里还要有原点回归功能。回原点的动作顺序有讲究:一般先让升降轴回到最低或最高原点,再让货叉缩回到位,最后行走轴回原点,这个顺序是为了避免回原点过程中货叉撞到货架。有的设备原点回归还要考虑方向,比如先反方向离开原点开关,再低速正向找原点,防止行程中压着原点开关反向冲出去。
为什么我强调手动模式很重要?因为后面联调时,只要自动流程在某一步卡住,你必须能在最短时间内用手动把设备恢复到安全位置。手动模式写不好,比赛时机械复位会让你浪费十几分钟甚至更久,而评委就在旁边看着,操作还不规范的话职业素养分也保不住。
2.2 自动模式:出入库动作的步骤化拆解
自动模式的做法,是先把一个完整动作拆成“状态步”。以入库为例,假设货物已经从输送线送到取货位,后续动作可以拆成下面这张表:
| 步号 | 动作 | 转换条件 |
|---|---|---|
| 0 | 待机,等待启动 | 启动信号 |
| 1 | 堆垛机行走到取货列 | X轴到位信号 |
| 2 | 升降到取货层 | Y轴到位信号 |
| 3 | 货叉伸出取货 | 伸出到位信号 |
| 4 | 货叉缩回(货物已叉上) | 缩回到位信号 |
| 5 | 堆垛机运行到目标货位 | X、Y轴到位信号 |
| 6 | 货叉伸出放货 | 伸出到位信号 |
| 7 | 货叉缩回 | 缩回到位信号 |
| 8 | 返回原点,待机 | 原点到位信号 |
实现方式有两种主流选择:一是用SFC或STL顺序功能图,每一步一个状态继电器,程序结构一目了然,适合比赛;二是用梯形图加状态寄存器,每段的执行条件是“当前状态是N且转移条件满足”,然后把下一步状态置位、当前步复位。这两种方式我都试过,比赛我更推荐状态寄存器方式,因为后期在触摸屏上显示“当前步号”非常方便,直接读一个数据寄存器就可以。
状态机最重要的是转移条件必须完整且可靠。很多选手在纸上画流程很爽,写到梯形图里却漏了某个到位信号,结果程序跑到一半停住,或者瞬间连续跳了两步。一个检查办法是:把每一步的进入条件和退出条件单独列出来,确保上一步的退出条件就是下一步的进入条件,中间没有空档。
2.3 暂停、急停、复位:比赛中最容易丢分的环节
国赛评委特别喜欢现场测试“运行中按暂停、急停、复位”,因为这几个操作最能反映程序健壮性。
暂停和急停的区别一定要搞清。暂停是流程停下来,但不破坏当前状态,恢复后从原步骤继续;急停是设备立即停止,所有输出复位,机械位置相当于“冻结”在半路。程序实现上,暂停通常用一条特殊继电器或一个输入点作为状态机时钟的禁止条件,状态寄存器保持不变;急停则要有一个专门的急停状态,把所有输出清零。
急停之后的复位逻辑是重灾区。如果按完急停直接恢复自动运行,堆垛机还停在半空,货叉可能还是伸出的,结果一启动就撞架。正确的做法是:急停恢复后先进入复位流程,提示选手手动或半自动把货叉缩回、升降轴回安全高度、行走轴低速回到原点,然后才允许再次启动自动。这个“安全位置判断”在程序里要写好,否则评委把急停按下去的瞬间,就已经决定了这个环节要扣多少分。
3. 定位与认址:堆垛机“指哪打哪”的实现细节
立体仓库项目里,定位精度直接决定了出入库能不能成功。定位不准、冲过认址点、货叉对不上货位,都是赛场上的高频故障。这一章专门讲定位与认址的几种常见方式,以及程序里必须注意的时序。
3.1 认址方式:传感器定位与编码器定位
不同的赛项设备,认址方式可能完全不同。常见的有三种。
第一种是挡块加光电传感器认址,每个货位柱上装一个检测块,堆垛机走到该位置时传感器动作,PLC通过这个信号定位。这种方式抗干扰能力强,但程序里要注意信号防抖,不能一收到脉冲就认为到位,要持续几十毫秒有效才算,否则设备高速运行时抖动一下就会误认地址。
第二种是编码器加高速计数器认址,电机轴上的编码器把位置转换成脉冲,PLC用高速计数器记录。这种方式灵活,但必须解决好回零问题。我见过不少选手在设备开动后忘了回原点,计数器数值根本不对,堆垛机直接跑到货架外面去。
第三种是伺服或步进电机的脉冲定位,用驱动器自身的位置控制,PLC只要给定目标脉冲数或通过总线控制指令下发目标位置。像汇川H5U这类支持EtherCAT的PLC,程序里直接调用定位指令就行,不用自己写高速计数器。这种情况下,程序的核心工作是“把货位的行列坐标换算成位置值”,并把换算关系写清楚。
3.2 多段速控制与低速找点的时序
如果是变频器驱动行走和升降,定位过程一般分三段:高速运行、接近减速、低速爬行。举例来说,行走轴高速运行到距离目标位还有200毫米时切到中速,距离50毫米时切到低速,到位信号来了才停止。这样既能提高效率,又能保证停在正确位置。如果直接全速冲过去,电机惯性会带着堆垛机滑过认址点,定位就会失败。
如果用伺服或步进,就要算脉冲当量。假设行走电机转一圈带动丝杆走20毫米,编码器是2500线、驱动器4倍频,那么一万个脉冲对应20毫米,也就是1毫米等于500个脉冲。如果两列货位中心距是150毫米,那么从第一列走到第二列,需要的脉冲数就是75000。把这些换算参数写在程序注释里,调试时调位置就是改几个数字的事,不需要反复搬货架。
低速找点的时序也容易出问题。有些选手在低速爬行阶段等待“到位信号”,但到位信号一出现就立刻停止,结果由于电机抱闸和机械惯量,设备还是会往前溜一点。稳妥的做法是:低速爬行时收到到位信号后,延时几十毫秒再发停机和抱闸指令,或者干脆在低速状态下让轴往前多走一个微小补偿量。具体补偿多少,要根据现场实测调整,这也是联调阶段最重要的工作之一。
3.3 货叉伸缩与升降的联锁判断
取放货失败是另一个高频故障,而且大多数时候不是机械问题,而是程序里的联锁没做好。
最典型的场景是:货叉还没完全伸到位,升降轴已经动了;或者升降轴还没到位,货叉就开始伸出,结果货叉撞到货架横梁,把托盘顶歪,甚至把传感器打坏。程序上的对策是:每一个轴的动作,都要以其他轴的状态作为允许条件。比如升降轴允许动作的条件之一是“货叉缩回到位”信号有效;行走轴允许动作的条件是“货叉缩回到位”且“升降轴处于安全高度”。
另外一个容易忽略的是传感器信号的反逻辑。很多到位开关用常闭触点接入PLC,触发时信号反而断开。如果IO表里没标清楚,调试时就会出现“货叉明明伸出去了,程序却一直认为没伸到位”。所以联锁判断之前,先花十分钟把每一个传感器的触发逻辑梳理一遍,绝对值得。
4. 数据交互与画面调试:触摸屏、上位机和PLC的分工
程序逻辑通了之后,紧接着就是人机交互和通信。立体仓库项目一般都有触摸屏,部分赛项还要求上位机组态监控。这一章讲讲地址规划和画面设计,这些都是现场调试能提速的关键。
4.1 变量地址规划:让通信不出乱子的前提
不管用哪种PLC,程序写大之后最怕的就是“找不到那个点”。所以我在项目一开始就固定一套地址分配规则,比如:
- M0-M99:状态步编号和流程控制位
- M100-M199:按钮输入、模式切换
- M200-M299:报警标志
- M300-M399:传感器原始状态和到位信号
- D0-D99:生产数据(入库数、出库数、总计数)
- D100-D199:位置参数、速度参数、补偿值
这样做的最大收益在通信环节。触摸屏上要关联的变量,或者Modbus TCP通信时上位机要读的寄存器,只需要照着规划表去填地址,不会漏也不会重。如果一开始不分区,程序写到1500步之后,你想找个M点都要翻半天梯形图,比赛场上这纯粹是浪费生命。
不同品牌PLC的软元件叫法不同,但规划思路一样。三菱FX3U用M代表中间继电器、D代表数据寄存器;西门子S7-200 SMART用M和V区,标志位和变量都在V区里编址;汇川H5U则兼容三菱风格。换平台时只要把地址规则平移过去即可,核心是保持“统一分区、每个地址有明确含义”这个习惯。
4.2 手自动画面与状态监视的实用设计
触摸屏画面不要求花哨,但必须实用。我建议至少包含这几个画面:主监控画面、手动调试画面、报警画面、参数设置画面。
主监控画面必须有当前状态步号显示,实时把步状态寄存器的值显示出来。调试时程序一卡住,看步号就知道卡在哪一步、在等哪个信号。这个做法在赛场上非常救命,没有它你只能拿个万用表一个个查输入点。
手动调试画面要能把每个轴的点动按钮放上去,同时配上每个传感器的状态指示灯。这样手动操作时,你盯一眼屏幕就能确认限位有没有压到、货叉到位开关是否正常。报警画面要显示报警代码和触发原因,还要有“报警解除”按钮。参数设置画面里,把定位补偿值、延时参数开放出来,联调时修改参数就不用反复改程序下载,能省不少时间。
如果赛项要求上位机监控,PLC和上位机之间的通信参数要提前确认。Modbus RTU和Modbus TCP是最常见的,站号、波特率、数据格式三者必须和上位机组态软件一致。走Profinet、EtherCAT这类总线的话,需要先在软件里组态设备,验证IO映射地址是否对应。通信联调一定要留足时间,因为线缆、参数、地址这几个环节任何一个出错,都会让画面上的数据“假死”,而这些问题排查起来往往比写程序还花时间。
5. 现场调试和比赛应急的实战经验
最后这一部分,是我个人认为整篇文章最值得看的内容。程序写得再漂亮,到了现场设备上一跑,总是会有各种意想不到的问题。能不能快速定位并解决,是比赛成绩的分水岭。
5.1 分步调试顺序:空跑、带载、全流程
调试顺序千万不要跳。我的标准流程是:
- 单轴空跑:分别测试行走、升降、货叉伸缩,确认方向正确、限位有效、原点回归正常。这时候发现问题,改起来成本最低。
- 手动取放货:手动把货物从入库台搬到几个指定货位,确认货叉插入托盘的位置、升降高度是否刚好。这些机械层面的配合如果没调好,自动程序再对也白搭。
- 自动单循环:先跑一次完整的入库,再跑一次完整的出库,观察状态步是否按预期一步步走完。
- 连续多任务:连续执行多笔出入库,检查计数逻辑、货位分配逻辑、以及上一步残留信号对下一步有没有影响。
- 故障模拟:人为触发急停、极限限位、报警输入,看程序能不能进入保护状态,复位后能不能回到安全位置。
每调试一轮,把发现的问题记录在纸上,修正完再跑下一轮。不要一次性改七八个地方,否则出了问题根本不知道是哪个改动引起的。这个“一次只改一个变量”的调试习惯,能让你少走很多弯路。
5.2 常见故障判断与处理
结合这些年的经验,立体仓库PLC项目的现场故障其实高度集中,我把典型现象和排查方向整理成一张表:
| 故障现象 | 主要原因 | 排查方向 |
|---|---|---|
| 行走或升降定位偏 | 机械打滑、脉冲丢失、加减速太快 | 检查同步带张紧,核对脉冲数,延长加减速时间 |
| 货叉取放货失败 | 伸到位信号不对、升降高度不匹配 | 查货叉到位开关,微调升降高度补偿值 |
| 自动流程中途停住 | 状态步等待条件未满足 | 看触摸屏步号,确认对应传感器信号 |
| 触摸屏数据不刷新 | 通信参数不一致、地址映射错 | 核对站号、波特率、数据地址 |
| 急停恢复后无法启动 | 复位流程未完、安全位置条件不满足 | 检查安全位置判断逻辑 |
这里特别说一下“自动流程中途停住”这种最常见的问题。先看触摸屏上的状态步号,比如停在“入库第3步”,那就是在等待第3步到第4步的转移条件,直接去查这个条件对应的输入点或寄存器。很多时候是因为某个传感器没触发,或者触发了但信号没传到PLC,用强制和监控对比一下就能定位。
5.3 比赛时间的分配与备份
赛程一般两天左右,时间分配上我建议:第一天上半段完成设备检查、IO核对和程序框架,第一天晚些时候必须跑通手动模式并开始调自动流程。第二天上午完善触摸屏、统计、故障处理,下午反复跑全流程、做故障模拟、整理图纸文档。
最后说一个很多人吃过亏的细节:程序要养成分阶段备份的习惯。每完成一个功能模块,就往U盘里存一份带时间戳的程序文件。比赛最后半天,你大概率已经连续工作十几个小时,思维不可能像第一天那么清楚。如果代码还有清楚的注释和备份,出问题还能快速回退;如果没有备份,程序改乱了就只能从零开始,那才是真正的灾难。
我个人带赛这么多年,发现最后获奖的选手不一定是最先写完程序的,但一定是最稳的——流程跟着状态步走,动手前先看IO,改完一处马上测试,每跑完一轮就记录问题。立体仓库PLC程序没有太多高深技巧,比的就是把基本控制逻辑做扎实、把现场每一个信号都搞明白。能做到这些,比赛结果自然不会差。
本文还有配套的精品资源,点击获取