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

LabView - учеб. пособия / LabVIEW Руководство пользователя

.pdf
Скачиваний:
931
Добавлен:
03.03.2016
Размер:
4.63 Mб
Скачать

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

"Примечание. Создавать стандартные приложения или библиотеки совместного доступа можно только в пакете LabVIEW Professional Development System, либо используя дополнительную программу Application Builder.

Другой возможностью для распространения ваших ВП является удаление исходного кода блок-диаграммы, в результате чего другие пользователи не смогут редактировать такие ВП. Чтобы сохранить ВП без блок-диаграммы с целью сокращения размера файла и предотвращения внесения изменений другими пользователями, выберите в главном меню пункт File»Save With Options. Если Вы сохраните ВП без блок-диаграммы, то пользователи не смогут переносить такой ВП на другие платформы или обновлять такой ВП до новой версии LabVIEW.

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

Более подробно о перенесении ВП с одной платформы на другую и их локализации см. в заметках к приложению (Application Notes)

Porting and Localizing LabVIEW VIs.

Построение стандартных приложений и библиотек совместного доступа

Чтобы воспользоваться программой Application Builder для создания стандартных приложений и инсталляторов или библиотек совместного доступа (DDLs) для ваших ВП, выберите из главного меню пункт Tools»Build Application or Shared Library (DLL). Ис-

пользуйте совместные библиотеки в тех случаях, когда Вы хотите вызывать ваши ВП из совместной библиотеки, используя текстовые языки программирования, такие как LabWindows/CVI, Microsoft Visual C++, и Microsoft Visual Basic.

Совместные библиотеки удобны, когда Вы хотите поделиться функциональными возможностями ваших ВП с другими разработ-

151

чиками. Использование совместных библиотек дает способ, с помощью которого языки программирования отличные от LabVIEW получают доступ к коду, разработанному в среде LabVIEW.

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

"Примечание. Пакет LabVIEW Professional Development System содержит программу Application Builder. Если же Вы используете LabVIEW Base Package или Full Development System, то программу Application Builder

можно приобрести отдельно, посетив интернет сайт National Instruments

ni.com/info с последующим введением информационного кода rdlv21. Для конфигурирования параметров создаваемого приложения или совместной библиотеки воспользуйтесь вкладками диалогового ок-

на Build Application or Shared Library (DLL). После задания всех ус-

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

Более подробно об инсталляции программы Application Builder см.

в руководстве LabVIEW Application Builder User Guide.

152

Часть II

Построение и редактирование виртуальных приборов

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

Часть II, Построение и редактирование виртуальных приборов, со-

держит следующие главы:

Глава 8, Циклы и структуры, описывает, как использовать на блок-диаграмме циклы и структуры, чтобы осуществить повтор блоков кода и выполнять код в нужной последовательности и в зависимости от условий.

Глава 9, Событийно управляемое программирование, описывает,

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

Глава 10, Группировка данных с использованием строк, массивов и кластеров, описывает, как применять строки, массивы и кластеры для группировки данных.

Глава 11, Локальные и глобальные переменные, описывает, как применять локальные и глобальные переменные для передачи информации между точками вашего приложения, которые не могут быть соединены проводником.

Глава 12, Графики и диаграммы, описывает, как применять графики и диаграммы для наглядного графического представления зависимостей данных.

153

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

Глава 14, Файловый ввод/вывод, описывает, как выполняются операции файлового ввода/вывода.

Глава 15, Документирование и печать виртуальных приборов,

описывает, как документировать и распечатывать ВП.

Глава 16, Конфигурирование ВП, описывает, как конфигурировать ВП и ВПП, чтобы они работали так, как этого требует ваше приложение.

Глава 17, Программное управление ВП, описывает, как установить связь c виртуальными приборами и другими копиями LabVIEW, чтобы можно было программно управлять этими виртуальными приборами и средой LabVIEW.

Глава 18, Сетевые коммуникации в LabVIEW, описывает, как ис-

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

Глава 19, Связность в среде Windows, описывает, как обеспечить внешний доступ к объектам, командам и функциям для доступа к ним из других приложений Windows.

Глава 20, Вызов кода из текстовых языков программирования,

описывает, как вызвать код из текстовых языков программирования и использовать библиотеки DLL.

Глава 21, Формулы и уравнения, описывает, как применять уравнения в виртуальных приборах.

154

8. Циклы и структуры

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

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

Каждая структура имеет четкую границу с изменяемыми размерами. Эта граница охватывает фрагмент блок-диаграммы, который выполняется в соответствии с правилами данной структуры. Такой фрагмент блок-диаграммы внутри границ структуры называется поддиаграммой (subdiagram). Терминалы, через которые данные поступают внутрь структуры и выходят из нее наружу, называются туннелями. Туннель – это точка на границе структуры, к которой может быть произведено соединение.

Более подробно…

Более подробно относительно использования структур см. справочную систему LabVIEW Help.

Для управления процессом исполнения блок-диаграммы используйте следующие структуры, размещенные на палитре Structures:

For Loop (цикл с заданным числом итераций) – Повторяет выполнение поддиаграммы заданное число раз.

While Loop (цикл по условию) – Повторяет выполнение поддиаграммы, пока не выполнится некоторое условие.

Case Structure (структура выбора) – Содержит много поддиаграмм, но только одна из них выполняется в зависимости от значения входной величины, поступившей на вход этой структуры.

155

Sequence structure (структура последовательности) – Содержит одну или несколько поддиаграмм, которые выполняются последовательно одна за другой.

Formula node (формульный узел) – Выполняет математические операции над числовой величиной, поступившей на вход. Более подробно об использовании формульного узла см. в разделе Фор-

мульные узлы в Главе 21 Формулы и уравнения.

Event structure (событийная структура) – Содержит одну или несколько поддиаграмм, которые выполняются в зависимости от того, как пользователь взаимодействует с этим ВП.

Чтобы отобразить контекстное меню структуры, щелкните правой кнопкой по ее границе.

Структуры For Loop и While Loop

Используйте структуры For Loop и While Loop для управления повторяющимися операциями.

Структура For Loop

Структура For Loop (цикл с заданным числом итераций), показанная слева, выполняет поддиаграмму заданное число раз.

Значение, поступающее на терминал числа повторений – count terminal (это входной терминал), показанный слева, определяет количество повторов выполнения поддиаграммы. Число повторений можно задать явно, путем подключения проводника с нужным значением снаружи цикла к левой или верхней стороне терминала числа повторений, либо неявно, путем задания числа повторений с помощью автоиндексации (auto-indexing). Более подробно о неявном задании числа повторений см. в разделе Автоиндексация для установки числа повторений в цикле For Loop в настоящей Главе.

Терминал итерации – iteration terminal (выходной терминал), показанный слева, содержит значение, равное количеству завершенных итераций (повторов). Подсчет итераций всегда начинается с нуля. При этом в процессе выполнения первой итерации на выходе терминала итераций будет значение 0.

И терминал числа повторений, и терминал итераций имеют тип 32битного целого со знаком. Если Вы подсоедините к терминалу чис156

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

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

Структура While Loop

Структура While Loop, показанная слева, повторно выполняет поддиаграмму до тех пор, пока удовлетворяется некоторое условие. Структура While Loop подобна конструкциям Do Loop или RepeatUntil Loop в текстовых языках программирования.

Цикл While Loop выполняет поддиаграмму до тех пор, пока терминал условия – condition terminal (входной терминал) не получит заданное булево значение. По умолчанию терминал условия появляется в виде Stop if True (остановиться, если Истина), показанный слева. Если терминал условия имеет вид Stop if True, то поддиаграмма цикла While Loop будет выполняться до тех пор, пока на терминал условия не поступит значение TRUE. Вы можете изменить поведение и внешний вид терминала условия. Для этого щелкните правой кнопкой этот терминал или границу цикла While Loop и выберите из контекстного меню пункт Continue if True (продолжить, если Истина). Терминал условия примет вид, показанный слева. Если терминал условия имеет вид Continue if True, то поддиаграмма цикла While Loop будет выполняться до тех пор, пока на терминал условия не поступит значение FALSE. Вы можете также использовать инструмент Positioning и щелкнуть им терминал условия, чтобы изменить его вид.

Кроме того, с помощью терминала условия цикла While Loop Вы можете произвести типовую обработку ошибок. Если Вы подсоедините кластер ошибок (error cluster) к терминалу условия, то фактически из этого кластера на терминал поступит только параметр status, который может принимать значения TRUE и FALSE. Кроме того, пункты контекстного меню Stop if True и Continue if True заменятся на Stop if Error (остановиться, если ошибка) и Continue

157

while Error (продолжить, пока ошибка). Более подробно о кластере ошибок и его обработке см. в разделе Проверка и обработка оши-

бок в Главе 6 Запуск и отладка виртуальных приборов.

Терминал итерации – iteration terminal (выходной терминал), показанный слева, содержит значение, равное количеству завершенных итераций (повторов). Подсчет итераций всегда начинается с нуля. При этом в процессе выполнения первой итерации на выходе терминала итераций будет значение 0.

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

Недопущение бесконечного числа итераций в циклах While Loop

Если Вы поместите булев элемент управления снаружи цикла While Loop, как показано на Figure 8-1, и этот элемент управления будет установлен в значение FALSE перед активизацией цикла, а терминал условия находится в состоянии Stop if True, то Вы получите бесконечный цикл. Вы также можете получить бесконечный цикл, если установите в элементе управления значение TRUE, а терминал условия при этом находится в состоянии Continue if True.

Figure 8-1. Бесконечный цикл While Loop

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

158

прекратить исполнение ВП нажатием кнопки Abort на панели инструментов.

Автоиндексация циклов

Если Вы подсоедините массив к входному туннелю циклов For Loop или While Loop, то сможете прочитать и обработать каждый элемент этого массива, активизировав автоиндексацию (autoindexing). Более подробно о массивах см. в Главе 10 Группировка данных с использованием строк, массивов и кластеров.

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

Чтобы активизировать (enable) или отключить (disable) автоиндексацию, щелкните правой кнопкой туннель на границе цикла и вы-

берите Enable Indexing или Disable Indexing. По умолчанию авто-

индексация для цикла While Loop отключена.

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

Автоиндексация для установки числа повторений в цикле For Loop

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

159

нию активизирует автоиндексацию для всех массивов, которые Вы подключаете к циклу For Loop. Если Вам не нужна поэлементная обработка массивов, отключите автоиндексацию.

Если автоиндексация активна более чем для одного входного туннеля, или если терминал числа повторений подключен, то в качестве числа повторений берется наименьшее значение из возможных. Например, если в цикл входят два массива с автоиндексацией – из 10 и 20 элементов, соответственно, и Вы подаете значение 15 на терминал числа повторений, то цикл выполнится 10 раз, и из второго массива будут извлечены только 10 первых элементов. Если Вы строите кривые зависимостей по данным из двух источников на одном графике, и хотите отобразить первые 100 элементов, то подсоедините к терминалу числа повторений значение 100. Если один из источников данных выдаст только 50 элементов, то цикл выполнится 50 раз и извлечет только первые 50 элементов. Для определения числа элементов в массиве используйте функцию Array Size.

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

Автоиндексация с циклами While Loop

Если Вы активизируете автоиндексацию для массива, поступающего в цикл While Loop, то массив индексируется точно так же, как и

вцикле For Loop. Однако, число повторений цикла While Loop не ограничивается размером массива, поскольку цикл While Loop повторяется до тех пор, пока удовлетворяется условие. Когда в процессе индексации входного массива цикл While Loop доходит до последнего элемента массива, то в качестве последующих значений

вцикл будут поступать значения, принятые по умолчанию для типа

160