在设置了输入值之后,我尝试了VI.Call()函数,LabVIEW VI将输入值作为‘0’(0)。
import win32com.client                                      # ActivX Client
LabVIEW = win32com.client.Dispatch("LabVIEW.Application")   # Connect LabVIEW
VI = LabVIEW.getVIReference(r'D:\New folder\LabVIEW.py')    # Get VI Reference
VI._FlagAsMethod('Call')                                    # Call the VI
VI.Call()
VI.setcontrolvalue('Input 1', '56')                         # Set Input Value
VI.setcontrolvalue('Input 2', '10')                         # Set Input Value
result = VI.getcontrolvalue('out')                          # Get Output Value
print(result)                                               # Print result on console我期望输入值为56和53,但实际输入是0和0(在LabVIEW中自动赋值为默认值)。
发布于 2019-06-02 13:15:47
调用()已经执行VI,因此设置它的控件为时已晚。首先设置它们,然后运行调用()。
我也非常肯定,call方法等待VI终止,所以在后面设置控件就更没有意义了。
即使不等待,VI也可能已经开始在设置控件值之前处理它们。在这种情况下,您还可以在vi向其写入结果之前读出结果指示符,也就是说,在读取结果之前,您必须等待vi完成。
更新:
我自己试了一下,增加了一些调试。这个python代码显示了开始和停止时间,并将控件设置为随机值:
import win32com.client                                      # ActivX Client
from datetime import datetime
import random
a=random.randint(0,100)
b=random.randint(0,100)
c=a+b
LabVIEW = win32com.client.Dispatch("LabVIEW.Application")   # Connect LabVIEW
VI = LabVIEW.getVIReference(r'D:\lvTest.vi')                # Get VI Reference
print "Call: ",datetime.now().strftime("%H:%M:%S.%f")
VI._FlagAsMethod('Call')                                    # Call the VI
VI.setcontrolvalue('Input 1', a)                            # Set Input Value
VI.setcontrolvalue('Input 2', b)                            # Set Input Value
VI.Call()
result = VI.getcontrolvalue('out')                          # Get Output Value
print "Done: ",datetime.now().strftime("%H:%M:%S.%f")
print " %d + %d = %d.  LV result: %f   Equal: %s"%(a,b,c,result, result==c)我还将一些日志添加到VI中,但让它将其写入一个文件:

对我来说,无论LV是否打开,这都是有效的。
,除了.当VI重入时的(属性->执行)。在这种情况下,VI总是从其控件中读取0,并将0写入其指示符。即使它写了其他东西,Python也会读取这个指示符的默认值(如果没有更改,则为0)。
这是意料之中的!当要执行重入VI时,将在内存中创建它的新实例(副本),然后执行该实例。如果您的VI是可重入的,python将打开它,正确地设置值,但是当它执行时,将创建并执行一个具有默认值的新实例。当它终止时,python从原始实例读取结果,该实例从未运行。
不幸的是,我不知道如何在这里解决这个问题。
发布于 2021-11-10 04:44:52
VI.Call()将输入控件重置为缺省值,但是VI.Run()在VI.setcontrolvalue调用后可以正常工作。我打电话给的VI不是重来的。在使用VI._FlagAsMethod()方法之前,您必须使用VI.Run(‘Run’),否则就会出错。
https://stackoverflow.com/questions/56180979
复制相似问题