انتقل إلى المحتوى

15التحكم بالتدفق

WHILE و REPEAT و EXIT و CONTINUE و RETURN

الحلقات غير محدودة العدد وتعليمات القفز، لماذا WHILE خطرة في متحكم، وكيف تجعلها آمنة بعدّاد حارس.

الدرس 15 من 3412 دقائقIEC 61131-3

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 تستمر طالما الشرط صحيح.

تعليمات القفز

التعليمة

العمل

EXIT;

اخرج من الحلقة الحالية فوراً

CONTINUE;

اقطع هذا التكرار وابدأ التالي

RETURN;

اخرج من الـ POU كلها

FOR i := 1 TO 200 DO
  IF Ids[i] = Wanted THEN
    Found := i;
    EXIT;                 (* وجدناه، لا معنى لفحص الباقي *)
  END_IF
END_FOR

RETURN مفيدة كـ بوابة في أول البرنامج: إذا لم تكن الظروف صالحة، لا تنفّذ شيئاً.

IF NOT Enabled OR Faulted THEN
  Pump := FALSE;
  RETURN;
END_IF
(* كل ما تحت هذا السطر ينفّذ فقط إذا كان التمكين قائماً *)

CONTINUE ليست موجودة عند كل المصنّعين، وغالباً يمكن استبدالها بـ IF يغطي الجسم، وهذا أوضح.

لماذا WHILE خطرة

FOR حدودها معروفة عند الدخول، فأسوأ حالاتها بطء. أما WHILE فحدودها شرط، وإذا لم يصبح الشرط كاذباً فالحلقة لا تنتهي، والمسح لا ينتهي، فيتدخل المؤقت الحارس ويوقف المتحكم. مثال كارثي:

WHILE Level < 50.0 DO       (* كارثة *)
  Pump := TRUE;
END_WHILE

Level مدخل حقلي، ومأخوذ من صورة المداخل التي لا تتحدّث داخل الدورة. لن يتغير داخل الحلقة أبداً، والمضخة لم تُكتب إلى المخرج بعد. المتحكم سيتوقف. لا تنتظر مدخلاً حقلياً داخل حلقة. الانتظار في PLC يُكتب بآلة حالات، لا بحلقة.

كيف تُقيّد WHILE

ضع عدّاداً حارساً في الشرط نفسه. سطران يحوّلان حلقة خطرة إلى حلقة مؤكدة الانتهاء:

Guard := 0;
WHILE Rest >= Dose AND Guard < 50 DO
  Rest  := Rest - Dose;
  Guard := Guard + 1;
END_WHILE

مهما حدث للبيانات، الحلقة تنتهي بعد 50 تكراراً كأقصى حد. وإن أردت أن تعلم أنها انتهت بالحارس لا بالشرط الحقيقي، افحص Guard >= 50 بعدها وارفع علماً تشخيصياً.

ما يعمل في المختبر

يعمل

لا يعمل

WHILE ... DO ... END_WHILE

REPEAT و EXIT و CONTINUE و RETURN

برنامج هذا الدرس يستخدم WHILE فقط، مع حارس. كتل REPEAT و EXIT و RETURN أعلاه معروضة للقراءة ولبيئة المصنّع.

أي حلقة أختار؟

الحالة

الأداة

عدد التكرارات معروف

FOR

غير معروف لكنه مقيّد برياضيات

WHILE مع حارس

يجب أن ينفّذ مرة على الأقل

REPEAT مع حارس

تنتظر حدثاً من الحقل

لا حلقة إطلاقاً: CASE وآلة حالات

جرّبه في المختبر

المختبر يعمل في متصفحك: محرر ST، وعملية افتراضية تناسب الدرس، ونفس البرنامج كمخطط Ladder حي، وجدول مراقبة، وتصدير إلى Siemens SCL.

ماذا تجرّب

  1. شغّل البرنامج وراقب Shots: كم جرعة ما زالت تتسع في الخزان.
  2. اضغط START: كلما ارتفع المستوى ينزل Shots، والمصباح يضيء عند جرعتين أو أقل.
  3. غيّر 7.5 إلى 0.0 في السطرين: لولا الحارس Guard لعلقت الحلقة إلى الأبد، والآن تتوقف عند 50.

يبحث الناس عن هذا الدرس بـ

WHILE في structured textREPEAT UNTIL في STEXIT في PLCRETURN في structured textحلقة لا تنتهي PLCCONTINUE في STحلقة آمنة في PLC

محتوى الدورة

  1. 01ما هي لغة ST؟ ومتى تستخدمها بدل Ladder
  2. 02كيف يشتغل الـ PLC: دورة المسح وصورة المداخل والمخارج
  3. 03هيكل البرنامج: POU و PROGRAM و FUNCTION و FUNCTION_BLOCK
  4. 04أول برنامج: تشغيل مضخة بالإمساك الذاتي (Seal-in)
  5. 05أنواع البيانات: BOOL و INT و REAL و TIME وغيرها
  6. 06التصريح عن المتغيرات: VAR و VAR_INPUT و RETAIN
  7. 07القيم الحرفية والثوابت: 16#FF و 2#1010 و T#5s
  8. 08التحويل بين الأنواع وتحجيم إشارة 4-20 مللي أمبير
  9. 09الإسناد والحساب في ST: ‎:=‎ وأولوية العمليات
  10. 10المنطق البولياني والمقارنات وعمليات البتات
  11. 11الدوال القياسية: ABS و SQRT و MIN و MAX و LIMIT و SEL و MUX
  12. 12الشرط IF و ELSIF و ELSE: القواعد ومتى تتجنبه
  13. 13التعليمة CASE وأول آلة حالات
  14. 14حلقة FOR والحارس Watchdog
  15. 15WHILE و REPEAT و EXIT و CONTINUE و RETURN
  16. 16كشف الحافة: R_TRIG و F_TRIG ومشكلة «نفّذ في كل مسح»
  17. 17المؤقتات: TON و TOF و TP
  18. 18العدّادات: CTU و CTD و CTUD
  19. 19القلّابات: SR و RS ومن يغلب عند التعارض
  20. 20اكتب دالتك: FUNCTION وقيمة الإرجاع
  21. 21اكتب كتلتك الوظيفية: FUNCTION_BLOCK لمحرك
  22. 22المصفوفات: ARRAY وفلتر المتوسط المتحرك
  23. 23الأنواع المركّبة: STRUCT والتعدادات
  24. 24المراجع والمؤشرات: REF_TO و POINTER TO ولماذا تتجنبها
  25. 25آلة الحالات: تسلسل دفعة كامل بـ CASE لا يعلق أبداً
  26. 26إدارة الإنذارات على أصول ISA-18.2: تأخير، نطاق ميت، إقرار، وأول خروج
  27. 27معالجة الإشارة التناظرية: من العدّات إلى وحدة هندسية، و NE43، وفلتر EMA
  28. 28التحكم المغلق في ST: من التشغيل والإيقاف بفجوة إلى PID عملي
  29. 29تشغيل المحركات والصمامات: سماحيات، تشابيك، رجع تشغيل، وزمن حركة
  30. 30نفس الكود عند كل شركة: SCL و Studio 5000 و CODESYS و TwinCAT
  31. 31الاختبار وتصحيح الأخطاء: جدول المراقبة والفرض والمحاكاة
  32. 32دليل أسلوب ST: التسمية والتعليقات والثوابت وإدارة النسخ
  33. 33المشروع الختامي: محطة خزان كاملة بآلة حالات وإنذار وعدّ دفعات
  34. 3420 سؤال مقابلة في ST وبرمجة PLC بإجابات قصيرة