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.



Archived: LabVIEW Real-Timeを使用していますが、どうしたらループを1kHz以上で制御できるのでしょうか?

This document has been archived and is no longer updated by National Instruments



使用ソフトウェア: LabVIEW Modules>>Real-Time Module
使用ソフトウェア・バージョン: 7.1
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A
ハードウェア: Multifunction DAQ (MIO)

問題: 現在はLabVIEW Real-Timeの中のWait Until Next ms Multiple関数を使ってループの処理速度を制御していますが、この関数ではミリ秒単位でしか設定できないため、ループを1kHz以上で回すことができません。LabVIEW Real-Timeには更に高速にループを処理するための関数はないのですか?

解決策: Wait関数やWaitUntil Next ms Multiple関数を使った場合には最高1kHzの処理速度でループを実行することができます。逆に、このような遅延関数を置かないことで、ループをシステムが許容する最速の速さで実行することができますが、この場合はループの実行速度を制御することはできなくなってしまいます。しかし、NI-DAQ 6.7.0からAI SingleScan 関数でソフトウェアタイミングをボードのスキャンクロック信号に合わせることができるようになったため、リアルタイムシステムの中のハードウェア確定性が確立できるようになりました。

DAQ(データ集録ボード)の構成時にサンプリングレートなども設定される訳ですが、これがボード上のスキャンクロック(AD変換のタイミング)が制御されるようになります。スキャンクロックの信号1つ毎に、1つのチャネルからの信号がAD変換されます。AI SingleScan 関数はボード上のバッファ(FIFO)に貯められたデータを読み込んでいくわけですが、Windowsシステムの場合、ループの処理速度をハードウェアのサンプリングレートよりも速くすることにより、FIFOの上書きエラーを防ぐことができます。しかしボードのサンプリングレートがループの処理速度よりも早くなってしまうと、バッファからのデータの読み取りが間に合わなくなりエラーを起こしてしまいます。リアルタイムOSの場合には、AI SingleScan関数が遅延関数のような働きをし、ループの処理速度を制御するようになります。前述の例で詳しくこれを見てみましょう。例えばループが高速に処理されてAI SingleScan関数が呼ばれたとしても、AI SingleScan関数自体スキャンが終わらなければ、即ちスキャンクロック信号を受け取らなければタスクが終了しないので、ループも次に回らないということです。AI SingleScan関数がループの実行速度を制御するというのはこういう理由からです。更にAI SingleScan関数には「scans remaining」という出力パラメターがありますが、これを監視することによりループがスキャンクロックの速さにきちんとついていってデータの読み込みが行えているかを確認できます。

通常time-critical priorityで実行されているループは、遅延やスリープモードが置かれていない限り、優先順位の低い制御ループよりも優先されて実行されてしまいます。しかしAI SingleScan関数にはスリープモードがあるので、(スキャンレートの逆数)時間分だけCPUの占有を開放して、TCP/IP通信やファイルI/Oといった優先順位の低いタスクを実行することができます。ループが通常の優先順位を与えられている場合には、AI SingleScan関数がスキャンクロック信号が立った時、或いはFIFOに読み残しのデータがある時にデータの読み取りを行ってしまうので、必ず優先順位を「time-critical priority」に設定しておくことを忘れないで下さい。スリーピングモードがオンになっているか確認したい時には、ターゲットマシンのNI-RT.INIファイルに下記の記述があるはずです。

NI-DAQ
UseSleepingTimedNonBuffered=TRUE

RTシリーズPXIコントローラのではスリープモードはディフォルトでオンになっていますが、7030RTシリーズではオフになっています。NI-RT.INIファイルの場所はそれぞれC:\NI-RT.INI(RTシリーズPXIコントローラ)、~\LabVIEW RT\Resourceフォルダ(7030シリーズ)となっています。

NI-DAQ 6.9.1以降のドライバでは、EシリーズDAQボード上のカウンタを使って、ループの実行速度を制御することもできます。

関連リンク:

添付:





報告日時: 01/15/2001
最終更新日: 05/28/2004
ドキュメントID: 25E9K94U