06-21-2015 11:24 PM
お世話になっております。
NI-DAQ6351のアナログトリガ機能を使用して、データの入出力等を行っております。
タスク実行後すぐにPFIOのデータが基準レベルを越えても、立ち上がったと判別されません。
この不応期がおよそ300msecあります。300msec後に立ち上がれば問題なくトリガされます。
各DAQ-mx関数の実行タイミングを調べると、書き込みから"タスクを開始"までに250msecほどの間隔が常にありました。
これは私のプログラムが良くないのでしょうか?
ご教授お願い致します。
テストした際のプログラムを添付します。
解決済! 解決策の投稿を見る。
06-22-2015 02:08 AM
こんにちは。
VI をみたところ、DAQ アシスタントやワイヤがシーケンスストラクチャ内で色々と右往左往していますので、実行順序が決まってないのが問題かと。
お使いのVIですと、添付スクリーンショットに記載された数字の順序で処理がされるので、DAQmxの関数で設定されたアナログ出力のタスクは
7のタスク開始の関数が呼ばれるまで、うんともすんともいいません。シーケンスストラクチャで順序を決めたい気持ちはわかりますが、
左から右に実行されるそれぞれのシーケンスでどの関数が実行されるか考えてみてください。
ちなみに6351 とは別にデバイスを使用されているみたいですが、それぞれのデバイスの役割がわからない限り、あまり詳しいアドバイスはだせません。
06-22-2015 02:27 AM
お世話になります。
本来のプログラムではシーケンスストラクチャは使用しておりません。
テストのために、各関数を分けて、それぞれがどのようなタイミングで
処理されているのかを知るために、もう1つのDAQ(6229)に信号を出力させているだけです。
配線が汚いのも、タイミングと不応期の長さを知りたかっただけなので、そのままにしてしまいました、見づらくてすみません。
記載していただいた1番で6229からトリガ出力が実行された後、
基準を立ち上がったらすぐに6351からトリガ出力が実行されると私はイメージしていたのですが、
実際には、添付したプログラムに関わらず、私のDAQ-mxの記載ですと、不応期が存在してしまいます。
06-22-2015 02:42 AM
デバッグ用のDAQ アシスタントだったんですね、失礼しました。
デバイスの設定などはソフトウェアで処理を行う必要があるのである程度の時間はかかります。
例えば、前回のスクリーンショットで3,4,5,6 で呼び出されているDAQmx の関数が呼び出されない限り、アナログ出力のタスクは準備ができていない状態となります。
トリガ信号などを使用するアプリケーションでは、タスクがトリガ待ちの状態である必要がありますので、
下記の様な組み方になります。
上記ではエラー配線を使用して、DAQmx のアナログ出力のタスクをトリガ待ちの状態にさせた後ににDAQアシスタントのトリガ信号出力をを行う、という順序付けを行っています。
順序付けができればいいので、エラー配線である必要はありません。参考になれば幸いです。
06-22-2015 03:12 AM
お手数おかけ致します。
ある程度かかってしまうとは思うのですが、それが300msecだと予想以上に長くて困っています。
他の処理(単純なことしかしておりませんが)でそのように時間を要することは無かったものですから。
環境によっても幾らか違うかもしれませんが、アナログトリガに時間が多めにかかるのは仕様なのでしょうか。
貼り付けていただいたプログラムの場合、
立ち上がった後に、開始シグナルが出力されるという理解で宜しいでしょうか。
不応期で困っているのは、トリガ待ちの状態にできないためなのです。
取得しているアナログ信号は、常に基準に対して立ち上がりと立ち下がりを繰り返しています(1秒間に2-3回程度、不定期)。
それらを全て無視して、特定のタイミングの後に、次に立ち上がったところでトリガをかけたいのですが、
いざタスクを実行しようとした時にはすでに、立ち上がりが終わってしまっている(300ms以内だった場合)、という失敗が生じている状態です。
06-22-2015 10:23 PM
お手数おかけ致します。
ある程度かかってしまうとは思うのですが、それが300msecだと予想以上に長くて困っています。
貼り付けていただいたプログラムの場合、
立ち上がった後に、開始シグナルが出力されるという理解で宜しいでしょうか。
前回添付したVI はトリガ待ちの状態になってから、開始シグナルが出力される様になっています。
タスク開始の関数が呼び出されないと、トリガ待ちの状態になりませんので、その前に開始シグナルが出力されるとトリガを逃す可能性があります。
300msec かかっているのは毎回タスクの呼び出しとクリアを行っているからかと思います。
もし何度も呼び出す必要があり、そして全てのトリガ信号に反応するのでなく特定のタイミングで出力するのであれば、
タスクのクリアをしない動作が適しているかと思いますので、添付VI を試してみてください。ボタンが押されたときのみ、トリガ信号に対応する出力となっています。
ちなみにDAQ アシスタントなどを呼び出すことによって処理時間は長くなりますので、
300ms というベンチマークが正しくない可能性があることにも気を付けてください。
06-23-2015 04:01 AM
ご指摘の通り、何度も使用するのにタスクを毎回クリアするのが一つの原因かと
思ったのですが、クリアせずに何度も呼び出す方法がわかりませんでした。
添付していただいたVI試しました。
ボタンを押した後、ほぼ同時でも立ち上がりを取得できました。ボタンを押す前の行動は全て無視してくれました。
このVIは、作りたいプログラムの1つにとても参考になりそうです。
ありがとうございます。
ボタンを2度押すとすぐにエラーになってしまい何度も計測することはできませんでした。
このVIを例えば既定の回数分、繰り返し実行できるようにするにはどのようにすれば良いのでしょうか。
300msecというのは正確な数字ではありませんが、DAQアシスタントを使用していない時から
このくらいの不応期があるなあと疑問に思っていました。
06-25-2015 12:11 AM
タスクがすでに開始されているのに、再度開始する関数を呼び出しているのがエラーの原因かと思いますので
DAQmx タスク完了まで待機の関数のあとに、DAQmx タスク停止の関数を追加してみてください。
ちなみにどんなエラーでしょうか。
06-25-2015 12:11 AM
タスクがすでに開始されているのに、再度開始する関数を呼び出しているのがエラーの原因かと思いますので
DAQmx タスク完了まで待機の関数のあとに、DAQmx タスク停止の関数を追加してみてください。
ちなみにどんなエラーでしょうか。
06-26-2015 05:07 AM
エラーは下記のものでした。
停止関数を加えたら繰り返し実行できました。
作成しているプログラムにはタスクが2パターンあり、ランダムに呼び出されるので毎回タスクをクリアしていく必要が
ありそうですが、添付していただいた方法を活用すれば対応できそうです。
ありがとうございました。