エラー -50103: LabVIEW NXGでNI-DAQmxエラーが発生する

更新しました Jun 25, 2019

使用製品

Software

  • LabVIEW NXG

Driver

  • NI-DAQmx

問題

LabVIEW NXGでNI-DAQmxを使用している際、明示的には同じリソースを使用していないのに、以下のエラーが発生するのはなぜですか?
 

エラー -50103 指定されたリソースは予約済みです。

解決策

このエラーは、NI-DAQmxが物理リソースの競合を認識したときに発生します。このエラーが発生する原因はいくつかあり、以下に例を示します。
 

  • ケース 1: DAQmxタスクを長期間連続的に作成、設定、開始、クリアをしている場合
  • ケース 2: 2つのカウンタを必要とするカウンタタスクを実行中に、そのうちの1つのカウンタが同じデバイスの別のタスクにより使用されている場合
  • ケース 3: 個別に実行するとエラーは発生しないが、トップレベルVIから呼び出すとエラーが発生するサブVIを複数使用した場合
  • ケース 4: 複数のアナログ入力またはアナログ出力タスクを同時に実行した場合
  • ケース 5: タスクを適切にクリアせずに、そのリソースを解放した場合


 

ケース 1: DAQmxタスクを長期間連続的に作成、設定、開始、クリアをしている場合


この問題を回避するには、ループ前にタスクを一度設定して開始し、必要に応じてループ内で読み取り/書き込み関数を呼び出して、ループ後にタスクをクリアします。

この方法のサンプルは、LabVIEW NXGを起動してヘルプ>>サンプル>>ハードウェア入力と出力>>NI-DAQmx>>対話式構成>>アナログ入力>>DAQ API Basicsから参照できます。下図は、DAQmxタスクの間違った例と正しい例です。

 

間違った例:

 

正しい例:



 

ケース 2: 2つのカウンタを必要とするカウンタタスクを実行中に、そのうちの1つのカウンタが同じデバイスの別のタスクにより使用されている場合


2つのカウンタを必要とするタスクでは、2番目のカウンタはチャンネルを作成ノードに配線されているカウンタに基づいて予約されます。カウンタは、隣り合うカウンタと常にペアになるため、ctr 0はctr 1と、ctr 2はctr 3とペアになります。カウンタタスクで必要なカウンタ数の要件については、How Many Counters Does Each Type of Counter Task Requireを参照してください。 


 

ケース 3: 個別に実行するとエラーは発生しないが、トップレベルVIから呼び出すとエラーが発生するサブVIを複数使用した場合


複数のNI-DAQmx VIが、すでに開いているタスクをクリアせずに再度呼び出した場合に発生する可能性があります。すでに使用中のタスクを開こうとすると、エラー -50103: 指定したリソースは予約されていますが必ず発生します。

このエラーの発生を回避するには、別のサブVIで再度開かれる前にタスクをクリアするか、サブVIから別のサブVIへDAQmxタスクを渡すことによりタスクが再度開かれないようにします。


 

ケース 4: 複数のアナログ入力またはアナログ出力タスクを同時に実行した場合


同じタイプの処理を同時に実行する複数のタスクを明示的に呼び出した場合にも発生します。上記の2つのケースと同様、この場合も、複数の個別タスクが同じリソースに同時にアクセスしようとします。各タスクで使用されているチャンネルが異なる場合でも、これらのタスクは同じA/D変換器とサンプルクロックを必要とするため、競合状態が発生します。この問題を解決するには、同じタイプの処理をすべて同じタスクにまとめます。DAQmx 7.3以降では、複数のDAQmxチャンネルを作成ノードを使用することで、複数のタイプのアナログ入力でもこれを実行できます。 


メモ: ケース4は、cDAQ-9172シャーシを使用して同じタイプの複数のタスクを実行しようとした場合によく起こります。このシャーシにはタイミングエンジンが1つしか搭載されていないことに注意してください。 この問題を回避するには、すべてのアナログ収集を1つのタスクにまとめ、1つのタイミングエンジンを正しく使用するようにします。cDAQ-9174および9178シャーシには3つのアナログ入力タイミングエンジンが搭載されているため、タスクが別々のモジュールにある限り、同時に3つのアナログ入力タスクに対応できます。 


 

ケース 5: タスクを適切にクリアせずに、そのリソースを解放した場合


DAQmxタスクが開始すると、あるいは予約またはコミット状態(NI-DAQmxヘルプのタスク状態モデルを参照)になると、クロック、チャンネル、トリガライン、またはバッファメモリなどのタスクに関連付けられたリソースは、そのタスクにより独占的に使用されます。これらのリソースはそのタスクにより予約されているため、他のタスクがこれらのリソースにアクセスしようとすると、エラー -50103が発生します。

これは、以下のいずれかの方法で解決できます。

  • タスクの最後にDAQmx Clear Task.gviを追加する
  • タスクの最後にDAQmx Control Task.gviを追加し、動作予約解除に設定する


メモ: ケース 5には、最初の実行後にタスクを正しくクリアできなかったアプリケーションを再度実行した場合も含まれます。

この記事はお役に立ちましたか?

いいえ