Электронные технологии и метрологические системы Главная Форум Поиск Карта сайта Написать
ЗАО "Электронные технологии и метрологические системы"   
Тел./факс: +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.cpp на Visual C++ 10


// Программа, включающая два канала АЦП устройства и отображающая мгновенное амплитудное значение по двум каналам два раза в секунду
// © ЗАО "ЭТМС" 1992-2011. Все права защищены

#include
"stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>

#include "zadc_int.h"                                        // Интерфейс библиотеки Zadc.dll

#define
MAX_TYPE_DSP       20                                // Максимальное поддерживаемое количество типов устройств
#define MAX_DEVICE_NAME    16                                // Максимальное значение длины возвращаемого имени устройства

int main(int argc, char* argv[])
{
       long typeDevice;                                      // Тип устройства
       long numberDSP = 0;                                   // Порядковый номер сигнального процессора
       long Err;                                             // Код ошибки
       long enable;                                          // Флаг поддерживается / не поддерживается
       long numChannelsADC;                                  // Количество включенных каналов АЦП
       long numWordsADC;                                     // Количество слов (по два байта) в одном отсчете АЦП
       short *pBuffer16ADC = NULL;                           // Указатель на начало буфера драйвера для АЦП с разрядностью не более 16 бит
       long *pBuffer32ADC = NULL;                          // Указатель на начало буфера драйвера для АЦП с разрядностью более 16 бит
       long sizeBufferADC;                                   // Размер буфера драйвера в словах
       long pointerADC = 0;                                  // Указатель на текущий элемент заполнения буфера драйвера (кратен 2)
       long pointerADC_old = 0;                            // Предыдущее значение указателя на буфер драйвера
       double amplifyADC0, amplifyADC1;                      // Коэффициент усиления по первым двум каналам
       double resolutionADC0, resolutionADC1;                // Вес младшего разряда АЦП по первым двум каналам
       double volt0, volt1;                                  // Мгновенное текущее значение АЦП (в вольтах)
       long serial;                                          // Серийный номер устройства
       char deviceName[MAX_DEVICE_NAME];                     // Имя устройства
 
       // Цикл подключения к первому поддерживаемому устройству
       for(typeDevice = 0; typeDevice < MAX_TYPE_DSP; typeDevice++)
       {
             // Подключение к драйверу устройства
             Err = ZOpen(typeDevice, numberDSP);
             // Если подключение прошло без ошибок
             if(Err == 0)
             {
                    // Проверка поддержки устройством АЦП
                    Err = ZGetEnableADC(typeDevice, numberDSP, &enable);
                    // Если устройство поддерживает АЦП
                    if(Err == 0 && enable != 0)
                    {
                           // Выход из цикла подключения
                           break;
                    }

                    // Если устройство не поддерживает АЦП
                    else
                    {
                           // Вывод информации об ошибке
                           printf("ZGetEnableADC() return Error = 0x%X\n\r", Err);
                           // Отключение от драйвера устройства
                           Err = ZClose(typeDevice, numberDSP);
                    }
             }
       }

       
// Если не удалось подключиться к драйверу устройства
       if(typeDevice >= MAX_TYPE_DSP)
       {
             // Вывод информации об ошибке
             printf("Device not found! Error = 0x%X\n\r", Err);
             getch();
             return 0;
       }
       // Если удалось подключиться к драйверу устройства
       else
       {
             // Вывод информации о том, что произошло подключение к драйверу устройства
             printf("Device found...\n\r");
       }

       // Опрос имени устройства
       Err = ZGetNameDevice(typeDevice, numberDSP, deviceName, MAX_DEVICE_NAME);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetNameDevice() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод имени устройства
             printf("Device name: %s\n\r", deviceName);
       }
 

       // Опрос серийного номера устройства
       Err = ZGetSerialNumberDSP(typeDevice, numberDSP, &serial);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetNameDevice() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод серийного номера устройства
             printf("Serial number: %ld\n\r", serial);
       }
 
       // Опрос количества каналов АЦП устройства
       Err = ZGetQuantityChannelADC(typeDevice, numberDSP, &numChannelsADC);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetQuantityChannelADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод количества каналов АЦП устройства
             printf("Quantity of ADC channel: %ld\n\r", numChannelsADC);
       }
 
       // Запрос на включение первого канала АЦП устройства
       Err = ZSetInputADC(typeDevice, numberDSP, 0, 1);
       // Если запрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZSetInputADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если запрос выполнился без ошибок
       else
       {
             // Вывод информации об успешном включении первого канала АЦП устройства
             printf("First channel activation is successful...\n\r");
       }
       // Если количество каналов устройства больше одного
       if(numChannelsADC > 1)
       {
             // Запрос на включение второго канала АЦП устройства
             Err = ZSetInputADC(typeDevice, numberDSP, 1, 1);
             // Если запрос выполнился с ошибкой
             if(Err != 0)
             {
                    // Вывод информации об ошибке
                    printf("ZSetInputADC() return Error = 0x%X\n\r", Err);
                    // Отключение от драйвера устройства
                    Err = ZClose(typeDevice, numberDSP);
                    getch();
                    return 0;
             }
             // Если запрос выполнился без ошибок
             else
             {
                    // Вывод информации об успешном включении первого канала устройства
                    printf("Second channel activation is successful...\n\r");
             }
       }
 
       // Опрос коэффициента усиления по первому каналу АЦП
       Err = ZGetAmplifyADC(typeDevice, numberDSP, 0, &amplifyADC0);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetAmplifyADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод коэффициента усиления по первому каналу АЦП
             printf("First channel amplifier: %f\n\r", amplifyADC0);
       }
       // Если количество каналов устройства больше одного
       if(numChannelsADC > 1)
       {
             // Опрос коэффициента усиления по второму каналу АЦП
             Err = ZGetAmplifyADC(typeDevice, numberDSP, 1, &amplifyADC1);
             // Если опрос выполнился с ошибкой
             if(Err != 0)
             {
                    // Вывод информации об ошибке
                    printf("ZGetAmplifyADC() return Error = 0x%X\n\r", Err);
                    // Отключение от драйвера устройства
                    Err = ZClose(typeDevice, numberDSP);
                    getch();
                    return 0;
             }
             // Если опрос выполнился без ошибок
             else
             {
                    // Вывод коэффициента усиления по второму каналу АЦП
                    printf("Second channel amplifier: %f\n\r", amplifyADC1);
             }
       }
 
       // Опрос веса младшего разряда АЦП первого канала устройства
       Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 0, &resolutionADC0);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetDigitalResolChanADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод веса младшего разряда АЦП первого канала устройства
             printf("First channel digital resolution: %f\n\r", resolutionADC0);
       }
       // Если количество каналов устройства больше одного
       if(numChannelsADC > 1)
       {
             //  Опрос веса младшего разряда АЦП второго канала устройства
             Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 1, &resolutionADC1);
             // Если опрос выполнился с ошибкой
             if(Err != 0)
             {
                    // Вывод информации об ошибке
                    printf("ZGetDigitalResolChanADC() return Error = 0x%X\n\r", Err);
                    // Отключение от драйвера устройства
                    Err = ZClose(typeDevice, numberDSP);
                    getch();
                    return 0;
             }
             else
             {
                    // Вывод веса младшего разряда АЦП второго канала устройства
                    printf("Second channel digital resolution: %f\n\r", resolutionADC1);
             }
       }

       // Опрос количества включенных каналов АЦП устройства
       Err = ZGetNumberInputADC(typeDevice, numberDSP, &numChannelsADC);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("Function ZGetNumberInputADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод количества включенных каналов АЦП устройства
             printf("Quantity of activated ADC channel: %ld\n\r", numChannelsADC);
       }
 
       // Опрос количества слов в одном отсчета АЦП устройства
       Err = ZGetWordsADC(typeDevice, numberDSP, &numWordsADC);
       // Если опрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("ZGetWordsADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       // Если опрос выполнился без ошибок
       else
       {
             // Вывод количества слов в одном отсчете АЦП устройства
             printf("Quantity of words: %ld\n\r", numWordsADC);
       }
 
       // Проверка переменных, чтобы избежать деления на ноль
       if(numWordsADC == 0 || amplifyADC0 == 0 || amplifyADC1 == 0)
       {
             // Вывод информации об ошибке
             printf("Error DAC parameters\n\r");
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
 
       // Запрос буфера АЦП
       Err = ZGetBufferADC(typeDevice, numberDSP, (void**) &pBuffer16ADC, &sizeBufferADC);
       // Если запрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("Function ZGetBufferADC() return Error = 0x%X\n\r", Err);
             // Отключение от драйвера устройства
             Err = ZClose(typeDevice, numberDSP);
             getch();
             return 0;
       }
       pBuffer32ADC = (long*) pBuffer16ADC;
 
       // Запрос на останов АЦП
       Err = ZStopADC(typeDevice, numberDSP);
       // Запрос на запуск АЦП
       Err = ZStartADC(typeDevice, numberDSP);
 
       // Цикл чтения данных АЦП
       while(!kbhit())
       {
             // Задержка обновления данных АЦП для отображения
             Sleep(500);
             // Запрос указателя на текущий элемент буфера
             Err = ZGetPointerADC(typeDevice, numberDSP, &pointerADC);
             // Если запрос выполнился с ошибкой
             if(Err != 0)
             {
                    // Вывод информации об ошибке
                    printf("Function ZGetPointerADC() return Error = 0x%X\n\r", Err);
                    // Выход из цикла
                    break;
             }
 
             // Если новые данные в буфер от АЦП не поступили, то перейти в начало цикла и подождать
             if(pointerADC == pointerADC_old)
                    continue;
 
             // Обновление предыдущего значения указателя
             pointerADC_old = pointerADC;
 
             // Переход на отсчет первого включенного канала последнего кадра АЦП
             if(pointerADC - numWordsADC * numChannelsADC < 0)
                    pointerADC = sizeBufferADC + pointerADC - numWordsADC * numChannelsADC;
             else
                    pointerADC = pointerADC - numWordsADC * numChannelsADC;
 
             // Вычисление из целого значения отсчета АЦП вещественного значение отсчета (в вольтах) для первого канала
             if(numWordsADC == 1)
                    volt0 = resolutionADC0 * (pBuffer16ADC[pointerADC]) / amplifyADC0;
             else
                    volt0 = resolutionADC0 * (pBuffer32ADC[pointerADC / numWordsADC]) / amplifyADC0;
 
             // Вывод мгновенного значения напряжения для первого канала
             printf("%+8.4f", volt0);
 
             // Если количество каналов устройства больше одного
             if(numChannelsADC > 1)
             {
                    // Переход на следующий отсчет АЦП
                    pointerADC += numWordsADC;
                   
                    // При выходе за границу буфера, осуществляется переход в начало
                    if(pointerADC >= sizeBufferADC)
                           pointerADC = pointerADC - sizeBufferADC;
 
                    // Вычисление из целого значения отсчета АЦП вещественного значение отсчета (в вольтах) для второго канала
                    if(numWordsADC == 1)
                           volt1 = resolutionADC1 * (pBuffer16ADC[pointerADC]) / amplifyADC1;
                    else
                           volt1 = resolutionADC1 * (pBuffer32ADC[pointerADC/numWordsADC]) / amplifyADC1;
 
                    // Вывод мгновенного значения напряжения для второго канала
                    printf("\t%+8.4f", volt1);
             }
             printf("\n\r");
       }
 
       // Запрос на останов АЦП
       Err = ZStopADC(typeDevice, numberDSP);
       // Если запрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("Function ZStopADC() return Error = 0x%X\n\r", Err);
       }
 
       // Запрос на освобождение буфера АЦП
       if(pBuffer16ADC != NULL)
       {
             Err = ZRemBufferADC(typeDevice, numberDSP, (void**) &pBuffer16ADC);
             // Если запрос выполнился с ошибкой
             if(Err != 0)
             {
                    // Вывод информации об ошибке
                    printf("Function ZRemBufferADC() return Error = 0x%X\n\r", Err);
             }
       }
 
       // Отключение от драйвера устройства
       Err = ZClose(typeDevice, numberDSP);
       // Если запрос выполнился с ошибкой
       if(Err != 0)
       {
             // Вывод информации об ошибке
             printf("Function ZClose() return Error = 0x%X\n\r", Err);
       }
 
       if(!kbhit())
             getch();
 
       printf("Press any key for exit...");
       getch();
       return 0;
}

Скачать пример


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

Россия, Москва, Зеленоград, проезд 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