我有两个问题:
我想知道使用activeX可以从C#或python传递到labview的哪种变量类型。 我想它们会是数字类型,字符串等等。但是路径或错误集群呢?
同样在labview中,我通常将labview对象传递到我的子目录中。如何用其他语言做到这一点?
让我们说我有一个自定义的数据库对象,我通常在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
答案 0 :(得分:1)
你有很多问题要回答......我会为他们所有人提供一些一般性答案。
LabVIEW从LabVIEW 2010开始支持.NET 4.0。早于此版本的版本通常支持.NET 3.5。您可以使用构造函数节点,属性节点和调用节点在LabVIEW中调用.NET代码并使用.NET对象。在调色板中搜索.NET,你会发现一些很好的支持。
LabVIEW对传递数据的支持有限。传递LabVIEW对象(类)很难(如果不是不可能的话。我在LabVIEW团队工作,我不确定......主要是因为我从未尝试过)。您可以将大多数其他类型展平为字符串(更好地描述为我们视为字符串的u8数组)并将结果字符串传递给.NET或本机DLL。你可以在这里阅读flattened data format。
你一定要看看Measurement Studio。他们有一些很棒的工具可以在.NET中创建类似LabVIEW的控件。您可能也对LabWindows感兴趣(我会链接它,但是因为我是一个相对较新的用户所以不会让我这么做)。我知道看起来我只是想销售更多的NI产品,但说实话,这些可能是你想要做的可行的解决方案。
没有公开的方法可以从.NET代码调用VI(上次我检查过。自从我使用Measurement Studio以来已经有3年了,这是最有可能帮助你从.NET调用VI的产品。)
答案 1 :(得分:1)
LabVIEW有一个生成.NET程序集的选项,它可以包装你的VI,并且可以从.NET应用程序中调用。我认为,这是G开发人员在尝试在.NET应用程序中使用G代码时经常忽略的选项之一。这是LV项目中BuildSpecification中的“ .NET Interop Assembly ”选项。
您可以从项目中选择要在.NET应用程序中调用的VI(我认为它也可以为LVOOP生成);生成.NET包装程序集;然后使用此包装程序集与.NET应用程序中的LabVIEW代码进行交互。
当然,如果类型是基本的,那么在选择VI时,它会自动配置功能签名。我不确定,如果引用/句柄可以在.NET / LabVIEW边界之间无缝传递。但是,我确信你在LabVIEW方面编写一个整数/字符串到LVObject-map的速度更快,然后使用通用类型来跨越边界引用它们,而不是重写所有代码。 .NET语言。