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

23برامج منظمة

الأنواع المركّبة: STRUCT والتعدادات

تعريف أنواعك بـ TYPE و STRUCT، والتعدادات لأسماء الحالات، ولماذا State := Filling أفضل من State := 1 في كل مرة.

الدرس 23 من 3411 دقائقIEC 61131-3

من متغيرات متفرقة إلى شيء واحد

كل مرسل في المحطة له نفس المرافق: قيمة، وحدود، وحالة صلاحية. بالمتغيرات المنفردة:

LT101_Value : REAL;
LT101_HiLim : REAL;
LT101_LoLim : REAL;
LT101_Bad   : BOOL;
LT102_Value : REAL;
LT102_HiLim : REAL;
(* ... وهكذا لأربعين مرسلاً *)

مئة وستون متغيراً، وإضافة حقل جديد تعني تعديل أربعين موضعاً.

STRUCT

TYPE T_Analog :
STRUCT
  Value  : REAL;
  HiLim  : REAL;
  LoLim  : REAL;
  Bad    : BOOL;
  HiAlm  : BOOL;
END_STRUCT
END_TYPE

ثم:

VAR
  LT101 : T_Analog;
  LT102 : T_Analog;
END_VAR

LT101.Value := RawLevel;
LT101.HiAlm := LT101.Value > LT101.HiLim;

الوصول بالنقطة، تماماً كما تقرأ T1.Q من مؤقت. إضافة حقل خامس تُكتب مرة في TYPE فتظهر عند الأربعين.

هذا ما تسميه الشركات UDT (نوع معرّف من المستخدم). وهو ما يجعل مجموعة الإشارات تنتقل ككتلة واحدة إلى كتلة وظيفية أو إلى شاشة HMI.

التعدادات

هنا الربح الأكبر في قراءة الكود. آلة حالة بأرقام:

IF State = 2 THEN
  ...
ELSIF State = 5 THEN

ما هي 2؟ وما هي 5؟ أنت تعرف اليوم، ولن تعرف بعد سنة، والفني الذي يفتح البرنامج ليلاً لن يعرف أبداً. التعداد يعطي الأرقام أسماء:

TYPE E_TankState : (
  Idle,
  Filling,
  Holding,
  Draining,
  Fault
);
END_TYPE

VAR
  State : E_TankState;
END_VAR

State := Filling;

CASE State OF
  Idle:
    ...
  Filling:
    ...
  Draining:
    ...
END_CASE;

لماذا الاسم أفضل من الرقم

  • يقرأ نفسه. IF State = Draining لا يحتاج تعليقاً ولا جدولاً في ملف Excel.
  • المترجم يحميك. State := 7 أو State := Running من تعداد آخر يُرفض عند الترجمة لا في المصنع.
  • التعداد يحصي نفسه. إضافة حالة جديدة لا تكسر شيئاً، ويحذّرك بعض المترجمين من حالة CASE ناقصة.
  • يظهر بالاسم في أدوات التشخيص. جدول المراقبة يعرض Draining لا 3.

يمكنك تثبيت القيم عند الحاجة، مثلاً لمطابقة بروتوكول اتصال:

TYPE E_Mode : (Manual := 0, Auto := 1, Service := 9); END_TYPE

البديل إذا لم يدعم المترجم التعدادات

بعض المنصات القديمة لا تدعمها. البديل المقبول ثوابت مسماة:

VAR CONSTANT
  ST_IDLE     : INT := 0;
  ST_FILLING  : INT := 1;
  ST_DRAINING : INT := 3;
END_VAR

تحصل على القراءة، وتفقد حماية المترجم من قيمة غير صالحة. وهو أفضل بكثير من رقم عارٍ في منتصف CASE.

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

المختبر لا يدعم TYPE ولا STRUCT ولا التعدادات. برنامج المختبر أدناه يستخدم INT للحالات مع تعليق يشرح كل رقم، وهو أضعف ما يمكن قبوله: اقرأه ولاحظ كم تحتاج العودة إلى سطر التعليق لتفهم CASE.

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

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

ماذا تجرّب

  1. شغّل البرنامج واضغط OPEN، وتابع State في جدول المراقبة: 1 (OPENING) ثم 2 (OPENED).
  2. اضغط CLOSE ثم ارفع «سيارة في الفتحة»: الباب يعود للصعود، لأن CLOSING ينتقل إلى OPENING.
  3. اقرأ الشروط بصوت عالٍ: الأسماء تشرح المنطق، بينما State = 3 لا تقول شيئاً.

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

STRUCT في STTYPE END_TYPEenum في PLCenumeration structured textأنواع معرفة من المستخدم PLCحالات آلة الحالةUDT في برمجة 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 بإجابات قصيرة