首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在调用函数[VI.Call()]时给出输入参数值?

如何在调用函数[VI.Call()]时给出输入参数值?
EN

Stack Overflow用户
提问于 2019-05-17 06:45:46
回答 2查看 499关注 0票数 0
  1. 我正试图通过LabVIEW通信来控制python中的ActiveX面板。
  2. 我无法在LabVIEW中自动分配输入参数值。
  3. 如果我按下面的程序代码运行,它将为两个输入(输入1,输入2)指定为“零”。
  4. 每当我试图运行程序时,控件都会以默认值形式运行。
  5. 在VI.Call()函数(调用和值赋值应该同时进行)时,是否有任何方法来分配输入值?
  6. 对这个问题给出一个结论。

在设置了输入值之后,我尝试了VI.Call()函数,LabVIEW VI将输入值作为‘0’(0)。

代码语言:javascript
运行
复制
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中自动赋值为默认值)。

简单加成Pgm

EN

回答 2

Stack Overflow用户

发布于 2019-06-02 13:15:47

调用()已经执行VI,因此设置它的控件为时已晚。首先设置它们,然后运行调用()。

我也非常肯定,call方法等待VI终止,所以在后面设置控件就更没有意义了。

即使不等待,VI也可能已经开始在设置控件值之前处理它们。在这种情况下,您还可以在vi向其写入结果之前读出结果指示符,也就是说,在读取结果之前,您必须等待vi完成。

更新:

我自己试了一下,增加了一些调试。这个python代码显示了开始和停止时间,并将控件设置为随机值:

代码语言:javascript
运行
复制
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从原始实例读取结果,该实例从未运行。

不幸的是,我不知道如何在这里解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2021-11-10 04:44:52

VI.Call()将输入控件重置为缺省值,但是VI.Run()在VI.setcontrolvalue调用后可以正常工作。我打电话给的VI不是重来的。在使用VI._FlagAsMethod()方法之前,您必须使用VI.Run(‘Run’),否则就会出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56180979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档