Аналоговый выход 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

0 ответов

Другие вопросы по тегам