Microsoft Visual Basic .NET従来NI-DAQからNI-DAQmx移行する: Part 2

概要

メモ: このドキュメントは、『Microsoft Visual Basic .NETで従来型NI-DAQ(レガシー)からNI-DAQmxへ移行する』シリーズの2番目のドキュメントです。このシリーズの別のドキュメントにアクセスするには、このシリーズの別のトピックへのリンクを参照してください。

測定を構成する

測定の操作を構成する方法は、ドライバAPIの編成方法により異なります。従来型NI-DAQ (レガシー)は、必要な操作のタイプに基づいて編成されます。たとえば、(比較的低速処理である)温度測定を行う場合、CWAIPointコントロールを使用する必要があります。このコントロールは実行している測定が温度測定であることを認識していません。スケールには、DAQToolsコンポーネントで使用可能な関数を使用するコントロールで返されるデータが適用されます。カスタムスケールが必要な場合は、独自のスケール操作を作成する必要があります。
NI-DAQmxは、必要な測定のタイプに基づいて編成されます。温度、歪み、位置などの測定にチャンネルを作成することを明示的にサポートしています。測定に必要なすべてのパラメータは一緒にグループ化されるため、NI-DAQmx APIでは習得が直観的で簡単です。以下のセクションは、2つのドライバを使用して多様なタイプの測定を構成する方法を説明します。

内容

NI-DAQmxヘルプアクセスする

このシリーズは、NI-DAQmxに同梱されている2つの主要なリファレンスマニュアルを参照しています。

  • NI-DAQmxヘルプ―NI-DAQmxの複数言語に対応しているマニュアルを参照しています。『NI-DAQmxヘルプ』はNI-DAQmxの中心的なヘルプで、ドライバの多様な特性と機能に関する概要および背景を説明します。このマニュアルにアクセスするには、スタート→プログラム→National Instruments→NI-DAQmx→NI-DAQmxヘルプを選択します。
  • NI-DAQmx .NET Help―.NET DAQmx APIのマニュアルを参照しています。このリファレンスは.NET APIに特化し、NI-DAQmxのクラス、メソッド、プロパティに関するドキュメントを提供します。また、NI-DAQmx .NET APIの使用に特化したトピックの概要も説明します。このヘルプは、Visual Studio .NETドキュメントに統合されています。Visual Studio .NETでは、Help→Contentsを選択します。『NI-DAQmx .NET Library Help』にアクセスするには、NI Measurement Studio Help→NI Measurement Studio .NET Class Library→Reference→National Instruments.DAQmxを選択します。タスクと概要については、NI Measurement Studio Class .NET Library→Using the Measurement Studio .NET Class Libraries→Using the Measurement Studio NI-DAQmx .NET Libraryを選択します。 

プログラム事項

この項の目的は、データ集録デバイスの内部サンプルクロックを使用し、有限アナログ入力操作を実行するデータ集録アプリケーションを作成することです。


従来型NI-DAQ(レガシー)で測定を構成する
以下のコードでプログラム的にCWAIコントロールを構成する。

[VB 6.0]
CWAI1.Device = 1 'use device 1
'Use channel 0, with a range of +/- 10 volts in differential mode
CWAI1.Channels.Add "0", 10, -10, CWAIInputModes.cwaiDIFF

'Configure the sample clock
CWAI1.ScanClock.Frequency = 1000

'Configure the number of points
CWAI1.NScans = 1000

'Use the internal clock for acquisition
CWAI1.ChannelClock.ClockSourceType = cwaiInternalCS

'Specify the task to be finite
CWAI1.StopCondition.Type = cwaiNoActiveCondition

'Other code...

CWAI1.Configure

この構成コードは有限アナログ入力操作を設定します。これは、作成しようとしているサンプルアプリケーションの要件を満たします。ただし、この構成は実行している測定タイプを考慮しないことに注目してください。たとえば、熱電対電圧を読み取っている場合、意味のあるデータを集録するには、返されるでデータでスケールを実行する必要があります。DAQToolsコンポーネントで使用可能な熱電対スケール関数を使用する、または自分でスケールアルゴリズムを書くのいずれかの方法で実現できます。

NI-DAQmxで測定を構成する
NI-DAQmxのコンポーネントはありません。タスクを作成した後、適切なチャンネルを作成して、各操作を構成します。以下のコードはNI-DAQmx .NET APIを使用して同じ操作を構成する方法を示します。

[VB.NET]
Dim aiTask As Task
'Create a new Task
aiTask = New Task("Analog Input Task")

'Create an Analog Input Channel object for Device 1, channel 0 in ‘Differential mode.The measurement range is from -10.0 to +10.0 Volts.
aiTask.AIChannels.CreateVoltageChannel("Dev1/ai0", "", AITerminalConfiguration.Differential, _
-10.0, 10.0, AIVoltageUnits.Volts)

'Configure the sample clock to be the internal clock, sampling at 1000 Hz on the
'rising edge of the sample clock.The acquisition mode is finite and we will return 1000 samples per channel.
aiTask.Timing.ConfigureSampleClock("", 1000, _
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, 1000)


より直観的なAPIを使用し、関連パラメータを一緒にグループ化する方法で、この関数を編成します。別の点では、APIが特定のタイプの測定に対するターゲットになっていることに注目してください。

従来型NI-DAQ(レガシー)で測定の構成およびスケールを行う

前の従来型NI-DAQ(レガシー)サンプルでは、データを構成しましたが、スケールは行いませんでした。以下のコードはCWAIコントロールで測定の構成とスケールを行います。

[VB 6.0]
'use device 1
CWAI1.Device = 1

'Use channel 0, with a range of +/- 10 volts in differential mode
CWAI1.Channels.Add "0", 10, -10, CWAIInputModes.cwaiDIFF

'Configure the sample clock
CWAI1.ScanClock.Frequency = 1000

'Configure the number of points
CWAI1.NScans = 1000

'Use the internal clock for acquisition
CWAI1.ChannelClock.ClockSourceType = cwaiInternalCS

'Specify the task to be finite
CWAI1.StopCondition.Type = cwaiNoActiveCondition

CWAI1.Configure
CWAI1.Start

Dim AcqData
Dim temps

'Read 1000 points from the device
CWAI1.Read 1000, AcqData

'Convert the voltages returned to temperature data
'for a B type thermocouple
CWDAQTools1.ConvertTC CWThermocouples.cwB, 30, cwCelsius, AcqData, temps

前のコードでは、熱電対から電圧データを集録する要件でした。その後、温度データを取得するためにDAQツールユーティリティコントロールで変換関数を使用しています。この集録操作は、実行している測定では構成されていません。

NI-DAQmxで測定の構成およびスケールを行う
前のNI-DAQmxサンプルでは、CreateVoltageChannelを使用してチャンネルを構成しました。熱電対に接続されているアナログ入力操作を構成する必要がある場合、以下のコードでチャンネルを構成します。

[VB.NET]
'Create a task
myTask = New Task("temperature task")

'Create a thermocouple channel
myTask.AIChannels.CreateThermocoupleChannel(("Dev1/ai0", "", _
Convert.ToDouble(minimumValueNumeric.Value), Convert.ToDouble(maximumValueNumeric.Value), _
thermocoupleType, AITemperatureUnits.DegreesC)

前の構成を使用する場合、NI- DAQmxでデータを内部的にスケールするため、返されるデータは温度測定になります。

カスタムスケール
NI-DAQmxはカスタムスケールの使用も完全にサポートします。カスタムスケールの詳細については、『NI-DAQmxヘルプ』でNI-DAQmxヘルプ→NI-DAQmxの概念→カスタムスケールを参照してください。  

対話について


多くの場合、実行時にデータ集録操作の構成を変更する必要はありません。以下のセクションは、対話式にDAQ操作を構成する際に使用可能なオプションについて説明します。

従来型NI-DAQ(レガシー)
従来型NI-DAQ(レガシー) ActiveXコントロールは、コントロールに関連付けられたプロパティページを使用します。たとえば、CWAIコントロールでは、Channelsタブで操作に使用するデバイスとチャンネルを選択します。Buffer、Clocks、Conditionsタブは、バッファ設定(集録するスキャン数)、サンプルクロック設定(サンプルレート)、開始/停止/一時停止の状態をそれぞれ構成します。プロパティページでご使用のアプリケーションの設定が可能でも、従来型NI-DAQ(レガシー) ActiveXコントロールではご使用の構成を対話式にテストすることはできません。

NI-DAQmx
NI-DAQmxは、対話式の構成ツールであるDAQアシスタントを提供しています。DAQアシスタントは、対話式にNI-DAQmxのタスクの作成、編集、実行を行うツールであり、データ集録の構成と操作を試すことができます。DAQアシスタントはMeasurement & Automation Explorer (MAX)からアクセスできます。また、Measurement Studio 7.x以降がインストールされている場合、Visual Studio .NET 2003でDAQアシスタントを使用できます。Measurement Studio 8.0.1以降がインストールされている場合、Visual Studio 2005でDAQアシスタントを使用できます。MAXで作成および構成するタスクは、ご使用のシステム上のDAQmxアプリケーションからアクセスできます。これらのタスクはプロジェクトにローカルではありません。Visual Studio .NET 2003でDAQアシスタントを起動すると、Visual Basic .NET、Visual C#、C++の自動生成タスク構成コードでプロジェクトタスクを作成できます。

MAXでDAQアシスタントを使用する



図1: MAXでのDAQアシスタント


以下はMAXでDAQアシスタントを使用する概念を説明します。

DAQアシスタントで対話式に測定タスクを構成する

DAQアシスタントは、以前はVisual Basic 6.0でプロパティページを使用してもできなかった構成を設定できます。コードを書かずに、DAQアシスタントを使用して構成をテストすることもできます。また、ご使用のDAQデバイス用に構成したアクセサリに基づいて、特定のタスクの接続ダイアグラムを表示することもできます。

事前構成

NI-DAQmx
DAQアシスタントを使用してMAXでご使用のタスクを構成すると、DaqSystem.Local.LoadTaskメソッドでそのタスクをロードできます。タスクオブジェクトがロードされると、タスクの使用、または使用前にタスク構成の変更を行うことができます。
DAQmx 7.4以降では、プログラム的にタスクを作成し、MAXに保存できます。
DaqSystem.Local.LoadTaskメソッドの詳細については、『.NET DAQmx Help』の「Creating an NI-DAQmx Task from an Existing Task in MAX」を参照してください。  

タイミング

特定のサンプルアプリケーションには、特別なタイミングとトリガの要件はありません。ただし、タイミングとトリガのサポートを理解することは、効率の良いデータ集録アプリケーションを作成する点で重要です。

従来型NI-DAQ(レガシー)でのタイミング
CWDAQコントロールのタイミングパラメータの設定は、プロパティページを介して、またはプログラム的に実行できます。以下のプロパティページサンプルでは、サンプルレートは、サンプルクロックに内部クロックを使用し、1000サンプル/秒に設定されています。

図2

[VB 6.0]
With CWAI1.ScanClock

'Configure the scan clock to be the Internal Clock
.ClockSourceType = cwaiInternalCS

'specify the clock mode
.InternalClockMode = cwaiFrequency

'Specify the Scan Clock frequency
.Frequency = 1000

End With

CWAI1.Configure

NI-DAQmxでのタイミング
NI-DAQmxタイミングクラスは、ハードウェアタイミングデータ集録操作のタイミングを構成します。タイミングクラスで、連続操作または有限操作の指定、有限の操作に集録や生成を行うサンプル数の選択、必要に応じたバッファ作成を行います。

DAQアシスタントを使用すると、これらのパラメータを対話式に構成してタスクをテストできます。


図3

Visual Basic .NETでタイミングオブジェクトを使用した前のサンプルです。以下のコードのとおり、DAQmx .NETクラス階層は、直観的な方法で関連パラメータをグループ化し、複雑な構成の簡素化をはかります。

[VB.NET]
'Configure the sample clock to be the internal clock, sampling at 1000 Hz on the rising edge of the sample clock.The acquisition mode is finite and we will return 1000 samples per channel.
aiTask.Timing.ConfigureSampleClock("", 1000, _
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, 1000)


NI-DAQmxでサポートされている多様なタイプのタイミングに関する詳細については、『NI-DAQmxヘルプ』の「タイミングとトリガ」セクションを参照してください。

タイミングクラスの詳細については、『DAQmx .NET Help』を参照してください。

トリガ

従来型NI-DAQ (レガシー)でのトリガ
従来型NI-DAQ (レガシー)の多様なCWDAQ ActiveXコントロールのプロパティページで、さまざまなタイプのトリガ操作の構成ができます。たとえば、以下のとおり、Visual Basic 6.0でCWAIコントロールとプロパティページで、0 Vのヒステリシスを使用し、3.0 VレベルでソースとしてPFI0でアナログ開始トリガを構成できます。


図4

以下のコードのとおり、プログラム的にこのタイプのトリガを設定することもできます。

[VB 6.0]
With CWAI1.StartCondition
.Type = cwaiHWAnalog
.Source = "PFI0"
.Mode = cwaiFalling
.Level = 3#
End With

NI-DAQmxでのトリガ
NI-DAQmxトリガクラスは特定の動作を実行するトリガを構成します。最も一般的に使用される動作は開始トリガ基準トリガです。トリガクラスは以下のトリガ構成を提供します。

  • AdvanceTrigger
  • ArmStartTrigger
  • HandshakeTrigger
  • PauseTrigger
  • ReferenceTrigger
  • StartTrigger
  • WatchdogExpirationTrigger

これらのクラスでそれぞれのタイプのトリガを構成します。これらのクラス関する詳細については、『DAQmx .NET Help』を参照してください。

 



図5

以下のコードは、NI-DAQmxでVisual Basic .NETコードを使用し、0 Vのヒステリシスを使用して、3.0 VレベルでソースとしてPFI0でアナログ開始トリガを構成する方法を示します。


[VB.NET]
'Configure PFI0 to be the analog trigger, setup the trigger to be
'asserted on the Falling slope at 3.0 volts
aiTask.Triggers.StartTrigger.ConfigureAnalogEdgeTrigger("PFI0", AnalogEdgeStartTriggerSlope.Falling, 3.0)

トリガオプションはDAQアシスタントで完全にサポートされているため、構成されたこれらのオプションで既存のタスクをロードする、またはプログラム的にトリガオプションを設定するオプションがあります。
NI-DAQmxでサポートされている多様なタイプのタイミングに関する詳細については、『NI-DAQmxヘルプ』の「タイミングとトリガ」セクションを参照してください。

このシリーズトピックリンク

Was this information helpful?

Yes

No