Теоретические основы
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. Интерфейс программы.
Методические указания к выполнению лабораторной работы
1) На основе описания системы выявить её исходные характеристики (интенсивность входного потока, время обслуживания, длина очереди, интенсивность обслуживания).
2) Создать модель СМО в среде (“LabView”).
3) Оценить характеристики этой модели.
4) Оценить соответствие характеристик накладываемым ограничениям на исходную систему.
5) Выбрать способ модификации модели СМО для удовлетворения ограничениям.
6) Оценить характеристики полученной модели.
|