使用ActiveX在c#和Labview之间传递参数

本文关键字:之间 参数 Labview ActiveX 使用 | 更新日期: 2023-09-27 18:15:08

我有两个问题:

我想知道我可以使用activeX从c#或python传递到labview的变量类型是什么。我想应该是数字类型,字符串等。但是路径或者错误簇呢?

同样在labview中,我通常将labview对象传递到子vi中。从另一种语言怎么可能做到这一点呢?

假设我有一个自定义的数据库对象,我通常在labview中传递。我可以从c#中调用一些工厂方法vi,并在运行vi后从前面板获得控件。将其转换为c#中的通用对象,然后调用另一个vi,并传递对象?

// Get a vi reference, and run my databaseFactory vi.
string databaseFactoryPath = ...;  
VirtualInstrument viTest = labVIEWApp.GetVIReference(databaseFactoryPath "", false, 0);
databaseFactoryVi.Run(true);
// Get the database labview object from the frontpanel control called "database out"
object databaseObject = (object)viTest.GetControlValue("database out");
// Obtain a reference to a database method called load.vi
string databaseLoadPath = ...;
VirtualInstrument databaseload = labVIEWApp.GetVIReference(databaseLoadPath "", false, 0);
string parameterName = "database in";
databaseLoad.Call( parameterName, databaseObject );  

这不起作用,因为在viTest会抛出异常。GetControlValue("数据库"):参数不正确。(来自HRESULT的异常:0x80070057 (E_INVALIDARG))"

有谁知道这样做是可能的吗?(我试图摆脱labview编程,但我不想在这个过程中渲染我所有的代码无用。)

谢谢,labjunky

使用ActiveX在c#和Labview之间传递参数

LabVIEW有一个选项来生成一个。net程序集,它可以包装你的vi,并且可以从你的。net应用程序中调用。我认为,这是在。net应用程序中使用G代码时经常被G开发人员忽略的选项之一。这是""。. NET互操作程序集"选项,在LV项目的BuildSpecification中。

你可以从你的项目中选择你想要在你的。net应用程序中调用的VIs(我认为,它也可以为loop VIs生成);生成。net包装程序集;然后使用这个包装程序集与。net应用程序中的LabVIEW代码进行接口。

当然,如果是基本类型,那么在选择VIs时,会自动配置功能签名。我不确定,如果引用/句柄可以在。net/labview边界之间无缝地传递。但是,我确信在LabVIEW端编写一个整数/字符串到lvobject映射,然后使用公共类型跨边界引用它们,比在。net语言中重写所有代码更快。

你有很多问题要回答…我将对所有这些问题给出一些一般性的答案。

LabVIEW在LabVIEW 2010中支持。net 4.0。更早的版本通常支持。net 3.5。您可以在LabVIEW中使用构造函数节点、属性节点和调用节点来调用。net代码和使用。net对象。在调色板中搜索. net,你会发现一些很好的支持。

LabVIEW对传递数据的支持是有限的。传递LabVIEW对象(类)是困难的(如果不是不可能的话)。我在LabVIEW团队工作,我不确定……主要是因为我从未尝试过)。您可以将大多数其他类型扁平化为字符串(更好地描述为我们视为字符串的u8数组),并将结果字符串传递给。net或本机DLL。你可以在这里阅读关于扁平数据格式的内容。

你一定要看看Measurement Studio。他们有一些很棒的工具可以在。net中创建类似labview的控件。您可能也对LabWindows感兴趣(我会链接它,但SO不会让我,因为我是一个相对较新的用户)。我知道这看起来像是我在努力销售更多的NI产品,但老实说,这些可能是您想要做的可行的解决方案。

没有从。net代码调用VI的公共方式(上次我检查过)。我开发Measurement Studio已经3年了,它是最有可能帮助你从。net调用VIs的产品。