Электронные технологии и метрологические системы Главная Форум Поиск Карта сайта Написать
ЗАО "Электронные технологии и метрологические системы"   
Тел./факс: +7(495)739-39-19 (многоканальный); E-mail: info@zetlab.ru   
Электронные технологии и метрологические системы ZETLab
 
 Главная 
 Продукция 
 Поддержка 
 Предприятие 
 Прайс лист 
 Контакты 
 Карта сайта 
ZETServer
Grid
Gramma
PlotterXYZ
Polar
Scale
ColScale
GreenScale
TextDisp
ExtEditBox
Kompas
Unit
ZADC
DSP
Примеры программирования


Online-консультанты
388828835 - Мария
627723417 - Никита
397652821 - Елена

Приглашаем на курсы обучения (29-31 мая 2012 года)

Форум

Скидка ВУЗам!

Доставка по всему миру!

Удалённое управление прибором.

Каталог продукции.

Запрос звонка

Наш телефон

Наш мобильный телефон

Наш факс


E:mail

Анализатор спектра a17-u8. Срок поставки 2 недели.









Главная / Продукция / Программное обеспечение / ZETLab Studio - средства разработки виртуальных приборов Версия для печати Версия для печати

Текст программы Test_Zadc на Visual_Basic 6


Option Explicit

Const MAX_TYPE_DSP = 30 ' Максимальное поддерживаемое кол-во типов устройств

' Глобальные переменные
Dim typeDevice As Long          ' Тип устройства
Dim numberDSP As Long           ' Порядковый номер устройства

Dim numChannelsADC As Long      ' Кол-во включенных каналов АЦП
Dim numWordsADC As Long         ' Кол-во слов (по два байта) в одном отсчете АЦП
Dim sizeBufferADC As Long       ' Размер буфера драйвера в словах
Dim amplifyADC(1) As Double     ' Коэф. усиления по первым двум каналам
Dim resolutionADC(1) As Double  ' Вес младшего разряда АЦП
Dim pBufferADC As Long          ' Указатель на начало буфера драйвера
Dim Buffer16ADC(1) As Integer   ' Локальный буфер на два отсчета (для АЦП с разрядностью не более 16 бит)
Dim Buffer32ADC(1) As Long      ' Локальный буфер на два отсчета (для АЦП с разрядностью более 16 бит)
Dim pointerADC As Long          ' Относительный указатель на текущий элемент заполнения буфера драйвера (кратен 2)
Dim pointerADC_old As Long      ' Предыдущее значение текущего указателя на буфер драйвера
Dim pointerADC_abs As Long      ' Абсолютный указатель на текущий элемент буфера драйвера

Dim volt(1) As Double           ' Мгновенное текущее значение АЦП (в Вольтах)

Private Sub Form_Load()
    Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)
    Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000)
    Call OpenDevice
End Sub


Private Sub Form_Unload(Cancel As Integer)
    Dim i As Integer

    Call CloseDevice
    'close all sub forms
    For i = Forms.Count - 1 To 1 Step -1
        Unload Forms(i)
    Next
    If Me.WindowState <> vbMinimized Then
        SaveSetting App.Title, "Settings", "MainLeft", Me.Left
        SaveSetting App.Title, "Settings", "MainTop", Me.Top
    End If
End Sub


Public Sub OpenDevice()
    Dim Err As Long         ' Код ошибки
    Dim enable As Long      ' Поддерживается / не поддерживается
    Dim Serial As Long      ' Серийный номер

    numberDSP = 0           ' Здесь задан первый порядковый номер устройства
    pointerADC = 0
    pointerADC_old = 0
    pBufferADC = 0
 
    ' Цикл подключения к первому поддерживаемому устройству
    For typeDevice = 0 To MAX_TYPE_DSP - 1
        ' подключиться к драйверу (обязательно)
        Err = ZOpen(typeDevice, numberDSP)
        If (Err = 0) Then
            ' Проверить поддерживается ли АЦП
            Err = ZGetEnableADC(typeDevice, numberDSP, enable)
            If (Err = 0 And enable <> 0) Then
                Exit For
            Else
                Err = ZClose(typeDevice, numberDSP)
            End If
        End If
    Next typeDevice
    If (typeDevice >= MAX_TYPE_DSP) Then
        MsgBox ("Поддерживаемое устройство не найдено!")
        End
    End If

    Err = ZGetSerialNumberDSP(typeDevice, numberDSP, Serial)
    If (Err = 0) Then
        frmMain.Caption = "Test_Zadc для устройства №" + CStr(Serial)
    End If

    ' опросить  кол-во каналов АЦП
    Err = ZGetQuantityChannelADC(typeDevice, numberDSP, numChannelsADC)
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetQuantityChannelADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    ' включить первый канал АЦП
    Err = ZSetInputADC(typeDevice, numberDSP, 0, 1)
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZSetInputADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    If numChannelsADC > 1 Then
        ' включить второй канал АЦП
        Err = ZSetInputADC(typeDevice, numberDSP, 1, 1)
        If (Err <> 0) Then
            MsgBox ("Ошибка в ZSetInputADC(), Error = " + CStr(Err))
            GoTo EndWithZClose
        End If
    End If
   
    ' опросить коэф. усиления по первому каналу АЦП
    Err = ZGetAmplifyADC(typeDevice, numberDSP, 0, amplifyADC(0))
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetAmplifyADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    If numChannelsADC > 1 Then
        ' опросить коэф. усиления по второму каналу АЦП
        Err = ZGetAmplifyADC(typeDevice, numberDSP, 1, amplifyADC(1))
        If (Err <> 0) Then
            MsgBox ("Ошибка в ZGetAmplifyADC(), Error = " + CStr(Err))
            GoTo EndWithZClose
        End If
    End If

    ' опросить вес младшего разряда АЦП первого канала
    Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 0, resolutionADC(0))
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetDigitalResolChanADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If
   
    If numChannelsADC > 1 Then
        ' опросить вес младшего разряда АЦП второго канала
        Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 1, resolutionADC(1))
        If (Err <> 0) Then
            MsgBox ("Ошибка в ZGetDigitalResolChanADC(), Error = " + CStr(Err))
            GoTo EndWithZClose
        End If
    End If
   
    ' опросить  кол-во включенных каналов АЦП
    Err = ZGetNumberInputADC(typeDevice, numberDSP, numChannelsADC)
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetNumberInputADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    ' опросить кол-во слов в одном отсчете АЦП
    Err = ZGetWordsADC(typeDevice, numberDSP, numWordsADC)
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetWordsADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    ' Проверка переменных, чтобы избежать деления на 0
    If (numWordsADC = 0 Or amplifyADC(0) = 0 Or amplifyADC(1) = 0) Then
        MsgBox ("Ошибочные значения параметров АЦП!")
        GoTo EndWithZClose
    End If
   
    ' Запросить буфер АЦП
    Err = ZGetBufferADC(typeDevice, numberDSP, pBufferADC, sizeBufferADC)
    If (Err <> 0) Then
        MsgBox ("Ошибка в ZGetBufferADC(), Error = " + CStr(Err))
        GoTo EndWithZClose
    End If

    ' Останов АЦП
    Err = ZStopADC(typeDevice, numberDSP)

    ' Запуск АЦП
    Err = ZStartADC(typeDevice, numberDSP)
   
    ' Запуск таймера
    frmMain.Timer1.Enabled = True
    GoTo OnExit

EndWithZClose:
    Err = ZClose(typeDevice, numberDSP)
    End
   
OnExit:
End Sub

Public Sub CloseDevice()
    Dim Err As Long         ' Код ошибки

    ' Останов АЦП
    Err = ZStopADC(typeDevice, numberDSP)
    ' Освободить буфер АЦП
    If pBufferADC <> 0 Then
        Err = ZRemBufferADC(typeDevice, numberDSP, pBufferADC)
    End If
    ' Отключиться от драйвера (обязательно)
    Err = ZClose(typeDevice, numberDSP)
    pBufferADC = 0
End Sub


Private Sub Timer1_Timer()
    Dim Err As Long                 ' Код ошибки

    ' Запросить текущее значение указателя
    Err = ZGetPointerADC(typeDevice, numberDSP, pointerADC)
    If Err <> 0 Then
        Unload frmMain
        End
    End If

    ' Если новые данные в буфер не поступили, то выйти из процедуры
    If pointerADC = pointerADC_old Then GoTo EndTimer

    ' Обновить предыдущее значение указателя
    pointerADC_old = pointerADC
   
    ' Перейти на отсчет первого включенного канала последнего кадра АЦП
    If (pointerADC - numWordsADC * numChannelsADC) < 0 Then
        pointerADC = sizeBufferADC + pointerADC - numWordsADC * numChannelsADC
    Else
        pointerADC = pointerADC - numWordsADC * numChannelsADC
    End If
   
    ' Вычислить адрес памяти откуда копировать данные АЦП для CopyMemory()
    pointerADC_abs = pBufferADC + 2 * pointerADC
    If numWordsADC = 1 Then
        ' Скопировать два байта если отсчет АЦП состоит из одного слова
        CopyMemory Buffer16ADC(0), ByVal pointerADC_abs, 2
        ' Вычислить из целого значения отсчета АЦП вещественное значение отсчета (в Вольтах)
        volt(0) = resolutionADC(0) * Buffer16ADC(0) / amplifyADC(0)
    Else
        ' Скопировать четыре байта если отсчет АЦП состоит из двух слов
        CopyMemory Buffer32ADC(0), ByVal pointerADC_abs, 4
        ' Вычислить из целого значения отсчета АЦП вещественное значение отсчета (в Вольтах)
        volt(0) = resolutionADC(0) * Buffer32ADC(0) / amplifyADC(0)
    End If
   
    ' Отобразить мгновенное значение напряжения для первого канала
    TextBox1.Text = Format(volt(0), "###0.000000")

    ' Если включено более одного канала АЦП, то сделать то же самое для второго канала
    If numChannelsADC > 1 Then
        ' Перейти на следующий отсчет АЦП
        pointerADC = pointerADC + numWordsADC
        ' Если вышли за границу буфера, то перейти в начало
        If pointerADC >= sizeBufferADC Then pointerADC = pointerADC - sizeBufferADC

        pointerADC_abs = pBufferADC + 2 * pointerADC
        If numWordsADC = 1 Then
            CopyMemory Buffer16ADC(1), ByVal pointerADC_abs, 2
            volt(1) = resolutionADC(1) * Buffer16ADC(1) / amplifyADC(1)
        Else
            CopyMemory Buffer32ADC(1), ByVal pointerADC_abs, 4
            volt(1) = resolutionADC(1) * Buffer32ADC(1) / amplifyADC(1)
        End If
        ' Отобразить мгновенное значение напряжения для второго канала
        TextBox2.Text = Format(volt(1), "#0.000000")
    End If
   
EndTimer:
End Sub


Public Sub GetVerDSP()
    Dim Err As Long         ' Код ошибки
    Dim Length As Long      ' Длина строки
    Dim strVer As String
    Dim strVerDrv As String, strVerDSP As String, strVerLib As String

    Err = ZOpen(typeDevice, numberDSP)
    If Err <> 0 Then MsgBox ("Device not find, Error = " + CStr(Err))
   
    strVerDrv = Space$(100)
    strVerDSP = Space$(100)
    strVerLib = Space$(100)
    Err = ZGetVersion(typeDevice, numberDSP, strVerDSP, strVerDrv, strVerLib)
    strVer = Trim(strVerDSP)
    Length = Len(strVer)
    If Length > 0 Then strVer = Left(strVer, Length - 1)
    MsgBox (strVer)
    Err = ZClose(typeDevice, numberDSP)
End Sub



В любой части настоящего сайта могут иметься неточности и технические ошибки. В содержание могут периодически вноситься изменения и/или поправки.

Россия, Москва, Зеленоград, проезд 4922 (Озерная аллея), дом 4 стр. 5. Схема проезда.
Тел./Факс: +7(495)739-39-19 (многоканальный); E-mail: info@zetlab.ru, sale@zetlab.ru.
GPS координаты: долгота 37°13′14.57″E (37.220713) широта 55°59′1.3″N (55.983695)






     
Главная | Продукция | Поддержка | Предприятие | Контакты | Карта сайта | Прайс-лист | Старый сайт | www.zetlab.ru | www.sigmausb.ru