diff --git a/设计文档/宏指令.md b/设计文档/宏指令.md index 021fd92..149cc0d 100644 --- a/设计文档/宏指令.md +++ b/设计文档/宏指令.md @@ -14,7 +14,7 @@ | 001~007 | `btn-y1`~`btn-y7` | — | Y 页签导航(权限 + 页面存在位图) | 有正文 | | 008~011 | `btn-x1`~`btn-x4` | — | X 页签导航 | 有正文 | | 012 | `btn-login-index` | — | 索引登入 + 内联提示映射 | 有正文 | -| 013 | `macro_13` | — | **未命名宏**,疑似废弃残留 | **未记录** | +| 013 | `macro_13` | — | **空宏**:只有 `macro_command main()` / `end macro_command`,无任何语句;无执行条件、非周期、非开机 | ✅ 已核对:**可删** | | 014 | `close-msg` | — | 关 11 号无权限窗 | 有正文 | | 015~017 | `open-time` / `set-time` / `close-time` | — | 修改时间 | 有正文 | | 018 | `logout` | — | 注销并回 10 号窗 | 有正文 | @@ -28,16 +28,16 @@ | 036 | `line-ab-switch` | — | A/B 线切换(仅 role=1) | 有正文 | | 037 | `net-apply` | I | 网络参数套用(HMI + 设备 4/5 IP) | 有正文(10-27 已加 IP 保护) | | 038 | `net-read` | — | 系统网络值 → 暂存 `RW` | 有正文 | -| 039~041 | `x2y2-focus-area1`~`area3` | — | X2Y2 三区聚焦 → `LW-50` | **正文缺失**(旧文档写作 `area-1~3`,名字已不符) | -| 042 | `IO切换上料` | — | 待确认(疑似 IO 监控页切换) | **未记录** | -| 043 | `x2y2-focus-area-close` | — | 关区域弹窗(`LW-50=0`) | **正文缺失**(旧文档写作 `area-close`) | -| 044 | `IO切换清洗` | — | 待确认 | **未记录** | -| 045 | `IO切换制丸` | — | 待确认 | **未记录** | -| 046 | `上料参数` | — | 待确认 | **未记录** | -| 047 | `温度监控` | P | 周期采集/判断温度 | **未记录** | -| 048 | `屏蔽通讯异常提示` | P | 周期置 ON `LB-11960~11967`(设备 1~8 的 “Device No Response”) | **未记录**(旧文档只提 11963/11964) | -| 049 | `出条温度监控` | P | 周期监控出条温度 | **未记录** | -| 050 | `IO` | — | 待确认 | **未记录** | +| 039~041 | `x2y2-focus-area1`~`area3` | — | X2Y2 三区聚焦 → `LW-50` = 30/31/32 | 已补录(6.2) | +| 042 | `IO切换上料` | — | IO 组索引 9 → `LW-300`,窗口 158 | 已补录(6.2) | +| 043 | `x2y2-focus-area-close` | — | 关区域弹窗(`LW-50=0`) | 已补录(6.2) | +| 044 | `IO切换清洗` | — | IO 组索引 15 → `LW-300`,窗口 168 | 已补录(6.2) | +| 045 | `IO切换制丸` | — | IO 组索引 1 → `LW-300`,窗口 151 | 已补录(6.2) | +| 046 | `上料参数` | — | 窗口 210(与「清洗-点动」重名,存疑) | 已补录(6.2) | +| 047 | `温度监控` | P(1s) | 读 16 个 REAL(`HMI_EM02.Temperature_PV`)→ `LW-200` | 已补录(6.2) | +| 048 | `屏蔽通讯异常提示` | P(100ms) | 周期置 ON `LB-11960~11967`(设备 1~8 的 “Device No Response”) | 已补录(6.2) | +| 049 | `出条温度监控` | P(1s) | 读 10 个 REAL(`HIKMICRO_Temp_R`)→ `LW-240` | 已补录(6.2) | +| 050 | `IO` | P(100ms) | 按 `LW-300` 索引读 `PLC.Tags.Table.Local_*` | ⚠ 已补 1~6 组,7 以后待补 | ### 6.0.1 与旧文档的差异(已确认) @@ -45,19 +45,21 @@ 2. **48 号宏 `屏蔽通讯异常提示` 是周期执行(P)**,不是开机一次;它把 `LB-11960~11967` 八台设备全屏蔽,不是文档写的 63/64 两台。 3. **7 条宏文档完全没有**:`macro_13`、`IO切换上料`、`IO切换清洗`、`IO切换制丸`、`上料参数`、`温度监控`、`出条温度监控`、`IO`(含 3 条周期温度宏)。 4. **ID 031 缺失**(工程里已删除,文档无记录)。 -5. `macro_13` 未命名,建议确认是否可删。 +5. `macro_13`(ID 013)是**空宏**(无语句、无执行条件),建议直接删除,不留占位。 -### 6.0.2 待补正文(按优先级) - -| 优先 | 宏 | 需要的确认 | -|---|---|---| -| 高 | `x2y2-focus-area1~3`、`-close` | ~~`LW-50` 是 30~32 还是 141~144~~ → **已确认 30/31/32**(工程窗口表) | -| 高 | `net-apply` | 新工程是否已含“IP 首段为 0 不覆盖”保护 | -| 中 | `IO切换上料/清洗/制丸`、`IO` | 是否属于 IO 监控页的页签切换,地址用哪批 | -| 中 | `上料参数` | 是否写 PLC 配方参数 | -| 低 | `温度监控`、`出条温度监控` | 周期时间、报警阈值地址 | -| 低 | `macro_13` | 是否废弃可删 | +### 6.0.2 核对状态(2026-10-27 收尾) +| 项 | 状态 | +| --- | --- | +| 38 条原有正文 | 与工程一致,未发现改动 | +| 039/040/041/043(区域弹窗) | ✅ 已补录:`win` = 30 / 31 / 32,关闭写 0 | +| 042/044/045(IO 切换) | ✅ 已补录:写 `LW-300`=组索引、`LW-2`=窗口 | +| 046(上料参数) | ✅ 已补录,但**窗口 210 与「清洗-点动」重名,存疑** | +| 047/049(温度) | ✅ 已补录,但 **float 拷贝长度与注释不符**(见 6.2.1) | +| 048(屏蔽通讯) | ✅ 已补录:100 ms 周期压 8 个位 | +| 050(IO) | ⚠ **只补到第 6 组**,7 以后的分支待补 | +| 013(macro_13) | ✅ 空宏,可删 | +| 000(main-init) | ⚠ 待核对:窗口扩到 282 后 `LW-70~73` 位图值是否仍为 127/18/127/18 | ## 6.1 宏正文(逐行注释) > 命名:导航 = `btn-*`、登录 = `main-init`/`btn-login-index`/`logout`、管理员登录 = `admin-open`/`admin-login`/`admin-close`、用户管理 = `user-open` + `usr-*`(你的工程删除类为 `usr-delete*`)、关于窗 = `about-open`/`about-close`、时间 = `open-time`/`set-time`/`close-time`、弹窗 = `close-msg`/`close-nopage`。 @@ -1137,4 +1139,128 @@ end macro_command // 宏结束 **只有 3 个区域**(原第④区已并入③),没有 area-4。 -**窗口号已确认**:工程窗口表里 `30/31/32 = x2y2-focus-area1/2/3`,所以 `LW-50` 写的是 **30/31/32**;旧版本节写的 `141/142/143` 作废(`地址表.md` 5.1 已同步)。 \ No newline at end of file +**窗口号已确认**:工程窗口表里 `30/31/32 = x2y2-focus-area1/2/3`,所以 `LW-50` 写的是 **30/31/32**;旧版本节写的 `141/142/143` 作废(`地址表.md` 5.1 已同步)。 +--- + +## 6.2 补录:2026-10-27 从工程逐个截图核对的宏 + +> 以下正文与 EB 宏编辑器里的实际内容一致(编号/名称取自宏列表)。执行条件:无标记=按钮触发;`P`=周期执行。 + +**`x2y2-focus-area1`(ID 039)** +``` +macro_command main() // 宏入口:点该区域时执行 + short win = 30 // 目标弹窗窗口号 + SetData(win, "Local HMI", LW, 50, 1) // 写 LW-50 → 间接窗口显示 30 +end macro_command // 宏结束 +``` + +**`x2y2-focus-area2`(ID 040)**:同上,`win = 31`(显示 31) +**`x2y2-focus-area3`(ID 041)**:同上,`win = 32`(显示 32) + +``` +macro_command main() // 宏入口:关闭区域弹窗 + short z = 0 // 常量 0 + SetData(z, "Local HMI", LW, 50, 1) // 写 LW-50=0 → 间接窗口收起 +end macro_command // 宏结束 +``` +(`x2y2-focus-area-close`,ID 043) + +**`IO切换上料`(ID 042)/ `IO切换清洗`(ID 044)/ `IO切换制丸`(ID 045)** + +三支结构相同,只有两个常量不同: + +``` +macro_command main() + unsigned char byteA, byteB + byteA = 9 // → LW-300:IO 组索引(供 050 IO 判断) + byteB = 158 // → LW-2:目标窗口号 + SetData(byteA, "Local HMI", LW, 300, 1) + SetData(byteB, "Local HMI", LW, 2, 1) +end macro_command +``` + +| 宏 | `byteA`(LW-300) | `byteB`(LW-2 → 窗口) | 对应窗口 | +| --- | --- | --- | --- | +| `IO切换上料` | 9 | 158 | 158 = 上料-IO监控DI1-2 | +| `IO切换清洗` | 15 | 168 | 168 = 清洗-IO监控DO11-12 | +| `IO切换制丸` | 1 | 151 | 151 = 制丸-IO监控DI1-2 | + +**`上料参数`(ID 046)** +``` +macro_command main() + unsigned char byteB + byteB = 210 // 目标窗口号 + SetData(byteB, "Local HMI", LW, 2, 1) +end macro_command +``` +> ⚠ **存疑**:窗口 210 在工程窗口表里是「清洗-点动」,不是上料参数页。要么宏值过时,要么窗口被改作他用,需现场确认。 + +**`温度监控`(ID 047,周期 10×100ms = 1 s)** +``` +macro_command main() + float temp[16] // 16 个 REAL,每个占 2 个 LW + GetData(temp[0], "制丸1", "PLC.Blocks.HMI_EM02.Temperature_PV[1]", 0, 16) + SetData(temp[0], "Local HMI", LW, 200, 16) +end macro_command +``` +> ⚠ **长度存疑**:`float` 每个占 2 个寄存器,16 个 REAL = 32 字(LW200~231)。但 `SetData(..., LW, 200, 16)` 只写 16 字 = 8 个 REAL。注释写的 `[16]→LW230/231` 与调用参数**必有一处错**,需核对显示元件的地址范围。 + +**`出条温度监控`(ID 049,周期 10×100ms = 1 s)** +``` +macro_command main() + float temp[10] + GetData(temp[0], "制丸1", "PLC.Blocks.HMI_EM02.HIKMICRO_Temp_R[1]", 0, 10) + SetData(temp[0], "Local HMI", LW, 240, 10) +end macro_command +``` +> ⚠ 同上:10 个 REAL = 20 字(LW240~259),`count=10` 只覆盖到 LW249。 + +**`屏蔽通讯异常提示`(ID 048,周期 1×100ms = 100 ms)** +``` +macro_command main() + short ON + ON = 1 + SetData(ON, "Local HMI", LB, 11960, 1) + SetData(ON, "Local HMI", LB, 11961, 1) + SetData(ON, "Local HMI", LB, 11962, 1) + SetData(ON, "Local HMI", LB, 11963, 1) + SetData(ON, "Local HMI", LB, 11964, 1) + SetData(ON, "Local HMI", LB, 11965, 1) + SetData(ON, "Local HMI", LB, 11966, 1) + SetData(ON, "Local HMI", LB, 11967, 1) +end macro_command +``` +> 含义:每 100 ms 把**设备 1~8** 的 "Device No Response" 弹窗全部压回屏蔽。要恢复提示必须改这支宏。周期可放宽到 1 s,没必要 100 ms。 + +**`IO`(ID 050,周期 1×100ms = 100 ms)——正文待补后半段** + +``` +macro_command main() + short bTrigger + unsigned char byteA, byteB, byteC, byteD + bTrigger = 0 + byteA = 0 + byteB = 0 + byteC = 0 + byteD = 0 + GetData (bTrigger, "Local HMI", LW, 300, 1) // IO 组索引(由 042/044/045 写入) + if bTrigger==1 then // 制丸 DI1-2 + GetData (byteA, "制丸1", "PLC.Tags.Table.Local_DI01A", 1) + GetData (byteB, "制丸1", "PLC.Tags.Table.Local_DI01B", 1) + GetData (byteC, "制丸1", "PLC.Tags.Table.Local_DI02A", 1) + GetData (byteD, "制丸1", "PLC.Tags.Table.Local_DI02B", 1) + end if + ...(2=DI3-4、3=DI5-6、4=DO1-2、5=DO3-4、6=上料 DI1-2 …) +end macro_command +``` +> 已看到 1~6 组;**6 之后的分支待补**。注意它读的是 `PLC.Tags.Table.Local_*` 这一族符号(不是 `HMI_EM02` DB)。 + +### 6.2.1 补录时发现的问题 + +| # | 问题 | 影响 | +| --- | --- | --- | +| 1 | **`LW-300` 被两处占用**:`X1Y1` 文档里是「节点状态」首地址;现在 042/044/045 写它、050 读它 | 若 X1Y1 仍用 `LW-300~311`,节点状态会被 IO 索引覆盖 | +| 2 | `上料参数` 写 `LW-2 = 210`,而 210 是「清洗-点动」 | 点“上料参数”会跳到清洗点动页 | +| 3 | 047/049 的 float 拷贝长度与注释不符 | 显示可能只更新一半点位 | +| 4 | 048 周期 100 ms 写 8 个位 | 无谓负载,建议 1 s | +| 5 | 050 周期 100 ms 读 4×N 个符号 | IO 页不看时也在刷,建议改成按页面触发 |