# IO 页窗口重构施工单(V2 · 可执行版) > 角色:**指挥 = 你 / 实施 = wangli / 文档·宏·验收表 = 我** > 基准工程:`unitouch1025.cmtp` > 依据:工程窗口表(0~282)、宏列表(50 条)、`158` 的窗口属性、`149` 的元件树 > 本次范围:**IO 相关 24 个窗口**(148/149/150 + 151~171)。操作弹窗与清洗弹窗列 V2,见 §8。 --- ## 1. 现状盘点(按工程窗口表) | 类别 | 窗口号 | 数量 | 当前结构 | | --- | --- | --- | --- | | 系统窗 | 3~9 | 5 | EB 内置,不动 | | 登录/弹窗 | 10~17、20 | 9 | 基本窗口,不动 | | 区域聚焦弹窗 | 30~32 | 3 | 弹窗,不动 | | 键盘/ASCII/用户窗 | 50~90 | — | EB 内置,不动 | | 公共窗口 | 100 `common-window-joyea` | 1 | 顶栏 + 左侧导航 | | 主画面 | 101~107、109、112、115~121、123、126 | 15 | **X1Y1 式样板,不改** | | IO 段容器 | 148 `清洗-IO`、149 `上料-IO`、150 `制丸-IO` | 3 | **层叠容器** | | IO 分组页 | 151~157(制丸)、158~165·170·171(上料)、166~169(清洗) | 21 | **层套层**:底层 100 / 中层 X?Y5 / 顶层 14x | | 制丸操作弹窗 | 177~185 | 9 | V2 | | 上料/清洗页 | 190~202、204~210 | 12 | V2 | | 状态/清洗弹窗 | 215~251、260~265、280 | 39 | V2 | **判定方法(wangli 先批量查一遍,5 分钟)** > 窗口列表右键某页 → 属性 → 看「重叠窗口」三栏。有值 = 层套层;全「无」= 已经是独立页。 > 把 24 个窗口的结果记在 §10 的表里,作为施工依据。 --- ## 2. 目标规范(X1Y1 式) ``` 公共窗口 100(系统参数 → 一般 → 公共窗口 = 100) └─ 功能页 = 一个基本窗口 1920×1080 ├─ 标题(左上,窗口名) ├─ 内容区(表格 / 灯 / 数值) ├─ 页签栏(底部,段内分组) ├─ 返回/总览(右下) └─ 打开窗口时执行 = io-xxx(写组号 LW-300) ``` **不允许**:窗口属性里再挂底层/中层/顶层。 **允许保留的一层**:弹窗用「直接窗口」弹出(这是交互必需,不算层套层),但要设「重叠 = 独立窗口」,且弹窗自己不透明。 --- ## 3. 需要准备的界面(这是“还缺什么”的正面回答) | # | 界面 / 元件 | 数量 | 谁做 | 说明 | | --- | --- | --- | --- | --- | | 1 | **页签栏**(DI1-DI2…AI3,10 个按钮) | 1 套 | wangli | 做成一个**群组**,复制到 21 页。先确认它现在挂在 158 还是 149 上(见 §5 步骤 2) | | 2 | **页标题** | 21 | wangli | 左上角,文字 = 窗口名(如 `上料-IO监控 DI1-2`) | | 3 | **返回/总览按钮** | 21 | wangli | 右下角,功能键 → 切到 148/149/150 对应段 | | 4 | **IO 段总览页** | 3 | 待定 | 148/149/150 保留为“段入口”(三个大按钮进各分组),或直接删掉由左侧导航进入 | | 5 | **`io-xxx` 宏** | 21 | 我 | 每页写自己的组号(§6 已给全表) | | 6 | **通讯状态提示条** | 1 | 待定 | 公共窗口顶部,读 `LB-10100`/`LB-10400`,断线变红。V3 | | 7 | **制丸2 预留页** | 5 | 暂不做 | `050` 里 20~24 号位是给它留的,等有第二台制丸 PLC 再说 | > **不需要新建的**:表格线、灯、位号文字——这些 158 已经全有了,复制即可。 --- ## 4. 单页标准布局(1920×1080) | 区域 | 元素 | 位置 (x,y) | 尺寸 | | --- | --- | --- | --- | | 标题 | 文字(窗口名) | 200, 60 | — | | 内容-左列 | 灯 + 位号 + 说明 ×16 | 210, 150 起,行高 44 | 灯 30×30 | | 内容-右列 | 灯 + 位号 + 说明 ×16 | 790, 150 起,行高 44 | 同上 | | 页签栏 | 10 个按钮 | 210~1700, y=960 | 130×52,间距 8 | | 返回 | 功能键「返回总览」 | 1700, 960 | 140×52 | > 现有 158 就是这套坐标,**照抄不用重新量**。 --- ## 5. 施工步骤(第一阶段:样板页 158) ### 步骤 0:开工前两件事 1. **系统参数 → 一般 → 公共窗口**,确认值为 `100`。 - 若是 0/空 → 改成 100。否则清空重叠后顶栏会消失,全工程都受影响。 2. `文件 → 另存为` → `unitouch1025.重构前.cmtp`(本地备份,不进库)。 ### 步骤 1:清空重叠窗口 1. 窗口列表点 **158**; 2. 右键 → **属性**; 3. 「重叠窗口」三栏全部改成 **(无)**: - 底层 `100.common-window-joyea` → 无 - 中层 `105.X1Y5` → 无 - 顶层 `149.上料-IO` → 无 4. 确定。 ### 步骤 2:确认页签栏在哪个窗口 1. 打开 **149**,在编辑区按 **Ctrl+A**,看状态栏/选框里有没有那 10 个页签按钮; 2. 打开 **158**,同样看一遍。 | 结果 | 动作 | | --- | --- | | 页签在 **149** | 149 全选 → Ctrl+C → 158 → Ctrl+V | | 页签在 **158** | 跳过,只搬 149 的灯和表格 | ### 步骤 3:搬元件 1. 打开 149 → **Ctrl+A** → **Ctrl+C**; 2. 切到 158 → **Ctrl+V**; 3. 弹「内部粘贴偏移」时选 **不偏移(原坐标)**。 ### 步骤 4:补标题和返回 1. 左上角放文字:`上料-IO监控 DI1-2`; 2. 右下角放功能键:`返回总览` → 动作 = 切换基本窗口 → `149`。 ### 步骤 5:挂宏 1. 右键 158 → 属性 → 宏指令 → **打开窗口时执行** = `io-158`; 2. **循环执行** 保持停用; 3. 确定。 ### 步骤 6:编译验收 保存 → **编译** → **在线模拟**,对照 §7 的 5 条。全过才进批量。 --- ## 6. 第二阶段:批量(21 页) ### 每页固定 4 个动作 | 动作 | 怎么做 | | --- | --- | | ① 复制 | 窗口列表右键 158 → **复制** → 新窗口号 | | ② 改名 | 窗口名改成对应名称(§10 表) | | ③ 换宏 | 属性 → 打开窗口时执行 → `io-新号` | | ④ 挪高亮 | 页签栏里把橙色底/选中图移到当前页签 | > **元件地址不要动**:所有页的灯都读 `LW-310~313`,共用同一批本地字。 > **复制会把 `io-158` 一起带过去**,这是最容易漏的,必须逐页改。 ### 顺序(按批,每批 5 页,批后编译 + commit) | 批 | 窗口 | 内容 | | --- | --- | --- | | 1 | 158、159、160、161、162 | 上料 DI/DO(组号 8~12,已确认) | | 2 | 163、164、166、167、168 | 上料 DO + 清洗 DI/DO | | 3 | 169、151、152、153、154 | 清洗 + 制丸 | | 4 | 155、165、170、171、156、157 | 剩余(含 4 页待定数据源) | ### 组号对照(`io-xxx` 宏) | 窗口 | idx | 窗口 | idx | 窗口 | idx | | --- | --- | --- | --- | --- | --- | | 151 | 1 | 158 | 8 | 166 | 15 | | 152 | 2 | 159 | 9 | 167 | 16 | | 153 | 3 | 160 | 10 | 168 | 17 | | 154 | 4 | 161 | 11 | 169 | 18 | | 155 | 5 | 162 | 12 | 165 | 20 | | 156 | 6 | 163 | 13 | 170 | 22 | | 157 | 7 | 164 | 14 | 171 | 21 | 宏模板(只改第一行): ``` macro_command main() short idx = 8 SetData(idx, "Local HMI", LW, 300, 1) end macro_command ``` --- ## 7. 第三阶段:收尾 1. **删入口宏里的组号**:`042`/`044`/`045` 中各删一行 `SetData(byteA, "Local HMI", LW, 300, 1)`,只留 `LW-2` 切窗; 2. **清空 149/148/150**:内容全删,窗口先留一周再删; 3. **更新文档**:窗口表、`LW-300/310` 归属(我做)。 --- ## 8. 验收清单(每页 5 条) | # | 检查 | 通过标准 | | --- | --- | --- | | 1 | 顶栏 | JOYEA/运行/点动/网络状态/用户/时间 都在,位置不变 | | 2 | 页签 | 10 个都在,当前页高亮 | | 3 | 数据 | 切页后灯**与上一页不同** | | 4 | 点序 | 现场按一个已知输入,**对应那一行**亮 | | 5 | 往返 | 左侧 5 个导航按钮来回切正常 | > 第 4 条必做:现有灯位序是乱的(`WL_0 = LW_Bit 310.1`、`WL_15 = 310.0`),重构时按 `310.0 → 311.7` 重排,排完必须实测。 --- ## 9. V2 范围(本次不做,先列出来免得漏) | 类别 | 窗口 | 处理原则 | | --- | --- | --- | | 制丸操作弹窗 | 177~185 | 不透明底 + 关闭按钮 + 「重叠 = 独立窗口」 | | 上料/清洗页 | 190~202、204~210 | 与 IO 页同法,单窗口 | | 状态弹窗 | 215~251 | 同上,但要确认是否共用同一套元件 | | IO 弹窗 | 260~265 | 同上 | --- ## 10. 施工记录表(wangli 填,每页打勾) | 窗口 | 名称 | 重叠清空 | 元件已搬 | 宏 | 高亮 | 验收 | | --- | --- | --- | --- | --- | --- | --- | | 158 | 上料-IO监控DI1-2 | ☐ | ☐ | io-158 | ☐ | ☐ | | 159 | 上料-IO监控DI3-4 | ☐ | ☐ | io-159 | ☐ | ☐ | | 160 | 上料-IO监控DI5-6 | ☐ | ☐ | io-160 | ☐ | ☐ | | 161 | 上料-IO监控DI7-8 | ☐ | ☐ | io-161 | ☐ | ☐ | | 162 | 上料-IO监控DO1-2 | ☐ | ☐ | io-162 | ☐ | ☐ | | 163 | 上料-IO监控DO3-4 | ☐ | ☐ | io-163 | ☐ | ☐ | | 164 | 上料-IO监控DO5-6 | ☐ | ☐ | io-164 | ☐ | ☐ | | 165 | 上料-IO监控AI1-2 | ☐ | ☐ | io-165 | ☐ | ☐ | | 170 | 上料-IO监控DO7 | ☐ | ☐ | io-170 | ☐ | ☐ | | 171 | 上料-IO监控AI3 | ☐ | ☐ | io-171 | ☐ | ☐ | | 151 | 制丸-IO监控DI1-2 | ☐ | ☐ | io-151 | ☐ | ☐ | | 152 | 制丸-IO监控DI3-4 | ☐ | ☐ | io-152 | ☐ | ☐ | | 153 | 制丸-IO监控DI5-6 | ☐ | ☐ | io-153 | ☐ | ☐ | | 154 | 制丸-IO监控DO1-2 | ☐ | ☐ | io-154 | ☐ | ☐ | | 155 | 制丸-IO监控DO3-4 | ☐ | ☐ | io-155 | ☐ | ☐ | | 156 | 制丸-IO监控AI1-2 | ☐ | ☐ | io-156 | ☐ | ☐ | | 157 | 制丸-IO监控AI3-4 | ☐ | ☐ | io-157 | ☐ | ☐ | | 166 | 清洗-IO监控DI11-12 | ☐ | ☐ | io-166 | ☐ | ☐ | | 167 | 清洗-IO监控DI13-14 | ☐ | ☐ | io-167 | ☐ | ☐ | | 168 | 清洗-IO监控DO11-12 | ☐ | ☐ | io-168 | ☐ | ☐ | | 169 | 清洗-IO监控DO13-14 | ☐ | ☐ | io-169 | ☐ | ☐ | --- ## 11. 风险与回滚 | 风险 | 应对 | | --- | --- | | 清空重叠后顶栏消失 | 先确认公共窗口 = 100;158 试点通过再批量 | | 复制后忘记改宏,全页数据相同 | 每页验收第 3 条必须过 | | 页签高亮不跟随 | 每页手动挪,做完当页立即看出错 | | 与其他人同时改同一批窗口 | 开工前口头冻结 24 个窗口 | | 改坏 | 每批 5 页 `git commit`;本地留 `重构前.cmtp` | --- ## 12. 待确认(指挥拍板) | # | 事项 | 影响 | | --- | --- | --- | | 1 | **AI 页(156/157/165/171)数据源**:数值元件直连 PLC 符号,还是走 `LW` 中转 | 决定这 4 页要不要设组号、`050` 要不要补 AI 分支 | | 2 | **170(DO7)** 读 `Local_DO07` 还是 `Remote_DO21` | 决定 idx=22 的内容 | | 3 | 148/149/150 三个段总览页**保留还是删** | 决定 §3 第 4 项 | | 4 | 页签栏每页复制(10 份)是否可接受 | 若不接受,只能退回“页签放容器页”,与目标冲突 | > 确认方法(各 30 秒):EB 打开 165,点一个数字显示框看「标签」;打开 170,点一个灯看「标签」。 --- ## 13. V3 定案(2026-10-27 14:50,101 实测确认) ### 13.1 标准形态(以 101 为准) `101 X1Y1` 的「窗口设置」实测: ``` 窗口名称:X1Y1 编号:101 大小:1920 × 1080 重叠窗口:底层 = 100.common-window-joyea 中层 = 无 顶层 = 无 ``` **结论:每页 = 100(顶栏) + 本页自己的内容(含左侧导航)。不再有第二、第三层。** ### 13.2 IO 页的差距 | 层 | 101(标准) | IO 页(现状) | 处理 | | --- | --- | --- | --- | | 底层 | 100 | 100 | 保留 | | 中层 | 无 | `105.X1Y5` | **清空** | | 顶层 | 无 | `149`/`150`(灯)/ `158~171`(文字) | **清空,内容并入本页** | | 本页内容 | 导航 + 全部 | 只有文字或只有灯 | **合并** | ### 13.3 每页 4 个动作(替代 §5 的旧步骤) 1. **清层**:窗口设置里,中层 `105` → **无**;顶层 `149/150` → **无**(底层 100 保留); 2. **搬导航**:打开 101,选中左侧导航群组(`GP_0`、`GP_1` 及其子元件)→ `Ctrl+C` → 粘到本页同坐标; 3. **并内容**:把本页对应的文字标签页(158~171)全选复制,贴进带 32 个灯的那一页(149/150)里;两份内容从此只在**一个窗口**中; 4. **挂宏**:窗口设置 → 宏指令 → 打开窗口时执行 = `io-<窗口号>`(组号见 §6)。 ### 13.4 顺序调整 先做 **158**(文字页 + 149 的灯合并),验收通过后,其余页按 §6 批次推进。 > 注意:合并后每个 IO 页都自带 32 个灯,`LW-310~313` 仍为共用地址,**不要改成各自独立的地址**,否则 `050` 要跟着大改。