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

20برامج منظمة

اكتب دالتك: FUNCTION وقيمة الإرجاع

كيف تعلن FUNCTION خاصة بك مثل Scale4to20، وما معنى أن تكون الدالة نقية، ولماذا تختصر مئات الأسطر المكررة.

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

المشكلة: نفس المعادلة في عشرين مكان

في محطة فيها عشرون مرسلاً تناظرياً، تكرر هذا السطر عشرين مرة بأرقام مختلفة:

Flow := (RawFlow - 4.0) / 16.0 * 250.0;
Pres := (RawPres - 4.0) / 16.0 * 10.0;

وفي أحدها تكتب 16.0 مكان 4.0 بالخطأ، فيخرج القياس غلطاً وتبحث عنه ثلاثة أيام. الحل أن تكتب المعادلة مرة واحدة في دالة.

الإعلان

FUNCTION Scale4to20 : REAL
VAR_INPUT
  Raw    : REAL;   (* 4.0 .. 20.0 mA *)
  EngLo  : REAL;
  EngHi  : REAL;
END_VAR

Scale4to20 := EngLo + (Raw - 4.0) / 16.0 * (EngHi - EngLo);

END_FUNCTION

لاحظ ثلاثة أشياء:

  1. النوع بعد الاسم: FUNCTION Scale4to20 : REAL يعني أن الدالة ترجع REAL.
  2. المداخل في VAR_INPUT: تُقرأ ولا تُكتب.
  3. الإرجاع بإسناد إلى اسم الدالة نفسه: Scale4to20 := .... هذه هي صياغة المعيار، ولا وجود لكلمة return.

الاستخدام

Flow := Scale4to20(RawFlow, 0.0, 250.0);
Pres := Scale4to20(RawPres, 0.0, 10.0);
Temp := Scale4to20(RawTemp, -50.0, 200.0);

أو بالأسماء، وهو أوضح عند المراجعة:

Flow := Scale4to20(Raw := RawFlow, EngLo := 0.0, EngHi := 250.0);

النقاء: لا ذاكرة ولا آثار

الدالة نقية (Pure): نفس المداخل تعطي نفس المخرج دائماً، ولا تتذكر شيئاً بين النداءات. وهذا يعني:

  • لا تعلن مؤقتاً ولا عدّاداً داخلها. TON يحتاج ذاكرة، فمكانه FUNCTION_BLOCK.
  • متغيرات VAR المحلية داخل الدالة قيمتها غير محددة في بداية كل نداء. لا تبنِ عليها.
  • لا تكتب على متغير عام من داخل الدالة. تقنياً تستطيع في بعض المنصات، لكنها عادة سيئة تجعل نتيجة الدالة تعتمد على تاريخ البرنامج.

متى تحتاج FUNCTION_BLOCK بدلها؟ عندما يكون الجواب على سؤال «هل تحتاج تذكّر شيء من الدورة السابقة؟» نعم.

دوال تستحق الكتابة

  • Scale4to20 و ScaleRaw: تحجيم القياسات.
  • DeadbandPct: نطاق ميت حول قيمة مرجعية.
  • CelsiusToF، BarToPsi: تحويل وحدات.
  • ClampPct: حصر قيمة بين 0 و 100 مع تسجيل التجاوز.

كل واحدة منها تُراجع مرة، تُختبر مرة، وتصح في كل مكان بعدها.

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

مختبر هذا الموقع ينفّذ PROGRAM واحداً ولا يدعم إعلان FUNCTION. أمثلة الدوال أعلاه كود للقراءة لا للتشغيل، أما برنامج المختبر أدناه فيكتب نفس المعادلة مباشرة داخل البرنامج لترى النتيجة تتحرك.

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

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

ماذا تجرّب

  1. شغّل البرنامج واضغط START، وراقب Percent و DegC و Bar تتبع المستوى.
  2. لاحظ أن الصيغة نفسها مكتوبة ثلاث مرات؛ في PLC حقيقي تصير FUNCTION Scale تستدعيها ثلاث مرات.
  3. غيّر حد الحرارة 120.0 إلى 200.0 في السطر الثاني فقط، ولاحظ أنك عدّلت مكاناً واحداً من ثلاثة: هذا هو الخطأ الذي تمنعه الدالة.

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

FUNCTION في STكتابة دالة في PLCScale4to20تحجيم 4-20mAVAR_INPUTدالة بدون ذاكرة PLCuser defined function structured text

محتوى الدورة

  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 بإجابات قصيرة