الدرس الخامس فى دورة برنامج السميولينك - عمل أنظمة فرعية - ج٢

ثانيا : Triggered Subsystems



وهى نوع من انواع الانظمة الفرعية والتى يتم تنفيذها عند حدوث ال Trigger وهذه الانظمة الفرعية يكون لها مدخل تحكم واحد ويسمى trigger input والذى يحدد هل يتم تنفيذ النظام ام لا ؟؟
ويوجد ثلاثة انواع لهذا ال Trigger وهما

Rising

وهذه الحالة عندما ترتفع اشارة التحكم من قيمة سالبة او صفر الى قيمة موجبة واذا كانت القيمة الابتدائية سالبة فانه يتم تنفيذ النظام الفرعى عندما ترتفع الى الصفر

Falling

وهذا عكس الحالة السابقة اى عندما تنخفض اشارة التحكم من قيمتها الابتدائية الى قيمة اقل منها

Either

وهذه الحالة تجمع الحالتين السابقتين ويتم تنفيذ النظام الفرعى فى كلتا الحالتين سواء بالارتفاع او الانخفاض .


ملحوظة :


فى حالة الانظمة ذات الزمن المتقطع عندما تتغير الاشارة من الصفر سواء بالارتفاع او الانخفاض فانه يتم تنفيذ حدوث النظام الفرعى عندما تكون قيمة الاشارة صفر لاكثر من فترة زمنية واحدة وذلك لتلافى حدوث trigger بسبب عملية التقطيع .


وفى الشكل الاتى نرى تنفيذ لل trigger اما بالارتفاع R او بالانخفاض F ونلاحظ انه فى الفترة الزمنية 3 لم يحدث trigger لان الاشارة كانت قيمتها صفر لفترة زمنية واحده ولذلك يجب ان تزيد عن واحد







وبتطبيق هذا على المثال الموجد لدينا
قم بالدخول الى قائمة السميولينك ثم الى ports & subsystems وقم بسحب بلوك

trigger

الى النظام الفرعى وسيكون كما يلى :





وسيكون شكل النظام الاصلى كما يلى





ولاختيار نوع ال trigger قم بالضغط على البلوك
وستظهر لنا نافذه الاختيارات يمكننا منها اختيار نوعه كما فى الرسم التالى :







ونلاحظ بعد الاختيار بتغيير شكل البلوك بعد كل اختيار كما يلى :


فى حالة الارتفاع





وفى حالة الانخفاض





اما فى كلتا الحالتين





وفى حالة استدعاه بأمر


ويجب ملاحظة ان triggered subsystems
تختلف عن الانظمة enabled subsystems
حيث انها تقوم بحجز اخر قيمة للخرج ولا يمكننا استعادة الخرج عند قيمة ابتدائية ماعدا الانواع التى يكون استدعائها بأمر وهى البلوكات
Function-Call Subsystems
ويكون شرط تنفيذ هذه البلوكات مرتبط بأمر منطقى فى ال S-function الخاصة بالبلوك وسوف نتعرض لها لاحقا .


ملحوظة ::
جميع البلوكات فى الانظمة الفرعية التى تستخدم الTrigger يجب ان يكون زمن تقطيعها متوارث font=Arial [/font]او مالانهاية وهذا معناه ان البلوكات الموجودة فى النظام الفرعى يتم تشغيلها عند تشغيل النظام الفرعى اى يجب ان لا يحتوى النظام الفرعى على بلوكات ذات زمن متصل مثل بلوك التكامل.

ونقوم الان بعمل هذا المثال البسيط كما يلى ::




والنظام الفرعى





وستكون نتيجة تنفيذ هذا المثال كما يلى :




ومن الشكل السابق نجد الاشارة التى باللون الاصفر ترمز على اشارة التحكم trigger والاشارة التى باللون السماوى هى اشارة الدخل واللون البنفسجى يرمز الى اشارة الخرج ونلاحظ ايضا حدوث تنفيذ البلوك اى حدوث خرج فى حالة ارتفاع اشارة التحكم فقط ثم يتم امساك للقيمة حتى الارتفاع الثانى


تابع

ثالثا :: Triggered and Enabled Subsystems


وهذا النوع الثالث من انواع الانظمة الفرعية وهو يجمع النوعان السابقان حيث يقوم فى البداية بانتظار حدوث ال trigger ثم يقوم بالتعامل معه اذا كانت اشارة التحكم المستخدمة مع الجزء enabled موجودة ويمكن توضيح هذه الخطوات فى الشكل الاتى ::




والان سنقوم بعمل مثال بسيط على هذا النوع
قم بتكوين المثال كما بالرسم الاتى ::




ويكون النظام الفرعى كما فى الرسم الاتى





ونتيجة تنفيذ المثال الاتى موجودة فى الشكل التالى ::




ومن الشكل السابق نجد ان الاشارة التى باللون السماوى هى اشارة الدخل وهى عبارة عن sine wave اما الاشارة التى باللون الاصفر فهى ال trigger وهى عبارة عن step input وتبدا عند الزمن واحد ثانية لتصبح قيمتها تساوى واحد وتستمر حتى أخر زمن المحاكاه وهذه الاشارة تستخدم فى محاكاة الانظمة الديناميكية والتى تعبر عن تغير مفاجى فى قيم النظام .
اما الاشارة التى باللون الاحمر فهى عبارة عن pulse مدتها 10 ثوانى وتكون قيمتها تساوى واحد فى 50% من الفترة الزمنية duty cycle وهنا نستخدمها للتعبير عن اشارة التحكم enable


وعند الزمن يساوى واحد يبدا مخطط تنفيذ النظام عند حدوث ال trigger بالارتفاع وفى هذه النقطة تكون اشارة التحكم موجودة فيحدث تنفيذ للنظام الفرعى وتكون قيمة الخرج مساوية لقيمة ال sine عند الزمن يساوى واحد وبعد ذلك لا نجد ارتفاع اخر لاشارة التحكم trigger ولذلك ستستمر قيمة الخرج ممسكة عند هذه القيمة .
تابع


Creating Alternately Executing Subsystems
يمكننا استخدام الانظمة الفرعية المتوقف تنفيذها على اشارة تحكم مع بلوك merge الذى يستخدم لدمج اشارتين معا لعمل انظمة فرعية يتم تنفيذها بالتبادل ويتم اعتمادها على حالة الموديل
والان سنقوم بتطبيق المثال الاتى وهو موديل لعمل full-wave rectifier والتى تستخدم فى تحويل التيار المتردد الى تيار مستمر :







ويتكون من نظامان فرعيان كما يلى
النظام الفرعى الاول





النظام الفرعى الثانى





وتكون نتيجة التنفيذ كما يلى ::






تابع

Conditional Execution Behavior
يقوم السميولينك بتجنب البلوكات الغير ضرورية اثناء عملية تنفيذ المحاكاة ومن امثلة هذه البلوكات Switch او Multiport Switch وهما يستخدمان فى تحويل الاشارات وايضا من البلوكات التى من الممكن تكون غير ضرورية الانظمة الفرعية المرتبطة بشرط لتنفيذها وهذا يسمى
conditional execution (CE) behavior.
وفى المثال الاتى سوف نقوم بمعرفة هذه الخاصية :




والنظام الفرعى كما فى الصورة الاتية :




وقبل عمل ال simulation قم بالدخول الى قائمة format ثم اختيار

Block displays

ثم sorted order كما فى الصورة الاتية ::




وبعد عمل ال simulation نلاحظ وجود ارقام فوق كل بلوك وهذه الارقام تكون على الصورة الاتية :

X:Y


حيث يعبر عن X على انها الطبقة layer الموجود فيها البلوك فكل البلوكات الموجودة فى الطبقة الاساسية يكون لها ال X=0


اما Y فترمز الى ترتيب تنفيذ البلوك ففى الشكل الاتى نجد :




بلوكات ال

Pulse generator

و constant و subsystem و gain و scope تحتوى على رقم X يساوى الى صفر اى انها تنتمى الى الطبقة الاساسية فى الموديل ويكون ترتيب تنفيذها وهو الرقم Y كما يلى

1- Pulse generator
2- constant
3- subsystem
4- gain
5- scope

ونلاحظ هنا ان بلوك subsystem عليه الاتى 0:2{1} وهذا معناه انه يحتوى على الطبقة الاولى وهى تاتى بعد الطبقة الاساسية
وبالدخول الى النظام الفرعى نجد الاتى ::






ونجد بلوك الادخال يحتوى على الرقم الاتى 1:0 وهذا معناه انه موجود فى الطبقة الاولى و سيكون تنفيذه فى البداية وبلوك الاخراج لا يحتوى على اى ارقام لانه لم يتم تنفيذه لعدم وجود ما يتم اخراجه
والان قم بالضغط كليك يمين على بلوك subsystem واختيار
Subsystem parameters





وعندما تفتح لك نافذه الاختيار قم بوضع علامة صح حول

Propagate execution context across subsystem boundary



وهذا فائدته ان يقوم بجعل تنفيذ البلوكات الموجودة حول النظام الفرعى مرتبط بتنفيذ النظام الفرعى وهذا يعمل على زيادة سرعة المحاكاة مثلا لدينا بلوك gain لن نحتاجه الا عندما يتم تنفيذ النظام الفرعى وعند ايقاف النظام الفرعى غير مهم تنفيذ هذا البلوك


تابع

والان قم بعمل المحاكاة مرة اخرى والان سنلاحظ الارقام على البلوكات :




والان اصبح البلوك constant والبلوك gain ينفذان مع النظام الفرعى فقط على الرغم انهم خارج النظام الفرعى وموجودين فى النظام الاساسى ويكون ترتيب التنفيذ كالاتى

1- constant
2- subsystem
3- gain

وهذا ما يعرف بى Conditional Execution Behavior او

CE behavior

Propagating Execution Contexts
عموما برنامج السميولينك يقوم بتعريف ما يسمى بى execution context وهذا عبارة عن مجموعة من البلوكات التى تنفذ مرة واحدة خلال زمن معالجة النموذج .


ويقوم ايضا بعمل execution context للنظام الاساسى وايضا لكل نظام فرعى .


واى execution context هو مجموعة البلوكات التى يحتويها النظام
وعند تنفيذ المحاكاة فان السميولينك يقوم بالبحث عن الشروط الاتية فى كل بلوك:
1-
هل خرج البلوك مطلوب فقط لتنفيذ نظام فرعى او دخله يتغير فقط نتيجة تنفيذ نظام فرعى

2-

هل هذا البلوك مرتبط فى تنفيذه مع نظام فرعى وهذه الحالة عندما يكون هذا البلوك على حدود النظام الفرعى

3-

هل خرج البلوك ليس نقطة أختبار testpoint وسوف نعرف ما هى نقط الاختبار لاحقا

4-

هل مسموح للبلوك ان يتوارث execution context
5-
هل البلوك ليس من النوع multirate block
6-
هل زمن التقطيع sample time متوارث او ثابت
واذا فعلا وجد ان هذه الشروط محققة ومسموح ان يتم توليد execution context


فان السميولينك يقوم بنقل البلوك الى execution context الخاص بالنظام الفرعى وهذا للتاكد ان هذا البلوك يتم تنفيذه فقط عندما يتم تنفيذ النظام الفرعى
وللتعامل مع بلوك Switch


يقوم السميولينك بمعالجة كل فرع من دخل البلوك بصورة مخفية ويكون لكل فرع

execution context

الخاص به والذى يتم تفعيله عندما يتم اختيار تنفيذ الفرع وعموما فان كل فرع من هذا البلوك يتم تنفيذه فقط عندما يتم اختياره كدخل .



ملحوظة :: لالغاء خاصية conditional execution behavior


قم بالدخول ال Configuration Parameters ثم Optimization وضع علامة صح عند Conditional input branch execution



ملحوظة ::هناك بعض الحالات لا يستطيع البرنامج استخدام خاصية

Propagate execution context across subsystem boundary

وهى عندما يكون النظام الفرعى من النوع triggered subsystem او النظام الفرعى له اكثر من مدخل او مخرج ولها شرط ابتدائى غير الصفر وفى هذه الحالة البلوك الموجود فى خرج النظام الفرعى لا يمكنه ان يتوارث
subsystem’s execution context


ويكمننا اظهار مستطيلات حول المداخل التى لا يستخدم خاصية
Propagate
execution context


وهذا عن طريق الضغط اختيار قائمة format ثم Block Displays ثم

Execution Context Indicator



انتهى الدرس


الدرس فى صورة pdf

part05.pdf (345.9% u)

والله ولي التوفيق