Методические рекомендации для первого знакомства со средой программирования Labview 5 и для освоения элементарных навыков работы в ней
Скачать 1.09 Mb.
|
. Если этого не сделать, то компьютер будет стремиться проверять состояние элементов управления и выполнять цикл как можно быстрее, нерационально используя свои ресурсы (даже такая простая программа способна полностью загрузить процессор!). С другой стороны, вполне достаточно проверять состояние элементов управления 10 раз в секунду. Оператор не заметит этой задержки, так как время реакции Рис.3.4. Передняя панель и блок схема программы, которая составляет строку текста 32 человека, как правило, не меньше 0,1 с. Всегда используйте задержку, если программа обращается к передней панели! Строка, получающаяся в результате выполнения этой программы, в некоторых случаях выглядит немного странно, например, «У меня есть 2 яблок» или «0 яблок». В первом случае человек скажет «У меня есть 2 яблока», а во втором – «У меня нет яблок». Сделаем ответ программы более похожим на человеческую речь. Заметим, что слово яблоко согласуется с числительным. Мы говорим одно яблоко, затем говорим два, три, четыре яблока, с пяти до двадцати мы говорим «яблок», а затем все повторяется: 21 яблоко, 22 яблока, 25 яблок и т.д. То, какое слово следует добавить в строку, определяется двумя младшими разрядами числа. Выделим эти два разряда – разделим введенное число два раза подряд на 10 и возьмем остатки от этих делений (рис.3.5) (Functions Programming Quotient & Remainder (частное и остаток)). Используя операторы сравнения из меню Functions Programming Comparison, и логическую операцию AND из меню Рис.3.5. Усовершенствованная программа Example04.vi 33 Boolean организуем проверку значений этих разрядов и выбор правильной формы слова яблоко (рис.3.5). При проверке на 2, 3, 4 в контекстном меню оператора In range and coerceустановите Include upper limit (включить верхний предел в интервал) и Include lower limit (включить нижний предел в интервал). В заключение добавим еще одну проверку, чтобы программа, подражая человеку, выводила строку «У меня нет яблок», если введенное число равно нулю. Данная программа имитирует осмысленную человеческую речь для того, чтобы пользователю было проще читать ее ответ. Иногда такого рода имитация способна создать у пользователя иллюзию «разумности» машины. Но, как мы убедились на данном примере, машина просто составляет строку символов строго по заданным нами правилам. 34 4. Массивы и работа с ними Теперь продолжим изучение массивов в среде LabVIEW. Массив – это набор данных одного типа. Доступ к отдельным элементам массива осуществляется при помощи индекса. Простейший массив – одномерный. Он состоит из последовательно нумерованных ячеек, в каждой из которых хранится один элемент этого массива. Каждая ячейка двумерного массива имеет два индекса. Если представить такой массив в виде двумерной таблицы, то индексы будут соответствовать номеру строки и столбца этой таблицы. Значения индексов начинаются с 0. Количество измерений в массивах (количество индексов, адресующих отдельный элемент) в принципе может быть любым, но, как правило, оно ограничено объемом оперативной памяти компьютера. В LabVIEW элементом массива могут быть данные любого типа. В массивы можно также объединять элемент управления или индикатор ы на передней панели. Создадим новый виртуальный прибор и сохраним его под именем Example05.vi Добавим на переднюю панель элемент Array (Controls Modern Array, Matrix & Cluster Array).Этот элемент пустой внутри. Выберем любой элемент управления и поместим его внутрь элемента Array. Растянем элемент управления Array. Чтобы добавить измерение к массиву, в контекстном меню массива выберем Add dimension. Чтобы сбросить значения массива, в контекстном меню выберем Data Operations Empty Array На рис. 4.1. показана программа, иллюстрирующая массивы различных типов и некоторые операции с ними. Попробуйте самостоятельно воспроизвести ее. Обратите внимание, что в цикл While Loopдобавлен оператор задержки на 100 мс. Это сделано для того, чтобы не перегружать компьютер слишком частой проверкой и перерисовыванием большого числа элементов передней панели. 35 Рис.4.1. Программа Example04.vi 36 Второй случай структуры Case Рис.4.2. Программа поиска элементов массива, попадающих в заданный диапазон 37 В заключение рассмотрим стандартный метод выбора элементов массива, значения которых попадают в некоторый интервал (рис.4.2). В качестве входных данных мы используем массив случайных чисел, созданный в цикле For Loop. Размер массива задается оператором при помощи элемента управления Число элементов. Этот массив передаются процедуре поиска элементов, значения которых находятся в интервале, заданном оператором при помощи элементов управления Верхняя граница интервала и Нижняя граница интервала. В этой процедуре мы определяем полное количество элементов входного массива при помощиоператора Array Size. Затем создаем массив точно такого же размера, как и входной, все элементы которого равны нулю (Initialize Array). Затем последовательно проверяем все элементы входного массива в цикле For Loop. Для проверки используется уже знакомый нам оператор In range and coerce. Массив создается заранее для того, чтобы избежать изменения размера массива в процессе выполнения цикла. Каждый раз, когда мы добавляем к массиву новые элементы, он копируется в памяти компьютера. При этом выполнение программы при этом замедляется, а память компьютера переполняется копиями одного и того же массива. Чтобы избежать этого, в данной программе мы заранее создаем достаточно большой массив. Мы записываем нужные нам элементы в этот массив, последовательно заменяя значения его элементов. Одновременно программа считает количество таких замен N. После того, как поиск завершен, мы изменяем размер выходного массива, и оставляем в нем первые N элементов, которые содержат найденные нами значения. Для замены значений массива и счета количества этих замен в программе используется уже знакомая нам структура Case Structure. В этой программе используется туннель особого вида – так называемый Shift register (Сдвигающий регистр). Чтобы создать его, нужно в контекстном меню туннеля выбрать Replace with Shift Register. В результате вместо одного туннеля появится два – один на входе в цикл (слева), а другой – на выходе (справа). Значение, поступившее на вход регистра, передается в цикл при его запуске. Во время выполнения цикла значение, передаваемое на 38 правый терминал сдвигающего регистра, запоминается и возвращается обратно в цикл при его следующем повторении через левый терминал. После остановки цикла значение сдвигающего регистра выводится на выход справа. Например, на рис.4.3 состояние регистра увеличивается на единицу при каждом повторении цикла и отображается индикатором Внутри.После завершения цикла общее число повторений передается на индикатор Снаружи. Рис.4.3. Счетчик с использованием Shift Register 39 Список литературы 1. Уроки по LabVIEW http://www.picad.com.ua/lesson.htm 2. LabVIEW TM Вводный курс. National instruments. 2003. 52 c. http://russia.ni.com/datasheet ; ftp://ftp.ni.com/pub/branches/russia/software/labview_8.5.pdf 3. LabVIEW. Руководство пользователя. National instruments. 2007. 370 c. http://russia.ni.com/datasheet ; ftp://ftp.ni.com/pub/branches/russia/software/labview_user_manual.pdf 4. Микропроцессоры и микро-ЭВМ / Б. Соучек ; Пер. с англ. под ред. А. И. Петренко, 517 с. ил. 22 см., М. Сов. радио 1979 40 Оглавление Предисловие ...................................................................................................................... 2 1. Блок схема. Элементы управления и индикаторы ...................................................... 3 2. Цикл For Loop. Запись данных в файл ....................................................................... 16 3. Интерфейс пользователя. Символьная строка ......................................................... 25 4. Массивы и работа с ними ............................................................................................ 34 Список литературы .......................................................................................................... 39 Оглавление ....................................................................................................................... 40 Приложение. Задания для самостоятельной работы ................................................... 41 Задание 1. Преобразование десятичного числа в двоичное ........................................ 41 Задание 2. Двоичный сумматор ..................................................................................... 42 Задание 3. Гирлянда «Бегущие огни» ............................................................................ 44 Задание 4. Метод деления отрезка пополам ................................................................. 45 Задание 5. Спираль ......................................................................................................... 46 Задание 6. Измерение времени реакции человека ....................................................... 47 Задание 7. Делитель напряжения .................................................................................. 48 Задание 8. Счет числительными .................................................................................... 50 Задание 9. Фонетический анализ текста ........................................................................ 51 Задание 10. Затухающие колебания .............................................................................. 52 41 Приложение. Задания для самостоятельной работы Задание 1. Преобразование десятичного числа в двоичное Напишите программу, которая переводит методом деления на 2 десятичное число ((U8) – восьмиразрядное целое число без знака) в восьмиразрядное двоичное число, представленное в виде массива булевых переменных. Обратите внимание, что младший разряд на индикаторе массива находится справа. Указание: используйте цикл While Loop с задержкой в 100 мс для проверки элементов управления и цикл For Loop для последовательного деления на 2 при помощи функции Quotient & Remainder. Правильный порядок бит индикатора можно получить с помощью функции Reverse Array. 42 Задание 2. Двоичный сумматор Используя логические функции из меню Boolean, сконструируйте трехразрядный двоичный сумматор, который складывает два двоичных числа. Указание: Сначала создайте двоичный полусумматор – программу, которая складывает два одноразрядных двоичных числа. Полусумматор имеет два входа: слагаемое A и слагаемоеB; и два выхода: сумма S и перенос в следующий разряд C. Из правил сложения чисел столбиком получаем таблицу истинности для полусумматора: Входы Выходы Слагаемое A Слагаемое В Сумма S Перенос С 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 1 Сумма S получается при помощи логической операции Exclusive OR (исключающее или)для входов Aи B, а перенос C – при помощи операции AND (и) для тех же входов. При сложении также необходимо учитывать перенос из предыдущего разряда. Его добавляют к сумме при помощи второго полусумматора. Перенос сумматора получают помощи операции OR(или)длявыходов переноса каждого из полусумматоров. Объединяя несколько сумматоров можно получить сумматор для любого числа двоичных разрядов. 43 Двоичный полусумматор (а); однобитный двоичный сумматор (б); сумматор n двоичных разрядов. M – перенос в следующий разряд, m – вход для переноса из предыдущего разряда, S – сумма, A, B – слагаемые. Индексы – номера разрядов. Оранжевый цвет – операция XOR (исключающее ИЛИ); желтый – операция AND (И); зеленый – OR (ИЛИ). 44 Задание 3. Гирлянда «Бегущие огни» Напишите программу, моделирующую работу гирлянды «Бегущие огни» Указание: Иллюзия движения огней вдоль гирлянды создается последовательным переключением нескольких (не менее трех) групп светодиодов. Например, на рисунке, сначала включается первая группа (1, 4, 7), светится в течение 100 мс, затем, она выключается, и включается вторая группа (2, 5, 8), через 100 мс вместо этой группы включается третья группа (3, 6, 9) и т.д. 45 Задание 4. Деление отрезка пополам Напишите программу, которая определяет загаданное пользователем целое число от 0 до 100 методом деления отрезка пополам. Указание: Для поиска используйте цикл While Loop c задержкой 100 мс. В цикле необходимо хранить и изменять в процессе поиска три числа – начало отрезка (первоначально 0), конец отрезка (первоначально 100) и середина отрезка (первоначально 50). Эти числа можно хранить при помощи сдвигающего регистра Shift Register (см. урок 3). В цикле проверяется состояние кнопок передней панели. Если кнопки не нажаты, параметры отрезка передаются без изменений в следующую итерацию. Нажатие кнопок Больше или Меньше отслеживается двумя структурами Case Structure. Например, если нажата кнопка Больше, то выполняются следующие операции: 1) середина отрезка становится началом нового отрезка, 2) Середина нового отрезка вычисляется как среднее арифметическое его начала и конца.Аналогичные операции выполняются,если нажата кнопка Меньше, только середина отрезка в этом случае становится концом нового отрезка. Условием выхода из цикла является нажатие кнопки Равно или совпадение конца и начала отрезка. 46 Задание 5. Спираль Напишите программу, которая рисует плоскую спираль с заданным числом витков. Указание: Для отображения спирали используйте график XY Graph из меню элементов управления. Он изображает точки, координаты которых даются ему виде двух одномерных массивов одинаковой длины. В одном массиве координаты X, а в другом – соответствующие им значения Y. Массивы объединяются в кластер из двух элементов: при помощи функции Bundle из меню Cluster, Class & Variant. Для вычисления тригонометрических функций используйте меню Mathematics. Координаты точек спирали вычисляйте в цикле For Loop и собирайте массивы при помощи автоматического индексирования. Проверку элемента управление Количество витков можно организовать при помощи цикла While Loop с задержкой 100 мс. 47 Задание 6. Измерение времени реакции человека Напишите программу, которая измеряет интервал времени между включением светодиода на передней панели и нажатием на кнопку. Указание: Измерение времени реакции выполняется по следующему протоколу: 1) После запуска программы проходит некоторый интервал времени (длительность этого интервала изменяется случайным образом от 2 до 7 секунд); 3) затем включается светодиод и считывается значение системного таймера при помощи функции Tick Count, ms; 4) сразу после включения светодиода запускается пустой цикл While Loop, который прерывается нажатием кнопки НАЖАТЬ; 4) После завершения цикла считывается второе значение системного таймера (момент нажатия); 5) время реакции оператора вычисляется как разность этих двух моментом (в миллисекундах); 6) измерения повторяются несколько раз в цикле For Loop (измерения отделяются друг от друга случайными интервалами времени продолжительностью от 2 до 7 секунд); 7) результаты измерений записываются в массив; 8) вычисляется среднее время реакции оператора (используйте функцию Mean (среднее) из меню Mathematics). Прогресс выполнения теста отображается при помощи индикатора Horizontal Progress Bar, подключенного к индексу цикла For Loop. 48 Задание 7. Делитель напряжения Создайте виртуальный прибор, моделирующий работу делителя напряжения, состоящего из двух резисторов R 1 и R 2 . К выходу делителя подключена нагрузка сопротивлением R н . Значение сопротивлений, а также входное напряжение делителя U вх можно задавать при помощи элементов управления. Индикаторы показывают входной ток делителя I вх , напряжение на нагрузке U н и ток через нее I вх . Два индикатора показывают мощность, потребляемую делителем P вх = U вх I вх и мощность, передаваемую нагрузке P н = U н I н Указание: Для вычисления токов и напряжений используйте закон Ома R U I , (1) где I – ток через участок электрической цепи, U – разность потенциалов на концах этого участка, R – электрическое сопротивление этого участка цепи. Сопротивление двух последовательно соединенных резисторов R 1 и R 2 вычисляется по формуле 2 1 R R R , (2) а сопротивление двух резисторов, соединенных параллельно – по формуле 49 2 1 2 1 R R R R R (3) Ограничьте точность отображения значений на цифровых индикаторах четырьмя значащими цифрами (Significant digits), используя контекстное меню Display Format… Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс. 50 Задание 8. Счет числительными Напишите программу, которая записывает введенное двухзначное число строкой соответствующих числительных. Указание: обратите внимание, что числительные от 21 до 99 получаются написанием перед числительным для чисел от 1 до 9 слова, обозначающего десятки – двадцать, тридцать, ..., девяносто. Исключение составляет 0 и числа от 10 до 19. Поэтому имеет смысл анализировать цифры двузначного числа по отдельности. Выбор числительных организуйте при помощи структуры Case Structure. Если к терминалу условия подключить данные типа целое число, то станет возможно создавать случаи, соответствующие различным значениям этого числа, или даже диапазонам значений. Новые случаи создаются из контекстного меню структуры Add Case After или Add Case Before. Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс. 51 Задание 9. Фонетический анализ текста Напишите программу, которая подсчитывает количество гласных звуков в заданном тексте. В русском языке имеется шесть гласных звуков, которые обозначаются десятью гласными буквами: Звук [a] [o] [э] [и] [ы] [у] Буква а, я о, ё э, е и ы у, ю Программа подсчитывает количество гласных звуков в тексте, введенном в текстовый элемент управления. Для этого она находит все буквы, кодирующие тот или иной звук, без учета регистра (строчные и прописные). Относительные частоты (отношение количества определенных гласных звуков к общему количеству гласных звуков в тексте), отображается при помощи массива индикаторов Vertical Progress Bar. Указание: поиск и букв в тексте можно осуществить при помощи функции Search and Replace String из меню String. Буквы можно заменять пустой строкой (по умолчанию для данной функции). Количество замен будет соответствовать количеству найденных букв. Не забудьте задать при помощи булевых констант параметры поиска – Ignore case? (не учитывать регистр?) и Replace All? (заменить все?). Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс. 52 Задание 10. Затухающие колебания Напишите программу, которая демонстрирует экспоненциально затухающие гармонические колебания стрелки индикатора относительно среднего положения. Колебания начинаются после нажатия на кнопку Пуск. Указание: Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс. Расчет положения стрелки и изменение состояния индикатора также организуйте при помощи цикла While Loop. Этот цикл выполняется до тех пор, пока значение амплитуды колебаний не станет меньше заданного значения, например, 0,01. |