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.





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

«Для выпускников школ и поступающих в вузы Под редакцией профессора в. н. ярыгина Тринадцатое издание, стереотипное КНОРУС • МОСКВА • 2013 УДК 573 ББК 28.0 М91 Рецензент А.И. Антохин, заведующий кафедрой биологии МБФ РНИМУ им. Н.И. Пирогова, д-р биол. наук, проф. Мустафин А. Г. М91 Биология. Для выпускников школ и поступающих в вузы : учебное пособие / А.Г. Мустафин ; под ред. проф. В. Н. Ярыгина. — 13-е изд., стер. — М. : КНоРУс, 2013. — 584 с. ISBN 978-5-406-02862-9 Включает в себя...»

«Нормативно-методическое обеспечение освещения. Перспективы развития (по материалам доклада Е.Н. Савковой, к.т.н., доцента кафедры Стандартизация, метрология и информационные системы БНТУ) Инновации в перспективных областях, связанных со зрительным восприятием световой среды — светотехнике, фотометрии, колориметрии, фотобиологии, эргономике и медицине, а также повышение профессиональной ответственности при выполнении некоторых видов работ, обуславливают более широкое понимание задач освещения....»

«Министерство образования и науки Российской Федерации Федеральное агентство по образованию Южно-Уральский государственный университет Филиал в г. Златоусте Кафедра Проектирование и технология изделий сервиса 658.8(07) Л632 Л.Н. Лисиенкова, О.А. Смолина ОСНОВЫ МЕРЧЕНДАЙЗИНГА Учебное пособие Челябинск Издательство ЮУрГУ 2007 УДК 658.82(075.8)+658.85(075.8) Л632 Одобрено учебно-методической комиссией филиала ЮУрГУ в г. Златоусте Рецензенты: Н.К. Окунева, Н.А. Малинина Лисиенкова, Л.Н. Л632 Основы...»

«ГЕМОДИНАМИЧЕСКАЯ ПОДДЕРЖКА ПРИ СЕПТИЧЕСКОМ ШОКЕ Методическое пособие Екатеринбург 2012 Авторы: Зав.кафедрой анестезиологии и реаниматологии Уральской государственной медицинской академии, член президиума правления Федерации анестезиологов и реаниматологов д.м.н., профессор В.А. Руднов. Ассистент кафедры анестезиологии и реаниматологии Уральской государственной медицинской академии, к.м.н. Ф.Н. Брезгин. Екатеринбург 2012 Список сокращений АКТГ – адренокортикотропный гормон ГКС –...»

«ТЕРРИТОРИАЛЬНОЕ УПРАВЛЕНИЕ ФЕДЕРАЛЬНОГО АГЕНТСТВА ПО УПРАВЛЕНИЮ ФЕДЕРАЛЬНЫМ ИМУЩЕСТВОМ ПО НОВОСИБИРСКОЙ ОБЛАСТИ НЕКОММЕРЧЕСКОЕ ПАРТНЕРСТВО НОВОСИБИРСКАЯ ПАЛАТА ОЦЕНЩИКОВ НОВОСИБИРСКАЯ АССОЦИАЦИЯ РИЭЛТЕРОВ МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ОПРЕДЕЛЕНИЮ РЫНОЧНОЙ СТОИМОСТИ ЗЕМЕЛЬНЫХ УЧАСТКОВ ПО КАДАСТРОВЫМ КВАРТАЛАМ ГОРОДА НОВОСИБИРСКА Новосибирск, 2007 УДК: 658(27+28)+657.9 Автор: Власов А. Д. – научный руководитель ООО Сибирского научного центра Экопрогноз Методические рекомендации подготовлены по...»

«ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТВЫСШАЯ ШКОЛА ЭКОНОМИКИ САНКТ-ПЕТЕРБУРГСКИЙ ФИЛИАЛ УТВЕРЖДЕНО на заседании Ученого совета СПБ филиала ГУ-ВШЭ 27 ноября 2008 г. Протокол № 19/08 Председатель УС А.М.Ходачек Отчет о самообследовании Санкт-Петербургского филиала ГУ-ВШЭ Санкт-Петербург 2008 СОДЕРЖАНИЕ 4 Введение 1 Организационно-правовое обеспечение образовательной деятельности 2 Система управления СПб филиалом ГУ-ВШЭ 2.1 Соответствие организации управления Санкт- Петербургского филиала ГУ-ВШЭ уставным...»

«Проект Министерство образования Российской Федерации Одобрено Утверждаю ПРИМЕРНАЯ ПРОГРАММА СПЕЦИАЛЬНЫХ ДИСЦИПЛИН для научной специальности 25.00.09 Геохимия, геохимические методы поисков полезных ископаемых (геолого-минералогические науки) Москва 2000 2 ПРИМЕРНАЯ ПРОГРАММА СПЕЦИАЛЬНЫХ ДИСЦИПЛИН для научной специальности 25.00.09 Геохимия, геохимические методы поисков полезных ископаемых (геолого-минералогические науки) Пояснительная записка. Независимо от темы кандидатской диссертации и...»

«АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ТЮМЕНСКОЙ ОБЛАСТИ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ (ПОВЫШЕНИЯ КВАЛИФИКАЦИИ) СПЕЦИАЛИСТОВ ТЮМЕНСКИЙ ОБЛАСТНОЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАЗВИТИЯ РЕГИОНАЛЬНОГО ОБРАЗОВАНИЯ ПРОФЕССИОНАЛЬНАЯ ПОДГОТОВКА ПО РАБОЧИМ ПРОФЕССИЯМ (Методическое пособие) Тюмень 2012 http://www.firo.ru/ru/consulting-and-training/programms/85-2009-12-11-18-39-41.html УДК 377 ББК р.1 + 74.200.536 Печатается по решению редакционно-издательского совета АОУ ТОГИРРО, протокол №1...»

«Министерство культуры, по делам национальностей и архивного дела Чувашской Республики Национальная библиотека Чувашкой Республики Сектор научной информации по культуре и искусству Сводный тематический план изданий государственных и муниципальных библиотек Чувашской Республики Чебоксары 2013 ББК 91.17 С 25 Редакционный совет: М. А. Андрюшкина А. В. Аверкиева Н. Т. Егорова Т. А. Николаева Е. Н. Федотова Сводный тематический план изданий государственных и муниципальных библиотек Чувашской...»

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

«Э.А. МАРКАРЬЯН С.Э. МАРКАРЬЯН Г.П. ГЕРАСИМЕНКО УПРАВЛЕНЧЕСКИЙ АНАЛИЗ В ОТРАСЛЯХ Третье издание, переработанное и дополненное Рекомендовано Учебно методическим объединением по образованию в области менеджмента в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению 080500 Менеджмент МОСКВА 2009 УДК 351/354(075.8) ББК 65.053.5я73 М26 Рецензенты: Б.С. Касаев, д р экон. наук, проф., Ю.А. Сулимов, канд. экон. наук, доц. Авторский коллектив: Э.А. Маркарьян,...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ МУРМАНСКИЙ ГОСУДАРСТВЕННЫЙ ГУМАНИТАРНЫЙ УНИВЕРСИТЕТ ПРОГРАММА ГОСУДАРСТВЕННОЙ ИТОГОВОЙ АТТЕСТАЦИИ ОСНОВНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ПОДГОТОВКИ СПЕЦИАЛИСТА ПО СПЕЦИАЛЬНОСТИ 050716.00 Специальная психология с дополнительной специальностью Логопедия Утверждено на заседании кафедры Утверждено на заседании Совета ППИ специальной психологии и логопедии протокол № 4 от 27 декабря 20 11г. протокол № 3 от 21 декабря 20 11 г. Зав.кафедрой специальной...»

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

«ГБОУ ВПО Казанский государственный медицинский университет Минздравсоцразвития России Кафедра общественного здоровья и организации здравоохранения с курсом медицинской информатики Вариационный ряд. Средние величины. Расчет показателей вариационного ряда, используя мастер функций (fх) MS Excel. Учебно-методическое пособие для студентов лечебного факультета Казань 2011 Оглавление Цель занятия: Студент должен уметь Студент должен знать: Информационный материал Основные обозначения вариационного...»

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

«ФГБНУ Центр исследования проблем воспитания, формирования здорового образа жизни, профилактики наркомании, социально-педагогической поддержки детей и молодежи (г. Москва) Департамент общего образования Томской области Департамент образования администрации Города Томска Томский научный центр Сибирского отделения Российской академии наук Национальный исследовательский Томский государственный университет Федеральное государственное бюджетное учреждение высшего профессионального образования Томский...»

«УДК: 81'243 ОПЫТ ИЗУЧЕНИЯ ЯЗЫКОВ К. ЛОМБ И Г. ШЛИМАНОМ КАК КОНЦЕПТУАЛЬНАЯ ОСНОВА УЧЕБНИКА ИНОСТРАННОГО ЯЗЫКА А.В. Переверзев   доцент кафедры теории языка кандидат педагогических наук e-mail: [email protected] Курский государственный университет Автор анализирует методики изучения иностранных языков на примере работ Като Ломб и Генриха Шлимана. Показано, что основные методические подходы к эффективному овладению иностранным языком носят универсальный характер. Они не являются чем-то...»

«МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по применению положений постановления Государственной думы РФ от 02.07.2013 №2559-6 ГД Об объявлении амнистии Содержание Пункт Наименование Стр. Введение 3 Общие положения об амнистии 1. 4 Статьи УК РФ, предусмотренные Актом амнистии. 1.1. 4 Необходимые условия для применения Акта амнистии. 1.2. На какой стадии возможно применение амнистии. 1.3. Применение амнистии на стадии предварительного расследования 2. Применение Акта амнистии в отношении подозреваемого или...»

«Геоэкономика туризма Учебное пособие / А.И. Тарасенок. - М.: ИНФРА-М; Мн.: Нов. знание, 2011. - 272 с.: ил.; 60x90 1/16. Высшее образование). (переплет) ISBN 978-5-16-004960-1 Изложены теоретические основы геоэкономики туризма, факторы и эффекты развития пространственно-экономических процессов в туризме, геоэкономические системы туризма. Особое внимание уделено методическим вопросам исследований внутренней структуры, факторам конкурентоспособности и рынкам сбыта туристских дестинаций....»

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






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

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