# C_HMI1 功能块分析报告

## 基本信息

| 项目 | 内容 |
|------|------|
| 功能块名称 | C_HMI1 |
| 功能描述 | HMI Interface1（1位HMI接口） |
| 最后修改 | 2018.03.23 |
| 作者 | HuJingQi |
| 页数 | 1页（4个程序段） |

## 功能概述

C_HMI1是一个1位HMI（人机界面）接口功能块，用于处理单个HMI按钮命令。该功能块通过检测按钮状态的上升沿来生成命令信号，并支持命令自动清除功能。

### 应用场景
- **单按钮命令处理**：处理HMI上的单个按钮操作
- **命令脉冲生成**：将HMI按钮状态转换为脉冲命令
- **简单控制**：用于简单的启停控制

### 功能特点
1. **上升沿检测**：使用R_TRIG检测按钮上升沿
2. **命令生成**：根据按钮脉冲生成命令信号
3. **PL检测**：检测命令执行状态
4. **自动清除**：命令执行后自动清除

## 思维导图

```mermaid
graph TD
    A[C_HMI1 1位HMI接口] --> B[输入处理模块]
    A --> C[命令生成模块]
    A --> D[输出处理模块]
    
    B --> B1[PS 按钮状态]
    B --> B2[EXE 执行标志]
    B --> B3[CLR 清除信号]
    
    C --> C1[R_TRIG上升沿检测]
    C --> C2[PS_P 按钮脉冲]
    C --> C3[CMD 命令输出]
    
    D --> D1[PL 脉冲输出]
    D --> D2[命令清除]
    
    B1 --> C1
    C1 --> C2
    C2 --> C3
    C3 --> D1
    D1 --> D2
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#f5e1ff
    style D fill:#e1ffe1
```

## 流程路径描述

### 命令生成路径：
开始 → PS按钮 → R_TRIG检测上升沿 → 生成PS_P脉冲 → CMD命令翻转
**功能**: 将按钮状态变化转换为命令信号

### PL检测路径：
开始 → EXE标志 → CMD命令 → 输出PL脉冲
**功能**: 检测命令执行状态

### 命令清除路径：
开始 → PL脉冲 → R_TRIG检测 → 清除CMD
**功能**: 命令执行后自动清除

## 逐帧功能分析

### Rung 1: 按钮脉冲检测

**功能描述**: 检测PS按钮状态的上升沿

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| PS | 按钮状态 | BOOL | 上升沿 |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| PS_P | 按钮脉冲 | BOOL |

**触发逻辑**:
- 调用C_RTRIG检测PS上升沿
- PS_P = R_TRIG.Q

**功能实现**: 
调用C_RTRIG功能块，当PS从FALSE变为TRUE时，输出一个扫描周期的脉冲PS_P。

### Rung 2: 命令生成

**功能描述**: 根据按钮脉冲生成命令信号

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| PS_P | 按钮脉冲 | BOOL | TRUE |
| CMD | 当前命令 | BOOL | TRUE/FALSE |
| CLR | 清除信号 | BOOL | FALSE |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| CMD | 命令输出 | BOOL |

**触发逻辑**:
- IF PS_P = TRUE AND CMD = FALSE AND CLR = FALSE THEN CMD = TRUE
- IF PS_P = TRUE AND CMD = TRUE AND CLR = FALSE THEN CMD = FALSE

**功能实现**: 
使用RS触发器逻辑，PS_P脉冲使CMD翻转，CLR信号可强制复位CMD。

### Rung 3: PL检测

**功能描述**: 检测命令执行状态

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| EXE | 执行标志 | BOOL | TRUE |
| CMD | 命令输出 | BOOL | TRUE |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| PL | 脉冲输出 | BOOL |

**触发逻辑**:
- PL = EXE AND CMD

**功能实现**: 
当EXE和CMD同时为TRUE时，输出PL脉冲。

### Rung 4: 命令清除

**功能描述**: 命令执行后自动清除

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| PL | 脉冲输出 | BOOL | 上升沿 |

**输出功能**:
| 信号名称 | 信号描述 | 信号类型 |
|----------|----------|----------|
| CMD | 命令输出 | BOOL |

**触发逻辑**:
- 调用C_RTRIG检测PL上升沿
- IF R_TRIG.Q = TRUE THEN CMD = FALSE

**功能实现**: 
调用C_RTRIG检测PL上升沿，使用MOVE_BOOL将CMD清零。

## 触发条件总结

### 命令生成条件
- **按钮按下**: PS上升沿触发
- **命令翻转**: CMD状态翻转

### PL输出条件
- **EXE = TRUE**: 执行标志有效
- **CMD = TRUE**: 命令有效

### 命令清除条件
- **PL上升沿**: 命令执行完成

## 实现功能总结

### 主要功能
1. **按钮脉冲检测**: 检测HMI按钮上升沿
2. **命令翻转**: 按钮按下时命令状态翻转
3. **PL输出**: 命令执行脉冲输出
4. **自动清除**: 命令执行后自动清除

### HMI系列对比
| 功能块 | 命令数 | 数据类型 | 特点 |
|--------|--------|----------|------|
| **C_HMI1** | **1** | **BOOL** | **单按钮控制** |
| C_HMI2 | 2 | BOOL | 双按钮控制 |
| C_HMI3 | 3 | BOOL | 三按钮控制 |
| C_HMI4 | 4 | BOOL | 四按钮控制 |
| C_HMI16 | 16 | WORD | 16位批量处理 |

## 关键信号说明

| 信号名称 | 信号描述 | 信号类型 | 用途 |
|----------|----------|----------|------|
| PS | 按钮状态 | BOOL | HMI按钮输入 |
| PS_P | 按钮脉冲 | BOOL | 上升沿脉冲 |
| CMD | 命令输出 | BOOL | 命令信号 |
| PL | 脉冲输出 | BOOL | 命令执行脉冲 |
| EXE | 执行标志 | BOOL | 命令执行使能 |
| CLR | 清除信号 | BOOL | 命令清除控制 |

## 调试技巧

### 调试步骤
1. 检查PS输入信号是否正常变化
2. 监控PS_P脉冲是否正确生成
3. 检查CMD命令输出是否正确翻转
4. 验证PL脉冲输出
5. 测试CLR清除功能

### 常见问题
1. **命令不生成**: 检查PS信号是否变化
2. **命令不清除**: 检查PL和CLR信号
3. **脉冲丢失**: 检查扫描周期是否过长

### 监控信号列表
- PS（按钮状态）
- PS_P（按钮脉冲）
- CMD（命令输出）
- PL（脉冲输出）
- EXE（执行标志）
- CLR（清除信号）
