使用多个
Excel Get Data.vi
读取不同数据,但只有一个Dispose Report.vi
,如何确保在 Dispose 执行前,其他 VI 都已完成?
✅ 目标是:
✔ 所有 Excel Get Data.vi
都完成
→ 再执行 Dispose Report.vi
(释放引用)
🧠 核心思路:强制数据流顺序,确保 Dispose 是最后执行的
即使你用多个并行的 Excel Get Data.vi
,只要你不控制顺序,LabVIEW 可能会先执行 Dispose,再执行 Get Data → 💥 报错!
✅ 解决方案:使用 error wire
串联所有分支 → 保证 Dispose 是最后
✔ 方法一:串联所有 Get Data 的 error out
到 Merge Errors
,最后连入 Dispose
✅ 图示结构(逻辑):
plaintext
复制编辑
report ↓ ┌───────┴────────┐ │ │ ↓ ↓ Get Data.vi 1 Get Data.vi 2 │ │ error out error out │ │ └──────┬─────────┘ Merge Errors ↓ Dispose Report.vi
📌 如何做:
-
每个
Excel Get Data.vi
:-
连上
error in
和error out
-
-
所有的
error out
:-
使用
Merge Errors.vi
聚合起来
-
-
Merge Errors
的输出 → 连到Dispose Report.vi
的error in
-
report
的线照样连接,但重点是 error wire 决定执行顺序
✅ 这样做的好处:
-
即使数据分支是并行的,Dispose 会等所有数据处理完才释放 Excel
-
保证不报错(ActiveX invalid、report reference invalid)
✅ 方法二(更简单)但只适合少量分支:
直接串联 Get Data:
plaintext
复制编辑
Excel Get Data.vi 1 ↓ Excel Get Data.vi 2 ↓ Excel Get Data.vi 3 ↓ Dispose Report.vi
但这种方式不并行,每次只能读取一个 → 效率低,不推荐批量读取时使用
⚠️ 常见错误提醒:
问题 | 结果 |
---|---|
Dispose 执行太早 | 后面 Get Data 会报错 |
多分支没有控制 error wire | 数据流顺序不可靠 |
Dispose 被直接并行放置 | 不保证在最后执行 |
✅ 总结
做法 | 是否推荐 | 原因 |
---|---|---|
用多个 Excel Get Data.vi + 合并 error | ✅ 推荐 | 控制好 Dispose 顺序 |
多分支不控制 error | ❌ 不推荐 | Dispose 可能提前执行 |
用数据线控制顺序(非 error) | ❌ 不可靠 | 引用类型不能只靠数据线 |
Dispose 多次 | ❌ 不要 | 重复释放可能崩溃或报错 |