Modeling Switch Control Flow
وكما سبق فى حالة if سنقوم الان بعمل نموذج بسيط لتوضيح switch
1- قم بعمل نموذج جديد وقم بسحب بلوك switch case من ports &
subsystems ثم قم بالضغط على البلوك لتعديل خياراته
ففى case condition نحدد عدد الحالات فمثلا نختار 2 ويمكننا تحديد اكثر من
حالة واحده معنا فمثلا لو قمنا بكتابة الاتى :
{1,[2,3]}
سيقوم فى الحالة الاولى بوضح قيمة true فى البورت 1
وفى الحالة الثانية سيقوم بوضع قيمة true فى البورت 2 و 3
ويكون ايضا هناك حالة تسمى default وتكون true فى حالة عدم تنفيذ اى من
الحالات السابقة .
ولا بد ان يكون هذا الخرج ايضا على action subsystem
ويمكننا وضع الدخل بساعة قيمته من 1 الى 10
ويكون شكل النموذج كما يلى ::
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويكون شكل اشارة التحكم
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويكون شكل الاشارة الداخلة والتى يكون تنفيذها بناء على الحالات
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويكون شكل الخرج فى الحالة الاولى والتى تكون فيها قيمة اشارة التحكم تساوى
1 و 2
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويكون شكل الخرج فى الحالة الثانية والتى تكون فيها قيمة اشارة التحكم تساوى
3 و 4
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويكون شكل الخرج فى الحالة الثالثة والتى تكون فيها قيمة اشارة التحكم تساوى
صفر و 5 و 6 و 7 و 8 و 9
[SIZE=4][COLOR=royalblue]
[/color][/size]
ويجب ملاحظة ان اشارة التحكم تبدا من صفر وتنتهى عند اخر الرقم 9 ولا تاخد قيمة 10
حيث يكون ال sample time = 1
تابع
Modeling While and For Loops
اولا :
Modeling While Loops
فى هذه الانظمة يوجد لدينا بلوكين وهما
While subsystem
والذى سيستمر تنفيذه الى ان يحقيق الشرط الموجود فى بلوك While Iterator
ويجب ملاحظة ان زمن المحاكاة لا يتقدم خلال تنفيذ بلوك While subsystem
وذلك لان كل فترة يتم تنفيذها تعبر عن وحده زمن .
وهذا يجعل بلوك While subsystem الذى يحتوى على حالات مستمرة - والتى يعتمد خرجها على قيمة الدخل السابق – يكون خرجه ناتج عن الدخل فى الفترة السابقة .
والان سنقوم بتنفيذ مثال بسيط
وقبل البدء فى المثال يجب علينا معرفة ان While subsystems مثل ال
Triggered subsystems لا يمكننا وضع بلوك بها ذات زمن تقطيع
sample مستمر وانما يكون متوارث (-1 ) او ثابت (inf)
والان سنضع خطوات البرنامج المطلوب تنفيذها
كما يلى
Init_max_sum = 100;
sum = 0;
iteration_number = 0;
cond = (max_sum > 0);
while (cond != 0)
{
iteration_number = iteration_number + 1;
sum = sum + iteration_number;
if (sum > max_sum OR iteration_number > max_iterations)
cond = 0;
}
ويكون شكل البرنامج كما يلى
[SIZE=4][COLOR=royalblue]
[/color][/size]
[SIZE=4][COLOR=royalblue]
[/color][/size]
وبالنسبة لل do while فهى قريبة جدا مما سبق ولذلك يرجى عمل نموذج بسيط
يوضح فكرة عملها .
Modeling For Loops
وسنقوم بعمل نموذج بسيط لتوضيح فكرة عمل هذا البلوك حيث سيتم تنفيذ نظام for
الفرعى عدد مرات معين نقوم بتحديده فى For Iterator ويجب ملاحظة ان زمن
المحاكاة لا يتقدم عند تنفيذ فترات for وهذا يجعل بلوك For الذى يحتوى على حالات
مستمرة - والتى يعتمد خرجها على قيمة الدخل السابق – يكون خرجه ناتج عن الدخل
فى الفترة السابقة .
والان قوم بسحب بلوك For Iterator Subsystem الى نموذج فارغ ثم قم
بالضغط عليه وثم قم بالدخول الى خصائص For Iterator block وقم بوضع عدد
مرات تنفيذ البلوك N
والان سنتعرف على بلوك Assignment لانه مفيد جدا مع for حيث يقوم باعادة
تخصيص القيم فى المصفوفات وايضا سنقوم باستعمال selector ليقوم باختيار
عنصر عنصر من المصفوفة
وسنقوم بحساب دالة الجيب وهى Trigonometric Function لهذه المصفوفة
ثم تمرريها الى بلوك Assignment
ليقوم بوضع قيم الدالة المحسوبة فى صورة مصفوفة مرة اخرى
والمثال كما يلى :
[SIZE=4][COLOR=royalblue]
[/color][/size]
[SIZE=4][COLOR=royalblue]
[/color][/size]
انتهى الدرس السابع
إعجاب واحد (1)