【问题标题】:Setting the value of an array control of a Labview VI through ActiveX (with Matlab)通过ActiveX设置Labview VI的数组控件的值(使用Matlab)
【发布时间】:2012-03-08 18:50:23
【问题描述】:

我有一个 Labview VI,我打算通过 ActiveX 从 Matlab 运行。它有一个参数(即一个 Labview 控件),它是一维数值数组类型。
通过 ActiveX 从 Matlab 调用 VI 的方法在previous post 中有详细说明。

我试图在运行VI之前在Matlab中设置这个数组控件的值(也就是说,Matlab将传递一个参数给VI然后运行它;不需要通过Labview界面手动执行任何操作)。

通过GetControlValue 方法获取值工作正常(我得到了一个不错的 Matlab 数组)。但是,当我尝试使用GetControlValue 返回的值设置同一个控件的值时,该控件的值变为空(从值 Empty matrix: 1-by-0 Matlab再次使用GetControlValue后得到的,在Labview中控件的值变灰了)。

当控件是单个数值时,同样的过程可以完美运行。
这里到底出了什么问题?

请看下面的屏幕截图:

【问题讨论】:

  • 你试过数组指示器吗?
  • 奇怪的是,在上面显示的示例中,vi.GetControlValue('z') 还返回一个空矩阵..(在使用 SetControlValue 破坏它之前,'y' 不是这种情况)。

标签: matlab activex labview


【解决方案1】:

您可以将 VI 编译为 DLL 并以这种方式调用您的函数。这会抽象出 LabVIEW 的类型系统及其 COM 运行时。

您能否提供有关您要解决的问题的更多详细信息?

【讨论】:

  • 我的问题很简单:给定一个具有数组控件的 VI,我希望能够在运行 VI 之前通过 Matlab 设置这些控件的值。正如我在帖子中所说,当这些控件只是数字时不会出现任何问题。例如,我可以使用 SetControlValue('a', 4),并将名为 'a' 的控件的值更改为 4。但是,对于数组控件,它不起作用.. 考虑到 GetControlValue 用于这样的控件返回一个不错的 Matlab 数组..
  • 您是否尝试编译为 DLL?
  • 不,但如果它提供速度和内存改进,我可能会考虑它。我还想研究.NET。但是,我有兴趣让这个 ActiveX 方法工作,因为它非常通用,也可以与 Python 一起使用..
  • 您将在尝试通过 COM 调用 LV 时遇到问题。你基本上最终会重新发明 LV RTE 轮子。我强烈建议将你的代码封装在一个 DLL 中......在 LV 中你不能在 Matlab 中做什么?还是像你说的 C#?
  • 仪表控制 :) (除非我买了 Matlab 的数据采集工具箱.. $$$ !)。
【解决方案2】:

(来源:NI 论坛上的 0utlaw)。

解决此问题的一个有用方法是在 Labview 中使用 矩阵控件。 Matlab 然后可以传递通常的数组,Labview 将这些 Matlab 数组映射到矩阵。也可以按预期使用 2D 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多