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.

NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

外部クロックのフィルター設定時のエラー: -200775(Terminal has already been configured with a different Minimum Pulse Width by another task.)

解決済み
解決策を見る

 アナログ(8Ch)とディジタル(1Ch)を外部クロックに同期してサンプリングしています。
外部クロックにノイズが入る場合があるので以下の手順で外部クロックにフィルターをかけているのですが、PCI-6250(M-Series)では正常に動作するのですが、

PCIe-6351(X-Series)では、AIタスクを開始した時に以下のエラーがでます。
 X-SeriesではM-Seriesと同じ方法は使用できないのでしょうか?ご存知の方がいらしたら教えて頂けないでしょうか、宜しくお願いします。

 

1.手順
#define AI_CHANNEL "Dev1/ai0:7"
#define DI_CHANNEL "Dev1/port0/line1" // [P0.1]
#define AI_SAMPLING_CLOCK "/Dev1/PFI8" // [PFI 8/P2.0]
#define DI_SAMPLING_CLOCK "/Dev1/ai/SampleClock"
#define CLOCK_FILTER "Dev1/ctr0" // [PFI 8/P2.0]
#ifdef X_SERIES
#define FILTER_PULSE_WIDTH 5.120000e-6 // 5.12 usec (X-Series)
#else
#define FILTER_PULSE_WIDTH 6.425000e-6 // 6.425 usec (M-Series)
#endif

 

// 外部クロックのフィルター

 

// ClockFilter[Ctr0]タスクを作成する
DAQmxCreateTask("", &clockFilterTaskHandle);


// ClockFilter[Ctr0]を作成する
edge = DAQmx_Val_Rising;
DAQmxCreateCICountEdgesChan(clockFilterTaskHandle, CLOCK_FILTER, "", edge, 0, DAQmx_Val_CountUp);


// ClockFilter[Ctr0]の最小幅を設定する
dDIGFilterTime = FILTER_PULSE_WIDTH;
DAQmxSetCICountEdgesDigFltrMinPulseWidth(clockFilterTaskHandle, CLOCK_FILTER, dDIGFilterTime);


// ClockFilter[Ctr0]を有効にする
DAQmxSetCICountEdgesDigFltrEnable(clockFilterTaskHandle, CLOCK_FILTER, DAQ_MX_TRUE);


// ClockFilter[Ctr0]のタスクをコミットする
DAQmxTaskControl(clockFilterTaskHandle, DAQmx_Val_Task_Commit);

 

// サンプリング

 

// AIタスクを作成する
DAQmxCreateTask("", &aiTaskHandle);


// DIタスクを作成する
DAQmxCreateTask("", &diTaskHandle);


// AIチャネルを作成する
DAQmxCreateAIVoltageChan(aiTaskHandle, AI_CHANNEL, "", DAQmx_Val_Diff, -DAQ_MX_AI_FULL_VOLT, DAQ_MX_AI_FULL_VOLT, DAQmx_Val_Volts, NULL);


// AIサンプリングクロックを設定する
dSampleRate = SAMPLE_COUNT * 2.0;
edge = DAQmx_Val_Rising;
sampleCount = SAMPLE_CYCLE * SAMPLE_COUNT;
DAQmxCfgSampClkTiming(aiTaskHandle, AI_SAMPLING_CLOCK, dSampleRate, edge, DAQmx_Val_FiniteSamps, sampleCount);


// DIチャネルを作成する
DAQmxCreateDIChan(diTaskHandle, DI_CHANNEL, "", DAQmx_Val_ChanPerLine);


// DIサンプリングクロックを設定する
DAQmxCfgSampClkTiming(diTaskHandle, DI_SAMPLING_CLOCK, dSampleRate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, sampleCount);


// DIタスクを開始する
DAQmxStartTask(diTaskHandle);


// AIタスクを開始する
DAQmxStartTask(aiTaskHandle);


※)ここでエラーが発生する

 

2.エラー
  DAQmxStartTask error : -200775(Terminal has already been configured with a different Minimum Pulse Width by another task.)

 

3.その他

  ちょっと検索したら、Xシリーズではこの対策は必要ない?(英語なのではっきりとした意味は分かりません)というような記述があるようですが、

 実際にノイズが入っていると思われるのは、USBタイプ(USB-6351、X-Series)のものです。

 

 http://digital.ni.com/public.nsf/allkb/9ECE7DBE7DF338BD86256F8600734A41

 

 

 Note: This workaround is not required for X Series DAQ Devices under most cases since

 digital filtering is built into the DAQmx Driver for these devices for more subsystems.

 

0 件の賞賛
メッセージ1/5
4,845件の閲覧回数

DaqQ 様

 

こちらで調査させて頂いたところ、-200775のエラーが発生するのはCtr0へ2回ほど接続しているためと思われます。
X Seriesの場合はPFI8を指定すると内部フィルタの前の信号を参照している可能性がございますので、
DAQmxCreateCICountEdgesChanで1回目の接続、DAQmxCreateAIVoltageChanで2回目の接続になると考えます。
(M Seriesでエラーが発生しない理由としては内部経路が異なるためと考えます。)

 

対策としては AI_SAMPLING_CLOCK を明確に "/Dev1/Ctr0Source" と指定していただき再度動作をご確認いただけますでしょうか。

 

また、X Seriesの場合はCounterを消費せずに入力信号を直接フィルタすることが可能になりますので、
Clock Filter関数の替わりに以下の関数を使用することで効率良くリソースを利用いただけると思います。

 

  DAQmxSetSampClkDigFltrEnable
  http://zone.ni.com/reference/en-XX/help/370471Y-01/mxcprop/attr221e/

 

  DAQmxSetSampClkDigFltrMinPulseWidth
  http://zone.ni.com/reference/en-XX/help/370471Y-01/mxcprop/attr221f/

 

デジタル信号のサンプリングクロックはアナログ用のクロックを参照しているようですので、
上記の関数はAIサンプリングクロックを設定されている部分に追加することになると考えています。

 

技術部 山縣

0 件の賞賛
メッセージ2/5
4,821件の閲覧回数

NI 技術部 山縣様

 お世話になっています。ご回答、有難うございました。教えて頂いた通りに修正したらエラー発生しませんでした。
 また、X Seriesについて教えて頂きたいのですが、DAQmxSetSampClkDigFltrEnable、DAQmxSetSampClkDigFltrMinPulseWidth関数は全てのDI(※1)で使用できるのでしょうか。
ボードでもUSBユニット(※2)でも同じプログラムで使用可能ですか。お手数ですが宜しくお願いします。

(※1) 外部クロックとして使用していないDI、バッファオペレーションでクロックに同期して連続で読み込んでいるDIなど。
(※2) PCIe-6351、USB-6351、USB-6353等

 

0 件の賞賛
メッセージ3/5
4,799件の閲覧回数

Xシリーズの場合、デジタル入力チャンネルはデジタルフィルタに対応しているようです。
詳細や他に対応している端子に関しては以下のリンク先をご確認願います。

 

   XシリーズおよびNI661デバイスのデジタルフィルタに関する注意事項
   http://zone.ni.com/reference/ja-XX/help/370466AA-0112/mxdevconsid/digfiltxseries/

 

また、USBやPCI関係なく対応していると思います。

 

技術部 山縣

0 件の賞賛
メッセージ4/5
4,778件の閲覧回数
解決策
トピック作成者DaqQが受理

NI 技術部 山縣様

 

 お世話になっています。了解しました。有難うございます。

 

 

0 件の賞賛
メッセージ5/5
4,769件の閲覧回数