Вы вошли на сайт, как Гость
Регистрация

Доступ к данным предыдущего шага цикла

Основы программирования в LabView
(Доступ к данным предыдущего шага цикла.)

Сдвиговые регистры (Shift Registers)

Часто возникает необходимость воспользоваться результатом работы предыдущего шага цикла. Например, при реализации различных итерационных алгоритмов. В LabVIEW для этого есть два способа: shift register и Feedback Node. Если быть точным, можно реализовать и по-другому (через локальные переменные, к примеру).

Используйте сдвиговые регистры (shift registers) в циклах For и While для того, чтобы передать значения из предыдущей итерации в следующую. Сдвиговый регистр появляется как пара терминалов, которые находятся друг напротив друга на левой и правой границах цикла. Чтобы поместить сдвиговый регистр в цикл, нужно сделать следующее: нажать правой кнопкой мыши на его (цикла) границу, и в контекстном меню выбрать "Add Shift Register". Сдвиговый регистр может содержать любой тип данных - выбор происходит автоматически. Можно инициализировать регистр - для этого нужно к левому терминалу подключить начальное значение (константу, например). Если не использовать инициализацию, то каждый раз при запуске VI начальным значение регистра будет то, которое было получен в результате предыдущего запуска. Можно использовать несколько сдвиговых регистров в одном цикле (для различных происходящих в цикле процессов). Когда цикл завершается, можно забрать последнее значение регистра, подключившись к правому терминалу.

На рисунке приведен пример цикла с двумя сдвиговыми регистрами в нем. Регистры инициализируются значениями 0 и 1 соответственно, на индикаторы выводится только последнее значение регистров (после завершения цикла).

Многоярусные сдвиговые регистры.

Или Stacked Shift Registers (великий и могучий английский язык:). Часто возникает необходимость использовать не только результаты предыдущего шага цикла, но и результаты на несколько шагов назад. Ну например, числа Фибоначчи - когда каждый следующий член последовательности равен сумме предыдущих. Чтобы сделать такой сдвиговый регистр, нужно щелкнуть правой кнопкой мыши на левом терминале обычного регистра, и выбрать в контекстном меню "Add Element". На картинке ниже приведен пример цикла.

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

Узлы обратной связи (Feedback Nodes)

Узлы обратной связи создаются автоматически, если внутри цикла For или While соединить выход SubVI или какой-либо функции со входом того-же SubVI или функции. Подобно сдвиговому регистру, узел обратной связи сохраняет данные на текущем шаге цикла, и передает их в следующий шаг. Стрелка показывает направление, в котором передаются данные. Так же, можно вставить FeedBack вручную - в палитре Structures выбрать "Feedback Node" и поместить на нужную связь внутри цикла. На рисунке приведен пример:

Оригинальный источник материала: www.labview.webhost.ru