Traditional NI-DAQ (Legacy) からMicrosoft Visual Basic .NET使用したNI-DAQmx移行する:パート4

概要

メモ:このドキュメントは、「Traditional NI-DAQ (Legacy) からMicrosoft Visual Basic .NETを使用した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ヘルプ―.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を選択します。

リソースクリーンアップ

Traditional NI-DAQ (Legacy)

CWDAQコントロールでResetメソッドを使用し、このコントロールをデフォルト状態に設定して、構成中に予約したすべてのリソースを解放します。ほとんどの場合、Resetメソッドを明示的に呼び出す必要はありません。Visual Basic 6.0は、アプリケーションが存在する場合、自動的にリソースを解放します。Traditional NI-DAQ (Legacy) のリソースは、オブジェクトに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のエラー処理とは異なります。

Traditional NI-DAQ (Legacy)
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
'新規タスクを作成する
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

上記の例では、最初のTryステートメントの後にコードブロック内でNI-DAQmxエラーが発生した場合、エラーは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ヘルプ」を参照してください。Visual Basic .NETでの構成例外処理とTry-Catch-Finallyの詳細については、MSDNを参照してください。

Was this information helpful?

Yes

No