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

概要

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

内容

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(レガシー)
CWDAQコントロールでResetメソッドを使用し、このコントロールをデフォルト状態に設定して、構成中に予約したすべてのリソースを解放します。ほとんどの場合、Resetメソッドを明示的に呼び出す必要はありません。Visual Basic 6.0は、アプリケーションが存在する場合、自動的にリソースを解放します。従来型NI-DAQ(レガシー)のリソースは、オブジェクトにNothingを割り当て、実行時に解放する必要があります。この動作はVisual Basic .NETで変更されました。

NI-DAQmx
.NET Frameworkはリソース管理にバグ処理を使用します。バグ処理は、実行中に割り当てられたオブジェクトの寿命を追跡する負担を取り除くため、有益です。ただし、バグ処理は確定的ではありません。.NET Frameworkは、タスクがNothingに設定されていても、修正予定のオブジェクトに関連付けられたリソースが解放される正確なタイミングは保証しません。
タスクの構成時に予約されたNI-DAQリソースを確定的に解放するDisposeメソッドを使用します。

[VB.NET]
'Clear the task and release any resources used by the task
daqTask.Dispose()  

エラー処理

Visual Basic .NETのエラー処理は、Visual Basic 6.0のエラー処理とは異なります。

従来型NI-DAQ(レガシー)
CWDAQ ActiveXコントロールはDAQErrorイベントとDAQWarningイベントによりエラー通知を出します。

[VB 6.0]
Private Sub Start_Click()

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
CWAI1.NScans = 1000
CWAI1.ChannelClock.ClockSourceType = cwaiInternalCS

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

'Other code

CWAI1.Configure
CWAI1.Start
End Sub

Private Sub CWAI1_DAQError(ByVal StatusCode As Long, ByVal ContextID As Long, ByVal ContextDescription As String)
MsgBox "Error: " & StatusCode & vbCrLf & "Context: " & ContextDescription & vbCrLf & CWDAQTools1.GetErrorText(StatusCode)
End Sub

Private Sub CWAI1_DAQWarning(ByVal StatusCode As Long, ByVal ContextID As Long, ByVal ContextDescription As String)
MsgBox "Warning: " & StatusCode & vbCrLf & "Context: " & ContextDescription & vbCrLf & CWDAQTools1.GetErrorText(StatusCode)
End Sub

NI-DAQmx
Visual Basic .NETは、構成例外処理を介して、プログラムの実行中に発生する予期しない問題に対する信号と応答のオブジェクト指向解決策を提供します。NI-DAQmx .NET APIでは、ドライバがエラーを返すたびに、DAQExceptionが発生します。このオブジェクトは、エラー番号、エラーメッセージ、スタックなどに関する情報を提供します。この情報提供はTry-Catch-Finallyブロックを介して行われます。


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

' Create a channel myTask.AIChannels.CreateVoltageChannel(physicalChannelComboBox.Text, "", CType(-1, AITerminalConfiguration), -10.0, 10.0, AIVoltageUnits.Volts)

' Configure timing specs
myTask.Timing.ConfigureSampleClock("", 1000, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, 1000)

reader = New AnalogMultiChannelReader(myTask.Stream)
' Read the data
Dim data As Double(,) = reader.ReadMultiSample(1000)
Catch ex As DaqException
MessageBox.Show(ex.Message)
Finally
myTask.Dispose()
End Try

前のサンプルでは、NI-DAQmxのエラーが最初のTryステートメント後のコードブロック内で発生する場合、このエラーはDAQExceptionとして処理されます。NI-DAQmx .NETライブラリのエラーはすべてDAQExceptionオブジェクトの発生により示されます。このサンプルでは、Catchブロックにエラーメッセージを示すメッセージボックスが表示されます。このサンプルでは、Finallyブロックで例外の発生の有無に関わらずNI-DAQmxリソースがクリーンアップされることを確認します。

NI-DAQmx .NET APIは、NI-DAQ警告がアプリケーションの実行停止を要求しないため、この警告のイベントを提供します。エラーはアプリケーションの実行停止を要求します。以下のコードはDAQWarningイベントの使用方法を示します。

'define the daqsystem and initialize it
Private WithEvents daqSystem As DaqSystem = DaqSystem.Local
.
.
.
Public Sub DaqWarningEventHandler(ByVal sender As Object, ByVal e As DaqWarningEventArgs) Handles daqSystem.DaqWarning
'display or log warning message
End Sub

DaqExceptionオブジェクトとDaqWarningイベントの詳細については、『NI-DAQmx .NET Help』 を参照してください。Visual Basic .NETでの構成例外処理とTry-Catch-Finallyの詳細については、MSDNを参照してください。  

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

Was this information helpful?

Yes

No