每周一个编程小例子:主从电机的时序控制
引言
想象一下汽车启动:先通电自检(从设备),再点火引擎(主设备);停车时先熄火(主设备),后断电(从设备)。这种精妙的时序控制,在工业自动化中同样至关重要,它能有效保护设备、提升系统寿命。今天了解的 PLC 功能块 StartFirstAndStopLater,正是实现这一智慧的微型引擎。
1 程序代码:时序逻辑的精密舞蹈
下面是完整的 PLC 程序代码(代码基于 CodeSys 平台的 ST 语言):
- FUNCTION_BLOCK StartFirstAndStopLater
- VAR_INPUT
- startSignal: BOOL; // 启动按钮/信号 (上升沿有效)
- stopSignal: BOOL; // 停止按钮/信号 (上升沿有效)
- END_VAR
- VAR_OUTPUT
- mainMotorRunning: BOOL; // 主电机运行状态
- slaveMotorRunning: BOOL; // 从电机运行状态
- END_VAR
- VAR
- motorStartFlag : BOOL; // 内部启动标志 (锁存启动信号)
- stopFlag : BOOL; // 内部停止标志 (锁存停止信号)
- mainMotorTimer: TON; // 主电机启动延时定时器 (通电延时)
- slaveMotorTimer: TON; // 从电机停止延时定时器 (通电延时)
- END_VAR
- // 核心逻辑开始
- // 启动信号处理 - 锁存启动命令,直到停止信号到来
- motorStartFlag := (startSignal OR motorStartFlag) AND NOT stopSignal;
- // 从电机立即启动
- IF motorStartFlag THEN
- slaveMotorRunning := TRUE; // 启动标志有效,从电机直接运行
- END_IF
- // 主电机延时启动:等待从电机运行后开始3秒计时
- mainMotorTimer(IN := motorStartFlag AND slaveMotorRunning, PT := T#3S);
- // 主电机启动条件:启动标志有效 + 从电机已运行 + 3秒计时到
- IF motorStartFlag AND slaveMotorRunning AND mainMotorTimer.Q THEN
- mainMotorRunning := TRUE; // 满足条件,主电机运行
- ELSE
- mainMotorRunning := FALSE; // 否则主电机停止
- END_IF
- // 停止信号处理 - 锁存停止命令
- IF stopSignal THEN
- stopFlag := TRUE; // 检测到停止信号,置位停止标志
- END_IF
- // 从电机延时停止:停止标志有效时开始3秒计时
- slaveMotorTimer(IN := stopFlag, PT := T#3S);
- // 从电机停止条件:停止标志有效 + 3秒计时到
- IF stopFlag AND slaveMotorTimer.Q THEN
- slaveMotorRunning := FALSE; // 满足条件,从电机停止
- stopFlag := FALSE; // 复位停止标志,为下次启动做准备
- END_IF
2 代码解析
2.1 变量定义
输入与输出变量:
-
startSignal 和 stopSignal 是控制电机启动与停止的布尔输入信号。
-
mainMotorRunning 和 slaveMotorRunning 分别表示主电机和从电机的运行状态,是输出信号。
内部变量:
-
motorStartFlag 用于记录电机启动的标志位。
-
stopFlag 用于记录停止信号的状态。
-
mainMotorTimer 和 slaveMotorTimer 是分别用于延时启动和延时停止的定时器。
2.2 关键时序解析:
启动阶段:
-
按下startSignal,motorStartFlag置位并保持。
-
slaveMotorRunning立即 变为 TRUE(从电机启动)。
-
mainMotorTimer 开始 3 秒 计时(条件:motorStartFlag AND slaveMotorRunning)。
-
3 秒后,mainMotorTimer.Q 为 TRUE → mainMotorRunning 变为 TRUE(主电机启动)。
停止阶段:
-
按下stopSignal,stopFlag 置位。
-
mainMotorRunning立即 变为 FALSE(主电机停止)。
-
slaveMotorTimer 开始 3 秒 计时(条件:stopFlag)。
-
3 秒后,slaveMotorTimer.Q 为 TRUE → slaveMotorRunning 变为 FALSE(从电机停止),同时 stopFlag 复位。
3 核心应用场景:保护设备的安全卫士
带预润滑的系统:
-
从电机: 润滑泵电机。
-
主电机: 主驱动电机(如大型风机、压缩机、泵)。
-
意义: 启动时先开润滑(从),确保轴承充分润滑后再启动主机(主),防止干磨;停止时主机先停,润滑延时关闭(从),带走残余热量。
传送带系统:
-
从电机: 上游(进料端)传送带电机。
-
主电机: 下游(出料端)传送带电机或加工设备。
-
意义: 启动时先启动上游传送带(从),确保有物料供应再启动下游(主),避免空转或加工设备空载;停止时先停下游/加工设备(主),再停上游传送带(从),清空线上物料。
冷却/通风系统:
-
从电机: 冷却风扇或水泵。
-
主电机: 发热设备(如大功率变频器、电机、熔炉)。
-
意义: 启动时先开冷却(从),再启动主设备(主),防止过热;停止时主设备先停(主),冷却延时关闭(从),带走余热。
4 拓展思考:让程序更强大、更智能
参数化延时时间:
-
将 T#3S 改为输入变量 tMainStartDelay 和 tSlaveStopDelay。
-
优点: 无需修改程序即可灵活调整延时,适应不同设备需求。
增加急停功能:
-
添加 VAR_INPUT emergencyStop: BOOL;。
-
在逻辑中加入 IF emergencyStop THEN mainMotorRunning := FALSE; slaveMotorRunning := FALSE; motorStartFlag := FALSE; stopFlag := FALSE; END_IF。
-
优点: 紧急情况下立即停止所有设备,保障安全。
加入运行反馈与互锁:
-
为 mainMotorRunning 和 slaveMotorRunning 增加实际接触器反馈信号作为互锁。
-
优点: 防止输出命令与设备实际状态不符导致的逻辑错误,提高可靠性。
状态指示与报警:
-
增加输出变量指示状态(如 starting, running, stopping, fault)。
-
添加定时器监控从电机启动后主电机是否正常启动,或主电机停止后从电机是否正常停止,超时则报警。
-
优点: 提升系统可观测性,便于故障诊断。
总结:小功能块,大价值
StartFirstAndStopLater 功能块虽小,却体现了工业自动化中 时序控制 的价值。它通过简单的 标志位锁存 和精确的 定时器调度,确保了主从设备启停的安全顺序:
-
启动: 从设备先行 → 主设备延时跟进。
-
停止: 主设备先行 → 从设备延时收尾。
这种“几秒 秒之差”的智慧,有效避免了设备因不当启停顺序而造成的 机械冲击、润滑不良、物料堆积、过热损坏 等问题,显著提升了系统的 可靠性、安全性 和 设备寿命。掌握此类基础时序逻辑的构建与优化,是每一位 PLC 工程师迈向更高水平的关键一步。将其部署到需要顺序控制的场景中,让您的自动化系统运行如精密的瑞士钟表!
你来出题 我来答
欢迎大家在评论区提一些标准功能块的需求,如果合适,我们会在以后的文章中与大家分享。
往期回顾
每周一个编程小例子 :Bit 到 Word 转换的两种实现方案对比
2025年08月