# 工艺流程模型

## 1. 功能概述

工艺流程模型属于 MES 系统的基础模块，用于构建产品的工艺流程分类、工艺流程、工序单元 、工序设定值、工序结果参数等核心工艺数据，为生产执行、品质管理等业务模块提供工艺基础数据支撑。

**核心功能：**

- 工艺流程类别：维护工艺流程的分类体系，按生产工段进行分类
- 工序单元：维护标准化的工序单元库，可被多个工艺流程复用，实现工序标准化
- 工艺流程管理：维护具体产品的完整工艺流程，定义工序顺序、工序设定值、工序结果参数等


**功能对应截图** ：
![图片：工艺模型功能截图](/public/image/process_model/图片：工艺模型功能截图.png)

## 2. 术语说明

| 术语 | 定义 | 说明 |
|------|------|------|
| 工艺流程类别 | Process Category，对工艺流程进行工段分类管理的单元 | 用于区分不同生产工段的工艺流程 |
| 工艺流程 | Process Flow，定义产品从原材料到成品的完整加工顺序 | 又称工艺路线或生产流程 |
| 工序单元 | Process Unit，标准化的小工序模块 | 可被多个工艺流程复用 |
| 工序设定值 | Process Set Value，工序作业的标准参数 | 如温度、压力、时间等，属于工序单元的属性 |
| 工序结果参数 | Process Result Parameter，工序作业的实际结果记录 | 用于工艺监控和品质追溯，属于工序单元的属性 |
| 设备类别 | Device Category，对设备的类别进行分类管理的单元 | 用于区分不同类型的设备，属于工序单元的属性 |
| 计算脚本 | Process Calculation Script，工序接口执行额外的代码逻辑 | 用于生产执行中进行复杂计算，属于工序的属性 |
| 通道异常记录 | Channel Exception Record，记录工序通道异常的详细信息 | 用于设备点位预警，属于工序的属性 |

**数据模型关系说明：**

```mermaid
flowchart TB
    subgraph 工艺流程类别
        CA[工艺流程类别A]
        CB[工艺流程类别B]
    end

    subgraph 工艺流程
        PA1[工艺流程A1]
        PA2[工艺流程A2]
        PB1[工艺流程B1]
    end

    subgraph 工序单元
        U1[工序单元1]
        U2[工序单元2]
        U3[工序单元3]
    end

    CA -->|1:N| PA1
    CA -->|1:N| PA2
    CB -->|1:N| PB1

    PA1 --- U1
    PA1 --- U2
    PA2 --- U2
    PB1 --- U2
    PB1 --- U3

    U1 -->|属性| PSV1[工序设定值]
    U1 -->|属性| PRP1[工序结果参数]
    U1 -->|属性| DC1[设备类别]

    U2 -->|属性| PSV2[工序设定值]
    U2 -->|属性| PRP2[工序结果参数]
    U2 -->|属性| DC2[设备类别]
```

**关系说明：**

| 关系类型 | 说明 |
|---------|------|
| 工艺流程类别 → 工艺流程 | **1 对 N**：一个工艺流程类别可以包含多个工艺流程 |
| 工艺流程 ↔ 工序单元 | **N 对 M**：一个工艺流程可以引用多个工序单元，一个工序单元可被多个工艺流程复用 |
| 工序单元 → 工序设定值 | **属性**：工序设定值是工序单元的属性之一 |
| 工序单元 → 工序结果参数 | **属性**：工序结果参数是工序单元的属性之一 |
| 工序单元 → 设备类别 | **属性**：设备类别是工序单元的属性之一 |

**简化关系图：**

```mermaid
flowchart LR
    A[工艺流程类别] -->|1:N| B[工艺流程]
    B -.->|N:M| C[工序单元]

    C -->|包含| D[工序设定值]
    C -->|包含| E[工序结果参数]
    C -->|包含| F[设备类别]
```


## 3. 工艺流程模型交互流程

### 3.1 工艺流程类别管理

#### 3.1.1 工艺流程类别说明

工艺流程类别是对工艺流程进行工段分类管理的单元，用于区分不同生产工段的工艺流程。

**功能对应截图** ：
![图片：工艺流程类别列表截图](/public/image/process_model/图片：工艺流程类别列表截图.png)

#### 3.1.2 新增工艺流程类别
**操作步骤：**

1. 进入【生产配置】→【工艺模型】→【工艺流程类别】
2. 点击【新增】按钮
3. 填写基本信息
4. 点击【保存】完成类别创建

**字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 工艺流程类别编码 | 类别的唯一标识代码 | 是 |
| 工艺流程类别名称 | 类别的名称，如"**工段" | 是 |
| 备注 | 其他补充说明信息 | 否 |

**【重要】** 类别编码一旦启用不允许修改和删除，请在创建时仔细确认。

**功能对应截图** ：
![图片：工艺流程类别设置截图](/public/image/process_model/图片：工艺流程类别设置截图.png)

#### 3.1.3 工艺流程类别查询

**查询条件：**

| 查询条件 | 说明 |
|---------|------|
| 类别编码 | 按类别编码精确查询 |
| 类别名称 | 按类别名称模糊查询 |

### 3.2 工序单元管理

#### 3.2.1 工序单元说明

工序单元是标准化的小工序模块，是构成工艺流程的基本单位。工序单元具有通用性，可被多个工艺流程引用，实现工序的标准化复用。

**工序单元特点：**

- 标准化：定义统一的工序名称、工序编码、作业规范
- 复用性：可被多个工艺流程引用，无需重复创建
- 可配置：支持配置工序的预设工艺参数、预设结果参数

**功能对应截图** ：

![图片：工序单元列表截图](/public/image/process_model/图片：工序单元列表截图.png)

#### 3.2.2 新增工序单元

**操作步骤：**

1. 进入【生产配置】→【工艺模型】→【工序单元】
2. 点击【新增】按钮
3. 填写工序单元基本信息
4. 点击【确定】完成工序单元创建

**字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 工序单元编码 | 工序单元的唯一标识代码 | 是 |
| 工序单元名称 | 工序单元的名称，如"SMT贴装" | 是 |
| 设备类别 | 完成该工序的设备类别，如"SMT" | 是 |
| 备注 | 其他补充说明信息 | 否 |

**【注意】** 工序单元创建后，不允许修改编码，请在创建时仔细确认。
**【重要】** 工序单元被工艺流程引用后，不允许删除，请在创建时仔细确认。

**功能对应截图** ：

![图片：新增工序单元截图](/public/image/process_model/图片：新增工序单元截图.png)
 
#### 3.2.3 预设设定值

预设设定值是预设该工序的标准参数，如温度、压力、时间等，工艺流程新增工序的时候会按照预设设定值默认配置。

**功能对应截图** ：

![图片：预设设定值对话框截图](/public/image/process_model/图片：预设设定值对话框截图.png)

**操作步骤：**

1. 在【工序单元】页面，点击需要配置设定值的工序单元
2. 点击【预设定值】按钮，弹出预设设定值对话框
3. 填写设定值参数
4. 点击【确定】完成设定值配置

**【重要】** 根据工序单元的类别，预设的设定值对话框也会不同。

以下是MES系统预设的设定值对话框种类：

- 充放电相关：![图片：分容预设设定值对话框截图](/public/image/process_model/图片：分容预设设定值对话框截图.png)
- 分选相关：![图片：分选预设设定值对话框截图](/public/image/process_model/图片：分选预设设定值对话框截图.png)
- OCV相关：![图片：预设设定值对话框截图](/public/image/process_model/图片：预设设定值对话框截图.png)
- 静置相关：![图片：静置预设设定值对话框截图](/public/image/process_model/图片：静置预设设定值对话框截图.png)
- DCIR相关：![图片：DCIR预设设定值对话框截图](/public/image/process_model/图片：DCIR预设设定值对话框截图.png)

除了以上之外，MES还提供表格形式的预设设定值对话框，用于配置复杂的设定值。
其余：![图片：常规预设设定值对话框截图](/public/image/process_model/图片：预设设定值对话框截图.png)

**【重要】** 如果现场有特殊需求，需要自定义设定值对话框内容，需要联系MES系统管理员进行开发。

#### 3.2.4 预设结果参数

预设结果参数是预设该工序的实际结果记录，如电压、电流、时间等，工艺流程新增工序的时候会按照预设结果参数默认配置。

**功能对应截图** ：

![图片：预设结果参数对话框截图](/public/image/process_model/图片：预设结果参数对话框截图.png)

##### 3.2.4.1 新增结果参数

**操作步骤：**

1. 在【工序单元】页面，点击需要配置结果参数的工序单元
2. 点击【预设结果参数】按钮，弹出预设结果参数对话框
3. 点击【新增一行】按钮，弹出新增结果参数对话框
4. 填写结果参数参数
5. 点击【确定】完成结果参数配置

**【重要】** 新增之后，系统会默认增加 进站时间(START_TIME)、出站时间(FINISH_TIME)、设备编码(DEVICE_CODE)三个结果参数。

**字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 参数 | 结果参数的唯一标识代码 | 是 |
| 名称 | 结果参数的名称，如"电压" | 是 |
| 类型 | FLOAT/INT/VARCHAR/TEXT/TIMESTAMP | 是 |
| 是否唯一 | 结果参数是否会根据工步数量而变化，例如分容、化成等结果参数会根据工步数量变化，10个工步就有10个结果参数；而二封或者注液等工序没有工步所以唯一 | 是 |
| 是否上传 | 结果参数上传的时候根据是否上传进行判断，如果是则上传到MES系统，否则不上传 | 是 |
| 备注 | 其他补充说明信息 | 否 |

**功能对应截图** ：

![图片：新增预设结果参数对话框截图](/public/image/process_model/图片：新增预设结果参数对话框截图.png)

##### 3.2.4.2 导入预设结果参数
导入预设结果参数是批量导入该工序的结果参数，如电压、电流、时间等。

**操作步骤：**

1. 在【工序单元】页面，点击需要配置结果参数的工序单元
2. 点击【预设结果参数】按钮，弹出预设结果参数对话框
3. 点击【导入】按钮，弹出导入结果参数对话框
4. 点击【选择文件】，上传包含结果参数的xlsx文件

**【注意】** 导入的结果参数如果与已有的结果参数编码或者名称重复，会弹出报错。
**【注意】** 导入的xlsx文件MES会提供下载，用户可以根据下载的文件进行修改后重新导入。

**功能对应截图** ：

![图片：导入结果参数的按钮和文件对话框截图](/public/image/process_model/图片：导入结果参数的按钮和文件对话框截图.png)
![图片：导入结果参数文件截图](/public/image/process_model/图片：导入结果参数文件截图.png)

#### 3.2.5 工序单元查询

**查询条件：**

| 查询条件 | 说明 |
|---------|------|
| 工序单元编码 | 按工序单元编码精确查询 |
| 工序单元名称 | 按工序单元名称模糊查询 |
| 设备类别 | 按设备类别筛选 |

**功能对应截图** ：
![图片：工序单元查询列表截图](/public/image/process_model/图片：工序单元查询列表截图.png)

### 3.3 工艺流程管理

#### 3.3.1 工艺流程说明

工艺流程是定义产品从原材料到成品的完整加工顺序的核心数据，包含工序排列、工序名称、工序编码、工艺设定值、工艺结果参数等信息。

**功能对应截图** ：
![图片：工艺流程列表截图](/public/image/process_model/图片：工艺流程列表截图.png)

#### 3.3.2 新增工艺流程

**操作步骤：**

1. 进入【生产配置】→【工艺模型】→【工艺流程】
2. 点击【新增】按钮
3. 填写工艺流程基本信息
4. 点击【保存】完成工艺流程创建

**字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 工艺流程编码 | 工艺流程的唯一标识代码 | 是 |
| 工艺流程名称 | 工艺流程的名称 | 是 |
| 工艺流程类别 | 关联的工艺流程类别 | 是 |
| 产品代码 | 关联的产品型号 | 是 |
| 备注 | 其他补充说明信息 | 否 |

**【重要】** 工艺流程被生产批次绑定后，不允许删除。


**功能对应截图** ：
![图片：新增工艺流程截图](/public/image/process_model/图片：新增工艺流程截图.png)

#### 3.3.3 工艺流程、工序单元、工序的关系

```mermaid
flowchart TB
    A[工艺流程类别] -->|1:N| B[工艺流程A]
    A -->|1:N| C[工艺流程B]

    B --> D[工序1]
    B --> E[工序2]
    B --> F[工序3]
    C --> G[工序2]
    C --> H[工序4]
    C --> F

    D --> I[工序单元：贴装]
    E --> J[工序单元：焊接]
    F --> K[工序单元：检测]
    G --> I
    H --> L[工序单元：组装]
```
**【注意】** 工序编码和工序名称是系统自动分配的，分配规则是工艺流程的唯一ID拼接工序单元编码，用户无需手动输入，用户可以根据需要修改名称，但是编码不能修改。


### 3.4 设置工序（工艺详情）

工艺详情页面是用于配置工艺流程的详细信息，包括新增工序、删除工序、编辑设定值、编辑结果参数、设置计算脚本等。

**功能对应截图** ：

![图片：工艺详情页面截图](/public/image/process_model/图片：工艺详情页面截图.png)

#### 3.4.1 设置工序（工艺详情）说明

**操作步骤：**
1. 进入【生产配置】→【工艺模型】→【工艺流程】
2. 点击【设置工序】按钮
3. 进入【工艺详情】页面

**功能说明：**
- 新增工序：配置工艺流程的工序顺序、工序单元、是否开启通道异常记录等信息
- 删除工序：配置工艺流程的工序顺序、工序单元、是否开启通道异常记录等信息
- 编辑设定值：为每个工序配置标准的作业参数，如温度、压力、时间等
- 编辑结果参数：为每个工序配置实际的结果记录，如电压、电流、时间等
- 设置计算脚本：为每个工序配置实际的结果记录，如电压、电流、时间等


#### 3.4.2 新增工序
**操作步骤：**

1. 在【工艺流程】页面，点击需要配置工艺流程的【设置工序】按钮，进入到【工艺详情】页面
2. 点击新增按钮，弹出新增工序对话框
3. 选择工序单元，系统会自动生成工序编码和工序名称
4. 选择是否开启通道异常记录
5. 点击【确定】完成工序配置

**工序配置字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 工序单元 | 从工序单元库选择的工序 | 是 |
| 工序编码 | 系统自动生成的工序编码，格式为工艺流程唯一id+工序单元编码 | 是 |
| 工序名称 | 系统自动生成的工序名称，格式为工艺流程唯一id+工序单元名称 | 是 |
| 开启通道异常记录 | 是否开启对该工序的通道异常记录 | 否 |
| 备注 | 其他补充说明信息 | 否 |

**【注意】** 工序删除后，相关的设定值和结果参数也会被删除，请谨慎操作。
**【重要】** 工艺流程被生产批次绑定后，工序不允许删除。

**功能对应截图** ：
![图片：新增工序对话框截图](/public/image/process_model/图片：新增工序对话框截图.png)

#### 3.4.3 工序设定值
工序设定值是工序作业的标准参数，如温度、压力、时间等。

**操作步骤：**

1. 在【工艺详情】页面，点击需要配置设定值的工序
2. 点击【新增设定值】按钮，弹出新增设定值对话框
3. 填写设定值参数、单位、最小值、最大值、正常值、警告值、报警值
4. 点击【确定】完成设定值配置

**【注意】** 如果该工序的工序单元设置了预设设定值，系统会自动填充预设设定值，用户无需手动配置。
**【重要】** 工序设定值设备会通过MES接口 [get_battery_process_setting]() 和 [get_tray_process_setting]() 进行获取。

**功能对应截图** ：
![图片：工序设定值对话框截图](/public/image/process_model/图片：工序设定值对话框截图.png)

#### 3.4.4 工序结果参数
工序结果参数是工序作业的实际结果记录，如电压、电流、时间等。

**【注意】** 如果该工序的工序单元设置了预设结果参数，系统会自动填充预设结果参数，用户无需手动配置。
**【重要】** 如果该工序的结果参数是非唯一的，系统会在设定值确定之后，根据设定值的工步数量动态生成结果参数。

> 例如，分容工序的结果参数是电压、电流、电压等，根据工步数量生成第一个工步的电压、电流、电压，和第二个工步的电压、电流、电压等，直到最后一个工步。

**功能对应截图** ：
![图片：工序结果参数对话框截图](/public/image/process_model/图片：工序结果参数对话框截图.png)

#### 3.4.5 计算脚本

计算脚本是在设备调用接口的过程中，根据设置的脚本触发位置，例如接口执行前或者执行后触发复杂计算的脚本，计算脚本用PHP代码编写，用于项目基于接口追加特定的复杂逻辑。

**功能对应截图** ：
![图片：计算脚本对话框截图](/public/image/process_model/图片：计算脚本对话框截图.png)

##### 3.4.5.1 新增计算脚本

**操作步骤：**
1. 在【工艺详情】页面，点击需要配置计算脚本的工序
2. 点击【计算脚本】按钮，弹出新增计算脚本列表对话框
3. 点击【新增】按钮，弹出新增计算脚本对话框
4. 填写计算脚本基本信息，包括脚本名称、触发位置、脚本内容
5. 点击【计算脚本编辑器】按钮，弹出计算脚本编辑器对话框
6. 在计算脚本编辑器中，编写PHP代码
7. 点击【保存】按钮，保存计算脚本
8. 点击【确定】完成计算脚本配置

**功能对应截图** ：
![图片：新增计算脚本对话框截图](/public/image/process_model/图片：新增计算脚本对话框截图.png)
![图片：计算脚本编辑器对话框截图](/public/image/process_model/图片：计算脚本编辑器对话框截图.png)

**【注意】** 脚本编辑器有语法高亮、代码提示、格式化等功能
**【注意】** 脚本编辑器有预设好的函数库，用户可以直接拖拽进行使用
**【重要】** 脚本编辑器有是保存计算某个结果参数数据，需要结果参数里有对应的参数，否则会报错。

##### 3.4.5.2 计算脚本使用案例
**案例1：**
例如需要增加OCV2的K值计算，从后台设置到执行和导出显示流程：

```mermaid
sequenceDiagram
    participant 用户 as 用户
    participant MES as MES系统
    participant 设备 as 设备

    用户->>MES: 1. 编辑计算脚本（设置触发位置：结束位置）
    MES->>MES: 2. 保存计算脚本配置

    设备->>MES: 3. 设备上传数据（OCV2数据）
    MES->>MES: 4. 判断触发位置是否为"结束位置"
    MES->>MES: 5. 加载对应的计算脚本
    MES->>MES: 6. 执行脚本逻辑（计算K值）
    MES->>MES: 7. 保存计算结果到结果参数
    MES->>用户: 8. 返回计算完成结果
```

**流程说明：**

| 步骤 | 执行者 | 操作 | 说明 |
|------|--------|------|------|
| 1 | 用户 | 编辑计算脚本 | 设置触发位置为"结束位置" |
| 2 | MES | 保存脚本配置 | 保存脚本内容和触发位置 |
| 3 | 设备 | 上传数据 | 设备调用接口上传OCV2数据 |
| 4 | MES | 判断触发位置 | 检查触发位置是否为"结束位置" |
| 5 | MES | 加载脚本 | 根据触发位置加载对应脚本 |
| 6 | MES | 执行计算 | 运行脚本逻辑计算K值 |
| 7 | MES | 保存结果 | 将计算结果保存到结果参数 |
| 8 | MES | 返回结果 | 向用户展示计算完成状态 |


#### 3.4.6 查看日志
日志是记录工艺详情页面的操作日志，包括新增、删除、编辑工序、配置设定值、配置结果参数、配置计算脚本等操作。

**操作步骤：**
1. 在【工艺详情】页面，点击【查看日志】按钮
2. 弹出日志对话框，显示所有操作日志

**功能对应截图** ：
![图片：查看日志对话框截图](/public/image/process_model/图片：查看日志对话框截图.png)


