このシリーズは、NI-DAQmxに同梱されている2つの主要なリファレンスマニュアルを参照しています。
従来型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を参照してください。
このセクションはこのシリーズの別のトピックの一覧を示します:
以下を参照してください:
Microsoft Visual Basic .NETで従来型NI-DAQからNI-DAQmxへ移行する: Part 1
Microsoft Visual Basic .NETで従来型NI-DAQからNI-DAQmxへ移行する: Part 2
Microsoft Visual Basic .NETで従来型NI-DAQからNI-DAQmxへ移行する: Part 3