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

سیمولینک برای این منظور بلوک‌های If، If Action Subsystem، Switch Case و Switch Case Action Subsystem را در اختیار قرار می‌دهد. این ساختارها امکان مدل‌سازی منطق کنترلی مشابه ساختارهای شرطی رایج در زبان‌های برنامه‌نویسی را فراهم می‌کنند. 

مفهوم تصمیم‌گیری شرطی در سیمولینک

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

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

ساختارهای If و Switch Case در گروه منطق کنترل جریان سیمولینک قرار می‌گیرند و می‌توانند اجرای زیرسیستم‌های مختلف را کنترل کنند. 

ساختار If و If Action Subsystem

بلوک If برای ایجاد منطق تصمیم‌گیری مشابه ساختار if-else استفاده می‌شود. این بلوک شرایط منطقی را ارزیابی کرده و بر اساس نتیجه، یک سیگنال کنترلی به زیرسیستم مربوطه ارسال می‌کند.

برای اجرای عملیات هر شرط، از If Action Subsystem استفاده می‌شود. این زیرسیستم دارای Action Port است و اجرای آن توسط نتیجه بلوک If کنترل می‌شود. 

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

پیاده‌سازی If-Else

در یک ساختار If-Else معمولاً حداقل یک شرط اصلی وجود دارد و در صورت برقرار نبودن آن، مسیر دیگری برای اجرا در نظر گرفته می‌شود.

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

این ساختار برای مدل‌سازی سیستم‌هایی که دارای چند وضعیت منطقی هستند، بسیار کاربردی است.

استفاده از چند شرط Elseif

در بسیاری از کاربردهای مهندسی تنها دو حالت کافی نیست. ممکن است یک سیستم بر اساس محدوده‌های مختلف ورودی، چند رفتار متفاوت داشته باشد.

در چنین شرایطی می‌توان چند شرط Elseif تعریف کرد. سیمولینک شرایط را بررسی می‌کند و زیرسیستم متناظر با شرط برقرار را اجرا خواهد کرد.

این قابلیت امکان تبدیل منطق تصمیم‌گیری چندمرحله‌ای به یک ساختار بلوکی خوانا و قابل مدیریت را فراهم می‌کند. 

مفهوم Switch Case

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

این ساختار از نظر مفهومی مشابه دستور Switch در زبان‌های برنامه‌نویسی است. ورودی Switch Case مشخص می‌کند کدام Case انتخاب شود و خروجی متناظر، اجرای زیرسیستم مربوط به آن Case را فعال می‌کند. 

Switch Case Action Subsystem

برای هر حالت Switch Case می‌توان از Switch Case Action Subsystem استفاده کرد. این زیرسیستم مانند یک واحد اجرایی مستقل عمل می‌کند و تنها زمانی اجرا می‌شود که Case مرتبط انتخاب شده باشد.

به این ترتیب، هر حالت می‌تواند الگوریتم یا مجموعه عملیات مخصوص خود را داشته باشد.

این روش برای مدل‌هایی که دارای چند وضعیت عملیاتی مشخص هستند، نسبت به ایجاد تعداد زیادی مسیر شرطی مستقل، ساختار منظم‌تری ایجاد می‌کند. 

تعریف حالت‌های مختلف در Switch Case

در Switch Case می‌توان چندین حالت مختلف تعریف کرد. هر Case می‌تواند به یک مقدار مشخص یا مجموعه‌ای از مقادیر اختصاص داده شود.

این قابلیت زمانی مفید است که چند وضعیت ورودی باید رفتار یکسانی داشته باشند. در چنین شرایطی می‌توان چند مقدار را به یک Case اختصاص داد و از ایجاد زیرسیستم‌های تکراری جلوگیری کرد. 

همچنین امکان تعریف یک Default Case وجود دارد. این حالت زمانی اجرا می‌شود که هیچ‌یک از Caseهای تعریف‌شده با مقدار ورودی مطابقت نداشته باشند. 

تفاوت If و Switch Case

اگر تصمیم‌گیری بر اساس روابط منطقی و مقایسه شرایط مختلف انجام شود، ساختار If معمولاً انتخاب مناسب‌تری است.

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

به‌صورت مفهومی می‌توان این دو را چنین تفکیک کرد:

  • If: مناسب برای تصمیم‌گیری مبتنی بر شرایط منطقی.

  • Elseif: مناسب برای بررسی چند شرط متوالی.

  • Else: مسیر پیش‌فرض زمانی که شرایط قبلی برقرار نیستند.

  • Switch Case: مناسب برای انتخاب میان چند حالت مشخص.

  • Default: مسیر پیش‌فرض در صورت عدم تطابق با Caseهای تعریف‌شده.

تفاوت با Multiport Switch

Switch Case را نباید با Multiport Switch یکسان در نظر گرفت.

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

بنابراین اگر هدف اصلی انتخاب داده باشد، Multiport Switch می‌تواند گزینه مناسبی باشد؛ اما اگر هر حالت نیازمند اجرای یک الگوریتم یا مجموعه عملیات مستقل باشد، Switch Case Action Subsystem معماری مناسب‌تری فراهم می‌کند. MathWorks هر دو رویکرد را به‌عنوان الگوهای متفاوت برای پیاده‌سازی منطق Case معرفی می‌کند. 

اجرای زیرسیستم‌های شرطی

یکی از ویژگی‌های مهم If Action و Switch Case Action Subsystem این است که تصمیم‌گیری مستقیماً به اجرای زیرسیستم مرتبط می‌شود.

در نتیجه، به‌جای اینکه تمام بخش‌های مدل در هر مرحله اجرا شوند و تنها خروجی نهایی انتخاب شود، می‌توان مشخص کرد کدام بخش از الگوریتم باید در آن شرایط اجرا شود.

این ویژگی در مدل‌های بزرگ می‌تواند به سازماندهی بهتر منطق اجرایی و تفکیک عملکردهای مختلف کمک کند. 

اهمیت نرخ اجرای زیرسیستم‌ها

در طراحی Action Subsystemها باید هماهنگی نرخ اجرای بلوک‌های داخلی با منطق کنترل جریان مورد توجه قرار گیرد. بلوک‌های موجود در یک Action Subsystem باید با نرخ مناسب نسبت به بلوک کنترلی اجرا شوند.

این موضوع در مدل‌های دارای چند نرخ نمونه‌برداری اهمیت ویژه‌ای دارد، زیرا ناسازگاری در زمان‌بندی می‌تواند موجب رفتار نامطلوب یا خطاهای مدل‌سازی شود. 

جلوگیری از پیچیدگی بیش از حد

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

استفاده مناسب از Action Subsystemها می‌تواند از ایجاد ساختارهای بسیار عمیق جلوگیری کند. راهنماهای مدل‌سازی MathWorks نیز بر کنترل میزان تو در تو شدن ساختارهای شرطی و استفاده مناسب از Action Subsystemها تأکید دارند. 

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

ساختارهای If و Switch Case در مدل‌های کنترل بسیار کاربردی هستند. برای مثال، یک کنترل‌کننده می‌تواند بر اساس وضعیت سیستم، یکی از چند الگوریتم کنترلی را فعال کند.

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

در این معماری، هر وضعیت می‌تواند یک Action Subsystem مستقل داشته باشد و منطق مرکزی مدل وظیفه انتخاب وضعیت مناسب را بر عهده بگیرد.

کاربرد در سیستم‌های حفاظتی و تشخیص خطا

در سیستم‌های حفاظتی معمولاً لازم است واکنش مدل به شرایط مختلف از پیش مشخص شود. If Action Subsystem می‌تواند برای اجرای منطق‌های متفاوت بر اساس وضعیت خطا استفاده شود.

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

استفاده در مدل‌های چندحالته

Switch Case برای مدل‌هایی که دارای چند حالت عملیاتی مشخص هستند، کاربرد ویژه‌ای دارد. هر Case می‌تواند نماینده یک وضعیت عملکردی باشد و زیرسیستم مربوط به آن، رفتار سیستم در همان حالت را تعریف کند.

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

رفتار Switch Case در مقایسه با زبان‌های برنامه‌نویسی

یک نکته مهم این است که Switch Case سیمولینک دقیقاً همان رفتار Switch در برخی زبان‌های برنامه‌نویسی را ندارد.

پس از اجرای زیرسیستم مربوط به یک Case، یک رفتار مشابه Break ضمنی وجود دارد و مدل وارد Case بعدی نمی‌شود. بنابراین برخلاف برخی پیاده‌سازی‌های Switch در زبان C، رفتار موسوم به Fall-Through در Switch Case سیمولینک وجود ندارد. 

انتخاب ساختار مناسب

انتخاب میان If و Switch Case باید بر اساس ماهیت مسئله انجام شود.

اگر منطق تصمیم‌گیری بر پایه روابط منطقی، مقایسه متغیرها و ترکیب چند شرط باشد، ساختار If مناسب‌تر است. اگر یک متغیر وضعیت باید یکی از چند حالت مشخص را انتخاب کند، Switch Case می‌تواند مدل را ساده‌تر کند.

همچنین در مواردی که هدف فقط انتخاب یک سیگنال است و نیازی به اجرای زیرسیستم‌های مختلف وجود ندارد، استفاده از بلوک‌های انتخاب سیگنال مانند Multiport Switch ممکن است مناسب‌تر باشد.

جمع‌بندی

If، If Action Subsystem، Switch Case و Switch Case Action Subsystem ابزارهای مهم سیمولینک برای پیاده‌سازی منطق تصمیم‌گیری و کنترل جریان اجرای مدل هستند.

If برای تصمیم‌گیری مبتنی بر شرایط منطقی و Switch Case برای انتخاب میان حالت‌های مشخص کاربرد دارد. Action Subsystemها نیز امکان می‌دهند هر مسیر تصمیم‌گیری به یک مجموعه عملیات مستقل متصل شود.

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

کلیدواژه ها : If Block-بلوک If-If Action Subsystem-زیرسیستم شرطی If-If Else-شرط If Else-Elseif-شرط چندمرحله‌ای-Switch Case-سوئیچ شرطی Switch Case-Switch Case Action Subsystem-زیرسیستم شرطی Switch Case-Conditional Logic-منطق شرطی-Control Flow Logic-منطق کنترل جریان-Conditional Execution-اجرای شرطی-Action Subsystem-زیرسیستم اجرایی-Decision Making-تصمیم‌گیری-Case Selection-انتخاب حالت-Default Case-حالت پیش‌فرض-Multiport Switch-سوئیچ چندپورتی-Control Algorithm-الگوریتم کنترلی-Fault Logic-منطق تشخیص خطا-Protective Logic-منطق حفاظتی-Mode Selection-انتخاب حالت عملکردی-Simulink-سیمولینک