基于FactoryIO与博图V16的三轴码垛PLC完整实战解析
发布时间:2026/9/14 5:43:57 锦皓数字建站

如果你问我哪个项目最适合工控新人完完整整做一遍三轴码垛绝对排在我推荐列表的第一位。原因很直白它不像PID那样一开始就跟你谈算法推导也不像总线通讯那样上来就是报文和诊断它本质上是一套“顺序控制”的标准容器把传感器、执行器、步进逻辑、安全联锁、手动/自动切换这些日常调试每天都要碰的东西全装进去了。这次我直接用FactoryIO搭了一个立体仓库场景配合博图V16TIA Portal V16编写PLC程序把取料、搬运、码垛的完整流程跑通。整个过程非常适合刚接触PLC、想学运动控制或者准备往自动化设备调试方向走的人照着练一遍。下面我把这次项目的完整思路、程序框架和踩坑点全部摊开讲。1. 为什么三轴码垛是工控入门绕不开的练手项目1.1 它把自动化最常遇见的几种控制一次练完很多新人学PLC容易走进一个误区今天看视频学计数器明天找资料看定时器后天又去翻通讯教程结果单个指令都认识一碰到整机设备就不知道代码从哪里写起。三轴码垛正好把这个问题治了——它逼着你去思考“整个流程怎么拆”。以一个典型码垛动作为例夹爪移动到取料位上方Z轴下降夹紧工件Z轴上升X/Y轴联动到货架目标格Z轴下降放松工件Z轴上升回到安全高度。这中间涉及到数字量输入传感器检测到位、数字量输出电机正反转、夹具电磁阀、顺序控制步号推进、位置计量行/列/层计数、安全保护限位、回原点顺序。这套东西做完一遍你对PLC程序的理解会从“会写指令”上升到“会写设备”。更关键的是码垛设备的控制逻辑在工厂里太常见了。上下料机、装配线搬运、立体仓库堆垛机、成品下线码垛底层思路几乎都是这一套“取-搬-放”的状态切换。练好这一个项目等于把后面可能遇到的很多设备逻辑提前打了个底。1.2 仿真平台让“动手”这件事的门槛降了下来没有真机是很多自学者最大的痛点但FactoryIO刚好补上了这块拼图。它提供3D物理场景、传感器和执行器模型你写好的PLC程序通过博图V16下载到仿真PLC里就能直接驱动场景里的设备动起来。这种“虚拟调试”的方式特别适合验证逻辑因为你可以随时查看输入输出状态可以反复回原点重新跑不用心疼设备磨损也不用担心撞机。工厂里的真实调试通常要等机械装配、电气接线全部完成才能开始而在仿真环境里你只需要把程序逻辑理顺就能提前发现大部分控制问题。这也是为什么现在很多设备厂家在出厂前都会做数字样机联调。对初学者来说FactoryIO还有一层额外价值它把抽象的“I/O映射”变成了看得见的东西。你在场景里看到挡块碰到了限位开关再去PLC变量表里监控那个输入点立刻就能理解物理信号是怎么进到程序里的。2. 先把场景搭对FactoryIO立体仓库的坐标规划与IO映射2.1 场景布局与坐标系的建立打开FactoryIO之后第一件事不是急着写程序而是把场景布局规划清楚。这一次的目标是立体仓库场景我建议直接从场景库里选择带货架、流水线和码垛机械手的模板再根据实际需求调整位置。场景里几个关键元素要提前放好料台来料工件固定的取料位置机械手每次从同一个地方取货。货架目标存放位置需要留出多行多列的格子方便后面验证码垛计数。机械手本体三轴模组的基座位置决定了X/Y/Z轴的行程方向。托盘/传送带如果要做连续循环可以加一条出料线码完一盘后把托盘送走。布局确定之后建立一个坐标系非常重要。我习惯把坐标系原点设在机械手回零位也就是X/Y/Z三轴都在原点位置。然后定义取料点、货架基准格、各轴安全高度这几个关键坐标。这里不需要编程序只需要在纸上或者表格里先算清楚后面写坐标计算逻辑时直接用。2.2 传感器、执行器和IO表怎么定很多新手拿到项目第一件事就写梯形图这是最容易被坑的做法。正确顺序是先画IO拓扑再建变量表最后才动手写程序。这次项目我规划的IO清单大致如下类型名称说明输入X原点X轴回零到位信号输入X正限位/Y负限位X轴行程边界保护输入Y原点Y轴回零到位信号输入Y正限位/Y负限位Y轴行程边界保护输入Z上极限/Z下极限Z轴升降边界保护输入夹爪夹紧检测确认工件已夹住输入料台有料检测确认当前取料位有工件输入托盘到位检测确认码垛托盘就位输出X正转/X反转X轴电机方向控制输出Y正转/Y反转Y轴电机方向控制输出Z上升/Z下降Z轴电机方向控制输出夹爪夹紧/夹爪松开气动夹具电磁阀输出运行指示/报警指示状态灯显示在FactoryIO里面每个传感器和执行器都会对应一个可配置的IO地址最省事的做法是直接使用它默认的字节位比如I0.0、Q0.0。后面在博图V16里建PLC变量表时名称和FactoryIO里的元素保持一致地址一一对应这样联调时你盯着变量表就能知道哪个信号是从场景里来的。2.3 建立坐标参数表让码垛逻辑后面好写三轴码垛最核心的就是坐标换算所以场景搭好后先建立一张点位参数表。我这次用的是一组相对好算的参数方便演示取料点X100Y0Z80夹爪需要下降到的取料高度安全高度Z180移动时Z轴必须抬到这个高度以上货架基准格第一行第一列坐标 X300Y200箱宽方向间距DX80箱深方向间距DY80箱高方向间距DZ60这张表建好之后货架第m行第n列第k层的目标坐标就是X目标 货架基准X (m-1) * DXY目标 货架基准Y (n-1) * DYZ目标 货架基准Z (k-1) * DZ后面写程序时它就是一个现成的计算公式。这样设计的好处是真机调试时如果某列间距跟设计不一致你只需要改一个参数不用改整段逻辑。3. 博图V16端的事前准备PLC选型与通信通道3.1 为什么这次选S7-1200博图V16TIA Portal V16里可选的主流PLC有S7-1200和S7-1500两个系列。做三轴码垛仿真S7-1200完全够用像CPU 1214C DC/DC/DC这种型号数字量输入输出点数足够覆盖这次项目的IO而且它支持FB/FC、DB、SCL等现代编程方式能写的程序结构比老式S7-200要清晰得多。选S7-1200还有一个隐蔽优势它的仿真支持在博图V16里非常成熟和FactoryIO的驱动兼容性比较稳定。S7-1500当然也可以但对于新手来说配置相对复杂而且仿真资源占用更大没必要。有人会问为什么不用S7-200 SMART这种老平台。我只能说S7-1200/1500的程序组织方式OB、FB、FC、DB更接近现代工业软件工程而且FactoryIO的Siemens驱动面向的主要就是S7-1200/1500这条产品线。既然目标是练手那就直接练一套能迁移到实际项目里的方法。3.2 让PLCSIM和FactoryIO连上博图V16写完程序后要验证逻辑有两种方式一种是用博图自带的S7-PLCSIM仿真PLC另一种是接真机。在这个项目里必须用S7-PLCSIM因为FactoryIO无法直接跟博图里的普通仿真环境通信需要先把程序下载到PLCSIM里再在FactoryIO端选择对应的Siemens驱动。操作流程大概是在博图V16中建好工程写完程序后点击“下载到设备”目标选择S7-PLCSIM。下载完成后把仿真PLC切到RUN状态。打开FactoryIO在顶部菜单选择外部PLC驱动选Siemens S7-PLCSIM对应的项。在驱动配置里确认连接参数一般默认地址需要用S7-1200的PLC地址段。启动FactoryIO仿真此时场景里的传感器信号会通过驱动刷新到PLCSIMPLC的输出也会回写到场景里。这里最容易出的问题是PLCSIM和博图版本不一致比如你装了V16的TIA Portal但PLCSIM是旧版组件FactoryIO这边就会找不到连接。装博图V16时一定要把对应的S7-PLCSIM组件选上版本不匹配时会出现各种莫名其妙连不上的现象。3.3 下载程序前值得花两分钟检查的事我每次下载前都会做一轮固定检查这轮检查帮我省掉了大量联调时间检查PLC变量表的地址和FactoryIO里的实际地址是否一一对应不要只看名字要核对字节位。检查程序里是否有OB1之外的组织块被遗漏下载时确保所有相关块都包含在内。检查PLCSIM是否处于可下载状态如果之前跑过别的程序建议先复位再下载。检查驱动窗口是否显示“已连接”FactoryIO连接成功后通常会有状态提示。在虚拟机里装博图的情况稍微特殊一点不少人会遇到PLC仿真和FactoryIO之间网络不通的问题这个时候优先检查虚拟机的网络模式设置根据驱动要求选择桥接或者NAT一般都能解决。我不建议在这个环节死磕太久如果发现网络不通先看驱动类型再看虚拟网卡配置这两处是最常见的根因。4. 码垛程序的核心骨架步进状态机才是调试不乱的根4.1 程序整体架构三个模式先分开三轴码垛程序如果全部堆在一起写后期调试会非常痛苦。我这次采用的结构是OB1作为主程序只负责调用三个功能块手动模式FB、回原点FB、自动模式FB三个功能块之间通过模式选择互锁。为什么必须分模式手动模式是调试和示教的基础。码垛位置怎么定出来的不是程序算出来的而是手动模式下用点动按钮把夹爪挪到目标位置看坐标值记录下来再填到参数表里。自动模式跑不动的时候也要切回手动模式把轴挪到安全位置。自动模式是正常运行时的逻辑负责自动取料、搬运、码垛循环。回原点是启动自动运行前的必备动作。设备上电后你不知道三轴在什么位置贸然跑自动模式很容易撞货架必须先回一次原点建立坐标基准。三个模式不能同时生效所以我做了一个模式字变量比如0停止1手动2回原点3自动程序里先判断当前模式再去执行对应逻辑。4.2 自动模式步进状态机设计自动模式的核心就是“步进状态机”。我会用一个整型变量叫step每一个step代表一个动作阶段条件满足就切换。这次项目的步号设计大致如下步号动作切换条件0等待启动启动按钮 托盘到位 料台有料10移动到取料点上方到位确认20Z轴下降到取料高度取料高度到位30夹爪夹紧并延时夹紧检测到位40Z轴上升到安全高度安全高度到位50移动到目标货位上方目标坐标到位60Z轴下降到放料高度放料高度到位70夹爪松开并延时松开检测到位80Z轴上升到安全高度安全高度到位90更新码垛计数判断下一格计数正常更新100判断是否继续循环或满盘停止条件分支判断每个step内部其实只有三件事给对应输出发指令、等反馈条件、条件满足就跳下一个step。这种写法的最大好处是逻辑完全可视程序跑到哪一步你打开监控表看一眼step的值就知道。真机调试时如果设备停住不动第一件事永远是看step停在哪个值再分析为什么这个step的切换条件没满足。下面是一个简化版的SCL片段展示步进状态机的写法CASE step OF 20: // 移动到取料点上方 IF xPosOK AND yPosOK THEN step : 20; END_IF; 20: // Z轴下降到取料高度 zDown : TRUE; IF zAtPickPos THEN step : 30; END_IF; 30: // 夹紧工件 gripperClose : TRUE; IF gripperClamped THEN step : 40; END_IF; 40: // 抬升到安全高度 zUp : TRUE; IF zAtSafeHeight THEN step : 50; END_IF; END_CASE;注意这里有个细节切换条件不要用时间要用传感器反馈。虽然时间触发在仿真里看起来很顺但真机上一旦工件卡住或者气压不足你的程序还按时间继续往下走就会出大问题。步进状态机一定要建立在“动作完成确认”的基础上。4.3 可复用的动作封装思路项目做完后你会发现三轴码垛的过程本质上就是“移动到某点→爪子动作→移动到某点→爪子动作”的循环。所以进阶做法是把“取料”和“放料”封装成两个FB函数块每个FB内部又是一个小的子状态机。比如取料FB的输入参数取料点X坐标、取料点Y坐标、取料高度、安全高度、超时时间。外部调用时只需要填参数不需要关心它内部是下降、夹紧还是抬升。这样的话自动模式的状态机就只剩下“选目标位置→调用取料FB→调用放料FB→更新计数”代码结构会变得很干净。这个封装思维非常重要。以后你换一台不同的码垛设备只要IO映射和坐标参数变了FB内部逻辑几乎不用改只改调用参数就能适配。5. 三个轴各司其职运行控制、限位保护与码垛坐标计算5.1 轴运动控制的两种主流做法三轴码垛的轴运动控制在写代码时有两条路线。第一种是直接数字量控制输出正转、反转信号靠传感器或者坐标信号停止。这适合简单搬运、结构精度要求不高的场景也是仿真里最容易实现的方式。本次项目就是这种做法在FactoryIO里电机正转、反转就像是开关量真正停止靠的是程序里判断“目标到达”的标志位。第二种是用运动控制工艺对象在博图里组态轴使用Motion Control指令如MC_MoveAbsolute、MC_MoveRelative进行定位带加减速、方向、超时报警。这种方式对应真实工程项目里的伺服/步进控制系统定位精度高、运行平稳但配置也复杂得多。对仿真项目来说先用第一种方式把逻辑跑通再尝试把某一个轴改成运动控制对象会让学习曲线平滑很多。我见过很多人一上来就搞伺服组态结果轴配置、报文、闭环参数一起涌过来最后连基础码垛逻辑都没跑顺。建议分阶段走先逻辑后运动控制。5.2 三轴坐标计算和码垛计数码垛坐标计算是整个程序里最需要动脑的一部分也是体现程序通用性的地方。我在前面提到了坐标参数表具体计算逻辑如下目标位置 货架基准格 行偏移 列偏移 层偏移。每放完一件货行数1当一行放满行数归1列数1。当一层放满列数归1层数1。当最高层也放满输出满盘信号停止自动循环。在SCL里可以这么写xTarget : rackBaseX (row - 1) * dx; yTarget : rackBaseY (col - 1) * dy; zTarget : rackBaseZ (layer - 1) * dz;计算的核心是一开始那张坐标参数表。参数表里有一个值特别容易写错就是行距/列距的方向。如果现场设备的轴方向和场景坐标系方向相反计算出来的位置会直接飞出边界。所以我在参数表里会专门标注“X正方向对应场景里的哪个方向”联调前先手动点动确认方向再填参数。5.3 码垛计数与换层策略计数逻辑并不复杂但要注意“什么时候更新计数”。常见错误是程序刚进放料步就计数结果放料失败也照样1。正确做法是计数更新的时机放在放料完成后、判定“夹爪松开到位”之后。这样即使放料失败程序可以停下来报警而不是继续往下一格放导致后面全部错位。换层策略也要考虑是“顺序换层”还是“先满一层再换层”。我这次采用的是先铺满一层再升层也就是常规的逐层码垛。如果你要写交叠式码垛第二层压在第一层缝隙上坐标计算公式就会变成“奇偶层使用不同的基准X偏移”这个可以在练习完基础码垛后自己试着加。5.4 安全互锁这是必须写进程序里的很多新手程序能跑通就觉得自己会了但真机调试最怕的就是没有安全逻辑。这次仿真项目里我特意加了几个互锁强烈建议你也保留三轴不同时动作码垛动作是分时执行的程序里通过状态机天然保证同一时刻只有一个轴在动。手动模式下则需要额外加互锁禁止X和Z同时输出防止夹爪撞到货架。限位信号硬保护每个轴的正反转输出除了由状态机决定还要串联限位触点。也就是即使逻辑出错了一旦轴碰到限位输出也必须被切断。回原点顺序先Z抬升到最高再Y回原点最后X回原点。这个顺序的核心目的是避免回原点时夹爪处在低位撞上货架或者料台。在FactoryIO里同样要遵守因为物理碰撞也是仿真的一部分。限位保护的思路可以简单理解成程序正常运行时靠坐标计算来停止程序异常时靠限位开关来兜底。两者缺一不可少了限位保护调试中分分钟把机械结构干报废。6. 联调现场最容易翻车的几个环节与排查方式6.1 连不上PLCSIM先按这个顺序查我这次联调就栽过一次跟头FactoryIO里选了Siemens驱动但一直提示连不上。排查顺序是我自认为最有价值的经验查版本TIA Portal V16必须配V16的S7-PLCSIM版本跨了基本连不上。查PLCSIM状态确认程序已经下载进去且PLC处于RUN状态RUN灯亮着。查驱动配置FactoryIO里的连接地址要和PLCSIM的地址对应地址填错会一直握手失败。查虚拟机网络如果博图装在虚拟机里检查网卡模式必要时改用桥接模式。正常情况下按这个顺序走能解决九成以上的连接问题。不要一开始就去重装软件先确认自己卡在哪一层。6.2 步号不推进或者乱跳先怀疑反馈条件联调时最常见的现象是程序启动后没有任何动作或者动作做了一半就停住。我建议先做两步操作打开博图的变量监控表同时把step变量加进去再看FactoryIO当前的传感器状态。很多时候是传感器位置没被物理触发。FactoryIO里传感器的作用范围和位置是可以在场景里调整的如果感应块离传感器太远信号就永远为0step等不到切换条件自然卡住。另一种情况是条件给错了比如我在调试时曾经把“Z轴在取料高度”的反馈接到“Z轴在安全高度”上结果Z轴还没降到位就提前执行夹紧夹了个空气。解决办法是把每个反馈信号的含义写清楚变量监控表里挨个核对实际触发的传感器。6.3 回原点失灵多半是顺序和信号抖动问题回原点逻辑看起来简单实际坑也不少。有一种非常典型的故障按下回原点按钮三个轴同时往原点跑结果在FactoryIO里看到机械手撞到货架。原因就在于没有先抬Z轴。回原点的标准顺序必须是Z先升到最高位Y回到原点X回到原点。因为Y/X回原点时Z轴如果处于低位机械手会扫过货架区域直接撞上去。另外原点开关的信号抖动也很值得注意。在FactoryIO里传感器信号切换是瞬间的但如果以后接真机机械抖动会产生连续脉冲程序里最好对原点信号做滤波或者连续确认若干周期再判定到位这一点仿真里看不见但真机一定会遇到。6.4 夹具夹不住、放不下先验证IO输出和到位反馈夹具逻辑看起来简单但联调时最容易出两种问题。一种是夹爪已经收到输出命令但FactoryIO里没有动作。这种基本就是地址映射反了输出点没写到位。另一种是夹爪动了但工件没被夹住或者夹爪松开了但工件没放下来这种一般是夹持确认时间太短我给夹紧和松开都加了200毫秒左右的延时并等待夹紧/松开检测信号而不是输出命令一给就立刻切换下一步。气动夹爪在真机里还有气压不够、掉件等额外问题而这些在仿真里体现不出来所以写程序时预留好延时和反馈确认能最大程度降低后续迁移到真机时的改动量。6.5 一张联调排错参考表为了方便你快速定位问题我把这次遇到的主要问题整理成一张表现象可能原因排查方法连接失败版本不匹配、驱动地址错核对TIA/PLCSIM版本检查FactoryIO驱动参数场景不动程序没下载、PLC没RUN看PLCSIM状态看变量表输出是否变化只有单轴动状态机停在某一步查看step值核对卡住的切换条件位置偏差大坐标参数填错、单位不一致核对参数表检查毫米/米换算夹具无动作IO映射错误手动强制输出反向验证地址工件掉落夹持确认不足增加延时等待夹紧反馈信号撞货架回原点顺序错、Z未抬升先升Z再回Y/X限位保护串联这张表不是万能的但能帮你把大多数“看着像程序问题”的故障缩小到具体范围剩下的再通过变量监控细化。7. 一点经验之谈从仿真到真机的差距在哪里7.1 仿真帮你练的是逻辑不是工艺三轴码垛仿真做完我最大的体会是FactoryIO帮你解决的是控制逻辑验证问题但它不会帮你解决机械和工艺问题。仿真里没有惯性电机正转指令给出后坐标瞬间到达目标位置真机则需要考虑加减速时间、刹车距离、超程误差。仿真里传感器信号是理想的到了真机会有抖动、有延迟、有安装位置偏差。仿真里工件质量是不变的真机码垛可能需要考虑重心偏移、层间压伤、节拍时间。所以做完这个项目你应该把收获定位在“程序架构”和“调试方法”上而不是觉得这也算完整复刻了真机。真正去现场调试时你会发现程序逻辑写得好只是基础和机械配合、跟电工对点、跟工艺人员讨论动作节拍这些才是调试工作的大头。7.2 示教加偏移的思想一定要提前养好这次程序里我用了直接厘米级坐标计算但在真实项目里码垛位置往往不是纯计算出来的而是先通过手动示教确定几个关键点位然后用偏移量公式去推算其他点位。比如手动示教出第一行第一列的货位坐标然后通过箱宽、箱深、箱高算出整面货架所有格子的坐标。这样即使现场基准点有误差只需要重新示教一次基准坐标就能让整条逻辑重新生效。这个设计思路在仿真项目里用手动模式按钮就能模拟强烈建议你在写完自动模式之后再回过来练一遍手动示教法。7.3 立体仓库项目的下一步可以往哪走三轴码垛只是立体仓库的一个运动核心再往后你看这类系统通常还会带这些外围设备供料传送带、AGV小车、机器视觉定位、MES/WMS系统下发任务。每一块都是在三轴运动的基础上叠加的新模块。比如你可以试着给场景加上视觉识别通过相机识别箱子上的二维码或者颜色标签PLC根据识别结果决定箱子放到哪个货位。也可以试着加上任务队列程序启动时先接收一批目标货位数据然后按顺序完成取放。甚至可以写一个“动态码垛配方”货位间距根据工件型号自动切换。这些扩展方向的核心控制逻辑仍然是你在这个三轴码垛项目里练出来的状态机加坐标换算。骨架不变往上加功能只是时间问题。这也是我为什么一直强调第一个项目一定要把状态机扎扎实实吃透它后面能带动的东西比你想的要多得多。最后说一个我自己比较受用的习惯每次在仿真平台上练项目都会专门留一张纸画步号流程图把每个步号的触发条件、输出状态、异常分支写清楚。没画清楚之前不写代码画清楚之后写SCL或者梯形图都快很多。三轴码垛这个项目做完这套方法基本就长在身上了后面再去做搬运设备、装配设备你会发现底层的逻辑都是相通的。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。