# C_HMI4 功能块分析报告

## 基本信息

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

## 功能概述

C_HMI4是一个4位HMI（人机界面）接口功能块，用于处理四个独立的HMI按钮命令。该功能块通过检测按钮状态的上升沿来生成命令信号，并支持命令自动清除功能。四个命令之间具有多选一互锁功能，确保同一时间只有一个命令有效。

### 应用场景
- **四档选择控制**：用于四档速度选择
- **四工位控制**：用于四个工位的选择控制
- **四模式切换**：用于四种工作模式的切换

### 功能特点
1. **上升沿检测**：使用R_TRIG检测按钮上升沿
2. **命令生成**：根据按钮脉冲生成命令信号
3. **多选一互锁**：同一时间只有一个命令有效
4. **自动清除**：命令执行后自动清除

## 思维导图

```mermaid
graph TD
    A[C_HMI4 4位HMI接口] --> B[输入处理模块]
    A --> C[命令生成模块]
    A --> D[输出处理模块]
    
    B --> B1[PS1~PS4 按钮状态]
    B --> B2[EXE 执行标志]
    B --> B3[CLR 清除信号]
    
    C --> C1[R_TRIG上升沿检测]
    C --> C2[PS1_P~PS4_P 按钮脉冲]
    C --> C3[CMD1~CMD4 命令输出]
    C --> C4[多选一互锁逻辑]
    
    D --> D1[PL1~PL4 脉冲输出]
    D --> D2[命令清除]
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#f5e1ff
    style D fill:#e1ffe1
```

## 流程路径描述

### 命令1生成路径：
开始 → PS1按钮 → R_TRIG检测上升沿 → 生成PS1_P脉冲 → 互锁检查 → CMD1命令翻转
**功能**: 将按钮1状态变化转换为命令信号

### 命令2~4生成路径：
同理，各按钮独立检测，通过互锁逻辑确保多选一
**功能**: 将各按钮状态变化转换为命令信号

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

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

## 逐帧功能分析

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

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

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

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

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

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

### Rung 2: 命令1生成

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

**输入条件**:
| 信号名称 | 信号描述 | 信号类型 | 触发值 |
|----------|----------|----------|--------|
| PS1_P | 按钮1脉冲 | BOOL | TRUE |
| CMD1 | 当前命令1 | BOOL | TRUE/FALSE |
| CMD2/CMD3/CMD4 | 其他命令状态 | BOOL | FALSE（互锁） |
| CLR | 清除信号 | BOOL | FALSE |

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

**触发逻辑**:
- IF PS1_P = TRUE AND CMD2=FALSE AND CMD3=FALSE AND CMD4=FALSE AND CLR=FALSE THEN CMD1翻转

**功能实现**: 
使用RS触发器逻辑，PS1_P脉冲使CMD1翻转，其他CMD作为互锁条件，CLR信号可强制复位CMD1。

### Rung 3~4: 按钮2脉冲检测与命令2生成

**功能描述**: 检测PS2按钮并生成CMD2命令

**触发逻辑**:
- IF PS2_P = TRUE AND CMD1=FALSE AND CMD3=FALSE AND CMD4=FALSE AND CLR=FALSE THEN CMD2翻转

### Rung 5~6: 按钮3脉冲检测与命令3生成

**功能描述**: 检测PS3按钮并生成CMD3命令

**触发逻辑**:
- IF PS3_P = TRUE AND CMD1=FALSE AND CMD2=FALSE AND CMD4=FALSE AND CLR=FALSE THEN CMD3翻转

### Rung 7~8: 按钮4脉冲检测与命令4生成

**功能描述**: 检测PS4按钮并生成CMD4命令

**触发逻辑**:
- IF PS4_P = TRUE AND CMD1=FALSE AND CMD2=FALSE AND CMD3=FALSE AND CLR=FALSE THEN CMD4翻转

### Rung 9: PL检测

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

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

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

**触发逻辑**:
- PL1 = EXE AND CMD1
- PL2 = EXE AND CMD2
- PL3 = EXE AND CMD3
- PL4 = EXE AND CMD4

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

### Rung 10~12: 命令清除

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

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

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

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

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

## 触发条件总结

### 命令生成条件
| 命令 | 触发条件 | 互锁条件 |
|------|----------|----------|
| CMD1 | PS1上升沿 | CMD2=OFF, CMD3=OFF, CMD4=OFF |
| CMD2 | PS2上升沿 | CMD1=OFF, CMD3=OFF, CMD4=OFF |
| CMD3 | PS3上升沿 | CMD1=OFF, CMD2=OFF, CMD4=OFF |
| CMD4 | PS4上升沿 | CMD1=OFF, CMD2=OFF, CMD3=OFF |

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

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

## 实现功能总结

### 主要功能
1. **按钮脉冲检测**: 检测HMI按钮上升沿
2. **命令翻转**: 按钮按下时命令状态翻转
3. **多选一互锁**: 同一时间只有一个命令有效
4. **PL输出**: 命令执行脉冲输出
5. **自动清除**: 命令执行后自动清除

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

## 关键信号说明

| 信号名称 | 信号描述 | 信号类型 | 用途 |
|----------|----------|----------|------|
| PS1~PS4 | 按钮1~4状态 | BOOL | HMI按钮输入 |
| PS1_P~PS4_P | 按钮1~4脉冲 | BOOL | 上升沿脉冲 |
| CMD1~CMD4 | 命令输出1~4 | BOOL | 命令信号 |
| PL1~PL4 | 脉冲输出1~4 | BOOL | 命令执行脉冲 |
| EXE | 执行标志 | BOOL | 命令执行使能 |
| CLR | 清除信号 | BOOL | 命令清除控制 |

## 调试技巧

### 调试步骤
1. 检查PS1~PS4输入信号是否正常变化
2. 监控PS1_P~PS4_P脉冲是否正确生成
3. 检查CMD1~CMD4命令输出是否正确翻转
4. 验证多选一互锁功能是否正常
5. 验证PL脉冲输出
6. 测试CLR清除功能

### 常见问题
1. **命令不生成**: 检查PS信号是否变化
2. **命令不清除**: 检查PL和CLR信号
3. **互锁失效**: 检查各CMD互锁触点
4. **多个命令同时有效**: 检查互锁逻辑

### 监控信号列表
- PS1~PS4（按钮状态）
- PS1_P~PS4_P（按钮脉冲）
- CMD1~CMD4（命令输出）
- PL1~PL4（脉冲输出）
- EXE（执行标志）
- CLR（清除信号）
