06-22-2018 02:56 AM
・USB-6003を、Windows10 PCに接続
・Windows 10 PC 上でVisual Studio 2017を用い、VC#のプログラムを作成
・AI0とAI1の値を読むと、例えばAI0ポートに5Vをつなぐと、AI0は5V程度の値として読めるが、同時にAI1の方に1.6V程度の値が読めてしまう(実際は何もつないでいないので0V付近のままでいてほしい)
という状況です。
NI MAXのテストパネルで読むと、AI0に5Vを付け外ししてもAI1には何も影響しないので、
私の作ったソース上の設定項目などがおかしいのだと思うのですが、
何かヒントをいただけるとありがたいです。
お手数ですが、ご確認のほどお願いいたします。
ご参考までにソースを一部貼り付けます。
よろしくお願いいたします。
①初期化部分
//AI0 dataInputTask0 = new NationalInstruments.DAQmx.Task(); dataInChannels0 = dataInputTask0.AIChannels.CreateVoltageChannel("dev1/ai0", "dataIn0", AITerminalConfiguration.Differential, -10, 10, AIVoltageUnits.Volts); dataInputTask0.Timing.ConfigureSampleClock("", SAMPLING_RATE_INPUT, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples); AI_reader0 = new AnalogMultiChannelReader(dataInputTask0.Stream); //AI1 dataInputTask1 = new NationalInstruments.DAQmx.Task(); dataInChannels1 = dataInputTask1.AIChannels.CreateVoltageChannel("dev1/ai1", "dataIn1", AITerminalConfiguration.Differential, -10, 10, AIVoltageUnits.Volts); dataInputTask1.Timing.ConfigureSampleClock("", SAMPLING_RATE_INPUT, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples); AI_reader1 = new AnalogMultiChannelReader(dataInputTask1.Stream);
②読みだし開始部分
public void PressureWatchMethod() { int interval = 1000; while (true) { inputCallback0 = new AsyncCallback(InputRead); AI_reader0.BeginReadMultiSample(POINTS_INPUT, inputCallback0, dataInputTask0); System.Threading.Thread.Sleep(interval); inputCallback1 = new AsyncCallback(InputRead1); AI_reader1.BeginReadMultiSample(POINTS_INPUT, inputCallback1, dataInputTask1); System.Threading.Thread.Sleep(interval); } }
③コールバック部分
private void InputRead(IAsyncResult ar) { try { // Read the data AI_data0 = AI_reader0.EndReadMultiSample(ar); dataInputTask0.Stop(); double buffer = 0.0; for(int i = 0; i < POINTS_INPUT; i++) { buffer += AI_data0[0, i]; } Pressure1 = buffer / POINTS_INPUT; } catch (Exception e) { Console.WriteLine("## DEBUG ## ERROR MESSAGE at InputRead() : {0}", e.Message); } } private void InputRead1(IAsyncResult ar) { try { // Read the data AI_data1 = AI_reader1.EndReadMultiSample(ar); dataInputTask1.Stop(); double buffer = 0.0; for (int i = 0; i < POINTS_INPUT; i++) { buffer += AI_data1[0, i]; } Pressure2 = buffer / POINTS_INPUT; } catch (Exception e) { Console.WriteLine("## DEBUG ## ERROR MESSAGE at InputRead() : {0}", e.Message); } }
※最初は"dev1/ai0:3"として4つまとめて読んでいたのですが、
同様にひとつの端子の値が周りに影響してしまっていたので、タスク作成の段階から分けて
書いたコードを貼り付けてあります。この場合でも同様の現象でした。
解決済! 解決策の投稿を見る。
06-22-2018 07:56 AM - 編集済み 06-22-2018 08:04 AM
AI1がオープン状態でグランドにも何もつながっていないのであれば、0Vになることは保証できません。
測定される電圧は不定ですのでまずは何かをつなぐことから始めてください。
何かをつなげていてその状態であればゴーストだと思います。
下記資料を参考に対策してください。
07-03-2018 11:53 PM
返信が大変遅れており申し訳ありません。
ご指摘いただいた通り、AI1の方に何もつないでいないことが原因でした。
AI0に5V、AI1にGNDを接続すれば、それぞれ正しく測定することができました。
お騒がせいたしました。
丁寧に教えていただきありがとうございました。