Files
Excelbuilder/docs/signal-table-excel-generator-design.md
2026-06-01 17:55:16 +08:00

19 KiB
Raw Blame History

SignalTable_CZ Excel 生成器设计文档 v6

1. 项目目标

本项目基于 C:\work\Project\Excel 的 Vue 前端项目,建设一个用于维护并生成标准 SignalTable_CZ.xlsx 的网页工具。

最终目标是:当项目需要生成 SCADA 可读取的信号表 Excel 时,用户打开网页,维护设备模块、工位和变量配置,然后点击 生成 Excel,得到标准 Excel 文件。

当前 v6 设计重点是把原来的:

一个设备 = 一个工位

调整为:

一个设备模块 = 多个工位
同一个设备模块内多个工位共用同一套 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
是否启用 控制该设备模块是否启用

设备模块示例:

{
  "id": "dev-001",
  "deviceName": "放油设备",
  "deviceModel": "S1500",
  "deviceIp": "192.168.1.60",
  "enabled": 1,
  "stations": [],
  "variables": []
}

4.2 工位

工位属于设备模块,一个设备模块可以包含多个工位。

工位字段:

字段 说明 是否必填
工位名称 SCADA 工位号,例如 ST04
数据来源 默认等于设备名称,写入 设备类型对应表.数据来源
DB 写入 设备类型对应表.DB 和变量 DbName
是否启用 写入 设备类型对应表.是否启用
基本变量原始数据 不保存在工位中,由设备模块统一维护

工位示例:

{
  "id": "station-001",
  "deviceName": "放油前",
  "stationName": "ST04",
  "dataSource": "放油前",
  "deviceModel": "S1500",
  "deviceIp": "192.168.1.60",
  "db": "DB10000",
  "enabled": 1,
  "variables": []
}

5. 多工位数据结构

推荐数据结构:

{
  "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 时生成 设备类型对应表 的一行。

表格字段:

设备名称
工位名称
设备型号
设备IP
DB
是否启用
操作

7.1 新增配置行

点击弹窗左上角 + 后,立即新增一条完整配置行。

默认生成规则:

  • 设备名称 默认取当前第一行设备名称,若没有则为空。
  • 工位名称 自动递增,例如 ST06
  • 设备型号 默认取当前第一行设备型号,若没有则为 S1500
  • 设备IP 默认取当前第一行设备IP。
  • DB 自动递增,例如 DB10002
  • 是否启用 默认为 1

校验规则:

  • 设备名称 不能为空。
  • 工位名称 不能为空。
  • 设备型号 不能为空。
  • 设备IP 不能为空。
  • DB 不能为空。

7.2 编辑配置行

所有字段都在表格单元格中直接编辑。

保存后:

  • 设备模块左侧列表使用第一行配置作为显示信息。
  • 导出 Excel 时以每行最新配置为准。
  • 导出 Excel 时以最新网页设置为准。

7.3 删除配置行

删除配置行时:

  • 删除该行配置。
  • 不删除设备模块共享变量。
  • 导出 Excel 不再包含该行。

8. 右侧基本变量详情设计

右侧变量表展示当前设备模块共享的 MES_基本变量原始数据

如果当前选中了某个工位,变量表中的工位相关字段按该工位做预览;但保存变量时仍保存到设备模块共享变量中。

变量表必须完整保留 38 个字段:

TagID
TagName
工位号
数据来源
IP
TagTypeID
TagLong
DbName
变量类型
变量地址
变量其它
演示偏移
列位置
测量位置
测量项目
测量单位
变量类型代码
变量类型名称
机体类型
线体类型
TagAdr
TagAdrDemo
是否启用
监控组
监控时间间隔
OpcServer_OPNAME
变量特点
是否监控
变量排序
工序能力
监控属性代码
测量位置短
上限值
下限值
理论值
IsGoodBad
IsSaveToSql
IsWebSocket

变量操作:

  • 新增变量
  • 编辑变量
  • 删除变量
  • 复制变量

导出前强制覆盖字段:

工位号 = 当前工位.工位名称
数据来源 = 当前工位.数据来源
IP = 当前设备模块.设备IP
DbName = 当前工位.DB

TagID 导出规则:

TAG_0000001 -> ST04_TAG_0000001

如果 TagID 已经以当前工位名开头,则不重复添加。

9. Excel 生成规则 v6

点击 生成 Excel 时,只导出当前选中的设备模块。

9.1 设备类型对应表

导出列固定为:

设备IP
设备类型
DB
是否启用
工位号
数据来源

导出来源:

Excel 列 来源
设备IP 当前配置行.设备IP
设备类型 当前配置行.设备型号
DB 当前配置行.DB
是否启用 当前配置行.是否启用
工位号 当前配置行.工位名称
数据来源 当前配置行.设备名称

如果当前设备模块下有 ST04、ST05 两条配置,则 设备类型对应表 生成两行数据。

9.2 MES_基本变量原始数据

MES_基本变量原始数据 由当前设备模块共享变量按所有工位展开生成。

示例:

当前设备模块:放油设备
工位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 中保存完整配置:

{
  "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 主页面

┌────────────────────────────────────────────────────────────────────────────────────┐
│ 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 新增/编辑设备模块弹窗

┌─────────────────────────────────────┐
│          新增设备模块                │
├─────────────────────────────────────┤
│  +                                  │
│  设备名称:  [放油设备          ]    │
│  设备型号:  [S1500             ]    │
│  设备IP    [192.168.1.60      ]    │
│  是否启用:  ○ 启用   ○ 禁用         │
├─────────────────────────────────────┤
│  工位管理                            │
│  点击 + 增加完整工位                 │
│  ┌────────┬────────┬─────────┬────┐ │
│  │ ST04   │ 放油前 │ DB10000 │ 启 │ │
│  │ ST05   │ 放油后 │ DB10001 │ 启 │ │
│  └────────┴────────┴─────────┴────┘ │
├─────────────────────────────────────┤
│              [取消]    [保存]        │
└─────────────────────────────────────┘

13.3 空状态

┌──────────────────────────────┬─────────────────────────────────────────────────────┐
│ 左侧:设备模块                │                                                     │
│ ┌──────────────────────────┐ │              请选择左侧设备模块                    │
│ │   放油设备  S1500  启用  │ │                                                     │
│ │   注油设备  S1500  启用  │ │              选择后可维护该设备下的工位            │
│ └──────────────────────────┘ │              和 MES_基本变量原始数据               │
└──────────────────────────────┴─────────────────────────────────────────────────────┘

13.4 无工位状态

┌──────────────────────────────┬─────────────────────────────────────────────────────┐
│ 左侧:设备模块                │ 当前设备:放油设备 / S1500 / 192.168.1.60          │
│ ┌──────────────────────────┐ │                                                     │
│ │ ▶ 放油设备  S1500  启用  │ │              当前设备模块还没有工位                │
│ └──────────────────────────┘ │                                                     │
│                              │              请在设备模块编辑中点击 + 新增工位     │
└──────────────────────────────┴─────────────────────────────────────────────────────┘