
- •Создание виртуальных приборов Порядок выполнения работы часть 1:
- •Содержание отчета по 1 части работы
- •Лабораторная работа № 1
- •Порядок действий
- •Задание для самостоятельной работы
- •Содержание отчета по лабораторной работе
- •Основные конструкции языка g
- •Теоретические основы
- •Содержание отчета по лабораторной работе
- •Основы построения систем сбора данных
- •6.1. Краткое изложение теории
- •6.2. Указания к выполнению Измерение постоянного напряжения с помощью ni-daQmx
- •И змерение постоянного напряжения
- •Измерение освещенности
- •Измерение напряжения переменного тока с помощью встраиваемых устройств сбора данных
- •Вывод аналоговых сигналов
- •Генерация напряжения с помощью VI nidaQmx
- •Содержание отчета по лабораторной работе
Задание для самостоятельной работы
Дополнить последнюю созданную схему дополнительным условием завершения работы прибора (см. п. 18) по превышению значения, задаваемого с элемента управления.
Для выполнения этого задания используйте функции сравнения генерируемого числа с заданным значением из меню Comparison и логические функции задания условий установки из меню Boolean.
Для генерации достаточного количества циклов выбрать значение для сравнения не менее 0,9 от максимального генерируемого значения.
Содержание отчета по лабораторной работе
Для созданной схемы представить экранные копии собранного виртуального прибора (передней панели и блок диаграммы).
Лабораторная работа № 2
Основные конструкции языка g
Цель — получения представлений о правилах формирования стандартных циклов в программной средой LabVIEW (LV).
Теоретические основы
Несмотря на то, что данные представляются в виде потоков данных, в языке G имеются все основные конструкции языков программирования – последовательности, циклы и конструкция выбора.
Естественно, назначение этих конструкций – реализация необходимого программисту алгоритма данных. Рассмотрим элементарную программу на языке G, рис. 15.
Рис. 15. Пример программы на языке G.
Входными величинами для этой программы являются аргумент x для синуса и величина смещения, на выходе же мы получаем смещенное значение синуса x. Последовательность действий этой программы очень проста: на вход сумматора поступают значения смещения и синуса, который, в свою очередь, на свой вход получает величину x.
Получить же полную власть над ходом программы можно, если знать конструкции языка. Рассмотрим структуру Sequence – последовательность. На рис. 16 можно видеть стандартный кадр последовательности.
Рис. 16. Структура Sequence.
В данном случае последовательность имеет всего один кадр, то есть шаг исполнения. Наводя курсор мыши на обрамление кадра, и нажимая правую клавишу мыши, вызываем контекстное меню последовательности, рис. 17, в котором можно добавить кадр до или после текущего, на рисунке выделена позиция для добавления кадра после имеющегося.
Рис. 17. Контекстное меню кадра последовательности.
После активизации этого пункта контекстного меню вид последовательности изменится как показано на рис. 18.
Рис. 18. Вид последовательности с несколькими кадрами.
В верхней части обрамления кадра появились элементы для перехода к предыдущему и следующему кадру последовательности (соответственно, стрелка влево и вправо), индикатор текущего номера и общего числа кадров. Таким образом, можно задавать фиксированные поэтапные алгоритмы работы программы.
В последовательности можно (и нужно) задавать локальные переменные, рис. 19, для передачи данных от ранних кадров последующим.
Рис. 19. Определение локальных переменных в кадре.
Появляется неопределенная локальная переменная, которая, как далее показано, будет сохранять значение времени в момент выполнения первого кадра, рис. 20 (блочок, находящийся в кадре, является функцией Get Date/Time In Seconds, подробнее об этом можно посмотреть в главе 3).
Рис. 20. Передача данных в следующий кадр.
Затем, в следующем кадре заставим программу подождать некоторое время, а именно 5000 мс, путем использования функции Wait, рис. 21.
Рис. 21. Задержка во втором кадре.
В третьем по счету кадре получим также системное время, рис. 22.
Рис. 22. Получение системного времени в третьем кадре.
Теперь можно вычислить разницу времен, рис. 23, и сравнить ее со временим ожидания программы в 5 секунд.
Рис. 23. Получение времени выполнения кадров.
Чтобы можно было увидеть результат, создадим индикатор, наведя курсор на выходную часть вычитателя и вызывая контекстное меню, рис 24.
Рис. 24. Создание индикатора для отображения результата.
Индикатор появляется на передней панели, рис 25.
Рис. 25. Вид индикатора на виртуальной панели.
Следующей конструкцией является конструкция выбора Case, рис. 26.
Рис. 26. Внешний вид конструкции Case.
Она позволяет выполнить ту или иную ветку в зависимости от входной величины.
Аналогично как у последовательности, в верхней части имеются элементы для выбора ветки (стрелки влево и вправо) и индикаторы отображения текущей ветки. Слева, на обрамлении конструкции выбора, можно видеть прямоугольник с вопросом – это и есть входная переменная, в зависимости от ее значения и выбирается ветка. В состоянии, показанном на рисунке, тип данных для выбора – булев. Возможно использование и других типов данных (о них подробнее смотри в главе 5) – чисел, строк. Здесь мы задали входной управляющий элемент для выбора, рис. 27.
Рис. 27. Определение управляющего элемента.
Положим, что для входного значения «истина» будет выполняться ветка, где генерируются псевдослучайные числа, рис. 28.
Рис. 28. Определение функции для истинного значения управляющего элемента.
Обратим внимание на белый прямоугольник справа, на обрамлении ветки. Это выходная переменная конструкции выбора, а то что она белая, означает, что она не подсоединена в других ветках. Данная особенность является важной: обязательно надо осуществлять вывод данных из всех веток конструкции выбора. Для входного значения «ложь» положим вывод константы –1.0, рис. 29.
Рис. 29. Определение функции для ложного значения управляющего элемента.
Рис. 30. Готовый пример программы.
Определив индикатор, мы получаем картину передней панели, изображенную на рис. 31.
Рис. 31. Вид виртуальной панели.
Теперь, нажимая и отпуская кнопку, можно получить либо псевдослучайное число в диапазоне от 0 до 1, либо –1. Если в качестве входной величины использовать целое число, рис. 32,
Рис. 32. Замена типа входной величины.
то можно получить ветвление более чем по двум вариантам, рис. 33.
Рис. 33. Оператор Case более чем с двумя ветвями.
Рис. 34. Определение входной величины для каждой ветки.
Как можно видеть, вид заголовка конструкции выбора несколько изменился. Теперь необходимо определять и так называемую ветку «по умолчанию», которая будет вызываться в случае несовпадения входной величины. По умолчанию, будет создаваться две ветки – для 0 и 1 в качестве входных значений. Вызвав контекстное меню конструкции выбора, можно добавить ветку в варианты ветвления, рис. 35.
Рис. 35. Добавление ветки.
В языке G предусмотрено два вида циклов – цикл с параметром (For Loop), рис. 36, и цикл с постусловием (While Loop), рис. 41.
Рис. 36. Цикл For Loop.
Два основных элемента цикла – задание числа итераций (квадратик с буквой N в верхнем левом углу) и получение номера текущей итерации (квадратик с буквой i в нижнем левом углу). Определение количества итераций цикла - на рис. 37. Номера итераций, как и все индексы в LabVIEW, исчисляются с нуля.
Рис. 37. Определение количества итераций цикла.
Важной особенностью цикла с параметром является его т.н. автоиндексирование, рис. 38. Это означает, что выводя значения за пределы цикла, мы получим массив тех элементов, что мы выводили за его пределы.
Рис. 38. Автоиндексирование цикла.
Черный прямоугольник на правой кромке цикла и есть выходной вывод цикла, в его контекстном меню можно разрешить или запретить автоиндексирование. Подсоединив индикатор, рис. 39, мы сможем увидеть массив целых чисел, который в нашем случае будет представлять набор чисел от 0 до1.
Рис. 39. Вывод значений.
Как можно видеть, толщина линии, выходящей после цикла, увеличилась, рис. 40. Это отличительный признак увеличения размерности передаваемых данных. Подробнее о массивах можно узнать в главе 5.
Рис. 40. Получение массива значений.
Аналогичное автоиндексирование существует и на входе цикла с параметром, только оно будет означать индексирование входного массива и получение его n-го элемента внутри цикла.
Последняя структура языка – «узел формулы» (Formula Node), рис. 42. Он служит для вычисления значений в соответствии с формулами, записанными в соответствии с общепринятой нотацией. Отличия от остальных структур заключаются в том, что массивы структура формулы не умеет обрабатывать. Входные данные помечаются символьным обозначением, чтобы в формулах ссылаться на них.
Рис. 42. Структура Formula Node.