Теоретические основы
LabVIEW (Laboratory Virtual Instrumentation Engineering Workbench) — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments (США). Первая версия LabVIEW была выпущена в 1986 году для Apple Macintosh, в настоящее существуют версии для UNIX, GNU/Linux, Mac OS и пр., а наиболее развитыми и популярными являются версии для Microsoft Windows.
LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами. Идеологически LabVIEW очень близка к SCADA-системам, но в отличие от них в большей степени ориентирована на решение задач не столько в области АСУ ТП, сколько в области АСНИ.
Программирование, основанное на потоках данных
Графический язык программирования «G», используемый в LabVIEW, основан на архитектуре потоков данных. Последовательность выполнения операторов в таких языках определяется не порядком их следования (как в императивных языках программирования), а наличием данных на входах этих операторов. Операторы, не связанные по данным, выполняются параллельно в произвольном порядке.
В основе программирования в LabVIEW лежит понятие Виртуальных приборов (Virtual Instruments, VI). На лицевой панели, как и положено, располагаются элементы управления программой — кнопки, графики, выключатели и тому подобное. Блок-схема — это, по сути, и есть сама программа. При написании (а вернее создании, потому что писать приходится не так уж и много) программы используется такое понятие, как «поток данных» (Data Flow). Суть его в том, что все элементы программы (которые представлены графически) связываются между собой связями (проводами, нитками) по которым и происходит передача данных. В общем, описать это довольно сложно, лучше посмотреть на картинку, рис.1.
Рис. 1. Простейший прибор.
Цифрами обозначены:
1- точки, элементы программы (Nodes);
2 - терминалы индикаторов (Indicator Terminals);
3 - связи (Wires);
4 - терминалы управляющих элементов (Control Terminals)
Итак, в LabVIEW вы создаете пользовательский интерфейс (лицевую панель), с управляющими элементами и индикаторами. Управляющие элементы — это тумблеры, кнопки, поля ввода и прочие устройства ввода. Индикаторы — это графики, шкалы, лампочки, текстовые поля и тому подобное. После создания пользовательского интерфейса, вы добавляете программный код, который управляет объектами на лицевой панели. Этот код содержится в схеме (block diagram). Этот код чем-то напоминает собой блок-схему, хотя отличий много.
LabVIEW можно использовать для того, чтобы управлять различным оборудованием, таким, как, устройства сбора данных, различные датчики, устройства наблюдения, двигательные устройства (например, шаговые моторы) и тому подобное, а так же GPIB, PXI, VXI, RS-232 b RS-484 устройства. Также в LabVIEW имеются встроенные средства для подключения созданных программ к сети, используя LabVIEW Web Server и различные стандартные протоколы и средства, такие как TCP/IP и ActiveX.
Используя LabVIEW, можно создавать приложения для тестирования и измерений, сбора данных, управления различными внешними устройствами, генерации отчетов. Так же можно создать независимые исполняемые файлы и библиотеки функций, такие как DLL, так как LabVIEW — это полноценный 32-битный компилятор.
Достоинства LabVIEW:
полноценный язык программирования;
интуитивно понятный процесс графического программирования;
широкие возможности сбора, обработки и анализа данных, управления приборами, генерации отчетов и обмена данных через сетевые интерфейсы;
драйверная поддержка более 2000 приборов;
возможности интерактивной генерации кода;
шаблоны приложений, тысячи примеров;
высокая скорость выполнения откомпилированных программ;
совместимость с операционными системами Windows2000/NT/XP, Mac OS X, Linux и Solaris.
LabVIEW поддерживает огромный спектр оборудования различных производителей и имеет в своём составе (либо позволяет добавлять к базовому пакету) многочисленные библиотеки компонентов:
для подключения внешнего оборудования по наиболее распространённым интерфейсам и протоколам (RS-232, GPIB 488, TCP/IP и пр.);
для удалённого управления ходом эксперимента;
для управления роботами и системами машинного зрения;
для генерации и цифровой обработки сигналов;
для применения разнообразных математических методов обработки данных;
для визуализации данных и результатов их обработки (включая 3D-модели);
для моделирования сложных систем;
для хранения информации в базах данных и генерации отчетов;
для взаимодействия с другими приложениями в рамках концепции COM/DCOM/OLE и пр.
Вместе с тем LabVIEW — очень простая и интуитивно понятная система. Неискушённый пользователь, не являясь программистом, за сравнительно короткое время (от нескольких минут до нескольких часов) способен создать сложную программу для сбора данных и управления объектами, обладающую красивым и удобным человеко-машинным интерфейсом. Например, средствами LabVIEW можно быстро превратить старый компьютер, снабжённый звуковой картой, в мощную измерительную лабораторию.
Специальный компонент LabVIEW — Application Builder, позволяет выполнять LabVIEW-программы на тех компьютерах, на которых не установлена полная среда разработки.
Интерфейс панели LabVIEW и окно редактирования диаграмм
Запустите LabVIEW. В появившемся окне (рис.2) выберите пункт New>Blank VI.
Рис. 2. Окно запуска программы.
После выбора создания нового прибора раскрываются два окна: интерфейсная панель (Front Panel) (рис.3) и окно редактирования диаграмм (Block Diagram) (рис.4), которое по своей сути является программой в графическом виде.
Интерфейсная панель - это интерфейс пользователя. Вы устанавливаете на интерфейсную панель графические элементы управления и всевозможные индикаторные приборы, которые являются соответственно элементами ввода и вывода. Элементы управления - это ручки, регуляторы, ползунковые устройства, кнопки и другие устройства ввода. Индикаторы - это элементы для вывода/построения графиков, сигнализирующие устройства, такие, как лампочки и т.д.
Установленные на переднюю панель элементы управления и индикаторы, отображаются соответствующими иконками (терминалами) во втором окне – окне редактирования диаграмм. Т.е. каждому установленному элементу на интерфейсной панели соответствует иконка в окне редактирования. В этом окне и "пишется" программа - создается графический код VI. Удалив, например, управляющий элемент в интерфейсном окне, исчезнет и соответствующая иконка (терминал) в окне редактирования диаграмм.
Рис. 3. Интерфейсная панель.
Рис. 4. Окно редактирования диаграмм
Иконки или терминалы показывают тип данных элементов управления или индикаторов. Терминалы осуществляют связь между интерфейсной панелью и диаграммой.
Функции - это объекты окна редактирования диаграмм, которые могут иметь один и/или несколько входов и/или выходов. Функции LabVIEW аналогичны выражениям, операторам, процедурам и функциям текстовых языков программирования.
Связи — это соединительные линии между иконками (терминалами). Они являются аналогом переменных в обычных языках программирования. Причем данные могут передаваться только в одном направлении - от терминала-источника к одному или нескольким терминалам-приемникам. Различный вид и цвет соединений соответствует различным типам передаваемых данных. Неправильная связь терминалов или незаконченное соединение изображается штриховой линией.
Структуры - это графическое представление циклов и операторов выбора в тексториентированных языках программирования. Терминалы, функции, связи и структуры - это весь синтаксис языка программирования LabVIEW.
Линейка инструментов. Оба окна, как интерфейсное, так и окно редактирования диаграмм имеют линейки инструментов, которые содержат служебные кнопки и индикаторы состояния, предназначенные для контроля Виртуальных Инструментов. Одна из линеек инструментов всегда доступна, и ее вид зависит от того, в каком окне Вы находитесь. Линейка инструментов интерфейсного окна содержит 8 кнопок, рис. 5.
Рис. 5. Линейка инструментов интерфейсного окна
1 - кнопка запуска программы на выполнение, пока приложение выполняется, значок меняет свой внешний вид;
2 - кнопка запуска программы на выполнение в циклическом режиме, пока приложение выполняется, значок меняет свой внешний вид;
3 - когда приложение запущено, эта кнопка находится в активном состоянии, используйте ее для прекращения выполнения программы;
4 - кнопка "ПАУЗА" приостанавливает исполнение программы до последующего нажатия на эту же кнопку;
5 - выпадающее меню редактирования свойств шрифта: тип, размер, стиль и цвет;
6 - выпадающие меню, позволяющие осуществлять выравнивание и позиционирование объектов, распределять графические объекты передней панели VI.
7 - если вы устанавливаете объект поверх другого объекта, то нижний объект может быть перекрыт и недоступен, используйте это выпадающее меню размещения объекта поверх или под желаемым.
Если приложение не может быть запущено на выполнение по какой-либо причине, то линейка инструментов примет следующий вид:
Рис. 6. Линейка инструментов – программа не может быть запущена
Линейка инструментов окна редактирования диаграмм имеет такие же кнопки, как и интерфейсная панель, плюс свои собственные, предназначенные для отладки (debugging) программы, рис. 7:
Рис. 7. Линейка инструментов окна редактирования диаграмм
1 - нажав эту кнопку, и запустив программу на выполнение, Вы сможете отлаживать программу и следить за следованием данных между объектами;
2 – включение или отключение сохранения значений связей;
3 - нажатие на эту кнопку позволяет Вам в процессе отладки "входить" в структуры, например, в циклы и подпрограммы;
4 - нажав эту кнопку, Вы активизируете пошаговый режим отладки, т.е. данные будут передаваться от иконки к иконке, останавливая программу, подсвечивая при этом текущий элемент, и ожидать следующего шага – нажатия на эту же кнопку;
5 - нажатие на эту кнопку позволяет Вам в процессе отладки "выходить" из структуры, например, из цикла, и перейти к следующему "узлу".
Выпадающее меню. Установив элемент управления на интерфейсную панель или иконку в окне редактирования диаграмм, мы всегда можем, например, изменить свойства этого объекта. Для этого нужно подвести указатель мыши к желаемому объекту и нажать правую кнопку мыши. В результате появится выпадающее меню, позволяющее редактировать объект.
Один из основных служебных компонентов, который позволяет создавать, модифицировать и отлаживать виртуальные инструменты – это Панель Инструментов (Tools), рис. 8.
Рис. 8. Панель инструментов
Вызывается из основного меню View > Tools Palette.
Operate Value - управление объектами, например, для перемещения ползунка или поворота ручки;
Position/Size/Select - установка, "перетягивание", перемещение, изменение размеров объекта – стрелочка меняет свой внешний вид, когда доступна опция изменения размеров объекта;
Edit text- инструмент для ввода текста, как в окне интерфейсной части программы, так и в окне редактирования диаграмм;
Connect Wire - используется для связи (соединения) объектов;
Object Shortcut Menu - инструмент выполняет аналогичную функцию, что и нажатие на правую кнопку мыши на желаемом объекте, т.е. служит для вызова выпадающего меню;
Scroll Window – перемещение (прокрутка) содержимого окна одновременно;
Set/Clear Breakpoint - установка точек (меток) останова программы при ее отладке;
Probe Data - устанавка пробника в окне редактирования диаграмм, который, во время выполнения или отладки программы показывает значение параметра, где установлен пробник;
Get Color - копирование цвета в палитру - необходимо подвести указатель и нажать левую кнопку мыши;
Set Color - установка цвета объекта и его фона.
Панель Управления и Функциональная панель представляют собой структурированный набор иконных меню, предназначенных для доступа к библиотекам элементов интерфейса и соответствующих функций. Вызов необходимой панели осуществляется автоматически, при переключении между окном редактирования и интерфейсной панелью.
Используя Панель Управления, Вы можете устанавливать (добавлять) элементы управления и индикаторы. Каждая опция иконизированного меню
содержит подменю, в котором находятся соответствующие объекты. Вызывается из основного меню View>Controls Palette, рис. 9.
Рис. 9. Панель управления
Элементы Функциональной Панели используются для создания диаграмм, т.е. алгоритма работы VI. Функциональная панель содержит необходимые функции для работы с различными типами и структурами данных, и позволяет реализовывать алгоритмы любой сложности от простых арифметических вычислений до функционально сложных, таких, например, как спектральный анализ. Вызывается из основного меню View>Show
Functions Palette, рис. 10.
Рис. 10. Функциональная панель
Построение СМО в LabVIEW
Создание программы начните с окна редактирования диаграмм. Создайте прибор для инициализации очереди. Для этого на функциональной панели необходимо выбрать Programming>Synchronization>Queue Operation>Obtain Queue. Затем из Tools Palette выберите Connect Wire (катушка) и кликните правой кнопкой мыши на верхний вход прибора (max queue size), далее в появившемся контекстном меню выберите пункт create>control. Этот управляющий элемент также появится на интерфейсной панели, с помощью него будет задаваться количество пациентов, поступающих в поликлинику в день/час. Необходимо задать имя очереди. Для этого кликните правой кнопкой мыши на вход прибора name, затем выберите пункт создания константы create>constant, и в появившемся окошке введите имя очереди, например, 1. Также необходимо задать тип данных элемента - тип данных, которые должна содержать очередь. Для этого выберите Programming>Numeric>Numeric Constant (по умолчанию стоит «0») и подключите его к входу element data type. У Вас должен получиться прибор, как показан на рис. 11.
Рис. 11. Инициализация очереди
Очередь инициализирована. Далее необходимо определить порядок становления пациентов в очередь. Установите прибор Programming>Synchronization>Queue Operation>Enqueue Element и с помощью катушки соедините выходы queue out и error out из прибора Obtain queue к соответствующим входам прибора Enqueue Element. Так как пациент не один, необходима циклическая работа программы. Выберите из функциональной панели programming>structures>For Loop и выделите с помощью левой кнопки мыши прибор Enqueue Element. Чтобы пациенты становились в очередь по одному, перетяните «увеличение на 1» Programming>Numeric>increment. К входу x подключите значок «итерация цикла», а выход (x+1) пиктограммы подключите к входу Element прибора Enqueue Element. Пусть каждый пациент приходит в поликлинику через заданное время, например через 1 секунду. Для этого установите в цикл задержку. Выберите Programming>Timing>Wait (ms) и перетяните данную иконку в цикл. Создайте для нее константу, соответствующую этой задержке. Для этого подведите указатель в виде катушки к левой части иконки, нажмите правую кнопку мыши и выберете пункт создания константы Create>Constant. Чтобы количество итераций цикла было равно количеству пациентов, прибывающих в поликлинику, соедините выход управляющего элемента Numeric Control с пиктограммой N, как показано на рис. 12.
Рис. 12. Добавление элементов в очередь
В поликлинике имеется регистратура, через которую проходит каждый пациент. Чтобы установить регистратуру, для начала установите цикл While Loop, programming>structures>While Loop. Чтобы прочитывать элементы из очереди, то есть обслуживать пациентов, поместите в цикл While Loop прибор Dequeue Element, Programming>Synchronization>Queue Operation>Dequeue Element. Чтобы видеть, сколько обслужено пациентов, создайте соответствующий индикатор для прибора Dequeue Element – правой кнопкой мыши щелкните на выходе приборе Element и выберите пункт constant>indicator. С помощью инструмента Edit Text из панели инструментов поменяйте имя индикатора на «Обслужено пациентов». Установите время обслуживания пациентов с помощью прибора задержки Wait (ms) и присваивания этому прибору константы с нужным временем. Нажмите правой кнопкой мыши на иконку условия выхода из цикла (красная пиктограмма в нижнем правом углу цикла) и в выпадающем меню выберите пункт создания константы, по умолчанию стоит F-«false», то есть цикл будет работать без остановки. Соедините только что созданный прибор с ранее созданной очередью, как показано на рис. 13.
Рис. 13. Чтение из очереди
Чтобы видеть, сколько пациентов в данный момент находятся в очереди, используйте прибор Get Queue Status, Programming>Synchronization>Queue Operation>Get Queue Status. Поместите его в цикл While Loop и соедините с очередью. Кликните правой кнопкой мыши на левый вход Return Elements? (F) прибора Get Queue Status и выберите пункт Create>Constant. Return Elements? – отображает, возвращены ли элементы в очередь. По умолчанию установлено значение false – функция не будет возвращать элементы в очередь. Чтобы поменять значение на trough, выберите инструмент Operate Value из панели инструментов и щелкните левой кнопкой мыши на соответствующей пиктограмме. Для выходов Elements и # Elements in queue, которые находятся снизу у прибора Get Queue Status, создайте индикаторы, как показано на рис. 14.
Рис. 14. Количество элементов в очереди
После того, как пациент обслужился в регистратуре (получил номерок), он отправляется к врачу. Соответственно, к врачу формируется новая очередь. Аналогично первой, создайте вторую очередь и дайте ей имя, например, 2. Поместите прибор Enqueue Element в цикл While Loop с Dequeue Element. Подключите выход Element прибора Dequeue Element к входу Element прибора Enqueue Element – то есть пациенты, обслуженные регистратурой, становятся в очередь к врачу. Создайте цикл с Dequeue Element, такой же, как для первой очереди и подключите его ко второй очереди. Чтобы видеть, сколько пациентов находится в данный момент в очереди к врачу, создайте точно такой же цикл с Get Queue Status, как и в первой очереди, и подключите его ко второй очереди.
Чтобы время поступления пациентов в очередь и время обслуживания пациентов можно было устанавливать на интерфейсной панели, поменяйте constant у приборов задержки Wait (ms) на Control. Для этого кликните правой кнопкой мыши на константу и выберите Change to Control. Чтобы время задавалось в секундах, вставьте между управляющей пиктограммой и прибором Wait (ms) множитель (Programming>Numeric>Multiply) на 1000. В цикле с Dequeue Element необходима последовательность действий для правильной работы. Выберите Programming>Structure>Flat Sequence, поместите прибор Dequeue Element и прибор Wait (ms) внутрь Flat Sequence. Кликните на границе Flat Sequence правой кнопкой мыши, и выберите Add Frame и поместите во второй фрейм индикатор «обслужено пациентов». У Вас получится программа, как на рисунке 15.
Рис. 15. Модель СМО
На интерфейсной панели выделите индикатор Пациенты и растяните его вниз так, чтобы появилось несколько индикаторов. Кликните правой кнопкой мыши и выберите Visible Items>Unit Label. Для удобства восприятия на интерфейсной панели разместите управляющие элементы и индикаторы, относящиеся к регистратуре в одно окно, например, на панели управления выберите Controls>Modern>Decorations>Raised Frame, а относящиеся к врачу, в другое. В итоге должна получиться программа, как на рис.16.
Проверьте программу на работоспособность. Для этого установите время обслуживания пациентов в регистратуре и у врача, задайте необходимое количество пациентов и время пребывания пациента в очередь.
Рис. 16. Интерфейс программы.
Методические указания к выполнению лабораторной работы
На основе описания системы выявить её исходные характеристики (интенсивность входного потока, время обслуживания, длина очереди, интенсивность обслуживания).
Создать модель СМО в среде (“LabView”).
Оценить характеристики этой модели.
Оценить соответствие характеристик накладываемым ограничениям на исходную систему.
Выбрать способ модификации модели СМО для удовлетворения ограничениям.
Оценить характеристики полученной модели.
Внести адекватные изменения в исходную систему.