NI製品ディスカッション

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

USB-6003 Analog Input で他の端子の値が影響してしまう

解決済み
解決策を見る

・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つまとめて読んでいたのですが、

 同様にひとつの端子の値が周りに影響してしまっていたので、タスク作成の段階から分けて

 書いたコードを貼り付けてあります。この場合でも同様の現象でした。

 

0 件の賞賛
メッセージ1/3
1,983件の閲覧回数
解決策
トピック作成者gidaが受理

AI1がオープン状態でグランドにも何もつながっていないのであれば、0Vになることは保証できません。

測定される電圧は不定ですのでまずは何かをつなぐことから始めてください。

 

何かをつなげていてその状態であればゴーストだと思います。

下記資料を参考に対策してください。

計測からゴースト発生を除去する方法

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
メッセージ2/3
1,966件の閲覧回数

返信が大変遅れており申し訳ありません。

ご指摘いただいた通り、AI1の方に何もつないでいないことが原因でした。

AI0に5V、AI1にGNDを接続すれば、それぞれ正しく測定することができました。

お騒がせいたしました。

丁寧に教えていただきありがとうございました。

0 件の賞賛
メッセージ3/3
1,924件の閲覧回数