当前位置: 首页 > news >正文

西门子PLC程序模板:气缸功能块 FB_AirCylinder 实战拆解

西门子PLC程序模板:气缸功能块 FB_AirCylinder 实战拆解

邓工 · 2026-07-04 · #西门子PLC #S7-1500 #FB_AirCylinder #气缸功能块 #TIA Portal

所有气缸统一调用FB_AirCylinder(FB6020,归属 03Valve 功能段)。标准化封装优点:接口固定、逻辑复用、维护集中、跨项目拷贝。

层级划分:UNIT(工站)EM(设备模块)CM(控制模块)。FB_AirCylinder 属于 CM 层,ST_AirCylinder结构体传 Cmd/Sts,上层只管调。


一、接口一览

方向变量说明
InputManual_Auto手自动切换
Switch_Initial缩回传感器
Switch_Target伸出传感器
Switch_Initial_Disable缩回传感器屏蔽
Switch_Target_Disable伸出传感器屏蔽
超时报警时间动作最大允许时间
信号消抖时间传感器消抖时长
原位动作时间缩回定时(屏蔽时用)
限位动作时间伸出定时(屏蔽时用)
调试模式启用后手动直接映射IO
OutputSolenoid_Target伸出电磁阀
Solenoid_Initial缩回电磁阀
InOutAirCylinderST_AirCylinder 结构体

二、ST_AirCylinder 结构体

Cmd 和 Sts 严格分开,HMI 写 Cmd,程序读 Sts,不混。

成员说明
xCmdSafety / xCmdReset安全信号 / 复位
xCmdAutoInitial / xCmdAutoTarget自动模式:缩回 / 伸出
xCmdManualInitial / xCmdManualTarget手动模式:缩回 / 伸出
xStsInitialDone / xStsTargetDone缩回完成 / 伸出完成
xStsErrorInitial / xStsErrorTarget缩回报警 / 伸出报警

三、6 个关键设计

  1. 手自动分离:Manual_Auto 选择命令源,自动只响应 xCmdAuto,手动只响应 xCmdManual,互不干扰
  2. 命令自复位:检测上升沿 → 驱动电磁阀 → 到位或超时后自动关输出,电磁阀不长期带电
  3. 到位消抖:传感器稳定到位超过设定时间才置位完成信号,机械振动误信号不触发
  4. 传感器屏蔽:Switch_Disable 使能时按动作时间定时控制,不等传感器反馈。部分工站无传感器时屏蔽位常真,调用接口不变
  5. 超时报警:命令发出超设定时间未到位 → 置位 xStsError + 自动关闭电磁阀
  6. 调试模式直接映射 IO:调试打开后手动命令直接走电磁阀,绕过消抖和互锁

四、多重背景 DB + 块调用

所有气缸实例集中放DB_AirCylinder(DB3040),多重背景 DB,按工艺命名:

D001_取托盘升降气缸 D001_取托盘横移气缸 D001_托盘进料阻挡气缸 D002_取料吸盘·旋转气缸 ...

IO 只出现在块调用,FB 内部不引用 IO 地址。IO 变化无需改 FB 源码,跨项目接口兼容直接复用。

块调用参数

FB: FB_AirCylinder Instance: 取托盘升降气缸-1 Manual_Auto := %I0.2 // 手自动切换 Switch_Initial := %I0.7 // 缩回传感器 Switch_Target := %I1.0 // 伸出传感器 Switch_Initial_Disable := FALSE // 缩回传感器屏蔽 Switch_Target_Disable := FALSE // 伸出传感器屏蔽 超时报警时间 := T#6000ms // 动作最大允许时间 信号消抖时间 := T#10ms // 传感器消抖时长 原位动作时间 := T#6000ms // 缩回定时(屏蔽时用) 限位动作时间 := T#6000ms // 伸出定时(屏蔽时用) 调试模式 := FALSE // 启用后手动直接映射IO Solenoid_Target := Q_升降气缸_伸出 // 伸出电磁阀 Solenoid_Initial := Q_升降气缸_缩回 // 缩回电磁阀 AirCylinder := DB_AirCylinder.取托盘升降气缸

五、HMI 映射

结构体统一,HMI 不需要为每个气缸单独建变量:

指示灯动画绑定:DB_AirCylinder.气缸名_xStsTargetDone 按钮按下事件: DB_AirCylinder.气缸名_xCmdManualTarget

HMI 工程师记住一个 DB 命名规则,所有气缸画面复制改实例名即可。


六、并行开发流程

IO 表定了 → 硬件接线 + 写程序同步进行:

  1. 电气出 IO 地址分配表
  2. 程序员按 FB 接口对 IO 地址
  3. 联调时两边基本同步

**前提:**FB 接口必须提前定好,定好就别改。新需求加新 FB,不加老接口。


七、要点总结

FB 接口完善冗余是首要的。参数宁可多不可少,接口定好就不改。内部逻辑可以逐步完善,接口变了影响全局。


完整 SCL 源码

(* ================================================================= FB 名称:FB_AirCylinder 功能描述:双作用气缸通用控制块 - 手动/自动双模式,原位/限位双方向 - 到位信号消抖 + 动作超时报警 - 调试模式跳过定时器,直接读传感器 - 命令自复位 + 默认安全值 作者:邓工 适用平台:西门子 S7-1200/1500(TIA Portal) ================================================================= *) //========================== 1. 手动模式 ========================== IF #AirCylinder.xCmdManualInitial AND NOT #AirCylinder.xCmdManualTarget AND #AirCylinder.xCmdSafety AND NOT #Manual_Auto THEN #Solenoid_Initial := TRUE; #Solenoid_Target := FALSE; END_IF; IF #AirCylinder.xCmdManualTarget AND NOT #AirCylinder.xCmdManualInitial AND #AirCylinder.xCmdSafety AND NOT #Manual_Auto THEN #Solenoid_Initial := FALSE; #Solenoid_Target := TRUE; END_IF; //========================== 2. 自动模式 ========================== IF #AirCylinder.xCmdAutoInitial AND NOT #AirCylinder.xCmdAutoTarget AND #AirCylinder.xCmdSafety AND #Manual_Auto THEN #Solenoid_Initial := TRUE; #Solenoid_Target := FALSE; #AirCylinder.xCmdAutoInitial := FALSE; END_IF; IF #AirCylinder.xCmdAutoTarget AND NOT #AirCylinder.xCmdAutoInitial AND #AirCylinder.xCmdSafety AND #Manual_Auto THEN #Solenoid_Initial := FALSE; #Solenoid_Target := TRUE; #AirCylinder.xCmdAutoTarget := FALSE; END_IF; //========================== 3. 到位检测 ========================== IF #调试模式 = FALSE THEN #Time[0](IN := #Solenoid_Initial AND ((#Switch_Target_Disable = FALSE AND NOT #Switch_Target) OR #Switch_Target_Disable = TRUE), PT := #原位动作时间); #Time[1](IN := (#Switch_Initial_Disable = FALSE AND #Switch_Initial) OR (#Switch_Initial_Disable = TRUE AND #Time[0].Q), PT := #信号消抖时间); #AirCylinder.xStsInitialDone := #Time[1].Q; #Time[2](IN := #Solenoid_Target AND ((#Switch_Initial_Disable = FALSE AND NOT #Switch_Initial) OR #Switch_Initial_Disable = TRUE), PT := #限位动作时间); #Time[3](IN := (#Switch_Target_Disable = FALSE AND #Switch_Target) OR (#Switch_Target_Disable = TRUE AND #Time[2].Q), PT := #信号消抖时间); #AirCylinder.xStsTargetDone := #Time[3].Q; END_IF; IF #调试模式 = TRUE THEN #AirCylinder.xStsInitialDone := #Switch_Initial; #AirCylinder.xStsTargetDone := #Switch_Target; END_IF; //========================== 4. 超时报警 ========================== IF #调试模式 = FALSE THEN #Time[4](IN := #Solenoid_Initial AND #AirCylinder.xStsInitialDone = FALSE, PT := #超时报警时间); #AirCylinder."xStsErrorInitial(缩回报警)" := #Time[4].Q; #Time[5](IN := #Solenoid_Target AND #AirCylinder.xStsTargetDone = FALSE, PT := #超时报警时间); #AirCylinder."xStsErrorTarget(伸出报警)" := #Time[5].Q; END_IF; //========================== 5. 命令自复位 ========================== #Time[10](IN := #AirCylinder.xCmdAutoInitial OR #AirCylinder.xCmdAutoTarget OR #AirCylinder.xCmdManualInitial OR #AirCylinder.xCmdManualTarget, PT := T#10ms); IF #Time[10].Q THEN #AirCylinder.xCmdAutoInitial := FALSE; #AirCylinder.xCmdAutoTarget := FALSE; #AirCylinder.xCmdManualInitial := FALSE; #AirCylinder.xCmdManualTarget := FALSE; END_IF; //========================== 6. 默认安全值 ========================== #AirCylinder.xCmdSafety := TRUE;

作者:邓工
项目:多工站自动装配线
控制平台:西门子 S7-1514SP-2 PN + TIA Portal

http://www.jsqmd.com/news/1134984/

相关文章:

  • AI时代程序员必备技能:从“写代码”到“指挥AI”,让工具接管脏活累活
  • 第三章:C 语言基础概念 —— 变量与数据类型
  • Spring Boot Actuator 暴露 heapdump,内存里的密码可能全漏了
  • 英雄联盟自动化工具终极手册:全面提升你的游戏体验
  • 可视化任务与分析(学习笔记)
  • heap 0 题解
  • 影刀RPA实操教程:5个真实案例带你从入门到独立开发
  • Spring Data Commons CVE-2018-1273漏洞剖析:SpEL表达式注入与RCE实战
  • 【硬件+APP+云平台】29.1.智能头盔-WiFi-基于STM32嵌入式物联网单片机软硬件毕业生系统设计
  • Agent 记忆长期化:从短期上下文到持久知识库的架构设计
  • MediaCrawler多平台数据采集框架:新媒体数据分析技术方案
  • QQ群数据采集神器:3分钟批量获取精准社群信息的完整指南
  • 嵌入式智能散热系统设计与PID温控算法实现
  • 【最全亲测】Hermes桌面版安装、使用
  • 用 100 行代码手搓一个 MCP Server,让 LLM 直接读你本地文件
  • 为什么选择openEuler/ci-bot?5大核心优势助力开源项目高效协作
  • 北京通州有哪些值得推荐的学画画的美术机构?
  • Hermes \+ Upstash 全栈组合实战指南: 免费层搭生产级持久化层
  • 2026年影石创新嵌入式岗位面试题带参考答案
  • CloudFormation Stack 概念全解析:从资源集合到自动化编排的核心引擎
  • 鸿蒙三方库 | harmony-utils之AppUtil.init全局初始化
  • 有一个很好的思路记录一下,创建一个辅助学习的skill
  • HarmonyOS ArkTS 实战|中式美食用户行为数据:Preferences 持久化、搜索缺口与候选排序
  • 类与对象:蓝图和房子的关系
  • Spark 流式处理:从入门到实战
  • EMA 指数移动平均 PyTorch 实现:3 种主流框架集成方案与性能开销实测
  • 2026年最新八字排盘应用推荐:天乙八字排盘、命枢、问真八字等怎么选?
  • 万能密码漏洞:认证逻辑缺陷的深度剖析与防御实践
  • 【JavaWeb】三大组件之——Servlet
  • pandas删列原理与性能优化:BlockManager、内存拷贝与CoW机制解析