rikraf
2008-05-27 16:10:08 UTC
I have a very simple DIO application which I wrote in VB 6.0 using "Traditional NiDAQ" driver. I am trying to rewrite it in VB.NET 2005 using NIDAQmx, since the former is no longer supported. I'm trying to acquire 961 32-bit words. But I find the data array ("Data") only contains 510 words after first run of code, then 254, then 126, .... then the whole thing crashes. Here's the code, which I based n a NI example ("ContReadDigChanBurst"). I've tried various parameters....
Thanks for any help.
Rick
Private Sub btnGO_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnGO.Click
If taskRunning = False Then
Try
btnGO.Enabled = False
btnExit.Enabled = False
taskRunning = True
myTask = New Task("diTask")
myTask.DIChannels.CreateChannel("Dev1/port0_32", "DigRead", ChannelLineGrouping.OneChannelForAllLines)
myTask.Timing.ConfigureSampleClock("/Dev1/PFI4", 20000000, SampleClockActiveEdge.Rising, _
SampleQuantityMode.FiniteSamples, 961)
myTask.Timing.ConfigureHandshakingBurstExportClock("/Dev1/PFI4", 20000000, _
DigitalLevelPauseTriggerCondition.Low, ReadyForTransferEventLevelActiveLevel.ActiveHigh, _
SampleClockPulsePolarity.ActiveHigh, SampleQuantityMode.FiniteSamples, 961)
myTask.Control(TaskAction.Verify)
DigitalInReader = New DigitalMultiChannelReader(myTask.Stream)
DigitalInReader.SynchronizingObject = Me
'DigitalInReader.SynchronizeCallbacks = true
DigitalCallBack = New AsyncCallback(AddressOf DigitalInCallback)
DigitalInReader.BeginReadMultiSamplePortInt32(-1, DigitalCallBack, Nothing)
Catch ex As Exception
MessageBox.Show(ex.Message)
taskRunning = False
btnGO.Enabled = True
btnExit.Enabled = True
End Try
End If
btnGO.Enabled = True
btnExit.Enabled = True
End Sub
Private Sub DigitalInCallback(ByVal ar As IAsyncResult)
Try
If taskRunning = True Then
Data = DigitalInReader.EndReadMultiSamplePortInt32(ar)
End If
Catch ex As DaqException
MessageBox.Show(ex.Message)
End Try
taskRunning = False
myTask.Dispose()
End Sub
Thanks for any help.
Rick
Private Sub btnGO_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnGO.Click
If taskRunning = False Then
Try
btnGO.Enabled = False
btnExit.Enabled = False
taskRunning = True
myTask = New Task("diTask")
myTask.DIChannels.CreateChannel("Dev1/port0_32", "DigRead", ChannelLineGrouping.OneChannelForAllLines)
myTask.Timing.ConfigureSampleClock("/Dev1/PFI4", 20000000, SampleClockActiveEdge.Rising, _
SampleQuantityMode.FiniteSamples, 961)
myTask.Timing.ConfigureHandshakingBurstExportClock("/Dev1/PFI4", 20000000, _
DigitalLevelPauseTriggerCondition.Low, ReadyForTransferEventLevelActiveLevel.ActiveHigh, _
SampleClockPulsePolarity.ActiveHigh, SampleQuantityMode.FiniteSamples, 961)
myTask.Control(TaskAction.Verify)
DigitalInReader = New DigitalMultiChannelReader(myTask.Stream)
DigitalInReader.SynchronizingObject = Me
'DigitalInReader.SynchronizeCallbacks = true
DigitalCallBack = New AsyncCallback(AddressOf DigitalInCallback)
DigitalInReader.BeginReadMultiSamplePortInt32(-1, DigitalCallBack, Nothing)
Catch ex As Exception
MessageBox.Show(ex.Message)
taskRunning = False
btnGO.Enabled = True
btnExit.Enabled = True
End Try
End If
btnGO.Enabled = True
btnExit.Enabled = True
End Sub
Private Sub DigitalInCallback(ByVal ar As IAsyncResult)
Try
If taskRunning = True Then
Data = DigitalInReader.EndReadMultiSamplePortInt32(ar)
End If
Catch ex As DaqException
MessageBox.Show(ex.Message)
End Try
taskRunning = False
myTask.Dispose()
End Sub