методичка по созданию приборов. 1_создание_виртуальных_приборов. Программирование устройства сбора
Скачать 3.99 Mb.
|
4.2.5. Фигуры Лиссажу для сигналов разной частоты – автоматическая подача сигнала Reset на виртуальные генераторы Создайте копию предыдущего проекта – сохраните ее с именем “Лабораторная №2 Задание 4_2_5.vi”. Удалите со схемы компонент OK Button. Вместо сигнала с кнопки OK Button подайте на входы Reset виртуальных генераторов сигнал True Constant из паллеты Boolean. В результате после каждого срабатывания таймера будет появляться значение True на входе Reset, и будет устанавливаться новое значение начальной фазы генераторов, соответствующее новым цифровым значениям на их входах. 64 Наблюдать изменение фазы с помощью компонента Numeric может быть неудобно, так как он не обеспечивает плавной прокрутки в необходимом диапазоне значений. Для того чтобы плавно менять фазу в необходимом диапазоне значений, можно перейти от компонента Numeric к компоненту Pointer Slide. В LabView имеется очень удобная возможность замены одного элемента управления (Control) на другой без обрыва виртуальных проводов, подключенных к элементу управления. Перейдите в окно лицевой панели, щелкните правой кнопкой мыши по компоненту Numeric, задающему фазу сигнала первого генератора, и выберите пункт меню Replace. В появившемся окне зайдите в раздел Num Ctrls, и выберите компонент Pointer Slide (ползунок с указателем) – и компонент Numeric будет заменен компонентом Pointer Slide как на лицевой панели, так и на блок-схеме. Задайте параметры ползунка так, чтобы фазу можно было менять в пределах от 0 до 360. Проверьте работу программы, демонстрируя, как меняются фигуры Лиссажу при перемещении движка ползунка, задающего фазу. Сохраните проект. Задание 4 .3. Демонстрация на экране виртуального осциллографа результата сложения двух гармонических сигналов 4.3.1. Сложение гармонических колебаний одной частоты, но с разной амплитудой и фазой Сделайте копию проекта 4_2_2. Удалите компонент XY Graph, и в качестве цифрового осциллографа используйте компонент Waveform Graph. Подайте на его вход сумму сигналов с выходов двух генераторов гармонических сигналов, использовавшихся в прошлых заданиях. Добавьте на лицевую панель еще два компонента Pointer Slide и используйте их для регулировки амплитуды сигналов на выходе генераторов. Задайте частоту генерируемых первого и второго сигналов 50 Гц. 65 Задайте в первом и втором генераторах частоту дискретизации (Samples per second) равной 1000 точек в секунду (значению по умолчанию). Задайте разумным образом максимальное значение шкал ползунковых регуляторов и фиксированное значение границ графика по оси Y, а по оси времени оставьте автоматическое выставление масштаба. Запустите программу. Проверьте, какой формы сигнал получается при сложении двух гармонических сигналов одинаковой частоты. К чему приводит увеличение сдвига фазы первого генератора? Почему? Как повлияет на результирующий сигнал изменение амплитуды сигнала с первого генератора? Второго генератора? Сохраните проект. 4.3.2. Проблема дискретности сигнала. Работа с графиками Сделайте копию предыдущего проекта. Увеличьте частоту сигналов с генераторов до 100 Гц. Форма сигнала на экране цифрового осциллографа станет не очень похожей на синусоиду, но выбранный автоматически масштаб по оси времени будет неудобным. Сменить масштаб можно без остановки программы. Для этого щелкните правой кнопкой мыши в любом месте компонента и уберите галочку напротив свойства AutoScale X (автоматическое масштабирование по оси X). После этого можно редактировать минимальное и максимальное значения шкалы – прямо в области шкалы. При заданных условиях по оси времени это были 0 и 0,099. Минимальное значение менять не надо, а максимальное следует сменить на 0,02. Замечание: режимы AutoScale X и AutoScale Y можно включать и выключать в любое удобное пользователю время. При включении режима автоматического выбора масштаба происходит растягивание графика на весь экран. Если после этого выключить данный режим, установленный масштаб сохранится. Так что часто бывает удобно включить режим AutoScale по нужной оси и сразу выключить. После сделанного изменения при просмотре графика станет очевидно, что сигнал не является синусоидальным (рис.2.10). Однако причина этого исходя 66 из формы графика неочевидна – установлена форма показа графика по умолчанию, при этом точки графика соединены отрезками прямых, а сами точки не показываются. Щелкните мышью в маленьком окошке, находящимся над правым верхним углом основного окна графика (около надписи Sine), и выберите в появившемся меню пункт Point Style (рис.2.10). Рис.2.10. Задание параметров рисования графика. По умолчанию выбран режим, в котором точки не показываются (символ, обведенный рамкой). Выберите любой вариант формы точки из первого или второго ряда, чтобы она была хорошо заметна. После этого точки сигнала, по которым строится график, будут хорошо видны. И становится понятным, что отличие формы сигнала от синусоидальной связано с дискретностью сигнала – точки идут не непрерывно, ставятся через равные промежутки времени, соответствующие частоте дискретизации генератора. Установите нулевую амплитуду второго сигнала и единичную – у первого сигнала. Сдвиг фазы сигнала установите равным нулю. 67 Проверьте, как будет выглядеть график при частоте сигнала 250 Гц. Через какую часть периода сигнала ставится каждая точка? Какое количество точек генерируемого сигнала приходится на один период синусоиды? Будет ли меняться расстояние между точками по оси времени при изменении частоты или фазы сигнала? Задайте нулевой сдвиг фазы сигнала. Почему при частоте сигнала 250 Гц форма сигнала кажется пилообразной? Если ответ на вопрос не ясен, нарисуйте в тетради график синусоиды, и поставьте на нем через каждые четверть периода точки, начиная с начала координат. А потом соедините соседние точки отрезками прямых. Почему при частоте сигнала 250 Гц при изменении фазы сигнала на графике кажется, что амплитуда сигнала меняется? Если ответ на вопрос не ясен, нарисуйте в тетради график синусоиды, и поставьте на нем через каждые четверть периода точки, начиная с точки с некоторым сдвигом по фазе от начала координат. А потом соедините соседние точки отрезками прямых. Задайте частоту сигнала с первого генератора 500 Гц и сдвиг фазы, равный нулю. Увеличьте сдвиг фазы. Объясните результат. Задайте частоту сигнала с первого генератора 50 Гц и сдвиг фазы, равный нулю. Увеличьте сдвиг фазы. Объясните результат. Что произойдет, если увеличить частоту выше 500 Гц? Остановите программу и задайте первому генератору частоту дискретизации (Samples per second) 10000 точек в секунду. Попробуйте запустить программу. Что произойдет? Почему? Задайте второму генератору также частоту дискретизации 10000 точек в секунду и запустите программу. Объясните результат. До какой максимальной частоты сигнала можно проводить измерения при данной частоте дискретизации (10 КГц)? Можно ли установить частоту дискретизации генераторов 1 ГГц (1E9)? Если да, то как будет выглядеть график сигнала с частотой 1E8 Гц? 68 Сохраните проект. 4.3.3. Сложение гармонических колебаний разной частоты. Биения Сделайте копию предыдущего проекта. Подберите параметры первого сигнала так, чтобы на экране было видно 30- 40 периодов. Для такого режима показ точек сигнала лучше убрать. Установите амплитуду второго сигнала примерно равной амплитуде первого и подберите частоту второго сигнала так, чтобы при сложении сигналов продемонстрировать биения. Что произойдет, если менять фазу одного из сигналов? Уменьшать амплитуду одного из сигналов? Если частоты складываемых сигналов близки, итоговый сигнал может считаться гармоническим сигналом с амплитудной модуляцией. По какому закону, и с какой частотой меняется амплитуда итогового сигнала? Сохраните проект. Задание 4.4. Компиляция программы в исполняемый exe-файл Выберите пункт меню Tools/Build Application (EXE) from VI, и подтвердите или введите необходимую информацию в появляющихся диалоговых окнах. – Следует нажать кнопку Continue, затем кнопку Build. После компиляции (Build) программы появляется диалоговое окно, в котором имеется кнопка Explore (Исследовать). Нажатием на кнопку Explore можно открыть папку с exe-файлом и запустить этот файл. Задание 4.5. Измерение эффективной величины и амплитуды сигналов разной формы Создайте новый проект и добавьте в проект виртуальный генератор с необходимыми элементами регулировки, а также добавьте на блок-схему компонент Express/ Signal Analysis/ Amplitude and Level Measurements (измерение амплитуды и уровня сигнала). Он выдает на выход RMS( Root Mean Square) среднеквадратичное значение входного сигнала (то есть эффективное значение по постоянному току), если в свойствах установлен флажок RMS - в противном случае выход RMS не показывается 69 Аналогично, установка флажка DC (сокращение от direct current – постоянный электрический ток) приводит к появлению выходного контакта Mean (DC), на который выводится среднее значение сигнала по постоянному току (после усреднения за относительно большой промежуток времени). Установка флажка Maximum Peak – контакта Positive Peak, на который выводится амплитудное значение сигнала в положительной области сигнала, и т.д. Измерьте эффективное, амплитудное и среднее значение сигнала, подаваемого с генератора, для сигналов разной формы. Сохраните проект. Задание 4.6. Расчет электрической цепи с потенциометром Воспользуйтесь сохраненным ранее проектом со схемой электрической цепи из Лабораторной работы №1, Задание 3.8Расчет электрической цепи с потенциометром. Создайте копию проекта. В этой схеме напряжение Е подается с источника напряжения на потенциометр, имеющий максимальное сопротивление между контактами R max . Измеряется напряжение U вых между ползунком потенциометра и “землей”. Напишите формулу зависимости выходного напряжения с потенциометра U вых от положения ползунка (сопротивления R между ползунком и заземленным выводом потенциометра). Создайте виртуальный прибор для расчета электрической цепи с потенциометром. Поместите на лицевую панель необходимые элементы ввода/вывода, присвойте им имена. Воспользуйтесь узлом Formula или Formula Node для расчета выходного напряжения U вых : а) без учета сопротивления вольтметра R v , б) с учетом сопротивления вольтметра R v Запустите программу на исполнение. Убедитесь в том, что в данном случае использование узла Formula Node значительно проще, чем построение 70 соответствующей программы с использованием элементов Arithmetic&Comparison, выполняющих отдельные математические операции. Сохраните проект. Задание 4.7. Генератор случайных чисел 4.7.1. Непрерывная генерация случайных чисел В этом задании изучается, как с помощью средств LabView генерировать и наблюдать на дисплее виртуального осциллографа последовательность случайных чисел. Создайте новый проект. Установите на лицевой панели прибора графический индикатор (Controls/Express/Graphic Indicators/Waveform Chart). Перейдите в окно Block Diagram. Создайте цикл While Loop (Express/Exec Control/While Loop). Разместите внутри рамки цикла генератор случайных чисел, который изображается в виде двух игральных кубиков (рис.2.11), расположенный в разделе Functions/Programming/Numeric/Random Number (0-1)(также можно использовать путь Express/Arithmetic&Comparison/Numeric/Random Num). Данный компонент позволяет генерировать псевдослучайные числа в пределах от 0 до 1. Числа называются псевдослучайными потому, что их последовательность хоть и похожа на случайную, но генерируется на основе алгоритма, позволяющего при необходимости воспроизводить одну и ту же последовательность таких чисел. 71 Рис.2.11. Вид Block Diagram после добавления компонента Random Numbers (0‐1). Для того чтобы случайные числа лежали в диапазоне от a до b, необходимо умножить их на константу k = b-a, и добавить другую константу, равную a. Выберите из раздела Functions/Express/Arith&Comparison/Numeric (либо Express/Arithmetic&Comparison/Numeric) компоненты Add и Multiply, а также две константы Num Const из этого же раздела. Первая из них будет использоваться в качестве k, вторая – в качестве a. Присвойте константам числовые значения, например 155 и 100. Соедините все элементы на Block Diagram так, как это показано на рис.2.12. Теперь сгенерированные числа будут находиться в диапазоне от 100 до 255, и их значения будут выводиться в компонент построения графика. 72 Рис.2.12. Вид блок‐схемы программы вывода случайных чисел на график. После соединения выхода компонента Add со входом Waveform Chart получаем программу, которая генерирует случайные числа и выводит их на график (рис.2.13). Запустите программу и проверьте ее работу. Сохраните проект. Рис.2.13. Работа программы вывода случайных чисел на график. 73 4.7.2. Генерация псевдослучайного целого числа по нажатию кнопки. Обработка событий с помощью Event Structure Сделайте копию предыдущего проекта. Измените программу так, чтобы она выводила в поле индикатора случайное число по нажатию на кнопку. Для этого уберите с лицевой панели предыдущего проекта элемент Waveform Chart. Установите на лицевую панель кнопку Express/Buttons/Ok Button и поле текстового вывода чисел Controls/Express/Num Inds/Num Ind (рис.2.14). Рис.2.14. Интерфейс программы после расположения числового индикатора и кнопки. Затем необходимо сменить подписи компонентов (рис.2.15). Рис.2.15.Интерфейс программы после смены подписей на компонентах. Текст на компоненте OK Button можно менять прямо на кнопке. Для того чтобы рядом с ним не высвечивался текст “OK Button”, как на рис.2.14, необходимо зайти в окно редактирования свойств компонента (рис.2.16) и убрать галочку для свойства Visible метки (Label) компонента. Убирать текст в самой метке неправильно – в этом случае вы задаете у компонента пустое имя. При этом тексту, который написан на самой кнопке, соответствует свойство Off text (“текст при не нажатой кнопке”). 74 Рис.2.16. Редактирование свойств компонента OK Button. Если попытаться изменить подпись около компонента Numeric, будет изменено свойство Label (“метка”) – имя компонента (в других системах программирования такое свойство обычно называют Name). Оно отображается как на блок-схеме, так и на лицевой панели рядом с компонентом как его подпись, если в поле Visible в свойствах компонента стоит галочка. Это имя может быть задано на произвольном национальном языке, в том числе на русском. Однако использование таких имен не всегда оправданно – в реальных проектах место на блок-схеме приходится экономить, и имя “Случайное целое число” для компонента Numeric не очень уместно. Поэтому для подписи около компонента Numeric лучше использовать свойство Caption (“надпись”). Для этого сначала следует убрать галочку в поле Visible в разделе свойства Label и поставить галочку в поле Visible в разделе свойства Caption. После этого можно редактировать текст в разделе свойства Caption. Он будет отображаться на лицевой панели в качестве подписи к компоненту. Получившийся код программы показан на рис.2.17. 75 Рис.2.17. Вид программы перед созданием обработчика события. Реакция на то или иное событие (event) обеспечивается с помощью так называемых обработчиков событий. Например, нажал пользователь на первую кнопку – выполнился алгоритм номер один. Нажал на вторую кнопку – выполнился алгоритм номер два. И так далее. Каждому событию, которое необходимо обработать, сопоставляется свой алгоритм, который запускается при наступлении этого события. В нашем случае это будет генерация очередного числа по нажатию на кнопку OK Button. Для создания обработчика события установите на блок-схему компонент Event Structure (Functions/Programming/Structures/Event Structure) и поместите рамку структуры в пустой области внутри основного цикла программы (рис.2.18). Рис.2.18. Начало создания обработчика события. 76 По умолчанию создается вкладка Timeout, алгоритм внутри которой выполняется во время ожидания события. Необходимо указать время ожидания до следующей итерации цикла в миллисекундах, например 100 мс, подключив целочисленную константу 100 к входу «песочные часы» в левом верхнем углу рамки. В течение этого времени будет происходить ожидание события и выполняться алгоритм из вкладки Timeout. Если за время таймаута событие не наступит, структура закончит работу. Для добавления на рамку новой вкладки, предназначенной для обработки события нажатия на кнопку, необходимо щелкнуть правой кнопкой мыши по рамке Event Structure и выбрать Add Event Case (добавить вариант события) – рис.2.19. Рис.2.19. Начало добавления обработчика события нажатия на кнопку. В появившемся окне с деревом элементов (рис.2.20) следует выбрать необходимую кнопку (OK Button) и ее событие Value Change, и нажать кнопку OK. 77 Рис.2.20. Добавление обработчика события нажатия на кнопку. После чего необходимо выделить мышкой прямоугольник, в котором находятся элементы генерации случайного числа, и перетащить их внутрь появившейся в структуре вкладки “OK Button”: Value Change (рис.2.21). Рис.2.21. Добавление в Event Structure обработчика события. Для сохранения полученного случайного числа между итерациями цикла While (на рис.2.21 блок цикла обозначен внешней сплошной серой рамкой) необходимо переключиться во вложенной в нее Event Structure во вкладку 78 Timeout нажатием стрелки влево или стрелки вправо в заголовке рамки. Содержание этой вкладки показано на рис. 2.18. Для правильной работы вход и выход цикла While должны быть сконфигурированы как сдвиговый регистр (Shift Register) – то, что поступает на вход, должно приходить на выход. Щелкните правой кнопки мыши на левой границе рамки цикла While Loop и выберите в появившемся меню пункт Add Shift Register (рис.2.22). Рис.2.22. Начало настройки передачи данных в следующую итерацию цикла. 79 Рис.2.23.Настройка передачи данных в следующую итерацию цикла. На левой части рамки возникнет входной терминал для данных цикла While в виде стрелки вниз (“войти внутрь”), а на правой – выходной терминал для данных в виде стрелки вверх (“выйти наружу”) (рис.2.23). Протяните провод от входного терминала цикла While до рамки левой границы Event Structure и щелкните по ней – и на этой границе возникнет терминал в виде черного квадратика. На него будет приходить входные данные Event Structure, поступающие на обработку внутри этого элемента. Протяните от этого квадратика провод до стрелки на правой границе цикла While (выходные данные цикла). При этом на правой границе рамки Event Structure терминал возникнет автоматически (рис.2.24). Рис.2.24.Настройка передачи данных в следующую итерацию цикла. Получившиеся линии служат для передачи данных при работе основного цикла работы программы в том случае, когда нет события. Через каждые 100 80 мс проходит проверка на наличие события нажатия на кнопку, и при отсутствии события данные со входа основного цикла программы без изменения внутри рамки Event Structure передаются на выход. Для того чтобы подключить код генерации чисел, срабатывающий при нажатии на кнопку, переключитесь во вкладку “OK Button”: Value Change. Соедините выход генератора случайных чисел к точке выхода Event Structure, а далее – к индикатору, показывающему значение числа (рис.2.25). В результате подсоединения генератора, на выходе которого числа Double, терминалы и провода приобрели оранжевый цвет. Рис.2.25.Завершение настройки передачи данных в следующую итерацию цикла. Рис.2.26. Передача данных от предыдущей итерации цикла к следующей. При нажатии на кнопку сгенерированное значение будет подано на выход цикла While и индикатор (рис.2.25). В следующей итерации цикла While 81 нажатия на кнопку уже нет, и реализуется ситуация, которую можно увидеть, переключившись на вкладку Timeout (рис.2.26). Данные проходят от входа цикла While к его выходу, проходя через блок Event Case на вкладке TimeOut без изменений. Тем самым в отсутствие действий пользователя значение, подаваемое на индикатор, будет сохраняться – то есть индикатор будет отображать те значения, которые были получены при нажатии кнопки. Компонентом Random Number (0-1)генерируются вещественные числа, содержащие дробную часть. Но если сигнал с выхода генератора подать на компонент, показывающий целочисленные значения, поступающие на него числа будут сначала округляться до целого и только потом показываться. Поэтому для показа округленных значений достаточно установить целочисленный тип индикатора. Но если числа с генератора должны поступать куда-то еще, и они должны быть целыми, их требуется округлить. Сделаем это с помощью компонента Functions/ Programming/ Numeric/ Round To Nearest. Переключитесь во вкладку “OK Button”: Value Change, перетащите его на схему поверх выходного провода с генератора – и он автоматически встроится в схему (рис.2.27). Рис.2.27. Вывод округленных значений. На первый взгляд программа написана и работает правильно, но это не совсем так. В проведенном выше анализе работы программы был упущен 82 момент начального состояния программы до того, как в первый раз будет нажата кнопка. Какое значение будет передаваться с входа на выход цикла? В LabView первоначально будет 0, а при последующих запусках будет показываться последнее значение из предыдущего запуска. Для того чтобы при запуске программы на вход цикла ожидания всегда поступало одно и то же значение, которое и будет показываться на индикаторе до первого нажатия кнопки генерации случайного числа, следует создать числовую константу и присоединить ее снаружи к входному терминалу цикла (рис.2.28). В нашем случае естественно использовать значение 0. Рис.2.28.Окончательный вариант программы. Рис.2.29.Пример работы программы. На рис.2.29 показана работа получившейся программы. Сохраните проект. Запустите программу и проверьте ее работу, в том числе при повторных запусках как при отсутствии входной константы, так и при ее наличии. |