در بسیاری از مدل‌های مهندسی، لازم است یک مجموعه عملیات در یک گام شبیه‌سازی چندین بار تکرار شود. در محیط سیمولینک، For Iterator Subsystem برای ایجاد چنین ساختاری استفاده می‌شود. این زیرسیستم امکان پیاده‌سازی منطق مشابه حلقه‌های For را فراهم می‌کند، با این تفاوت که اجرای تکرارها در چارچوب زمان‌بندی و منطق اجرای خود سیمولینک انجام می‌شود. 

مفهوم For Iterator Subsystem

For Iterator Subsystem یک زیرسیستم غیرمجازی است که محتوای داخلی خود را در هر گام زمانی شبیه‌سازی، تعداد مشخصی مرتبه اجرا می‌کند. تعداد تکرارها می‌تواند به‌صورت داخلی در بلوک For Iterator تعیین شود یا از طریق یک ورودی خارجی به زیرسیستم منتقل گردد. 

به این ترتیب، به‌جای ایجاد چند نسخه مشابه از یک بخش محاسباتی، می‌توان همان الگوریتم را در یک زیرسیستم قرار داد و اجرای آن را به یک حلقه تکراری سپرد.

ساختار حلقه For در سیمولینک

برای ایجاد یک حلقه تکراری، می‌توان مستقیماً از بلوک For Iterator Subsystem در کتابخانه Ports & Subsystems استفاده کرد. این بلوک از قبل برای اجرای تکراری آماده شده است و یک For Iterator داخلی دارد. 

درون زیرسیستم، بلوک‌های موردنیاز الگوریتم قرار می‌گیرند. For Iterator کنترل می‌کند که این مجموعه بلوک‌ها چند بار در یک گام زمانی اجرا شوند.

بنابراین ساختار کلی شامل سه بخش اصلی است:

  • ورودی‌های داده

  • بخش کنترل تکرار

  • منطق محاسباتی داخل زیرسیستم

تعیین تعداد تکرارها

یکی از ویژگی‌های مهم For Iterator امکان تعیین تعداد دفعات اجرای زیرسیستم است. این مقدار می‌تواند مستقیماً در تنظیمات For Iterator مشخص شود یا از یک ورودی خارجی دریافت شود. 

در حالت ورودی خارجی، مقدار مربوط به تعداد تکرارها از خارج زیرسیستم تأمین می‌شود. این قابلیت برای مدل‌هایی مناسب است که تعداد عملیات تکراری بر اساس شرایط یا داده‌های ورودی تغییر می‌کند.

در مقابل، اگر تعداد تکرارها همیشه مشخص باشد، می‌توان آن را در تنظیمات خود بلوک تعریف کرد و ساختار مدل را ساده‌تر نگه داشت.

مفهوم Iteration Value

For Iterator می‌تواند مقدار مربوط به شماره تکرار جاری را نیز در اختیار بخش داخلی زیرسیستم قرار دهد. این مقدار از اولین تکرار آغاز شده و در هر اجرای بعدی افزایش پیدا می‌کند. 

وجود این اطلاعات امکان ایجاد رفتار متفاوت در هر مرحله از حلقه را فراهم می‌کند. برای مثال، الگوریتم داخل زیرسیستم می‌تواند بر اساس شماره تکرار، بخش متفاوتی از یک داده یا ساختار محاسباتی را پردازش کند.

این قابلیت در پردازش آرایه‌ها، الگوریتم‌های تکراری و محاسبات ماتریسی اهمیت زیادی دارد.

اجرای چندباره در یک گام زمانی

یکی از تفاوت‌های مهم For Iterator Subsystem با اجرای عادی بلوک‌ها این است که تکرارهای آن در همان گام زمانی شبیه‌سازی انجام می‌شوند. یعنی با افزایش تعداد تکرارها، زمان شبیه‌سازی به همان نسبت جلو نمی‌رود. 

به بیان ساده، سیمولینک ابتدا یک گام زمانی را در نظر می‌گیرد و سپس عملیات داخلی For Iterator را چند مرتبه در همان گام انجام می‌دهد.

این ویژگی برای الگوریتم‌هایی مناسب است که چند مرحله پردازشی باید قبل از حرکت مدل به گام زمانی بعدی تکمیل شوند.

تفاوت For Iterator با While Iterator

سیمولینک علاوه بر For Iterator Subsystem، While Iterator Subsystem را نیز ارائه می‌کند. تفاوت اصلی این دو در نحوه تعیین تعداد تکرارهاست.

در For Iterator، تعداد تکرارها از قبل مشخص است و حلقه تعداد معینی اجرا می‌شود. در While Iterator، اجرای زیرسیستم تا زمانی ادامه پیدا می‌کند که یک شرط منطقی برقرار باشد. 

بنابراین زمانی که تعداد مراحل پردازش مشخص است، For Iterator انتخاب مناسبی است؛ اما زمانی که پایان پردازش به نتیجه یک شرط وابسته است، While Iterator می‌تواند ساختار مناسب‌تری ایجاد کند.

کاربرد در پردازش ماتریسی

For Iterator Subsystem می‌تواند در مدل‌هایی که شامل پردازش تکراری عناصر یک ماتریس یا بردار هستند، بسیار کاربردی باشد.

برای نمونه، می‌توان یک الگوریتم را در داخل زیرسیستم قرار داد و در هر تکرار، داده مربوط به مرحله فعلی را پردازش کرد. در این معماری، شماره تکرار می‌تواند برای مشخص کردن موقعیت عنصر یا مرحله پردازش مورد استفاده قرار گیرد.

این رویکرد باعث می‌شود مدل از ایجاد تعداد زیادی بلوک مشابه بی‌نیاز شود و ساختار آن خواناتر و قابل مدیریت‌تر باشد.

استفاده در الگوریتم‌های تکراری

برخی الگوریتم‌های مهندسی برای رسیدن به نتیجه نهایی به چند مرحله پردازش متوالی نیاز دارند. در چنین مواردی می‌توان عملیات اصلی را در For Iterator Subsystem قرار داد و تعداد مراحل را توسط For Iterator کنترل کرد.

این روش در الگوریتم‌های عددی، پردازش داده، کنترل و شبیه‌سازی سیستم‌هایی که دارای محاسبات مرحله‌ای هستند، کاربرد دارد.

تفاوت با Function-Call Subsystem

For Iterator Subsystem و Function-Call Subsystem هر دو می‌توانند باعث اجرای چندباره یک بخش از مدل شوند، اما مفهوم آن‌ها متفاوت است.

در Function-Call Subsystem، اجرای زیرسیستم توسط یک رویداد خارجی Function-Call کنترل می‌شود. در مقابل، For Iterator Subsystem خودش مسئول تکرار داخلی یک الگوریتم در یک گام زمانی است. سیمولینک این دو ساختار را به‌عنوان دو نوع متفاوت از زیرسیستم‌های کنترلی معرفی می‌کند. 

بنابراین Function-Call بیشتر برای کنترل اجرای مبتنی بر رویداد و For Iterator برای تکرار تعداد مشخصی از عملیات مناسب است.

محدودیت‌های مهم در طراحی

در طراحی For Iterator Subsystem باید به نوع بلوک‌های داخلی توجه کرد. این زیرسیستم نباید شامل بلوک‌هایی با حالت‌های پیوسته باشد؛ همچنین محدودیت‌هایی در زمینه زمان نمونه‌برداری بلوک‌های داخلی وجود دارد. 

این موضوع اهمیت زیادی دارد، زیرا تکرارهای For در یک گام زمانی انجام می‌شوند و با مفهوم اجرای پیوسته یک سیستم تفاوت دارند.

همچنین در برخی حالت‌های مقداردهی اولیه، استفاده از بلوک‌هایی که به زمان سپری‌شده نیاز دارند می‌تواند با محدودیت مواجه شود. مستندات رسمی MathWorks برای For Iterator Subsystem به‌طور مشخص به این موضوع اشاره می‌کنند. 

کاربرد در سیستم‌های مهندسی

For Iterator Subsystem در بسیاری از مدل‌های مهندسی قابل استفاده است. در پردازش سیگنال می‌توان از آن برای پردازش مرحله‌ای داده‌ها استفاده کرد. در سیستم‌های کنترل می‌توان محاسبات تکراری را در هر گام زمانی مدیریت کرد.

در مدل‌های پردازش ماتریسی نیز این ساختار می‌تواند برای ایجاد الگوریتم‌هایی که روی عناصر یا بخش‌های مختلف داده عملیات مشابه انجام می‌دهند، مفید باشد.

همچنین در مدل‌های پیچیده می‌توان For Iterator را در کنار سایر زیرسیستم‌های سیمولینک، مانند Function-Call، Enabled، Triggered و While Iterator، به کار گرفت تا معماری اجرای مدل دقیق‌تر و ساختاریافته‌تر شود. 

جمع‌بندی

For Iterator Subsystem ابزار مناسبی برای پیاده‌سازی ساختارهای تکراری در سیمولینک است. این زیرسیستم امکان می‌دهد یک الگوریتم در هر گام زمانی، تعداد مشخصی مرتبه اجرا شود و در صورت نیاز شماره تکرار نیز در اختیار منطق داخلی قرار گیرد.

مزیت اصلی این روش، کاهش تکرار بلوک‌های مشابه و ایجاد ساختاری منظم برای الگوریتم‌های چندمرحله‌ای است. درک تفاوت میان For Iterator، While Iterator و Function-Call نیز به انتخاب صحیح معماری اجرای مدل کمک می‌کند.

کلیدواژه ها : For Iterator Subsystem-زیرسیستم تکرارکننده For-For Loop-حلقه For-For Iterator-تکرارکننده For-Iteration-تکرار-Iteration Value-مقدار تکرار-Loop Execution-اجرای حلقه-Repeated Execution-اجرای تکراری-Simulink Iterator-تکرارکننده سیمولینک-While Iterator Subsystem-زیرسیستم تکرارکننده While-Conditional Execution-اجرای شرطی-Matrix Processing-پردازش ماتریسی-Signal Processing-پردازش سیگنال-Simulink-سیمولینک