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

конспект Гугнин

.pdf
Скачиваний:
83
Добавлен:
10.02.2016
Размер:
3.18 Mб
Скачать

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

зуется узел Functions Mathematics Numeric Conversion Convert Unit.

Полученное число используется как аргумент функции вычисления синуса

Functions Mathematics Elementary & Special Functions Trigonometric Functions Sine. Чтобы правильно отобразить полученное значение на рисунке нужно провести ряд преобразований. Во первых, помножим его на сто для того, что бы увеличить масштаб. Во-вторых, помножим результат на –1 и прибавим опять сто. Последняя операция выполняет преобразование системы координат. Дело в том, что нам нужно, чтобы начало координат находилось по середине рисунка и ось у была бы направлена вверх, в то время как при рисовании считается, что начало координат находится в левом верхнем углу, а вертикальная ось направлена вниз.

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

Теперь займемся выводом его на экран. Для начала добавьте к циклу shift register, нажав на рамке цикла и выбрав соответствующий пункт из контекстного меню. В этом регистре будет запоминаться наш рисунок. В качестве начального значения к нему нужно присоединить пустую картинку (Functions Pro-

gramming Graphics & Sound Picture Functions Empty Picture.vi). Конеч-

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

И, наконец, в цикл нужно вставить функцию рисования линий Draw Line.vi. Ее вход picture и выход new picture нужно подключить к регистру соответственно на левой и правой рамке цикла. Ко входу end point подключите кластер с координатами очередной точки. Так как Draw Line.vi использует текущие координаты курсора для определения точки начала линии и в то же время устанавливает курсор в точку конца линии по окончании рисования, график будет состоять из отрезков последовательно соединенных прямых.

В Lab VIEW предусмотрено еще много функций для рисования геометрических фигур. Некоторые из них приведены в табл. 17.2.

Функции рисования геометрических фигур

Таблица 17.2

Изображение

Название

Функция

 

Move Pen.vi

Переместить перо

 

 

 

 

 

 

Draw Line.vi

Нарисовать линию

 

 

 

 

 

Draw Multiple Lines.vi

Нарисовать ломанную линию

 

 

 

 

Draw Rect.vi

Нарисовать прямоугольник

 

 

 

 

147

 

 

Продолжение таблицы 17.2

 

Draw Grayed Out Rect.vi

Нарисовать полупрозрачный прямо-

 

 

угольник

 

Draw Round Rect.vi

Нарисовать прямоугольник с за-

 

 

кругленными углами

 

Draw Oval.vi

Нарисовать эллипс

 

 

 

 

Draw Arc.vi

Нарисовать дугу (сектор)

 

 

 

 

Draw Texf at Point.vi

Нарисовать текст в указанной точке

 

 

 

 

Get Text Rect.vi

Вычислить прямоугольник, охваты-

 

 

вающий текст

 

Draw Text in Rect.vi

Нарисовать текст в прямоугольнике

 

 

 

 

Draw Circle by Radius.vi

Нарисовать окружность заданного

 

 

радиуса

 

Draw Unflattened Pix-

Нарисовать картинку по двумерно-

 

map.vi

му массиву

 

Draw Flattened Pixmap.vi

Нарисовать картинку по одномер-

 

 

ному массиву

17.3. Подписи к рисункам

 

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

Для вывода текста в Lab VIEW имеется три функции. Прежде, чем перейти к их описанию, разберемся с тем, как LabVIEW печатает текстовую информацию. Вообще говоря, термин «печать» плохо подходит для описания этого процесса. Как и в любой другой системе с графическим интерфейсом пользователя, в LabVIEW текст «рисуется» на экране. Начертание каждой литеры хранится не в виде матрицы точек, а в виде описания геометрических кривых, из которых она состоит. Главным преимуществом такого способа, является легкость масштабирования и других трансформаций начертания (например, при использовании курсива), которые можно осуществить без ухудшения качества получающегося в итоге изображения.

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

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

148

Два других параметра задают параметры шрифта. Параметр перечислимого типа desired font позволяет выбрать один из трех системных шрифтов. Если его значение равно нулю, то нужный шрифт формируется по описанию, передаваемому в кластере [user specified font]. Назначение элементов этого кластера приведено в табл. 17.3. Если системе не удастся создать шрифт, в точности подходящий под описание, она предложит наиболее подходящий по ее мнению. Особое внимание следует уделить элементу Font Name, в котором задается название шрифта. Здесь нельзя ошибиться даже в одной букве, иначе все другие параметры будут проигнорированы, и будет использоваться стандартный шрифт.

Назначение в кластере [user specified font]

Таблица 17.3.

Элемент

Описание

 

Font Name

Название шрифта

 

Size

Кегль шрифта

 

Strikeout

Перечеркнутый шрифт

Italic

Курсив

 

Underline

Шрифт с подчеркиванием

Outline

Контурный шрифт

 

Shadow

Оттененный шрифт

Bold

Полужирный шрифт

Ориентацию текста можно менять с помощью параметра text orientation (таблица 17.4). По умолчанию текст печатается горизонтально слева направо.

Назначение параметра text orientation

Таблица 17.4.

Значение

Название

 

Ориентация текста

0

None

Обычная ориентация

1

Stacked

Вертикально в столбик

2

Clockwise

Повернуто на 90° по часовой стрелке

3

Counterclockwise

Повернуто на 90° против часовой стрелки

Теперь поговорим о конкретных функциях вывода текста. Одна из них, Get Text Rect.vi, вычисляет минимальный прямоугольник, в который помещается заданная строка текста. Результат представляет собой координаты левого верхнего и правого нижнего угла прямоугольника, упакованные в кластер. Используйте эту функцию, чтобы правильно расположить на одном рисунке несколько текстовых надписей, не допуская их наложения друг на друга.

Вторая функция под названием Draw Text at Point.vi, занимается собственно рисованием текста. В качестве одного из параметров выступает так называемая базовая точка, координаты которой находятся в кластере origin. Она определяет координаты вывода текста совместно с параметром alignment. Последний является кластером из двух переменных перечислимого типа (horizontal и vertical): первая позволяет определять положение текста относи-

149

тельно базовой точки по горизонтали, а вторая - по вертикали. По горизонтали базовая точка может обозначать левый край текста, его середину или правый край (значение переменной left, center и right соответственно), а по вертикали верхний край, середину строки или нижний край (значение переменной top, center и bottom соответственно).

Наконец третья функция, Draw Text in Rect, рисует текст в указанном прямоугольнике, который задается в кластере rect. При этом все, что выходит за рамки прямоугольника, автоматически обрезается. При использовании этой функции гарантируется, что надпись не выйдет за отведенные под нее рамки и не испортит остальной рисунок.

17.4. Операции с графическими данными

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

Рис. 17.2. Полный цикл обработки записи

Сначала происходит считывание графических данных из файла. Предназначенные для этого функции находятся на палитре Functions Pro-

150

gramming Graphics & Sound Graphics Formats. Поддерживаются файлы в формате JPEG, BMP и PNG. На налитре Programming Graphics & Sound Picture Functions находятся ВП для преобразования графических данных в форму двумерного массива и обратно.

Произведём отображение полученной из файла картинки на объект picture с помощью функции Draw Flattened Pixmap.vi. Существует аналогичная по действию функция Draw Unflattened Pixmap.vi, которая принимает данные в виде двумерного массива. Если вы решите ей воспользоваться, обратите внимание на то, что она является полиморфной, то есть автоматически определяет глубину цвета передаваемого ей изображения. Однако, если вы используете 4- или 8-битное изображение, это нужно указать явно, выбрав в пункте контекстного меню Select Type нужную модификацию этой функции.

Возможности вывода картинки на объект picture мы рассмотрели ранее. В данном примере используются функции рисования текста в прямоугольник Draw Text in Rect.vi, с помощью которых на картинку помещаются титры. Следует иметь в виду, что без указания размеров прямоугольника дпнная функция не работает. Затем используется функция Picture to Pixmap.vi для перевода картинки обратно в форму одномерного массива. И, наконец, исправленный рисунок сохраняется в новый файл.

Упомянем еще две функции, предназначенные для работы с растровой графикой (они также находятся на налитре Programming Graphics & Sound Picture Functions). Первая из них – это Get Image Subset.vi, которая предназначена для вырезания из картинки прямоугольной области. Координаты прямоугольника передаются в кластере subset rect. Эта функция работает с графикой в форме одномерного массива.

Вторая функция используется для наложения маски. Как мы уже говорили прирассмотрении видов представления графики в LabVIEW, кластер image data содержит специальный битовый массив, позволяющий сделать некоторые точки изображения прозрачными. Функция Create Mask.vi записывает в этот массив такие значения, чтобы сделать прозрачными точки определенного цвета, указанного в параметре Mask Color. Дополнительный логический параметр Combine Masks? указывает, нужно ли скомбинировать новую маску со старой. Например, если вы хотите скрыть на картинке элементы желтого и зеленого цветов, нужно использовать последовательно две функции Create Mask.vi, причем у второй параметр Combine Masks? должен иметь значение ИСТИНА. Последний параметр этой функции, 1–Bit Mask Value предназначен для работы с монохромными (однобитными) изображениями. Он определяет выводить на экран точки со значением единица или, наоборот, со значением ноль.

17.5. Создание собственных элементов индикации

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

151

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

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

Для этого сначала поместим на лицевую панель целочисленный элемент управления Controls Modern Numeric Vertical Pointer Slide, назвав его «Движок», и графический индикатор (Controls Modern Graph Controls2D Picture), назвав его «Секторный индикатор». Затем соберем блокдиаграмму показанную на рис. 17.3.

Изучим принцип ее действия. Число от элемента управления поступает на вход arc size функции Draw Arc.vi и тем самым задает угловой размер сектора. Так как самый большой из возможных секторов имеет размер равный 360°, это же значение является максимальным числом, которое сможет отобразить наш индикатор. Ко входу start angle подключен ноль – сектор будет рисоваться начиная с верхней точки. Вход Rect определяет прямоугольную область, в которую будет вписан рисунок сектора. Ко входу color подключена цветовая константа красного цвета, а на входе fill установлено логическое значение истина, чтобы получить закрашенный сектор.

Второй узел на блок-диаграмме Draw Text in Rect.vi используется для вывода на элемент индикации числового значения. Для простоты текст выводится в тот же прямоугольник, что и сектор окружности. Ко входу text должен подключаться сигнал типа “ строка”. Чтобы перевести число в строкову форму используется функция палитре Functions Programming String

String/Number Conversions Number to Decimal String.

Наконец, полученное изображение выводится на графический элемент индикации «Секторный индикатор» (рис. 17.3).

Рис. 17.3. Числовой элемент индикации

Если запуститье программу в режиме непрерывного исполнения и попробовать подвигать рычажок Vertical Pointer Slide, показания индикатора тоже начнут меняться. Можно заметить, что при смене показания наш индикатор начинает мерцать. Это происходит из-за того, что перед тем как

152

нарисовать новое изображение, LabVIEW полностью стирает старое. Чтобы избавиться от мерцания, нужно заставить LabVIEW сначала нарисовать новое изображение элемента индикации в памяти и только потом перенести на 2D Picture. Этого можно добиться, выбрав из контекстного меню графического элемента индикации (на лицевой панели) пункт Advanced Smooth Updates.

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

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

Рассмотрим еще один пример создания ВП иметирующего линейный датчик перемещения. На лицевой панели разместим элемент управления

Controls Modern Numeric Horinzotal Pointer Slide, назвав его «Микро-

метрический винт», установив приделы изменения чисел от 0 до 100 мм (рис. 17.4). Разместим на некотором расстоянии от имитатора винта графический ин-

дикатор (Controls Modern Graph Controls 2D Picture), назвав его «Пе-

ремещаемый объект». Соединим винт и объект толстой линией, взяв её с па-

литры Controls Decorations Thick Line. Если толщина линии окажется не-

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

Рис. 17.4. ВП имитирующий микрометрический винт

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

153

ции Draw Rect.vi нарисуем сначала перемещаемый объект. Пусть объект будет черного цвета, поэтому ко входу color присоединим константу черного цвета. Тоже самое сделаем для второй функции которая будет имитировать стержень. Сначала будет рисоваться объект, а затем прикрепленный к нему стержень, поэтому выход new picture первой функции Draw Rect.vi соединим со второй функцией, а её в свою очередь соединим с индикатором 2D Picture. Теперь сформируем первый прямоугольник. Для этого сформируем координаты определяющие размер прямоугольника. Левый верхний угол будет иметь координаты x = 0; y = 0, а правы нижний – x = 100; y = 60. Для изменения положения прямоугольника воль оси x с помощью Horinzotal Pointer Slide будем прибавлять одинаковое число к координате x обоих углов. Тогда прямоугольник будет перемещаться вдоль оси x. Собрав все четыре координаты прямоугольника с помощью функции Bundle в кластер, подадим его на вход функции вычерчивающей перемещаемый объект. Аналогичным образом создадим прямоугольник, имитирующий подвижный стержень. И в завершении, чтобы перемещаемый объект не мерцал, из контекстного меню графического элемента выберем

пункт Advanced Smooth Updates.

Вопросы для самопроверки к восемнадцатой лекции:

1.Какие форматы хранения изображения используются в LabVIEW?

2.Какова последовательность создания простейшего рисунка?

3.Какие типы линий используют функции рисования в LabVIEW?

4.Какие функции можно использовать в LabVIEW для рисования в графическом объекте?

5.Как можно нарисовать линию в графическом объекте?

6.Какие функции для рисования геометрических фигур предусмотрены в

Lab VIEW?

7.Как можно написать текст в графическом объекте?

8.Как можно изменять параметры текста при помещении его в графический объект?

9.С помощью каких функций можно прочитать и записать изображение

вфайл?

10.С помощью каких функций можно создавать собственные элементы

индикации?

Литература для дополнительного обучения: [3, с.196 – 205].

СПИСОК ЛИТЕРАТУРЫ

1.Тревис Дж. LabVIEW для всех/ Джеффри Тревис: Пер. с англ. Клушин Н.А. – М.: ДМК Пресс; ПриборКомплект, 2005. - 544 с,: ил.

2.Суранов А.Я. LabVIEW 8.20: Справочник по функциям. – М.: ДМК Пресс, 2007. – 536 с.: ил.

3.Автоматизация физических исследований и эксперимента: компьютерные измерения и виртуальные приборы на основе LabVIEW 7/ Под. ред. Бутырина П. А. – М.: ДМК Пресс, 2005. 264 с.: ил.

154