03-07-2006 07:24 PM
03-13-2006 04:22 AM
DaqQ様
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
こちらでもVC_ReadDigChan_ChangeDetectionEvent.slnを実行いたしました。
すると、デジタルポートが2回変化して始めて4つ分のデータを集録することを確認しました。
同様のプログラムをLabVIEWで確認した際には、1つ分のデータのみを読み出すことができたので、設定の問題かと推察しています。
しかし、今、どこのパラメータが読み取りデータ数に相当しているのかが分かりませんので、お時間を頂きお調べしたいと思います。
以上、ご不明点ございましたら、弊社技術部までお問い合わせ願います。
今後とも、宜しくお願い致します。
03-13-2006 04:44 AM
DaqQ様
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
当該サンプルプログラムを検討しておりましたら、お客様がご所望の動作ができましたのでご連絡いたします。
今、int32 CVICALLBACK ChangeDetectionCallbackの中にございますDAQmxReadDigitalLines関数の第2引数を-1に致しますと、デジタルデータが1回変化するたびにデータを出力することができました。
こちらを一度ご検討頂きまして、ご不明点ございましたら再度ご投稿頂けますようお願い申し上げます。
今後とも、宜しくお願い致します。
失礼致します。
03-13-2006 07:37 PM
日本ナショナルインスツルメンツ株式会社 柿部様
ご回答、有難う御座いました。ご指摘の通り、int32 CVICALLBACK
ChangeDetectionCallbackの中のDAQmxReadDigitalLines関数の
第2引数を-1にして確認しました。
確かに、検出したい2ビットの内、1つのビットが変化したら状態変化
を読み取れるようになりましたが、何回か変化を読み取ると、読み
取った状態が実際のビットの状態と対応が取れなくなります。
ビット変化をリアルタイムに検出するには、どのようにすればよいの
でしょか?
御社サンプルのVC_ReadDigChan_ChangeDetectionEventでも同じです。
03-16-2006 05:45 AM
DAQq様
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
私の方でも、実行してしばらく時間が経過しますと、表示されますデータが現在の入力データではなく、過去のデータになります。
原因は、デジタル信号のイベントデータをバッファしていているためだと推察しております。
そこで、最新のデータを読み出すようDAQmxSetReadRelativeTo関数などを使用して、回避を試みましたがうまく行っておりません。
引き続き調査させていただきますので、お待ち頂けますと幸いです。
以上、ご不明点ございましたら、ご投稿願います。
今後とも、宜しくお願い致します。
03-17-2006 12:06 AM
DAQq様
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
当該問題は、データ転送方法をIRQにしていただけますと、解決するようです。
設定方法は、
DAQmxErrChk (DAQmxRegisterSignalEvent(taskHandle,DAQmx_Val_ChangeDetectionEvent,0,ChangeDetectionCallback,NULL));
DAQmxErrChk (DAQmxGetTaskAttribute(taskHandle,DAQmx_Task_NumChans,&numLines));
DAQmxErrChk (DAQmxSetDIDataXferMech(taskHandle, "", DAQmx_Val_Interrupts));
とプログラムに付け加えてください。
これでも表示されるデータが入力信号に遅れがでる場合には、入力信号の周期が短いために、データがバッファにたまってしまうものと推察されます。
こちらでお試し頂きまして、うまく行かないようでございましたら、入力信号の情報を合わせてご投稿頂けます様お願い申し上げます。
今後とも、宜しくお願い致します。
03-17-2006 01:07 AM
日本ナショナルインスツルメンツ株式会社 柿部様
ご回答、有難う御座いました。ご指摘の通りに変更すれば、希望通りの動作が出来ました。
だた、このれらの関数(DAQmxGetTaskAttribute、DAQmxSetDIDataXferMech)の記述が、
NI DAQ-8.0に付属のヘルプ(NI-DAQmx C Reference Help September 2005 Edition)にあり
ません。最新のヘルプはないのでしょか?(できれば日本語版があるとありがたいです)
それから、DIの信号変化を監視しながら、ADサンプリング(外部クロック:1kHz)に同期
してDIも同時にサンプリング(トリガー:Dev1/ai/SampleClock)しています。DIのデータ
転送方式をDMAからIRQに変更したままで、データの取りこぼし等の不具合が起きる事は
ないでしょか?
03-17-2006 01:12 AM
日本ナショナルインスツルメンツ株式会社 柿部様
先ほど投稿したメッセージの一部が化けてしまいました。再度、投稿します。
ご回答、有難う御座いました。ご指摘の通りに変更すれば、希望通りの動作が出来ました。
だた、このれらの関数(DAQmxGetTaskAttribute、DAQmxSetDIDataXferMech)の記述が、
NI DAQ-8.0に付属のヘルプ(NI-DAQmx C Reference Help September 2005 Edition)にあり
ません。最新のヘルプはないのでしょか?(できれば日本語版があるとありがたいです)
それから、DIの信号変化を監視しながら、ADサンプリング(外部クロック:1kHz)に同期
してDIも同時にサンプリング(トリガー:Dev1/ai/SampleClock)しています。DIのデータ
転送方式をDMAからIRQに変更したままで、データの取りこぼし等の不具合が起きる事は
ないでしょか?
03-22-2006 03:52 AM
aqQ様
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
DAQmxSetDIDataXferMechは、NI-DAQmx C reference Helpの「検索」タブで検索頂けますと、「Get/Set/Reset DI_DataXferMech」という項目でヒ
ットします。
DAQmxGetTaskAttributeは見付けることができておりませんが、恐らく「Get/Set/Reset Task_NumChans」と同義かと推察します。
当該ヘルプは検索がし難いかと存じますので、改善しますよう本社に申し付けますので、ご了承頂けます様お願い申し上げます。
また、こちらの日本語ヘルプはございませんので、こちらもご了承頂けますようお願い申し上げます。
IRQ転送を使用した際、データの取りこぼしがでる可能性は十分にございます。
今、DIとAIを共通外部クロックを使用してデータ集録を行うということのようでございますので、DAQmxCfgChangeDetectionTimingは使用せず、データ処理で回避する(DIとAIは行ってしまい、DIチャンネルに変化がないのであれば、データを間引く)というのはいかがでしょうか?
また、いまご所望の動作をお教え頂けますと、別の方法も提案できるかもしれませんので、ご連絡頂けますと幸いです。
以上、ご不明点ございましたら、ご投稿願います。
今後とも、宜しくお願い致します。