Вузли зворотнього зв’язку: доступ до даних попередньої ітерації циклу 1


Окрім зсувних регістрів у LabVIEW є ще один механізм доступу до результатів виконання попередньої ітерації циклу – вузли зворотнього зв’язку (Feedback Node). Отримати такий вузол можна дуже просто – достатньо з’єднати вихід якої-небудь функції з її ж входом.

Інший варіант – знайти відповідну піктограму у палітрі “Всі Функції”: All Functions -> Structures -> Feedback Node і розмістити її на блок-діаграмі. Очевидно, що розмітити вузол зворотнього зв’язку можна лише всередині циклу, при цьому на лівій межі циклу з’явиться відповідний термінал у вигляді невеличкого ромбика – він служить для ініціалізації вузла (що таке ініціалізація і для чого вона потрібна написано у попередньому пості).Термінал для ініціалізації (Initializer Terminal) можна вимкнути із контекстного меню вузла. На наступному рисунку наведено приклади Feedback Node у різних циклах.

Загальний вигляд вузла зворотнього зв'язку Feedback Node

Загальний вигляд вузла Feedback Node

Очевидно,що в такому виконанні програма не працюватиме, оскільки вузол не під’єднано до жодної функції. Про це свідчить колір піктограми. Спробуємо створити просту програму, яка розраховуватиме суму всіх чисел від 0 до якогось наперед заданого числа.

 

Приклад використання Feedback Node

Приклад використання Feedback Node

Кілька слів для пояснення роботи даної програми. Регулятором N задається кількість ітерацій (оскільки перша ітерація має порядковий номер рівний нулю, то в результаті виходить сума чисел від 0 до N-1), далі вузол сумування бере значення терміналу Loop Iteration (i) і сумує його із результатом попередньої ітерації, який зберігається у Feedback Node. Для першої ітерації вузол Feedback Node не містить ніяких даних, тож потрібно його ініціалізувати (для цього подається початкове значення на відповідний термінал, у нашому випадку це константа “0”).

Ініціалізація потрібна також для того, щоб при повторному запуску програми вміст вузла Feedback Node не зберігався з попереднього запуску – це може викликати появу дуже непередбачуваних помилок, які важко відстежити.

Приклад такого явища ілюструють два наступних рисунки. На першому вузол Feedback Node використовується спільно з функцією Build Array для того, щоб створити масив, елементами якого є ті самі проміжні значення вузла зворотнього зв’язку:

Створення масиву із використанням Feedback Node

Створення масиву із використанням Feedback Node

Як видно з рисунка, результат в обох випадках ідентичний. А тепер видалимо ініціалізацію масиву і подивимося що зміниться.

Чому треба ініціалізувати Feedback Node

Чому треба ініціалізувати Feedback Node

Перші елементи масиву ідентичні, та після другого запуску програми дані просто дописуються в кінець масиву. Знову і знову… Якщо потім десь використовуватиметься, скажімо, функція Array Size, то ми отримаємо не те, на що розраховували. Особливо якщо взяти до уваги той факт, що на передній панелі може відображатися не весь масив.

 

Почитайте ще оце:


Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Думка на тему “Вузли зворотнього зв’язку: доступ до даних попередньої ітерації циклу