15التحكم بالتدفق
WHILE و REPEAT و EXIT و CONTINUE و RETURN
الحلقات غير محدودة العدد وتعليمات القفز، لماذا WHILE خطرة في متحكم، وكيف تجعلها آمنة بعدّاد حارس.
WHILE: افحص ثم نفّذ
WHILE Rest >= Dose DO
Rest := Rest - Dose;
Shots := Shots + 1;
END_WHILEالشرط يُفحص قبل كل تكرار. فإن كان كاذباً من أول مرة لم يُنفّذ الجسم أبداً. استخدمها عندما يكون عدد التكرارات غير معروف مسبقاً.
REPEAT: نفّذ ثم افحص
REPEAT
Guess := (Guess + Value / Guess) / 2.0;
Count := Count + 1;
UNTIL ABS(Guess * Guess - Value) < 0.01 OR Count >= 20
END_REPEATالجسم ينفّذ مرة واحدة على الأقل ثم يُفحص الشرط. والمنطق معكوس: REPEAT تستمر حتى يصبح الشرط صحيحاً، و WHILE تستمر طالما الشرط صحيح.
تعليمات القفز
التعليمة | العمل |
|---|---|
| اخرج من الحلقة الحالية فوراً |
| اقطع هذا التكرار وابدأ التالي |
| اخرج من الـ POU كلها |
FOR i := 1 TO 200 DO
IF Ids[i] = Wanted THEN
Found := i;
EXIT; (* وجدناه، لا معنى لفحص الباقي *)
END_IF
END_FORRETURN مفيدة كـ بوابة في أول البرنامج: إذا لم تكن الظروف صالحة، لا تنفّذ شيئاً.
IF NOT Enabled OR Faulted THEN
Pump := FALSE;
RETURN;
END_IF
(* كل ما تحت هذا السطر ينفّذ فقط إذا كان التمكين قائماً *)CONTINUE ليست موجودة عند كل المصنّعين، وغالباً يمكن استبدالها بـ IF يغطي الجسم، وهذا أوضح.
لماذا WHILE خطرة
FOR حدودها معروفة عند الدخول، فأسوأ حالاتها بطء. أما WHILE فحدودها شرط، وإذا لم يصبح الشرط كاذباً فالحلقة لا تنتهي، والمسح لا ينتهي، فيتدخل المؤقت الحارس ويوقف المتحكم. مثال كارثي:
WHILE Level < 50.0 DO (* كارثة *)
Pump := TRUE;
END_WHILELevel مدخل حقلي، ومأخوذ من صورة المداخل التي لا تتحدّث داخل الدورة. لن يتغير داخل الحلقة أبداً، والمضخة لم تُكتب إلى المخرج بعد. المتحكم سيتوقف. لا تنتظر مدخلاً حقلياً داخل حلقة. الانتظار في PLC يُكتب بآلة حالات، لا بحلقة.
كيف تُقيّد WHILE
ضع عدّاداً حارساً في الشرط نفسه. سطران يحوّلان حلقة خطرة إلى حلقة مؤكدة الانتهاء:
Guard := 0;
WHILE Rest >= Dose AND Guard < 50 DO
Rest := Rest - Dose;
Guard := Guard + 1;
END_WHILEمهما حدث للبيانات، الحلقة تنتهي بعد 50 تكراراً كأقصى حد. وإن أردت أن تعلم أنها انتهت بالحارس لا بالشرط الحقيقي، افحص Guard >= 50 بعدها وارفع علماً تشخيصياً.
ما يعمل في المختبر
يعمل | لا يعمل |
|---|---|
| |
برنامج هذا الدرس يستخدم WHILE فقط، مع حارس. كتل REPEAT و EXIT و RETURN أعلاه معروضة للقراءة ولبيئة المصنّع.
أي حلقة أختار؟
الحالة | الأداة |
|---|---|
عدد التكرارات معروف | |
غير معروف لكنه مقيّد برياضيات | |
يجب أن ينفّذ مرة على الأقل | |
تنتظر حدثاً من الحقل | لا حلقة إطلاقاً: |
جرّبه في المختبر
المختبر يعمل في متصفحك: محرر ST، وعملية افتراضية تناسب الدرس، ونفس البرنامج كمخطط Ladder حي، وجدول مراقبة، وتصدير إلى Siemens SCL.
ماذا تجرّب
- شغّل البرنامج وراقب Shots: كم جرعة ما زالت تتسع في الخزان.
- اضغط START: كلما ارتفع المستوى ينزل Shots، والمصباح يضيء عند جرعتين أو أقل.
- غيّر 7.5 إلى 0.0 في السطرين: لولا الحارس Guard لعلقت الحلقة إلى الأبد، والآن تتوقف عند 50.
يبحث الناس عن هذا الدرس بـ
WHILE في structured textREPEAT UNTIL في STEXIT في PLCRETURN في structured textحلقة لا تنتهي PLCCONTINUE في STحلقة آمنة في PLC
محتوى الدورة
- 01ما هي لغة ST؟ ومتى تستخدمها بدل Ladder
- 02كيف يشتغل الـ PLC: دورة المسح وصورة المداخل والمخارج
- 03هيكل البرنامج: POU و PROGRAM و FUNCTION و FUNCTION_BLOCK
- 04أول برنامج: تشغيل مضخة بالإمساك الذاتي (Seal-in)
- 05أنواع البيانات: BOOL و INT و REAL و TIME وغيرها
- 06التصريح عن المتغيرات: VAR و VAR_INPUT و RETAIN
- 07القيم الحرفية والثوابت: 16#FF و 2#1010 و T#5s
- 08التحويل بين الأنواع وتحجيم إشارة 4-20 مللي أمبير
- 09الإسناد والحساب في ST: := وأولوية العمليات
- 10المنطق البولياني والمقارنات وعمليات البتات
- 11الدوال القياسية: ABS و SQRT و MIN و MAX و LIMIT و SEL و MUX
- 12الشرط IF و ELSIF و ELSE: القواعد ومتى تتجنبه
- 13التعليمة CASE وأول آلة حالات
- 14حلقة FOR والحارس Watchdog
- 15WHILE و REPEAT و EXIT و CONTINUE و RETURN
- 16كشف الحافة: R_TRIG و F_TRIG ومشكلة «نفّذ في كل مسح»
- 17المؤقتات: TON و TOF و TP
- 18العدّادات: CTU و CTD و CTUD
- 19القلّابات: SR و RS ومن يغلب عند التعارض
- 20اكتب دالتك: FUNCTION وقيمة الإرجاع
- 21اكتب كتلتك الوظيفية: FUNCTION_BLOCK لمحرك
- 22المصفوفات: ARRAY وفلتر المتوسط المتحرك
- 23الأنواع المركّبة: STRUCT والتعدادات
- 24المراجع والمؤشرات: REF_TO و POINTER TO ولماذا تتجنبها
- 25آلة الحالات: تسلسل دفعة كامل بـ CASE لا يعلق أبداً
- 26إدارة الإنذارات على أصول ISA-18.2: تأخير، نطاق ميت، إقرار، وأول خروج
- 27معالجة الإشارة التناظرية: من العدّات إلى وحدة هندسية، و NE43، وفلتر EMA
- 28التحكم المغلق في ST: من التشغيل والإيقاف بفجوة إلى PID عملي
- 29تشغيل المحركات والصمامات: سماحيات، تشابيك، رجع تشغيل، وزمن حركة
- 30نفس الكود عند كل شركة: SCL و Studio 5000 و CODESYS و TwinCAT
- 31الاختبار وتصحيح الأخطاء: جدول المراقبة والفرض والمحاكاة
- 32دليل أسلوب ST: التسمية والتعليقات والثوابت وإدارة النسخ
- 33المشروع الختامي: محطة خزان كاملة بآلة حالات وإنذار وعدّ دفعات
- 3420 سؤال مقابلة في ST وبرمجة PLC بإجابات قصيرة