// == TOF定时器工作原理 ==// TOF定时器:当IN从TRUE变为FALSE时开始计时,计时期间Q保持TRUE// == 主控制逻辑 ==// 1. 启动/停止命令处理b_运行命令 := (b_启动按钮 OR b_运行命令) AND NOT b_停止按钮 AND b_急停信号;// 2. 停止触发检测(检测下降沿)VAR_TEMP b_上次运行: BOOL;END_VAR// 检测运行命令的下降沿(从ON到OFF)IF b_上次运行 AND NOT b_运行命令 THEN b_停止触发 := TRUE;END_IF;b_上次运行 := b_运行命令;
// 3. 延时停止状态机CASE e_停止状态 OF0: // 状态0:运行或停止状态 t_停止延时(IN:=FALSE); // 复位定时器 b_延时指示 := FALSE; r_剩余时间 := T#0S; IF b_运行命令 THEN b_设备运行 := TRUE; e_停止状态 := 10; // 进入运行状态 ELSE b_设备运行 := FALSE; END_IF;10: // 状态10:运行状态 b_设备运行 := TRUE; b_运行指示 := TRUE;// 检查是否触发停止 IF b_停止触发 OR NOT b_急停信号 THEN IF b_立即停止 OR NOT b_急停信号 THEN// 立即停止(急停或强制停止) b_设备运行 := FALSE; b_运行命令 := FALSE; e_停止状态 := 0; ELSE// 进入延时停止 e_停止状态 := 20; b_停止触发 := FALSE; // 清除触发标志 END_IF; END_IF;20: // 状态20:延时停止中// TOF定时器工作:IN为FALSE时开始计时 t_停止延时(IN:=FALSE, PT:=r_延时时间);// TOF特性:计时期间Q保持TRUE b_设备运行 := t_停止延时.Q; b_延时指示 := t_停止延时.Q; // 延时期间指示灯亮// 计算剩余时间 IF t_停止延时.Q THEN r_剩余时间 := r_延时时间 - t_停止延时.ET; ELSE r_剩余时间 := T#0S; END_IF;// 延时完成检查 IF NOT t_停止延时.Q THEN// 延时完成 b_设备运行 := FALSE; b_运行命令 := FALSE; e_停止状态 := 0; // 返回初始状态// 特殊处理:如果运行命令又变为TRUE(中途重新启动) IF b_运行命令 THEN e_停止状态 := 10; END_IF; END_IF;// 延时过程中被重新启动 IF b_启动按钮 AND b_运行命令 THEN t_停止延时(IN:=TRUE); // 停止计时 e_停止状态 := 10; // 返回运行状态 END_IF;END_CASE;// 4. 运行指示灯b_运行指示 := b_设备运行;END_FUNCTION_BLOCK