- •Автоматизация физического эксперимента
- •Раздел 1. Планирование и обработка результатов эксперимента. 13
- •Раздел 2. Аппаратные и программные средства 57
- •Введение
- •Раздел 1. Планирование и обработка результатов эксперимента. Виды погрешностей измерения и способы их учета
- •Учет и компенсация систематической составляющей погрешности
- •Методы калибровки
- •Учет случайной составляющей погрешности
- •Оценка случайной составляющей погрешности и доверительного интервала погрешности.
- •Определение центров распределения
- •Выявление и устранение случайных промахов
- •Проведение и обработка результатов однофакторного эксперимента
- •Подбор вида модели
- •Определение коэффициентов уравнения регрессии.
- •Условия применения мнк [5]
- •Проверка адекватности уравнения регрессии результатам опытов
- •Планирование и обработка результатов полного многофакторного эксперимента
- •Определение вида частных зависимостей
- •Определение общего вида математической модели.
- •Определение числовых значений коэффициентов модели.
- •Отбор наиболее значимых факторов
- •Отбор наиболее значимых факторов с использованием коэффициентов значимости
- •Уточнение числовых значений коэффициентов модели
- •Проверка адекватности модели экспериментальным данным
- •Раздел 2. Аппаратные и программные средства автоматизации эксперимента интерфейсы в компьютерных системах измерения и управления
- •Высокоскоростные локальные компьютерные системы измерения и управления с интерфейсом isa и pci
- •Мобильные системы сбора данных и управления с интерфейсом usb
- •Аналого-цифровой канал (ацк)
- •Карта битов для ла-20usb:
- •Распределенные системы промышленной автоматизации с интерфейсом rs-232.
- •Распределенные системы удаленного сбора данных и управления с интерфейсом rs-485
- •Сложные распределенные системы удаленного сбора данных и управления на базе интерфейса camac.
- •Проектирование аппаратных средств измерения и управления
- •Выбор шага квантования по уровню
- •Расчет интервала дискретности по времени t.
Аналого-цифровой канал (ацк)
Основное назначение АЦК – преобразование исследуемого аналогового сигнала в цифровую форму. АЦК состоит из входного мультиплексора, полного инструментального усилителя, программируемого усилителя, АЦП с УВХ. Режим работы АЦК (однополюсный или дифференциальный) задаётся программно. С помощью программируемого усилителя можно программно задать входной диапазон АЦП. При задании для работы одновременно
нескольких каналов (группы каналов) – коэффициент усиления в каждом канале может быть задан раздельно на каждый канал.
Источник тактовой частоты АЦП может быть внешний ТТЛ-совместимый сигнал, импульсная последовательность отрицательной полярности; длительность импульсов не менее 100 нс (частота от 1 до 50 кГц), подаваемый на соответствующий контакт разъема XP2 или ХР1. или внутренний – 1 МГц с 16 разрядным счетчиком-делителем (216 -1=65535), таким образом, минимальная задаваемая частота для платы может быть приблизительно 15,26 Гц. Внутренним источником тактовой частоты АЦП служит кварцевый генератор. Сетка задаваемых частот образуется так: максимальная частота 50 кГц, образуется как 1 МГц/20=50 кГц, следующая частота 1МГц/21, еще следующая 1МГц/22 и т.д. до 1МГц/65535.
Выбор режима работы аналогово-цифрового преобразователя - от кварцевого генератора или внешнего источника тактовой частоты, задается программно.
Цифровой порт ввода/вывода
Цифровой порт ввода/вывода содержит 16 линий - 8 на ввод (порт PB) и 8 на вывод (порт PA). Линии ввода и вывода независимы. Ввод может стробироваться сигналом STR_DIO с соответствующего контакта разъёма XP1. Стробирование осуществляется уровнем логического нуля. Кроме режима программного ввода/вывода возможен ввод 4-х битов данных синхронно с данными АЦП. Это может использоваться в задачах, где необходимо фиксировать состояние цифровых линий параллельно с оцифровкой аналоговых входов. Также в задачах синхронизации собираемых данных, при объединении нескольких устройств в единую систему.
Карта битов для ла-20usb:
Табл. 24
D15 |
D16 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
PB7 |
PB6 |
PB5 |
PB4 |
Табл. 25
Бит |
Имя |
Описание |
D<0…D3> |
PB<4…7> |
4 старших бита цифрового порта ввода (читаются синхронно с данными АЦП) |
D<4…15> |
D<0…D11> |
биты данных АЦП |
Технические характеристики ЛА-20USB
Табл. 26
АНАЛОГО-ЦИФРОВОЙ КАНАЛ
Число аналоговых входов |
32 однополюсных / 16 дифференциальных |
Входное сопротивление |
Не менее 5 МОм |
Разъем |
DHR-44 |
Диапазоны входного напряжения |
±10.0 В; ±5.0 В; ±2.5 В; ±1.0 В; ±0.5 В; ±0.25 В; ±0.1 В; ±0.05 В; |
Защита по напряжению аналоговых входов |
±15 В |
Время установления рабочего режима |
5 мин |
АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ
Тип |
последовательного приближения |
Разрешение |
12 бит |
Время преобразования |
20 мкс |
Максимальная частота дискретизации |
50 кГц |
Запуск АЦП |
от внутреннего кварцевого генератора; от внешней тактовой частоты |
Внешняя тактовая частота
|
ТТЛ-совместимый сигнал, импульсная последовательность отрицательной полярности; длительность импульсов не менее 100 нс , период не менее 20 мкс, но не более 1 мс |
ЦИФРОВОЙ ПОРТ
Число линий |
8 ввода / 8 вывода (с защёлкой) |
Уровни и пороговые значения |
ТТЛ – совместимые |
Режимы работы |
программное чтение/запись; чтение четырёх старших битов синхронно с данными АЦП |
Состав базовых функций для работы с модулем ЛА-20USB
int InitADC(void); //инициализация платы (задаем указатель, устанавливаем базовый адрес, DRQ и IRQ)
int ADCSetting (void); //настройка работы платы
int StopADC(void); //прекращение работы с платой
int DataRead(void); //чтение данных из памяти платы и вывод их на экран с одновременной записью в файл
int PrintData(void); //вывод полученных данных на экран и запись в файл
// Получить от драйвера входной диапазон (Допустимый диапазон входного напряжения в вольтах в двухполюсном режиме)
UniDriverGet(DeviceHandle, ADC_GET_RANGE_BIPOLAR, &MaxVoltage);
// Получить от драйвера амплитуду в МЗР'ах
UniDriverGet(DeviceHandle, ADC_GET_MAXAMP, &MaxMSC);
//запуск АЦП
ansGet = UniDriverStart(DeviceHandle);
// Инициализируем структуру параметров измерения
UADCParametersDMA a;
a.m_nStartOf = ADCPARAM_START_TIMER; // Запуск АЦП от таймера
a.m_nIntOf = 0; // Без прерывания
a.m_nDMABlockSize = m_nBlockSize; // Размер блока собираемых данных
a.m_nDMAMode = 1; // Режим DMA передачи (0 - Single, 1 - AutoInit)
a.m_fFreqStart = m_fQuantFreq; // Частота дискретизации, Гц
a.m_nTimerStart = 0; // Номер канала таймера для запусков АЦП
a.m_fFreqPack = 0; // Частота кадров (режим отключен)
a.m_nTimerPack = 1; // Номер канала таймера для формирования кадров
a.m_nFirstChannel = 0; // Первый канал в режиме автосканирования
a.m_nChannelNumber = m_nChan; // Сколько всего каналов сканировать
a.m_nGain = 1; // Коэффициент усиления
//Инициализация платы
temp = UniDriverInit(DeviceHandle, ADC_INIT_MODE_INIT, &a)
Лабораторная работа. Мобильные системы сбора данных с интерфейсом USB
Целью лабораторной работы является изучение методики использования средств LabWindows/CVI 8.0 API8 и проектирования на языке Visual С++ библиотек функций для работы с аппаратурой, подключенной к компьютеру с помощью интерфейса USB, сеpвисной части пpогpамм, включающей сpедства гpафического пользовательского интеpфейса, и математической обpаботки, разработки виртуальных приборов.
Теоретические основы
Мобильные системы сбора и обработки потоков данных реализуются с помощью интерфейса USB. Необходимость в таких системах возникает, например, при использовании ноутбуков, имеющих крайне ограниченные возможности подключения внешней аппаратуры.
Программное обеспечение для работы с модулями сбора данных и управления может быть создано средствами LabWindows/CVI 8.0 API с тем, чтобы программное обеспечение затем функционировало в среде LabWindows/CVI 8.0. Это не исключает последующего переноса созданной программы в другие программные системы.
Концепция LabWindows/CVI 8.0 API (NI DAQmx API) включает универсальный подход к программированию устройств сбора данных и управления, выпускаемых фирмой National Instruments, в частности, модуля USB-6008. Главные элементы этой концепции – каналы и задачи. Физический канал – это терминал или контакт, на котором генерируется или принимается аналоговый или цифровой сигнал. Один физический канал может включать более, чем один, терминал, например, дифференциальный аналоговый канал или цифровой порт, содержащий 8 линий. Каждый физический канал устройства (модуля сбора данных) имеет уникальное имя, например, Dev1/port 0/line0:7, которое соответствует соглашению NI DAQmx о именах.
Виртуальные каналы это программная категория, которая инкапсулирует физические каналы со специфической информацией канала: диапазоном, терминальной конфигурацией, шкалированием, форматирующим данные. Чтобы создать виртуальный канал, нужно воспользоваться функцией Create Channel function/VI. Можно создать виртуальный канал также, используя DAQ Assistant.
Если Вы создаете виртуальные каналы с помощью DAQ Assistant, вы можете использовать их в других задачах и ссылаться на них вне контекста задачи. Поскольку эти каналы могут использоваться в нескольких задачах, они
называются глобальными каналами. Можно выбрать глобальные каналы с помощью NI DAQmx API или DAQ Assistant и добавить их к задаче. Если Вы добавляете глобальный канал к нескольким задачами модифицируете глобальный канал с помощью DAQ Assistant, изменения будут действительны во всех задачах, использующих этот глобальный канал.
ПРИМЕР.
Содержание задачи. Требуется создать средствами LabView или LabWindows/CVI виртуальный канал NI DAQmx для измерения температуры в диапазоне от 50 до 200 градусов, используя термопару J-типа, соединенную с каналом 0 модуля М-серии, конфигурируемого как Device 1.
Решение:
Используем функцию Create AI Thermocouple Channel function/VI.
Используем Dev1/ai0 как физический канал устройства, на вход которого подается сигнал с термопары.
Определим myThermocoupleChannel как имя, назначенное виртуальному каналу.
Выберем соответствующие значения для типа термопары и диапазон входного сигнала. NI DAQmx свяжет эти атрибуты с виртуальным каналом.
Программы, созданные средствами LabWindows/CVI 8.0 API, могут быть использованы и в другой программной среде, например, Visual C++.
Для этого можно создать исполняемую программу и DLL, которые вызывают библиотеки LabWindows/CVI. LabWindows/CVI содержит DLL реального времени, которые включают все библиотеки. Исполняемые программы в среде LabWindows/CVI создаются также с использованием этих DLL. Директория EXLIB содержит импортируемые DLL-библиотеки и Startup-библиотеку; все они совместимы с внешними компиляторами.
Примечание. Никогда не используйте .lib файлы в \bin директории внешнего компилятора.
Всегда нужно включать в проект, создаваемый внешним компилятором, две библиотеки:
cvisupp.lib /* startup библиотеку */ cvirt.lib /* библиотеку импорта DLL содержащую:*/ /* User Interface Library */ /* Formatting and I/O Library */ /* RS-232 Library */ /* DDE Support Library */ /* TCP Support Library */ /* Utility Library */
Можно добавить статический библиотечный файл из \extlib в проект во внешнем компиляторе:
analysis.lib /* Analysis or Advanced Analysis Library */
Можно добавить файл DLL-библиотеки импорта из \extlib в проект во внешнем компиляторе:
gpib.lib/* GPIB/GPIB 488.2 Library*/ dataacq.lib/* Traditional NI-DAQ Library*/ visa.lib/* VISA Library*/ nivxi.lib/* VXI Library*/ ivi.lib/* IVI Library*/ nidaqmx.lib/* NI-DAQmx Library*/ cviauto.lib/* ActiveX Library*/ cvintwrk.lib/* Internet Library*/ cviddc.lib/* DIAdem Connectivity Library*/
Если Вы используете инструментальный драйвер, который относится к библиотекам GPIB/GPIB 488.2 and VXI, можно использовать две библиотеки: gpib.lib and nivxi.lib, чтобы разрешить ссылки на символы этих библиотек. Если Вы не имеете доступа к одному из этих файлов, вы можете заменить его одним из следующих файлов:
gpibstub.obj/* stub GPIB functions*/ vxistub.obj/* stub VXI functions*/
Если вы используете внешний компилятор, который требует точку входа WinMain, следующая опциональная библиотека позволяет определить только одну main в Вашей программе.
cviwmain.lib /* contains a WinMain() function that*/ /* calls main() */
Схема лабораторной установки
Рис. 63. AI0…AI7 – аналоговые входы, AO0…AO1 – аналоговые выходы, DO0…DO9 – цифровые входы/выходы.
Модули с интерфейсом USB (USB-6008/6009) обеспечивают многоканальный ввод и вывод аналоговых и цифровых сигналов: 10 цифровых программируемых линий ввода/вывода, 16 линий аналогового ввода, 2 линии аналогового вывода и один вход счетчика импульсов. Структура модуля приведена на рис. 64.
Рис. 64
Программное управление модулем USB-6008 должно включать, как минимум, следующие функции:
а) многоканального ввода аналоговых сигналов;
б) вывода аналоговых сигналов;
в) ввода/вывода цифровых сигналов;
г) управления таймером/счетчиком импульсов;
с различными способами синхронизации.
Электрические соединения модуля USB-6008 с терминальным модулем выполнены следующим образом: аналоговые входы AI0…AI7 соединены с гнездами AI0…AI7 терминального модуля, аналоговые выходы АО1...АО2 модуля USB-6008 соединены с коаксиальными разъемами АО1...АО2 терминального модуля, цифровые выходы DO0…DO7 модуля USB-6008 соединены с входами светодиодных индикаторов DO0…DO7 терминального модуля и модели объекта.
Программное обеспечение модуля USB-6008 включает библиотеку программных модулей LabWindows/CVI 8.0.
Программа работы
1. Изучить структуру и состав элементов лабораторной установки, состав и функции библиотеки программ для работы с модулем USB-6008.
Разработать программу многоканального ввода, отображения и обработки аналоговых сигналов.
Оценить экспериментально максимально достижимые характеристики скорости ввода с анализом факторов, определяющих быстродействие (характеристики компьютера, операционной системы, системы программирования, интерфейса, функциональной части модуля).
Разработать программу ввода и вывода цифровых данных.
Оценить экспериментально максимально достижимые характеристики скорости ввода и вывода цифровых данных с анализом факторов, определяющих быстродействие (характеристики компьютера, операционной системы, системы программирования, интерфейса, функциональной части модуля).
Указания к выполнению лабораторной работы
При выполнении п. 1 Программы изучить состав и функции библиотеки программ для работы с модулем USB-6008, приведенную в приложении, произвести тестирование работы модуля USB-6008 с использованием программы Test Panels. Для этого:
а) запустить MAX (Measurement and Automation Explorer) с рабочего стола Windows, затем выбрать Devices and Interfaces>>NI DAQmx Devices;
б) вызвать контестное меню щелчком правой кнопки мыши;
в) выбрать пункт Test Panels и открыть нужную панель тестирования.
Проверить с помощью панелей тестирования функционирование цифровых и аналоговых каналов ввода/вывода.
При выполнении п.1 Программы необходимо также изучить принципиальную схему и схему соединений внешних приборов (генератора стандартных сигналов и осциллогорафа), входящих в состав лабораторной установки рис. 63, обратив внимание на порядок подготовки установки к работе, порядок включения и отключения. Внимание! Несоблюдение правил включения и отключения может привести к выходу из строя компьютера!
При выполнении п.2 Программы разработать программу ввода аналоговых сигналов с выхода генератора стандартных сигналов и программу вывода цифровых данных на светодиодные индикаторы, программу снятия статической и динамической модели объекта.
Программа должна создаваться в виде проекта в среде LabWindows/CVI 8.0. При выполнении п.2 Программы разработать в среде LabWindows/CVI программу просмотра данных в графической форме.
Примеры программ в среде LabWindows/CVI 8.0 можно найти, вызвав в меню Help>>FindExamples.
Содержание отчета
Схема лабораторной установки.
Задание к работе.
Текст прикладной программы сбора данных выполненной в среде. LabWindows/CVI 8.0.
Текст программы, выполненной в среде Visual C++.
Графический экран разработанного пользовательского интерфейса.
Результаты измерения достигнутой максимальной скорости ввода/вывода цифровых и аналоговых сигналов.
Графический экран разработанного виртуальных приборов ввода/вывода цифровых и аналоговых сигналов.
Выводы.
Примечание. Тексты программ должны содержать необходимые комментарии.
Приложение . Примеры функций библиотеки
DAQmxCreateTask
Описание
Создание задачи.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxCreateTask(“ ”, &taskHandle)
Аргументы
taskHandle:
DAQmxClearTask
Описание
Выгрузка задачи.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxClearTask(taskHandle)
Аргументы
taskHandle:
Возвращаемый код
DAQmxStartTask
Описание
Запуск задачи на исполнение.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxStartTask(taskHandle)
Аргументы
taskHandle:
Возвращаемый код
DAQmxStopTask
Описание
Останов задачи.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxStopTask(taskHandle)
Аргументы
taskHandle:
Возвращаемый код
DAQmxCreateDOChan
Описание
Создание канала цифрового вывода.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxCreateDOChan(taskHandle, chan,””,DAQmx_Val_ChanForAllLines)
Аргументы
taskHandle:
chan: номер канала
DAQmx_Val_ChanForAllLines:
Возвращаемый код
Пример:
DAQmxCreateDOChan(taskHandle, chan,””,DAQmx_Val_ChanForAllLines)
DAQmxCreateDOChan(taskHandle, “Dev1/port0/line0:7” , ”” , DAQmx_Val_ChanForAllLines)
DAQmxWriteDigitalLines
Описание
Запись данных цифрового канала.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxCreateDOChan(taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL)
Аргументы
taskHandle:
chan:
DAQmx_Val_ChanForAllLines:
Возвращаемый код
Пример
DAQmxCreateDOChan(taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL)
DAQmxReadDigitalLines
Описание.
Чтение данных цифрового канала.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxReadDigitalLines (taskHandle, 1, 10.0, DAQmx_Val_GroupByChannel, data, 100, &read)
Аргументы
taskHandle:
chan:
DAQmx_Val_ChanForAllLines:
Возвращаемый код
Пример
DAQmxReadDigitalLines (taskHandle, 1, 10.0, DAQmx_Val_GroupByChannel, data, 100, &read)
DAQmxCreateAIVoltageChan
Описание
Создание задачи ввода аналогового канала.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxCreateAIVoltageChan (taskHandle, “Dev1/ai0 ” , ”” , DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL)
Аргументы
taskHandle:
chan:
DAQmx_Val_Cfg_Default:
DAQmx_Val_Cfg_Default
Возвращаемый код
Пример:
DAQmxCreateAIVoltageChan (taskHandle, “Dev1/ai0 ” , ”” , DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL)
DAQmxReadAnalogF64
Описание
Чтение данных аналогового канала.
Синтаксис.
ANSI C(LabWindows/CVI 8.0)
DAQmxReadAnalogF64 (taskHandle, 1000 , 10.0 , DAQmx_Val_GroupByChannel,data,1000,&read, NULL)
Аргументы
taskHandle:
chan:
DAQmx_Val_GroupByChannel:
Возвращаемый код
Пример:
DAQmxReadAnalogF64 (taskHandle, 1000 , 10.0 , DAQmx_Val_GroupByChannel,data,1000,&read, NULL)
Пример программы
Цифровой вывод
#include <NIDAQmx.h>
#include <cvirte.h>
#include <userint.h>
#include "second.h"
static int panelHandle;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "second.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK rQuit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK rWrite (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
TaskHandle taskHandle=0;
char chan[256];
uInt8 data[8];
/*char errBuff[2048]={'\0'};*/
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panel, PANEL_CHANNEL, chan);
GetCtrlVal (panel, PANEL_SW_0, &data[0]);
GetCtrlVal (panel, PANEL_SW_1, &data[1]);
GetCtrlVal (panel, PANEL_SW_2, &data[2]);
GetCtrlVal (panel, PANEL_SW_3, &data[3]);
GetCtrlVal (panel, PANEL_SW_4, &data[4]);
GetCtrlVal (panel, PANEL_SW_5, &data[5]);
GetCtrlVal (panel, PANEL_SW_6, &data[6]);
GetCtrlVal (panel, PANEL_SW_7, &data[7]);
DAQmxCreateTask ("", &taskHandle);
DAQmxCreateDOChan (taskHandle, chan, "", DAQmx_Val_ChanForAllLines);
DAQmxStartTask (taskHandle);
DAQmxWriteDigitalLines (taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL);
DAQmxStopTask (taskHandle);
DAQmxClearTask (taskHandle);
break;
}
return 0;
}
Пример панели интерфейса пользователя приведен на рис. 65.
Рис. 65
Примеры проектов в LabWindows/CVI 8.0
Аналоговый вывод
#include <utility.h>
#include <NIDAQmx.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "ContGen.h"
static int panelHandle;
char chan[256];
TaskHandle taskHandle=0;
int waveformType;
double min,max,frequency,rate,amp;
uInt32 sampsPerCycle;
float64 cyclesPerBuffer;
uInt32 bufferSize;
bool32 done=0;
int32 written;
int i,rr;
double data[20000];
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "ContGen.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK StartCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(panel,PANEL_CHANNEL,chan);
GetCtrlVal(panel,PANEL_MINVAL,&min);
GetCtrlVal(panel,PANEL_MAXVAL,&max);
GetCtrlVal(panel,PANEL_AMP,&);
SetCtrlAttribute(panel,PANEL_GRAPH,ATTR_XAXIS_GAIN,1.0/rate);
for (i=0;i<100;i++) { data[i]=0;}
DAQmxCreateTask("",&taskHandle); DAQmxCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL);
DAQmxStartTask(taskHandle);
for (i=0;i<100;i++){ data[i]=i/20.0;
DAQmxWriteAnalogScalarF64 (taskHandle, 1, 1.0, data[i], 0);
DeleteGraphPlot(panel,PANEL_GRAPH,-1,VAL_DELAYED_DRAW);
PlotY(panel,PANEL_GRAPH,data,100,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);
Delay(0.05);
}
SetCtrlAttribute(panel,PANEL_START,ATTR_DIMMED,1);
ProcessDrawEvents();
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
break;
}
return 0;
}
int CVICALLBACK StopCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
Пример панели интерфейса пользователя приведен на рис. 66.
Рис. 66
