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

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

الشرط IF و ELSIF و ELSE: القواعد ومتى تتجنبه

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

الدرس 12 من 3410 دقائقIEC 61131-3

البناء الكامل

IF Level >= 90.0 THEN
  Band := 3;
ELSIF Level >= 60.0 THEN
  Band := 2;
ELSIF Level >= 20.0 THEN
  Band := 1;
ELSE
  Band := 0;
END_IF

ELSIF كلمة واحدة، وليست ELSE IF. و ELSE اختيارية. وعدد فروع ELSIF غير محدود.

الترتيب هو المنطق

الفروع تُفحص من الأعلى إلى الأسفل، وأول شرط يتحقق هو الذي ينفّذ، ثم يُقفز إلى END_IF. لهذا يجب أن يرتّب الحارس الأعلى أولاً. هذا الكود معطوب:

IF Level >= 20.0 THEN
  Band := 1;              (* يلتقط كل شيء فوق 20% *)
ELSIF Level >= 90.0 THEN
  Band := 3;              (* لن يُنفّذ أبداً *)
END_IF

قواعد الفاصلة المنقوطة

ثلاث قواعد تحل 90% من أخطاء الترجمة:

  1. كل تعليمة داخل الفرع تنتهي بـ ;.
  2. لا توضع فاصلة منقوطة بعد THEN ولا بعد ELSE.
  3. END_IF نهاية البناء. المعيار لا يطلب فاصلة بعدها، لكن عدة شركات (ومنها Siemens في SCL) تكتب END_IF; وهذا مقبول في المختبر هنا أيضاً.
IF Start THEN        (* لا فاصلة هنا *)
  Pump := TRUE;      (* فاصلة هنا *)
END_IF

التعشيش ضد التسطيح

يمكن وضع IF داخل IF:

IF Auto THEN
  IF NOT Stop THEN
    IF Level < 90.0 THEN
      Pump := TRUE;
    END_IF
  END_IF
END_IF

لكن هذا سطح مائل. ثلاث طبقات اليوم تصبح سبعاً بعد سنة، ولن يفهمها أحد. سطّحها بـ AND:

IF Auto AND NOT Stop AND Level < 90.0 THEN
  Pump := TRUE;
END_IF

القاعدة العملية: لا تتجاوز ثلاث طبقات تعشيش. إذا احتجت أكثر، فالمنطق يطلب CASE أو إعادة تقسيم.

ومتى يكون الإسناد أفضل من IF أصلاً؟

هذه هي أهم فكرة في الدرس. إذا كان الناتج قيمة بوليانية واحدة، فلا تستخدم IF إطلاقاً:

(* أربعة أسطر، ومصيدة في الطريق *)
IF Level >= 90.0 THEN
  HiAlm := TRUE;
ELSE
  HiAlm := FALSE;
END_IF

(* سطر واحد، وأوضح *)
HiAlm := Level >= 90.0;

والمصيدة الحقيقية هي نسيان ELSE:

IF Level >= 90.0 THEN
  HiAlm := TRUE;
END_IF

هنا يرتفع الإنذار ولا ينزل أبداً، لأن لا شيء يُنزله. والمتغير يحتفظ بقيمته بين الدورات. كل IF يرفع مخرجاً يحتاج ما يُنزله.

IF مكانه الصحيح: اختيار واحد من عدة مسارات، أو تنفيذ مجموعة تعليمات، أو حماية حساب من القسمة على صفر.

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

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

ماذا تجرّب

  1. شغّل البرنامج وارفع S1 ثم S3: يضيء L3 فقط لأن S3 أعلى أولوية.
  2. ارفع S4: ينتقل الضوء إلى L4.
  3. اعكس ترتيب الفروع ليبدأ بـ S1 وأعد التحميل: الآن S1 يفوز دائماً.
  4. احذف فرع ELSE: Level يبقى على آخر قيمة عند إطفاء كل المفاتيح.

مصطلحات هذا الدرس

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

IF في structured textELSIF في STالفاصلة المنقوطة في STIF متداخل في PLCEND_IFشروط في برمجة PLCnested if 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 بإجابات قصيرة