4. 皮带启停延时与顺序控制
任务拆解:两个延时方向,一条启动链
本例要解决的不是“皮带能不能转”,而是“什么时候才允许转、什么时候必须晚一点停”。S7-1200 的 TON 定时器在 IN 由 0 变 1 时开始计时,当前值 ET 达到预设 PT 后输出 Q 置 1;IN 一旦变 0,Q 立即复位、ET 清零。因此同一个 TON 既能做“启动前预警延时”,也能做“停止后延时断电”,区别只在于它被谁触发、它的 Q 去驱动什么。
工程上把这两段延时拆成两条独立链路,互不干扰:
- 启动链:启动按钮 → 预警定时器 TON(PT = 3 s)→ 预警灯闪烁/常亮 → 延时到 → 主接触器 Q0.0 得电。
- 停止链:停止按钮 → 运行标志复位 → 主接触器立即断电 → 停止延时 TON(PT = 5 s)→ 延时到 → 辅助输出(如尾部清扫器、指示灯)断电。
下面这张图把两条链的触发源、定时器、被驱动对象和时序关系画在一起,重点看“谁先动、谁后动”。
变量与定时器参数约定
为避免“定时器到底该用常开还是常闭触发”这类反复出错的问题,先把本例用到的地址和参数固定下来。定时器采用 IEC 定时器 TON,背景数据块各用一个,互不共用。
| 符号 | 地址 / 类型 | 作用 | 说明 |
|---|---|---|---|
| 启动按钮 | I0.0 | 启动指令 | 上升沿有效,避免长按重复触发 |
| 停止按钮 | I0.1 | 停止指令 | 常闭按钮,程序中取反使用 |
| 运行标志 | M0.0 | 启动链保持位 | 置位后保持,停止时复位 |
| 预警定时器 | TON,DB1 | 启动前延时 | PT = T#3s |
| 停止定时器 | TON,DB2 | 停止后延时 | PT = T#5s |
| 预警输出 | Q0.1 | 蜂鸣器 / 黄灯 | 由预警定时器 Q 驱动 |
| 主接触器 | Q0.0 | 皮带电机 | 由预警定时器 Q 驱动 |
| 辅助输出 | Q0.2 | 清扫器 / 尾灯 | 由停止定时器 Q 取反驱动 |
梯形图逻辑(分段说明)
程序分三段,按“启动保持 → 预警延时 → 停止延时”的顺序编写。下面用结构化文本等价表达,便于直接对照梯形图网络。
// 网络1:启动保持与停止复位
IF "启动按钮" AND NOT "运行标志" THEN
"运行标志" := TRUE; // 上升沿置位
END_IF;
IF NOT "停止按钮" THEN // 常闭按钮断开即停止
"运行标志" := FALSE;
END_IF;
// 网络2:启动前预警延时 3 s
"预警定时器"(IN := "运行标志",
PT := T#3s);
"预警输出" := "运行标志" AND NOT "预警定时器".Q; // 预警期间亮
"主接触器" := "预警定时器".Q; // 延时到才启动
// 网络3:停止后延时断电 5 s
"停止定时器"(IN := NOT "主接触器",
PT := T#5s);
"辅助输出" := NOT "停止定时器".Q; // 延时到才断电
运行标志 AND NOT 定时器.Q,这样预警灯只在 3 s 等待期内亮,主电机启动后自动熄灭,不需要额外复位。关键点:为什么停止定时器的 IN 取 NOT Q0.0
停止延时不能用“停止按钮”直接触发,否则按钮松开后 IN 变 0,定时器立刻清零,延时形同虚设。正确做法是让定时器的 IN 跟随“主接触器是否已断电”这个持续状态:主接触器一旦断开,NOT Q0.0 持续为 1,定时器才能稳定计满 5 s。这也是 TON 与“脉冲定时”最容易混淆的地方——TON 计的是 IN 持续为 1 的时间,不是按钮按下的瞬间。
上机验证与现象判读
把程序下载到 CPU 后,用监控表同时观察 M0.0、两个定时器的 ET/Q 和三个输出,按以下顺序操作并核对现象:
- 按启动按钮 I0.0:M0.0 置 1,预警定时器 ET 从 0 开始递增,Q0.1 立即亮,Q0.0 仍为 0。
- 持续观察约 3 s:预警定时器 Q 变 1,Q0.0 得电,Q0.1 熄灭,皮带开始运行。
- 按停止按钮 I0.1:M0.0 复位,Q0.0 立即断开,停止定时器 ET 开始从 0 递增,Q0.2 仍保持为 1。
- 约 5 s 后:停止定时器 Q 变 1,Q0.2 断开,整条链路回到初始状态。
判读要点:启动链看“预警灯亮到主电机得电之间是否恰好 3 s”;停止链看“主电机断电到辅助输出断电之间是否恰好 5 s”。若某一延时明显偏短,优先检查定时器 IN 是否被按钮的瞬时信号驱动,而不是被保持位或输出状态驱动。
常见时序异常与处理
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 预警灯一闪即灭,主电机立刻启动 | 预警定时器 PT 被写成 T#0s 或 IN 直接接 Q0.0 | PT 改为 T#3s,IN 接运行标志 M0.0 |
| 停止后辅助输出立即断电 | 停止定时器 IN 接了停止按钮瞬时信号 | IN 改为 NOT Q0.0,保证持续为 1 |
| 再次启动时预警时间变短 | 两个定时器共用同一背景 DB | 预警、停止各用一个 DB,互不复用 |
| 停止按钮按下后电机不停 | 停止按钮常开/常闭类型与程序取反不一致 | 核对现场按钮类型,统一取反逻辑 |
完成以上验证后,本例的核心就落在“两条延时链各自被谁触发、各自驱动谁”上:启动链用运行标志触发、用定时器 Q 放行主电机;停止链用主接触器断电状态触发、用定时器 Q 切断辅助输出。把这两个触发源接对,延时顺序自然正确。