Методические рекомендации для первого знакомства со средой программирования Labview 5 и для освоения элементарных навыков работы в ней
![]()
|
Самый простой узнать назначение терминалов – это подвести к ним указатель мыши и прочитать появляющуюся при этом подпись. В структуре While Loop есть два терминала: Loop Iteration (Повторение цикла). Имеет один контакт, расположенный справа – выход, значение которого соответствует количеству выполненных повторений цикла. Синий цвет терминала и контакта показывает, что выходное значение представлено целым числом. а) или б) Loop Condition (Условие цикла) терминал условия выхода из цикла. Имеет один контакт слева – вход. Он может работать в двух режимах: а) Stop if True (остановить, если Истинный) – цикл прерывается, если на этот терминал поступает значение булевой переменной True (Истинный). б) Continue if True (продолжать, если Истинный) – цикл продолжается до тех пор, пока значение этого терминала – True. Зеленый цвет терминала и контакта показывает, что формат данных, передаваемых ему, булев (логический). Булев или логический тип данных назван в честь английского математика Джорджа Буля (George Boole 1815 - 1864) основоположника математической логики. Переменная этого типа представлена в памяти компьютера одним битом и может принимать только два значения True (Истинный) и False (Ложный), соответствующие 1 и 0. 11 Исправим ошибку на блок-схеме. Для этого подключим к терминалу условия цикла кнопку, прерывающую его выполнение. Наведем указатель мыши на терминал условия цикла, и, нажав правую кнопку мыши, выберем в появившемся меню режим работы терминала Stop if True. Убедимся, что иконка терминала приобрела соответствующий вид. Наведем указатель мыши на контакт терминала, и когда курсор превратится в катушку с проводом (Wiring tool), нажмем правую кнопку мыши В появившемся меню выберем Create Control (создать элемент управления) В результате на передней панели появится кнопка управления Stop, а ее терминал на блок схеме автоматически соединится с терминалом условия цикла (рис.1.12) Теперь изменим вид элементов управления на передней панели. Поместим указатель мыши на элемент Число А и нажмем правую кнопку мыши. В появившемся меню выберем Replace (заменить) Modern Numeric Knob (шарообразная ручка). Элемент управления примет вид, показанный на рисунке справа. Передвинем надпись Число А при помощи мыши. Изменим атрибуты ручки. Нажмем правую кнопку мыши и в выпадающем меню выберем Visible Items (Видимые объекты) Ramp. Для удобства точной установки ручки выберем в том же меню Digital Display (цифровой дисплей) Рис.1.12. Терминал кнопки Stop на блок-схеме 12 Аналогично изменим остальные элементы управления, чтобы передняя панель выглядела так, как показано на рис. 1.13. Элементы управления и индикаторы можно перемещать при помощи мыши и изменять их размеры «растягивая» их за уголки. После того, как редактирование завершено, необходимо сохранить программу, используя меню File Save, или сочетание клавиш Теперь программа полностью готова, и ее можно запустить. Для этого нажмем кнопку выполнения программы (Run) Вращая и передвигая ручки элементов управления при помощи мыши, убедимся в работоспособности программы. Чтобы изменить диапазон вводимых или выводимых значений, достаточно поместить указатель мыши на крайнюю цифру шкалы и, нажав левую кнопку мыши, ввести новое значение. Не останавливая программу, перейдем в окно блок схемы и нажмем кнопку Highlight Execution (подсветить выполнение) На проводниках появятся движущиеся точки, которые показывают, в каком порядке выполняется программа. ОБЯЗАТЕЛЬНО отключите режим Highlight Execution, иначе программа будет выполняться очень медленно, так как это демонстрационный режим, специально предназначенный для отладки программ. Перейдем на переднюю панель, и остановим выполнение программы, нажав кнопку Stop. Рис.1.13. Передняя панель с измененными элементами управления 13 Рис.1.14. Блок-схема программы с Waveform Chart и задержкой Теперь добавим к нашей программе графический индикатор, который будет отображать зависимость значения суммы чисел от времени. Поместим на переднюю панель индикатор Modern Graph Waveform Chart (cамописец, график изменения сигнала со временем). На блок схеме перетащим терминал Waveform Chartв цикл While Loopи подключим его параллельно стрелочному индикатору Сумма Для того, чтобы наш графический индикатор отображал значения суммы через определенные промежутки времени, добавим в цикл на блок-схеме операцию задержки Programming Timing Wait Until Next ms Multiple (ожидать то следующего момента времени, кратного заданному значению) Создадим константу, определяющую интервал выполнения этой операции. Для этого подведем указатель мыши к входу оператора (контакт входа расположен слева) и, нажав правую кнопку мыши, выберем в меню Create Constant (создать константу) Введем в окошко константы значение 250, соответствующее задержке при выполнении цикла в 250 мс (1/4 секунды). Теперь блок- схема выглядит, как показано на рис. 1.14. Перейдем на переднюю панель, и отключим автоматическое масштабирование по оси Y. Для этого поместим указатель на Waveform Chart,нажмем правую кнопку мыши и в меню (далее меню, вызываемое правой кнопкой мыши, будем называть контекстным меню) выберем Y Scale и снимем галочку AutoScaleY (автоматическая шкала Y). 14 Рис.1.15. Редактирование линий графика Установим пределы шкалы Y Waveform Chart в соответствии с минимальным и максимальным значением суммы, щелкнув по крайним значениям шкалы, и введя новые значения. Сохраним программу и запустим ее. Щелкнем правой кнопкой мыши на маленький прямоугольник справа вверху над панелью самописца, на котором изображен фрагмент линии графика и, используя контекстное меню, изменим цвет, тип и толщину линии, добавим на нее точки и т.д. (рис.1.15) Остановим программу Заменим константу, определяющую задержку, на элемент управления. Для этого добавим на переднюю панель еще один элемент управления Modern Numeric Horizontal Pointer Slide (горизонтальный движок с указателем), и назовем его Задержка Вызовем контекстное меню этого элемента и выберем в нем Find Terminal (найти терминал). При этом программа переключится в окно блок схемы, а в нем выделится терминал элемента управления Задержка. Удалим константу и вместо нее подключим терминал Задержка. При этом около контакта появится красная точка. Эта точка показывает, что в данном месте происходит преобразование типа данных. 15 То есть тип данных с плавающей точкой с двойной точностью (DBL) не соответствует типу данных, который используется в качестве входного параметра данным оператором. Автоматическое преобразование типов данных не нарушает работоспособность программы, но иногда снижает ее быстродействие. Поэтому его желательно избегать. Выберем в контекстном меню оператора задержки раздел Help. Из открывшейся справки выясним, что его входной параметр должен иметь тип U32(Unsigned long integer 32-bit) – 32-разрядное целое число без знака. В контекстном меню элемента управления Задержкавыберем Representation U32. Красная точка исчезнет. Типы данных согласованы. Чтобы было интереснее следить за движением графика по экрану самописца, добавим к сумме чисел случайную помеху, создаваемую генератором случайных чисел от 0 до 1 (Programming Numeric Random Number (0-1)) Прибавим случайное число с выхода генератора случайных чисел к нашей сумме, и результат подключим к индикаторам Сумма и Waveform Chart (рис.1.16) Перейдем на переднюю панель, и в контекстном меню элемента управления Задержка выберем Scale Mapping (разметка) Logarithmic (логарифмическая). Сохраним и запустим программу. Рис.1.16. Блок схема окончательного варианта программы Example01.vi 16 2. Цикл For Loop. Запись данных в файл На первом уроке мы написали простую программу, использующую оператор цикла While Loop. Теперь создадим еще одну программу, на примере которой изучим другую структуру цикла – For Loop, а также основы работы с массивами данных, процедуру сохранения данных в файл и структуру логического ветвления Case Structure. Создадим новый виртуальный прибор, и сохраним его под именем Example02.vi. Если панель блок-схемы не открылась при создании прибора, откроем ее, нажав клавиши Добавим на блок схему цикл For Loop (Programming Structures For Loop) Цикл While Loop, который мы использовали в предыдущем примере, повторяется до тех пор, пока терминал условия цикла находится в определенном логическом состоянии – True или False. В отличие от него, цикл For Loopвсегда повторяется определенное количество раз, заданное значением входного параметра N (Рис.2.1.) Подведем указатель мыши к левому контакту (к входу) терминала N цикла For Loop и создадим константу, определяющую количество повторений этого цикла (100 раз). Добавим в цикл операцию умножения случайного числа на номер итерации этого цикла (терминал i). Выведем результат из цикла и подключим к графическому индикатору Waveform Chart, помещенному на переднюю панель (Рис.2.1.) Рис.2.1. Блок схема программы с циклом For Loop Рис.2.2. Результат выполнения программы, показанной на рис.2.1. 17 Запустим программу. Результат ее выполнения выглядит, как показано на рис.2.2. Обратим внимание, что в точке пересечения проводом границы цикла For Loop появился символ в виде квадратных скобок, вписанных в квадрат, а толщина проводника увеличилась. Этот квадрат называется Auto Indexing Tunnel (туннель автоматического индексирования). Пересечение проводником границы любой структуры в среде LabVIEW называется туннелем (Tunnel). Автоматическое индексирование означает, что после того, как цикл For Loop повторится заданное число раз, на выходе из туннеля появится одномерный массив чисел, переданных из цикла по одному на каждой его итерации. В нашем случае (N=100) массив будет состоять из 100 элементов, имеющих номера о 0 до 99. Проводник, по которому передается массив, изображается более толстой или двойной линией в зависимости от размерности массива (рис.2.3) . Из контекстного меню проводника (вызывается правой кнопкой мыши), передающего массив, выберем Create Indicator Немного растянем при помощи мыши индикатор Array (массив), появившийся на передней панели, чтобы он принял вид, показанный на рисунке справа. В ячейках отображаются элементы созданного массива. Элемент управления, расположенный слева вверху, задает номер элемента массива, который будет показан в верхней ячейке индикатора. Скаляр (одно число) Одномерный массив (вектор) Двумерный массив Трехмерный массив Четырехмерный массив Рис.2.3. Обозначение проводников, передающих данные различной размерности 18 Сохраним массив в файл. Наиболее простой способ сохранить данные в файл сводится к использованию одного единственного оператора Write to Spreadsheet File (Записать в файл крупноформатную таблицу). Добавим на блок-схему процедуру Write to Spreadsheet File (Functions Programming File I/O Write to Spreadsheet File); Это сложная процедура, которая имеет множество входов для данных и различных параметров, с которыми необходимовнимательно ознакомиться. Для этого вызовем из контекстного меню процедуры справку (Help). В справке содержится краткое описание процедуры, ссылки на примеры ее использования и описание входов и выходов, проиллюстрированное схемой (рис.2.4). Рассмотрим некоторые особенности этой схемы. 1. Терминалы, к которым проводники подходят слева являются входами, а терминалы, от которых проводники отходят вправо – выходами (процедура на рис.2.4. имеет 7 входов и один выход). 2. Назначение терминалов набраны различным шрифтом: Обычный шрифт означает, что данный терминал не обязательно должен быть задействован. Полужирный шрифт означает, что данный терминал должен быть обязательно подключен, иначе среда LabVIEW выдаст сообщение об ошибке (например, таким терминалом является терминал N в цикле For Loop) . Серый шрифт обозначает дополнительный параметр, который может быть задействован по желанию пользователя. 3. В скобках () указано состояние терминала по умолчанию, то есть в случае, когда к нему ничего не подключено. Рис.2.4. Обозначение проводников, передающих данные различной размерности 19 Рассмотрим надписи на рис.2.4. Входы: 1. format (%.3f) – формат (строка, определяющая форматирование выводимых данных). Тип данных – String (строковая переменная) – сиреневый проводник. По умолчанию принимает значение: % – ключ строки формата, .3 – три знака после запятой, f – формат с плавающей точкой. 2. file path (dialog if empty) – путь к файлу (если не подключен – показывает диалоговое окно «Сохранить файл»). Тип данных – Path (путь к файлу, ссылка) – сине-зеленый провод. 3. 1D Data – одномерные данные (одномерный массив, вектор) 1D от английского 1 Dimension – одно измерение. Тип данных – Double – оранжевый провод. 4. 2D Data – двумерные данные. Тип данных – Double – оранжевый провод. 5. append to file? (new file:F) – добавить к (существующему) файлу? (по умолчанию – создать новый файл, False). Тип данных – Boolean – зеленый провод и знак вопроса в названии терминала. 6. transpose?(no:F) – транспонировать? (по умолчанию – нет, False). Тип данных – Boolean – зеленый провод и знак вопроса в названии терминала. 7. delimiter(\t) – разделитель (столбцов в таблице) (по умолчанию символ табуляции Tab, показан в принятом в LabVIEW backslash code (коде обратной косой черты) – \t). Тип данных – String (строковая переменная) –сиреневый проводник. Выход: new file path (Not a path i…) – новый путь к файлу (принимает значение Not a path (не путь) если сохранение файла было отменено пользователем). Тип данных – Path (путь к файлу, ссылка) – сине- зеленый провод. Подключим контакт 1D data параллельно индикатору Waveform Chart(рис.2.5.) и запустим программу В появившемся диалоговом окне выберем папку для сохранения данных и введем имя файла с расширением, например, Data.txt 20 Откроем файл в указанной нами папке. Он будет содержать строку чисел. Теперь добавим на блок-схему константу типа Boolean (Programming Boolean False constant) и подключим ее к контакту Transpose? (можно также создать константу из контекстного меню этого контакта, Create Constant) Поместим указатель мыши на белое поле около константы, дважды нажмем левую кнопку и напишем комментарий к этой константе – «Транспонировать?» (Комментарии к блок-схемам значительно облегчают работу с ними, ВСЕГДА комментируйте ваши программы и как можно более подробно!) Нажимая левую кнопку мыши, изменим состояние константы с |