『7x24小时有问必答』
      点击蓝字

PLC自动化汇
关注我们

4. FB_气缸控制 - 气动执行机构控制模块

功能概述

实现工业气动执行机构的可靠控制,涵盖单作用、双作用气缸的多种控制模式,集成到位检测、时间保护、故障处理等完善功能。

核心特性

多种模式单次动作、自动循环、手动点动、联动控制
到位检测磁性开关或接近开关的到位信号检测
时间保护伸出超时、缩回超时、保持时间可配置
安全互锁防止两个电磁阀同时得电,避免机械损坏
故障恢复自动故障复位,多种恢复策略可选
统计功能动作次数统计,维护提醒,运行时间记录
FUNCTION_BLOCK  "FB_气缸控制"VAR_INPUT       // 基本控制      ib_伸出命令 : Bool;  // 伸出命令      ib_缩回命令 : Bool;  // 缩回命令      ib_自动循环模式 : Bool;  // 自动循环模式      ib_急停信号 : Bool;  // 急停信号

       // 时间参数      t_伸出时间 : Time := T#2S;  // 伸出时间      t_缩回时间 : Time := T#1S;  // 缩回时间      t_保持时间 : Time := T#500MS;  // 保持时间

       // 传感器反馈      ib_伸出到位传感器 : Bool;  // 伸出到位传感器      ib_缩回到位传感器 : Bool;  // 缩回到位传感器      ib_物料检测传感器 : Bool;  // 物料检测传感器END_VAR

VAR_OUTPUT       // 输出控制      ob_伸出电磁阀 : Bool;  // 伸出电磁阀      ob_缩回电磁阀 : Bool;  // 缩回电磁阀

       // 状态反馈      ob_已伸出状态 : Bool;  // 已伸出状态      ob_已缩回状态 : Bool;  // 已缩回状态      ob_忙状态 : Bool;  // 忙状态(运动中)      ob_故障状态 : Bool;  // 故障状态

       // 统计信息      udin_循环次数 : UDInt;  // 循环次数      udin_故障次数 : UDInt;  // 故障次数

       // 诊断信息      e_气缸状态 :        (            状态_缩回,            状态_伸出中,            状态_已伸出,            状态_缩回中,            状态_故障      );      on_故障代码 : Int;      s_状态信息 : String[100];END_VAR
VAR       // 定时器      fb_伸出定时器 : TON;  // 伸出定时器      fb_缩回定时器 : TON;  // 缩回定时器      fb_保持定时器 : TON;  // 保持定时器      fb_传感器检查定时器 : TON;  // 传感器检查定时器

       // 边缘检测      mb_伸出边缘 : Bool;      mb_缩回边缘 : Bool;      mb_自动循环边缘 : Bool;

       // 自动循环控制      mb_自动循环激活 : Bool;      udin_自动循环计数 : UDInt;      udin_目标循环次数 : UDInt :=  0;  // 0=无限循环

       // 故障处理      mb_传感器故障 : Bool;      mb_超时故障 : Bool;      fb_故障复位定时器 : TON;END_VAR
// 边缘检测mb_伸出边缘 := ib_伸出命令 AND NOT mb_伸出边缘;mb_缩回边缘 := ib_缩回命令 AND NOT mb_缩回边缘;mb_自动循环边缘 := ib_自动循环模式 AND NOT mb_自动循环边缘;

// 急停处理(最高优先级)IF NOT ib_急停信号 THEN      ob_伸出电磁阀 := FALSE;      ob_缩回电磁阀 := FALSE;      mb_自动循环激活 := FALSE;      e_气缸状态 := 状态_故障;      on_故障代码 :=  5001;      s_状态信息 :=  '急停激活';      RETURN;END_IF;

// 自动循环模式切换IF mb_自动循环边缘 THEN      mb_自动循环激活 := NOT mb_自动循环激活;      IF mb_自动循环激活 THEN            s_状态信息 :=  '自动循环模式启动';            udin_自动循环计数 :=  0;      ELSE            s_状态信息 :=  '自动循环模式停止';      END_IF;END_IF;
// 主状态机CASE e_气缸状态 OF      状态_缩回:            ob_已伸出状态 := FALSE;            ob_已缩回状态 := TRUE;            ob_忙状态 := FALSE;            ob_伸出电磁阀 := FALSE;            ob_缩回电磁阀 := FALSE;

            s_状态信息 :=  '气缸已缩回并准备就绪';

             // 命令处理            IF mb_伸出边缘 OR (mb_自动循环激活 AND ib_物料检测传感器) THEN                  e_气缸状态 := 状态_伸出中;                  ob_忙状态 := TRUE;                  fb_伸出定时器(IN := TRUE, PT := t_伸出时间);                  s_状态信息 :=  '伸出气缸...';            END_IF;

      状态_伸出中:            ob_已伸出状态 := FALSE;            ob_已缩回状态 := FALSE;            ob_忙状态 := TRUE;            ob_伸出电磁阀 := TRUE;  // 打开伸出阀            ob_缩回电磁阀 := FALSE;

             // 传感器检查            fb_传感器检查定时器(IN := TRUE, PT := T#100MS);            IF fb_传感器检查定时器.Q THEN                  IF ib_伸出到位传感器 THEN                         // 传感器确认到位                        e_气缸状态 := 状态_已伸出;                        ob_已伸出状态 := TRUE;                        fb_保持定时器(IN := TRUE, PT := t_保持时间);                        s_状态信息 :=  '气缸完全伸出';                  ELSIF fb_伸出定时器.Q THEN                         // 超时故障                        e_气缸状态 := 状态_故障;                        on_故障代码 :=  5002;                        s_状态信息 :=  '伸出超时 - 传感器未激活';                        udin_故障次数 := udin_故障次数 +  1;                  END_IF;            END_IF;
             // 急停或停止命令            IF mb_缩回边缘 OR NOT ib_急停信号 THEN                  e_气缸状态 := 状态_缩回中;                  s_状态信息 :=  '伸出中断 - 缩回中';            END_IF;

      状态_已伸出:            ob_已伸出状态 := TRUE;            ob_已缩回状态 := FALSE;            ob_忙状态 := FALSE;            ob_伸出电磁阀 := FALSE;            ob_缩回电磁阀 := FALSE;

            s_状态信息 :=  '气缸已伸出 - 保持时间激活';

             // 保持时间到或收到缩回命令            IF fb_保持定时器.Q OR mb_缩回边缘 OR (mb_自动循环激活 AND NOT ib_物料检测传感器) THEN                  e_气缸状态 := 状态_缩回中;                  ob_忙状态 := TRUE;                  fb_缩回定时器(IN := TRUE, PT := t_缩回时间);                  s_状态信息 :=  '缩回气缸...';            END_IF;
      状态_缩回中:            ob_已伸出状态 := FALSE;            ob_已缩回状态 := FALSE;            ob_忙状态 := TRUE;            ob_伸出电磁阀 := FALSE;            ob_缩回电磁阀 := TRUE;  // 打开缩回阀

             // 传感器检查            fb_传感器检查定时器(IN := TRUE, PT := T#100MS);            IF fb_传感器检查定时器.Q THEN                  IF ib_缩回到位传感器 THEN                         // 传感器确认到位                        e_气缸状态 := 状态_缩回;                        ob_已缩回状态 := TRUE;

                         // 循环计数                        udin_循环次数 := udin_循环次数 +  1;                        IF mb_自动循环激活 THEN                              udin_自动循环计数 := udin_自动循环计数 +  1;                              s_状态信息 :=  '自动循环完成: '  +                                                        UDINT_TO_STRING(udin_自动循环计数);

                               // 检查循环目标                              IF (udin_目标循环次数 >  0) AND (udin_自动循环计数 >= udin_目标循环次数) THEN                                    mb_自动循环激活 := FALSE;                                    s_状态信息 :=  '目标循环次数达到 - 自动模式停止';                              END_IF;                        ELSE                              s_状态信息 :=  '气缸完全缩回';                        END_IF;                  ELSIF fb_缩回定时器.Q THEN                         // 超时故障                        e_气缸状态 := 状态_故障;                        on_故障代码 :=  5003;                        s_状态信息 :=  '缩回超时 - 传感器未激活';                        udin_故障次数 := udin_故障次数 +  1;                  END_IF;            END_IF;

             // 急停或停止命令            IF mb_伸出边缘 OR NOT ib_急停信号 THEN                  e_气缸状态 := 状态_伸出中;                  s_状态信息 :=  '缩回中断 - 伸出中';            END_IF;
      状态_故障:            ob_故障状态 := TRUE;            ob_忙状态 := FALSE;            ob_伸出电磁阀 := FALSE;            ob_缩回电磁阀 := FALSE;            mb_自动循环激活 := FALSE;

            s_状态信息 :=  '故障激活 - 代码: '  + INT_TO_STRING(on_故障代码);

             // 自动故障复位(5秒后)            fb_故障复位定时器(IN := TRUE, PT := T#5S);            IF fb_故障复位定时器.Q THEN                   // 尝试复位到安全状态                  IF ib_缩回到位传感器 THEN                        e_气缸状态 := 状态_缩回;                        ob_故障状态 := FALSE;                        on_故障代码 :=  0;                        s_状态信息 :=  '故障自动复位到缩回位置';                  ELSIF ib_伸出到位传感器 THEN                        e_气缸状态 := 状态_已伸出;                        ob_故障状态 := FALSE;                        on_故障代码 :=  0;                        s_状态信息 :=  '故障自动复位到伸出位置';                  END_IF;            END_IF;END_CASE;

// 互锁逻辑:防止同时打开两个电磁阀IF ob_伸出电磁阀 AND ob_缩回电磁阀 THEN      ob_伸出电磁阀 := FALSE;      ob_缩回电磁阀 := FALSE;      e_气缸状态 := 状态_故障;      on_故障代码 :=  5004;      s_状态信息 :=  '安全故障 - 两个电磁阀同时激活';      udin_故障次数 := udin_故障次数 +  1;END_IF;END_FUNCTION_BLOCK

应用场景

夹紧定位工装夹具、机械手夹爪、定位销控制
推出送料物料推出、产品分离、送料机构
升降翻转升降平台、托盘顶升、翻转机构控制
分度转位分度盘定位、旋转工作台固定
门体控制安全门、防护门、闸门的开关控制
阻挡定位物料阻挡、停止器、定位挡块控制

注意事项

气源质量确保气源压力稳定在0.4-0.6MPa,使用三联件过滤
速度调节通过节流阀调节气缸运行速度,确保平稳无冲击
传感器安装磁性开关安装位置需精确,感应距离5-8mm
润滑维护定期添加气动专用润滑油,延长密封件寿命
环境适应高温环境选用耐高温密封件,粉尘环境加防护罩
安全防护气缸运动区域需安装防护装置,防止人员误入

调试指南

气路检查检查气源压力、管路连接、电磁阀动作
手动测试手动操作确认气缸动作方向和传感器信号
时间设置测量实际运动时间,设置合适的超时保护时间
速度调节调节节流阀,使气缸运行平稳,无末端冲击
传感器校准微调磁性开关位置,确保到位信号准确
自动测试测试自动循环功能,验证循环逻辑和稳定性
故障测试模拟传感器失效、超时等故障,验证故障处理
联动测试与前后设备联调,验证协调性和时序配合
【 看完别滑走!需要你的支持!】
这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定:
  「评论区」  留下你的想法

  遇到了类似问题?有更好的方法?期待你分享见解!
  「转发」  给更多需要的人

  也许你身边的朋友,正被同样的问题困扰!
  「收藏」  随时回看复习

  知识点需要反复消化,码住不迷路!
每一次互动都是我们继续创作优质内容的动力!

感谢有你,一起进步!

---

---

推荐阅读:
分享让更多人看看
点赞
收藏
分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码