コントローラのリセット時にReal-Time(RT)ターゲットでスタートアップ実行ファイルが起動しない

更新しました Dec 22, 2023

使用製品

ハードウェア

  • Industrial Controller
  • CompactRIO Chassis
  • PXI Controller

ソフトウェア

  • LabVIEW Real-Time Module

オペレーティング・システム

  • NI Linux Real-Time
  • PharLap
  • VxWorks

問題

以下の問題の1つを経験しています。
  • スタートアップ実行ファイル(.exe)がコントローラに組み込まれたリアルタイムシステムがあります。コントローラを再起動すると、.exeがまったく実行されていないか、正しく動作していません。
  • リアルタイム実行可能ファイルはクラッシュしているように見えます。エラーログを確認すると、次のように表示されます。


この現象の原因は何ですか?

解決策

スタートアップ時に実行ファイルが実行されないという問題が数多くあります。使用のシステムに該当する設定については、以下のトラブルシューティングの手順をおこないます。
  • リアルタイムアプリケーションがスタートアップアプリケーションとして設定されていることを確認します。
    • LabVIEWプロジェクト内のアプリケーションを右クリックして、下記の図1に示すようにスタートアップとして設定を選択します。
      • スタートアップ時に実行ファイルが実行されるように設定されると、指定されたビルドが緑色のボックスに囲まれています。
    • スタートアップとして設定を選択すると、LabVIEWはターゲットをすぐに再起動するかどうかを確認します。 コントローラが再起動されると、スタートアップ時にアプリケーションがロードされます。
図1: LabVIEWプロジェクトでスタートアップとしてアプリケーションを設定する
  • デバイスのマニュアルを参照して、NOAPP DIPスイッチがあるかどうかを確認して、NOAPP DIPスイッチが「OFF」に設定されていることを確認します。
    • 該当する場合は、ハードウェアディップスイッチの位置を 「off」の位置に変更して、コントローラを再起動します。
      • 一部のリアルタイムコントローラには、通常「NOAPP」と呼ばれる機能を制御する物理ディップスイッチがあり、アプリケーションモードはありません。このスイッチが「ON」の位置にある場合、LabVIEW Real-Timeは自動的にEXEを実行しません。
  • 対象のシステム設定の下にあるNI MAXでRTスタートアップアプリケーションを無効が選択されていないことを確認します。
    • デバイスによっては、ハードウェアディップスイッチを使用するものもあれば、NI MAXのデバイスのシステム設定での構成を使用するものもあります。 デバイスのマニュアルを参照して、デバイスが使用する方法を確認してください。
  • デバイスのIP設定を確認します。問題のデバイスがネットワークに接続されていない場合は、DHCPサーバからIPアドレスを取得するようにデバイスを設定しないでください。
    • メモ: これは、Phar Lap ETS and VxWorks controllersにのみ関連します。
    • コントローラに静的IPアドレスを設定します。
      • NI Measurement&Automation Explorer(MAX)のリモートシステム下でデバイスを検出します。
      • システム設定を開き、IP障害で停止を無効にします。
      • ネットワーク設定を開き、静的IPアドレスを割り当てます。
    • メモ: コントローラがDHCPサーバからIPアドレスを取得するように設定されている場合、EXEはコントローラが有効なIPアドレスを取得できるときにのみ起動します。システムがネットワーク接続なしで起動する必要がある場合は、静的IPを設定できます。ネットワーク接続の可用性に関係なく、コントローラがリセットされると、起動EXEが開始されます。

 

  • フロントパネルのオブジェクトまたはプロパティを参照するすべてのプロパティノードをVIから削除します。ほとんどの場合、フロントパネルのオブジェクトとプロパティ(ウィンドウ位置など)を参照するプロパティノードを使用すると、リアルタイム実行ファイルのコンパイル時にVIのフロントパネルが削除されるため、リアルタイムアプリケーションの実行を妨げます。
    • サポートされている一部のターゲットでは、組込UIを有効にすると、フロントパネルオブジェクトを参照するプロパティノードを使用できます。
    • フロントパネルオブジェクトを参照するプロパティノードを削除できず、埋め込みUIを有効にできない場合、フロントパネルをビルドに含めるためにデバッグを有効にすることができます。
      • ビルド仕様を開きます。
      • 上級タブに移動します。
      • 下記の図2に示すように、デバッグを許可にチェックを入れます。これにより、アプリケーションのフロントパネルを組み込んで実行するために追加の処理が必要になるため、リアルタイムコントローラのシステムリソース使用率が増加します。
​​​
図2: アプリケーションのフロントパネルをEXEビルドに含めるためのデバッグを有効にする

 

  • 下記の図3に示す例のように、アプリケーションのスタートアップシーケンスで30~60秒の待機関数を含めることによって、スタートアップアプリケーションが実行を試みる前に、RT OSが必要なすべてのサービスを開始できることを確認します。
図3: RTコードを実行する前に待機シーケンスの追加する
  • メモ: この動作は、実行を開始する前に複数のバックグラウンドプロセスをロードする必要がある大規模なアプリケーションでも発生する可能性があります。このような状況では、アプリケーションが実行しようとする前にRT OSがすべての必要なサービスを開始できない可能性があり(最初の部分はOpen FPGA VI Referenceです)、システムがハングまたはクラッシュします。これは、ハイブリッドモードでRIOを使用する場合によく見られ、スキャンインターフェイスのロードが完了する前にFPGAに呼び出されます。この状況の解決策は、アプリケーションのスタートアップシーケンスに待機関数を含めることです。これにより、CPUに過負荷をかけずにコントローラがロードを完了できるようにする必要があります。
  • Linux RTターゲットを使用している場合は、ターゲット上で実行されている要素名(VI、ライブラリ、シェア変数など)で使用されているすべての特殊文字を削除します。これは、Linux RTでは特殊文字を処理できないためです。また、これらの要素名に日本語のような2バイト文字が使用されている場合にもスタートアップとして設定したRT EXEが動作しなくなるため、2バイト文字の使用は避けてください。
  • タイプ定義をRTアプリケーションから削除します。
    • LabVIEWプロジェクトでEXEを右クリックしてアプリケーションプロパティを開きます。 
    • その他の除外項目タブに移動して、図4に示すタイプ定義を接続解除にチェックを入れます。
    • メモ:  タイプ定義はソースコードを保持するために使用されますが、実行可能ファイルをビルド/実行する場合、これは優先事項ではありません。この場合、メモリの使用を維持するためにタイプ定義を接続解除することができます。接続解除オプションは、LabVIEWが異なるタイプ定義間で競合を認識した場合のトラブルシューティングステップとしても使用されます。
図4: アプリケーションプロパティでEXEビルドにおけるタイプ定義を接続解除する
 
  • コンプライアンスでSSE2最適化を使用している場合は、ターゲットがSSE2命令をサポートしていることを確認します。
    • ターゲットがSSE2の最適化をサポートしていない場合は、アプリケーションプロパティでこのオプションを無効にします。
    • 上級カテゴリに移動して、図5に示すようにSSE2最適化を許可のチェックを外します。
    • メモ: LabVIEW 2017以降では、SSE2の最適化を無効にすることはできなくなりました。 LabVIEW 2017以降でSSE2をサポートしていないターゲットにRT EXEを展開することはできなくなりました。
図5: アプリケーションのプロパティでSSE2の最適化を無効にする