2012-02-17 6 views
3

私は、MatlabからActiveXを使用して実行するLabview VIを持っています。 1つの引数(つまり、1つのLabview コントロール)があります。これはタイプ1Dの数値配列です。
MatlabからActiveXを使用してVIを呼び出す方法は、previous postで詳しく説明しています。ActiveXを使用したLabview VIの配列コントロールの値の設定(Matlabを使用)

このVIを実行する前にMatlabでこの配列コントロールの値を設定しようとしています(つまり、MatlabはVIに引数を渡してから実行しますが、Labviewインターフェイスでは手動でアクションを実行しません) 。

GetControlValueメソッドによる値の取得はうまくいきます(私は素晴らしいMatlab配列を取得します)。しかし、GetControlValueで返された値を使用して、同じコントロールの値をSetControlValueに設定しようとすると、コントロールの値は空になります(の空白の行列から明らかです)。使用後にMatlabによって得られたGetControlValue、そしてLabviewではコントロールの値がグレー表示になります)。

コントロールが単一の数値である場合、同じ手順が完全に機能します。
正確にここで間違っていますか?

は、以下の画面キャプチャを参照してください:

Setting the value of the 'y' 1D array control doesn't work

+0

アレイインジケーターで試しましたか? – CharlesB

+0

奇妙なことに、上記の例では、vi.GetControlValue( 'z')も空の行列を返します(SetControlValueで壊れてしまう前に 'y'の場合はありません)。 –

答えて

0

(出典:NIフォーラムの0utlaw)

この問題を回避するには、マトリックスコントロールをLabviewで使用するのが便利です。 Matlabは通常の配列を渡し、LabviewはこれらのMatlab配列を行列にマップします。 2D配列でも正常に動作します。

0

あなたはDLLにVIをコンパイルし、そのように、あなたの関数を呼び出すことができます。これは、LabVIEWのタイプシステムとそのCOMランタイムを抽象化します。

解決しようとしている問題についてさらに詳しく説明できますか?

+0

私の問題はかなり単純です:配列コントロールを持つVIがあるので、VIを実行する前にMatlabを通してこれらのコントロールの値を設定したいと考えています。 私の記事で述べたように、これらのコントロールが数字だけの場合は問題はありません。私はSetControlValue( 'a'、4)を使用することができ、 'a'という名前のコントロールの値は4に変更されます。しかし、配列コントロールの場合は動作しません.. GetControlValueがそのようなコントロールは素敵なMatlab配列を返します。 –

+0

DLLにコンパイルしてみましたか? – dFlat

+0

いいえ、スピードとメモリの改善があればそれを検討するかもしれません。また、.NETについても見ていきたいと思います。 しかし、私はこのActiveXメソッドを動作させることに興味があります。非常に一般的で、Pythonでも使えるからです。 –

関連する問題