文档:net-apply 定为唯一权威版本(设备4=制丸1 / 设备5=上料清洗,含 IP 保护,注释已改正)

This commit is contained in:
2026-10-27 11:58:22 +08:00
parent 7bfe8945ef
commit 1d3f6cb4e5
+26 -49
View File
@@ -1013,7 +1013,12 @@ macro_command main() // 宏入口:进 13
end macro_command // 宏结束 end macro_command // 宏结束
``` ```
**`net-apply`**(13 号窗「应用」按钮;另勾选宏属性「当 HMI 启动时即执行一次」,开机自动套用) **`net-apply`**(工程宏 ID 037;13 号窗「应用」按钮 + 宏属性勾「当 HMI 启动时即执行一次」)
> **设备归属(10-27 按 EB 设备列表实测,数字以此为准)**
> `设备4 = 制丸1(192.168.189.22)`、`设备5 = 上料清洗(192.168.189.2)`,两台都是 S7CommPlus + 符号寻址。
> 所以:**上料 IP → `LW-9605` / `LB-10071`(设备5)**,**制丸 IP → `LW-9600` / `LB-10070`(设备4)**。
``` ```
macro_command main() // 宏入口:点「应用」/ 开机自动套用 macro_command main() // 宏入口:点「应用」/ 开机自动套用
short v[4] = {0,0,0,0} // 4 字暂存数组 short v[4] = {0,0,0,0} // 4 字暂存数组
@@ -1026,7 +1031,7 @@ macro_command main() // 宏入口:点「
GetData(hmi0, "Local HMI", RW, 20, 1) // 读 RW-20(HMI IP 第一段) GetData(hmi0, "Local HMI", RW, 20, 1) // 读 RW-20(HMI IP 第一段)
GetData(role, "Local HMI", RW, 60, 1) // 读 RW-60(本机角色) GetData(role, "Local HMI", RW, 60, 1) // 读 RW-60(本机角色)
GetData(line, "Local HMI", RW, 61, 1) // 读 RW-61(线别) GetData(line, "Local HMI", RW, 61, 1) // 读 RW-61(线别)
if line == 0 then // 线别未设置/无效? if line == 0 then // 线别未设置?
line = 1 // 默认 A 线 line = 1 // 默认 A 线
end if // 结束判断 end if // 结束判断
if role == 1 then // 上料屏? if role == 1 then // 上料屏?
@@ -1053,69 +1058,41 @@ macro_command main() // 宏入口:点「
SetData(on, "Local HMI", LB, 12094, 1) // 置 LB-12094 → HMI 网络生效 SetData(on, "Local HMI", LB, 12094, 1) // 置 LB-12094 → HMI 网络生效
end if // 结束判断 end if // 结束判断
GetData(v[0], "Local HMI", RW, 40, 4) // RW → 上料 PLC IP GetData(v[0], "Local HMI", RW, 40, 4) // RW → 上料 PLC IP
if v[0] == 0 then // 上料 IP 没填(新屏/模拟)? if v[0] == 0 then // 没填(新屏/模拟)→ 不写、不重连
v[0] = 0 // 不写、不重连,保留工程里的设备 IP v[0] = 0 // 保留工程里的设备 IP
else // 已填 → 套用 else // 已填 → 套用(设备5 = 上料清洗)
SetData(v[0], "Local HMI", LW, 9600, 4) // 写上料 PLC(设备4) SetData(v[0], "Local HMI", LW, 9605, 4) // 写设备5 IP
SetData(on, "Local HMI", LB, 10070, 1) // 重连设备4 SetData(on, "Local HMI", LB, 10071, 1) // 重连设备5
end if // 结束判断(防把设备 IP 刷成 0.0.0.0) end if // 结束判断
if okp == 1 then // 需要连制丸设备? if okp == 1 then // 需要连制丸设备?
if line == 1 then // 选 A 线 if line == 1 then // 选 A 线
GetData(v[0], "Local HMI", RW, 44, 4) // RW → 制丸A IP GetData(v[0], "Local HMI", RW, 44, 4) // RW → 制丸A IP
else // 选 B 线 else // 选 B 线
GetData(v[0], "Local HMI", RW, 48, 4) // RW → 制丸B IP GetData(v[0], "Local HMI", RW, 48, 4) // RW → 制丸B IP
end if // 结束判断 end if // 结束判断
if v[0] == 0 then // 制丸 IP 没填? if v[0] == 0 then // 没填 → 不写、不重连
v[0] = 0 // 不写、不重连 v[0] = 0 // 保留工程里的设备 IP
else // 已填 → 套用 else // 已填 → 套用(设备4 = 制丸1)
SetData(v[0], "Local HMI", LW, 9605, 4) // 写制丸 PLC(设备5) SetData(v[0], "Local HMI", LW, 9600, 4) // 写设备4 IP
SetData(on, "Local HMI", LB, 10071, 1) // 重连设备5 SetData(on, "Local HMI", LB, 10070, 1) // 重连设备4
end if // 结束判断 end if // 结束判断
end if // 结束判断(角色=0:不连制丸设备,防误连) end if // 结束判断(角色=0:不连制丸设备,防误连)
DELAY(1000) // 等 1 秒 DELAY(1000) // 等 1 秒(嫌开机慢可改 300)
SetData(z, "Local HMI", LB, 12094, 1) // 清 LB-12094 SetData(z, "Local HMI", LB, 12094, 1) // 清 LB-12094
SetData(z, "Local HMI", LB, 10070, 1) // 清 LB-10070 SetData(z, "Local HMI", LB, 10070, 1) // 清 LB-10070
SetData(z, "Local HMI", LB, 10071, 1) // 清 LB-10071 SetData(z, "Local HMI", LB, 10071, 1) // 清 LB-10071
end macro_command // 宏结束 end macro_command // 宏结束
``` ```
> **IP 为 0 不覆盖(10-27 修订)**:`RW-40~51` 首段为 0(新屏未填、PC 模拟器空值)时跳过写入与重连。否则开机/在线模拟会把设备 IP 刷成 `0.0.0.0` 并主动重连 → 通讯必失败,绑 PLC 地址的元件整片不显示(详见 `开发主文件.md` 10.1)。 **与工程现版(10-27 摘录)的三个差别**
#### ✅ 工程实际版(10-27 摘录)—— 已确认:**代码是对的,注释写反了** | # | 现版 | 本节 |
| --- | --- | --- |
工程里 `net-apply` 的实际代码: | 1 | 注释把设备号写反(`写上料 PLC(设备4)`) | 注释已改正;**数字一个没改** |
| 2 | 无 `v[0]==0` 保护,RW 为空时把 IP 刷成 `0.0.0.0` | 首段为 0 跳过写入与重连 |
``` | 3 | `DELAY(1000)` | 保留,可改 300 缩短开机等待 |
GetData(v[0], RW, 40, 4) → SetData(v[0], LW, 9605, 4) + SetData(on, LB, 10071, 1) // 注释写「上料 PLC(设备4)」
GetData(v[0], RW, 44/48, 4) → SetData(v[0], LW, 9600, 4) + SetData(on, LB, 10070, 1) // 注释写「制丸 PLC(设备5)」
```
按 `lwaddr.csv` 的系统定义:
| 系统寄存器 | 含义 |
| --- | --- |
| `LW-9600`~`9603` | **设备 4** 的 IP0~IP3 |
| `LW-9605`~`9608` | **设备 5** 的 IP0~IP3 |
| `LB-10070` / `LB-10071` | 在线改 IP 后**重连设备 4 / 设备 5** |
| `LB-10100` / `LB-10400` | 与**设备 4 / 设备 5** 的通讯状态 |
**EB 设备列表实测(10-27)**:
| 设备 | 名称 | IP | 协议 |
| --- | --- | --- | --- |
| 设备 4 | `制丸1` | `192.168.189.22:102` | S7CommPlus / Symbolic Addressing |
| 设备 5 | `上料清洗` | `192.168.189.2:102` | S7CommPlus / Symbolic Addressing |
于是:**上料 IP → 设备 5、制丸 IP → 设备 4,与设备列表完全一致,代码正确**。写反的是脚本注释(和改版前的文档):
- `// 写上料 PLC(设备4)` → 应为 **设备5**
- `// 重连设备4` → 应为 **重连设备5**
- `// 写制丸 PLC(设备5)` / `// 重连设备5` → 应为 **设备4**
> **只改注释,不要改 9600/9605、10070/10071 的数字。**
**与上文(理想版)仍有的两处差异**:① 没有 `v[0]==0` 的 IP 保护(新屏/模拟会把 IP 写成 `0.0.0.0`);② 末尾 `DELAY(1000)` 会让开机界面卡 1 秒。
> `LB-11963`/`LB-11964` 那条屏蔽设备 1~8 通讯弹窗的宏(ID 048 `屏蔽通讯异常提示`,周期执行)与本宏无关,别混。
**`line-ab-switch`**(13 号窗「A/B 切换」按钮;仅本机角色=1 生效) **`line-ab-switch`**(13 号窗「A/B 切换」按钮;仅本机角色=1 生效)
``` ```
macro_command main() // 宏入口:点 A/B 线切换按钮 macro_command main() // 宏入口:点 A/B 线切换按钮