
西门子PLC程序模板气缸功能块 FB_AirCylinder 实战拆解邓工 · 2026-07-04 · #西门子PLC #S7-1500 #FB_AirCylinder #气缸功能块 #TIA Portal所有气缸统一调用FB_AirCylinderFB6020归属 03Valve 功能段。标准化封装优点接口固定、逻辑复用、维护集中、跨项目拷贝。层级划分UNIT工站→EM设备模块→CM控制模块。FB_AirCylinder 属于 CM 层ST_AirCylinder结构体传 Cmd/Sts上层只管调。一、接口一览方向变量说明InputManual_Auto手自动切换Switch_Initial缩回传感器Switch_Target伸出传感器Switch_Initial_Disable缩回传感器屏蔽Switch_Target_Disable伸出传感器屏蔽超时报警时间动作最大允许时间信号消抖时间传感器消抖时长原位动作时间缩回定时屏蔽时用限位动作时间伸出定时屏蔽时用调试模式启用后手动直接映射IOOutputSolenoid_Target伸出电磁阀Solenoid_Initial缩回电磁阀InOutAirCylinderST_AirCylinder 结构体二、ST_AirCylinder 结构体Cmd 和 Sts 严格分开HMI 写 Cmd程序读 Sts不混。成员说明xCmdSafety / xCmdReset安全信号 / 复位xCmdAutoInitial / xCmdAutoTarget自动模式缩回 / 伸出xCmdManualInitial / xCmdManualTarget手动模式缩回 / 伸出xStsInitialDone / xStsTargetDone缩回完成 / 伸出完成xStsErrorInitial / xStsErrorTarget缩回报警 / 伸出报警三、6 个关键设计手自动分离Manual_Auto 选择命令源自动只响应 xCmdAuto手动只响应 xCmdManual互不干扰命令自复位检测上升沿 → 驱动电磁阀 → 到位或超时后自动关输出电磁阀不长期带电到位消抖传感器稳定到位超过设定时间才置位完成信号机械振动误信号不触发传感器屏蔽Switch_Disable 使能时按动作时间定时控制不等传感器反馈。部分工站无传感器时屏蔽位常真调用接口不变超时报警命令发出超设定时间未到位 → 置位 xStsError 自动关闭电磁阀调试模式直接映射 IO调试打开后手动命令直接走电磁阀绕过消抖和互锁四、多重背景 DB 块调用所有气缸实例集中放DB_AirCylinderDB3040多重背景 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.气缸名_xCmdManualTargetHMI 工程师记住一个 DB 命名规则所有气缸画面复制改实例名即可。六、并行开发流程IO 表定了 → 硬件接线 写程序同步进行电气出 IO 地址分配表程序员按 FB 接口对 IO 地址联调时两边基本同步**前提**FB 接口必须提前定好定好就别改。新需求加新 FB不加老接口。七、要点总结FB 接口完善冗余是首要的。参数宁可多不可少接口定好就不改。内部逻辑可以逐步完善接口变了影响全局。完整 SCL 源码(* FB 名称FB_AirCylinder 功能描述双作用气缸通用控制块 - 手动/自动双模式原位/限位双方向 - 到位信号消抖 动作超时报警 - 调试模式跳过定时器直接读传感器 - 命令自复位 默认安全值 作者邓工 适用平台西门子 S7-1200/1500TIA 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