Лабораторная работа 1. "Изучение среды программирования

advertisement
Лабораторная работа 1.
"Изучение среды программирования
LabWindows/CVI"
1. ВВедение
Среда программирования LabWindows/CVI была разработана фирмой National
Instruments в середине 80-х годов прошлого века. В отличие от ряда широкоизвестных
средств разработки (Borland C++, Delphi, MS Visual Studio и т.д.), LabWindows/CVI
ориентирована в первую очередь на разработку программного обеспечения,
управляющего различными научными экспериментами, технологическими либо
измерительными процессами. Эта направленность и определила содержание и
функциональность данного программного продукта.
Среда LabWindows/CVI включает в себя интегрированную среду разработки (IDE)
на основе языка ANSI C, и обширную библиотеку компонентов, которая состоит из
следующих составных частей:
1. Набор компонентов для создания пользовательского интерфейса – создание и
вывод на экран панелей, вывод графиков, создание регуляторов, индикаторов,
кнопок и т.д (User Interface Library).
2. Набор библиотек для управления измерительными и управляющими
устройствами(VISA Library, VXI Library, RS-232 Library, GRIB/Grib 488.2
Library и др).
3. Средства для удаленного управления приложениями через локальную сеть или
Интернет(Network Variable Library).
4. Средства обработки полученных данных – фильтрация, математическая обработка
полученных данных, генерация сигналов различной формы (Analysis Library,
Advanced Analysis Library).
5. Стандартная библиотека ANSI C.
Также в библиотеку входят средства для использования технологий DDE, ActiveX,
различных сетевых протоколов, технологий .NET, создания многопоточных приложений и
др.
Имея набор таких средств в среде LabWindows/CVI с одной стороны можно легко
автоматизировать простые «настольные» эксперименты. С другой стороны мощь
перечисленных выше библиотек позволяет разрабатывать распределенные системы
управления, управляющие сложными научно-технологическими процессами с большим
количеством разнообразной аппаратуры.
1
2. Использование LabWindows CVI.
1. Интегрированная среда разработки (IDE).
Среда LabWindows/CVI во многом похожа на широкоизвестные интегрированные
среды разработки. На рисунке 1 приведено рабочее окно среды LabWindows/CVI.
Рисунок 1. Интерфейс среды разработки LabWindows/CVI
Как видно, главное окно состоит из следующих основных частей:
1. Строка меню, панель инструментов.
2. Окно для редактирования исходного кода программы, либо панелей интерфейса
пользователя(окон может быть несколько).
3. Дерево проекта – содержит список файлов данного проекта и позволяет управлять
файлами проекта – открывать в окне 2, удалять из проекта и т.д. При двойном
щелчке левой кнопкой мыши на файле, он открывается в окне для редактирования
справа.
4. Дерево библиотек – содержит структурированный список всех функций,
содержащихся в библиотеках LabWindows/CVI. Найдя нужную функцию, можно
получить о ней справочную информацию, или вставить вызов этой функции в
исходный код, задав необходимые аргументы.
5. Область выходных данных – может содержать информацию об отладке
программы, ошибки компиляции, исполнения, окна для наблюдения значений
переменных(Watch, Variables) а также результаты поиска в тексте программы.
2
2. Структура проекта приложения в LabWindows/CVI.
Для начала работы над программой нужно создать проект приложения. Для этого
нужно выполнить команду меню File->New->Project from Template. Далее вам будет
предложено задать тип проекта, его имя и расположение(путь) на жестком диске. Для
создания программы с пользовательским интерфейсом нужно выбрать тип проекта User
Interface Application в верхнем левом окне появившегося диалогового окна. Если выбрать
тип проекта Command-line Application, то будет создана заготовка для обычного
консольного приложения без графики и пользовательского интерфейса.Чтобы открыть
уже существующий проект нужно выполнить команду File->Open->Project(*.prj)….
Допустим мы создали проект типа User Interface Application с именем FirstProject.
Стандартный проект LabWindows/CVI обычно содержит файлы следующих
расширений:
1. .PRJ – файл созданного проекта.
2. .C , .H - файлы исходных текстов программ на языке С.
3. .UIR
- Содержит данные о созданных окнах приложения и элементах
пользовательского интерфейса на них. При выборе данного файла в дереве проекта
открывается редактор интерфейса пользователя в окне редактирования.
4. .CWS – файл содержащий информацию о временных настройках
проекта(положение и состояние окон, даты изменения файлов и т.д.)
5. .FP – файлы панелей функций для драйверов устройств (во вновь созданном
проекте отсутствуют).
После создания проекта вышеуказанным способом дерево проекта должно содержать
следующие файлы: FirstProject.c, FirstProject.uir. В файле FirstProject.uir находится
одна панель, которая является главным окном программы. В файле FirstProject.c
находится заготовка исходного текста программы – подключение нужных библиотек
(#include <>) и функция main() с некоторым исходным кодом, который необходим для
старта программы.
3. Структура программы в среде LabWindows/CVI.
Если дважды щелкнуть левой кнопкой мыши на файле FirstProject.c, его
содержимое откроется в окне редактирования. Если убрать сгенерированные средой
комментарии, у вас должно появиться рабочее окно сходное с показанным на рисунке 2.
3
Рисунок 2. Рабочее окно после создания проекта.
Рассмотрим содержимое функции main:
После входа в функцию main, происходит следующий вызов(строка 14):
nullChk (InitCVIRTE (0, argv, 0));
который необходим для инициализации библиотек LabWindows/CVI. Далее (строка 15)
происходит загрузка панели, находящейся в файле FirstProject.uir в память:
errChk(panelHandle=LoadPanel(0,"FirstProject.uir",PANEL));
и отображение этой самой панели на рабочем столе:
errChk (DisplayPanel (panelHandle));
После этого, вызовом следующей функции:
errChk (RunUserInterface ());
Программа переходит в режим ожидания и обработки внешних событий (нажатие кнопок,
обновление значений, и т.д.). Выход их этой функции происходит только после того, как
пользователь захочет выйти из программы. Тогда программа перейдет к следующей
строке:
DiscardPanel (panelHandle);
После чего выполнение программы будет завершено. Данный порядок вызова функций
является необходимым – нельзя удалять, либо менять местами данные конструкции.
Исходя из вышеизложенного порядка начального запуска главного окна программы,
можно выделить несколько областей в функции main(), для добавления своего кода:
• Область перед инициализацией библиотек (строки 11-13). Можно использовать для
начальной инициализации переменных, массивов, ввода данных с клавиатуры,
чтения из файлов.
4
•
Область после загрузки главного окна в память (строки 16-17). Здесь можно
задавать свойства элементов управления, которые расположены на главном окне,
масштабы графиков, начальные положения регуляторов, а также выводить в них
данные(нарисовать график, вывести числовое значение на экран).
• Область перед завершением программы (после выполнения строки
DiscardPanel (panelHandle);). Можно использовать для сохранения данных на
диск, закрытия открытых файлов, отключения от устройств.
4. Разработка программ в среде LabWindows/CVI.
Процесс разработки приложения в LabWindows/CVI можно разделить на 2 части:
1. Редактирование окон пользовательских интерфейсов, добавление элементов
управления, редактирование их свойств.
2. Написание исходного кода программы.
Редактирование пользовательского интерфейса начинается с главной панели, которая
открывается, если дважды щелкнуть мышкой на файле .uir
в дереве проекта.
Открывшаяся панель имеет набор свойств, доступ к которым можно получить, если
дважды на ней щелкнуть левой кнопкой мыши. При этом откроется окно свойств данного
элемента (см. рис.3).
Каждый элемент управления имеет индивидуальный набор свойств, который
отображается в аналогичном окне, но есть свойства присущие всем элементам
управления. Это, прежде всего уникальное имя элемента (отображается в поле с
названием Constant Name) и имя функции-обработчика событий от данного элемента
(поле CallBack Function).
Рисунок 3. Окно свойств элемента
Для того чтобы добавить элемент управления на данную панель, нужно щелкнуть
правой кнопкой мыши на свободном месте панели. При этом появится список элементов
управления сгруппированных по типам (см.рис. 4), зайдя в которые можно выбрать
интересующий элемент. Ниже приводятся наиболее часто используемые типы элементов
управления из всего списка:
• Numeric – элементы управления для ввода-вывода числовых данных.
• Command Button - обычная кнопка типа «OK».
• Toggle Button – кнопки, имеющие 2 состояния (нажатое и ненажатое).
• Led – «лампочки» отображающие 2 состояния (on и off).
5
•
•
Graph – элементы для построения графиков.
Timer - элемент для обеспечения таймирования программы – периодического
выполнения некоторых действий.
Список элементов управления, которые следует использоваться в этом практикуме, а
также их свойства приведены в приложении 1.
Рисунок 4. Выбор элемента управления из списка.
После появления элемента можно аналогичным способом открыть окно его свойств.
Также можно открыть контекстное меню данного элемента, если щелкнуть на нем правой
кнопкой мыши. При этом появится меню, аналогичное изображенному на рисунке 5.
Доступные команды меню имеют следующее назначение:
1. Generate Control Callback – создать функцию-обработчик элемента в тексте
программы с именем, заданным в окне свойств.
2. View Control Callback - перейти к функции обработчику в тексте программы.
3. Control Help - вызов справки по данному элементу управления.
4. Edit Control - редактировать свойства элемента. При этом будет вызвано окно
свойств элемента(см. рис. 3).
Рисунок 5. Вызов контекстного меню элемента.
6
За исключением необходимой начальной инициализации, описанной в конце
пункта 3, написание исходного текста программы в LabWindows/CVI обычно сводится к
созданию и заполнению кодом функций-обработчиков событий от элементов
пользовательского интерфейса( т.н. Callback-функций).
Как и любое Windows-приложение, программа, разработанная в LabWindows/CVI,
управляется с помощью внешних событий (нажатие кнопкой мыши, нажатие клавиши,
изменение содержимого текстового поля и т.д.). Чтобы обеспечить обработку этих
событий, в среде LabWindows/CVI предусмотрен механизм Callback-функций – функций,
которые выполняются в ответ на событие, пришедшее от системы соответствующему
элементу управления. Для каждого элемента управления обычно создается отдельная
Callback-функция. Имя этой функции-обработчика задается в панели свойств (см. выше), а
сама функция в тексте программы создается по команде контекстного меню Generate
Control Callback. Поскольку каждый элемент может получать разные события, то обычно
в Callback-функции реализуют операцию выбора исполняемого кода в зависимости от
пришедшего события с помощью операторов C switch-case либо if-else. На рисунке 6
представлен пример одной из Callback-функций.
Функция с именем OKButtonCB является Callback-функцией кнопки OK, и имеет
следующие параметры:
• panel – идентификатор панели. Переменная, которая возвращается после
выполнения функции LoadPanel (см.выше).
• control – имя элемента управления.
• event – идентификатор события.
Остальные аргументы являются дополнительными данными, которые можно передать в
callback-функцию, и зависят от типа элемента управления. Как видно, основным
параметром, определяющим ход выполнения callback-функции, является параметр event.
С помощью механизма выбора(switch) по значению этого параметра, приведенная ниже
callback-функция будет реагировать на следующие события:
1. EVENT_COMMIT - общее событие, которое возникает, если элемент
выполняет основное, требуемое от него действие. В случае кнопки OK это
просто нажатие на кнопку.
2. EVENT_LEFT_CLICK – событие, возникающее при нажатии левой кнопки
мыши.
3. EVENT_RIGHT_CLICK - событие, возникающее при нажатии правой
кнопки мыши.
4. EVENT_GOT_FOCUS – данный элемент управления стал активным.
7
Рисунок 6. Callback-функция кнопки OK
Кроме выше перечисленных вам, возможно, понадобятся следующие события:
EVENT_CLOSE – событие возникающее, если пользователь хочет закрыть панель.
EVENT_TIMER_TICK – событие, возникающее при срабатывании таймера(см.
Приложение 1).
• EVENT_PANEL_SIZE – появляется при изменении размеров окна.
•
•
Типы событий, которые будут сразу включены в сallback-функцию можно настроить. Для
этого нужно, находясь в окне редактирования пользовательского интерфейса, выполнить
команду меню Code->Preferences->Default Panel Events для элементов управления, либо
Code->Preferences->Default Panel Events для панелей, и выбрать нужные события из
списка, проставив напротив них галочки.
Запуск на выполнение программы осуществляется командой Run->Debug
FileName.exe (Shift+F5). Также в меню Run находятся средства отладки приложения,
приведенные в приложении 2.
5. Справочная система.
В среде LabWindows/CVI к услугам разработчиков предоставляется обширная и
удобная в использовании справочная система. Вызвать ее можно следующими способами:
1. Из текста программы, если навести курсор на вызов интересующей функции и
нажать F1. При этом вызовется справочная система, открытая на справочной
странице выбранной вами функции.
2. Выполнить команду меню Help->Contents.
3. Выбрать команду Control Help в контекстном меню элемента управления.
Сама справочная система организованна древовидным способом. Структура справки
находится во вкладке Содержание. Из всего каталога справочной информации, наиболее
полезной является вкладка Library Reference, в которой представлена вся библиотека
функций LabWindows/CVI, сгруппированная по разделам. Примерный состав библиотеки
приводился во введении. Группировка функций по области применения позволяет искать
8
подходящую функцию, не зная всего содержания библиотеки. Это может быть очень
полезным, например, для математической обработки полученных данных.
3. Практическое задание.
1. Написать программу, которая бы вычисляла дискриминант и корни квадратного
уравнения, а также координаты вершины параболы. Коэффициенты уравнения (A,B,C)
программа должна предлагать ввести при старте программы. Для этого удобно
пользоваться функциями printf, scanf. Само вычисление корней должно выполняться
внутри отдельной функции, которая должна иметь следующий прототип:
void CalculateRoots(float A,float B,float C,float *pD,
float *pX1,float *pX2);
Для выполнения этого задания нужно создать проект типа Command-line
Application.
2. Используя данную заготовку-проект, выведите график синусоиды с заданными
амплитудой и частотой. Для этого с помощью редактора пользовательских интерфейсов
(дважды щелкнуть на файле *.uir) создайте на главной панели элемент управления
«График» (Graph->Graph). Далее нужно создать функцию(например DrawGraph() ),
которая задавала бы фиксированные масштабы по обоим осям и выводила массив
вычисленных значений на график. После этого нужно вставить вызов этой функции в
функцию main() после вызова функции CreateSignal(). График должен иметь следующие
оси: по Х – время (T), диапазон - 0…1000.0 ms(милисекунды), по Y – напряжение(U),
диапазон -15.0…15.0 V(вольты).
3. Сделать так, чтобы график обновлялся в реальном времени с частотой 2 Гц. Для
этого создать элемент управления «Таймер» (Timer->Timer). Также добавить поля для
ввода значений амплитуды (в вольтах) и частоты (в герцах). Для этого можно
использовать элементы управления Numeric->Numeric. График синусоиды должен
непрерывно перерисовываться с вновь веденными значениями.
4. Добавить шум к синусоиде. Для этого можно использовать функцию
Random(Rmin,Rmax). Добавить регулятор уровня шума (элемент Numeric->Knob).
5. Добавить команду сохранения последнего сигнала в файл. Для этого нужно
создать элемент «кнопка» (например Command Button->Square Command Button), и в
её сallback-функцию вставить сохранение массива сигнала (функции OpenFile, WriteFile,
CloseFile). Имя файла может быть постоянным.
Дополнительно:
6. Добавить вычисление и вывод на экран спектра сигнала. Для этого нужно
создать в главном окне ещё один элемент «График». Для вычисления спектра сигнала
удобнее пользоваться функциями быстрого преобразования Фурье FFT(……)
(см.приложение 1). Для удобства можно создать еще одну функцию, в которую вынести
конфигурацию и очистку графика спектра, вычисление, сам вывод спектра в окно
графика, и вставить ее вызов в сallback-функцию таймера для ее непрерывного
исполнения.
9
Приложение 1. Основные элементы управления и функции для
работы с ними.
А. Наиболее часто используемые элементы управления
пользовательского интерфейса.
1. Цифровое поле
2. Термометр
3. Слайдеры
4. Ручка
5. Стрелка
6. Светодиод
7.Кнопка
8. Кнопкасостояние
9.График
Служит для ввода-вывода числовых
значений с клавиатуры.
Расположение:
Numeric->
Служит для визуального отображения
величины, хотя можно использовать и
для ввода. Расположение:
Numeric->
Аналогично предыдущему. Можно
использовать как для ввода, так и для
отображения значений(в зависимости
от значения поля Control Mode).
Присутствуют как в вертикальном, так
и в горизонтальном варианте.
Расположение:
Numeric->
Служит для визуальной регулировки
вводимого пользователем значения.
Расположение:
Numeric->
Служит для визуального отображения
выводимого программой значения.
Расположение:
Numeric->
Свойства:
1.Minumum, Maximum– минимальное,
максимальное возможное значение.
2.Default Value – начальное значение.
3.Data Type – тип вводимых данных.
4.Control Mode – режим ввода-вывода
элемента. Возможные значения:
Indicator – возможет только вывод значений
из программы.
Hot,Normal,Validate – возможен вывод и
ввод значений пользователем.
5.Range Checking – Настройка режима
проверки введенного значения на предмет
попадания в допустимый
диапазон(Minimum…Maximum).
Возможные значения:
Coerce – в случае непопадания в диапазон,
введенное значение уменьшается до одного
из пределов(какой ближе)
Notify - в случае непопадания в диапазон,
программа выдает предупреждающее
сообщение.
Ignore – режим проверки значений
отключен.
6.Кнопка Show/Hide Parts – настройка
внешнего вида элемента (наличие стрелок,
шкал, градуировочных значений, и т.д.)
7.Кнопка Format and Presicion - формат
вывода, точность(число знаков после
запятой).
Служит для отображения двоичного
состояния(On/Off) в виде цвета
лампочки (красный/зеленый).
Расположение: LED->
Стандартная кнопка. При нажатии
срабатывает функция-обработчик.
Расположение – Command Button->
Служит для задания двоичного
состояния. Имеет 2 состояния нажатое и ненажатое. Расположение –
Toggle Button->
Свойства:
1. OnText/OffText – надписи на кнопке,
соответствующие состояниям On и Off.
2. Initial State – Состояние кнопки при
запуске программы.
Служит для отображения массивов,
либо единичных данных в виде
графиков зависимости одной
координаты от другой. Графики
можно добавлять, удалять, менять
масштаб, добавлять описание, и т.д.
Расположение – Graph->
Свойства:
1. Data Mode – задает, сохранять данные
графика в памяти после прорисовки или нет.
Retain – сохранять.
Discard - не сохранять.
2. Кнопки Top/Bottom/Left/Right X/Y-axis –
задают свойства осей со всех 4-х сторон
графика. Можно менять диапазон,
плотность сетки, название шкалы и т.д.
10
Основные Параметры:
AutoScale – автоматический выбор
диапазона. При выключении можно
задавать диапазон в полях Minimum и
Maximum.
Show Grid/Show Minor Grid - отображать
или нет основную и дополнительную сетку
данной шкалы на графике.
AutoDivisions – автоматический выбор
количества делений на шкале. При
выключении число делении можно задать в
поле Divisions.
Log Scale - включает логарифмическую
шкалу.
Axis Names – задается имя шкалы.
10. Осциллограмма
11.Таймер
Подходит для отображения данных в
реальном времени. Данные
добавляются на график слева направо.
Можно отображать несколько величин
одновременно.
Расположение – Graph->
Свойства:
1.Points per screen – число точек на графике
по оси X.
2.Scroll Mode - Задает режим перерисовки
осциллограммы, если она достигла правого
края графической области. Значения:
Sweep – График начинает рисоваться слева,
пририсовывая старые данные.
Continuous – График начинает как целое,
сдвигаться влево, новые данные при этом
появляются справа.
Block – График полностью удаляется, и
начинает строиться заново.
3.Кнопка Traces – задает макс.количество
графиков, их цвет, тип и толщину линии.
Невидимый во время выполнения
программы элемент. Генерирует
событие EVENT_TIMER_TICK с
заданным периодом, что приводит к
периодическому выполнению
функции-обработчика. Расположение
– Timer->
Свойства:
1.Interval(Seconds) – период между
срабатыванием таймера(секунды).
Все свойства, приведенные для одного типа, или группы элементов управления,
сохраняют свое значение и для других элементов, если в них присутствуют свойства с
теми же именами.
Б. Функции для работы с элементами управления LabWindows/CVI.
Имя элемента, входящее в большинство нижеперечисленных функций, (параметр
controlID) формируется следующим образом:
controlID = PanelName_ControlName.
Элементы для цифрового ввода + Общие функции
SetCtrlVal ( int panelHandle, int
controlID, value );
Устанавливает значение в данный
элемент, либо считывает из него
значение.
Удобно применять для элементов
цифрового ввода-вывода –
11
Параметры:
1. panelHandle – идентификатор
панели.
2. controlID – идентификатор
данного элемента управления.
3. value – переменная, для
GetCtrlVal ( int panelHandle, int
controlID, *value );
SetCtrlAttribute (int panelHandle,
int controlID, int controlAttribute,
attributeValue);
Слайдеры, ручки, индикаторы,
поля ввода(см. таблицу выше)
Данные функции не применимы
к графическим элементам
(График, Осцилограмма)
Устанавливает значение
конкретного атрибута (параметра)
данного элемента управления.
Список атрибутов элементов, и
возможные константы-значения
элемента данного типа нужно
смотреть в справочном
руководстве.
чтения/записи.
Параметры:
1.controlAttribute – название
атрибута, значение которого
хочется поменять.
2. attributeValue – новое значение
данного атрибута.
Элементы графического вывода (График, Осциллограмма)
SetAxisScalingMode (int
panelHandle, int controlID, int axis,
int axisScaling, double min, double
max);
Настраивает режим, диапазон
шкал со всех четырех сторон
графика. Каждая шкала имеет
название:
VAL_BOTTOM_XAXIS,
VAL_TOP_XAXIS,
VAL_LEFT_YAXIS,
VAL_RIGHT_YAXIS.
PlotY (int panelHandle, int
controlID, void *yArray, int
numberOfPoints, int yDataType, int
plotStyle, int pointStyle, int
lineStyle, int pointFrequency, int
color);
PlotX (int panelHandle, int
controlID, void *xArray, int
numberOfPoints, int xDataType, int
plotStyle, int pointStyle, int
lineStyle, int pointFrequency, int
color);
PlotXY (int panelHandle, int
controlID, void *xArray, void
*yArray, int numberOfPoints, int
xDataType, int yDataType, int
plotStyle, int pointStyle, int
lineStyle, int pointFrequency, int
color);
Рисует график массива
переменных по Y, в зависимости
от индекса массива, откладывая
его по оси X.
Только для элемента Graph.
PlotPoint(int panelHandle, int
controlID, double xCoordinate,
Аналогично PlotY, только
значения осей X и Y меняются
местами.
Только для элемента Graph.
Строит график двух массивов
переменных Y(X): X-координата –
элемент из первого
массива(xArray), Y-координата –
элемент из второго
массива(yArray)
Ставит точку на график.
12
Параметры:
1. axis - название оси, для
которой производится настройка.
2. axisScaling – способ выбора
диапазона:
VAL_MANUAL – с помощью
переменных min,max.
VAL_AUTOSCALE –
автоматический выбор шкалы в
зависимости от значений
переменных, загружаемых в
график.
VAL_LOCK – загружает
заданные изначально значения
диапазона и запрещает их
изменять в дальнейшем.
3. min,max – значения диапазона
для данной шкалы.
Параметры:
1. yArray,xArray - указатель на
массив данных для отображения.
2. numberOfPoints – число точек
для графика. Может быть меньше,
чем размерность массива.
3. yDataType – тип данных в
массиве.
4. plotStyle – тип графика (линии,
точки, столбики,..)
5. pointStyle – тип точки, если
выбрано рисование точками.
6. lineStyle – тип линии графика
(сплошная, прерывистая…)
7. pointFrequency – частота
рисования точек.
8. color – цвет линии графика.
Большинство этих параметров
могут принимать фиксированный
набор значений(констант),
которые приведены в справочном
руководстве к данной функции.
Возвращаемое значение:
int plotHandle - идентификатор
построенного графика.
Параметры:
1. xCoordinate, yCoordinate –
double yCoordinate, int pointStyle,
int color);
PlotLine(int panelHandle, int
controlID, double x1, double y1,
double x2, double y2, int color);
DeleteGraphPlot(int panelHandle,
int controlID, int plotHandle, int
refresh);
Рисует линию с заданными
координатами.
Удаляет график из графической
области
RefreshGraph(int panelHandle, int
controlID);
PlotStripChart (int panelHandle,
int controlID, void *yArray, int
numberOfPoints, int startingIndex,
int skipCount, int yDataType);
Перерисовывает всю графическую
область.
Добавляет(дорисовывает) массив
точек к каждому графику в
осциллограмме.
Удобно использовать, если
осциллограмма содержит
несколько графиков. В этом
случае можно создать массив
размерностью равной числу
графиков, проинициализировать
его новыми значениями, и
передать его в эту функцию.
PlotStripChartPoint(int
panelHandle, int controlID, double
y);
Добавляет точку к графику на
осциллограмме. Можно
использовать ТОЛЬКО если
осциллограмма содержит один
график.
координаты точки.
2. pointStyle, color – см. PlotY.
Параметры:
1. x1, y1, x2, y2 – координаты
концов линии.
Параметры:
1. plotHandle - идентификатор
графика, либо -1 – удалить все
графики, точки, линии.
2.refresh – задает, когда
перерисовывать графическую
область. Значения:
VAL_DELAYED_DRAW – после
какого-либо действия с
графической областью
(добавления нового графика,
изменение масштаба…)
VAL_IMMEDIATE_DRAW –
немедленная перерисовка.
VAL_NO_DRAW – не делать
перерисовку.
Параметры:
1. yArray – массив данных для
вывода на график.
2. numberOfPoints – число точек
для графика. Может быть меньше,
чем размерность массива.
3. startingIndex – индекс массива
данных, с которого нужно
начинать брать значения. Должно
быть кратно числу графиков на
осциллограмме. Чаще всего равно
0.
4. skipCount – число элементов
массива, которое нужно
пропускать после того, как такое
же число элементов было
добавлено на график.
5. yDataType – тип данных в
массиве.
Параметры:
1. y – значение, которое нужно
добавить.
Дополнительные функции
Random(double minimum, double
maximum);
Генерирует случайное число в
заданном диапазоне.
FFT(double arrayXReal[], double
arrayXImg[], int
numberOfElements);
Выполняет быстрое
преобразование Фурье от массива
комплексных чисел.
13
Параметры:
minimum, maximum – диапазон, в
пределах которого будет
сгенерированно случайное число.
Параметры:
1. arrayXReal, arrayXImg,
массивы реальных и мнимых
частей массива комплексных
чисел. После выполнения
функции массивы содержат
соответственно реальные и
мнимые части получившегося
результата.
2. numberOfElements – число
KeyHit();
GetKey();
Возвращает TRUE, если была
нажата клавиша на клавиатуре
Ожидает нажатия на клавиши
клавиатуре и затем возвращает
код нажатой клавиши.
элементов в массиве.
Не имеет параметров.
Не имеет параметров.
Приложение 2. Интегрированная среда LabWindows/CVI –
средства отладки приложений.
Очень часто в процессе разработки программного обеспечения возникает
необходимость проследить, как выполняется программа буквально «по шагам»,
посмотреть как меняются значения переменных, и т.д. Среда программирования
LabWindows/CVI предлагает целый набор средств для отладки приложения во время
исполнения. Условно эти средства можно разделить на 2 группы:
1. Инструменты для управления ходом программы:
• точки останова(Breakpoints) – места в тексте программы, на которых
прекращается её исполнение для дальнейшего анализа или пошагового
выполнения.
• пошаговое исполнение(Step Over, Step Into) – возможность исполнять
инструкции программы последовательно, заходя внутрь вызываемых функции,
либо выполнять их, переходя к следующей строке. Также есть возможность
наоборот выйти из функции, выполнив ее до конца(Finish Function).
• Возможность выполнить программу до любого места (положения курсора) и
остановиться(Go to Cursor), либо просто продолжить выполнение программы
до следующей точки останова либо до конца(Continue).
2. Инструменты для наблюдения и изменения значений переменных и целых
выражений в тексте программы. Сюда входят:
• Окно для наблюдения и изменения всех значений локальных и глобальных
переменных программы(Variables).
• Окно для наблюдения и изменения отдельных переменных, либо целых
выражений из текста программы(Watch).
Все инструменты 1-й группы находятся в меню Run. Сюда входят следующие команды:
• Toggle BreakPoints ( F9 ) - установить либо снять(если уже установлена) точку
разрыва выполнения программы.
• Continue ( F5 ) – продолжить выполнение программы.
• Go to Cursor ( F7 ) – продолжить выполнение программы о остановленного места,
до положения курсора в окне редактирования.
• Step Over ( F10 ) – выполнить следующее выражение в тексте программы.
Выполняемая конструкция при этом будет выделяться красным цветом.
• Step Into ( F8 ) – Если текущая конструкция в программе является вызовом
функции, то зайти в тело этой функции.
• Finish Function ( Ctrl+F10 ) – выполнить до конца функцию, на которой в данный
момент остановлена программа, выйти из неё и остановиться.
Почти все эти команды становятся доступными только в режиме отладки программы
(кроме самой первой). Следовательно, чтобы ими воспользоваться, нужно поставить хотя
бы одну точку останова(BreakPoint) (клавиша F9) в тексте программы и запустить её на
выполнение. После остановки программы можно будет воспользоваться всеми
вышеперечисленными командами.
14
Инструменты 2-й группы (окна Variables и Watch) вызываются командами меню Window
(соответственно Variables и Watch). Окна появляются в нижней части рабочего окна
среды LabWindows/CVI.
• Окно Variables содержит значения всех переменных программы, сгруппированных
по функциям. Обычно это окно разделено на 2 вертикальные части(см.рисунок 7):
Окно Stack Trace которое содержит список функций, вызванных в данный момент
справа, и непосредственно окно переменных слева. Окно переменных в свою
очередь разделено на две горизонтальных области: верхняя отображает глобальные
и статические переменные программы, нижняя - локальные переменные функции,
активной в данный момент. При выборе другой функции в окне Stack Trace,
содержимое нижней части меняется – отображаются локальные переменные
выбранной функции. Обе горизонтальные части окна переменных имеют 3 колонки
: Name (имя переменной), Value(её значение), Type(тип). По правому щелчку
мыши на переменной появляется контекстное меню, с помощью которого, кроме
всего прочего можно изменить её значение (команда Edit Value контекстного
меню переменной).
Рисунок 7. Окно Variables.
Окно Watch во многом аналогично окну Variables, за исключением того, что в
него нужно добавлять переменные вручную. Также в это окно можно добавлять
выражения как из текста программы, так и создавать свои выражения с
использованием программных переменных. В столбце Values отобразится
результат. Для добавления переменной либо выражения в это окно, нужно
выделить текст переменной либо выражения (без символа “;” в конце), далее
щелкнуть правой кнопкой мыши на выделенном тексте и выбрать команду «Add
Watch Expression». Также можно вызвать это же меню, щелкнув на свободное
место окна Watch, и вписать текст переменной/выражения в поле
Variable/Expression.
Следует отметить, что переменные в окне Watch останутся там даже после того, как
вы закроете это окно, и будут выводиться при следующем запуске отладки программы.
Также нужно иметь ввиду, что вывод значений переменных в это окно может сильно
замедлить выполнение программы, если например, в это окно добавлены локальные
переменные часто вызываемых функций. Для удаления переменных из окна Watch нужно
выделить соответствующую строку в окне Watch и нажать Delete на клавиатуре.
•
15
Литература
1. Б.В. Керниган, Д.М. Ричи. Язык С.
2. National Instruments LabWindows/CVI Help.
16
Файл:
Лаб 1Text.doc
Каталог:
D:\FELControl\ТСАНИ 2009\LAB 1
Шаблон:
C:\Documents and Settings\fel\Application
Data\Microsoft\Шаблоны\Normal.dot
Заголовок:
Содержание:
Автор:
SSEREDN
Ключевые слова:
Заметки:
Дата создания:
12.12.2008 11:38:00
Число сохранений: 148
Дата сохранения:
26.08.2009 17:23:00
Сохранил:
SSEREDN
Полное время правки:
3 395 мин.
Дата печати:
28.08.2009 10:04:00
При последней печати
страниц:
16
слов:
4 095 (прибл.)
знаков:
28 256 (прибл.)
Download