文章目录

Codesys的TON定时器功能块应用

发布于 2026-03-30 07:54:43 · 浏览 7 次 · 评论 0 条

Codesys 的 TON 定时器功能块应用

TON(Time On Delay)是电气自动化控制中最基础的通电延时定时器功能块。当输入信号接通后,定时器开始计时,达到预设时间后输出信号接通。若输入信号在计时过程中断开,定时器立即复位。掌握 TON 的正确用法是实现顺序控制、延时启动及防抖动逻辑的核心。


1. 理解功能块参数

在使用 TON 之前,必须明确其四个核心引脚的定义。这些参数决定了定时器的工作行为和数据流向。

参数名 数据类型 方向 功能说明
IN BOOL 输入 启动信号。当值为 TRUE 时开始计时。
PT TIME 输入 预设时间。设定需要延时的时长,如 T#5s
Q BOOL 输出 定时完成信号。计时达到 PT 后变为 TRUE
ET TIME 输出 已流逝时间。实时显示当前计时的累计值。

注意 PTET 的数据类型均为 TIME。在 Codesys 中,时间格式必须严格遵守 T# 前缀规范,例如 T#100msT#1h


2. 配置与调用步骤

在 Codesys 环境中调用 TON 功能块无需编写复杂算法,只需按以下步骤操作即可实现逻辑控制。

  1. 声明 功能块实例变量。在变量表中添加一个新变量,数据类型选择 TON,例如命名为 Timer_Delay
  2. 拖拽 功能块到程序组织单元(POU)中。在网络编辑器中找到 TON 并将其放置在逻辑行上。
  3. 连接 输入引脚 IN。将启动条件(如按钮信号 bStart)连接到 IN 端口。
  4. 设置 预设时间 PT。在 PT 引脚输入标准时间格式,例如 T#5s 代表 5 秒延时。
  5. 关联 输出引脚 QET。将 Q 连接到控制负载的变量(如 bMotor_Run),将 ET 连接到监视变量(如 tCurrent_Time)。
  6. 编译 项目代码。点击顶部菜单栏的编译按钮,确保无语法错误。
  7. 登录 控制器进行调试。下载程序后在线监控变量状态,观察 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 持续为 TRUEET 累加到 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. 常见误区与排查

实际应用中,定时器不工作或逻辑异常通常由以下原因导致。按照以下清单逐一检查可快速解决问题。

  1. 检查 时间格式写法。确保 PT 参数包含 T# 前缀,错误写法 5s 会导致编译失败,正确写法为 T#5s
  2. 验证 输入信号持续性。如果 IN 信号只是一个扫描周期的脉冲,定时器无法累计时间。使用 自锁电路或保持信号确保 IN 在延时期间持续为 TRUE
  3. 确认 任务周期设置。定时器的精度受限于 PLC 任务周期。如果任务周期设置为 100ms,那么毫秒级的延时设定可能无法精确触发。
  4. 监控 变量状态。在线模式下观察 ET 值。如果 ET 始终为 0,说明 IN 信号未接通;如果 ET 在跳动但不到 PT 就归零,说明 IN 信号存在中断。
  5. 避免 多重实例冲突。不要在多个不同的任务周期中调用同一个定时器实例,这会导致计时混乱。创建 独立的实例变量供每个逻辑段使用。
  6. 注意 数据类型匹配。ET 输出是 TIME 类型,如果需要用于数学计算(如除以 1000 得到秒数),必须先进行类型转换,不能直接与 INT 类型运算。

对于需要断电保持的计时需求,TON 并不适用,应改用 TON_RETAIN 功能块。TON 仅在 PLC 运行且输入接通时计时,断电或输入断开均会清零。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文