国赛立体仓库PLC程序:1200博图与信捷视觉机器人联动实战
发布时间:2026/10/17 7:43:04 锦皓数字建站

简介这份资源面向参加工业自动化类技能竞赛的选手与PLC工程师聚焦立体仓库系统的完整控制方案。内容围绕西门子1200 PLC展开涵盖机器人MODBUS TCP通信、信捷视觉系统数据交互以及V90三轴伺服驱动器的协同控制并借助博图环境完成逻辑编写、通信参数配置与模拟调试帮助读者理解仓储自动化中设备互联与精确定位的实现思路。压缩包共45个文件约19.88MB以xml、hsf、idx、plf、gdbak、gd等工程与配置类文件为主另含少量pwx、fwc、dti、rdf等数据文件整体为博图项目及配套运行数据便于直接导入学习。目前已有1182人学习下载。通过研读其中的示例程序与控制逻辑读者可掌握赛题级立体仓库的通信架构、伺服定位与视觉引导方法积累可复用的排错与优化经验。1. 从一条堆垛机报警说起这套国赛立体仓库PLC程序到底能跑什么去年帮一个做自动化教学的朋友看一套立体仓库的仿真程序堆垛机走到一半突然停在巷道口触摸屏上跳“行走超时”但手动点动又能动。查了半天发现是自动流程里行走定位和货叉伸缩的互锁条件写反了——这种坑在国赛立体仓库类项目里特别常见。这套“国赛立体仓库plc程序”就是围绕这类场景做的完整工程用博图TIA Portal开发主控是1200 PLC带信捷视觉做货位识别再联动机器人完成取放货。它适合正在准备自动化类竞赛的学生、做仓储教学Demo的老师以及想拿一套能跑通的立体仓库逻辑做二次开发的工程师。程序里把堆垛机行走、升降、货叉伸缩、视觉定位、机器人抓取这几块的时序和互锁都串起来了不是那种只点亮几个指示灯的演示工程。2. 硬件架构与博图工程结构1200 PLC怎么把视觉和机器人串起来2.1 从设备层到控制层的信号流向这套系统的硬件骨架不复杂但信号链路要理清楚。现场层是立体仓库本体堆垛机行走电机、升降电机、货叉电机、货架光电、限位开关。识别层是信捷视觉相机负责在入库前拍托盘上的二维码或特征点把货位坐标和物料信息通过串口或以太网发给PLC。执行层是一台机器人常见的是四轴或六轴负责从输送线抓取物料放到堆垛机货叉上或者反向操作。控制核心是西门子1200 PLC通过博图编程。它要同时处理三件事一是堆垛机的运动控制通常是脉冲方向控制或通过PN总线控制伺服二是和信捷视觉的通信Modbus RTU或TCP三是和机器人的握手IO硬线或Profinet。这三条链路在程序里是并行跑的但时序上必须严格互锁——视觉没识别完机器人不能抓机器人没放稳堆垛机不能走。常见做法是给每个设备分配一个状态字PLC主循环里用状态机轮询。比如堆垛机状态字里用位表示“行走中”“升降中”“货叉伸出”“就绪”“故障”机器人状态字类似。视觉那边则用一个完成标志位加数据缓冲区。2.2 博图工程的块结构打开博图工程你会看到典型的西门子编程结构。OB1是主循环负责调用各个功能块和状态机调度。OB100是启动初始化用来复位状态字、清零计数器、给伺服使能。功能块方面FB块用于堆垛机控制、机器人通信、视觉数据处理FC块用于一些纯逻辑运算比如货位地址换算。数据块DB分两类一类是设备DB存每个设备的状态、参数、报警另一类是配方DB存货位坐标表、物料类型对应的目标货架号。这种分法在竞赛程序里很实用改货位不用动逻辑只改DB里的数组就行。// OB1 主循环片段SCL视图 堆垛机控制_DB.使能 : 系统就绪; 视觉通信_DB.触发 : 入库请求 AND NOT 视觉通信_DB.忙; 机器人握手_DB.允许抓取 : 视觉通信_DB.完成 AND 堆垛机控制_DB.货叉就位;这段逻辑说明堆垛机使能依赖系统就绪信号视觉触发条件是入库请求且视觉不忙机器人允许抓取的条件是视觉完成且货叉已就位。参数上“系统就绪”是全局标志由各设备无故障且自动模式确认后置位“视觉通信_DB.忙”是视觉通信块自己维护的握手位防止重复触发。2.3 堆垛机运动控制的实现方式堆垛机的行走和升降一般用伺服或步进1200 PLC通过工艺对象Technology Object或者脉冲输出PTO来控制。竞赛程序里为了通用常用PTO方式因为不依赖具体伺服型号。博图里配置PTO需要设置脉冲当量、加减速时间、软限位。// 堆垛机行走定位SCL IF 堆垛机控制_DB.自动 AND 堆垛机控制_DB.行走启动 THEN 定位轴_行走.Execute : TRUE; 定位轴_行走.Position : 货位表_DB.目标行走位置[当前货位号]; 定位轴_行走.Velocity : 500.0; // 单位 mm/s END_IF;这里用的是博图的运动控制指令MC_MoveAbsolute。参数说明Position来自货位表DB每个货位号对应一个绝对位置Velocity是运行速度竞赛里一般设300到800之间太快容易过冲。执行前要确保轴已使能且无故障。如果定位完成信号一直不来先查轴使能是否掉了再看软限位是不是设得太窄。3. 视觉与机器人联动信捷相机怎么和1200 PLC对暗号3.1 信捷视觉的通信配置信捷视觉相机支持Modbus RTU和Modbus TCP竞赛程序里用RTU的居多因为接线简单。PLC这边用CM 1241 RS485模块或者本体集成的通信口博图里调用Modbus_Comm_Load和Modbus_Master指令。配置步骤先在相机端设置从站地址、波特率、数据格式一般8位数据、无校验、1位停止位。然后在博图里给通信口分配参数波特率要和相机一致。数据映射上相机把识别结果放在保持寄存器里比如40001开始PLC用Modbus_Master读回来。// Modbus 读取视觉结果SCL Modbus_Master_DB.REQ : 视觉通信_DB.触发; Modbus_Master_DB.MB_ADDR : 1; // 相机从站地址 Modbus_Master_DB.MODE : 0; // 读保持寄存器 Modbus_Master_DB.DATA_ADDR : 40001; Modbus_Master_DB.DATA_LEN : 4; // 读4个字 Modbus_Master_DB.DATA_PTR : P#DB10.DBX0.0 WORD 4;逻辑说明REQ上升沿触发一次读取MB_ADDR是相机站号MODE0表示读DATA_ADDR是相机寄存器起始地址DATA_LEN是读取长度DATA_PTR指向PLC里存放结果的DB区。读回来的4个字里前两个是X/Y坐标第三个是角度第四个是物料类型。如果读回来全是0先确认相机有没有触发拍照再看波特率和站号。3.2 机器人握手的IO时序机器人和PLC的握手通常用硬线IO因为响应快、抗干扰。典型信号有PLC给机器人的“允许抓取”“目标位置就绪”机器人给PLC的“抓取完成”“机器人就绪”“机器人故障”。时序上入库流程是这样的视觉识别完成→PLC把目标货位和物料信息发给机器人→机器人移动到抓取位→机器人给“就绪”信号→PLC确认堆垛机货叉在接料位→PLC给“允许抓取”→机器人抓取并放到货叉→机器人给“抓取完成”→PLC启动堆垛机行走。// 机器人握手逻辑SCL 机器人握手_DB.允许抓取 : 视觉通信_DB.完成 AND 堆垛机控制_DB.货叉接料位 AND NOT 机器人握手_DB.故障; IF 机器人握手_DB.抓取完成 AND NOT 机器人握手_DB.完成锁存 THEN 堆垛机控制_DB.行走启动 : TRUE; 机器人握手_DB.完成锁存 : TRUE; END_IF;参数说明“货叉接料位”是堆垛机货叉伸到接料位置的限位信号“完成锁存”防止重复触发行走。如果机器人一直不给“抓取完成”先查机器人程序里有没有收到“允许抓取”再看IO接线是否松动。3.3 货位地址换算与配方管理立体仓库的货位地址通常用“排-列-层”表示但PLC里要换算成堆垛机的行走位置和升降位置。常见做法是在DB里建一个二维数组行是排列是层值是对应的行走和升降脉冲数。// 货位地址换算SCL FUNCTION_BLOCK 货位换算 VAR_INPUT 排号 : INT; 列号 : INT; 层号 : INT; END_VAR VAR_OUTPUT 行走位置 : REAL; 升降位置 : REAL; END_VAR BEGIN 行走位置 : 货位表_DB.行走基准 (列号 - 1) * 货位表_DB.列间距; 升降位置 : 货位表_DB.升降基准 (层号 - 1) * 货位表_DB.层间距; END_FB这段逻辑把排号忽略因为堆垛机只走巷道内列号和层号换算成绝对位置。参数“列间距”“层间距”要根据实际货架尺寸标定竞赛里可以用卷尺量也可以手动点动到每个货位记录脉冲数。如果换货架只改DB里的基准和间距逻辑不用动。4. 避坑与排查竞赛现场最容易翻车的五个点4.1 堆垛机定位过冲或不到位现象堆垛机走到目标位置后停不准要么冲过去撞限位要么差几毫米货叉伸不进去。原因通常是加减速时间设得太短或者脉冲当量算错。解决先把速度降到200以下试确认能停准后再逐步提速脉冲当量按“电机一圈脉冲数/丝杠导程”重算别直接抄别人的参数。4.2 视觉通信时好时坏现象有时候能读到坐标有时候读回来全是0。原因多半是波特率不匹配或者RS485接线没有终端电阻。解决相机和PLC的波特率、数据位、停止位逐项核对RS485总线两端各加一个120欧姆终端电阻通信线用屏蔽双绞线屏蔽层单端接地。4.3 机器人抓取后堆垛机不动现象机器人明明给了“抓取完成”堆垛机就是不启动。原因通常是互锁条件里“货叉接料位”信号没到位或者“完成锁存”没复位。解决在触摸屏上做一个IO监控页实时看每个互锁位的状态每次流程结束后强制复位锁存位别让它一直置位。4.4 自动流程卡在某个状态现象程序跑着跑着停在某个状态不动也不报警。原因一般是状态机里某个转换条件写成了常闭或者定时器没复位。解决给每个状态加一个超时定时器超时后跳故障状态并记录状态号调试时用博图的在线监控看当前状态号比猜快得多。4.5 触摸屏和PLC通信中断现象触摸屏上数据不刷新或者按钮按了没反应。原因可能是IP地址不在同一网段或者PLC连接资源被占满。解决确认触摸屏和PLC的IP在同一网段博图里检查连接资源把不用的HMI连接删掉如果是Profinet检查设备名有没有冲突。5. 二次开发与改造把这套程序变成你自己的仓库5.1 改货架尺寸和货位数量这套程序的货位表是放在DB里的数组改起来最直接。打开“货位表_DB”找到行走基准、列间距、升降基准、层间距这四个参数按实际货架尺寸改。如果货位数量变了把数组长度改掉然后在OB100里初始化新货位的默认值。注意改完要重新下载DB别只下载OB1。5.2 换机器人品牌或通信方式如果机器人从IO握手换成Profinet需要做三件事在博图里安装机器人的GSD文件组态Profinet IO然后把原来的IO信号映射到新的IO地址。程序逻辑里用的“允许抓取”“抓取完成”这些符号名不用改只改硬件组态里的地址映射就行。如果换成Modbus TCP那就把握手信号放到寄存器里用Modbus_Master读写。5.3 加一个入库缓存区竞赛程序通常没有缓存区但实际仓库需要。加缓存区的思路是在输送线末端加一个光电开关检测到物料后先存在缓存位等堆垛机空闲再发入库请求。程序上增加一个“缓存状态”DB用队列方式管理。队列可以用数组加读写指针实现先进先出。// 简单入库队列SCL IF 缓存_DB.入队触发 THEN 缓存_DB.队列[缓存_DB.写指针] : 缓存_DB.物料号; 缓存_DB.写指针 : (缓存_DB.写指针 1) MOD 10; END_IF; IF 堆垛机控制_DB.就绪 AND 缓存_DB.写指针 缓存_DB.读指针 THEN 入库请求 : TRUE; 当前物料 : 缓存_DB.队列[缓存_DB.读指针]; 缓存_DB.读指针 : (缓存_DB.读指针 1) MOD 10; END_IF;这段队列逻辑用模运算实现环形缓冲长度10。参数说明写指针是入队位置读指针是出队位置两者相等表示队列空。注意入队和出队要在不同扫描周期里做避免同周期读写冲突。5.4 调试习惯先手动再自动我一般改完程序后先用手动模式把每个动作单独点一遍确认限位、互锁、方向都正确再切自动。自动跑的时候把博图的在线监控打开盯着状态号和关键标志位。如果卡住先看状态号停在哪个值再查那个状态的转换条件。从那以后我每次改完程序都强制走一遍“手动→单步→自动”的流程省得在现场被报警追着跑。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。