Codesys 的 TON 定时器功能块应用
TON(Time On Delay)是电气自动化控制中最基础的通电延时定时器功能块。当输入信号接通后,定时器开始计时,达到预设时间后输出信号接通。若输入信号在计时过程中断开,定时器立即复位。掌握 TON 的正确用法是实现顺序控制、延时启动及防抖动逻辑的核心。
1. 理解功能块参数
在使用 TON 之前,必须明确其四个核心引脚的定义。这些参数决定了定时器的工作行为和数据流向。
| 参数名 | 数据类型 | 方向 | 功能说明 |
|---|---|---|---|
IN |
BOOL |
输入 | 启动信号。当值为 TRUE 时开始计时。 |
PT |
TIME |
输入 | 预设时间。设定需要延时的时长,如 T#5s。 |
Q |
BOOL |
输出 | 定时完成信号。计时达到 PT 后变为 TRUE。 |
ET |
TIME |
输出 | 已流逝时间。实时显示当前计时的累计值。 |
注意 PT 和 ET 的数据类型均为 TIME。在 Codesys 中,时间格式必须严格遵守 T# 前缀规范,例如 T#100ms 或 T#1h。
2. 配置与调用步骤
在 Codesys 环境中调用 TON 功能块无需编写复杂算法,只需按以下步骤操作即可实现逻辑控制。
- 声明 功能块实例变量。在变量表中添加一个新变量,数据类型选择
TON,例如命名为Timer_Delay。 - 拖拽 功能块到程序组织单元(POU)中。在网络编辑器中找到
TON并将其放置在逻辑行上。 - 连接 输入引脚
IN。将启动条件(如按钮信号bStart)连接到IN端口。 - 设置 预设时间
PT。在PT引脚输入标准时间格式,例如T#5s代表 5 秒延时。 - 关联 输出引脚
Q和ET。将Q连接到控制负载的变量(如bMotor_Run),将ET连接到监视变量(如tCurrent_Time)。 - 编译 项目代码。点击顶部菜单栏的编译按钮,确保无语法错误。
- 登录 控制器进行调试。下载程序后在线监控变量状态,观察
ET值的变化。
3. 逻辑状态流转分析
定时器的核心在于输入信号与输出信号的时间关系。当 IN 信号不稳定时,Q 输出会受到直接影响。以下流程图展示了 TON 内部的状态判断逻辑。
flowchart TD
A["开始:检测输入 IN"] --> B{"IN 是否为 TRUE?"}
B -- "否 (FALSE)" --> C["复位:输出 Q=FALSE\n当前时间 ET=0"]
B -- "是 (TRUE)" --> D["计时:累加当前时间 ET"]
D --> E{"ET >= 预设时间 PT?"}
E -- "否 (未到达)" --> F["保持:输出 Q=FALSE\n继续累加 ET"]
E -- "是 (已到达)" --> G["完成:输出 Q=TRUE\n保持 ET 等于 PT"]
F --> B
G --> B
C --> B
上图清晰表明,只有在 IN 持续为 TRUE 且 ET 累加到 PT 设定值时,Q 才会输出 TRUE。一旦 IN 中途变为 FALSE,无论 ET 累计了多少,都会立即跳回复位状态。
4. 结构化文本(ST)代码示例
在结构化文本编程语言中,调用 TON 功能块需要实例化并显式赋值参数。以下代码演示了如何实现一个 5 秒延时启动电机的逻辑。
PROGRAM Main
VAR
bStartSwitch : BOOL; (* 启动按钮信号 *)
bMotorOutput : BOOL; (* 电机控制输出 *)
tElapsedTime : TIME; (* 用于监视的流逝时间 *)
Timer_Instance : TON; (* 定时器实例 *)
END_VAR
(* 调用定时器功能块 *)
Timer_Instance(
IN := bStartSwitch, (* 连接启动信号 *)
PT := T#5s, (* 设定延时 5 秒 *)
Q => bMotorOutput, (* 输出到电机控制 *)
ET => tElapsedTime (* 输出当前计时值 *)
);
(* 可选:手动复位逻辑,若需要强制停止 *)
IF bEmergencyStop THEN
bStartSwitch := FALSE;
END_IF;
代码中 := 表示输入赋值,=> 表示输出读取。确保 Timer_Instance 变量在 VAR 区域已正确声明为 TON 类型,否则编译会报错。
5. 常见误区与排查
实际应用中,定时器不工作或逻辑异常通常由以下原因导致。按照以下清单逐一检查可快速解决问题。
- 检查 时间格式写法。确保
PT参数包含T#前缀,错误写法5s会导致编译失败,正确写法为T#5s。 - 验证 输入信号持续性。如果
IN信号只是一个扫描周期的脉冲,定时器无法累计时间。使用 自锁电路或保持信号确保IN在延时期间持续为TRUE。 - 确认 任务周期设置。定时器的精度受限于 PLC 任务周期。如果任务周期设置为 100ms,那么毫秒级的延时设定可能无法精确触发。
- 监控 变量状态。在线模式下观察
ET值。如果ET始终为0,说明IN信号未接通;如果ET在跳动但不到PT就归零,说明IN信号存在中断。 - 避免 多重实例冲突。不要在多个不同的任务周期中调用同一个定时器实例,这会导致计时混乱。创建 独立的实例变量供每个逻辑段使用。
- 注意 数据类型匹配。
ET输出是TIME类型,如果需要用于数学计算(如除以 1000 得到秒数),必须先进行类型转换,不能直接与INT类型运算。
对于需要断电保持的计时需求,TON 并不适用,应改用 TON_RETAIN 功能块。TON 仅在 PLC 运行且输入接通时计时,断电或输入断开均会清零。

暂无评论,快来抢沙发吧!