Скачиваний:
60
Добавлен:
06.03.2016
Размер:
3.3 Mб
Скачать

Урок 12 Локальные и глобальные переменные ВП

Урок 12.

Локальные и глобальные переменные.

В этом уроке продемонстрируем, как создавать, сохранять и манипулировать локальными и глобальными переменными. Опишем, как сделать элементы управления и индикации более гибкими и удобными.

В этом уроке изложены вопросы:

  1. Локальные переменные.

  2. Глобальные переменные.

A. Локальные переменные

Каждая построенная программа в LabVIEW является модулем. Его можно вызвать из любой программы, и он будет в ней работать, используя свои собственные значения, установленные в его программе. Те значения, для которых создан разъем на соединительной панели, можно передавать внутрь исполняемого модуля. До настоящего времени в нашем курсе мы считывали данные с объекта лицевой панели или записывали данные в терминал отображения на блок-диаграмме. Но объект лицевой панели имеет лишь один терминал на блок-диаграмме, а нам может понадобиться обновлять показания или считывать данные с объекта лицевой панели из разных точек блок-диаграммы или даже из другого ВП. Эту проблему можно решить с помощью введения локальных и глобальных переменных.

Рассмотрим использование локальных переменных в LabVIEW . Локальные переменные используются только внутри одного модуля ВП. Они обеспечивают доступ к объектам лицевой панели из разных точек блок-диаграммы одного и того же ВП в тех случаях, когда мы не можем или не хотим подключить проводник к терминалу объекта. Наличие локальных переменных – очень удобно при работе с громоздкими программами. На блок-диаграмме в любом месте можно разместить локальную переменную и связать ее с другим программным модулем. Не обязательно тянуть связующий проводник через все пространство программного кода ВП на блок-диаграмме.

Создать локальную переменную можно, по крайней мере, двумя способами. Первый способ создания локальной переменной заключается в вызове контекстного меню терминала интересующего объекта и выборе опции Создать=> Локальная переменная (Create =>Local Variable).

Второй способ - выбрать объект локальная переменная (LOCAL) из подпалитры Структуры (Structures) палитры Функции (Function).

На блок-диаграмме появится обезличенный терминал локальной переменной со знаком вопроса.

Выберем инструмент УПРАВЛЕНИЯ и щелкнем левой кнопкой мыши по обезличенному терминалу. В появившемся списке выберем имя конкретной локальной переменной.

Существуют несколько причин использования локальных переменных в ВП:

  • возможность создавать алгоритмы, например, управление параллельными циклами посредством одной переменной, которые нельзя реализовать другими способами;

  • любой элемент управления может виртуально работать как индикатор и наоборот.

Упражнение 12-1. ВП использования локальной переменной для управления параллельными циклами

Цель: Создать ВП, в котором используется локальная переменная.

Завершить выполнение двух независимых циклов по условию с помощью одного логического элемента управления Стоп.

Блок-диаграмма

Построим блок-диаграмму ВП с двумя простейшими циклами.

Как же завершить параллельное выполнение двух независимых циклов с помощью нажатия одной кнопки Стоп?

Подключение кнопки Стоп за пределами циклов к обоим условным терминалам не сработает, поскольку состояние элементов управления , размещенных за пределами цикла, не считывается с момента входа в тело цикла. В этом случае циклы будут выполняться ровно один раз, если кнопка Стоп имеет логическое значение ЛОЖЬ (False) к моменту начала выполнения цикла или будут выполняться бесконечно, если эта кнопка Стоп находилась к моменту начала выполнения циклов в состоянии ИСТИНА (True).

Размещение кнопки Стоп внутри одного из циклов и создание проводника от нее к условному терминалу другого цикла не приведет к успеху по тем же причинам. Более того, второй цикл даже не начнет работать до тех пор, пока не завершится первый цикл.

Решить эту задачу можно только с использованием локальной переменной. Локальные переменные создают копию данных из одного терминала на блок-диаграмме и всегда содержат актуальные значения объектов лицевой панели, с которыми они ассоциированы. Таким образом, можно получить доступ к элементу управления или индикатору в более чем одной точке нашей блок-диаграммы без подключения проводников к его терминалу.

Для решения нашей задачи мы можем использовать одну кнопку Стоп для управления обоими циклами путем присоединения ее логического терминала к условному терминалу одного из циклов и подключения локальной переменной, ассоциированной с терминалом кнопки Стоп , к условному терминалу другого цикла.

Существует правило для создания локальной переменной булевского типа : объект лицевой панели не может быть переведен в режим защелки (Latch), устанавливаемый опцией Механические действия (Mechanical Actions). Булевский объект Защелка в совокупности с ним локальной переменной в режиме чтения приводит к неоднозначной ситуации. Поэтому нужно поменять режим защелки (Latch) на режим переключатель (Switch when Pressed), устанавливаемый опцией Механические действия (Mechanical Actions).

Оной из особенностей локальных переменных является то, что они дают возможность записывать данные в элемент управления и считывать данные из элемента отображения (индикатора), что мы не можем делать с обычными терминалами-объекта. Локальные переменные имеют два режима (mode) : чтение (READ) и запись (WRITE). Надо запомнить правило для подключения локальной переменной READ mode = CONTROL, WRITE mode = INDICATOR. Установить локальную переменную в режим чтения или записи можно, щелкнув правой кнопкой мыши по терминалу локальной переменной и выбрав опцию Change To. Терминал чтения обведен более жирной линией, чем в режиме записи (точно так же, как элемент управления имеет толстую окантовку в отличие от индикатора).

Сохраним ВП под именем Локальные переменные.vi.

Конец упражнения 12-1

B. Глобальные переменные

.Предположим нам надо передать данные между несколькими ВП, которые запускаются одновременно. Не забывайте, что мы трудимся в потоковом режиме обработки данных, принцип одновременной работы ВП - для нас не экзотика. Предположим в силу тех или иных причин иконки ВП не могут быть соединенными проводниками на блок-диаграмме. В этой ситуации удобны глобальные переменные. Во многом глобальные переменные сходны с локальными. Существенное отличие их в том, что область действия глобальных переменных не ограничена одним ВП – глобальные переменные могут передавать данные между несколькими ВП.

Под глобальные переменные отводится дополнительная панель, на которую помещаются все глобальные переменные в том виде, в котором они находятся в программе. Здесь имеется в виду тип переменных, а не их внешний вид. Эта лицевая панель не имеет своей блок-диаграммы, хранится в файле с именем и входит в иерархическую структуру программы, находясь на самом нижнем уровне иерархии.

Создать новую лицевую панель глобальных переменных можно из подпалитры Structures палитры Function

На блок-диаграмме появится обезличенный терминал глобальной переменной со знаком вопроса.

Выберем инструмент УПРАВЛЕНИЯ и щелкнем правой кнопкой мыши по обезличенному терминалу. В появившемся контекстном меню выберем Open Front Panel.

Все установленные на ней объекты существуют в тех ВП, в которых они установлены. Можно отредактировать иконку особого ВП с глобальными переменными, но у этого ВП нет не только блок-диаграммы, но и соединительной панели. Покажем это на примере работу с глобальными переменными.

Упражнение 12-2. ВП использования глобальной переменной

Цель: Создать ВП, в котором используются глобальные переменные.

В этом упражнении представлена последовательность действий по созданию ВП с глобальными переменными. Показана возможность передачи из модуля ВП значения величины, для которой нет терминала вывода на соединительной панели. Чтобы не переделывать соединительную панель этого ВП можно, используя глобальные переменные, передать значение, вычисленное в нем в ВП более высокой иерархии. Отметим, что в данном случае пример имеет иллюстративные цели.

Рассмотрим проблему аналогичную двум независимым циклам по условию. Предположим, что вместо двух независимых циклов по условию на одной блок-диаграмме мы имеем два независимых виртуальных прибора, которые выполняются одновременно.

Блок-диаграмма ВП

  1. Откроем новый ВП. На блок-диаграмме расположим иконки двух ВП.

  1. Их можно найти через палитру Function , выбрав подпалитру Select a VI. Далее в появившемся диалоговом окне надо выбрать файл ВП VIМониторинг температуры.vi и файл ВП VIБегущее среднее.vi, которые мы отладили ранее .

ВП Мониторинга температуры, выполненный для шкалы Фаренгейта или Цельсия.

ВП Бегущего среднего.

  1. Создадим глобальную переменную в блок-диаграмме ВП Мониторинг температуры . Двойным щелчком мыши по ней перейдем в окно панели глобальных параметров. В ней мы расположим два элемента: логическую кнопку СТОП и логическую кнопку МАСШТАБ ШКАЛЫ.

Сохраним файл с этой лицевой панелью глобальных переменных (в нашем случае она одна) под именем Панель глобальных переменных.vi.

Заменим обезличенный терминал глобальной переменной на конкретное значение СТОП

Установим соответствие между глобальной переменной и объектом отображения СТОП, попытаемся соединить их. Это не приводит нас к желаемому результату. Глобальные переменные имеют схожую особенность с локальными переменными. Для них существует возможность записывать данные в элемент управления и считывать данные из элемента отображения (индикатора). Глобальные переменные имеют два режима (mode): чтение (READ) и запись (WRITE). В нашем случае как прототип объекта отображения глобальная переменная имеет режим на запись. Установим глобальную переменную в режим чтения, щелкнув правой кнопкой мыши по терминалу глобальной переменной и выбрав опцию Change To Read. Терминал чтения обведен более жирной линией, чем в режиме записи (точно так же, как элемент управления имеет толстую окантовку в отличие от индикатора). На приведенном ниже примере эта особенность для глобальных переменных хорошо видна.

Сделаем копию этой глобальной переменной и заменим ее на конкретное значение МАСШТАБ ШКАЛЫ. Соединим ее с входом ВП.

Получим блок-диаграмму ВП Мониторинг температуры

Сделаем копию глобальной переменной СТОП и расположим ее в ВП Бегущее среднее.

Получим блок-диаграмму ВП Бегущее среднее.

Теперь мы сможем управляя логической кнопкой СТОП на панели глобальных параметров завершать исполнение двух ВП одновременно. Можем менять масштаб шкалы ВП Мониторинг температуры и даже в процессе исполнения ВП осуществлять мониторинг температуры в градусах Цельсия или Фаренгейта попеременно.

Выберем пункт главного меню File»Save. Сохраните ВП под именем Пример глобальные переменные.vi

Выберем пункт главного меню File»Close. Закроем ВП.

Не вдаваясь в подробности самого алгоритма программирования ВП, мы детально рассмотрели процесс создания и использования глобальных переменных.

Покажем иерархическую структуру нашего примера. Вызов ее осуществляется из верхнего меню: Browse=>Show VI Hierarhy. Вид структуры приведен ниже.

Как видно из рисунка, пиктограмма основной программы находится на самом верхнем уровне. Ниже уровнем находятся два ВП , с которыми работает основная программа. Можно заметить, что в ВП Мониторинг температуры входят два подмодуля: детектирование одного значения температуры, который использует внутри себя модуль перевода значения температуры из градусов Фаренгейта в градусы Цельсия и наоборот. Панель глобальных переменных имеет более низкий уровень, чем уровень ВП, с которыми работает основная программа.

Конец упражнения 12-2.

Задание для самостоятельного решения

12-3 Создайте ВП, который состоит из цифрового дисплея и круговой ручки управления таймером. В цифровом дисплее устанавливается время и через каждую секунду ручка управления на лицевой панели вращается, отображая изменяемое значение

© National Instruments Corporation 12-11 Учебный курс LabVIEW Основы I

Соседние файлы в папке Лабораторная работа №1