Аналоговый выход DAQ, управляемый VB: многоканальное одновременное обновление
Я работаю над управлением пневматическими клапанами с помощью командного сигнала от ЦАП, ЦАП управляется приложением VB.NET. Напряжение командного сигнала напрямую зависит от давления, которое пропускает клапан.
Я управляю пятью клапанами, используя разные аналоговые каналы для каждого. ЦАП - это USB-3103 от Measurement Computing.
https://www.mccdaq.com/pdfs/manuals/USB-3103.pdf
Я использую MccDaq.dll, которая является частью универсальной библиотеки измерений.
https://www.mccdaq.com/PDFs/manuals/Universal-Library-Help.pdf
Моя работа основана на примере файла AnalogOutScantCont, найденного здесь: https://www.mccdaq.com/downloads/example_programs/Product_Specific_Examples/USB-3101FS/
https://www.mccdaq.com/daq-software/universal-library.aspx
Есть две функции для обновления значений аналогового выхода. Aout, который используется для обновления одного канала, и AoutScan, который используется для обновления диапазона (нескольких) каналов одновременно. В настоящее время у меня работает Aout, а у AoutScan - нет. Я чувствую, что использование AoutScan будет более элегантным, и мне просто интересно, почему он не работает.
Рабочий и не рабочий код ниже.
Public Daqboard As New MccDaq.MccBoard(0)
Public MHandle As IntPtr
Public AORate As Int32
Dim NumPoints As Integer
Dim FirstPoint As Integer
Dim DataArray_DAQ(4) As UShort
Dim ulstat As MccDaq.ErrorInfo
NumPoints = 5 'one number for example analog output channel
MHandle = MccDaq.MccService.WinBufAllocEx(NumPoints) ' set aside memory to hold data, 3x larger so we can update on the fly
If MHandle = 0 Then Stop
FirstPoint = 0
AORate = 10000 'good chance the board will ignore this value
For i = 0 To 4
DataArray_DAQ(i) = 6554 * Convert.ToUInt16(pressure(i)) ' convert PSI to DAC voltage values
Next
'move the array out to computer memory
ulstat = MccDaq.MccService.WinArrayToBuf(DataArray_DAQ, MHandle, FirstPoint, NumPoints)
'Set scan options
Dim AOOptions As MccDaq.ScanOptions = MccDaq.ScanOptions.Default
AOOptions = MccDaq.ScanOptions.Background
AOOptions += MccDaq.ScanOptions.Continuous
Ниже показано, как я использую AoutScan, который должен обновлять несколько каналов одновременно. В настоящее время это ничего не делает.
ulstat = Daqboard.AOutScan(0, 4, NumPoints, AORate, MccDaq.Range.Bip10Volts, MHandle, AOOptions) ' This should update channels 0 through 4 at the same time
Ниже показано, как я использую Aout, который обновляет каналы по одному, и я просто использую цикл for для обновления всех каналов. Это прекрасно работает.
For i = 0 To 4
ulstat = Daqboard.AOut(i, MccDaq.Range.Bip10Volts, DataArray_DAQ(i)) ' This updates each channel one at a time using the four loop
Next