Керована підсистема While Iterator Subsystemявляє собою підсистему, що виконується неодноразово протягом одного такту моделювання. Кількість повторень заздалегідь не відомо. Цикл припиняється, якщо значення логічного сигналу на керуючому вході підсистеми стане дорівнює FALSE. Основні властивості підсистеми задає ітераційний блок While Iterator. Блок є аналогом оператора циклу while (do-while) мови програмування C.
Властивості While Iterator Subsystem визначаються параметрами блокуWhile Iterator.Його параметри перераховані нижче.
Параметри:
1. Maximum number of iterations –Максимальна кількість ітерацій. Якщо значення параметра дорівнює -1 (мінус один), то кількість ітерацій не обмежується.
2. While loop type(прапорець)–Тип циклу. Вибирається зі списку:
o while –Цикл while.
o do-while –Цикл do-while.
3. States when starting –Стан підсистеми системи при наступному запуску. Значення параметра вибирається зі списку:
o held –Використовувати попередній стан (останній стан коли система був активний).
o reset –Використовувати початкове (вихідне) стан.
4. Show iteration number port –Відобразити на піктограмі блоку вихідний порт, з якого знімається сигнал номера ітерації.
5. Output data type –Тип даних вихідного сигналу порту. Значення параметра вибирається зі списку: int32, int16, int8і double.
Вхідний порт IC дозволяє задати початкове значення сигналу циклу, що припиняєвиконання, while. При використанні циклу do-whileпідсистема буде виконана хоча б один раз (оскільки перевірка умови в цьому випадку виробляється наприкінці циклу).
На Рис. 10 показаний приклад використанняWhile Iterator Subsystem. У прикладі виконується нагромадження суми значень із кроком рівним 10. Виконання циклу припиняється, коли величина суми досягне значення 100.
З-код, що відповідає алгоритму роботиWhile Iterator Subsystem у приведеному прикладі виглядає в такий спосіб:
sum = 0; IC = 1; iteration_number = 0; cond = IC; while (cond != 0) { iteration_number = iteration_number + 1; sum = sum + sum_increment; if (sum > 100 OR iterations > max_iterations) cond = 0; }