Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASVT Материалы / основы_labview_1

.pdf
Скачиваний:
233
Добавлен:
29.03.2016
Размер:
5.26 Mб
Скачать

9

9.Использование переменных

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

План занятия

A.Параллелизм

B.Переменные

C.Функциональные глобальные переменные

D.Состязания

© National Instruments Corporation

211

Основы LabVIEW 1. Учебное пособие

Лекция 8. Методы проектирования и шаблоны

A.Параллелизм

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

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

Рисунок 9-1. Лицевая панель прибора с параллельными циклами

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

Метод 1 (неверный)

Поместите терминал Loop Control снаружи обоих циклов и подключите его к обоим терминалам условия, как показано на рисунке 9-2. Loop control – входной сигнал для обоих циклов, поэтому значение терминала Loop Control считывается только один раз, до начала выполнения обоих циклов While. Если в цикл передается False, циклы While будут выполняться бесконечно. Выключение тумблера не останавливает VI, поскольку во время итераций циклов значение тумблера не считывается.

© National Instruments Corporation

212

Основы LabVIEW 1. Учебное пособие

Лекция 8. Методы проектирования и шаблоны

Рисунок 9-2. Параллельные циклы, метод 1

Метод 2 (неверный)

Поместите терминал Loop Control в цикл 1, чтобы он считывался в каждой итерации цикла 1, как показано на приведенной блок-диаграмме. Хотя цикл 1 завершается как надо, цикл 2 не начинает выполняться, пока не получит все входные данные. Цикл 1 не передает данные из цикла, пока цикл не остановится, поэтому цикл 2 должен ждать последнее значение Loop Control, доступное только по завершении цикла 1. Таким образом, циклы не выполняются параллельно. Цикл 2 выполняет только одну итерацию, потому что его терминал условия получает значение True с переключателя

Loop Control из цикла 1.

Рисунок 9-3. Параллельные циклы, метод 2

Метод 3 (Решение)

Если бы вы могли считать значение Loop control из файла, зависимости между потоками данных между циклами больше не существовало бы, поскольку каждый цикл осуществляет доступ к файлу независимо. Однако операции чтение и записи файлов требуют времени, по меньшей мере - времени процессора. Другой способ - найти место, где данные Loop control могли бы храниться в памяти и напрямую считывались бы оттуда. Далее в этой лекции будет показаны методы решения этой проблемы.

Основы LabVIEW 1. Учебное пособие

213

ni.com

Лекция 8. Методы проектирования и шаблоны

B. Переменные

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

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

В блок-диаграмме на рисунке 9-4 два цикла не выполняются параллельно из-за проводника между двумя subVIs.

Рисунок 9-4. Зависимость между данными, вызванная проводником

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

© National Instruments Corporation

214

Основы LabVIEW 1. Учебное пособие

Лекция 8. Методы проектирования и шаблоны

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

В LabVIEW переменные (variables) – элементы блок-диаграммы, позволяющие вам получать доступ к данным или сохранять данные в другом месте. Настоящее местоположение данных меняется в зависимости от типа переменной. Локальные переменные (Local Variables) хранят данные в элементах управления и индикации лицевой панели. Глобальные переменные (Global Variables) и однопроцессные переменные общего доступа(Single-Process Shared Variables) хранят данные в специальных репозитариях, которые могут быть доступны из разных VI. Функциональные глобальные переменные (Functional Global Variables) хранят данные в сдвиговых регистрах цикла While. Независимо от того, где хранятся данные, все переменные позволяют обойти проблему нормального потока данных путем передачи данных из одного места в другое без проводников. Поэтому переменные полезны в параллельной архитектуре, но они имеют и определенные недостатки, например, открывают возможность возникновения состязаний.

Переменные, используемые в одном VI

Локальные переменные используются для обмена данными в одном VI.

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

Локальные и глобальные переменные передают информацию между точками в приложении, которые вы не можете соединить проводником. Используйте локальные переменные для доступа к объектам лицевой панели из нескольких мест в одном VI. Используйте глобальные переменные для доступа к данным и передачи их между несколькими VIs.

Используйте Feedback Node для запоминания данных из предыдущего VI или итерации цикла.

Создание локальных переменных

Щелкните правой кнопкой мыши по объекту лицевой панели или терминалу блок-диаграмме и выберите из контекстного меню Create»Local Variable для создания локальной переменной. Иконка локальной переменной появится на блок-диаграмме.

Вы можете также выбрать локальную переменную из палитры функций и поместить ее на блок-диаграмму. Узел локальной переменной еще не связан с элементов управления или индикатором.

Чтобы связать локальную переменную с элементом управления или индикатором, щелкните правой кнопкой мыши по локальной переменной и

Основы LabVIEW 1. Учебное пособие

215

ni.com

Лекция 8. Методы проектирования и шаблоны

выберите из контекстного меню Select Item. В раскрытом контекстном меню содержатся все элементы лицевой панели, имеющие собственные метки.

LabVIEW использует собственные метки для связи локальных переменных с объектами лицевой панели, поэтому присваивайте элементам управления и индикаторам лицевой панели содержательные метки.

Чтение и запись переменных

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

Вы можете также настроить переменную для работы в качестве источника данных. Щелкните правой кнопкой мыши по переменной и выберите из контекстного меню Change To Read, чтобы переменная вела себя, как элемент управления. Когда этот узел выполняется, VI считывает данные из связанного с переменной объекта лицевой панели.

Для настройки переменной на прием данных с блок-диаграммы щелкните по переменной правой кнопкой мыши и выберите из контекстного меню

Change To Write.

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

Пример использования локальных переменных

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

Чтобы оба графика обновлялись должным образом, циклы While должны работать параллельно. Соединение циклов While проводником для передачи значений переключателя приведет к последовательному выполнению циклов. На рисунке 9-5 приведена блок-диаграмма этого VI с использованием локальной переменной для передачи данных.

Цикл 2 считывает значение связанной с переключателем локальной переменной. При установке переключателя на лицевой панели в положение False, терминал переключателя в цикле 1 записывает это значение в терминал условия цикла 1. Цикл 2 считывает локальную переменную Loop

© National Instruments Corporation

216

Основы LabVIEW 1. Учебное пособие

Лекция 8. Методы проектирования и шаблоны

Control и записывает False в терминал условия цикла 2. Таким образом, циклы работают параллельно и одновременно выключаются при изменении положения переключателя на лицевой панели.

Рисунок 9-5. Использование локальной переменной для останова параллельных циклов.

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

Например, если интерфейс пользователя требует входа в систему, вы можете очищать поля Login и Password каждый раз при входе в систему нового пользователя. Используйте локальную переменную для чтения данных из строковых элементов управления Login и Password при входе пользователя в систему и записи пустых строк в эти элементы правления при выходе из системы.

Переменные для обмена данными между VIs

Вы можете также использовать переменные для передачи данных между несколькими одновременно выполняющимися VIs. Локальная переменная передает данные в пределах одного VI. Глобальная переменная передает данные между несколькими VI. Предположим, у вас есть два одновременно запущенных VI, каждый из которых содержит цикл While и выводит данные на график. Первый VI содержит булевский элемент управления для останова обоих VI. Вы можете использовать глобальную переменную для останова обоих циклов единственным булевским элементом управления. Если бы оба цикла были бы на блок-диаграмме одного и того же VI, вы могли бы использовать для этого локальную переменную.

Вы можете также использовать вместо глобальной переменной переменную общего доступа типа Single Process. Переменная общего доступа (Shared Variable) подобна локальной и глобальной переменной, но позволяет передавать данные по сети. Переменная общего доступа может быть использована на локальном компьютере (single-process) или публикуемой в сети (network-published). Хотя публикуемые в сети переменные общего

Основы LabVIEW 1. Учебное пособие

217

ni.com

Лекция 8. Методы проектирования и шаблоны

доступа не рассматриваются в данном курсе, вы всегда можете преобразовать используемую вами переменную Single Process в переменную, публикуемую в сети Network-Published.

Глобальные переменные применяют для обмена данными между VI, выполняющимися на одном компьютере, особенно, если не используется файл проекта. Однопроцессные переменные общего доступа применяют, если в будущем потребуется разделять информацию переменных между VI, выполняющимися на нескольких компьютерах.

Создание глобальных переменных

Глобальные переменные используются для передачи данных между несколькими одновременно выполняющимися VI. Глобальные переменные

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

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

Выберите глобальную переменную из палитры функций и поместите ее на блок-диаграмму.

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

LabVIEW использует собственные метки для идентификации глобальных переменных, поэтому присваивайте элементам управления и индикаторам лицевой панели содержательные метки.

Вы можете создать несколько отдельных глобальных VI, каждый с одним объектом на лицевой панели, либо, если хотите сгруппировать похожие переменные, создать один глобальный VI с несколькими объектами лицевой панели.

Глобальная переменная с несколькими объектами более эффективна, поскольку вы можете группировать родственные переменные. Блокдиаграмма VI может содержать несколько узлов глобальной переменной, связанных с элементами управления и индикаторами на лицевой панели глобальной переменной. Эти узлы глобальной переменной - или копии первого узла, помещенного вами на блок-диаграмму глобального VI, или

© National Instruments Corporation

218

Основы LabVIEW 1. Учебное пособие

Лекция 8. Методы проектирования и шаблоны

узлы глобальной переменной другого глобального VI , которые вы поместили в текущий VI. Глобальные VI помещаются в другие VI точно так же, как subVI. Каждый раз при помещении на блок-диаграмму нового узла глобальной переменной, LabVIEW создает новый VI, связанный только с этим узлом глобальной переменной и его копиями.

На рисунке 9-6 показана лицевая панель глобальной переменной с числовым элементом, строкой и кластером, содержащим число и булевский переключатель. На панели управления не показываются кнопки Run, Stop и прочие кнопки стандартной панели управления.

Рисунок 9-6. Окно лицевой панели глобальной переменной

Поместив желаемые объекты на лицевую панель глобального VI, сохраните его и вернитесь на блок-диаграму исходного VI. Далее вы должны выбрать объект в глобальном VI, к которому хотите получить доступ. Щелкните по узлу глобальной переменной и выберите объект лицевой панели из контекстного меню. В контекстном меню перечислены все объекты лицевой панели глобального VI с присвоенными метками. Вы можете также щелкнуть правой кнопкой мыши по узлу глобальной переменной и выбрать объект лицевой панели из контекстное меню Select Item.

Также вы можете щелкнуть по узлу глобальной переменной инструментами Operating или Labeling и выбрать объект лицевой панели из контекстного меню.

Если вы хотите использовать эту глобальную переменную в других VI, щелкните Select a VI на палитре функций. По умолчанию глобальная переменная связана с первым объектом лицевой панели с собственной меткой, который вы поместили в глобальный VI. Дважды щелкните по узлу глобальной переменной на блок-диаграмме и выберите объект лицевой панели из контекстного меню Select Item для связи глобальной переменной с данными из другого объекта лицевой панели.

Создание переменных типа Single Process

Для использования переменной общего доступа необходим файл проекта. Для создания переменной общего доступа типа Single Process щелкните правой кнопкой по строке My Computer в окне Project Explorer и выберите

Основы LabVIEW 1. Учебное пособие

219

ni.com

Лекция 8. Методы проектирования и шаблоны

New»Variable. Появится диалоговое окно Shared Variable Properties,

показанное на рисунке 9-7.

Рисунок 9-7. Диалоговое окно Shared Variable Properties

На вкладке Variable Type выберите Single Process. Задайте имя переменной (name) и тип данных (data type). После создания переменной общего доступа она автоматически появится в новой библиотеке в файле проекта.

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

Используйте переменные осторожно

Локальные и глобальные переменные – продвинутые концепции LabVIEW. Изначально они не являются частью модели потока данных LabVIEW. Блокдиаграмма может стать сложной для чтения при использовании переменных, так что вы должны использовать их осторожно. Неправильное использование локальных и глобальных переменных, например, использование их вместо панели подключения или для доступа к значениям в каждом кадре структуры Sequence, может привести к непредсказуемому поведению VI. Чрезмерное использование локальных и глобальных переменных, например, чтобы избежать длинных проводников на блокдиаграмме, или использование их вместо потока данных, снижает производительность.

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

© National Instruments Corporation

220

Основы LabVIEW 1. Учебное пособие