# C_ODT 功能块分析报告

## 基本信息

| 项目 | 内容 |
|------|------|
| 功能块名称 | C_ODT |
| 功能描述 | Switch ON Delay Timer(BOOL type)（接通延时定时器，布尔类型） |
| 最后修改 | 2015.11.27 |
| 作者 | Shi Chun Liang |
| 页数 | 1页 |

## 功能概述

C_ODT 是一个接通延时定时器功能块，用于在输入信号有效后延时一定时间再输出。当输入信号从FALSE变为TRUE时，定时器开始计时，达到设定延时时间后输出变为TRUE。

**主要应用场景**：
- 设备启动延时保护
- 信号防抖动处理
- 顺序控制中的延时触发
- 设备安全联锁延时

**定时器类型说明**：
- **TON (On-Delay Timer)**: 接通延时定时器，输入有效后延时输出
- **TOF (Off-Delay Timer)**: 断开延时定时器，输入无效后延时断开
- C_ODT属于TON类型

## 思维导图

```mermaid
graph TD
    A[C_ODT 接通延时定时器] --> B[输入模块]
    A --> C[处理模块]
    A --> D[输出模块]
    
    B --> B1[I]
    B --> B2[DT]
    B --> B3[SCN]
    
    C --> C1[输入数据限幅]
    C --> C2[延时时间处理]
    C --> C3[定时器累加]
    C --> C4[比较判断]
    
    D --> D1[Q]
    D --> D2[TMR]
    
    B3 --> C1
    B2 --> C2
    C1 --> C3
    C2 --> C4
    B1 --> C3
    C3 --> D2
    C3 --> C4
    C4 --> D1
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#e1ffe1
    style D fill:#ffe1e1
```

## 流程路径描述

### 延时接通路径：
开始 → I信号有效 → 定时器累加 → TMR >= DT → Q输出TRUE
**功能**: 输入有效后延时输出

### 立即断开路径：
开始 → I信号无效 → 定时器复位 → Q输出FALSE
**功能**: 输入无效时立即复位

## 逐帧功能分析

### Rung 7: 输入数据限幅

**功能描述**: 对扫描时间和延时时间进行限幅处理

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| SCN | 扫描时间 | INT | 设定值 |
| DT | 延时时间 | DINT | 设定值 |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| ScanTm | 扫描时间 | DINT |
| PlsDlyTm | 延时时间 | DINT |

**触发逻辑**:
- ScanTm = LIMIT(SCN, 1, 150)
- PlsDlyTm = ABS(DT)

**功能实现**: 
将扫描时间转换为DINT类型并限制在1~150范围内，延时时间取绝对值。

### Rung 8: 延时定时器序列

**功能描述**: 实现接通延时定时器功能

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| I | 输入信号 | BOOL | TRUE |
| TMR | 定时器值 | DINT | 数值 |
| PlsDlyTm | 延时时间 | DINT | 设定值 |
| ScanTm | 扫描时间 | DINT | 计算值 |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| Q | 输出 | BOOL |
| TMR | 定时器值 | DINT |

**触发逻辑**:
- IF I = TRUE AND TMR < PlsDlyTm THEN TMR = TMR + ScanTm, Q = FALSE
- IF I = TRUE AND TMR >= PlsDlyTm THEN Q = TRUE
- IF I = FALSE THEN TMR = 0, Q = FALSE

**功能实现**: 
当输入有效时定时器开始累加，当定时器值达到延时时间时输出有效。当输入无效时，定时器复位，输出立即变为FALSE。

## 触发条件总结

### 控制条件
| 状态 | 条件 | 结果 |
|------|------|------|
| 延时中 | I=TRUE AND TMR < DT | Q=FALSE, TMR累加 |
| 延时完成 | I=TRUE AND TMR >= DT | Q=TRUE |
| 复位 | I=FALSE | Q=FALSE, TMR=0 |

### 时序图
```
输入 I:    ___/^^^^^^^^^^^\_______
定时器TMR: ___/^^^^^^^^^^^\_______
输出 Q:    ________/^^^^^^^\_______
                |<-延时->|
```

## 实现功能总结

### 主要功能
1. **接通延时**: 输入有效后延时输出
2. **立即断开**: 输入无效时立即复位
3. **定时器累加**: 实时显示延时进度

## 关键信号说明

| 信号名称 | 信号描述 | 信号类型 | 用途 |
|----------|----------|----------|------|
| I | 输入信号 | BOOL | 触发输入 |
| DT | 延时时间 | DINT | 延时时间设定（毫秒） |
| SCN | 扫描时间 | INT | 扫描时间设定（毫秒） |
| Q | 输出 | BOOL | 延时输出 |
| TMR | 定时器值 | DINT | 当前定时器值 |

## 调试技巧

### 调试步骤
1. 检查I信号，确认输入正常
2. 检查DT值，确认延时时间设置
3. 检查SCN值，确认扫描时间设置
4. 监控TMR值，观察定时器累加
5. 监控Q值，观察延时输出

### 常见问题
1. **延时时间不正确**: 检查DT和SCN值设置
2. **输出不变化**: 检查I信号是否有效
3. **延时过长**: 检查SCN值是否正确

### 监控信号列表
- I（输入信号）
- DT、SCN（时间参数）
- TMR（定时器值）
- Q（输出）
