【发布时间】:2022-01-03 21:37:44
【问题描述】:
来自NI-Site:
labview = win32com.client.Dispatch("Labview.Application")
VI = labview.getvireference(r'c:\TEMP\ctrl\ctrl.vi')
print(f'Name: {VI.Name}')
print(VI.getcontrolvalue('main'))
只要我的 VI 不在项目中,它就可以正常工作。但是,我在项目中有一个正在运行的 VI,并且想从 python 读取/写入控制值。没有错误,但 python 读取/写入项目外部的 VI 的单独实例。我可以修改 VI 的路径,以便 python 访问项目中的实例吗?
如何重现:
-
Python 脚本
from icecream import ic import win32com.client import time import numpy as np class LabView(): def __init__(self,vi): self.LabVIEW = win32com.client.Dispatch("Labview.Application") self.VI = self.LabVIEW.getvireference(vi) def set_potential(self,potential): ic(potential) self.VI.SetControlValue("Set Potential",potential) vi = r'C:\path...\testProject\test.vi' lab = LabView(vi) while True: lab.set_potential(np.random.uniform(-2,2)) time.sleep(3) -
在项目外打开并运行 VI 并启动 python 脚本 -> 工作
-
从 Project Explorer 打开并运行 VI 并启动 python 脚本 -> 不起作用
【问题讨论】:
-
您能分享一下您的项目结构吗?我进行了快速测试——就我而言,一切正常。我有 VI,它是项目的一部分。 VI 运行时,python 代码可以很好地读取指标值。
-
我已经添加了结构的图片。我可以同时打开同一个VI的两个实例,一个在项目内,一个在项目外。 Python 如何知道它应该引用哪个实例?
-
我相信Python并不关心VI是从哪里启动的。我做了简单的测试——创建项目,添加VI,保存项目。从项目中打开 VI,启动它 - 然后执行 python 脚本。它准确地捕捉到了那个特定的 VI。你怎么知道,python 读/写了 VI 的另一个实例?
-
我有一个小脚本,每秒将控制值设置为随机值。当我在项目外部打开 VI 时,我可以看到值发生了变化(运行时以及不运行时)。然后我关闭这个VI并打开项目。从 Project Explorer 启动 VI,值没有改变。
-
@kosist 你介意分享你的简单测试吗?我试图重新创建它,它和我的主项目有同样的问题
标签: python com activex labview