From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
05-13-2014 03:07 AM - 編集済み 05-13-2014 03:21 AM
タイムクリティカルループの完了前に低優先度ループの処理が開始してしまう問題で困っています。
開発環境
・Windows7 32bit
・LabVIEW 2012 SP1 f5パッチ
・Real-Timeモジュール
・FPGAモジュール
ターゲット
・cRIO-9025コントローラ
・cRIO-9118シャーシ
・その他Cシリーズモジュール
Real-Time VIの内容
以下の3つのタイミングループを,開始を同期して並列実行
・高優先度ループ(周期20ms,FPGAの制御)
・中優先度ループ(周期100ms,PCおよび高優先度ループとの通信)
・低優先度ループ(周期200ms,HDDへの集録データ書き込み)
※申し訳ありませんがダイアグラムはアップロードできません
症状
・高優先度ループの処理が中断して,中・低優先度ループの処理が開始してしまう
・中・低優先度ループの処理後に高優先度ループの処理が再開する
・高優先度ループの内部でタイムスタンプを用いた制御を用いており,
中・低優先度ループの処理が割り込むと大きなジッターが発生してしまい問題となる
VIを編集しているうちに動作がおかしくなったことに気づき,
実行トレースツールでログを取ったところ
上記のような現象が発生していることが判明しました。
タイミングループを一度削除したのち,再度配置しましたが解決しませんでした。
しばらく前のバージョンのVIで同様にログを取ったところ,
こちらは問題ありませんでした。
⇒ 添付画像を参照ください
正常動作しているバージョンに巻き戻すことも検討していますが,
原因が把握できない状態では不安が残ります。
原因または解決策に心当たりがあればご助言いただけますと幸いです。
05-15-2014 09:17 AM
05-15-2014 11:27 PM
コメントありがとうございます。
現在,原因箇所の候補があり,模擬したVIで再現するか調べる予定です。
再現するようであれば1週間以内にVIをアップロードしたいと思います。
05-16-2014 11:33 PM
05-20-2014 02:44 AM
原因箇所を特定できました。しかし,発症する理由は不明のままです。
<原因>
「FPGA VIリファレンスを開く」関数を構成するときにビットファイルを指定すると,
TCLの実行にNPLが割り込む。一方で,VIを指定すると正常に動作する。
<添付ファイル>
症状が再現するサンプルプロジェクトを作りました。
Sample_Project_Image.png
プロジェクトのプリントスクリーンです。
VI_Image_and_Traces.pdf
Real-TIme_VI_Main.viのフロントパネル・ブロックダイアグラムおよび実行トレースです。
実行トレースは,1枚目がFPGAをVI指定で開いた場合,2枚目がビットファイル指定で開いた場合です。
2枚目のトレースでは,TCLにNPLが割り込んでいることが分かります。
Sample_Project.zip
サンプルプロジェクトです。以下のターゲット用に構成されています。
・cRIO-9025コントローラ
・cRIO-9118シャーシ
異なるターゲットで実行する場合,プロジェクトの修正とFPGAの再コンパイルが必要です。
<VIの機能説明>
Real-TIme_VI_Main.vi
・FPGA VIをビットファイルから開くか,VIから開くかを選択します。
・実行トレースツールに転送するためのログを取得します。
・TCLとNPLを同期して開始します。
・TCLは,NPLとの通信と,FPGAへの読み書きを実行します。
・NPLは,TCLとの通信と,制御器および表示器への読み書きを実行します。
・TCLとNPLの終了後に,実行ログをホストPCに転送します。
・FPGA VIを閉じて終了します。
※Real-Time_VI_Mainを実行する際にはRTターゲットおよびホストPCのIPアドレス指定が必要です。
※ループ中のサブVIはダミーです。内部で10000回足し算を実行しています。
FPGA_VI_Main.vi
・ブール入力を反転して出力しています。
・ループ周期は1 msです。
上記のVIで実行ログを取ったところ,ビットファイル指定時にTCLへNPLが割り込むことが確認されました。
<回避策>
FPGA VIをVI指定で開くことにより問題を回避できます。
ただし,当方の環境として,同じH/W構成の複数のcRIOで,同一VIを実行したいという状況があります。
ビットファイル指定であれば,いずれか一つのcRIO上でFPGA VIをコンパイルすれば十分です。
しかしVI指定の場合,すべてのcRIO上で個別にコンパイルしなければなりません。これは面倒です。
05-22-2014 08:11 PM