
西门子PLC程序模板电机控制功能块 FB_Motor 实战拆解邓工 · 2026-07-04 · #西门子PLC #S7-1500 #FB_Motor #电机控制 #TIA Portal电机统一调用FB_MotorFB6051归属 05Motor 功能段。与气缸块、真空块共用同一套 CM 层模板手自动分离 正反转互锁 输出延时封装在块内部。层级划分UNIT工站→EM设备模块→CM控制模块。FB_Motor 属于 CM 层ST_Motor结构体传 Cmd。一、接口一览方向变量说明InputManual_Auto手自动切换OutputStart电机运行总启动Start_CW电机正转启动Start_CCW电机反转启动InOutMotorST_Motor 结构体二、ST_Motor 结构体Cmd 集中管理HMI 写 Cmd程序读 Output。成员说明xCmdManualCW手动正转命令xCmdManualCCW手动反转命令xCmdAutoCW自动正转命令xCmdAutoCCW自动反转命令xCmdToStop停止命令三、5 个关键设计手自动分离Manual_Auto 选择命令源手动指令和自动指令独立接收正反转互锁CW 和 CCW 命令互斥脉冲触发复位反向命令停止命令优先xCmdToStop 复位所有方向命令输出 50ms 延时滤波Start / Start_CW / Start_CCW 经过 TON 延时避免接触器抖动IO 只出现在块调用FB 内部不引用 IO 地址所有输出通过接口传递四、多重背景 DB 块调用所有电机实例集中放DB_电机 [DB3060]多重背景 DB按工站工艺命名D001_托盘进料电机 D001_前载具升降平台电机 D001_段1上层输送电机 D001_段1下层输送电机 D002_按键振动盘电机 D002_按键输送电机 D003_段2上层输送电机 D003_段2下层输送电机 ...IO 只出现在块调用FB 内部不引用 IO 地址。块调用参数FB: FB_Motor Instance: D001_托盘进料电机 Manual_Auto : %I0.2 // 手自动切换 Start : Q_托盘进料电机_运行 // 电机运行总启动 Start_CW : Q_托盘进料电机_正转 // 电机正转 Start_CCW : Q_托盘进料电机_反转 // 电机反转 Motor : DB_电机.D001_托盘进料电机五、HMI 映射结构体统一HMI 不需要为每个电机单独建变量按钮置位 DB_电机.电机名_xCmdManualCW / _xCmdManualCCW DB_电机.电机名_xCmdToStopHMI 工程师记住一个 DB 命名规则所有电机画面复制改实例名即可。六、并行开发流程IO 表定了 → 硬件接线 写程序同步进行电气出 IO 地址分配表程序员按 FB 接口对 IO 地址联调时两边基本同步**前提**FB 接口定好就不改。新需求加新 FB不加老接口。七、要点总结电机块与气缸块、真空块共用同一套 CM 层设计框架。结构体 Cmd 手自动分离是模板基础正反转互锁和输出延时封装在块内部上层只需发命令不用管电机怎么转。设计分析亮点正反转互锁封装CW/CCW 命令互斥逻辑在块内完成上层程序不会同时输出正转和反转避免接触器短路或变频器报警。与气缸/真空块框架一致ST_Motor 命名规则、命令结构、手自动分离与现有模板对齐HMI 复制改实例名即可。输出延时滤波50ms TON 延时避免接触器/变频器启动抖动对输送带、振动盘这类频繁启停的电机尤其有用。优化方向ST_Motor 缺少状态位只有 Cmd 没有 StsHMI 想做运行中/故障中状态需要额外组态输出点建议增加 xStsRunning、xStsError。50ms 延时一刀切不同功率电机启动特性不同建议把延时时间做成接口参数而不是写死在程序里。停止命令时序依赖xCmdToStop 直接复位方向命令如果外部命令持续置位停止后可能立即重新启动建议增加停止优先锁存。完整 SCL 源码(* 功能描述电机控制 *) // 停止命令优先复位所有方向命令 IF #Motor.xCmdToStop THEN #Motor.xCmdManualCW : FALSE; #Motor.xCmdManualCCW : FALSE; #Motor.xCmdAutoCW : FALSE; #Motor.xCmdAutoCCW : FALSE; END_IF; // 手动/自动正反转互锁 #P[0](CLK : #Motor.xCmdManualCW); #P[1](CLK : #Motor.xCmdManualCCW); #P[2](CLK : #Motor.xCmdAutoCW); #P[3](CLK : #Motor.xCmdAutoCCW); IF #P[0].Q THEN #Motor.xCmdManualCCW : FALSE; END_IF; IF #P[1].Q THEN #Motor.xCmdManualCW : FALSE; END_IF; IF #P[2].Q THEN #Motor.xCmdAutoCCW : FALSE; END_IF; IF #P[3].Q THEN #Motor.xCmdAutoCW : FALSE; END_IF; // 电机运行总启动50ms 延时滤波 #Time[0](IN : ((NOT #Manual_Auto AND (#Motor.xCmdManualCW OR #Motor.xCmdManualCCW)) OR (#Manual_Auto AND (#Motor.xCmdAutoCW OR #Motor.xCmdAutoCCW))), PT : T#50MS); #Start : #Time[0].Q; // 电机正转启动50ms 延时滤波 #Time[1](IN : ((NOT #Manual_Auto AND #Motor.xCmdManualCW) OR (#Manual_Auto AND #Motor.xCmdAutoCW)), PT : T#50MS); #Start_CW : #Time[1].Q; // 电机反转启动50ms 延时滤波 #Time[2](IN : ((NOT #Manual_Auto AND #Motor.xCmdManualCCW) OR (#Manual_Auto AND #Motor.xCmdAutoCCW)), PT : T#50MS); #Start_CCW : #Time[2].Q; // 停止命令自复位 IF #Motor.xCmdToStop AND NOT #Motor.xCmdManualCW AND NOT #Motor.xCmdManualCCW AND NOT #Motor.xCmdAutoCW AND NOT #Motor.xCmdAutoCCW THEN #Motor.xCmdToStop : FALSE; END_IF;完整梯形图程序作者邓工项目多工站自动装配线控制平台西门子 S7-1514SP-2 PN TIA Portal