03-20-2015 03:56 AM
最近NI製品を使い始めた初心者です。
VS2005でUSB6363およびUSB6361)使ってai0からai3のAnalog Inを計測しながら、ai0の入力電圧値の閾値を超えたら毎回、3種類のパルス信号をPFI0~2の各端子へ1回もしくは指定回数を出力させる動作をさせたくプログラムを作っております。
しかし、6363(6361)の仕様書P4にアナログトリガのソースにAI<0...31>、APFI<0,1>(6361はAI<0...15>、APFI 0)と記載してあり、
AI0を、
1. DAQmxCfgAnlgEdgeStartTrig(taskAI, _T("dev1/ai0"), ....)
のように設定することが許されません
2. DAQmxCfgAnlgEdgeStartTrig(taskAI, _T("dev1/APFI0"), ....)
のルートでしかできないようですが、ai0をソースにするにはどのようにすればよいですか?
さらにもう2つ質問ですが、
上記2でしか設定できない場合
APFI0でアナログトリガを使って、下記の残り4chをai入力チャンネルを設定し、
APFI0の入力電圧値のトリガで、3つのパルス信号をPFI0-2の3chに出力させたいのですが、
トリガがかかる前のai0-ai3の値を計測スタートさせる設定はありますでしょうか?
また、一度トリガがかかると再度APFI0の入力電圧の閾値を超えても再トリガはかかりますでしょうか?
4.DAQmxCreateAIVoltageChan(taskAI, _T("dev1/ai0"), _T(""), DAQmx_Val_RSE, -10.0, 10.0, DAQmx_Val_Volts, NULL);
5.DAQmxCreateAIVoltageChan(taskAI, _T("dev1/ai1"), _T(""), DAQmx_Val_RSE, -10.0, 10.0, DAQmx_Val_Volts, NULL);
6.DAQmxCreateAIVoltageChan(taskAI, _T("dev1/ai2"), _T(""), DAQmx_Val_RSE, -10.0, 10.0, DAQmx_Val_Volts, NULL);
7.DAQmxCreateAIVoltageChan(taskAI, _T("dev1/ai3"), _T(""), DAQmx_Val_RSE, -10.0, 10.0, DAQmx_Val_Volts, NULL);
8.DAQmxCreateCOPulseChanTime(taskCO, _T("dev1/Ctr1"), _T(""), DAQmx_Val_Seconds, DAQmx_Val_Low, 10, 15, 50);
9.DAQmxCreateCOPulseChanTime(taskCO, _T("dev1/Ctr2"), _T(""), DAQmx_Val_Seconds, DAQmx_Val_Low, 25, 50, 50);
10.DAQmxCreateCOPulseChanTime(taskCO, _T("dev1/Ctr3"), _T(""), DAQmx_Val_Seconds, DAQmx_Val_Low, 15, 15, 50);
よろしくお願いいたします。
03-21-2015 11:31 PM
こんにちは。
最初のトリガソースの質問についてなのですが、-200265といったエラーが発生していませんか?
下記の資料によるとトリガソースとして使用したいチャンネル(Dev1/ai0)を一番最初にAI タスクで指定する必要があるみたいです。(LabVIEW ではない言語でも同じかわかりません)
What Analog Channels Can I Trigger Off Of?
ちなみに複数チャンネルは「Dev1/ai0, Dev1/ai1:3」の様にまとめて指定できるのでお試しください
shin2015 wrote:
トリガがかかる前のai0-ai3の値を計測スタートさせる設定はありますでしょうか?
また、一度トリガがかかると再度APFI0の入力電圧の閾値を超えても再トリガはかかりますでしょうか?
質問にお答えする前に、もう少し状況を説明してください。
ai0-ai3 の計測時間は決まってますか?パルス信号出力用のトリガ信号発生がai0-ai3 の
計測後(たとえばai0-ai3 の計測時間が1秒間にたいして、トリガ信号発生がその2秒間おき)であれば、アナログタスクの再トリガを使用することが可能かと。
もしai0-ai3 の計測中にパルス信号を指定回数出力させるのであれば、ai0 の値をソフトで比較して閾値を超えればパルス出力、
というソフトウェアタイミングで行うことになるかと思います。
03-22-2015 11:02 PM
早速のご教示ありがとうございます。
トリガソースについては、APFI0(1)以外で設定するとTask Start時に-200265が出ていました。
DAQmxCreateAIVoltageChanの後にタスクトリガをai0に設定設定することでDAQmxCfgAnlgEdgeStartTrigソースにai0を指定してtask startさせることができました。
ありがとうございます。
それと、詳しい状況の説明ですが、
>ai0-ai3 の計測時間は決まってますか?
Ans. はい、計測時間は設定により10~60秒の設定をできるようにしております。
>パルス信号出力用のトリガ信号発生がai0-ai3 の
>計測後(たとえばai0-ai3 の計測時間が1秒間にたいして、トリガ信号発生がその2秒間おき)であれば、アナログタスクの再トリガを使
>もしai0-ai3 の計測中にパルス信号を指定回数出力させるのであれば、ai0 の値をソフトで比較して閾値を超えればパルス出力、
>というソフトウェアタイミングで行うことになるかと思います。
計測時間内に、
1.1度のトリガ後、指定回数使用する3種類の内1もしくは2種類のパルス信号を出力させる。
2.トリガがかかるたびに、パルス信号を1回、使用する3種類の内1もしくは2種類のパルス信号を出力させる。
ということを実現させたいので、doradorachan様の後者の方法にすることになりそうですが、
ソフトで値を読み取って閾値を超えてからのパルス出力ですと、命令してからパルス出力までの遅延発生は5ms以上になってしまいそうで
悩ましいところです。
遅延時間の話しをしましたが、パルス出力で試す前にDOで同じ出力ピンPFI0-2で
DAQmxWriteDigitalLinesを使って同じようにソフトで比較してDOへ出力することを試してました。
オシロスコープでai0の入力閾値を超えてWriteDigitalコマンドを実行しましたが、コマンド発行から実際に信号がでるまで約16-18msほどの遅延が
ありました。ですので、ソフトで読み取ってからのパルス出力も同じ遅延がないか気になったわけです。