# IO 页面窗口重构施工单(V1:去层套层,改 X1Y1 式单窗口) > 角色:指挥 = 你 / 实施 = wangli / 文档与宏 = 我 > 目标版本:`unitouch1025.cmtp` > 范围:**只动 IO 监控的 21 个页面(149、151~171)**。操作弹窗(177~185)与清洗弹窗(215~251)留到 V2。 --- ## 1. 为什么要改 现在 IO 页用的是「窗口重叠」三层结构: ``` 底层 100.common-window-joyea 中层 105.X1Y5 顶层 149.上料-IO ``` 三层同时打开,内容分散在 149(灯、CB、TB)和 158(文字标签)里,导致: - 页面内容不完整地属于任何一个窗口,改一页要看三处; - `LW-300` 组号没有任何窗口自己设置,只有 `042/044/045` 三支入口宏设,**切页签数据不换**; - 一进 158 组号是 9(DI3-4)却显示 DI1-2 的标题,**天生错位**。 ## 2. 目标结构 ``` 公共窗口 100(系统参数 → 一般 → 公共窗口 = 100,自动叠加顶栏) └─ 每个 IO 页 = 一个独立基本窗口 ├─ 页签栏(DI1-DI2 … AI3) ├─ 表格线与文字标签 ├─ 灯(读 LW-310~313 或直接读 PLC,见 §6.1) └─ 打开窗口时执行 = io-xxx(写 LW-300 组号) ``` 窗口属性里的「重叠窗口」三层**全部清空**。 ## 3. 页面清单(21 页) | 窗口 | 名称 | 组号 `idx` | 数据源 | 状态 | | --- | --- | --- | --- | --- | | 151 | 制丸-IO监控DI1-2 | 1 | 050 | 可做 | | 152 | 制丸-IO监控DI3-4 | 2 | 050 | 可做 | | 153 | 制丸-IO监控DI5-6 | 3 | 050 | 可做 | | 154 | 制丸-IO监控DO1-2 | 4 | 050 | 可做 | | 155 | 制丸-IO监控DO3-4 | 5 | 050 | 可做 | | 156 | 制丸-IO监控AI1-2 | 6 | ? | **待定** | | 157 | 制丸-IO监控AI3-4 | 7 | ? | **待定** | | 158 | 上料-IO监控DI1-2 | 8 | 050 | 可做(样板页) | | 159 | 上料-IO监控DI3-4 | 9 | 050 | 可做 | | 160 | 上料-IO监控DI5-6 | 10 | 050 | 可做 | | 161 | 上料-IO监控DI7-8 | 11 | 050 | 可做 | | 162 | 上料-IO监控DO1-2 | 12 | 050 | 可做 | | 163 | 上料-IO监控DO3-4 | 13 | 050 | 可做 | | 164 | 上料-IO监控DO5-6 | 14 | 050 | 可做 | | 165 | 上料-IO监控AI1-2 | 20 | ? | **待定** | | 166 | 清洗-IO监控DI11-12 | 15 | 050 | 可做 | | 167 | 清洗-IO监控DI13-14 | 16 | 050 | 可做 | | 168 | 清洗-IO监控DO11-12 | 17 | 050 | 可做 | | 169 | 清洗-IO监控DO13-14 | 18 | 050 | 可做 | | 170 | 上料-IO监控DO7 | 22 | ? | **待定** | | 171 | 上料-IO监控AI3 | 21 | ? | **待定** | > 组号 6、7 原本空着;20~24 在 `050` 里是注释掉的“制丸2”预留,先征用 20/21/22,制丸2 真做时再往 25 以后排。 ## 4. 施工步骤(wangli 执行) ### 第 0 步:备份 + 冻结 1. 把 `unitouch1025.cmtp` 另存一份 `unitouch1025.重构前.cmtp`(本地,不进库); 2. 通知其他人:`149`、`151~171` 这批窗口暂停改动。 ### 第 1 步:样板页 158(先做这一页,验收通过再批量) 1. 打开窗口 **158** → 右键「属性」; 2. 「重叠窗口」→ 底层/中层/顶层 **三个下拉全部设为「无」**; 3. 打开 **149**,框选 `CB_0~CB_7`、`TB_0/TB_1`、全部灯(`WL_0`~`WL_31`)→ 复制; 4. 回 **158** 粘贴,位置与 149 里一致(X/Y 不变,直接覆盖原坐标); 5. 页签栏(DI1-DI2 … AI3)从 149 复制到 158,贴底部同一位置; 6. 窗口 158「宏指令 → 打开窗口时执行」→ 选 `io-158`; 7. **保存 & 编译 → 在线模拟**,逐项对照 §5 验收表。 ### 第 2 步:批量复制 1. 窗口列表 → 右键 **158 → 复制** → 得到新窗口,改号为 159; 2. 只改三处:① 窗口名;② 页签橙色高亮挪到 DI3-DI4;③ 「打开窗口时执行」换成 `io-159`; 3. 重复得到 160~164、165、170、171(上料 10 页); 4. 同法做制丸 151~157、清洗 166~169。 > 复制比重新画快 10 倍,且坐标、样式天然一致。**不要手画第 2 遍。** ### 第 3 步:清理 1. 21 页都独立后,**149 清空内容**(先别删窗口,留一周观察); 2. `042/044/045` 里删掉 `SetData(byteA, "Local HMI", LW, 300, 1)` 这一行,只保留 `LW-2` 切窗; 3. 确认「系统参数 → 一般 → 公共窗口 = 100」。 ### 第 4 步:验证(21 页逐页过一遍) 见 §5。 ## 5. 每页验收清单(5 条,全过才算完) | # | 检查 | 通过标准 | | --- | --- | --- | | 1 | 顶栏 | JOYEA / 运行 / 点动 / 网络状态 / 用户 / 时间 都在,位置不变 | | 2 | 页签 | 10 个页签都在,**当前页高亮正确** | | 3 | 数据 | 切到该页后,灯/数值**与上一页不同**(说明组号变了) | | 4 | 点序 | 现场按一个已知输入(如“投料完成按钮”),对应那一行的灯亮,**不跑到别的行** | | 5 | 返回 | 点左侧「初始状态 / 运行 / 配方 / 设备参数 / IO监控」都能正常切走再切回 | > 第 4 条是重构时最容易漏的:现在灯的位序是**乱的**(`WL_0 = LW_Bit 310.1`,`WL_15 = 310.0`),建议重构时按 `310.0 → 311.7` 顺排,排完必须实测一次。 ## 6. 待确认(需要指挥拍板) ### 6.1 AI 页(156/157/165/171)的数据从哪来? `050` 用的是 `unsigned char` 读字节,只适合 DI/DO 位组合;AI 是数值(16/32 位),大概率**不走 050**,而是数值元件直接绑 PLC 符号。 - 若直连 → 这 4 页不设组号,`050` 也不用补 AI 分支; - 若走 `LW` 中转 → 要补 `050` 分支,且要按 REAL 处理。 **确认方法**:EB 打开 165,点一个数字显示框看「标签」,是 `Remote_AI…` 之类的 PLC 符号,还是 `LW-xxx`。 ### 6.2 170(上料 DO7)走哪条 `050` 第 19 组读的是 `Remote_DO21A/21B`(远程站),这里只有 8 个点。需要确认 170 是读 `Local_DO07` 还是 `Remote_DO21`。 ### 6.3 页签栏 10 份重复 不套层就必须每页自带页签栏,以后改样式要改 10 处。建议: - 页签做成**群组**,复制时整组带走; - 颜色/字号统一在样板上定死,之后不再改。 若不能接受,可退回“页签放 149、其余内容独立”——但那样又有一层,与本次目标冲突。 ## 7. 风险与回滚 | 风险 | 应对 | | --- | --- | | 清空「重叠窗口」后顶栏消失 | 先确认公共窗口 = 100;158 试点验证后再批量 | | 复制窗口后元件地址串页 | 复制后逐页核对灯地址(应在 `LW-310~313`) | | 与其他人同时改窗口 | 施工前口头冻结 149/151~171 | | 改坏无法回退 | 每完成 5 页存一份 cmtp,并 `git commit` 一次 | ## 8. 分工 | 人 | 事项 | | --- | --- | | 指挥 | 拍板 §6 三项;现场验收第 4 条(点序) | | wangli | §4 全部施工;每 5 页提交一次 | | 我 | 21 支 `io-xxx` 宏;页面清单与验收表;完成后更新 `开发主文件.md` 窗口表、`地址表.md` 的 `LW-300/310` 段 |