Материал: Методические указания к лабораторным работам по дисциплине «Компьютерные технологии в приборостроении» для студентов направления «Приборостроение». Дровникова И.Г., Новикова И.А

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 10. Блок-диаграмма цикла While «продолжение Если Ложь»

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

Предусмотрена возможность изменения условия выхода и соответствующего ему изображения терминала условия выхода. Щелчком правой кнопки мыши по терминалу условия выхода или по границе цикла необходимо вызвать контекстное меню и выбрать пункт Continue If True (Продолжение если Истина). Также можно воспользоваться инструментом УПРАВЛЕНИЕ, щелкнув им по терминалу условия выхода. Изображение терминала условия выхода поменяется на показанное слева Continue If True (Продолжение Если Истина). В результате условием выхода из цикла становится поступающее на терминал условия выхода значение FALSE, как показано на следующей блок-диаграмме (рисунок 11).

Рис.11. Блок-диаграмма цикла While «продолжение Если Истина» Цикл  While выполняется до тех пор, пока выходные данные подпрограммы ВП остаются меньше «10».

Терминалы входных/выходных данных цикла

Данные могут поступать в цикл While (или выходить из него) через терминалы входных/выходных данных цикла. Терминалы входных/выходных данных цикла передают данные из структур и в структуры. Терминалы входных/выходных данных цикла отображаются в виде сплошных прямоугольников на границе области цикла While.

Прямоугольник принимает цвет типа данных, передаваемых по терминалу. Данные выходят из цикла по его завершении. В случае если данные поступают в цикл While через терминал входных/выходных данных цикла, выполнение цикла начинается при поступлении данных в терминал.

На следующей блок-диаграмме (рисунок 12) терминал счетчика итераций присоединен к терминалу выхода цикла. Значения из терминала выхода цикла не поступают к элементу отображения номера итерации до завершения цикла While.

Рис. 12. Блок-диаграмма цикла While со счетчиком итераций на выходе терминала

Лишь последнее значение итерации отображается элементом отображения номера итерации. Цикл For (с фиксированным числом итераций)

Цикл For (с фиксированным числом итераций) выполняет повторяющиеся операции над потоком данных определенное количество раз (по заданию). Следующая иллюстрация (рисунок 13) демонстрирует 1 – цикл For в среде LabVIEW, 2 – эквивалентную блок-схему работы цикла For, 3 – пример текстового аналога кода работы цикла For.

1. LabVIEW

2. Блок-схема

3. Текстовый аналог кода

Рис. 13. Представление цикла For

Цикл For, расположен в палитре Функций в разделе «Functions» Structures. Значение, присвоенное терминалу максимального числа итераций N цикла, показанного слева, определяет максимальное количество повторений операций над потоком данных.

i Терминал счетчика итераций, показанный слева, содержит значение количества выполненных итераций. Начальное значение счетчика итераций всегда равно 0.

Цикл  For отличается от цикла While тем, что завершает работу, выполнив заданное максимальное число итераций N. Цикл While завершает работу при выполнении заданного условия выхода из цикла.

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

Рис. 14. Блок-диаграмма цикла For с генерацией  случайного числа 

Функции ожидания

Функция Wait Until Next ms Multiple, показанная слева, обеспечивает интервал между итерациями, равный интервалу времени, необходимому для того, чтобы миллисекундный счетчик достиг значения, кратного введенному пользователем. Эта функция используется для синхронизации действий. ФункциюWait Until Next ms Multiple вызывают внутри цикла для контроля скорости выполнения цикла.

Функция  Wait Until Next ms Multiple обеспечивает интервал между итерациями, равный интервалу времени, необходимому внутреннему таймеру компьютера для достижения указанного кратного значения.

Функция Wait(ms), показанная слева, добавляет время ожидания ко времени выполнения программы. Это может вызвать затруднения, если время выполнения программы является переменным.

Организация доступа к значениям предыдущих итераций цикла. При работе с циклами зачастую необходим доступ к значениям предыдущих итераций цикла. Например, в случае ВП, измеряющего температуру и отображающего ее на графике, для отображения текущего среднего значения температуры, необходимо использовать значения, полученные в предыдущих итерациях. Есть два пути доступа к этим данным: Shift Register (сдвиговый регистр) и Feedback Node (узел обратной связи).

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

  • Сдвиговый регистр выглядит как пара терминалов, показанных слева. Они расположены непосредственно друг против друга на противоположных вертикальных сторонах границы цикла.

Правый терминал содержит стрелку «вверх» и сохраняет данные по завершению текущей итерации. LabVIEW передает данные с этого регистра в следующую итерацию цикла. Сдвиговый регистр создается щелчком правой кнопки мыши по границе цикла и выбором из контекстного меню пункта Add Shift Register. Сдвиговый регистр передает данные любого типа, он автоматически принимает тип первых поступивших на него данных. Данные, передаваемые на терминалы сдвигового регистра, должны быть одного типа.

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

Цикл с неинициализированным сдвиговым регистром используется при неоднократном запуске ВП для присвоения выходному значению сдвигового регистра значения, взятого с последнего выполнения ВП.

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

Предусмотрена возможность создания нескольких сдвиговых регистров в одной структуре цикла. Если в одном цикле выполняется несколько операций, следует использовать сдвиговый регистр с несколькими терминалами для хранения данных, полученных в результате выполнения различных операций цикла. На рисунке 15 показано использование двух инициализированных сдвиговых регистров.

Рис. 15. Блок-диаграмма цикла с двумя сдвиговыми регистрами

Стек сдвиговых регистров.

Для создания стека сдвиговых регистров достаточно щелкнуть правой кнопкой мыши по левому терминалу и выбрать пункт контекстного меню Add Element. Стек сдвиговых регистров осуществляет доступ к значениям предыдущих итераций цикла. Стек сдвиговых регистров сохраняет данные предыдущей итерации и передает эти значения к следующей итерации.

Рис. 16. Блок-диаграмма цикла со стеком сдвиговых регистров

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

Узлы обратной связи

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

Можно поместить узел обратной связи внутри цикла ^ While или For, выбрав Feedback Node в палитре Structures. При помещении узла обратной связи на проводник данных до ответвления, передающего данные на выходной терминал цикла, узел обратной связи передает все значения на выходной терминал цикла. При помещении узла обратной связи на проводник после ответвления, передающего данные на выходной терминал цикла, узел обратной связи передаст все значения обратно на поле ввода данных ВП или функции, а затем передаст последнее значение на выходной терминал цикла. Следующее упражнение содержит пример работы узла обратной связи.

 Пример1:

1. Доступ к данным предыдущих итераций BasicsI. Лицевая панель этого ВП, показанная на рисунке 17, уже создана

Рис. 17. Блок-диаграмма

2. Отобразите блок-диаграмму, показанную на рис. 18. Разместите лицевую панель и блок-диаграмму на экране так, чтобы они не перекрывали друг друга. Переместите палитры Tools и Functions, если это необходимо.

Рис. 18

Единица, соединенная с левым терминалом цикла For, инициализирует узел обратной связи. Таймер Wait Until Next ms Timer замедляет процесс выполнения программы. Для замедления выполнения процесса можно также использовать режим Highlight Execution (анимации выполнения блок-диаграммы).

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

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

Программа в нижней части сначала считывает значения узла обратной связи, инициализированного значением 1. Затем это значение передается на цифровой элемент отображения. Функция Multiply (умножение) не будет выполняться до следующей итерации цикла.

3. Активируйте режим анимации выполнения блок-диаграммы, нажав на показанную слева кнопку ^ Highlight Execution. Запустите ВП еще раз для наблюдения порядка выполнения программы. Отключите режим анимации для работы ВП в нормальном режиме.

4. Замените узел обратной связи сдвиговым регистром, как показано на следующей блок-диаграмме (рис. 19):

a. Выделите нижний узел обратной связи и нажмите клавишу , чтобы удалить его.

b. Щелкните правой кнопкой мыши по границе цикла и выберите пункт контекстного меню  Add Shift Register. 

c. Инициализируйте сдвиговый регистр значением 1.

d. Переименуйте верхний и нижний элементы отображения соответственно Узел обратной связи и Сдвиговый регистр.\

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

6. Не закрывайте ВП, перейдите к выполнению дополнительных упражнений или закройте ВП, не сохраняя его.\

Рис. 19

Варианты заданий

1. Создать виртуальный прибор, генерирующий с интервалом в 1 сек. последовательность чисел Фибоначчи в виде таблицы. Обеспечить возможность очистки значений таблицы в произвольный момент времени.

Используемые компоненты:

Shift register

Add

Build table

Time delay

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

Используемыекомпоненты:

Simulate signal

Formula

Waveform graph

Timedelay

Select

Toggleswitch

3. Создать виртуальный прибор, иллюстрирующий работу логических операций «И» «ИЛИ»«НЕ» на одной лицевой панели.

Используемыекомпоненты:

And

Or

Not

Led

Rocker

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

Используемые компоненты:

Forloop

Shift register

Multiply

Increment

Numeric indicator

Timedelay

5. Создать виртуальный прибор, вычисляющий значение xy (возведение в степень для целых чисел – циклический алгоритм). Реализовать ввод исходных данных и вывод на цифровой индикатор результата и промежуточных значений с интервалом 1сек. Алгоритм возведения в степень реализовать в виде SubVI

Используемые компоненты:

For loop

Shift register

Multiply

(Decrement)

Numeric indicator

Numeric control

Time delay

6. Реализовать подпрограмму для вычисления суммы:  создать VI с возможностью задания точности вычислений по данной формуле, а также значения переменной x.

7. Реализовать подпрограмму для вычисления суммы:  с точностью 0.001. Значение x передать вкачестве параметра.

Лабораторная работа № 3

Массивы

Цель работы

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

Задачи

Освоение технологии применения туннелей и автоиндексации.

Отчет:

- титульный лист;

- цели и задачи лабораторной работы;

- задание на лабораторную работу;

- результаты выполненной работы.

Справочно-методический материал

Массивы объединяют элементы одного типа данных.

Массив – это набор элементов определенной размерности. Элементами массива называют группу составляющих его объектов. Размерность массива – это совокупность столбцов (длина) и строк (высота), а также глубина массива. Массив может иметь одну и более размерностей, и до 231–1 элементов в каждом направлении, насколько позволяет оперативная память.

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

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

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

Таким образом, индексы массива находятся в диапазоне от 0 до (n-1), где n - число элементов в массиве. Например, в массиве из девяти планет солнечной системы n=9, следовательно, значение индекса находится в пределах от 0 до 8. Земля является третьей планетой от Солнца, поэтому ее индекс равен 2.

Создание массива элементов управления и отображения

Для создания массива элементов управления или отображения данных, как показано в примере, необходимо выбрать шаблон массива из палитрыControls>>Array & Cluster и поместить его на лицевую панель. Затем поместить в шаблон массива элемент управления либо отображения данных. Поместить в шаблон массива запрещенный элемент управления или отображения, например, двухкоординатный график осциллограмм (XY graph) не удастся.

Источник: https://studfile.net/preview/16567492/