Лекция 7. Разработка модульных приложений
Рисунок 7-6. Кадр Error SubVI
Избегайте использования Simple Error Handler VI и General Error Handler VI
внутри subVIs. При необходимости используйте их в главном VI, как показано на рисунке 7-7.
Рисунок 7-7. Блок-диаграммавызывающего VI
Создание SubVI из существующего VI
Вы можете упростить блок-диаграммуVI, преобразовав ее фрагменты в subVI. Используйте инструмент Positioning для выбора фрагмента блокдиаграммы, которую хотите использовать повторно, и вызовите из менюEdit»Create SubVI. На месте выбранного фрагментаблок-диаграммыпоявится иконка нового subVI. LabVIEW создает элементы управления и индикаторы для нового subVI, автоматически настраивает панель подключения в соответствии с количеством выбранных вами терминалов элементов управления и индикаторов и подключает subVI к существующим проводникам.
© National Instruments Corporation | 191 | Основы LabVIEW 1. Учебное пособие |
Лекция 7. Разработка модульных приложений
На рисунке 7-8показано преобразование выбранного фрагмента в subVI.
Рисунок 7-8. Создание нового SubVI
В новом subVI применяется шаблон панели подключения и иконка, используемые по умолчанию. Дважды щелкните по subVI для редактирования панели подключения и иконки и сохранения subVI.
Примечание: Не выделяйте более 28 объектов при создании subVI, поскольку 28 – максимальное число терминалов на панели подключения. Если вам нужно использовать более 28 элементов управления и индикаторов лицевой панели, сгруппируйте некоторые из них в кластер и назначьте кластеру терминал на панели подключения.
Основы LabVIEW 1. Учебное пособие | 192 | ni.com |
Лекция 7. Разработка модульных приложений
Самопроверка: короткий тест
1.Какая настройка терминала subVI может послужить причиной ошибки, если этот терминал не подключен?
a.Required (Обязательный)
b.Recommended (Рекомендованный)
c.Optional (Необязательный)
2.Вы должны создать специальную иконку для использования VI в качестве subVI.
a.Да
b.Нет
© National Instruments Corporation | 193 | Основы LabVIEW 1. Учебное пособие |
Лекция 7. Разработка модульных приложений
Самопроверка: ответы
1.Какая настройка терминала subVI может послужить причиной ошибки, если этот терминал не подключен?
a.Required (Обязательный)
b.Recommended (Рекомендованный)
c.Optional (Необязательный)
2.Вы должны создать специальную иконку для использования VI в качестве subVI.
a.Да
b.Нет
Нет необходимости создавать специальную иконку для использования VI в качестве subVI, но это настоятельно рекомендуется для того, чтобы ваш код был более читабельным.
Основы LabVIEW 1. Учебное пособие | 194 | ni.com |
Лекция 7. Разработка модульных приложений
Заметки
© National Instruments Corporation | 195 | Основы LabVIEW 1. Учебное пособие |
8
8. Общепринятая методика проектирования и шаблоны
Первым шагом создания проекта является изучение существующих в LabVIEW архитектур. Архитектуры жизненно необходимо для разработки успешного программного дизайна. Наиболее распространенные архитектуры обычно группируются в шаблоны проектирования.
По мере распространения шаблон проектирования, становится легче распознавать, где он был использован. Это поможет вам и другим разработчика читать и модифицировать VI, основанных на определенных шаблонах проектирования.
Для VI LabVIEW существует много шаблонов проектирования. В большинстве приложений используется, по крайней мере, один шаблон. В данном курсе вы изучите шаблон проектирования под названием конечный автомат. Вы можете узнать больше о шаблонах проектирования из курса
LabVIEW Core 2.
План занятия
A.Программирование последовательностей
B.Программирование состояний
C.Конечный автомат
D.Параллелизм
© National Instruments Corporation | 196 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
A. Программирование последовательностей
Многие VI, созданные вами в LabVIEW, выполняют задачи последовательно. Способы программирования этих задач могут значительно различаться. Рассмотрим блок-диаграммуна рисунке8-1.На ней измеряется напряжение, диалоговое окно предлагает пользователю включить питание, снова измеряется напряжение, пользователю предлагается выключить питание. Однако в этом примере ничто не задает порядок выполнения этих операций, и любое из них может выполниться первым.
Рисунок 8-1. Задачи, выполняемые не последовательно
В LabVIEW вы можете задать последовательное выполнение задач, поместив каждую задачу в отдельный subVI и соединив кластеры ошибок subVI в соответствии с желаемым порядком выполнения. Однако в этом примере только у двух задач есть кластеры ошибок. Вы сможете заставить выполняться в нужном порядке два DAQ Assistant, но не функции One Button Dialog, как показано на рисунке 8-2.
Рисунок 8-2. Задачи, частично выполняемые последовательно
Вы можете использовать структуру Sequence, чтобы задать порядок выполнения объектов на блок-диаграмме.Структура Sequence состоит из
Основы LabVIEW 1. Учебное пособие | 197 | ni.com |
Лекция 8. Методы проектирования и шаблоны
одной или несколько субдиаграмм, или фреймов, которые выполняются последовательно; второй фрейм не начнет выполняться, пока не будет выполнено все, что требуется в первом фрейме. На рисунке 8-3показан пример VI с использованием структуры Sequence для определения порядка выполнения.
Рисунок 8-3. Задачи, упорядоченные с помощью структуры Sequence
Чтобы воспользоваться преимуществами свойственного LabVIEW параллелизма, не злоупотребляйте использованием структур Sequence. Структуры Sequence гарантируют порядок выполнения, но запрещают параллельное выполнение операций. Еще один минус использования структур Sequence в том, что остановить выполнение последовательности на каком-либофрейме нельзя. Хороший пример использования структур Sequence показан на рисунке8-4.
Рисунок 8-4. Задачи, упорядоченные с помощью структур Sequence и кластеров ошибок
Однако лучший способ разработки такого VI – заключить функции One Button Dialog 2 в структуру Case, соединяя кластеры ошибок с селектором выбора структуры Case.
© National Instruments Corporation | 198 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Используйте структуры Sequence расчетливо, потому что они не выполняют принудительной проверки ошибок и продолжают выполняться даже при обнаружении ошибок. Для управления порядком выполнения полагайтесь больше на поток данных, а не на структуры sequence.
Рисунок 8-5.Задачи, упорядоченные с помощью кластера ошибок и структур Case
В. Программирование состояний
Хотя структуры Sequence или последовательно соединенные subVI решают задачу программирования последовательности, однако часто при реализации VI требуются более сложные способы программирования:
Что делать, если вам необходимо изменять порядок выполнения последовательности?
Что делать, если вам необходимо повторять один из элементов последовательности более часто, чем другие?
Что делать, если некоторые элементы последовательности нужно выполнять только при определенных условиях?
Что делать, если вам необходимо остановить программу немедленно, до завершения выполнения всей последовательности?
Хотя в вашей программе может не требоваться ничего из вышеперечисленного, всегда существует возможность модификации программы в будущем. Поэтому программирование на основе архитектуры конечных автоматов является хорошим выбором, даже если пока достаточно и программирования с использованием последовательной структуры.
С. Конечные автоматы
Конечный автомат – широко распространенный и очень полезный шаблон разработки в LabVIEW. Вы можете использовать конечный автомат для реализации любого алгоритма, который можно описать диаграммой состояний или блок-схемой.Конечный автомат обычно реализует умеренно сложный алгоритм принятия решений, например, программу диагностирования или наблюдения за процессом.
Конечный автомат состоит из набора состояний и функций перехода из текущего состояния в следующее. Существует много разновидностей
Основы LabVIEW 1. Учебное пособие | 199 | ni.com |
Лекция 8. Методы проектирования и шаблоны
конечных автоматов. Наиболее распространенные из них – автомат Мили и автомат Мура. Автомат Мили выполняет действие при каждом переходе. Автомат Мура выполняет определенное действие в каждом состоянии в диаграмме состояний-переходовШаблон проектирования конечных автоматов в LabVIEW реализует любой алгоритм, описываемый машиной Мура.
Применение конечных автоматов.
Используйте конечные автоматы в приложениях, где существуют различимые состояния. Из каждого состояния можно пеерйти в одно или несколько состояний, либо завершить поток процесса. В конечном автомате используются данные, введенные пользователем, или вычисленные для определения следующего состояния. Во многих приложениях требуется начальное состояние, за которым следует состояние по умолчанию, в котором могут производиться различные действия. Выполняемые действия могут зависеть как от предыдущих, так и от текущих значений входов и состояний. Состояние выключения часто производит также процедуру очистки.
Конечные автоматы часто используются для создания интерфейса пользователя. Различные действия оператора переводят пользовательский интерфейс в различные фрагменты обработки, выполняющие роль состояний конечного автомата. Каждый фрагмент может привести к другому фрагменту для продолжения обработки или подождать другого действия пользователя. В приложениях с пользовательским интерфейсом конечный автомат непрерывно наблюдает за действиями, которые выполняет пользователь.
Конечный автомат часто используют также в процедурах тестирования, в которых каждый этап процесса представляет собой состояние. В зависимости от результатов тестирования каждого состояния, может быть вызвано другое состояние. Это может происходить непрерывно, что позволяет провести углубленный анализ тестируемого процесса.
Преимущество использование конечных автоматов в том, что вы с легкостью создадите VI в LabVIEW после разработки диаграммы переходов.
Инфраструктура конечного автомата
Для перевода диаграммы переходов в блок-диаграммуLabVIEW требуются следующие инфраструктурные составляющие:
While Loop — непрерывное выполнение различных состояний
Case Structure — содержит фрейм с исполняемым кодом для каждого состояния
Shift Register — содержит информацию о переходах
State Functionality Code — реализует функциональность состояния
Transition Code — определяет следующее состояние в последовательности
© National Instruments Corporation | 200 | Основы LabVIEW 1. Учебное пособие |
studfiles.net
Урок10 Стандартные методы и образцы проектирования
C.Конечные автоматы
Конечный автомат является одним из самых распространенных и очень удобных образцов проектирования для LabVIEW. Его можно использовать для реализации любого алгоритма, который явно описывается диаграммой состояний или блок-схемой.Конечные автоматы обычно реализуют алгоритмы принятия решений умеренной сложности, например, для диагностики или управления процессами.
Конечный автомат (КА) описывается множеством состояний и функцией перехода из одного состояния в другое. Существует много разновидностей КА. Наиболее распространенными являются автомат Мили (Mealy) и автомат Мура (Moore). Автомат Мили выполняет действие при каждом переходе. Автомат Мура выполняет определенное действие в каждом состоянии. Шаблон образца конечного автомата, который есть в LabVIEW, позволяет реализовать любой алгоритм, описываемый автоматом Мура.
Конечные автоматы используются в тех приложениях, где существуют четко различимые состояния. Из каждого состояния можно перейти в одно или несколько других состояний, или завершить процесс. Переход в следующее состояние происходит в результате действий пользователя или вычислений в рамках текущего состояния. Для многих приложений первым должно быть состояние инициализации, за которым следует состояние по умолчанию, позволяющее выполнять много различных действий. Выбор того или иного действия зависит от предшествующих и текущих входных данных и состояний. В состоянии завершения работы обычно выполняются действия по освобождению ресурсов.
Конечные автоматы широко используются для создания пользовательских интерфейсов. Различные действия пользователя приводят к переходу в те или иные секции обработки. Каждая секция обработки эквивалентна состоянию КА. Каждый сегмент может передавать управление другому сегменту или ожидать дальнейших действий пользователя. Такой КА постоянно следит за пользователем, реагируя на его действия.
Другим распространенным применением образца КА является тестирование процессов. Здесь состоянием является каждый сегмент процесса. В зависимости от результата теста текущего состояния может быть выполнен переход в другое состояние. Это может происходить многократно, позволяя выполнять углубленный анализ тестируемого процесса.
Использование КА имеет то преимущество, что после создания диаграммы переходов можно сравнительно легко построить ВП.
Для перевода диаграммы переходов на язык блок-диаграммLabVIEW требуется следующие компоненты инфраструктуры:
• Цикл While — многократно повторяет различные состояния.
studfiles.net
Лекция 8. Методы проектирования и шаблоны
На рисунке 8-6показана базовая структура реализованного в LabVIEW конечного автомата системы измерения температуры.
Рисунок 8-6. Базовая инфраструктура конечного автомата LabVIEW
Поток диаграммы перехода реализован циклом While. Отдельные состояния представлены фреймами структуры Case. Сдвиговый регистр в цикле While хранит текущее состояния и передает его на вход структуры Case.
Управление конечными автоматами
Лучший способ управления инициализацией и переходами конечного автомата – использование элемента управления типа enumerated. Enums широко используются как селекторы выбора в конечном автомате. Однако, если пользователь предпринимает попытку добавить или удалить состояние из элемента управления типа enumerated, оставшиеся проводники, подключенные к копиями этого элемента управления, рвутся. Это одно из наиболее распространенных затруднений при реализации конечных автоматов на основе элементов управления типа enumerated. Одно из решений этой проблемы – создать определитель типа enumerated. Это заставляет все экземпляры элемента управления типа enumerated автоматически обновляться при добавлении или удалении состояния.
Переходы в конечных автоматах
Существует много способов управления тем, какой фрейм структуры Case будет выполняться в конечном автомате. Выбирайте метод, лучше всего подходящий для функциональности и сложности вашего конечного автомата. Из всех способов реализации переходов в конечном автомате наиболее простой и распространенный – единственная структура Case, которая может быть использована для переходов между любым количеством состояний. Этот способ обеспечивает масштабируемую, легкочитаемую и развиваемую архитектуру конечного автомата. Другие методы могут оказаться полезными в определенных ситуациях, поэтому вам имеет смысл ознакомиться и с ними.
Основы LabVIEW 1. Учебное пособие | 201 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Переход по умолчанию
Для перехода по умолчанию не требуется кода для определения следующего состояния, поскольку далее возможно только одно состояние. На рисунке 8- 7 показан шаблон разработки, в котором реализован переход по умолчанию для системы измерения температуры.
Рисунок 8-7. Единственный переход по умолчанию
Переход между двумя состояниями
Данный метод включает принятие решения о переходе между двумя состояниями. Существуют несколько шаблонов для реализации этого метода. На рисунке 8-8показана функция Select, используемая для перехода между двумя состояниями.
Рисунок 8-8. Код перехода с функцией Select
Этот метод хорошо работает, если вы точно знаете, что в определенном состоянии всегда выполняется переход в два других состояния. Однако этот метод ограничивает масштабируемость приложения. Если вам придется модифицировать приложение для перехода между более чем двумя состояниями, оно перестанет работать и потребует глобальной модификации кода перехода.
© National Instruments Corporation | 202 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Переход между двумя и более состояниями.
Для создания более масштабируемой архитектуры используйте один из следующих методов перехода между состояниями.
Case Structure — используйте структуру Case вместо функции Select для реализации кода перехода. На рисунке8-9показан переход с использованием структуры Case в системе измерения температуры.
Рисунок 8-9. Код перехода со структурой Case
Преимуществом использования структуры Case является самодокументированный код. Поскольку каждый фрейм структуры Case соответствует элементу в enum, код легок для чтения и понимания. Структура Case также масштабируется, поэтому по мере расширения приложения вы можете добавлять больше переходов в определенное состояние, добавляя для этого состояния фреймы в структуру Case. Недостатком использования структуры Case является невозможность увидеть весь код сразу. Из-заприроды структуры Case невозможно сразу увидеть всю функциональность кода перехода.
Transition Array (Массив переходов) – если вам необходимо увидеть больше кода, чем позволяет структура Case, вы можете создать массив переходов для всех переходов. На рисунке8-10показан массив переходов для системы измерения температуры.
Рисунок 8-10.Код перехода с массивом переходов
Основы LabVIEW 1. Учебное пособие | 203 | ni.com |
Лекция 8. Методы проектирования и шаблоны
В этом примере код принятия решений предоставляет индекс, который описывает следующее состояние. Например, если далее код должен перейти в состояние Error Handler, код принятия решений выдает 1 на индексный вход функции Index Array. Этот шаблон разработки делает код перехода масштабируемым и более простым для чтения.
Недостаток данного подхода в том, что вы должны разрабатывать код перехода с осторожностью, поскольку индексация в массиве начинается с нуля.
© National Instruments Corporation | 204 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Изучение структуры Case: курсовой проект
В данном курсовом проекте каждые полсекунды выполняется измерение температуры, анализируется, не является ли температура слишком высокой или слишком низкой и выдается предупреждение пользователю, если существует опасность теплового удара или обморожения. Программа записывает данные при возникновении предупреждения. Если пользователь не нажал кнопку «Стоп», весь процесс повторяется. На рисунке 8-11представлена диаграмма переходов для реализации курсового проекта
Рисунок 8-11.Диаграмма переходов для реализации курсового проекта
На рисунках с 8-12по8-15представлены состояния конечного автомата, реализующего показанную на рисунке8-11диаграмму переходов. Если вы инсталлировали упражнения и решения, проект находится в папке
<Exercises>\LabVIEW Core 1\Course Project, и вы можете подробно изучить этот конечный автомат.
Основы LabVIEW 1. Учебное пособие | 205 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Рисунок 8-12. Состояние измерения
Рисунок 8-13. Состояние анализа
© National Instruments Corporation | 206 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Рисунок 8-14. Состояние записи данных
Рисунок 8-15. Состояние проверки времени
D. Параллелизм
Часто вам необходимо запрограммировать несколько задач, которые должны выполняться одновременно. В LabVIEW задачи могут выполняться параллельно, если между ними нет зависимости по данным, и если они не используют один и тот же общий ресурс. Пример общего ресурса – файл или измерительный прибор.
Вы узнаете о шаблонах проектирования LabVIEW для выполнения нескольких задач параллельно в курсе LabVIEW Core 2. Этот шаблон проектирования включает параллельные циклы, архитектуру ведущий/ведомый и изготовитель/потребитель.
Основы LabVIEW 1. Учебное пособие | 207 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Самопроверка: короткий тест
1.При использовании структуры Sequence вы можете остановить выполнение на любой стадии последовательности.
a.Да
b.Нет
2.Какие из следующих преимуществ дает применение конечного автомата взамен последовательной структуры?
a.Вы можете изменять порядок выполнения в последовательности
b.Вы можете повторять отдельные элементы последовательности
c.Вы можете задать условия, которые определяют, когда должен выполняться элемент последовательности
d.Вы можете остановить выполнение программы в любом месте последовательности.
© National Instruments Corporation | 208 | Основы LabVIEW 1. Учебное пособие |
Самопроверка: ответы
1.При использовании структуры Sequence вы можете остановить выполнение на любой стадии последовательности.
a.Да
b.Нет
2.Какие из следующих преимуществ дает применение конечного автомата взамен последовательной структуры?
a.Вы можете изменять порядок выполнения в последовательности
b.Вы можете повторять отдельные элементы последовательности
c.Вы можете задать условия, которые определяют, когда должен выполняться элемент последовательности
d.Вы можете остановить выполнение программы в любом месте последовательности
© National Instruments Corporation | 209 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Заметки
© National Instruments Corporation | 210 | Основы LabVIEW 1. Учебное пособие |
studfiles.net
Лекция 7. Разработка модульных приложений
Рисунок 7-6. Кадр Error SubVI
Избегайте использования Simple Error Handler VI и General Error Handler VI
внутри subVIs. При необходимости используйте их в главном VI, как показано на рисунке 7-7.
Рисунок 7-7. Блок-диаграммавызывающего VI
Создание SubVI из существующего VI
Вы можете упростить блок-диаграммуVI, преобразовав ее фрагменты в subVI. Используйте инструмент Positioning для выбора фрагмента блокдиаграммы, которую хотите использовать повторно, и вызовите из менюEdit»Create SubVI. На месте выбранного фрагментаблок-диаграммыпоявится иконка нового subVI. LabVIEW создает элементы управления и индикаторы для нового subVI, автоматически настраивает панель подключения в соответствии с количеством выбранных вами терминалов элементов управления и индикаторов и подключает subVI к существующим проводникам.
© National Instruments Corporation | 191 | Основы LabVIEW 1. Учебное пособие |
Лекция 7. Разработка модульных приложений
На рисунке 7-8показано преобразование выбранного фрагмента в subVI.
Рисунок 7-8. Создание нового SubVI
В новом subVI применяется шаблон панели подключения и иконка, используемые по умолчанию. Дважды щелкните по subVI для редактирования панели подключения и иконки и сохранения subVI.
Примечание: Не выделяйте более 28 объектов при создании subVI, поскольку 28 – максимальное число терминалов на панели подключения. Если вам нужно использовать более 28 элементов управления и индикаторов лицевой панели, сгруппируйте некоторые из них в кластер и назначьте кластеру терминал на панели подключения.
Основы LabVIEW 1. Учебное пособие | 192 | ni.com |
Лекция 7. Разработка модульных приложений
Самопроверка: короткий тест
1.Какая настройка терминала subVI может послужить причиной ошибки, если этот терминал не подключен?
a.Required (Обязательный)
b.Recommended (Рекомендованный)
c.Optional (Необязательный)
2.Вы должны создать специальную иконку для использования VI в качестве subVI.
a.Да
b.Нет
© National Instruments Corporation | 193 | Основы LabVIEW 1. Учебное пособие |
Лекция 7. Разработка модульных приложений
Самопроверка: ответы
1.Какая настройка терминала subVI может послужить причиной ошибки, если этот терминал не подключен?
a.Required (Обязательный)
b.Recommended (Рекомендованный)
c.Optional (Необязательный)
2.Вы должны создать специальную иконку для использования VI в качестве subVI.
a.Да
b.Нет
Нет необходимости создавать специальную иконку для использования VI в качестве subVI, но это настоятельно рекомендуется для того, чтобы ваш код был более читабельным.
Основы LabVIEW 1. Учебное пособие | 194 | ni.com |
Лекция 7. Разработка модульных приложений
Заметки
© National Instruments Corporation | 195 | Основы LabVIEW 1. Учебное пособие |
8
8. Общепринятая методика проектирования и шаблоны
Первым шагом создания проекта является изучение существующих в LabVIEW архитектур. Архитектуры жизненно необходимо для разработки успешного программного дизайна. Наиболее распространенные архитектуры обычно группируются в шаблоны проектирования.
По мере распространения шаблон проектирования, становится легче распознавать, где он был использован. Это поможет вам и другим разработчика читать и модифицировать VI, основанных на определенных шаблонах проектирования.
Для VI LabVIEW существует много шаблонов проектирования. В большинстве приложений используется, по крайней мере, один шаблон. В данном курсе вы изучите шаблон проектирования под названием конечный автомат. Вы можете узнать больше о шаблонах проектирования из курса
LabVIEW Core 2.
План занятия
A.Программирование последовательностей
B.Программирование состояний
C.Конечный автомат
D.Параллелизм
© National Instruments Corporation | 196 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
A. Программирование последовательностей
Многие VI, созданные вами в LabVIEW, выполняют задачи последовательно. Способы программирования этих задач могут значительно различаться. Рассмотрим блок-диаграммуна рисунке8-1.На ней измеряется напряжение, диалоговое окно предлагает пользователю включить питание, снова измеряется напряжение, пользователю предлагается выключить питание. Однако в этом примере ничто не задает порядок выполнения этих операций, и любое из них может выполниться первым.
Рисунок 8-1. Задачи, выполняемые не последовательно
В LabVIEW вы можете задать последовательное выполнение задач, поместив каждую задачу в отдельный subVI и соединив кластеры ошибок subVI в соответствии с желаемым порядком выполнения. Однако в этом примере только у двух задач есть кластеры ошибок. Вы сможете заставить выполняться в нужном порядке два DAQ Assistant, но не функции One Button Dialog, как показано на рисунке 8-2.
Рисунок 8-2. Задачи, частично выполняемые последовательно
Вы можете использовать структуру Sequence, чтобы задать порядок выполнения объектов на блок-диаграмме.Структура Sequence состоит из
Основы LabVIEW 1. Учебное пособие | 197 | ni.com |
Лекция 8. Методы проектирования и шаблоны
одной или несколько субдиаграмм, или фреймов, которые выполняются последовательно; второй фрейм не начнет выполняться, пока не будет выполнено все, что требуется в первом фрейме. На рисунке 8-3показан пример VI с использованием структуры Sequence для определения порядка выполнения.
Рисунок 8-3. Задачи, упорядоченные с помощью структуры Sequence
Чтобы воспользоваться преимуществами свойственного LabVIEW параллелизма, не злоупотребляйте использованием структур Sequence. Структуры Sequence гарантируют порядок выполнения, но запрещают параллельное выполнение операций. Еще один минус использования структур Sequence в том, что остановить выполнение последовательности на каком-либофрейме нельзя. Хороший пример использования структур Sequence показан на рисунке8-4.
Рисунок 8-4. Задачи, упорядоченные с помощью структур Sequence и кластеров ошибок
Однако лучший способ разработки такого VI – заключить функции One Button Dialog 2 в структуру Case, соединяя кластеры ошибок с селектором выбора структуры Case.
© National Instruments Corporation | 198 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Используйте структуры Sequence расчетливо, потому что они не выполняют принудительной проверки ошибок и продолжают выполняться даже при обнаружении ошибок. Для управления порядком выполнения полагайтесь больше на поток данных, а не на структуры sequence.
Рисунок 8-5.Задачи, упорядоченные с помощью кластера ошибок и структур Case
В. Программирование состояний
Хотя структуры Sequence или последовательно соединенные subVI решают задачу программирования последовательности, однако часто при реализации VI требуются более сложные способы программирования:
Что делать, если вам необходимо изменять порядок выполнения последовательности?
Что делать, если вам необходимо повторять один из элементов последовательности более часто, чем другие?
Что делать, если некоторые элементы последовательности нужно выполнять только при определенных условиях?
Что делать, если вам необходимо остановить программу немедленно, до завершения выполнения всей последовательности?
Хотя в вашей программе может не требоваться ничего из вышеперечисленного, всегда существует возможность модификации программы в будущем. Поэтому программирование на основе архитектуры конечных автоматов является хорошим выбором, даже если пока достаточно и программирования с использованием последовательной структуры.
С. Конечные автоматы
Конечный автомат – широко распространенный и очень полезный шаблон разработки в LabVIEW. Вы можете использовать конечный автомат для реализации любого алгоритма, который можно описать диаграммой состояний или блок-схемой.Конечный автомат обычно реализует умеренно сложный алгоритм принятия решений, например, программу диагностирования или наблюдения за процессом.
Конечный автомат состоит из набора состояний и функций перехода из текущего состояния в следующее. Существует много разновидностей
Основы LabVIEW 1. Учебное пособие | 199 | ni.com |
Лекция 8. Методы проектирования и шаблоны
конечных автоматов. Наиболее распространенные из них – автомат Мили и автомат Мура. Автомат Мили выполняет действие при каждом переходе. Автомат Мура выполняет определенное действие в каждом состоянии в диаграмме состояний-переходовШаблон проектирования конечных автоматов в LabVIEW реализует любой алгоритм, описываемый машиной Мура.
Применение конечных автоматов.
Используйте конечные автоматы в приложениях, где существуют различимые состояния. Из каждого состояния можно пеерйти в одно или несколько состояний, либо завершить поток процесса. В конечном автомате используются данные, введенные пользователем, или вычисленные для определения следующего состояния. Во многих приложениях требуется начальное состояние, за которым следует состояние по умолчанию, в котором могут производиться различные действия. Выполняемые действия могут зависеть как от предыдущих, так и от текущих значений входов и состояний. Состояние выключения часто производит также процедуру очистки.
Конечные автоматы часто используются для создания интерфейса пользователя. Различные действия оператора переводят пользовательский интерфейс в различные фрагменты обработки, выполняющие роль состояний конечного автомата. Каждый фрагмент может привести к другому фрагменту для продолжения обработки или подождать другого действия пользователя. В приложениях с пользовательским интерфейсом конечный автомат непрерывно наблюдает за действиями, которые выполняет пользователь.
Конечный автомат часто используют также в процедурах тестирования, в которых каждый этап процесса представляет собой состояние. В зависимости от результатов тестирования каждого состояния, может быть вызвано другое состояние. Это может происходить непрерывно, что позволяет провести углубленный анализ тестируемого процесса.
Преимущество использование конечных автоматов в том, что вы с легкостью создадите VI в LabVIEW после разработки диаграммы переходов.
Инфраструктура конечного автомата
Для перевода диаграммы переходов в блок-диаграммуLabVIEW требуются следующие инфраструктурные составляющие:
While Loop — непрерывное выполнение различных состояний
Case Structure — содержит фрейм с исполняемым кодом для каждого состояния
Shift Register — содержит информацию о переходах
State Functionality Code — реализует функциональность состояния
Transition Code — определяет следующее состояние в последовательности
© National Instruments Corporation | 200 | Основы LabVIEW 1. Учебное пособие |
studfiles.net
Лекция 8. Методы проектирования и шаблоны
На рисунке 8-6показана базовая структура реализованного в LabVIEW конечного автомата системы измерения температуры.
Рисунок 8-6. Базовая инфраструктура конечного автомата LabVIEW
Поток диаграммы перехода реализован циклом While. Отдельные состояния представлены фреймами структуры Case. Сдвиговый регистр в цикле While хранит текущее состояния и передает его на вход структуры Case.
Управление конечными автоматами
Лучший способ управления инициализацией и переходами конечного автомата – использование элемента управления типа enumerated. Enums широко используются как селекторы выбора в конечном автомате. Однако, если пользователь предпринимает попытку добавить или удалить состояние из элемента управления типа enumerated, оставшиеся проводники, подключенные к копиями этого элемента управления, рвутся. Это одно из наиболее распространенных затруднений при реализации конечных автоматов на основе элементов управления типа enumerated. Одно из решений этой проблемы – создать определитель типа enumerated. Это заставляет все экземпляры элемента управления типа enumerated автоматически обновляться при добавлении или удалении состояния.
Переходы в конечных автоматах
Существует много способов управления тем, какой фрейм структуры Case будет выполняться в конечном автомате. Выбирайте метод, лучше всего подходящий для функциональности и сложности вашего конечного автомата. Из всех способов реализации переходов в конечном автомате наиболее простой и распространенный – единственная структура Case, которая может быть использована для переходов между любым количеством состояний. Этот способ обеспечивает масштабируемую, легкочитаемую и развиваемую архитектуру конечного автомата. Другие методы могут оказаться полезными в определенных ситуациях, поэтому вам имеет смысл ознакомиться и с ними.
Основы LabVIEW 1. Учебное пособие | 201 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Переход по умолчанию
Для перехода по умолчанию не требуется кода для определения следующего состояния, поскольку далее возможно только одно состояние. На рисунке 8- 7 показан шаблон разработки, в котором реализован переход по умолчанию для системы измерения температуры.
Рисунок 8-7. Единственный переход по умолчанию
Переход между двумя состояниями
Данный метод включает принятие решения о переходе между двумя состояниями. Существуют несколько шаблонов для реализации этого метода. На рисунке 8-8показана функция Select, используемая для перехода между двумя состояниями.
Рисунок 8-8. Код перехода с функцией Select
Этот метод хорошо работает, если вы точно знаете, что в определенном состоянии всегда выполняется переход в два других состояния. Однако этот метод ограничивает масштабируемость приложения. Если вам придется модифицировать приложение для перехода между более чем двумя состояниями, оно перестанет работать и потребует глобальной модификации кода перехода.
© National Instruments Corporation | 202 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Переход между двумя и более состояниями.
Для создания более масштабируемой архитектуры используйте один из следующих методов перехода между состояниями.
Case Structure — используйте структуру Case вместо функции Select для реализации кода перехода. На рисунке8-9показан переход с использованием структуры Case в системе измерения температуры.
Рисунок 8-9. Код перехода со структурой Case
Преимуществом использования структуры Case является самодокументированный код. Поскольку каждый фрейм структуры Case соответствует элементу в enum, код легок для чтения и понимания. Структура Case также масштабируется, поэтому по мере расширения приложения вы можете добавлять больше переходов в определенное состояние, добавляя для этого состояния фреймы в структуру Case. Недостатком использования структуры Case является невозможность увидеть весь код сразу. Из-заприроды структуры Case невозможно сразу увидеть всю функциональность кода перехода.
Transition Array (Массив переходов) – если вам необходимо увидеть больше кода, чем позволяет структура Case, вы можете создать массив переходов для всех переходов. На рисунке8-10показан массив переходов для системы измерения температуры.
Рисунок 8-10.Код перехода с массивом переходов
Основы LabVIEW 1. Учебное пособие | 203 | ni.com |
Лекция 8. Методы проектирования и шаблоны
В этом примере код принятия решений предоставляет индекс, который описывает следующее состояние. Например, если далее код должен перейти в состояние Error Handler, код принятия решений выдает 1 на индексный вход функции Index Array. Этот шаблон разработки делает код перехода масштабируемым и более простым для чтения.
Недостаток данного подхода в том, что вы должны разрабатывать код перехода с осторожностью, поскольку индексация в массиве начинается с нуля.
© National Instruments Corporation | 204 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Изучение структуры Case: курсовой проект
В данном курсовом проекте каждые полсекунды выполняется измерение температуры, анализируется, не является ли температура слишком высокой или слишком низкой и выдается предупреждение пользователю, если существует опасность теплового удара или обморожения. Программа записывает данные при возникновении предупреждения. Если пользователь не нажал кнопку «Стоп», весь процесс повторяется. На рисунке 8-11представлена диаграмма переходов для реализации курсового проекта
Рисунок 8-11.Диаграмма переходов для реализации курсового проекта
На рисунках с 8-12по8-15представлены состояния конечного автомата, реализующего показанную на рисунке8-11диаграмму переходов. Если вы инсталлировали упражнения и решения, проект находится в папке
<Exercises>\LabVIEW Core 1\Course Project, и вы можете подробно изучить этот конечный автомат.
Основы LabVIEW 1. Учебное пособие | 205 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Рисунок 8-12. Состояние измерения
Рисунок 8-13. Состояние анализа
© National Instruments Corporation | 206 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Рисунок 8-14. Состояние записи данных
Рисунок 8-15. Состояние проверки времени
D. Параллелизм
Часто вам необходимо запрограммировать несколько задач, которые должны выполняться одновременно. В LabVIEW задачи могут выполняться параллельно, если между ними нет зависимости по данным, и если они не используют один и тот же общий ресурс. Пример общего ресурса – файл или измерительный прибор.
Вы узнаете о шаблонах проектирования LabVIEW для выполнения нескольких задач параллельно в курсе LabVIEW Core 2. Этот шаблон проектирования включает параллельные циклы, архитектуру ведущий/ведомый и изготовитель/потребитель.
Основы LabVIEW 1. Учебное пособие | 207 | ni.com |
Лекция 8. Методы проектирования и шаблоны
Самопроверка: короткий тест
1.При использовании структуры Sequence вы можете остановить выполнение на любой стадии последовательности.
a.Да
b.Нет
2.Какие из следующих преимуществ дает применение конечного автомата взамен последовательной структуры?
a.Вы можете изменять порядок выполнения в последовательности
b.Вы можете повторять отдельные элементы последовательности
c.Вы можете задать условия, которые определяют, когда должен выполняться элемент последовательности
d.Вы можете остановить выполнение программы в любом месте последовательности.
© National Instruments Corporation | 208 | Основы LabVIEW 1. Учебное пособие |
Самопроверка: ответы
1.При использовании структуры Sequence вы можете остановить выполнение на любой стадии последовательности.
a.Да
b.Нет
2.Какие из следующих преимуществ дает применение конечного автомата взамен последовательной структуры?
a.Вы можете изменять порядок выполнения в последовательности
b.Вы можете повторять отдельные элементы последовательности
c.Вы можете задать условия, которые определяют, когда должен выполняться элемент последовательности
d.Вы можете остановить выполнение программы в любом месте последовательности
© National Instruments Corporation | 209 | Основы LabVIEW 1. Учебное пособие |
Лекция 8. Методы проектирования и шаблоны
Заметки
© National Instruments Corporation | 210 | Основы LabVIEW 1. Учебное пособие |
studfiles.net
В относительно небольшой статье мне хотелось бы рассказать о языке программирования LabVIEW. Этот весьма любопытный продукт к сожалению не пользуется широкой популярностью, и мне хотелось бы в некоторой степени восполнить имеющийся пробел.
Что же такое «LabVIEW»?
LabVIEW — это один из основных продуктов компании National Instruments. Прежде всего надо отметить, что LabVIEW — это аббревиатура, которая расшифровывается как Laboratory Virtual Instrumentation Engineering Workbench. Уже в названии прослеживается ориентация на лабораторные исследования, измерения и сбор данных. Действительно, построить SCADA — систему в LabVIEW несколько проще чем при использовании «традиционных» средств разработки. В данной статье мне хотелось бы показать, что возможная область применения LabVIEW несколько шире. Это принципиально иной язык программирования, или если хотите целая «философия» программирования. Функциональный язык, заставляющий несколько иначе мыслить и порой предоставляющий совершенно фантастические возможности для разработчика. Является ли LabVIEW языком программирования вообще? Это спорный вопрос — здесь нет стандарта, как, например ANSI C. В узких кругах разработчиков мы говорим, что пишем на языке «G». Формально такого языка не существует, но в этом и заключается прелесть этого средства разработки: от версии к версии в язык вводятся всё новые конструкции. Сложно представить, что в следующей реинкарнации Си появится, например, новая структура для for-цикла. А в LabVIEW такое вполне возможно.
Впрочем надо заметить, что LabVIEW входит в рейтинг языков программирования TIOBE, занимая на данный момент тридцатое место — где-то между Прологом и Фортраном.
В Остине и по сегодняшний день располагается головной офис компании. Сегодня в компании работают почти четыре тысячи человек, а офисы находятся почти в сорока странах (есть также офис и в России)
Вообще говоря, довольно сложно сравнивать графический и текстовый языки программирования. Это, пожалуй, сравнение из разряда «PC» против «MAC» или «Windows» против «Linux» — можно спорить сколько угодно, но спор абсолютно лишён смысла — каждая система имеет право на существование и у каждой найдутся как сторонники так и противники, кроме того у каждого продукта своя ниша. LabVIEW – всего лишь инструмент, хотя и весьма гибкий.
LabVIEW — весьма высокоуровневый язык. Однако ничто не мешает включать «низкоуровневые» модули в LabVIEW-программы. Даже если вы хотите использовать ассемблерные вставки — это тоже возможно, надо лишь сгенерировать DLL и вставить вызовы в код. С другой стороны, высокоуровневый язык позволяет запросто производить весьма нетривиальные операции с данными, на которые в обычном языке могли уйти многие строки (если не десятки строк) кода. Впрочем, ради справедливости надо отметить, что некоторые операции низкоуровневых языков (например, работу с указателями), не так просто реализовать в LabVIEW ввиду его «высокоуровневости». Разумеется, язык LabVIEW включает основные конструкции управления, имеющие аналоги и в «традиционных» языках:
В основе LabVIEW лежит парадигма потоков данных. В вышеприведённом примере константа и терминал индикатора соединены между собой линией. Эта линия называется Wire. Можно назвать её «проводом». По проводам передаются данные от одних элементов другим. Вся эта концепция называется Data Flow. Суть Блок Диаграммы — это узлы (ноды), выходы одних узлов присоединены ко входам других узлов. Узел начнёт выполнение только тогда, когда прибудут все необходимые для работы данные. На диаграмме вверху две ноды. Одна из них — константа. Этот узел самодостаточен — он начинает выполнение немедленно. Второй узел — индикатор. Он отобразит данные, которые передаёт константа (но не сразу, а как только данные прибудут от константы).
Вот чуть более сложный пример: сложение и умножение двух чисел. В традиционных языках мы напишем что-то вроде
int a, b, sum, mul;
//...
sum = a + b;
mul = a * b;
Вот как это выглядит в LabVIEW:
Обратите внимание на то, что сложение и умножение автоматически выполняются параллельно. На двухпроцессорной машине будут автоматически задействованы оба процессора.
А вот как выглядят while / for циклы и if / then / else структура:
Как уже упоминалось, все элементы будут выполняться параллельно. Вам не нужно задумываться о том, как распараллелить задачу на несколько потоков, которые можно выполнять параллельно на нескольких процессорах. В последних версиях можно даже явно указать на каком из процессоров должен выполняться тот или иной while-цикл. Сейчас существуют надстройки и для текстовых языков, позволяющие запросто добиться поддержки многопроцессорных систем, однако так просто, как на LabVIEW, это пожалуй нигде не реализовано. (ну вот, я всё же скатился на сравнение с текстовыми языками). Если уж мы заговорили о многопоточности, то надо также отметить, что в распоряжении разработчика богатый выбор инструментов для синхронизации потоков — семафоры, очереди, рандеву, и т.д.
LabVIEW включает в себя богатые наборы элементов для построения пользовательских интерфейсов. Уж на что быстро «набрасывались» интерфейсы в Дельфи, а в LabVIEW этот процесс происходит ещё стремительнее.
Стандартная поставка LabVIEW включает в себя также блоки для работы с ini файлами, реестром, функции для работы с двоичными и тестовыми файлами, математические функции, мощные инструменты для построения графиков (а куда же без этого в лаборатории-то), а в дополнение к уже упомянутой возможности вызовов DLL, LabVIEW позволяет работать с ActiveX компонентами и .net. Начиная с восьмой версии в LabVIEW была добавлена поддержка классов — язык стал объектно-ориентированным. Реализованную поддержку нельзя назвать полной, однако основные черты объектно-ориентированных языков — наследование и полиморфизм присутствуют. Также функциональность языка можно расширить дополнительными модулями, например NI Vision Toolkit – для обработки изображений и машинного зрения и другие. А при помощи модуля Applcation Builder можно сгенерировать исполняемый exe-файл. С помощью Internet Toolkit можно работать с ftp серверами, c помощью Database Connectivity Toolkit — с базами данных и т.д.
Часто можно услышать мнение, что графический код плохо читаем. Действительно, с непривычки обилие иконок и проводников несколько шокирует. Также начинающие разработчики создают программы-«простыни» и программы-«спагетти». Однако опытный LabVIEW-разработчик никогда не создаст диаграмм, превышающих размер экрана, даже если программа состоит из сотен модулей. Хорошо разработанная программа фактически «самодокументируется», поскольку в основе уже лежит графическое представление.
Довольно долгое время, программируя на LabVIEW, я пребывал в полной уверенности, что LabVIEW — это интерпретатор и блок-диаграммы постоянно интерпретируются ядром. После разговоров с инженерами NI выяснилось, что это не так. LabVIEW — это компилятор (качество кодогенерации, впрочем оставляет желать лучшего). Зато компиляция происходит «на лету» — в любой момент разработки программа всегда готова к запуску. Также LabVIEW-код может быть скомпилирован в полноценный исполнямый файл, который может быть запущен на компьютере без установленной LabVIEW (правда он требует LabVIEW Run-Time). Также можно собрать установочный пакет-инсталлятор, сторонних утилит типа InstallShield при этом не требуется.
Дальнейшее и более детальное описание возможностей пакета выходит за рамки данной статьи, я же просто предлагаю попробовать (ссылки даны ниже). Как говорили великие «… единственный способ освоить новый язык программирования — писать на нём программы». Ну а опытные программисты смогут экстраполировать полученные знания на свои собственные нужды.
habr.com
Практически у всех разработчиков устройств на микроконтроллерах, будь то любители или профессионалы, рано или поздно возникает необходимость подключить микроконтроллерный девайс к его «старшему брату», а именно к PC. Вот тогда и встает вопрос, а какой софт использовать для обмена с микроконтроллером, анализировать и обрабатывать полученные от него данные? Часто для обмена МК с компьютером используют интерфейс и протокол RS232 — старый добрый COM порт в той или иной реализации.
На стороне компьютера применяют различные терминальные программы, коих сотни. Но эти программы обеспечивают лишь прием и передачу информации. Как то обрабатывать и визуализировать ее в наглядной форме затруднительно.
Некоторые пишут подобное ПО самостоятельно на каком либо языке программирования (Delphi, C++), наделяя необходимым функционалом. Но эта задача не из легких, нужно знать, помимо самого языка, устройство операционной системы, способы работы с комуникационными портами, множество других технических тонкостей, которые отвлекают от главного — реализации алгоритма программы. В общем, быть попутно еще Windows/Unix программистом.
На фоне этих подходов резко отличается концепция виртуальных приборов (vi). В этой статье пойдет речь о программном продукте LabView фирмы Nationals Instruments. Я только начинаю осваивать этот замечательный продукт, поэтому могу допускать неточности и ошибки. Спецы поправят :-)) Собственно что такое LabView?
LabView — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments.
Говоря простым языком, LabView — Это среда создания приложений для задач сбора, обработки, визуализации информации от различных приборов, лабораторных установок и т.п. А также для управления технологическими процессами и устройствами. Однако с помощью LabView можно создавать вполне себе обычное прикладное ПО. У меня нет цели подробно описывать этот продукт и работу с ним. По LabView написаны тысячи страниц отличной документации и сотни книг. В интернете полно ресурсов, посвященных LabView, на которых можно получить ответы на все вопросы.
Цель статьи — показать насколько просто и удобно, по сравнению с традиционным программированием, можно создавать приложения для ПК и какую мощь несет в себе LabView. (На самом деле спорно, т.к. в традиционном программировании, на той же Delphi сделать не сложней. И по эффективности вряд ли хуже, если не лучше. Но для этого дельфу надо гораздо дольше изучать. Тут же все быстро и понятно почти сразу. Пару методичек проштудировал и вперед городить циферблаты всякие. Так что для программистов оно как собаке пятая нога, а вот таким далеким от компа товарищам как я — самое то. Я когда то, за полчаса, впервые увидев LabView, по тоненькой методичке сваял зверскую систему управления поливом и отоплением для конопляной теплицы. С ПИД регуляторами всякими. Вывел на потенциометры и датчики лабораторного стенда, что стоял в нашем технаре и запустил этот адский агрегат. Причем все заработало сразу, без отладки. Кстати, на LabView работает вся аппаратура адронного коллайдера, а также очень много научной аппаратуры. прим. DI HALT) Ведь большинству электронщиков чуждо программирование для PC, верно? Вот это мы и попробуем исправить. Дабы не изучать сферических вакуумных коней, поставим для себя и реализуем простенькую задачу. Задача действительно проста, но на основе нее можно понять основные принципы программирования в LabView. Мы будем использовать LabView версии 2010. Для других версий отличия будут минимальны.
Задача
У нас есть плата с микроконтроллером AVR, соединенная с компьютером по RS232. В контроллер залита прошивка, согласно которой контроллер измеряет значение напряжения на одном из входов АЦП, и передает код АЦП (от 0 до 1023) в компьютер по последовательному каналу. Необходимо написать программу для ПК, которая будет принимать поток данных от АЦП, отображать код АЦП, преобразовывать код АЦП в значение напряжения в вольтах, отображать значение напряжения в вольтах, строить график изменения напряжения во времени.
Ну наверное хватит лирики, начнем пожалуй!
Итак что нам потребуется для работы:
Первым делом нам нужно убедится, что VISA нашла в системе COM порт и корректно с ним работает. Проверить это можно так: запускаем программу Measurement & Automation. Она ставится вместе с LabView. Если она не установилась, установить можно вручную. На диске (образе с LabView она есть).
В левой части окна мы видим оборудование, обнаруженное в системе. Среди всего прочего находим наш COM порт. Справа есть кнопка Open Visa test panel. С помощью нее можно протестировать выбранное устройство. В случае с COM портом там можно отправить или принять заданную по умолчанию или произвольную последовательность символов. Если с портом все в порядке, можно приступать к непосредственно созданию нашей программы.
Запускаем LabView. В окне Getting Started выбираем пункт Blank Vi, тобишь новый виртуальный прибор.
Получаем вот такую штуку:
Итак что мы имеем. Рабочая область состоит из двух больших панелей Front Panel и Block Diagram. На лицевой панели мы будем составлять интерфейс нашей программы, используя элементы управления с панели Controls. Эти элементы представляют собой привычные нам ручки переменных резисторов, светодиоды, кнопки, стрелочные приборы, экран осциллографа и т.п. Они служат для ввода информации в программу и отображения результатов выполнения. На панели Block Diagram распологается непосредственно программный код. Тут надо немного отступить и пояснить принцип программирования на LabView. Небольшой пример. Принято работу над прогой начинать с оформления интерфейса, а затем реализации алгоритма работы на блок-диаграмме. Сделаем простейшую прогу умножения двух чисел. Для этого разместим на лицевой панели путем перетаскивания три элемента управления, скажем элементы Knob и Numeric Indicator для отображения результата.
Сформируем интерфейс как душа пожелает, например вот так:
Ок, теперь нам необходимо реализовать собственно умножение. Переходим на панель Block diagram и видим что для каждого из наших контролов создался соответствующий значек. Лучше всего сразу перевести режим отображения в виде терминалов. Не будет так загромождаться диаграмма. Кроме того в терминалах виден тип данных, которыми оперирует тот или иной контрол. Для этого щелкаем ПКМ по значку и снимаем галку View as icon. Вверху на скрине контрол в виде терминала, внизу и справа в виде иконки. Для того чтобы настроить вид на блок-диаграмме в виде терминалов по умолчанию, нужно выбрать пункт меню Tools->Options, слева выбрать Block diagram и снять галку Place front panel terminals as icons. Очень полезно вывести контекстной справки. Вывести его можно комбинацией Ctrl+H. В этом окошке отображается информация о объекте на котором в данный момент налодится курсор. Мега удобная вещь.
Теперь нужно добавить на блок-диаграмму функцию умножения. Щелкаем ПКМ на блок-диаграмме и из палитры Numeric выбираем функцию умножения Multiply. Преносим ее на диаграмму. Стоит заметить, что LabView имеет просто огромный набор функций. Это и различная математика, статистика, анализ сигналов, PID регулирование, обработка видео, звука и изображений. Всего не перечислишь.
Важнейшей концепцией программирования на LabView является концепция потоков данных DataFlow. Суть такова: В отличие от императивных языков программирования, где операторы выполняются в порядке следования, в LabView функции работают только если на всех входах функции есть информация (каждая функция имеет входные и выходные значения). Только тогда функция реализует свой алгоритм, а результат направляет на выход, который может быть использован другой функцией. Таким образом в пределах одного виртуального прибора функции могут работать независимо друг от друга.
Теперь, для того чтобы оживить наш примерчик, нам необходимо последовать этой концепции и подать на вход функции числовые значения, которые мы устанавливаем контролами, а с выхода получить результат и отобразить его.
Для соединения элементов на блок-диаграмме используется инструмент Connect Wire с панели Tools. Выбираем его и рисуем наши соединения.
Собственно все, можно запустить эту тупую программку на циклическое выполнение и покрутить ручки, наблюдая результат умножения.
Как видно, ничего сложного вроде бы нет. Но в то же время LabView позволяет решать задачи любой сложности! Епт, система управления БАК на нем сделана! Так то.
Ну а теперь займемся более интересными вещами, а именно сделаем наш простейший вольтметр, о котором я говорил в самом начале.
Итак, что нам необходимо сделать. Сначала нужно настроить и проинициализировать последовательный порт. Запустить бесконечный цикл . В цикле мы используем функцию чтения из порта и принимаем информацию. Преобразуем инфу для отображения на графике, пересчитываем код АЦП в значение напряжения в вольтах. При выходе из цикла закрываем порт.
Так в интерфейсе нашей проги не будет никаких управляющих элементов кроме кнопки Стоп, а будет лишь отображение результата, мы поступим так: сначала создадим блок-диаграмму, а потом добавим недостающие элементы на лицевую панель. Хотя делать нужно наоборот! Но в данном случае так удобнее.
На панели блок-диаграммы помещаем из палитры Structures элемент While Loop, это наш бесконечный цикл. Обводим рамкой цикла область, достаточную для размещения внутри алгоритма. В правом нижнем углу есть красная точка, щелкнем по ней ПКМ и выберем Create Control. На лицевой панели у нас тут же появится кнопка Stop. При щелчке на ней наша прога завершится.
Теперь вне цикла мы должны разместить функции инициализации и закрытия порта. Слева инициализация, справа закрытие. Опять же щелкаем ПКМ и выбираем функции Configure Port, Read и Close. Эти функции находятся в палитре Instrument I/O —> Serial. Функцию чтения помещаем внутрь цикла. Соединяем с помощью катушки с проводами выходы и входы функций. Для функции Read мы должны задать количество байт, которая она будет принимать. Щелкаем ПКМ на среднем входе функции Read и выбираем Create->Constant, вводим значение, например 200. На данном этапе должно получится как на скрине.
Нужно создать контролы для функции инициализации порта. Нам вполне хватит двух — скорость порта и имя порта. Точно так же как мы создавали константу для функции чтения, создаем контролы. ПКМ на нужных входах функции инициализации и пункт
Нас интересуют два входа: Visa resourse name и Baud Rate (по умолчанию 9600). Таперь перейдем на лицевую панель и добавим необходимые компоненты, а именно экран отрисовки графика и метки для отображения кода АЦП и напряжения в вольтах.
Соответственно это элементы Waweform Chart c палитры Graph и два элемента Numeric Indicator с палитры Numeric.
Вернемся к блок-диаграмме и переместим появившиеся элементы внутрь цикла. Мы близимся к завершению! Единственное, нам нужно еще преобразовать строку символов, поступающих с выхода функции Read к формату, который переварят наши индикаторы. И еще реализовать простейшую математику по переводу кода АЦП в вольты. Ниже скрины лицевой панели и блок-диаграммы на данном этапе:
Для преобразования строки мы воспользуемся функцией Scan from string из палитры String. Помещаем ее внутрь цикла. Теперь математика. Для того чтобы преобразовать код АЦП в значение напряжения в вольтах нужно умножить код на величину опорного напряжения (в моем случае это пять вольт) и получившееся значение разделить на 1023 (так как АЦП имеет разрядность 10 бит). Необходимые функции умножения и деления, а также константы (5 и 1023) разместим в цикле. Скрины каждого соединения делать не буду, ибо и так картинок дофига. Приведу финальный скрин всех соединений. Там все предельно просто.
Я думаю все понятно, если будут вопросы спрашивайте в каментах. Вместе разберемся :-))) Тем временем прога готова.
Перейдем к нашему интерфейсу и немного настроим график. Выделим нижнее значение по оси Y и поставим 0. Выделем верхнее и поставим 5. Таким образом наша шкала по оси Y в диапазоне 0-5 вольт. Ну что, выбираем COM порт, вводим скорость обмена, запускаем по кнопке со стрелкой нашу прогу и яростно крутим резистор на плате, невозбранно наблюдая при этом на экране результат нашего труда. Щелкаем на кнопке Stop чтобы остановить прогу.
Как видите все достаточно просто. Данный пример это лишь мизерная часть всех возможностей LabView. Если кому поможет данная статья, буду рад. Только в коментах сильно не бейте я же не профи. Еще один маленький трюк. Если диаграмма стала похожа на Ктулху, можно попробовать воспользоваться кнопкой CleanUp Diagram. Она приведет диаграмму в более-менее божеский вид, но пользоваться надо осторожно. Вот результат ее работы
А еще можно куски объединять в функциональные блоки, чтобы они не загромождали схему.
Много книжек по LabView можно качнуть на automationlabs.ru
Bomond для Easyelectronics.ru
easyelectronics.ru