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

28أنماط صناعية

التحكم المغلق في ST: من التشغيل والإيقاف بفجوة إلى PID عملي

ابدأ بالتحكم على/إيقاف مع فجوة تخلفية، ثم متحكم PID مكتوب بالحساب في ST مع منع تشبّع التكامل وانتقال سلس بين اليدوي والتلقائي، والضبط بكلام بسيط.

الدرس 28 من 3414 دقائقIEC 61131-3

أولاً: هل تحتاج PID فعلاً؟

كثير من حلقات التحكم في المصانع لا تحتاج PID. إن كان العنصر النهائي مضخة تعمل أو لا تعمل، فالتحكم بالفجوة التخلفية (Hysteresis) هو الجواب الصحيح، لا المتواضع:

IF PV <= SP - 3.0 THEN
  OnOff := TRUE;
ELSIF PV >= SP + 3.0 THEN
  OnOff := FALSE;
END_IF;

الفجوة تحدّد عدد مرات البدء في الساعة. فجوة ضيقة تعني تحكماً دقيقاً ومضخة تحترق. المحركات الكبيرة لها حد لعدد البدء، فالفجوة ليست دقة فقط، بل عمر المعدة. استخدم PID عندما يكون العنصر النهائي قابلاً للتعديل: صمام منظّم، مغيّر سرعة، أو سخّان.

PID بالحساب، سطراً سطراً

المعيار IEC 61131-3 لا يعرّف كتلة PID، فكل شركة تقدّم كتلتها. وعند الحاجة تكتبه بنفسك:

Err   := SP - PV;
P     := Kp * Err;
Integ := Integ + Ki * Err * Ts;
D     := Kd * (Err - PrevErr) / Ts;
CV    := LIMIT(0.0, P + Integ + D, 100.0);
PrevErr := Err;

Ts هو زمن المسح بالثواني. وفي معظم حلقات العملية تُترك Kd صفراً: المشتق يضخّم الضجيج، ولا يُستخدم عملياً إلا في حلقات الحرارة البطيئة.

منع تشبّع التكامل (Anti-windup)

هذه هي النقطة التي تُسقط معظم المتحكمات المكتوبة باليد. إذا كان الخزان فارغاً والمضخة على 100%، فالخطأ كبير ويستمر، والتكامل يرتفع ويرتفع إلى رقم خرافي. وعندما تصل القيمة أخيراً للمطلوب، يبقى التكامل محتجزاً فتتجاوز العملية الهدف بعيداً وتبقى متجاوزة دقيقة كاملة.

الحل: لا تُكامل عندما يكون المخرج مشبعاً والخطأ يدفعه أعمق في التشبّع.

CVraw := Kp * Err + Integ;
CV    := LIMIT(0.0, CVraw, 100.0);
Winding := (CVraw > 100.0 AND Err > 0.0) OR (CVraw < 0.0 AND Err < 0.0);
IF NOT Winding THEN
  Integ := Integ + Ki * Err * Ts;
END_IF;

ثم قيّد التكامل بحد أعلى وأدنى في كل الأحوال: Integ := LIMIT(-100.0, Integ, 100.0);. حزام أمان مع مشد.

الانتقال السلس (Bumpless transfer)

عندما يكون المتحكم في وضع يدوي والمشغّل على 40%، ثم يحوّل إلى تلقائي: إن كان تكاملك صفراً، سيقفز المخرج فجأة. الحيلة بسيطة، اجعل التكامل يتعقّب المخرج الحقيقي أثناء اليدوي:

IF NOT Auto THEN
  Integ := CVmanual - Kp * Err;
END_IF;

وبهذا يُحسب المخرج عند أول دورة تلقائية فيساوي بالضبط ما كان في اليدوي، ولا يشعر الخط بشيء. نفس المبدأ يطبّق عند مسح خطأ، أو تغيير مجال، أو عودة قدرة.

الضبط بكلام بسيط

تريد

غيّر

والنتيجة الجانبية

استجابة أسرع

ارفع Kp

تذبذب إن زدت

إزالة فرق دائم عن الهدف

ارفع Ki

تجاوز وبطء في الاستقرار

تهدئة قمم التجاوز

ارفع Kd

حساسية للضجيج

حلقة أهدأ عموماً

أنزل Kp و Ki

بطء في اللحاق

طريقة عملية تعمل دائماً: اجعل Ki = 0 و Kd = 0، وارفع Kp حتى تبدأ العملية بتذبذب خفيف مستمر، ثم انزل به إلى النصف. بعدها ارفع Ki تدريجياً حتى يُغلق الفرق عن الهدف في زمن تقبله. والقاعدة الذهبية: الحلقة الهادئة التي تصل في عشرين ثانية أفضل من الحلقة العصبية التي تصل في خمس وتتذبذب.

التحكم بالزمن النسبي

مخرج PID قيمة 0-100%، والمضخة هنا تعمل أو لا تعمل. الجسر بينهما هو التناسب الزمني: منحدر يصعد من 0 إلى 100 كل ثانيتين، والمضخة تعمل ما دامت القيمة المطلوبة أعلى من المنحدر. طلب 30% يعني 0.6 ثانية تشغيل من كل ثانيتين. هذا بالضبط ما يفعله ترموستات سخّان صناعي.

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

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

ماذا تجرّب

  1. شغّل البرنامج واضغط START، وراقب SP و Level و CV و Integ في جدول المراقبة.
  2. لاحظ المضخة تنبض بدل أن تعمل باستمرار: هذا CV مقسّم زمنياً.
  3. المصباح يضيء عندما يستقر المستوى قرب 60%.
  4. غيّر Ki إلى 0.0 وأعد التحميل: يستقر تحت الهدف (خطأ دائم). غيّر Kp إلى 30.0: يتذبذب أكثر.

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

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

PID في structured textpid controller plc codeالتحكم المغلق PLCanti windup تشبع التكاملbumpless transferضبط PID عمليhysteresis control 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 بإجابات قصيرة