WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

И.В.Федосов

Основы программирования

в LabVIEW

Саратов 2010

ГОУ ВПО «Саратовский государственный университет

имени Н.Г. Чернышевского»

Кафедра оптики и биофотоники СГУ

И.В.Федосов

Основы программирования в LabVIEW

Учебное пособие

Саратов 2010

1

Предисловие

Данное учебное пособие ориентировано на студентов, начинающих свое знакомство с пакетом программ National Instruments LabVIEW. Оно содержит указания и методические рекомендации для первого знакомства со средой программирования LabVIEW 8.5 и для освоения элементарных навыков работы в ней.

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

Объем данного пособия соответствует вводной части курса программирования и цифровой обработки изображений в среде LabVIEW разработанного автором в 2010 году и изучаемого студентам кафедры оптики и биофотоники СГУ в рамках практических занятий по дисциплинам «Фотография и цифровая обработка изображений», «Современные оптические системы» и «Оптические приборы в биомедицинских исследованиях». Изучение вводной части курса завершается выполнением студентами заданий для самостоятельной работы, примеры которых приведены в приложении.

1. Блок схема. Элементы управления и индикаторы Программа в среде LabVIEW называется Virtual Instrument (VI) – виртуальный прибор (ВП), чтобы подчеркнуть, что она предназначена для управления лабораторным оборудованием и приборами и способна выполнять некоторые их функции.

Запустим программу LabVIEW 8.5, при этом откроется стартовое окно (рис.1.1.).

В левой части диалогового окна (Files) выберем пункт BlankVI (пустой виртуальный прибор (ВП)).

При этом откроются два окна – Untitled Front Panel (рис.1.2) и Untitled Block Diagram (рис.1.3). Слово Untitled – "не имеющий наименования" указывает на то, что мы еще не назвали наш виртуальный прибор и не сохранили его на диск компьютера.

Если окно Block Diagram скрыто, то его можно вызвать через меню Window Show Block Diagram или нажав клавиши +.

Сохраним новый ВП. Для первого сохранения ВП в меню File любого из этих окон выберем пункт Save.

В открывшемся диалоговом окне выберем или создадим новую папку для наших ВП, введем имя файла – Example01 и подтвердим сохранение, нажав OK. Файл сохранится с расширением.vi от Virtual Instrument – Виртуальный прибор.

Чтобы не потерять сделанную работу, время от времени следует сохранять ВП в процессе его редактирования. Для этого можно использовать меню File Save, или сочетание клавиш +.

Рис. 1.1. Стартовое окно LabVIEW 8. Рис.1.2. Окно Front Panel (передняя Рис.1.3. Окно Block Diagram (блокпанель) схема) Передняя панель (Front panel) виртуального прибора служит для размещения на ней элементов управления и индикаторов – то есть элементов, при помощи которых этот виртуальный прибор будет взаимодействовать с человеком (или с другим виртуальным прибором, как мы увидим немного позже).

Для начала создадим виртуальный прибор, который может складывать два числа. Поместим на переднюю панель простейший элемент управления (Control).

Переместим указатель мыши на рабочую (клетчатую) поверхность передней панели и нажмем правую кнопку мыши.

Рис.1.4. Меню Controls и раздел Modern Рис.1.5. Меню Numeric. Элемент Рис.1.6. Элементы управления и Рис.1.7. Терминалы элементов индикатор на передней панели управления и индикатора на блок схеме В появившемся меню элементов управления Controls из раздела Modern (современные) выберем пункт Numeric (числовые, цифровые) (рис.1.4).

В раскрывшемся меню Numeric выберем Numeric control (числовой элемент управления) (рис.1.5). Указатель мыши примет вид руки, держащей пунктирные прямоугольники – контур элемента управления.

Переместим указатель на переднюю панель, и установим элемент, нажав один раз на левую кнопку мыши.

Два раза щелкнем левой кнопкой мыши на надпись Numeric над элементом управления и введем текст: Число А.

Добавим на переднюю панель еще один элемент управления и назовем его Число Б;

Аналогичным образом добавим на переднюю панель индикатор (Controls Modern Numeric Numeric Indicator). Назовем его Сумма.

Теперь передняя панель выглядит так, как показано на рис.1.6 – на ней расположены два элемента управления, используя которые можно ввести в компьютер два числа, и индикатор, который будет отображать результат операции с этими числами. А на блок схеме появились соответствующие им терминалы (рис.1.7), при помощи которых введенные числа Число A и Число B передаются в программу, а результат выполнения программы выводится на индикатор Cумма.

Обратите внимание, что терминалы элементов управления находятся слева, а индикатора – справа. Они расположены так, потому что общепринятое направление передачи данных и сигналов на блок схемах – слева направо, и сверху вниз. Этого правила следует обязательно придерживаться при оформлении программ в среде LabView! Выходы терминалов элементов управления (маленькие треугольники) расположены справа на иконках этих терминалов, а вход индикатора – слева (рис.1.7).



В среде LabView все процедуры и функции представлены виде иконок.

Поместим на нашу блок-схему иконку операции сложения.

Нажмем правую кнопку мыши на белом поле окна блок схемы.

В появившемся меню Functions (функции), выберем раздел Programming (программирование) Numeric Add (сложить).

Поместите на блок схему иконку оператора сложения Подведите курсор к иконке. По краям иконки появятся точки с отрезками линий – контакты, при помощи которых элементы блоксхемы соединяются между собой.

Подведите курсор к контакту x+y оператора сложения.

При этом он примет вид катушки с проводом (Wiring tool – инструмент для соединения проводами), а внизу появится подсказка – назначение данного контакта.

Щелкните левой кнопкой мыши и подведите Wiring tool к терминалу Сумма. За курсором потянется пунктирная линия – набросок будущего провода. Его направление можно задавать, нажимая на левую кнопку мыши. Нажатие на правую кнопку отменяет рисование провода.

Подведите курсор к контакту терминала Сумма и, нажав левую кнопку мыши, соедините их между собой.

Аналогично соедините терминал Число А и вход x оператора сложения, а затем терминал Число Б и контакт y.

Выделяя провода и терминалы при помощи мыши и перемещая их при помощи клавиш,, и, придайте блок-схеме вид, показанный на рис.1.8.

Рис.1.8. Элементы управления и индикатор на передней панели Аккуратный вид блок схемы важен не только с эстетической точки зрения. Блок схема должна легко читаться, иначе через несколько минут вы уже не сможете разобраться, каким образом соединены между собой операторы и как работает данная программа.

Поэтому не жалейте времени на то, чтобы сделать блок схему аккуратной и понятной. Соединяя контакты проводами, следует руководствоваться следующими правилами:

1. Передача данных в блок-схеме осуществляется слева направо.

2. Проводники ВСЮДУ на виду – их нельзя перекрывать иконками или другими проводниками.

3. В одной точке могут соединяться НЕ БОЛЕЕ ТРЕХ проводников (рис.1.9).

4. Блок схема должна полностью помещаться на экране монитора.

Рис.1.9. Третье правило исключает опасность перепутать соединение и пересечение проводников в случае, если вы не заметите точку.

После того, как редактирование завершено, необходимо сохранить программу, используя меню File Save, или сочетание клавиш Теперь программа полностью готова, и ее можно запустить.

Для этого нажмем кнопку циклического выполнения программы (Run Continuously) Убедимся в ее работоспособности, изменяя при помощи мыши и клавиатуры значения в полях ввода элементов управления и наблюдая как изменяется значение индикатора.

Чтобы остановить выполнение программы, нажмем кнопку прервать выполнение (Abort Execution) Рис.1.10. Цикл While Loop При запуске наша программа однократно опрашивает состояние элементов управления, передает их значения операции сложения, а затем результат сложения индикатору и завершается. Для того чтобы она непрерывно отслеживала изменения состояния элементов управления, мы использовали возможности среды программирования – режим Run Continuously, в котором программа запускается снова и снова сразу же после ее завершения. Теперь сделаем так, чтобы программа самостоятельно периодически опрашивала элементы управления, складывала полученные числа и отображала результат сложения на индикаторе. Для этого поместим нашу программу в цикл While Loop (while – пока, в то время как; loop – петля).

Щелкнем правой кнопкой мыши блок-схеме и выберем в меню Functions Programming Structures While Loop Курсор мыши примет вид маленького пунктирного прямоугольника с черным левым верхним уголком Поместим курсор левее и выше группы терминалов и процедур, которую мы хотим заключить в цикл, нажав и удерживая левую кнопку, обведем группу пунктирным прямоугольником.

После того, как мы отпустим левую кнопку мыши, программа будет выглядеть так, как показано на рис.1.10.

Если действие не получилось с первого раза, можно его отменить, нажав клавиши +.

После того, как мы поместили цикл While Loop на блоксхему, кнопка циклического выполнения заблокировалась, а на кнопке запуска программы появилось изображение сломанной стрелочки.

Это произошло потому, что среда программирования LabView проверяет программу непосредственно в процессе ее составления. Она обнаружила ошибку и запретила запуск программы. Выясним причину ошибки.

Нажмем на кнопку со сломанной стрелкой List Errors (составить список ошибок), откроется окно списка ошибок (рис.1.11) Окно списка ошибок состоит из трех частей:

Items with errors (объекты с ошибками), в этом окне указан наш виртуальный прибор Example01.vi;

1 errors and warnings (1 ошибка(и) и(или) предупреждение(ия)), это перечень ошибок в котором указан тип ошибки – Block Diagram Errors (ошибки в блок схеме), и ее причина – While Loop: conditional terminal is not wired (Цикл While: не подключен провод к терминалу условия);

Details (подробности) – объяснение ошибки, выделенной в списке. В нашем случае The conditional terminal is not wired to anything and must be wired to a boolean data source such as a button or the result of a comparison. (Терминал условия ни с чем не соединен и должен быть соединен к источнику данных логического (Булева) типа, такому как кнопка или результат сравнения).

Рис. 1.11. Окно списка ошибок Чтобы выяснить, в каком именно месте блок-схемы обнаружена ошибка, нажмем кнопку Show Error (Показать ошибку). При этом окно блоксхемы станет активным, а цикл While Loop будет кратковременно выделен черным цветом.

Для того чтобы получить информацию о неизвестном элементе блок-схемы, можно воспользоваться окном контекстной помощи, которое открывается при нажатии клавиш +. В этом окне появляется описание каждого элемента блок схемы, на который помещен указатель мыши. Более подробное описание каждого элемента блок схемы, а также ссылки на примеры его использования можно найти в справочной системе (Help) среды LabVIEW, а также в руководстве пользователя, которое издано не только на английском, но и на русском языке.

Самый простой узнать назначение терминалов – это подвести к ним указатель мыши и прочитать появляющуюся при этом подпись. В структуре While Loop есть два терминала:

Loop Iteration (Повторение цикла). Имеет один контакт, расположенный справа – выход, значение которого соответствует количеству выполненных повторений цикла.

Синий цвет терминала и контакта показывает, что выходное значение представлено целым числом.

Loop Condition (Условие цикла) терминал условия выхода из а) цикла. Имеет один контакт слева – вход. Он может работать в а) Stop if True (остановить, если Истинный) – цикл прерывается, если на этот терминал поступает значение булевой переменной True (Истинный).

б) Continue if True (продолжать, если Истинный) – цикл продолжается до тех пор, пока значение этого терминала – True. Зеленый цвет терминала и контакта показывает, что формат данных, передаваемых ему, булев (логический).

Булев или логический тип данных назван в честь английского математика Джорджа Буля (George Boole 1815 - 1864) основоположника математической логики. Переменная этого типа представлена в памяти компьютера одним битом и может принимать только два значения True (Истинный) и False (Ложный), соответствующие 1 и 0.

Рис.1.12. Терминал кнопки Stop на блок-схеме Исправим ошибку на блок-схеме. Для этого подключим к терминалу условия цикла кнопку, прерывающую его выполнение.

Наведем указатель мыши на терминал условия цикла, и, нажав правую кнопку мыши, выберем в появившемся меню режим работы терминала Stop if True. Убедимся, что иконка терминала приобрела соответствующий вид.

Наведем указатель мыши на контакт терминала, и когда курсор превратится в катушку с проводом (Wiring tool), нажмем правую кнопку мыши В появившемся меню выберем Create Control (создать элемент управления) В результате на передней панели появится кнопка управления Stop, а ее терминал на блок схеме автоматически соединится с терминалом условия цикла (рис.1.12) Теперь изменим вид элементов управления на передней панели.

Поместим указатель мыши на элемент Число А и нажмем правую кнопку мыши.

В появившемся меню выберем Replace (заменить) Modern Numeric Knob (шарообразная ручка).

Элемент управления примет вид, показанный на рисунке справа. Передвинем надпись Число А при помощи мыши.

Изменим атрибуты ручки. Нажмем правую кнопку мыши и в выпадающем меню выберем Visible Items (Видимые объекты) Ramp.

Для удобства точной установки ручки выберем в том же меню Digital Display (цифровой дисплей) Рис.1.13. Передняя панель с измененными элементами управления Аналогично изменим остальные элементы управления, чтобы передняя панель выглядела так, как показано на рис. 1.13.

Элементы управления и индикаторы можно перемещать при помощи мыши и изменять их размеры «растягивая» их за уголки.

После того, как редактирование завершено, необходимо сохранить программу, используя меню File Save, или сочетание клавиш Теперь программа полностью готова, и ее можно запустить.

Для этого нажмем кнопку выполнения программы (Run) Вращая и передвигая ручки элементов управления при помощи мыши, убедимся в работоспособности программы.

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

Не останавливая программу, перейдем в окно блок схемы и нажмем кнопку Highlight Execution (подсветить выполнение) На проводниках появятся движущиеся точки, которые показывают, в каком порядке выполняется программа.

ОБЯЗАТЕЛЬНО отключите режим Highlight Execution, иначе программа будет выполняться очень медленно, так как это демонстрационный режим, специально предназначенный для отладки программ.

Перейдем на переднюю панель, и остановим выполнение программы, нажав кнопку Stop.

Рис.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).

Рис.1.15. Редактирование линий графика Установим пределы шкалы Y Waveform Chart в соответствии с минимальным и максимальным значением суммы, щелкнув по крайним значениям шкалы, и введя новые значения.

Сохраним программу и запустим ее.

Щелкнем правой кнопкой мыши на маленький прямоугольник справа вверху над панелью самописца, на котором изображен фрагмент линии графика и, используя контекстное меню, изменим цвет, тип и толщину линии, добавим на нее точки и т.д. (рис.1.15) Остановим программу Заменим константу, определяющую задержку, на элемент управления. Для этого добавим на переднюю панель еще один элемент управления Modern Numeric Horizontal Pointer Slide (горизонтальный движок с указателем), и назовем его Задержка Вызовем контекстное меню этого элемента и выберем в нем Find Terminal (найти терминал). При этом программа переключится в окно блок схемы, а в нем выделится терминал элемента управления Задержка.

Удалим константу и вместо нее подключим терминал Задержка. При этом около контакта появится красная точка. Эта точка показывает, что в данном месте происходит преобразование типа данных.

Рис.1.16. Блок схема окончательного варианта программы Example01.vi То есть тип данных с плавающей точкой с двойной точностью (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 (логарифмическая).

Сохраним и запустим программу.

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. Блок схема программы с циклом Рис.2.2. Результат выполнения Запустим программу. Результат ее выполнения выглядит, как показано на рис.2.2.

Обратим внимание, что в точке пересечения проводом границы цикла For Loop появился символ в виде квадратных скобок, вписанных в квадрат, а толщина проводника увеличилась. Этот квадрат называется Auto Indexing Tunnel (туннель автоматического индексирования).

Пересечение проводником границы любой структуры в среде LabVIEW называется туннелем (Tunnel). Автоматическое индексирование означает, что после того, как цикл For Loop повторится заданное число раз, на выходе из туннеля появится одномерный массив чисел, переданных из цикла по одному на каждой его итерации. В нашем случае (N=100) массив будет состоять из 100 элементов, имеющих номера о 0 до 99. Проводник, по которому передается массив, изображается более толстой или двойной линией в зависимости от размерности массива (рис.2.3).

Рис.2.3. Обозначение проводников, передающих данные различной размерности Из контекстного меню проводника (вызывается правой кнопкой мыши), передающего массив, выберем Create Indicator Немного растянем при помощи мыши индикатор Array (массив), появившийся на передней панели, чтобы он принял вид, показанный на рисунке справа. В ячейках отображаются элементы созданного массива. Элемент управления, расположенный слева вверху, задает номер элемента массива, который будет показан в верхней ячейке индикатора.

Рис.2.4. Обозначение проводников, передающих данные различной размерности Сохраним массив в файл. Наиболее простой способ сохранить данные в файл сводится к использованию одного единственного оператора 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.

Входы:

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 Рис.2.5. Запись данных в файл.

Откроем файл в указанной нами папке. Он будет содержать строку чисел.

Теперь добавим на блок-схему константу типа Boolean (Programming Boolean False constant) и подключим ее к контакту Transpose? (можно также создать константу из контекстного меню этого контакта, Create Constant) Поместим указатель мыши на белое поле около константы, дважды нажмем левую кнопку и напишем комментарий к этой константе – «Транспонировать?» (Комментарии к блок-схемам значительно облегчают работу с ними, ВСЕГДА комментируйте ваши программы и как можно более подробно!) Нажимая левую кнопку мыши, изменим состояние константы с F (False) на T(True).

Запустим программу и сохраним данные в файл DataT.txt Откроем файл и убедимся, что в нем записан столбец чисел – оператор записи в файл транспонировал массив – его строки стали столбцами.

Процедура Write to Spreadsheet File позволяет быстро сохранить интересующие нас данные в текстовый файл. При этом она автоматически выполняет несколько последовательных операций:

1) преобразует массив чисел в строку символов (ASCII кодов символов);

2) создает файл для записи этих чисел на жестком диске компьютера;

4) завершает работу с диском – закрывает файл.

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

Рис.2.6. Процедура записи массива в файл (эквивалент Write to Spreadsheet file ) Поместим на блок схему процедуру преобразования массива в строку символов (Programming String Array To Spreadsheet String (массив в строку крупноформатной таблицы)) (рис.2.6) Подключим массив к его контакту array. Из контекстного меню контакта format string (строка форматирования) выберем Create Constant и впишем в нее, например %.3f (3 знака после запятой, плавающая точка). Правила составления строки форматирования можно найти в справочной системе LabVIEW.

Добавим на блок-схему операции работы с файлами из меню Programming File I/O три процедуры: 1) Open/Create/Replace File;

2) Write o Text File; 3) Close file.

Создадим константу (правой кнопкой мыши) для контакта file path процедуры Open/Create/Replace File и введем в нее путь к файлу, в который мы хотим сохранить данные (если эту константу не подключать, то будет открываться диалоговое окно, такое же, как при использовании функции Write to Spreadsheet String).

Создадим константы для контактов operation (действие) и access (доступ) и выберем их значения replace or create with confirmation (заменить и или создать с подтверждением) и read/write (чтение/запись), соответственно.

Open/Create/Replace File открывает (создает, заменяет) файл и передает ссылку (refnum) на него и информацию об ошибках (error) следующим процедурам. Соединим процедуры между собой, передавая им ссылку на файл (гладкий сине-зеленый провод), и данные об ошибках (толстый черно-желтый провод).

Подключим к последнему выходу информации об ошибках (error out) процедуру Programming Dialog & User Interface General Error Handler (универсальный обработчик ошибок). В случае если в одной из процедур произойдет ошибка, например, не будет открыт файл, то Error Handler откроет окно с сообщением об ошибке.

Рис.2.7. Запрос на перезапись файла. Рис.2.8. Сообщение о том, что файл не (Путь к файлу не обязательно такой, как был переписан, так как пользователь Кроме этого, последовательное соединение процедур проводником сообщений об ошибках гарантирует, что они будут выполняться в точности в том порядке, в котором они соединены между собой.

Подключим выход процедуры Array To Spreadsheet String к входу text процедуры Write to text file. Обратите внимание, что эта процедура имеет еще один вход – Prompt (подсказка) для переменной формата String, который мы не используем!

Запустим программу. Она автоматически сохранит данные в файл, путь к которому мы указали.

При повторном запуске программа запросит разрешение переписать этот файл в виде диалогового окна (рис.2.7). Если вы отмените перезапись, выбрав Cancel, то сообщение об ошибке пройдет от одного элемента к другому и затем к обработчику ошибок, который откроет окно сообщения об ошибке (рис.2.8).

Уменьшите количество повторений цикла For Loop до раз, включите режим Highlight Execution.

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

Отключите режим Highlight Execution Усовершенствуем нашу программу. Сделаем так, чтобы она непрерывно вычисляла массивы случайных чисел, но сохраняла массив в файл, если нажата кнопка Запись на передней панели. Непрерывное выполнение программы осуществим так же, как в и предыдущем примере – поместим все вычисления в цикл While Loop, который прерывается при нажатии кнопки Stop. Теперь нам понадобится структура Case Structure, которая будет проверять Рис.2.9. Программа записи массива в файл c использованием Case Structure состояние кнопки Запись и записывать массив в файл, если она нажата, то есть, когда ее состояние – True.

Поместим всю программу в цикл While loop и создадим кнопку Stop для выхода из цикла.

Поместим процедуру записи в файл внутрь структуры Сase Structure (Programming Structures) Добавим на переднюю панель кнопку Controls Modern Boolean OK button и назовем ее Запись. Также изменим надпись на самой кнопки.

Рис.2.10. Два состояния структуры Case Скроем имена переменных, написанные над кнопками сняв галочку в контекстном меню кнопки Visible Item Label Подключим терминал кнопки Запись к контакту Case Selector структуры Case Structure (рис.2.9).

Структура Case содержит два случая. Один из них соответствует состоянию True входа Case selector (a), а другой – False (б). При редактировании программы оба случая можно просмотреть, нажимая левую кнопку мыши, когда указатель находится на стрелках слева и справа от заголовка в верхней части структуры.

Сохраним и запустим программу.

3. Интерфейс пользователя. Символьная строка Взаимодействие человека и компьютера осуществляется при помощи интерфейса пользователя (interface – от англ. граница раздела, стык) – комплекса программных и аппаратных средств, позволяющих человеку управлять работой компьютера и воспринимать результат его работы.

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

Аналогично мы можем проверить значение любого бита в электрической схеме компьютера. Достаточно подключить лампу к соответствующему проводнику. Лампа светится, когда через нее течет ток, то есть состояние проводника 1, и не светится, когда состояние проводника 0 (нет тока). В свою очередь, человек воспринимает свет лампы глазами и делает вывод о состоянии данного проводника.

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

Чтобы не конструировать громоздкие пульты, в современных универсальных компьютерах используют другой вид интерфейса – графический. В Windows и LabVIEW, используются только две кнопки – это кнопки манипулятора мышь. А то, какой именно бит переключает каждая из них, зависит от положения манипулятора на столе, вернее, от места, в котором находится изображение специального указателя (курсора) на экране монитора компьютера. Компьютер отслеживает перемещения мыши по столу и перемещает изображение указателя по экрану монитора. Если указатель находится в области, где на экране нарисована кнопка, – то при нажатии на кнопку мыши изменяется состояние некоторой переменной в памяти компьютера. Но если, мы, перемещая мышь, отведем указатель в сторону от нарисованной кнопки, то компьютер проигнорирует нажатие на кнопку мыши.

Когда мы помещаем указатель мыши на изображение кнопки Stop, компьютер начинает проверять, не нажата ли левая кнопка мыши. И если мы нажмем на кнопку, выполнение цикла прекратится. Здесь возможно несколько вариантов. Например, выполнение программы можно прекратить сразу же, как только мы нажмем кнопку мыши. А можно – только после того, как мы, нажав кнопку, ее отпустим. Во втором случае у нас будет возможность передумать – если мы навели указатель на нарисованную кнопку, нажали на кнопку мыши, а затем передумали останавливать программу, то можно, не отпуская кнопку мыши, отвести указатель в сторону. И нарисованная кнопка не сработает. Такая настройка кнопки (кстати, стандартная для графического интерфейса в среде Windows) учитывает особенность человеческого поведения – прежде, чем взять какой либо предмет, человек легко прикасается к нему, и, прикоснувшись, окончательно решает – брать или нет.

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

В среде LabVIEW реакция кнопки на нажатие может быть настроена тем или иным образом при помощи параметра Mechanical Action (механическое действие) в контекстном меню этой кнопки.

Существует два вида отклика кнопки на нажатие:

Switch (переключатель) – при нажатии кнопка изменяет свое состояние (переключается) и остается в нем до следующего нажатия;

Latch (защелка) – при нажатии кнопка переключается и ждет, пока программа не проверит ее, а после первой проверки автоматически возвращается в исходное состояние.

Всего параметр Mechanical Action имеет шесть возможных значений:

Switch When Pressed – кнопка переключается в момент нажатия на нее;

Switch When Released – переключается в момент, когда ее отпускают;

(в этом случае есть возможность передумать – если вы, не отпуская кнопку мыши, отведете указатель от кнопки, то ее состояние не изменится).

Switch Until Released – переключается в момент нажатия, и возвращается в исходное состояние когда ее отпускают;

Latch When Pressed – переключается в момент нажатия и возвращается в исходное состояние после проверки ее состояния программой;

Latch When Released – переключается в момент, когда ее отпускают и возвращается в исходное состояние после проверки ее состояния программой;

Latch Until Released – переключается в момент нажатия и возвращается в исходное состояние после того, как будет произведена проверка программой ее состояния, или кнопка будет отпущена, в зависимости от того, какое из этих событий произойдет позже другого.

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

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

Создадим интерфейс виртуального прибора, показанный на рис.3.1.

и сохраним его под именем Example03.vi В качестве индикаторов состояния кнопок используем круглые светодиоды Controls Modern Boolean Round LED (LED – от англ. Light Emitting Diode – светоизлучающий диод) В качестве индикатора чтения кнопок используем прямоугольный светодиод, в контекстном меню которого изменим настройки цвета светодиода: выберем красный цвет для включенного состояния, и темно красный – для выключенного (Properties Appearance Colors) Для украшения интерфейса используем накладные панели Controls Modern Decorations Raised Box(выпуклая прямоугольная панель).

Рис.3.1. Интерфейс программы Example Воспользуемся панелью инструментов для того, чтобы равномерно и ровно расположить кнопки и индикаторы на передней панели, изменить шрифт и переместить выпуклые панели на задний план В контекстном меню каждой из кнопок установим значение Mechanical Action, соответствующее надписям на панели. Кнопку Latch When Released выделим цветом – это стандартная настройка кнопок Windows Наша программа должна время от времени проверять состояние кнопок. Чтобы мы знали, когда происходит проверка, сделаем так, чтобы в это время загорался светодиод READ (чтение). Программа будет выполнять в цикле следующие действия: 1) включить светодиод READ, 2) проверить состояние кнопок и включить/выключить соответствующие светодиоды, 3) подождать некоторое время (50 мс), чтобы мы успели заметить вспышку светодиода READ, 4) Выключить светодиод READ, 5) подождать 2 секунды, чтобы мы успели понять, что происходит, 6) повторить процедуру. Блок схема этой программы показана на рис.3.2.

Рис.3.2. Блок схема Example Так как при выполнении данной программы важна точная последовательность действий, то воспользуемся структурой Flat Sequence Structure (плоская, развернутая структура последовательности) (Functions Structures).

Flat Sequence Structure имеет вид кинопленки, кадры которой исполняются один за другим. Новые кадры можно добавить, выбрав в контекстном меню структуры Add frame before или Add frame after (добавить кадр до или после) Для того чтобы выключить светодиод READ в четвертом кадре мы используем структуру Local Variable (локальная переменная) (Functions Structures) В контекстном меню Local Variable нужно выбрать Change to write и Select Item (выбрать объект) READ (имя светодиода) Запустим программу и проверим отклик кнопок на различные воздействия, нажатие кнопки мыши, отпускание кнопки мыши, вывод указателя с кнопки при нажатой кнопке мыши, удержание кнопки нажатой длительное время.

Рис.3.3. Вариант оформления индикатора READ (светодиод на заднем плане).

Обратите внимание, что зеленые светодиоды переключаются только после того, как программа проверит состояние кнопки (включится светодиод READ).

Можно дополнительно украсить программу, если растянуть светодиод READ, переместить его на задний план и «подложить»

под панели (рис.3.3).

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

Напишем программу, которая считает некоторые предметы, например, яблоки. И выводит ответ в виде строки текста. Например: «У меня есть яблок».

Создадим новый виртуальный прибор, и сохраним его под именем Example04.vi.

На передней панели поместим цифровой элемент управления, при помощи которого мы будем вводить количество «яблок». В контекстном меню выберем тип данных – 32 разрядное целое число без знака U32 (отрицательное число яблок не имеет смысла).

Поместим рядом дополнительный цифровой индикатор, который будет отображать число в двоичной форме – так, как оно представлено в памяти компьютера назовем его Двоичное число Рис.3.4. Передняя панель и блок схема программы, которая составляет строку текста В контекстном меню этого индикатора выберем Display Format Добавим текстовый индикатор Controls Modern String & Path String Indicator, который отображает созданную программой строку (последовательность символов).

Используя операторы из меню Functions Programming String, соберем строку «ответа» (рис.3.4).

В цикл While Loop ОБЯЗАТЕЛЬНО нужно добавить задержку Wait Until Next ms Multiple (рис.3.4).

Если этого не сделать, то компьютер будет стремиться проверять состояние элементов управления и выполнять цикл как можно быстрее, нерационально используя свои ресурсы (даже такая простая программа способна полностью загрузить процессор!). С другой стороны, вполне достаточно проверять состояние элементов управления 10 раз в секунду. Оператор не заметит этой задержки, так как время реакции Рис.3.5. Усовершенствованная программа Example04.vi человека, как правило, не меньше 0,1 с. Всегда используйте задержку, если программа обращается к передней панели!

Строка, получающаяся в результате выполнения этой программы, в некоторых случаях выглядит немного странно, например, «У меня есть 2 яблок» или «0 яблок». В первом случае человек скажет «У меня есть яблока», а во втором – «У меня нет яблок».

Сделаем ответ программы более похожим на человеческую речь.

Заметим, что слово яблоко согласуется с числительным. Мы говорим одно яблоко, затем говорим два, три, четыре яблока, с пяти до двадцати мы говорим «яблок», а затем все повторяется: 21 яблоко, яблока, 25 яблок и т.д. То, какое слово следует добавить в строку, определяется двумя младшими разрядами числа.

Выделим эти два разряда – разделим введенное число два раза подряд на 10 и возьмем остатки от этих делений (рис.3.5) (Functions Programming Quotient & Remainder (частное и остаток)).

Используя операторы сравнения из меню Functions Programming Comparison, и логическую операцию AND из меню Boolean организуем проверку значений этих разрядов и выбор правильной формы слова яблоко (рис.3.5).

При проверке на 2, 3, 4 в контекстном меню оператора In range and coerce установите Include upper limit (включить верхний предел в интервал) и Include lower limit (включить нижний предел в интервал).

В заключение добавим еще одну проверку, чтобы программа, подражая человеку, выводила строку «У меня нет яблок», если введенное число равно нулю.

Данная программа имитирует осмысленную человеческую речь для того, чтобы пользователю было проще читать ее ответ. Иногда такого рода имитация способна создать у пользователя иллюзию «разумности» машины. Но, как мы убедились на данном примере, машина просто составляет строку символов строго по заданным нами правилам.

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 мс. Это сделано для того, чтобы не перегружать компьютер слишком частой проверкой и перерисовыванием большого числа элементов передней панели.

Рис.4.1. Программа Example04.vi Рис.4.2. Программа поиска элементов массива, попадающих в заданный диапазон В заключение рассмотрим стандартный метод выбора элементов массива, значения которых попадают в некоторый интервал (рис.4.2). В качестве входных данных мы используем массив случайных чисел, созданный в цикле For Loop. Размер массива задается оператором при помощи элемента управления Число элементов. Этот массив передаются процедуре поиска элементов, значения которых находятся в интервале, заданном оператором при помощи элементов управления Верхняя граница интервала и Нижняя граница интервала.

В этой процедуре мы определяем полное количество элементов входного массива при помощи оператора Array Size. Затем создаем массив точно такого же размера, как и входной, все элементы которого равны нулю (Initialize Array). Затем последовательно проверяем все элементы входного массива в цикле For Loop. Для проверки используется уже знакомый нам оператор In range and coerce.

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

Чтобы избежать этого, в данной программе мы заранее создаем достаточно большой массив. Мы записываем нужные нам элементы в этот массив, последовательно заменяя значения его элементов.

Одновременно программа считает количество таких замен N. После того, как поиск завершен, мы изменяем размер выходного массива, и оставляем в нем первые N элементов, которые содержат найденные нами значения.

Для замены значений массива и счета количества этих замен в программе используется уже знакомая нам структура Case Structure.

В этой программе используется туннель особого вида – так называемый Shift register (Сдвигающий регистр). Чтобы создать его, нужно в контекстном меню туннеля выбрать Replace with Shift Register.

В результате вместо одного туннеля появится два – один на входе в цикл (слева), а другой – на выходе (справа).

Значение, поступившее на вход регистра, передается в цикл при его запуске. Во время выполнения цикла значение, передаваемое на Рис.4.3. Счетчик с использованием Shift Register правый терминал сдвигающего регистра, запоминается и возвращается обратно в цикл при его следующем повторении через левый терминал.

После остановки цикла значение сдвигающего регистра выводится на выход справа. Например, на рис.4.3 состояние регистра увеличивается на единицу при каждом повторении цикла и отображается индикатором Внутри. После завершения цикла общее число повторений передается на индикатор Снаружи.

Список литературы 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 см., М. Сов. радио Оглавление Предисловие

1. Блок схема. Элементы управления и индикаторы

2. Цикл For Loop. Запись данных в файл

3. Интерфейс пользователя. Символьная строка

4. Массивы и работа с ними

Список литературы

Оглавление

Приложение. Задания для самостоятельной работы

Задание 1. Преобразование десятичного числа в двоичное

Задание 2. Двоичный сумматор

Задание 3. Гирлянда «Бегущие огни»

Задание 4. Метод деления отрезка пополам

Задание 5. Спираль

Задание 6. Измерение времени реакции человека

Задание 7. Делитель напряжения

Задание 8. Счет числительными

Задание 9. Фонетический анализ текста

Задание 10. Затухающие колебания

Приложение. Задания для самостоятельной работы Задание 1. Преобразование десятичного числа в двоичное Напишите программу, которая переводит методом деления на десятичное число ((U8) – восьмиразрядное целое число без знака) в восьмиразрядное двоичное число, представленное в виде массива булевых переменных. Обратите внимание, что младший разряд на индикаторе массива находится справа.

Указание: используйте цикл While Loop с задержкой в 100 мс для проверки элементов управления и цикл For Loop для последовательного деления на 2 при помощи функции Quotient & Remainder. Правильный порядок бит индикатора можно получить с помощью функции Reverse Array.

Задание 2. Двоичный сумматор Используя логические функции из меню Boolean, сконструируйте трехразрядный двоичный сумматор, который складывает два двоичных числа.

Указание: Сначала создайте двоичный полусумматор – программу, которая складывает два одноразрядных двоичных числа. Полусумматор имеет два входа: слагаемое A и слагаемое B; и два выхода: сумма S и перенос в следующий разряд C. Из правил сложения чисел столбиком получаем таблицу истинности для полусумматора:

Сумма S получается при помощи логической операции Exclusive OR (исключающее или) для входов A и B, а перенос C – при помощи операции AND (и) для тех же входов. При сложении также необходимо учитывать перенос из предыдущего разряда. Его добавляют к сумме при помощи второго полусумматора. Перенос сумматора получают помощи операции OR (или) для выходов переноса каждого из полусумматоров.

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

Двоичный полусумматор (а); однобитный двоичный сумматор (б);

сумматор n двоичных разрядов. M – перенос в следующий разряд, m – вход для переноса из предыдущего разряда, S – сумма, A, B – слагаемые. Индексы – номера разрядов.

Оранжевый цвет – операция XOR (исключающее ИЛИ); желтый – операция AND (И); зеленый – OR (ИЛИ).

Задание 3. Гирлянда «Бегущие огни»

Напишите программу, моделирующую работу гирлянды «Бегущие огни»

Указание: Иллюзия движения огней вдоль гирлянды создается последовательным переключением нескольких (не менее трех) групп светодиодов. Например, на рисунке, сначала включается первая группа (1, 4, 7), светится в течение 100 мс, затем, она выключается, и включается вторая группа (2, 5, 8), через 100 мс вместо этой группы включается третья группа (3, 6, 9) и т.д.

Задание 4. Деление отрезка пополам Напишите программу, которая определяет загаданное пользователем целое число от 0 до 100 методом деления отрезка пополам.

Указание: Для поиска используйте цикл While Loop c задержкой 100 мс.

В цикле необходимо хранить и изменять в процессе поиска три числа – начало отрезка (первоначально 0), конец отрезка (первоначально 100) и середина отрезка (первоначально 50). Эти числа можно хранить при помощи сдвигающего регистра Shift Register (см. урок 3).

В цикле проверяется состояние кнопок передней панели. Если кнопки не нажаты, параметры отрезка передаются без изменений в следующую итерацию. Нажатие кнопок Больше или Меньше отслеживается двумя структурами Case Structure. Например, если нажата кнопка Больше, то выполняются следующие операции: 1) середина отрезка становится началом нового отрезка, 2) Середина нового отрезка вычисляется как среднее арифметическое его начала и конца. Аналогичные операции выполняются, если нажата кнопка Меньше, только середина отрезка в этом случае становится концом нового отрезка. Условием выхода из цикла является нажатие кнопки Равно или совпадение конца и начала отрезка.

Задание 5. Спираль Напишите программу, которая рисует плоскую спираль с заданным числом витков.

Указание: Для отображения спирали используйте график XY Graph из меню элементов управления. Он изображает точки, координаты которых даются ему виде двух одномерных массивов одинаковой длины. В одном массиве координаты X, а в другом – соответствующие им значения Y. Массивы объединяются в кластер из двух элементов:

при помощи функции Bundle из меню Cluster, Class & Variant. Для вычисления тригонометрических функций используйте меню Mathematics. Координаты точек спирали вычисляйте в цикле For Loop и собирайте массивы при помощи автоматического индексирования.

Проверку элемента управление Количество витков можно организовать при помощи цикла While Loop с задержкой 100 мс.

Задание 6. Измерение времени реакции человека Напишите программу, которая измеряет интервал времени между включением светодиода на передней панели и нажатием на кнопку.

Указание: Измерение времени реакции выполняется по следующему протоколу:

1) После запуска программы проходит некоторый интервал времени (длительность этого интервала изменяется случайным образом от 2 до секунд); 3) затем включается светодиод и считывается значение системного таймера при помощи функции Tick Count, ms; 4) сразу после включения светодиода запускается пустой цикл While Loop, который прерывается нажатием кнопки НАЖАТЬ; 4) После завершения цикла считывается второе значение системного таймера (момент нажатия); 5) время реакции оператора вычисляется как разность этих двух моментом (в миллисекундах); 6) измерения повторяются несколько раз в цикле For Loop (измерения отделяются друг от друга случайными интервалами времени продолжительностью от 2 до 7 секунд); 7) результаты измерений записываются в массив; 8) вычисляется среднее время реакции оператора (используйте функцию Mean (среднее) из меню Mathematics).

Прогресс выполнения теста отображается при помощи индикатора Horizontal Progress Bar, подключенного к индексу цикла For Loop.

Задание 7. Делитель напряжения Создайте виртуальный прибор, моделирующий работу делителя напряжения, состоящего из двух резисторов R1 и R2. К выходу делителя подключена нагрузка сопротивлением Rн. Значение сопротивлений, а также входное напряжение делителя Uвх можно задавать при помощи элементов управления. Индикаторы показывают входной ток делителя Iвх, напряжение на нагрузке Uн и ток через нее Iвх. Два индикатора показывают мощность, потребляемую делителем Pвх = UвхIвх и мощность, передаваемую нагрузке Pн = UнIн Указание: Для вычисления токов и напряжений используйте закон Ома где I – ток через участок электрической цепи, U – разность потенциалов на концах этого участка, R – электрическое сопротивление этого участка цепи.

Сопротивление двух последовательно соединенных резисторов R1 и R вычисляется по формуле а сопротивление двух резисторов, соединенных параллельно – по формуле Ограничьте точность отображения значений на цифровых индикаторах четырьмя значащими цифрами (Significant digits), используя контекстное меню Display Format… Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс.

Задание 8. Счет числительными Напишите программу, которая записывает введенное двухзначное число строкой соответствующих числительных.

Указание: обратите внимание, что числительные от 21 до получаются написанием перед числительным для чисел от 1 до 9 слова, обозначающего десятки – двадцать, тридцать,..., девяносто.

Исключение составляет 0 и числа от 10 до 19.

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

Выбор числительных организуйте при помощи структуры Case Structure.

Если к терминалу условия подключить данные типа целое число, то станет возможно создавать случаи, соответствующие различным значениям этого числа, или даже диапазонам значений. Новые случаи создаются из контекстного меню структуры Add Case After или Add Case Before.

Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс.

Задание 9. Фонетический анализ текста Напишите программу, которая подсчитывает количество гласных звуков в заданном тексте. В русском языке имеется шесть гласных звуков, которые обозначаются десятью гласными буквами:

Программа подсчитывает количество гласных звуков в тексте, введенном в текстовый элемент управления. Для этого она находит все буквы, кодирующие тот или иной звук, без учета регистра (строчные и прописные). Относительные частоты (отношение количества определенных гласных звуков к общему количеству гласных звуков в тексте), отображается при помощи массива индикаторов Vertical Progress Bar.

Указание: поиск и букв в тексте можно осуществить при помощи функции Search and Replace String из меню String. Буквы можно заменять пустой строкой (по умолчанию для данной функции).

Количество замен будет соответствовать количеству найденных букв.

Не забудьте задать при помощи булевых констант параметры поиска – Ignore case? (не учитывать регистр?) и Replace All? (заменить все?).

Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс.

Задание 10. Затухающие колебания Напишите программу, которая демонстрирует экспоненциально затухающие гармонические колебания стрелки индикатора относительно среднего положения. Колебания начинаются после нажатия на кнопку Пуск.

Указание: Проверку состояния элементов управления организуйте, используя цикл While Loop с задержкой 100 мс. Расчет положения стрелки и изменение состояния индикатора также организуйте при помощи цикла While Loop. Этот цикл выполняется до тех пор, пока значение амплитуды колебаний не станет меньше заданного значения, например, 0,01.





Похожие работы:

«Болдырев А.А., Кяйвяряйнен Е.И., Илюха В.А. БИОМЕМБРАНОЛОГИЯ Учебное пособие для студентов высших учебных заведений, специализирующихся в области биологии, медицины и психологии Петрозаводск 2006 УДК 571.1 Болдырев А.А., Кяйвяряйнен Е.И., Илюха В.А. Биомембранология: Учебное пособие.– Петрозаводск: Изд-во Кар НЦ РАН, 2006.– 226 с., 78 рис., 12 табл. Учебное пособие Биомембранология описывает основные закономерности строения и функционирования клеточных мембран. Книга написана на основании...»

«В.И.ОВЧАРЕНКО КЛАССИЧЕСКИЙ И СОВРЕМЕННЫЙ ПСИХОАНАЛИЗ Программы курсов и спецкурсов (Электронная версия) А АНТОЛОГИЯ МИРОВОГО ПСИХОАНАЛИЗА УДК 159.9 ББК 88.8 О 35 Овчаренко Виктор Иванович О 35 Классический и современный психоанализ. Программы курсов и спецкурсов. М.: Академический проект, 2000. – 622 с. (Электронная версия с изменениями и дополнениями – 550 с.) ISBN 5-8291-0033-9 Первая в России представительная публикация программ различных учебных курсов и спецкурсов по классическому и...»

«В.В. Пиляева ГРАЖДАНСКОЕ ПРАВО В СХЕМАХ И ОПРЕДЕЛЕНИЯХ УЧЕБНОЕ ПОСОБИЕ Пятое издание, переработанное УДК 347(075.8) ББК 67.404я73 П32 Пиляева В.В. П32 Гражданское право в схемах и определениях : учебное пособие / В.В. Пи­ ляева. — 5е изд., перераб. — М. : КНОРУС, 2012. — 272 с. ISBN 978-5-406-01946-7 Учебный материал представлен в наглядной форме — структурнологи е­ ч ски и схемами, что способствует успешному усвоению курса граждан кого м с права России. Для студентов, аспирантов и...»

«ПРАВИТЕЛЬСТВО САНКТ-ПЕТЕРБУРГА КОМИТЕТ ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ (ПОВЫШЕНИЯ КВАЛИФИКАЦИИ) СПЕЦИАЛИСТОВ САНКТ-ПЕТЕРБУРГСКАЯ АКАДЕМИЯ ПОСТДИПЛОМНОГО ПЕДАГОГИЧЕСКОГО ОБРАЗОВАНИЯ Институт детства РАЗРАБОТКА ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГО ОБЩЕГО ОБРАЗОВАНИЯ ДЛЯ ОБРАЗОВАТЕЛЬНЫХ УЧРЕЖДЕНИЙ САНКТ-ПЕТЕРБУРГА Методические рекомендации Санкт-Петербург Авторский коллектив: Л.М. Беловицкая, М.В. Бойкина, Н.В....»

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОСТОВСКИЙНАДОНУ ГОСУДАРСТВЕННЫЙ КОЛЛЕДЖ СВЯЗИ И ИНФОРМАТИКИ ОРГАНИЗАЦИЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ ОСНОВНЫХ ГРУПП РКСИ, СТУДЕНТОВ С ОСЛАБЛЕННЫМ ЗДОРОВЬЕМ И ОСВОБОЖДЕННЫХ ОТ ФИЗИЧЕСКИХ НАГРУЗОК по дисциплине Физическая культура для специальностей СПО Учебное пособие I часть 2006 ББК 75.1я723 М36 Рекомендовано к изданию Экспертным советом РКСИ Протокол № 2 от 15.10. Рецензенты:...»

«Стр 1 из 271 7 апреля 2013 г. Форма 4 заполняется на каждую образовательную программу Сведения об обеспеченности образовательного процесса учебной литературой по блоку общепрофессиональных и специальных дисциплин Иркутский государственный технический университет 151002 Металлообрабатывающие станки и станочные комплексы Наименование дисциплин, входящих в Количество заявленную образовательную программу обучающихся, Автор, название, место издания, издательство, год издания учебной литературы, №...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования Дальневосточный государственный гуманитарный университет (ГОУ ВПО ДВГГУ) ИНСТИТУТ МАТЕМАТИКИ, ФИЗИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Кафедра физики ОТЧЕТ о результатах самообследования КАФЕДРЫ ФИЗИКИ ИНСТИТУТА МАТЕМАТИКИ, ФИЗИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ по состоянию на 11.12.2008 года Утвержден на заседании кафедры физики...»

«iv ои.о Рекомендованы к изданию Содержание •^ Учебно-методическим Советом Вологодского института бизнеса Методические указания по выполнению 4 контрольной работы 4 Методические указания по решению задач 5 Задания к контрольной работе 20 37 Вопросы к экзамену Составитель: Игнашева С.Н., старший преподаватель кафедры Список литературы бухгалтерского учета Вологодского института бизнеса. Рецензент: Гузакова О.Л., доцент, к.э.н. кафедры экономической теории и менеджмента ВШУ. Статистика:...»

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ имени М.В. Ломоносова ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ VIII Международная научно-практическая конференция Современные информационные технологии и ИТ-образование СБОРНИК НАУЧНЫХ ТРУДОВ Под редакцией проф. В.А. Сухомлина Москва 2013 УДК [004:377/378](063) ББК 74.5(0)я431+74.6(0)я431+32.81(0)я431 С 56 Издание осуществлено при финансовой поддержке Российского фонда фундаментальных исследований (проект № 13-07-06076 _г) Печатается по решению...»

«РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ ЗАОЧНЫЙ УНИВЕРСИТЕТ ИНСТИТУТ КОММЕРЦИИ, МЕНЕДЖМЕНТА И ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ КАФЕДРА МЕНЕДЖМЕНТА УТВЕРЖДЕНА на заседании кафедры _ 200 г. протокол № УПРАВЛЕНЧЕСКИЕ РЕШЕНИЯ МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ИЗУЧЕНИЮ ДИСЦИПЛИНЫ И ЗАДАНИЯ ДЛЯ КУРСОВЫХ ПРОЕКТОВ 5 и 4* курса заочной формы обучения специальности 080507 – Менеджмент организации Балашиха ЦЕЛИ И ЗАДАЧИ ДИСЦИПЛИНЫ. 1. Овладение студентами методологией и организацией разработки управленческого решения....»

«Уникальным территориям Горного Алтая — достойное отношение г.Горно-Алтайск 2001 Редакционная коллегия: Мишурова В.В. Енгоян О.З. Кондрашова Т.В. Шпунт А.А. От редакции Уважаемые читатели! В этот сборник вошли материалы, составившие основу информационной части проекта Уникальным территориям Горного Алтая — достойное отношение (руководитель проекта Мишурова В.В. — директор Экологической Библиотеки ЭкБА, г. ГорноАлтайск; координатор проекта Енгоян О.З. — Горно-Алтайский филиал Фонда Алтай — 21...»

«Инженерная педагогика УДК 377: 378 ПРОЕКТИРОВАНИЕ СОДЕРЖАНИЯ НАЦИОНАЛЬНО-РЕГИОНАЛЬНОГО КОМПОНЕНТА ГОСУДАРСТВЕННЫХ ОБРАЗОВАТЕЛЬНЫХ СТАНДАРТОВ (НА ПРИМЕРЕ СПЕЦИАЛЬНОСТИ 240902 ПИЩЕВАЯ БИОТЕХНОЛОГИЯ) С.И. Дворецкий, Е.И. Муратова, О.В. Зюзина, О.О. Иванов Кафедра Технологическое оборудование и пищевые технологии, ТГТУ Представлена членом редколлегии профессором В.И. Коноваловым Ключевые слова и фразы: государственный стандарт профессионального образования; качество профессиональной подготовки;...»

«Оглавление 1.Цели и задачи дисциплины 2.Место дисциплины в структуре ООП 3 3 Требования к результатам освоения дисциплины 4. Объем дисциплины и виды учебной работы 8 5. Содержание дисциплины 5.1. Содержание разделов дисциплины Тема 1. Теория государства и права Тема 2. Государственное (конституционное) право Тема 3. Гражданское право Тема 4. Семейное право Тема 5. Трудовое право Тема 6. Административное право Тема 8. Экологическое право Тема 9. Правовые основы защиты информации 5.2. Разделы...»

«УДК 338.45 ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЕ ОСНОВЫ РАЗРАБОТКИ СТРАТЕГИИ ЗАКУПОЧНОЙ ДЕЯТЕЛЬНОСТИ МЕТАЛЛУРГИЧЕСКОЙ КОМПАНИИ З.М. Магрупова, д.э.н., Ю.В. Кудряшова, Д.Ф. Иванов, аспирант Череповецкий государственный университет В статье обоснована необходимость изменения стратегии закупочной деятельности металлургической компании путем внедрения категорийного подхода к управлению закупками, представлены основные этапы его реализации, рассмотрены методы осуществления стратегии закупочной деятельности в...»

«ВЫСШЕЕ ФИНАНСОВОЕ ОБРАЗОВАНИЕ АНАЛИЗ ХОЗЯЙСТВЕННОЙ ДЕЯТЕЛЬНОСТИ учебное пособие Под редакцией В.И. Бариленко Омега-Л Москва, 2009 УДК ББК А 64 Публикуется с разрешения ООО Ай Пи Эр Медиа Авторы: Бариленко В.И. — доктор экономических наук, профессор, заведующий кафедрой Анализ хозяйственной деятельности и аудита Саратовского государственного социально-экономического университета. Плотникова Л.К. — к.э.н., доцент кафедры Анализ хозяйственной деятельности и аудита Саратовского государственного...»

«А.Н. Сычев Защита интеллектуальной собственности в России Учебное пособие Севастополь Вебер 2012 УДК 374.77 ББК 67.404.3 С95 Сычев А. Н. С95 Защита интеллектуальной собственности в России : Учеб. пособие [Электронное издание] / А. Н. Сычев. – Севастополь : Вебер, 2012. – 241 с. ISBN 978-966-335-385-2 Рассмотрены основные виды результатов интеллектуальной деятельности и приравненные к ним средства индивидуализации, которым предоставляется правовая охрана в качестве объектов интеллектуальной...»

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. М.В. ЛОМОНОСОВА ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ КАФЕДРА АСТРОФИЗИКИ И ЗВЕЗДНОЙ АСТРОНОМИИ КАФЕДРА ЭКСПЕРИМЕНТАЛЬНОЙ АСТРОНОМИИ А.С. РАСТОРГУЕВ ПРИМЕНЕНИЕ МЕТОДА МАКСИМАЛЬНОГО ПРАВДОПОДОБИЯ ДЛЯ ИССЛЕДОВАНИЯ КИНЕМАТИКИ ГАЛАКТИЧЕСКИХ ПОДСИСТЕМ Учебное пособие по курсу Галактическая астрономия для студентов 2-3 курса Москва, ГАИШ МГУ, 2002 2 КИНЕМАТИКА ГАЛАКТИКИ Оглавление 1 Введение..................................... 2...»

«П.В. ИВАЧЕВ Ю.С. ЧУРИЛОВ К.В. КУЗЬМИН ТЕОРИЯ И ПРАКТИКА СОЦИАЛЬНОМЕДИЦИНСКОЙ РАБОТЫ Екатеринбург 2007 Министерство социальной защиты населения Свердловской области Государственное образовательное учреждение высшего профессионального образования Уральский государственный педагогический университет Институт специального образования П.В. ИВАЧЕВ Ю.С. ЧУРИЛОВ К.В. КУЗЬМИН ТЕОРИЯ И ПРАКТИКА СОЦИАЛЬНО-МЕДИЦИНСКОЙ РАБОТЫ Учебное пособие Екатеринбург Печатается по заказу Министерства УДК 610 (075.8)...»

«Федеральное агенство по образованию и науке Российской Федерации Государственное образовательное учреждение высшего профессионального образования Воронежский государственный университет Д.В. Крыльский, А.И. Сливкин ГЕТЕРОЦИКЛИЧЕСКИЕ ЛЕКАРСТВЕННЫЕ ВЕЩЕСТВА (ЛЕКАРСТВЕННЫЕ ВЕЩЕСТВА С ГЕТЕРОЦИКЛИЧЕСКОЙ СТРУКТУРОЙ) Учебное пособие по фармацевтической химии Воронеж 2007 УДК 615.07 Рекомендовано к изданию Ученым Советом фармацевтического факультета 18.01.2007 г (протокол № ). Р е ц е н з е н т: зав....»

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ Уральский государственный экономический университет ОРГАНИЧЕСКАЯ ХИМИЯ Варианты контрольных работ и примеры решения обучающих задач для студентов факультета сокращенной подготовки специальностей 260202 (технология хлеба, кондитерских и макаронных изделий), 260501 (технология продуктов общественного питания), 080401 (товароведение и экспертиза товаров по областям применения) Екатеринбург 2007 Составители: Калугина И.Ю, Макаренко И.М....»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.