Initial commit
This commit is contained in:
545
docs/signal-table-excel-generator-design.md
Normal file
545
docs/signal-table-excel-generator-design.md
Normal file
@@ -0,0 +1,545 @@
|
||||
# SignalTable_CZ Excel 生成器设计文档 v6
|
||||
|
||||
## 1. 项目目标
|
||||
|
||||
本项目基于 `C:\work\Project\Excel` 的 Vue 前端项目,建设一个用于维护并生成标准 `SignalTable_CZ.xlsx` 的网页工具。
|
||||
|
||||
最终目标是:当项目需要生成 SCADA 可读取的信号表 Excel 时,用户打开网页,维护设备模块、工位和变量配置,然后点击 `生成 Excel`,得到标准 Excel 文件。
|
||||
|
||||
当前 v6 设计重点是把原来的:
|
||||
|
||||
```text
|
||||
一个设备 = 一个工位
|
||||
```
|
||||
|
||||
调整为:
|
||||
|
||||
```text
|
||||
一个设备模块 = 多个工位
|
||||
同一个设备模块内多个工位共用同一套 MES_基本变量原始数据
|
||||
```
|
||||
|
||||
本次只更新 `.md` 设计文档,不进行 Vue 代码修改。
|
||||
|
||||
## 2. Excel 输出范围
|
||||
|
||||
最终生成的 Excel 只包含两个 Sheet:
|
||||
|
||||
1. `MES_基本变量原始数据`
|
||||
2. `设备类型对应表`
|
||||
|
||||
不生成以下 Sheet:
|
||||
|
||||
- `工厂接口配置`
|
||||
- `变量类型代码说明`
|
||||
- `配置_信号`
|
||||
|
||||
Sheet 名称必须完全一致,不能改名、不能多空格、不能使用英文替代。
|
||||
|
||||
## 3. 设计变更说明
|
||||
|
||||
### 3.1 旧设计废弃点
|
||||
|
||||
v6 开始废弃以下旧设计:
|
||||
|
||||
- 不再认为左侧设备列表中的一行就是一个工位。
|
||||
- 不再让 `devices[]` 直接对应 `设备类型对应表` 的每一行。
|
||||
- 不再让一个设备模块只能生成一行 `设备类型对应表`。
|
||||
- 不再让一个设备模块只能维护一个工位。
|
||||
|
||||
### 3.2 新设计核心
|
||||
|
||||
v6 中左侧设备列表展示的是设备模块。
|
||||
|
||||
一个设备模块内部可以维护多个工位,工位只维护自身工位参数:
|
||||
|
||||
- 工位名称
|
||||
- 数据来源
|
||||
- DB
|
||||
- 是否启用
|
||||
|
||||
同一个设备模块只维护一份共享 `MES_基本变量原始数据`。设备模块下所有工位导出时都使用这同一套变量,再按各自工位参数展开。
|
||||
|
||||
导出 Excel 时,当前选中的设备模块会导出其内部所有工位。
|
||||
|
||||
## 4. 设备模块与工位关系
|
||||
|
||||
### 4.1 设备模块
|
||||
|
||||
设备模块用于描述一组共用设备信息的工位集合。
|
||||
|
||||
设备模块字段:
|
||||
|
||||
| 字段 | 说明 | 是否必填 |
|
||||
| --- | --- | --- |
|
||||
| 设备名称 | 设备模块显示名称,例如“放油设备” | 是 |
|
||||
| 设备型号 | PLC 或设备型号,例如 `S1500` | 是 |
|
||||
| 设备IP | PLC 或设备通信 IP | 是 |
|
||||
| 是否启用 | 控制该设备模块是否启用 | 是 |
|
||||
|
||||
设备模块示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "dev-001",
|
||||
"deviceName": "放油设备",
|
||||
"deviceModel": "S1500",
|
||||
"deviceIp": "192.168.1.60",
|
||||
"enabled": 1,
|
||||
"stations": [],
|
||||
"variables": []
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 工位
|
||||
|
||||
工位属于设备模块,一个设备模块可以包含多个工位。
|
||||
|
||||
工位字段:
|
||||
|
||||
| 字段 | 说明 | 是否必填 |
|
||||
| --- | --- | --- |
|
||||
| 工位名称 | SCADA 工位号,例如 `ST04` | 是 |
|
||||
| 数据来源 | 默认等于设备名称,写入 `设备类型对应表.数据来源` | 是 |
|
||||
| DB | 写入 `设备类型对应表.DB` 和变量 `DbName` | 是 |
|
||||
| 是否启用 | 写入 `设备类型对应表.是否启用` | 是 |
|
||||
| 基本变量原始数据 | 不保存在工位中,由设备模块统一维护 | 否 |
|
||||
|
||||
工位示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "station-001",
|
||||
"deviceName": "放油前",
|
||||
"stationName": "ST04",
|
||||
"dataSource": "放油前",
|
||||
"deviceModel": "S1500",
|
||||
"deviceIp": "192.168.1.60",
|
||||
"db": "DB10000",
|
||||
"enabled": 1,
|
||||
"variables": []
|
||||
}
|
||||
```
|
||||
|
||||
## 5. 多工位数据结构
|
||||
|
||||
推荐数据结构:
|
||||
|
||||
```json
|
||||
{
|
||||
"devices": [
|
||||
{
|
||||
"id": "dev-001",
|
||||
"deviceName": "放油设备",
|
||||
"deviceModel": "S1500",
|
||||
"deviceIp": "192.168.1.60",
|
||||
"enabled": 1,
|
||||
"stations": [
|
||||
{
|
||||
"id": "station-001",
|
||||
"deviceName": "放油前",
|
||||
"stationName": "ST04",
|
||||
"dataSource": "放油前",
|
||||
"deviceModel": "S1500",
|
||||
"deviceIp": "192.168.1.60",
|
||||
"db": "DB10000",
|
||||
"enabled": 1
|
||||
},
|
||||
{
|
||||
"id": "station-002",
|
||||
"deviceName": "放油后",
|
||||
"stationName": "ST05",
|
||||
"dataSource": "放油后",
|
||||
"deviceModel": "S1500",
|
||||
"deviceIp": "192.168.1.60",
|
||||
"db": "DB10001",
|
||||
"enabled": 1
|
||||
}
|
||||
],
|
||||
"variables": []
|
||||
}
|
||||
],
|
||||
"variables": []
|
||||
}
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `devices[]` 保存设备模块。
|
||||
- `devices[].stations[]` 保存该设备模块下的工位。
|
||||
- `devices[].variables[]` 保存该设备模块共享的 38 字段变量。
|
||||
- 顶层 `variables[]` 仅作为全局默认变量模板来源。
|
||||
- 新增设备模块时,从全局默认变量模板复制一份到该设备模块。
|
||||
- 新增工位时不复制变量,只新增工位参数。
|
||||
- 同一设备模块下所有工位共用 `devices[].variables[]`。
|
||||
|
||||
## 6. 页面整体设计
|
||||
|
||||
页面继续采用左右分栏结构。
|
||||
|
||||
左侧:
|
||||
|
||||
- 设备模块列表
|
||||
- 设备模块新增
|
||||
- 设备模块编辑
|
||||
- 设备模块删除
|
||||
- 查询设备模块
|
||||
- 展开/收起设备列表
|
||||
|
||||
右侧:
|
||||
|
||||
- 当前设备模块的工位切换区
|
||||
- 当前设备模块共享的 `MES_基本变量原始数据`
|
||||
|
||||
页面行为:
|
||||
|
||||
- 点击左侧设备模块,右侧显示该设备模块下的工位。
|
||||
- 点击右侧某个工位,变量表用该工位参数预览同一套共享变量。
|
||||
- 右侧只做工位切换和变量预览,不提供工位新增、编辑、删除。
|
||||
- 修改变量表中的任意变量,会影响当前设备模块下所有工位的导出结果。
|
||||
- ST04、ST05 在页面上看到的是同一套变量,只是 `工位号 / 数据来源 / IP / DbName / TagID` 按当前选中工位预览。
|
||||
- 未选择设备模块时,右侧显示空状态。
|
||||
- 选择设备模块但没有工位时,右侧提示先新增工位。
|
||||
|
||||
## 7. 设备模块整表编辑
|
||||
|
||||
设备模块新增/编辑弹窗采用整表编辑模式,不再单独摆放 `设备名称 / 设备型号 / 设备IP / 是否启用` 表单。
|
||||
|
||||
弹窗主体是一张配置表,每一行都是一条完整配置,并会在导出 Excel 时生成 `设备类型对应表` 的一行。
|
||||
|
||||
表格字段:
|
||||
|
||||
```text
|
||||
设备名称
|
||||
工位名称
|
||||
设备型号
|
||||
设备IP
|
||||
DB
|
||||
是否启用
|
||||
操作
|
||||
```
|
||||
|
||||
### 7.1 新增配置行
|
||||
|
||||
点击弹窗左上角 `+` 后,立即新增一条完整配置行。
|
||||
|
||||
默认生成规则:
|
||||
|
||||
- `设备名称` 默认取当前第一行设备名称,若没有则为空。
|
||||
- `工位名称` 自动递增,例如 `ST06`。
|
||||
- `设备型号` 默认取当前第一行设备型号,若没有则为 `S1500`。
|
||||
- `设备IP` 默认取当前第一行设备IP。
|
||||
- `DB` 自动递增,例如 `DB10002`。
|
||||
- `是否启用` 默认为 `1`。
|
||||
|
||||
校验规则:
|
||||
|
||||
- `设备名称` 不能为空。
|
||||
- `工位名称` 不能为空。
|
||||
- `设备型号` 不能为空。
|
||||
- `设备IP` 不能为空。
|
||||
- `DB` 不能为空。
|
||||
|
||||
### 7.2 编辑配置行
|
||||
|
||||
所有字段都在表格单元格中直接编辑。
|
||||
|
||||
保存后:
|
||||
|
||||
- 设备模块左侧列表使用第一行配置作为显示信息。
|
||||
- 导出 Excel 时以每行最新配置为准。
|
||||
- 导出 Excel 时以最新网页设置为准。
|
||||
|
||||
### 7.3 删除配置行
|
||||
|
||||
删除配置行时:
|
||||
|
||||
- 删除该行配置。
|
||||
- 不删除设备模块共享变量。
|
||||
- 导出 Excel 不再包含该行。
|
||||
|
||||
## 8. 右侧基本变量详情设计
|
||||
|
||||
右侧变量表展示当前设备模块共享的 `MES_基本变量原始数据`。
|
||||
|
||||
如果当前选中了某个工位,变量表中的工位相关字段按该工位做预览;但保存变量时仍保存到设备模块共享变量中。
|
||||
|
||||
变量表必须完整保留 38 个字段:
|
||||
|
||||
```text
|
||||
TagID
|
||||
TagName
|
||||
工位号
|
||||
数据来源
|
||||
IP
|
||||
TagTypeID
|
||||
TagLong
|
||||
DbName
|
||||
变量类型
|
||||
变量地址
|
||||
变量其它
|
||||
演示偏移
|
||||
列位置
|
||||
测量位置
|
||||
测量项目
|
||||
测量单位
|
||||
变量类型代码
|
||||
变量类型名称
|
||||
机体类型
|
||||
线体类型
|
||||
TagAdr
|
||||
TagAdrDemo
|
||||
是否启用
|
||||
监控组
|
||||
监控时间间隔
|
||||
OpcServer_OPNAME
|
||||
变量特点
|
||||
是否监控
|
||||
变量排序
|
||||
工序能力
|
||||
监控属性代码
|
||||
测量位置短
|
||||
上限值
|
||||
下限值
|
||||
理论值
|
||||
IsGoodBad
|
||||
IsSaveToSql
|
||||
IsWebSocket
|
||||
```
|
||||
|
||||
变量操作:
|
||||
|
||||
- 新增变量
|
||||
- 编辑变量
|
||||
- 删除变量
|
||||
- 复制变量
|
||||
|
||||
导出前强制覆盖字段:
|
||||
|
||||
```text
|
||||
工位号 = 当前工位.工位名称
|
||||
数据来源 = 当前工位.数据来源
|
||||
IP = 当前设备模块.设备IP
|
||||
DbName = 当前工位.DB
|
||||
```
|
||||
|
||||
`TagID` 导出规则:
|
||||
|
||||
```text
|
||||
TAG_0000001 -> ST04_TAG_0000001
|
||||
```
|
||||
|
||||
如果 `TagID` 已经以当前工位名开头,则不重复添加。
|
||||
|
||||
## 9. Excel 生成规则 v6
|
||||
|
||||
点击 `生成 Excel` 时,只导出当前选中的设备模块。
|
||||
|
||||
### 9.1 设备类型对应表
|
||||
|
||||
导出列固定为:
|
||||
|
||||
```text
|
||||
设备IP
|
||||
设备类型
|
||||
DB
|
||||
是否启用
|
||||
工位号
|
||||
数据来源
|
||||
```
|
||||
|
||||
导出来源:
|
||||
|
||||
| Excel 列 | 来源 |
|
||||
| --- | --- |
|
||||
| 设备IP | 当前配置行.设备IP |
|
||||
| 设备类型 | 当前配置行.设备型号 |
|
||||
| DB | 当前配置行.DB |
|
||||
| 是否启用 | 当前配置行.是否启用 |
|
||||
| 工位号 | 当前配置行.工位名称 |
|
||||
| 数据来源 | 当前配置行.设备名称 |
|
||||
|
||||
如果当前设备模块下有 ST04、ST05 两条配置,则 `设备类型对应表` 生成两行数据。
|
||||
|
||||
### 9.2 MES_基本变量原始数据
|
||||
|
||||
`MES_基本变量原始数据` 由当前设备模块共享变量按所有工位展开生成。
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
当前设备模块:放油设备
|
||||
工位:ST04、ST05
|
||||
设备模块共享变量:23 条
|
||||
导出结果:表头 1 行 + ST04 变量 23 行 + ST05 变量 23 行
|
||||
```
|
||||
|
||||
每条变量导出时:
|
||||
|
||||
- 保持 38 列顺序不变。
|
||||
- 对每个工位复制一遍设备模块共享变量。
|
||||
- 使用当前配置行字段覆盖 `工位号 / 数据来源 / DbName / IP`。
|
||||
- 按工位生成 `TagID`。
|
||||
|
||||
### 9.3 导出范围
|
||||
|
||||
导出规则:
|
||||
|
||||
- 只导出当前选中的设备模块。
|
||||
- 导出当前设备模块下全部工位。
|
||||
- 不导出未选中的其他设备模块。
|
||||
- 禁用工位也导出,但 `是否启用 = 0`。
|
||||
- 禁用设备模块是否允许导出,第一版允许导出,导出内容仍以工位启用状态为准。
|
||||
|
||||
## 10. 校验规则
|
||||
|
||||
### 10.1 设备模块校验
|
||||
|
||||
生成 Excel 前校验当前设备模块:
|
||||
|
||||
- 必须选择一个设备模块。
|
||||
- 设备名称不能为空。
|
||||
- 设备型号不能为空。
|
||||
- 设备IP不能为空。
|
||||
- 当前设备模块下至少存在一个工位。
|
||||
|
||||
### 10.2 工位校验
|
||||
|
||||
当前设备模块下所有工位需要校验:
|
||||
|
||||
- 工位名称不能为空。
|
||||
- 数据来源不能为空。
|
||||
- DB 不能为空。
|
||||
- 同一设备模块下工位名称不能重复。
|
||||
- 同一设备模块下 DB 建议不能重复。
|
||||
|
||||
### 10.3 变量校验
|
||||
|
||||
当前设备模块共享变量需要校验:
|
||||
|
||||
- 至少有一条变量。
|
||||
- 至少有一条启用变量。
|
||||
- `TagID` 不能为空。
|
||||
- `TagName` 不能为空。
|
||||
- 变量表导出必须保持 38 列。
|
||||
- Sheet 名称必须为 `MES_基本变量原始数据`。
|
||||
|
||||
### 10.4 Excel 校验
|
||||
|
||||
导出的 Excel 必须满足:
|
||||
|
||||
- 只包含两个 Sheet。
|
||||
- Sheet 名称完全一致。
|
||||
- `设备类型对应表` 行数等于当前设备模块下工位数 + 表头。
|
||||
- `MES_基本变量原始数据` 行数等于当前设备模块工位数 × 共享变量数 + 表头。
|
||||
|
||||
## 11. OPFS 持久化规则
|
||||
|
||||
OPFS 或 localStorage 中保存完整配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": 2,
|
||||
"updatedAt": "2026-06-01T10:00:00.000Z",
|
||||
"devices": []
|
||||
}
|
||||
```
|
||||
|
||||
兼容迁移规则:
|
||||
|
||||
- 旧数据中如果是 `一个设备 = 一个工位`,迁移时把旧设备转换为一个设备模块,并在其下创建一个工位。
|
||||
- 旧设备的 `stationName / db / dataSource` 移入新工位。
|
||||
- 旧设备的 `variables` 移入新设备模块,作为该设备模块共享变量。
|
||||
- 旧设备的 `deviceName / deviceModel / deviceIp / enabled` 保留在设备模块。
|
||||
- 顶层 `variables[]` 继续作为新增设备模块的默认变量模板来源。
|
||||
|
||||
## 12. 多工位测试用例
|
||||
|
||||
| 编号 | 测试项 | 操作 | 预期结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| T01 | 新建设备模块 | 点击新增设备,填写设备名称、设备型号、设备IP、是否启用 | 左侧出现一个设备模块 |
|
||||
| T02 | 新增工位 | 在设备模块中新增 ST04、ST05 两个工位 | 设备模块下出现两个工位 |
|
||||
| T03 | 共享变量维护 | 修改当前设备模块共享变量的 `TagName` | ST04、ST05 导出时都使用修改后的变量 |
|
||||
| T04 | 删除工位 | 删除 ST04 | 当前设备模块下不再显示 ST04 |
|
||||
| T05 | 禁用工位 | 将 ST05 设置为禁用 | 导出中 ST05 的 `是否启用 = 0` |
|
||||
| T06 | 导出设备表 | 选择当前设备模块并导出 Excel | `设备类型对应表` 包含 ST04、ST05 两行 |
|
||||
| T07 | 导出变量表 | 当前设备模块有 ST04、ST05,共享变量 23 条 | `MES_基本变量原始数据` 包含 ST04 展开 23 行和 ST05 展开 23 行 |
|
||||
| T08 | 导出范围 | 选择另一个设备模块导出 | Excel 不包含上一个设备模块的工位 |
|
||||
| T09 | 工位重复校验 | 同一设备模块下创建两个 ST04 | 阻止导出并提示工位名称重复 |
|
||||
| T10 | 空工位校验 | 工位名称或 DB 为空 | 阻止导出并提示对应字段不能为空 |
|
||||
|
||||
## 13. 页面草图 v6
|
||||
|
||||
### 13.1 主页面
|
||||
|
||||
```text
|
||||
┌────────────────────────────────────────────────────────────────────────────────────┐
|
||||
│ SignalTable_CZ Excel 生成器 [校验] [生成 Excel] [导入配置] [导出配置] │
|
||||
├──────────────────────────────┬─────────────────────────────────────────────────────┤
|
||||
│ 左侧:设备模块 │ 右侧:当前设备模块的工位与变量 │
|
||||
│ [新增设备] [编辑设备] [删除] │ │
|
||||
│ [查询设备模块 ] │ 当前设备:放油设备 / S1500 / 192.168.1.60 │
|
||||
│ │ │
|
||||
│ ┌──────────────────────────┐ │ 工位列表: │
|
||||
│ │ ▶ 放油设备 S1500 启用 │ │ ┌────────┬────────┬─────────┬──────┐ │
|
||||
│ │ 注油设备 S1500 启用 │ │ │ ST04 │ 放油前 │ DB10000 │ 启用 │ │
|
||||
│ │ 清洗设备 S1500 禁用 │ │ │ ST05 │ 放油后 │ DB10001 │ 启用 │ │
|
||||
│ └──────────────────────────┘ │ └────────┴────────┴─────────┴──────┘ │
|
||||
│ │ [<] 当前工位 ST04 / 放油前 / DB10000 [>] │
|
||||
│ 共 3 个设备模块 │ │
|
||||
│ │ 共享变量清单,当前预览工位:ST04 / 放油前 / DB10000 │
|
||||
│ │ ┌───────────────────────────────────────────────┐ │
|
||||
│ │ │ TagID TagName 类型 地址 │ │
|
||||
│ │ │ ST04_TAG_000001 工件到位 Bool 0.0 │ │
|
||||
│ │ │ ST04_TAG_000002 读取完成 Bool 0.1 │ │
|
||||
│ │ │ ... │ │
|
||||
│ │ └───────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────┴─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 13.2 新增/编辑设备模块弹窗
|
||||
|
||||
```text
|
||||
┌─────────────────────────────────────┐
|
||||
│ 新增设备模块 │
|
||||
├─────────────────────────────────────┤
|
||||
│ + │
|
||||
│ 设备名称: [放油设备 ] │
|
||||
│ 设备型号: [S1500 ] │
|
||||
│ 设备IP: [192.168.1.60 ] │
|
||||
│ 是否启用: ○ 启用 ○ 禁用 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 工位管理 │
|
||||
│ 点击 + 增加完整工位 │
|
||||
│ ┌────────┬────────┬─────────┬────┐ │
|
||||
│ │ ST04 │ 放油前 │ DB10000 │ 启 │ │
|
||||
│ │ ST05 │ 放油后 │ DB10001 │ 启 │ │
|
||||
│ └────────┴────────┴─────────┴────┘ │
|
||||
├─────────────────────────────────────┤
|
||||
│ [取消] [保存] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 13.3 空状态
|
||||
|
||||
```text
|
||||
┌──────────────────────────────┬─────────────────────────────────────────────────────┐
|
||||
│ 左侧:设备模块 │ │
|
||||
│ ┌──────────────────────────┐ │ 请选择左侧设备模块 │
|
||||
│ │ 放油设备 S1500 启用 │ │ │
|
||||
│ │ 注油设备 S1500 启用 │ │ 选择后可维护该设备下的工位 │
|
||||
│ └──────────────────────────┘ │ 和 MES_基本变量原始数据 │
|
||||
└──────────────────────────────┴─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 13.4 无工位状态
|
||||
|
||||
```text
|
||||
┌──────────────────────────────┬─────────────────────────────────────────────────────┐
|
||||
│ 左侧:设备模块 │ 当前设备:放油设备 / S1500 / 192.168.1.60 │
|
||||
│ ┌──────────────────────────┐ │ │
|
||||
│ │ ▶ 放油设备 S1500 启用 │ │ 当前设备模块还没有工位 │
|
||||
│ └──────────────────────────┘ │ │
|
||||
│ │ 请在设备模块编辑中点击 + 新增工位 │
|
||||
└──────────────────────────────┴─────────────────────────────────────────────────────┘
|
||||
```
|
||||
471
docs/variable-template-feature-design.md
Normal file
471
docs/variable-template-feature-design.md
Normal file
@@ -0,0 +1,471 @@
|
||||
# MES 基本变量模板功能设计文档
|
||||
|
||||
## 1. 设计目标
|
||||
|
||||
当前网页在新增变量时,有一部分字段适合自动填写,例如 `TagID`、`工位号`、`数据来源`、`IP`、`DbName` 等来源字段;也有一部分字段经常重复填写,例如 `TagTypeID`、`TagLong`、`变量类型`、`监控组`、上下限、保存标记等。
|
||||
|
||||
为了减少重复录入,建议新增“变量模板”功能。用户可以提前维护常用变量模板,在新增变量时直接套用模板,然后只修改少量差异字段。
|
||||
|
||||
模板功能的目标是:
|
||||
|
||||
- 支持新增模板。
|
||||
- 支持编辑模板。
|
||||
- 支持删除模板。
|
||||
- 支持在新增变量时使用模板。
|
||||
- 支持从当前变量保存为模板。
|
||||
- 支持模板数据持久化,刷新页面不丢失。
|
||||
- 不破坏当前设备模块、配置行、工位展开预览和 Excel 导出规则。
|
||||
|
||||
## 2. 功能边界
|
||||
|
||||
模板只负责快速填充变量字段,不直接生成设备配置行。
|
||||
|
||||
设备模块和工位配置仍由设备模块弹窗维护:
|
||||
|
||||
- `设备名称`
|
||||
- `工位名称`
|
||||
- `设备型号`
|
||||
- `设备IP`
|
||||
- `DB`
|
||||
- `是否启用`
|
||||
|
||||
变量模板主要作用于 `MES_基本变量原始数据` 的变量字段。
|
||||
|
||||
模板不直接保存以下最终展开字段:
|
||||
|
||||
- `工位号`
|
||||
- `数据来源`
|
||||
- `IP`
|
||||
- `DbName`
|
||||
|
||||
这些字段仍以当前设备模块配置行为准,在页面预览和导出 Excel 时自动覆盖。
|
||||
|
||||
## 3. 模板类型建议
|
||||
|
||||
第一版建议先做一种模板:`变量模板`。
|
||||
|
||||
后续如果需要,可以扩展为三类:
|
||||
|
||||
| 模板类型 | 用途 | 第一版是否实现 |
|
||||
| --- | --- | --- |
|
||||
| 单变量模板 | 新增一条变量时快速填充字段 | 是 |
|
||||
| 变量组模板 | 一次添加多条常用变量,例如一组握手信号 | 后续 |
|
||||
| 设备模块模板 | 一次创建设备配置行和变量集合 | 后续 |
|
||||
|
||||
第一版先实现单变量模板即可,避免功能一下子过重。
|
||||
|
||||
## 4. 数据结构设计
|
||||
|
||||
建议在 OPFS/localStorage 保存的数据中新增 `variableTemplates` 字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": 2,
|
||||
"updatedAt": "2026-06-01T10:00:00.000Z",
|
||||
"devices": [],
|
||||
"variableTemplates": []
|
||||
}
|
||||
```
|
||||
|
||||
模板对象建议如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "tpl-bool-signal",
|
||||
"templateName": "Bool 信号模板",
|
||||
"description": "常用 Bool 开关量信号",
|
||||
"fields": {
|
||||
"TagTypeID": "11",
|
||||
"TagLong": "1",
|
||||
"变量类型": "Bool",
|
||||
"变量地址": "",
|
||||
"变量其它": "",
|
||||
"是否启用": "1",
|
||||
"监控组": "Monitor",
|
||||
"是否监控": "1",
|
||||
"IsGoodBad": "1",
|
||||
"IsSaveToSql": "0",
|
||||
"IsWebSocket": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `templateName` 用于页面下拉选择和模板管理列表展示。
|
||||
- `description` 用于解释模板用途。
|
||||
- `fields` 只保存模板要填充的字段。
|
||||
- 模板不强制保存 38 个字段,未配置字段保持空白或保留当前变量已有值。
|
||||
|
||||
## 5. 字段填充规则
|
||||
|
||||
新增变量时分三层填充:
|
||||
|
||||
1. 系统自动字段。
|
||||
2. 用户选择的模板字段。
|
||||
3. 用户手动编辑字段。
|
||||
|
||||
优先级从低到高:
|
||||
|
||||
```text
|
||||
空白变量 -> 系统自动字段 -> 模板字段 -> 用户手动修改
|
||||
```
|
||||
|
||||
### 5.1 系统自动字段
|
||||
|
||||
新增变量时自动填入:
|
||||
|
||||
| 字段 | 填充规则 |
|
||||
| --- | --- |
|
||||
| `TagID` | 自动生成下一条基础编号,例如 `TAG_0000005`,允许用户修改 |
|
||||
| `工位号` | 取当前设备模块第一条配置行的 `工位名称`,仅用于预览 |
|
||||
| `数据来源` | 取当前配置行的 `设备名称` 或 `数据来源`,仅用于预览 |
|
||||
| `IP` | 取当前配置行的 `设备IP`,仅用于预览 |
|
||||
| `DbName` | 取当前配置行的 `DB`,仅用于预览 |
|
||||
|
||||
### 5.2 模板字段
|
||||
|
||||
选择模板后,模板中的 `fields` 覆盖当前表单对应字段。
|
||||
|
||||
例如选择 `Bool 信号模板` 后自动填入:
|
||||
|
||||
```text
|
||||
TagTypeID = 11
|
||||
TagLong = 1
|
||||
变量类型 = Bool
|
||||
是否启用 = 1
|
||||
监控组 = Monitor
|
||||
是否监控 = 1
|
||||
```
|
||||
|
||||
### 5.3 用户手动字段
|
||||
|
||||
用户在弹窗中手动输入的内容优先级最高。
|
||||
|
||||
如果用户已经输入了 `TagName`,再切换模板时建议弹出确认:
|
||||
|
||||
```text
|
||||
使用模板会覆盖当前已填写的部分字段,是否继续?
|
||||
```
|
||||
|
||||
第一版也可以简化为:模板只填充空字段,不覆盖已有内容。
|
||||
|
||||
推荐第一版采用“只填空字段”,体验更安全。
|
||||
|
||||
## 6. 页面交互设计
|
||||
|
||||
### 6.1 新增变量弹窗
|
||||
|
||||
在新增变量弹窗顶部增加模板选择区:
|
||||
|
||||
```text
|
||||
模板: [请选择模板 v] [使用模板] [保存为模板]
|
||||
```
|
||||
|
||||
按钮说明:
|
||||
|
||||
| 按钮 | 功能 |
|
||||
| --- | --- |
|
||||
| `使用模板` | 将选中的模板字段填入当前变量表单 |
|
||||
| `保存为模板` | 将当前变量表单中可复用字段保存为一个新模板 |
|
||||
|
||||
`TagID / TagName / TagTypeID / TagLong` 建议保留在基础信息中,其中 `TagTypeID` 和 `TagLong` 必填。
|
||||
|
||||
### 6.2 编辑变量弹窗
|
||||
|
||||
编辑变量时也显示模板区:
|
||||
|
||||
```text
|
||||
模板: [请选择模板 v] [使用模板] [保存为模板]
|
||||
```
|
||||
|
||||
使用模板时,只影响当前编辑的共享变量模板行。保存后当前设备模块下所有工位展开行同步变化。
|
||||
|
||||
### 6.3 模板管理入口
|
||||
|
||||
建议在右侧变量表工具栏增加按钮:
|
||||
|
||||
```text
|
||||
[模板管理] [新增变量] [编辑变量] [复制变量] [删除变量]
|
||||
```
|
||||
|
||||
点击 `模板管理` 打开模板管理弹窗。
|
||||
|
||||
## 7. 模板管理弹窗
|
||||
|
||||
模板管理弹窗建议采用左右结构:
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ 变量模板管理 [新增模板] │
|
||||
├───────────────────────┬──────────────────────────────────────┤
|
||||
│ 模板列表 │ 模板详情编辑 │
|
||||
│ ┌───────────────────┐ │ 模板名称:[Bool 信号模板 ] │
|
||||
│ │ Bool 信号模板 │ │ 模板说明:[常用 Bool 开关量信号] │
|
||||
│ │ Int 数值模板 │ │ │
|
||||
│ │ Real 浮点模板 │ │ TagTypeID:[11] TagLong:[1] │
|
||||
│ │ String 字符串模板 │ │ 变量类型:[Bool] │
|
||||
│ └───────────────────┘ │ 是否启用:[1] │
|
||||
│ │ 监控组:[Monitor] │
|
||||
│ │ 是否监控:[1] │
|
||||
├───────────────────────┴──────────────────────────────────────┤
|
||||
│ [删除] [取消] [保存模板] │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
模板管理支持:
|
||||
|
||||
- 新增模板。
|
||||
- 编辑模板。
|
||||
- 删除模板。
|
||||
- 复制模板。
|
||||
- 从当前变量生成模板。
|
||||
|
||||
## 8. 默认模板建议
|
||||
|
||||
系统可以内置几条基础模板,用户可编辑或删除。
|
||||
|
||||
### 8.1 Bool 模板
|
||||
|
||||
```json
|
||||
{
|
||||
"templateName": "Bool 信号模板",
|
||||
"fields": {
|
||||
"TagTypeID": "11",
|
||||
"TagLong": "1",
|
||||
"变量类型": "Bool",
|
||||
"是否启用": "1",
|
||||
"是否监控": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.2 Int 模板
|
||||
|
||||
```json
|
||||
{
|
||||
"templateName": "Int 数值模板",
|
||||
"fields": {
|
||||
"TagTypeID": "2",
|
||||
"TagLong": "2",
|
||||
"变量类型": "Int",
|
||||
"是否启用": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.3 Real 模板
|
||||
|
||||
```json
|
||||
{
|
||||
"templateName": "Real 浮点模板",
|
||||
"fields": {
|
||||
"TagTypeID": "4",
|
||||
"TagLong": "4",
|
||||
"变量类型": "Real",
|
||||
"是否启用": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8.4 String 模板
|
||||
|
||||
```json
|
||||
{
|
||||
"templateName": "String 字符串模板",
|
||||
"fields": {
|
||||
"TagTypeID": "8",
|
||||
"TagLong": "60",
|
||||
"变量类型": "String",
|
||||
"变量其它": ".58",
|
||||
"是否启用": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 9. 保存和持久化规则
|
||||
|
||||
模板数据和设备模块数据一起保存到 OPFS/localStorage。
|
||||
|
||||
每次发生以下操作后自动保存:
|
||||
|
||||
- 新增模板。
|
||||
- 编辑模板。
|
||||
- 删除模板。
|
||||
- 从变量保存为模板。
|
||||
- 导入配置 JSON。
|
||||
|
||||
导出配置 JSON 时也应包含 `variableTemplates`,方便用户迁移模板。
|
||||
|
||||
导入旧 JSON 时如果没有 `variableTemplates`,系统自动补充默认模板。
|
||||
|
||||
## 10. Excel 导出影响
|
||||
|
||||
模板不直接影响 Excel 结构。
|
||||
|
||||
Excel 仍只导出两个 Sheet:
|
||||
|
||||
1. `MES_基本变量原始数据`
|
||||
2. `设备类型对应表`
|
||||
|
||||
模板只影响变量创建和编辑后的字段值。最终 Excel 导出仍以当前设备模块中的变量数据为准。
|
||||
|
||||
如果变量字段为空,导出 Excel 时继续按当前规则处理:空字段不强制填默认值。
|
||||
|
||||
## 11. 校验建议
|
||||
|
||||
新增或编辑变量时建议校验:
|
||||
|
||||
- `TagID` 不能为空。
|
||||
- `TagName` 不能为空。
|
||||
- `TagTypeID` 不能为空。
|
||||
- `TagLong` 不能为空。
|
||||
- 同一设备模块内基础 `TagID` 不建议重复。
|
||||
|
||||
模板保存时建议校验:
|
||||
|
||||
- 模板名称不能为空。
|
||||
- 模板名称不能重复。
|
||||
- 模板至少包含一个可填充字段。
|
||||
|
||||
使用模板时建议提示:
|
||||
|
||||
- 模板会填充哪些字段。
|
||||
- 是否覆盖已有字段。
|
||||
|
||||
## 12. 第一版实施建议
|
||||
|
||||
建议新增或修改:
|
||||
|
||||
```text
|
||||
src/data/default-variable-templates.json
|
||||
src/utils/templateBuilder.js
|
||||
src/views/SignalTableGenerator.vue
|
||||
src/utils/opfsStore.js
|
||||
docs/variable-template-feature-design.md
|
||||
```
|
||||
|
||||
职责划分:
|
||||
|
||||
| 文件 | 职责 |
|
||||
| --- | --- |
|
||||
| `default-variable-templates.json` | 保存系统默认模板 |
|
||||
| `templateBuilder.js` | 模板规范化、应用模板、从变量生成模板 |
|
||||
| `SignalTableGenerator.vue` | 模板管理 UI、变量弹窗模板选择 |
|
||||
| `opfsStore.js` | 保存和读取 `variableTemplates` |
|
||||
|
||||
## 13. 测试方案
|
||||
|
||||
### 13.1 新增模板
|
||||
|
||||
1. 打开模板管理。
|
||||
2. 点击 `新增模板`。
|
||||
3. 填写模板名称和字段。
|
||||
4. 保存模板。
|
||||
5. 刷新页面后模板仍存在。
|
||||
|
||||
### 13.2 使用模板新增变量
|
||||
|
||||
1. 选择一个设备模块。
|
||||
2. 点击 `新增变量`。
|
||||
3. 选择 `Bool 信号模板`。
|
||||
4. 点击 `使用模板`。
|
||||
5. 确认 `TagTypeID / TagLong / 变量类型` 自动填入。
|
||||
6. 保存变量。
|
||||
7. 右侧展开表格出现新变量。
|
||||
|
||||
### 13.3 编辑变量时使用模板
|
||||
|
||||
1. 选中一条变量。
|
||||
2. 点击 `编辑变量`。
|
||||
3. 选择另一个模板。
|
||||
4. 保存变量。
|
||||
5. 当前设备模块下所有工位对应展开行同步变化。
|
||||
|
||||
### 13.4 从变量保存为模板
|
||||
|
||||
1. 编辑一条变量。
|
||||
2. 点击 `保存为模板`。
|
||||
3. 输入模板名称。
|
||||
4. 保存后在模板管理中可以看到新模板。
|
||||
|
||||
### 13.5 导入导出配置
|
||||
|
||||
1. 新增一个模板。
|
||||
2. 导出配置 JSON。
|
||||
3. 清空或更换浏览器数据。
|
||||
4. 导入配置 JSON。
|
||||
5. 确认模板随配置恢复。
|
||||
|
||||
### 13.6 Excel 导出
|
||||
|
||||
1. 使用模板新增变量。
|
||||
2. 导出 `SignalTable_CZ.xlsx`。
|
||||
3. 确认 Excel 中变量字段来自用户保存后的变量数据。
|
||||
4. 确认 Excel 仍只有两个 Sheet。
|
||||
|
||||
## 14. 页面草图
|
||||
|
||||
### 14.1 变量表工具栏
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ MES_基本变量原始数据展开预览 │
|
||||
│ 当前设备模块:共 3 个配置行,右侧显示所有工位展开后的 MES 原始数据 │
|
||||
│ [模板管理] [新增变量] │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ TagID TagName 工位号 数据来源 TagTypeID TagLong │
|
||||
│ ST04_TAG_0000001 PLC_PC_工件到位 ST04 放油前 11 1 │
|
||||
│ ST05_TAG_0000001 PLC_PC_工件到位 ST05 放油后 11 1 │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 14.2 新增变量弹窗
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ 新增变量 │
|
||||
├──────────────────────────────────────────────────────────────┤
|
||||
│ 模板: [Bool 信号模板 v] [使用模板] [保存为模板] │
|
||||
├──────────────────────────────────────────────────────────────┤
|
||||
│ 基础信息 │
|
||||
│ TagID: [TAG_0000001] TagName: [ ] │
|
||||
│ TagTypeID: [11 ] TagLong: [1 ] │
|
||||
│ 工位号: [ST04 ] 数据来源: [放油前 ] │
|
||||
│ IP: [192.168.1.60] DbName: [DB10000 ] │
|
||||
├──────────────────────────────────────────────────────────────┤
|
||||
│ 变量定义 │
|
||||
│ 变量类型: [Bool ] 变量地址:[ ] │
|
||||
│ 变量其它: [ ] 变量类型代码:[ ] │
|
||||
├──────────────────────────────────────────────────────────────┤
|
||||
│ [取消] [保存变量] │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 14.3 模板管理弹窗
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ 变量模板管理 [新增模板] │
|
||||
├───────────────────────┬──────────────────────────────────────┤
|
||||
│ Bool 信号模板 │ 模板名称:[Bool 信号模板 ] │
|
||||
│ Int 数值模板 │ 模板说明:[常用 Bool 开关量信号] │
|
||||
│ Real 浮点模板 │ TagTypeID:[11] TagLong:[1] │
|
||||
│ String 字符串模板 │ 变量类型:[Bool] │
|
||||
│ │ 是否启用:[1] │
|
||||
├───────────────────────┴──────────────────────────────────────┤
|
||||
│ [删除] [取消] [保存模板] │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 15. 后续扩展方向
|
||||
|
||||
后续可以继续增强:
|
||||
|
||||
- 支持变量组模板,一次新增多条变量。
|
||||
- 支持模板分类,例如 Bool、Int、Real、String、MES 通讯、PLC 握手。
|
||||
- 支持模板导入导出为单独 JSON 文件。
|
||||
- 支持从现有 Excel 扫描变量并生成模板。
|
||||
- 支持设置默认模板,新建变量时自动应用。
|
||||
- 支持模板字段锁定,例如某些模板强制固定 `TagTypeID` 和 `TagLong`。
|
||||
|
||||
Reference in New Issue
Block a user