尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于PLC的机械手设计:从I/O分配到状态机编程

基于PLC的机械手设计:从I/O分配到状态机编程 简介一份围绕基于PLC的机械手设计的专业文档面向机械设计、自动化及电气控制方向的学生和工程师可用于课程设计、毕业设计或实际项目方案参考。文档系统覆盖机械手总体方案设计、手部结构设计与计算、PLC控制系统设计以及动画制作等核心模块包含运动形式与驱动方式选型、总体结构布局、夹紧力等计算分析、PLC选型与资源配置、控制程序逻辑以及利用三维建模软件建立模型并制作工作流程动画的方法能帮助读者把握从机械结构到电子控制的完整设计思路。压缩包内为单个docx文件大小约1.07MB文档共分为总体方案、手部设计、控制系统及动画制作四部分结构清晰、目录完整便于直接阅读与编辑。已有150人学习适合需要快速获取PLC机械手设计框架与关键计算过程的读者。1. 基于PLC的机械手设计从I/O分配开始而不是从梯形图开始很多课程设计和毕业设计会把机械手控制写成“启动—下降—夹紧—上升—旋转—松夹”一路拍下去的顺序控制。这样写出来的梯形图在仿真里能跑但一到现场换一个料盘、加一个气缸、多一个报警整段程序就要推倒重来。机械手真正的核心是“状态怎么迁移”不是“动作按几号顺序执行”。基于PLC的机械手设计大概率会围绕三菱FX5U、西门子S7-1200、汇川H3U这一类中小型PLC来做。先确定机械结构和驱动方式再把输入输出点、脉冲轴参数、状态机和报警边界定清楚最后才落梯形图或结构化文本。下面给出一套可以直接照做的方案和调试思路兼顾课程设计答辩和实际现场改造。2. 机械手方案与PLC选型气动、步进、伺服的边界在哪里2.1 先定机械结构再选PLC自由度与驱动方式的取舍机械手不是越复杂越好。课程设计常用的是三向气动机械手左右摆动旋转轴、手臂伸缩、手腕升降加上气动夹爪一共4个开关量输出点就能动起来。现场设备更常看到“X轴伺服横移、Y轴伺服升降、Z轴旋转气缸、夹爪气动”的组合这样负载大定距精度要求也高。先数清楚几个轴、每轴是气缸还是伺服才能定PLC的输出形式。气动轴的优点是控制简单磁性开关到位就切换成本低但只能走到两头中间位置要靠机械挡块或加定位气缸。步进电机轴可以做多点定位开环控制负载小伺服轴带编码器反馈能做绝对位置和力矩控制适合负载变化大的场合。大多数基于PLC的机械手会把“旋转、伸缩”做成气缸把“横移、升降”做成伺服两边都覆盖课程设计和真实项目都能对上。2.2 PLC选型参数输入输出点数、脉冲轴数与通信口选PLC主要看四个东西I/O点数、是否晶体管输出、脉冲轴数量、通信口。输出类型是最大一个坑继电器输出也能控制气缸但发不了脉冲想做伺服控制PLC输出必须是晶体管型。三菱FX5U的MT型号、汇川H3U的MT型号、西门子S7-1200配数字量输出模块都属于常用选择。点数估算要考虑冗余。机械手本体可能只要6个输入、6个输出但加上启动、停止、复位、急停、报警灯、光栅、视觉信号、变频器通讯实际占用会翻倍。我一般按“实际需求×1.5”选点数低速输入输出预留给后续扩展。通信口方面如果接了视觉或上位机至少要有RS485或以太网口很多汇川、西门子PLC自带以太网调试起来方便很多。2.3 三菱FX5U与汇川、西门子课程设计怎么选不翻车常见选择是三菱FX5U-32MT/ES。点数32晶体管输出3轴脉冲带以太网口软件是GX Works3。汇川H3U的指令与三菱高度兼容价格低学习和上手成本也不高适合预算敏感的项目。西门子S7-1200的优势是博途环境里做HMI集成方便调试信息和数据类型比三菱严格但编程思路和课程资料相对更偏向欧洲风格。选择时不必追求最高端要看手里的样例程序和指导老师熟悉哪个。以下是一套常见I/O分配表可以直接用于气动伺服混合的机械手输入地址信号输出地址信号X0横移轴原点近点狗Y0伺服横移脉冲X1横移轴正限位Y1伺服横移方向X2升降轴原点Y2升降气缸下降电磁阀X3升降轴下限位Y3升降气缸上升电磁阀X4手臂伸出到位Y4手臂伸出电磁阀X5手臂缩回到位Y5手臂缩回电磁阀X6夹爪夹紧到位Y6夹爪夹紧电磁阀X7夹爪松开到位Y7夹爪松开电磁阀X10自动启动按钮Y10运行指示灯X11手动/自动切换Y11报警指示灯X12复位按钮Y12蜂鸣器X13急停常闭说明Y0/Y1这组脉冲输出必须由晶体管型输出点带不能挂在继电器输出上。X13接急停时用常闭触点PLC扫描到X13为OFF就切断输出继电器的主控回路这样硬件和软件能同时停。升降轴如果做伺服就把Y0/Y1换成对应轴并把这组脉冲轴指令单独配置。对应地程序里可以用带AT的变量把I/O地址固定下来便于后续维护VAR bStart AT %IX10 : BOOL; // 自动启动按钮 bMode AT %IX11 : BOOL; // 手动/自动切换 bReset AT %IX12 : BOOL; // 复位按钮 bEStop AT %IX13 : BOOL; // 急停输入常闭 yRun AT %QX10 : BOOL; // 运行指示灯 yAlarm AT %QX11 : BOOL; // 报警指示灯 END_VAR这里用AT把变量固定到绝对地址程序内部不再出现X10、Y10这样的裸地址。好处是机械手程序换到汇川或西门子平台时只要改AT地址逻辑代码基本不动。变量名bEStop对应急停输入实际ON代表设备正常OFF代表急停被按下逻辑写起来更接近物理意义。3. 机械手控制程序框架梯形图、状态机与PLC数据类型3.1 用状态机写机械手动作比位移式顺控更可维护顺序控制用SET/RST加步进指令也能实现但一旦动作路径不唯一比如手动要回原点、报警复位后要回到安全位梯形图里一堆SET会把状态绕晕。状态机把“当前在哪一步、下一步去哪一步”集中在同一个CASE里迁移条件看得见加步也只在对应分支里加。PLC编程状态机写法核心是两个变量当前状态和迁移条件。状态编号用整数逻辑里每个分支先判断当前状态再判断输入条件条件满足就把下一个状态号赋给状态变量。这样程序段的执行顺序和机械手的真实动作能一一对应调试时直接改状态号就能跳到指定流程。3.2 三菱PLC的ST状态机CASE语句改动作流程下面的代码用结构化文本ST写适用于三菱GX Works3和汇川编程软件做机械手自动流程VAR eState : INT : 0; // 状态编号0待机,10下降,20夹紧,30上升,40旋转,50伸出,60松开 bStart : BOOL; // 启动按钮 bDownLimit : BOOL; // 下降到限位 bClampLimit : BOOL; // 夹紧到位 bUpLimit : BOOL; // 上升到位 bRotateLimit : BOOL; // 旋转到位 bExtLimit : BOOL; // 伸出到位 bOpenLimit : BOOL; // 松开到位 yDown : BOOL : FALSE; // 下降电磁阀 yClamp : BOOL : FALSE; // 夹紧电磁阀 END_VAR CASE eState OF 0: // 待机等待自动启动 yDown : FALSE; yClamp : FALSE; IF bStart THEN eState : 10; END_IF; 10: // 下降 yDown : TRUE; IF bDownLimit THEN eState : 20; END_IF; 20: // 夹紧 yClamp : TRUE; yDown : FALSE; IF bClampLimit THEN eState : 30; END_IF; 30: // 上升 yDown : FALSE; IF bUpLimit THEN eState : 40; END_IF; 40: // 旋转 // 旋转气缸电磁阀置ON旋转到位后进入下一步 IF bRotateLimit THEN eState : 50; END_IF; 50: // 伸出 IF bExtLimit THEN eState : 60; END_IF; 60: // 松开结束后回待机 yClamp : FALSE; IF bOpenLimit THEN eState : 0; END_IF; END_CASE;这段ST的关键在于所有输出只在本状态内改变状态迁移后旧状态里的输出必须清掉否则会出现“状态已经离开下降但下降电磁阀还开着”的隐患。状态编号用10、20而不是1、2是为了以后在中间插步骤时不重排号码也可以用枚举类型但很多三菱课程设计还是用INT更直观。bOpenLimit、bClampLimit这些输入信号必须做滤波或硬件接头处理气缸到位磁性开关如果带惯性抖动状态机会在条件边缘反复跳。3.3 伺服脉冲定位与PLC数据类型32位还是64位如果机械手上的横移轴是伺服在ST或梯形图里要用定位指令而不是自己去发PWM。三菱FX5U的定位指令是DRVA/DDRVA单字指令的定位范围只有-32768到32767对丝杆导程20mm、减速比1:5的机构来说不够用必须用32位DDRVA目标位置和速度都要用32位软元件对D200/D201这种组合。LD M10 ; 定位启动信号 DDRVA D200 D210 Y000 Y001 ; 绝对定位到D200位置速度D210输出Y0脉冲Y1方向DDRVA的操作数含义分别是目标位置用32位存放在D200和D201速度用D210和D211Y000输出脉冲Y001输出方向。使用前要在PLC参数里把Y0配置为定位输出不能当普通晶体管输出用。速度单位通常是脉冲/s如果伺服电子齿轮比是1:1丝杆导程10mm那么10000脉冲对应10mm需要提前把电子齿轮比固定下来否则程序里改定位距离会让人抓狂。PLC数据类型在项目里尽量统一。遇到比较大的距离换算我一般直接用双字LREAL但三菱FX5U的ST里LREAL做定位参数要转换函数反而容易出错更稳的做法是全部按“脉冲数”用INT或DINT计算只在HMI显示时换算成mm。这样程序里没有浮点PLC扫描时间也稳定。3.4 报警、暂停与急停在机械手程序里的优先级状态机只处理正常流程报警和急停要在状态机外面做。常见的做法是加一段“全局阻断逻辑”急停或光栅动作时立即把状态变量保持住同时把所有输出Y置OFF并把机械手上的保持型电磁阀断电。急停恢复后不能直接接着跑需要先触发复位再让状态机回到“待机”或“回安全位”。暂停与急停不同。暂停一般只停止轴运动和气缸切换但夹爪要维持夹紧状态防止工件掉落。因此实现暂停时不能把所有输出清掉要区分“安全输出”夹爪、抱闸和“动作输出”电磁阀、伺服使能。把这些逻辑独立成子程序每个状态迁移前都调用一次能显著减少现场因为急停后工件掉落造成的事故。事件处理方式状态机响应急停所有动作输出断电保持当前状态不允许迁移光栅触发自动流程暂停当前位置保持夹爪维持夹紧伺服报警断开伺服使能进入报警状态需要复位气缸不到位输出保持触发超时报警状态不变蜂鸣器提示4. 机械手调试与节拍优化从单步运行到连续自动4.1 手动、半自动、自动三种模式怎么编程机械手程序至少要分成手动、回原点和自动三段。手动模式用于换型和对位每个气缸用一个按钮点动伺服轴用点动指令回原点模式负责把各轴拉回安全位置自动模式才跑状态机。三种模式切换时动作输出必须互锁例如手动模式下自动启动按钮无效。在程序结构上我习惯在主程序中先读模式选择开关再分别调用三个功能块。手动程序里每个输出都要带限位判断防止把气缸往已经到位的位置继续顶。自动程序的状态机在前面已经写好手动模式不要改写状态变量否则自动流程再从中间状态启动会直接撞到限位。4.2 节拍瓶颈在哪里哪个轴在等哪个轴节拍优化的前提是先把每个动作的实测时间列出来。很多机械手实际节拍达不到预期不是电机速度不够而是上下游动作在互相等。比如伺服横移已经到取料位但要等手臂缩回到位信号才放行这时候横移本该在之前就提前走。用如下表格可以定位瓶颈动作单次时间(ms)优化方式横移快速接近料盘600与上一步旋转同时开始升降气缸下降300不能与横移重叠夹爪夹取150尽量压缩到100升降气缸上升280与旋转动作重叠旋转到放料位400与横移后退重叠夹爪松开120放料完成后提前触发下一循环启动优化时要小心动作重叠是否会撞到工件或设备。常见做法是给重叠动作加一个“最小等待时间”比如旋转已经到位但工件还没完全放稳就通过延时100ms再触发下一个动作。这个100ms在程序里用定时器实现而不是在状态机里加一个空状态。4.3 视觉与PLC通讯的典型接法串口或以太网怎么拆包现在的机械手项目很难避开视觉。视觉检测完把OK/NG和坐标发给PLCPLC再决定要不要抓。最简单的方式是PLC与视觉控制器走RS485数据帧按固定格式发帧头结果坐标值校验。三菱FX5U用串口通讯指令RS来收收到后放进接收缓冲区再用ASCII转十六进制解析。以太网方式更常用三菱FX5U可以作为TCP客户端主动连接视觉控制器视觉服务端收到请求后回传结果。PLC端要专门做一个“接收状态机”因为一次TCP接收不一定包含完整数据帧可能半帧、两帧粘在一起。我一般会在接收缓冲区里找帧头再按帧长拼包拼到完整帧才把数据给自动流程使用。FOR i : 0 TO (recvLen - 5) DO IF recvBuf[i] 16#AA AND recvBuf[i1] 16#55 THEN uFrameLen : UINT_TO_INT(recvBuf[i2]) * 256 UINT_TO_INT(recvBuf[i3]); IF recvLen - i uFrameLen 4 THEN // 数据完整把帧中的OK/NG字节存到结果变量 nVisionResult : recvBuf[i4]; // 清缓冲区并退出循环 recvLen : 0; EXIT; END_IF END_IF END_FOR;这段ST里的核心是两段判定先查帧头AA 55再查帧长度是否足够。视觉数据不是每次都正好一帧到达所以必须在缓冲区里不断累积直到满足完整帧条件才复位接收长度。nVisionResult拿到之后自动流程里要加一个“允许抓取”信号同时夹爪上增加到位检测不能只看视觉结果就夹否则视觉和机械手之间一毫秒的偏差都可能抓空。4.4 机械手节拍优化的参数加减速、等待时间和夹爪动作伺服轴的加减速时间对节拍影响比最大速度更明显。假设横移距离300mm最大速度1m/s加速时间0.3s减速0.3s再加上匀速段总时间约0.6s如果把加减速压到0.15s总时间能降到0.45s但负载惯性大的时候会抖动。这里需要用伺服调试软件看实际跟随误差不能只看PLC里的速度环。气缸的等待时间也要重新评估。很多程序把气缸动作时间写死成500ms但磁性开关实际在200ms就动作了。正确做法是以到位信号为状态迁移条件而不是用延时等待。如果机械结构导致到位信号有残留需要在PLC输入滤波里设置2~5ms的滤波时间消除抖动后状态机会稳定得多。5. 把机械手程序写得更稳原点回归、报警恢复与AI辅助编程5.1 原点回归的三种方式和参数设置伺服轴必须原点回归。第一种是近点狗Z相搜索伺服电机先快速找近点开关碰到后减速再找编码器Z相脉冲停在固定位置重复定位精度最高。第二种直接限位开关当原点结构简单但撞限位后要反向回退容易积累误差。第三种是绝对编码器上电后看当前位置即可当原点适合多轴设备但成本高。三菱FX5U的参数设置里原点回归速度一般给10mm/s爬行速度给1mm/s参考方向按机构确定。不要为了赶节拍把爬行速度提高因为爬行段越长重复精度越稳。机械手上的夹爪和气缸本身没有编码器用磁性开关位置做原点就够不需要做绝对定位。5.2 报警恢复与断料续跑报警恢复常见的错误是一按复位就让机械手继续跑。正确做法是先在复位状态里让所有轴回到“安全位置”确认夹爪里有料或无料再手动跳过当前工位。这个“跳过”逻辑在状态机里就是一个例外分支把当前状态号改成下一个安全状态IF bSkip AND eState 20 THEN eState : 30; // 夹紧超时人工确认后跳过夹紧直接上升 END_IF断料续跑也是一样要记录断料时的工件序号和坐标重新上料后从断点继续而不是从头开始。D寄存器做断点保存时注意选择带电池保持或锁存功能的软元件区间三菱FX5U的锁存范围默认从D512开始写入锁存区前先确认硬件手册。5.3 AI PLC代码生成的使用技巧与边界AI PLC代码生成对机械手项目很有用但要用对方法。把I/O表、轴参数和动作流程描述喂给AI让它生成ST状态机骨架比自己从零写快很多。不过AI生成的代码经常漏掉急停处理、气缸到位判定和互锁条件这三处是现场故障的主要来源。我一般会把AI生成的CASE代码放进单独功能块在外部再包一层安全逻辑急停触发时把状态变量锁住所有输出清零复位后必须回到待机或安全位AI代码里一般不会写这些。对于调试可以把当前状态编号连续写到D100寄存器再用GX Works3的监视表观察机械手到底卡在哪里。这个习惯能省下大量翻程序的时间。最后在HMI上显示“状态等待启动、下降中、夹紧中”等中文提示配合D100的状态号操作人员也能看懂问题出在哪一步。本文还有配套的精品资源点击获取
返回列表