From da60912d8bce265e5fab2ab2e1b06f2b826ccc34 Mon Sep 17 00:00:00 2001 From: liuyu65 Date: Tue, 27 Oct 2026 13:51:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=20IO(050)=20=E5=85=A8=E6=96=87=E4=B8=8E=20main-init=20?= =?UTF-8?q?=E6=A0=B8=E5=AF=B9=EF=BC=8C=E8=AE=B0=E5=BD=95=20IO=20=E7=B4=A2?= =?UTF-8?q?=E5=BC=95=E9=94=99=E4=BD=8D=E7=AD=89=204=20=E4=B8=AA=E6=96=B0?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 050:1~19 有效分支、6/7 缺号、20~24 制丸2 预留已注释、末尾写 LW-310~313 - 发现 IO切换上料(9→158)、IO切换清洗(15→168) 索引与窗口错位;制丸(1→151) 正确 - LW-310~313 与旧文档 X1Y1 的 LW-300~311 重叠 - main-init 未变:127/18/127/18 + RW-61=1 --- 设计文档/宏指令.md | 123 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 115 insertions(+), 8 deletions(-) diff --git a/设计文档/宏指令.md b/设计文档/宏指令.md index 149cc0d..f1c6b66 100644 --- a/设计文档/宏指令.md +++ b/设计文档/宏指令.md @@ -37,7 +37,7 @@ | 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 以后待补 | +| 050 | `IO` | P(100ms) | 按 `LW-300` 索引读 `PLC.Tags.Table.Local_*`(1~19) | ✅ 已补全(20~24 注释) | ### 6.0.1 与旧文档的差异(已确认) @@ -57,9 +57,9 @@ | 046(上料参数) | ✅ 已补录,但**窗口 210 与「清洗-点动」重名,存疑** | | 047/049(温度) | ✅ 已补录,但 **float 拷贝长度与注释不符**(见 6.2.1) | | 048(屏蔽通讯) | ✅ 已补录:100 ms 周期压 8 个位 | -| 050(IO) | ⚠ **只补到第 6 组**,7 以后的分支待补 | +| 050(IO) | ✅ 已补全:1~19 有效,20~24 为制丸2 预留(注释) | | 013(macro_13) | ✅ 空宏,可删 | -| 000(main-init) | ⚠ 待核对:窗口扩到 282 后 `LW-70~73` 位图值是否仍为 127/18/127/18 | +| 000(main-init) | ✅ 已核对:仍为 `127/18/127/18` + `RW-61=1`,未变;说明 130~282 新页不走 X/Y 导航 | ## 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`。 @@ -1232,7 +1232,9 @@ end macro_command ``` > 含义:每 100 ms 把**设备 1~8** 的 "Device No Response" 弹窗全部压回屏蔽。要恢复提示必须改这支宏。周期可放宽到 1 s,没必要 100 ms。 -**`IO`(ID 050,周期 1×100ms = 100 ms)——正文待补后半段** +**`IO`(ID 050,周期 1×100ms = 100 ms)** + +按 `LW-300` 的索引读对应 IO 组到四个字节,并写 `LW-310~313` 供画面调试显示。 ``` macro_command main() @@ -1243,18 +1245,119 @@ macro_command main() byteB = 0 byteC = 0 byteD = 0 - GetData (bTrigger, "Local HMI", LW, 300, 1) // IO 组索引(由 042/044/045 写入) - if bTrigger==1 then // 制丸 DI1-2 + GetData (bTrigger, "Local HMI", LW, 300, 1) // IO 组索引(042/044/045 写入) + + if bTrigger==1 then // 制丸 DI01-02 → 窗口 151 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 …) + if bTrigger==2 then // 制丸 DI03-04 → 152 + GetData (byteA, "制丸1", "PLC.Tags.Table.Local_DI03A", 1) + GetData (byteB, "制丸1", "PLC.Tags.Table.Local_DI03B", 1) + GetData (byteC, "制丸1", "PLC.Tags.Table.Local_DI04A", 1) + GetData (byteD, "制丸1", "PLC.Tags.Table.Local_DI04B", 1) + end if + if bTrigger==3 then // 制丸 DI05 → 153 + GetData (byteA, "制丸1", "PLC.Tags.Table.Local_DI05A", 1) + GetData (byteB, "制丸1", "PLC.Tags.Table.Local_DI05B", 1) + end if + if bTrigger==4 then // 制丸 DO01-02 → 154 + GetData (byteA, "制丸1", "PLC.Tags.Table.Local_DO01A", 1) + GetData (byteB, "制丸1", "PLC.Tags.Table.Local_DO01B", 1) + GetData (byteC, "制丸1", "PLC.Tags.Table.Local_DO02A", 1) + GetData (byteD, "制丸1", "PLC.Tags.Table.Local_DO02B", 1) + end if + if bTrigger==5 then // 制丸 DO03-04 → 155 + GetData (byteA, "制丸1", "PLC.Tags.Table.Local_DO03A", 1) + GetData (byteB, "制丸1", "PLC.Tags.Table.Local_DO03B", 1) + GetData (byteC, "制丸1", "PLC.Tags.Table.Local_DO04A", 1) + GetData (byteD, "制丸1", "PLC.Tags.Table.Local_DO04B", 1) + end if + // 6、7 未使用(跳过) + if bTrigger==8 then // 上料 DI01-02 → 158 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI01A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI01B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DI02A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DI02B", 1) + end if + if bTrigger==9 then // 上料 DI03-04 → 159 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI03A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI03B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DI04A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DI04B", 1) + end if + if bTrigger==10 then // 上料 DI05-06 → 160 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI05A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI05B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DI06A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DI06B", 1) + end if + if bTrigger==11 then // 上料 DI07 + Remote DI21 → 161 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI07A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI07B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Remote_DI21A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Remote_DI21B", 1) + end if + if bTrigger==12 then // 上料 DO01-02 → 162 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DO01A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DO01B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DO02A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DO02B", 1) + end if + if bTrigger==13 then // 上料 DO03-04 → 163 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DO03A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DO03B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DO04A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DO04B", 1) + end if + if bTrigger==14 then // 上料 DO05-06 → 164 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DO05A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DO05B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DO06A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DO06B", 1) + end if + if bTrigger==15 then // 清洗 DI11-12 → 166 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI11A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI11B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DI12A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DI12B", 1) + end if + if bTrigger==16 then // 清洗 DI13-14 → 167 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DI13A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DI13B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DI14A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DI14B", 1) + end if + if bTrigger==17 then // 清洗 DO11-12 → 168 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DO11A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DO11B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DO12A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DO12B", 1) + end if + if bTrigger==18 then // 清洗 DO13-14 → 169 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Local_DO13A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Local_DO13B", 1) + GetData (byteC, "上料清洗", "PLC.Tags.Table.Local_DO14A", 1) + GetData (byteD, "上料清洗", "PLC.Tags.Table.Local_DO14B", 1) + end if + if bTrigger==19 then // Remote DO21 + GetData (byteA, "上料清洗", "PLC.Tags.Table.Remote_DO21A", 1) + GetData (byteB, "上料清洗", "PLC.Tags.Table.Remote_DO21B", 1) + end if + // 20~24 为制丸2 预留,现被注释掉 + + // ===== 调试监控输出:画面加 LW-310~313 数值元件查看 ===== + SetData(byteA, "Local HMI", LW, 310, 1) + SetData(byteB, "Local HMI", LW, 311, 1) + SetData(byteC, "Local HMI", LW, 312, 1) + SetData(byteD, "Local HMI", LW, 313, 1) end macro_command ``` -> 已看到 1~6 组;**6 之后的分支待补**。注意它读的是 `PLC.Tags.Table.Local_*` 这一族符号(不是 `HMI_EM02` DB)。 +> `bTrigger` 6、7 **缺号未用**;`20~24` 是「制丸2」的预留分支,已注释。 +> 索引 ↔ 窗口对照:1~5 → 151~155;8~14 → 158~164;15~18 → 166~169;19 → Remote DO21。 ### 6.2.1 补录时发现的问题 | # | 问题 | 影响 | @@ -1264,3 +1367,7 @@ end macro_command | 3 | 047/049 的 float 拷贝长度与注释不符 | 显示可能只更新一半点位 | | 4 | 048 周期 100 ms 写 8 个位 | 无谓负载,建议 1 s | | 5 | 050 周期 100 ms 读 4×N 个符号 | IO 页不看时也在刷,建议改成按页面触发 | +| 6 | **`IO切换上料` 索引 9 却跳窗口 158**(158 是 DI1-2,索引 9 读 DI3-4) | 该页显示的是上一组 IO,值对不上标题 | +| 7 | **`IO切换清洗` 索引 15 却跳窗口 168**(15=DI11-12,168=DO11-12) | 同上,错 2 组 | +| 8 | `050` 末尾写 `LW-310~313` 调试值,与旧文档 X1Y1 的 `LW-300~311` 节点状态重叠 | `LW-300` 区已被 IO 占用,X1Y1 地址需重新确认 | +| 9 | `bTrigger` 6、7 缺号;20~24 是制丸2 预留(已注释) | 索引不连续,日后加页容易再次错位 |