パート3: 複数のループを同時に停止する
- 更新日2025-02-20
- 9分で読める
安全なシャットダウン手順の作成は、リアルタイムアプリケーションの基本的なコンポーネントです。たとえば、アプリケーションの一部が装置を制御し、アプリケーションの別の部分がアラーム条件を監視している場合、アラーム条件を検知したら、装置を停止させたい場合があります。このようなシナリオでは、ネットワーク共有シェア変数を使用して、複数のループの停止関数とエラー関数を1つにまとめることができます。
シェア変数を作成する
ネットワーク共有シェア変数は、複数のVIと通信可能で、ネットワーク共有シェア変数の読み取り/書き込み処理は相互にブロックしないため、シャットダウンイベントのブロードキャストに最適です。
ネットワーク共有シェア変数を設定するには、以下の手順に従ってください。
- プロジェクトエクスプローラウィンドウでRTターゲットを右クリックし、ショートカットメニューから新規→変数を選択して、シェア変数プロパティダイアログボックスを表示します。
- 変数を構成するには、以下の手順に従ってください。
- シェア変数プロパティダイアログボックスの変数ページで、名前テキストボックスに「Active?」と入力します。
- 変数タイププルダウンメニューからネットワークで共有を選択します。
- データタイププルダウンメニューからブールを選択します。
- シェア変数プロパティダイアログボックスのRT FIFOページで、RT FIFOを有効化チェックボックスをオンにします。
- OKをクリックします。
- プロジェクトエクスプローラウィンドウで、Active?変数を含むライブラリを右クリックし、ショートカットメニューから保存→保存を選択します。
- ライブラリにVariablesという名前を付けます。
- OKをクリックします。
- プロジェクトエクスプローラウィンドウからActive?変数をReal-Time Main.viのブロック図にドラッグし、「RT FIFO作成」関数の左側に配置します。
- Active?変数を右クリックし、ショートカットメニューからアクセスモード→書き込みを選択します。
- Active?変数のActive?入力にTrue定数を配線します。
変数を初期化する
アプリケーションを起動すると、コードの多くの部分が並行してロードされます。つまり、他の部分の準備が整う前に、アプリケーションの一部がロードされる可能性があります。ネットワーク共有シェア変数の初期化時間が不足してアプリケーションが停止しないようにするには、Whileループを使用して初期化が適切か確認することがベストプラクティスです。
Active?変数を初期化するには、以下の手順に従ってください。
- Active?変数と「RT FIFO作成」関数の間にWhileループを追加します。
- Active?変数のコピーを作成し、Whileループ内に配置します。
- Whileループ内のActive?変数を右クリックし、ショートカットメニューからアクセスモード→読み取りを選択します。
- 「名前でバンドル解除」関数をWhileループ内に配置します。
- 「名前でバンドル解除」関数入力をActive?変数のエラー出力出力に配線します。
- 「名前でバンドル解除」関数を右クリックし、ショートカットメニューから項目を選択→コードを選択します。
- 「等しくない?」関数をWhileループの内部に追加します。
- 「名前でバンドル解除」関数のコード出力を「等しくない?」関数のx入力に配線します。
- 「等しくない?」関数のy入力を右クリックして、ショートカットメニューから作成→定数を選択します。
- 定数として「-1950679034」を入力します。これは、シェア変数に値がない場合にLabVIEWが返すエラーコードです。
- 「等しくない?」関数のx!=y?出力をWhileループの停止条件に配線します。
- 「待機 (ms)」関数をWhileループの内部に追加します。
- 「待機 (ms)」関数の「ミリ秒待機時間」入力を右クリックして、ショートカットメニューから作成→定数を選択します。
- 定数として10を入力し、変数が10ミリ秒ごとに初期化されるかどうかをチェックします。

シャットダウン条件を作成する
シャットダウン条件は、アプリケーションの一部に重大なエラーが発生したとき、またはユーザがアプリケーションを停止したときに、すべてのプロセスを確実に停止します。
シェア変数を使用して安全なシャットダウン条件を作成するには、以下の手順に従ってください。
- Whileループ内で、Active?変数のエラー出力出力をActive?変数のエラー入力入力に配線します。
- Whileループ内のActive?変数のエラー出力出力を「RT FIFO作成」関数のエラー入力入力に配線します。
- 「RT FIFO書き込み」関数とタイミングループの右データノードの間のエラーワイヤを削除します。
- タイミングループの出力ノードと「エラー結合」関数の間のエラーワイヤを削除します。
- Active?変数をコピーし、タイミングループ内に貼り付け、「RT FIFO書き込み」関数の右側に配置します。
- 「RT FIFO書き込み」関数のエラー出力出力を、タイミングループ内のActive?変数のエラー入力入力に配線します。
- タイミングループ内のActive?変数を右クリックし、ショートカットメニューからアクセスモード→読み取りを選択します。
- タイミングループ内のActive?変数の右側に、「Not」関数を配置します。
- Active?変数のActive?出力を「Not」関数のx入力に配線します。
- 「Not」関数の右側に「Or」関数を配置します。
- 「Not」関数の.not. x?出力を「Or」関数のx入力に配線します。
- タイミングループ内のActive?変数のエラー出力出力を「Or」関数のy入力に配線します。
- ケースストラクチャをタイミングループの外側と右側に配置します。
- タイミングループ内のActive?変数のエラーワイヤを、タイミングループの右データノードのエラー入力に接続します。
- タイミングループの出力ノードのエラー出力をケースストラクチャのケースセレクタに配線します。
- セレクタラベルでエラーを選択した状態で、ケースストラクチャ内にActive?変数のコピーを配置します。
- Active?変数を右クリックし、ショートカットメニューからアクセスモード→書き込みを選択します。
- Active?変数のActive?入力にFalse定数を配線します。
- エラーワイヤをケースストラクチャを介して接続しますが、Active?変数に配線しないでください。 メモ セレクタラベルでNo Errorを選択した状態で、この手順をもう一度行うことを忘れないでください。
- ケースストラクチャから出るエラーワイヤを、「エラー結合」関数のエラー入力入力に接続します。
- タイミングループのループ条件の停止ボタンを削除します。
- 「Or」関数のx .or. y?出力をタイミングループのループ条件に配線します。

- 手順3から22を繰り返して、消費者ループを画像に合わせます。 メモ 「RT FIFO読み取り」関数からのエラーワイヤが、必ずケースストラクチャ経由でActive?変数に接続されるようにしてください。
- VIを保存します。
VIを停止する
このチュートリアルでは、フロントパネルからActive?変数をFalseに変更できないため、VIは継続的に実行されます。VIを停止するには、NI 分散システムマネージャを使用して、Active?変数の値を変更できます。NI 分散システムマネージャは、コードの実行中にネットワーク共有シェア変数を監視するための便利なツールです。
実行を中断ボタンを使用せずにVIをシャットダウンするには、以下の手順に従ってください。
- NI 分散システムマネージャを開きます。
- 名前列のネットワーク項目フォルダを展開します。
- RTターゲットルートを検索して展開します。
- 変数フォルダを展開します。
- Active?変数を選択します。
- オートビューウィンドウで、新しい値をFalseに設定します。
- セットをクリックします。
- 分散システムマネージャを閉じます。
結果
VIを実行すると、Active?変数がFalseの場合、またはLabVIEWがエラーを検出した場合に、ループは同時に停止します。