2016-05-23 10 views
1

確かに、関数グローバル変数(FGV)を使用して実行できます。コードの冒頭で、私はFGVから状態(ブール値、ネメリック値など)を読み取り、そのデータをFacade.viのシフトレジスタに配線します。ループが終了した後、データをFGVに書き込んで、次回に再利用できます。LabVIEW - 内部状態を保持し、それをXコントロールで再利用する方法

しかし、複数のXコントロールのインスタンスを1つのインスタンスではなくVIに使用すると問題が発生します。 非リエントラント Xコントロールの異なるインスタンスで使用されるFGVは共通の状態を共有します。

Xコントロールのインスタンスとは独立して内部状態を保持できる方法はありますか?

ありがとうございました。

答えて

0

ここに私の同僚の答えがあります。彼は実際にXControlのインスタンスとは独立して内部状態を保持します。

彼はFGVを使用しますが、シフトレジスタの1つにはVIクローン名が含まれ、もう1つにはXControlインスタンスのクラスタ(状態)の配列が含まれています。 FGVはまだリエントラントではなく、複数のインスタンスは共通のFGVを使用します。インスタンスの1つが独自の状態を読み込みたい場合は、そのVIクローン名をFGVに渡した後、FGVはVIクローン名に従って状態を返します。一方、インスタンスの1つが作業を完了すると、whileループ終了後にVIクローン名と状態がFGVに渡されます。 FGVはVIクローン名をスタックし、状態に応じてシフトレジスタに別々にスタックします。このメソッドは、内部状態をXControlのインスタンスとは独立して保持します。

Stack method used in FGV

+0

これはもちろん最適な解決策ではありませんが、解決策です。私は私のソリューションのMarcoMを好むだろう。 –

3

State ability and/or Custom Propertiesを使用すると、Xコントロールの外観や動作を制御するための変数を格納できます。

どちらの場合も、Xコントロールの各インスタンスは異なる状態値を持ちます。

1

私は同じ問題に直面し、DVRsを使用して解決しました。

コード開始時に、DVRを起動し、参照をグローバル変数に保存する必要があります。これを行うことで、 "FGV"をリエントラントに設定できますが、それでも正しく機能します。

-1

だけFGVsがフル再入可能にします。

関連する問題