إنت واقف تحت الدُش، والمياه ساقعة. عايزها 40 درجة.
اللي بتعمله من غير ما تفكر هو بالظبط خوارزمية PID. مش تشبيه ولا تبسيط — ده هو الخوارزمية حرفيًا.
خليني أوريك:
الحركة الأولى: بتلف المحبس بمقدار يتناسب مع برودة المياه
المياه ساقعة أوي؟ بتلف كتير. المياه دافية شوية بس مش كفاية؟ بتلف شوية.
دي الـ P — التحكم التناسبي (Proportional).
رد فعل يتناسب مع حجم الخطأ الحالي.
الحركة الثانية: المياه استقرت على 37 ومش بتزيد
عملت اللي عليك، والمياه اتحسنت، بس وقفت عند 37 وإنت عايز 40. الخطأ بقى صغير (3 درجات)، فرد فعل الـ P بقى ضعيف مش قادر يكمّل.
فإنت بتعمل إيه؟ بتلف المحبس شوية كمان. ومستني. لسه 38؟ بتلف كمان شوية. لسه 39؟ كمان شوية.
دي الـ I — التحكم التكاملي (Integral).
بيتراكم مع الوقت طالما فيه خطأ مستمر، لحد ما ينهيه تمامًا.
الحركة الثالثة: حسّيت إن الحرارة بتطلع بسرعة رهيبة
المياه من 30 قفزت لـ38 في ثانيتين. إنت عارف إنها هتعدّي الـ40 وتوصل 50 وتحرقك.
فبتعمل إيه؟ بتقفّل المحبس شوية قبل ما توصل. مش لأن الحرارة عالية دلوقتي — لأنها بتتغيّر بسرعة.
دي الـ D — التحكم التفاضلي (Derivative).
رد فعل على معدل تغيّر الخطأ، مش على قيمته. يعني: توقّع.
كده خلاص. ده الـ PID.
• P بيشوف الحاضر — الخطأ الموجود دلوقتي
• I بيشوف الماضي — الأخطاء المتراكمة
• D بيشوف المستقبل — الخطأ رايح على فين
الباقي كله تفاصيل تنفيذ وضبط.
المصطلحات الأساسية
قبل ما نكمّل، خلينا نوحّد اللغة:
المصطلح • الرمز • المعنى • مثال الدُش
القيمة المستهدفة (Setpoint) • SP • اللي إنت عايزه • 40 درجة
القيمة الفعلية (Process Variable) • PV • اللي موجود فعلاً • 32 درجة
الخطأ (Error) • e = SP − PV • الفرق • 8 درجات
مخرج التحكم (Control Output) • CO / MV • الأمر الخارج • فتحة المحبس 65%
الاضطراب (Disturbance) • — • مؤثر خارجي • حد فتح الصنبور في المطبخ
الحلقة المفتوحة والمغلقة
الحلقة المفتوحة (Open Loop) — بدون تغذية راجعة
[أمر] ──→ [النظام] ──→ [نتيجة]
النظام بينفّذ الأمر من غير ما يتأكد من النتيجة.
مثال: ميكرويف بيشتغل 3 دقايق. مش عارف الأكل سخن ولا لأ — عارف بس إنه اشتغل 3 دقايق.
الميزة: بسيط ورخيص.
العيب: أي تغيّر في الظروف بيخرّب النتيجة.
الحلقة المغلقة (Closed Loop) — مع تغذية راجعة
SP ──→(+)──→ [متحكم] ──→ [النظام] ──┬──→ PV
↑ │
└──────── (تغذية راجعة) ───────┘
النظام بيقيس النتيجة وبيقارنها بالمطلوب وبيصحّح باستمرار.
مثال: تكييف بحساس حرارة. بيقيس، بيقارن، بيصحّح، ويكرر.
كل أنظمة PID هي أنظمة حلقة مغلقة.
تفصيل المكوّنات الثلاثة
1. التحكم التناسبي (P)
مخرج_P = Kp × e
السلوك: كل ما الخطأ يكبر، رد الفعل يكبر.
قيمة Kp • السلوك
صغيرة جدًا • استجابة بطيئة، خطأ مستقر كبير
مناسبة • استجابة سريعة معقولة مع تجاوز محدود
كبيرة جدًا • تذبذب مستمر أو عدم استقرار
المشكلة الجوهرية في الـ P: الخطأ المستقر (Steady-State Offset)
دي أهم نقطة نظرية في الموضوع، وفهمها بيوضّح ليه الـ I موجود أصلاً.
السيناريو: فرن بتحكم P فقط، مستهدف 200 درجة.
عند 200 درجة بالظبط، الخطأ = 0، ومخرج التحكم = Kp × 0 = صفر.
لكن الفرن محتاج طاقة مستمرة عشان يعوّض الفقد الحراري للبيئة! لو المخرج صفر، الفرن هيبرد.
النتيجة الحتمية: النظام بيستقر عند نقطة أقل من المستهدف (مثلاً 190 درجة)، عند القيمة اللي فيها Kp × e بيساوي بالظبط الطاقة المطلوبة للتعويض.
بمتحكم P فقط، من المستحيل نظريًا الوصول للقيمة المستهدفة في أي نظام فيه فقد مستمر. دايمًا هيفضل فيه فرق.
الحل الوهمي: زوّد Kp. الخطأ هيقل، لكن النظام هيبدأ يتذبذب.
الحل الحقيقي: أضف الـ I.
2. التحكم التكاملي (I)
مخرج_I = Ki × ∫ e dt
بلغة بسيطة: بيجمع الخطأ مع الوقت.
السلوك: طالما فيه خطأ — حتى لو صغير جدًا — المخرج بيفضل يزيد بالتدريج لحد ما الخطأ يختفي.
دي بالظبط "لف المحبس شوية كمان... وكمان شوية".
قيمة Ki • السلوك
صفر • خطأ مستقر دائم
صغيرة • تصحيح بطيء لكن مستقر
مناسبة • إلغاء الخطأ في وقت معقول
كبيرة جدًا • تجاوز كبير وتذبذب بطيء
الفخ الكبير: تراكم التكامل (Integral Windup)
دي أشهر مشكلة في تطبيق الـ PID عمليًا، ولازم كل مهندس تحكم يعرفها.
السيناريو:
فرن مستهدف 200 درجة. المشغّل نسي يقفل الباب.
• الفرن مش هيوصل 200 أبدًا (الحرارة بتهرب)
• الخطأ بيفضل موجود وكبير
• الحد التكاملي بيفضل يتراكم... ويتراكم... ويتراكم لدقايق
• المخرج وصل 100% من زمان، لكن الحد التكاملي جواه بقى قيمة ضخمة جدًا (مثلاً ما يعادل 800%)
وبعدين المشغّل يقفل الباب:
• الفرن يسخن بسرعة ويوصل 200 درجة
• الخطأ بقى صفر، لكن الحد التكاملي المتراكم لسه ضخم
• المخرج بيفضل 100% لأن الحد التكاملي لسه بيدفع
• الحرارة بتعدي 250... 300... والحد التكاملي محتاج وقت طويل عشان "يتفرّغ" (لأنه محتاج خطأ سالب متراكم بنفس الحجم)
النتيجة: تجاوز هائل وضرر محتمل في المنتج أو المعدات.
الحلول (Anti-Windup)
1. التقييد (Clamping): أوقف تراكم التكامل لما المخرج يوصل الحد الأقصى أو الأدنى. الحل الأبسط والأكثر شيوعًا.
2. الحساب العكسي (Back-Calculation): خصم من الحد التكاملي بمقدار يتناسب مع الفرق بين المخرج المطلوب والمخرج الفعلي المقيّد.
3. حدود صريحة على الحد التكاملي: ضع سقف وأرضية لقيمته.
4. النطاق التكاملي (Integral Band): فعّل التكامل بس لما الخطأ يبقى داخل نطاق معقول قرب المستهدف.
⚠️ أي تطبيق PID مكتوب من الصفر بدون Anti-Windup هو تطبيق ناقص. النقطة دي بتتنسى كتير في الكود المكتوب يدويًا.
3. التحكم التفاضلي (D)
مخرج_D = Kd × (de/dt)
بلغة بسيطة: بيرد فعل على سرعة تغيّر الخطأ.
السلوك: بيعمل زي الفرامل أو الممتص للصدمات. لو النظام بيقرّب من المستهدف بسرعة، الـ D بيقلل المخرج قبل ما يحصل تجاوز.
قيمة Kd • السلوك
صفر • تجاوز أكبر
مناسبة • تقليل التجاوز واستقرار أسرع
كبيرة جدًا • تضخيم الضوضاء — النظام بيهتز عصبيًا
المشكلة الكبرى في الـ D: تضخيم الضوضاء
المشتقة بطبيعتها بتضخّم التغيّرات السريعة. وإشارة الحساس الحقيقية دايمًا فيها ضوضاء.
مثال: حساس حرارة قراءته الحقيقية 199.9 لكن فيها اهتزاز ±0.5 درجة بسبب الضوضاء الكهربائية. الاهتزاز الصغير ده معدل تغيّره سريع جدًا، والحد التفاضلي بيضخّمه ويطلّع مخرج عصبي بيهتز بعنف.
والنتيجة: الصمام أو المشغّل بيهتز باستمرار، بيستهلك طاقة، وبيتآكل ميكانيكيًا.
الحلول
1. فلتر تمرير منخفض (Low-Pass Filter) على مدخل الحد التفاضلي — الحل القياسي، وموجود مدمج في أغلب المتحكمات التجارية.
2. المشتقة على القيمة الفعلية بدل الخطأ (Derivative on Measurement):
المشكلة: لما المشغّل يغيّر القيمة المستهدفة فجأة (من 100 لـ200)، الخطأ بيقفز فجأة، ومشتقته بتبقى لا نهائية عمليًا → مخرج بيقفز لـ100% لحظيًا. الظاهرة دي اسمها "Derivative Kick".
الحل: احسب المشتقة على PV بدل e. القيمة الفعلية بتتغير تدريجيًا (بسبب فيزياء النظام)، فمفيش قفزات.
ملاحظة مهمة: أغلب المتحكمات الصناعية الحديثة بتعمل ده افتراضيًا. بس لو بتكتب PID بنفسك، دي نقطة لازم تنتبه لها.
3. في كتير من التطبيقات، خلّي Kd = 0.
واقع عملي: الدراسات الصناعية بتشير إن الأغلبية الساحقة من حلقات التحكم في المصانع بتستخدم PI فقط، بدون D. السبب: الـ D صعب الضبط، حساس للضوضاء، وفي أنظمة بطيئة (زي التحكم في المستوى أو الضغط) مش بيضيف قيمة كبيرة.
الـ D بيفيد أكتر في: أنظمة بها قصور ذاتي كبير (Inertia) زي التحكم في الحرارة والموضع (Position Control).
طرق الضبط (Tuning)
الطريقة 1: الضبط اليدوي المنهجي (الأكثر عملية)
الخطوات بالترتيب:
1. اضبط Ki = 0 و Kd = 0
(تحكم P فقط)
2. زوّد Kp تدريجيًا
→ لحد ما النظام يبدأ يتذبذب باستمرار
→ سجّل القيمة دي واسمها Kp_critical
3. ارجّع Kp لحوالي 50% من Kp_critical
→ دلوقتي عندك استجابة سريعة مع خطأ مستقر
4. ابدأ تزوّد Ki تدريجيًا
→ لحد ما الخطأ المستقر يختفي في وقت معقول
→ لو بدأ يحصل تذبذب بطيء، قلّل Ki
5. لو فيه تجاوز مزعج، ابدأ تزوّد Kd بحذر
→ لو المخرج بدأ يهتز أو يصدر ضوضاء، قلّل Kd فورًا
→ في كتير من الحالات، سيبه صفر
⚠️ تحذير سلامة: الخطوة 2 (دفع النظام للتذبذب) ممنوعة تمامًا في الأنظمة الحرجة أو الخطرة. استخدم بدلها طرق التذبذب المخمّد أو الضبط بناءً على نموذج.
الطريقة 2: Ziegler-Nichols
طريقة كلاسيكية من 1942، ولسه بتستخدم كنقطة بداية.
الخطوات:
• اضبط Ki = 0, Kd = 0
• زوّد Kp لحد ما تحصل تذبذبات مستمرة ثابتة السعة
• سجّل: Ku (الكسب الحرج) و Tu (فترة التذبذب بالثواني)
• طبّق الجدول:
نوع المتحكم • Kp • Ki • Kd
P • 0.5 × Ku • — • —
PI • 0.45 × Ku • 0.54 × Ku / Tu • —
PID • 0.6 × Ku • 1.2 × Ku / Tu • 0.075 × Ku × Tu
⚠️ ملاحظات نقدية مهمة على Ziegler-Nichols:
• بتدي استجابة عدوانية بتجاوز يوصل 25% — ده مقبول في بعض التطبيقات وكارثي في غيرها
• بتحتاج دفع النظام لحافة عدم الاستقرار — غير آمنة في أنظمة كتير
• اعتبرها نقطة بداية للضبط اليدوي، مش نتيجة نهائية
الطريقة 3: الضبط التلقائي (Auto-Tuning)
أغلب المتحكمات الصناعية الحديثة والـ PLCs (زي Siemens PID_Compact) عندها وظيفة ضبط تلقائي. بتعمل اضطراب محسوب على النظام، بتقيس الاستجابة، وبتحسب المعاملات.
التوصية العملية: ابدأ بالضبط التلقائي دايمًا لو متاح، وبعدين اضبط يدويًا بشكل دقيق حسب سلوك النظام الفعلي.
جدول التشخيص السريع
العرض المُلاحظ • السبب المحتمل • الإجراء
استجابة بطيئة جدًا • Kp صغير • زوّد Kp
تذبذب سريع ومستمر • Kp كبير • قلّل Kp
مش بيوصل للمستهدف أبدًا • Ki = 0 أو صغير جدًا • زوّد Ki
تجاوز كبير جدًا عند البداية • Ki كبير أو Windup • قلّل Ki + فعّل Anti-Windup
تذبذب بطيء متمايل • Ki كبير • قلّل Ki
المخرج بيهتز عصبيًا • Kd كبير أو ضوضاء في الحساس • قلّل Kd + أضف فلتر
قفزة مفاجئة عند تغيير SP • Derivative Kick • استخدم المشتقة على PV
أداء ممتاز أحيانًا وسيء أحيانًا • النظام غير خطي • استخدم Gain Scheduling
تجاوز كبير بعد فترة تشبع • Integral Windup • فعّل Anti-Windup فورًا
المخرج ثابت عند 0% أو 100% • تشبع / المشغّل صغير • راجع حجم المشغّل والحسابات
التطبيقات العملية بأمثلة إعدادات
1. التحكم في الحرارة (فرن / سخان)
خصائص النظام: بطيء جدًا، تأخير زمني (Dead Time) كبير، قصور حراري عالي.
الاستراتيجية: PID كامل
Kp: متوسط
Ki: صغير (النظام بطيء — تكامل سريع = تجاوز)
Kd: متوسط إلى عالي (بيساعد كتير مع القصور الحراري)
⚠️ Anti-Windup إلزامي
ملاحظة: لو التأخير الزمني كبير جدًا، PID العادي بيبقى ضعيف. الحل المتقدم: Smith Predictor.
2. التحكم في التدفق (Flow Control)
خصائص النظام: سريع جدًا، فيه ضوضاء كتير من الاضطراب.
الاستراتيجية: PI فقط (Kd = 0 قطعًا)
Kp: صغير (النظام سريع)
Ki: كبير نسبيًا
Kd: صفر — الضوضاء هتدمّر أي حد تفاضلي
3. التحكم في الضغط
الاستراتيجية: PI
Kp: متوسط
Ki: متوسط
Kd: صفر عادة
4. التحكم في المستوى (Level Control)
خصائص خاصة: أحيانًا الهدف مش الحفاظ على مستوى محدد، إنما تنعيم التدفق الخارج (Averaging Level Control).
الاستراتيجية: P فقط أو PI ضعيف جدًا
Kp: صغير جدًا
Ki: صغير جدًا أو صفر
Kd: صفر
5. التحكم في الموضع (Position / Servo)
الاستراتيجية: PID كامل — الـ D مهم جدًا هنا
Kp: عالي
Ki: صغير
Kd: عالي (بيمنع التأرجح حول الهدف)
مفاهيم متقدمة تستحق المعرفة
التحكم المتتالي (Cascade Control)
حلقتين متداخلتين: حلقة خارجية بطيئة بتحدد القيمة المستهدفة لحلقة داخلية سريعة.
مثال: التحكم في حرارة مفاعل بواسطة تدفق البخار.
• الحلقة الخارجية (بطيئة): حرارة المفاعل → بتحدد المستهدف لتدفق البخار
• الحلقة الداخلية (سريعة): تدفق البخار → بتتحكم في فتحة الصمام
الميزة الكبيرة: الاضطرابات في ضغط البخار بتتعالج في الحلقة الداخلية السريعة قبل ما تأثر على الحرارة إطلاقًا.
التحكم الأمامي (Feedforward Control)
بدل ما تستنى الخطأ يحصل وترد فعل عليه، بتقيس الاضطراب مباشرة وتعوّضه قبل ما يأثر.
مثال: في سخان مياه مستمر، بدل ما تستنى الحرارة تنزل لما التدفق يزيد، اقيس التدفق مباشرة وزوّد التسخين فورًا.
عادة بيتستخدم مع PID (مش بديل عنه) — Feedforward بيتعامل مع الاضطراب المعروف، و PID بيتعامل مع الباقي.
جدولة الكسب (Gain Scheduling)
في الأنظمة غير الخطية، معاملات PID المثالية بتختلف حسب نقطة التشغيل. الحل: مجموعات معاملات مختلفة تتبدّل حسب الظروف.
مثال: معاملات مختلفة لفصل الصيف عن الشتاء في نظام تكييف.
أسئلة شائعة
محتاج أفهم الرياضيات عشان أضبط PID؟
لأ. 95% من المهندسين اللي بيضبطوا PID في المصانع بيعملوا ده بالطريقة اليدوية المنهجية والفهم السلوكي. الرياضيات بتفيد في التصميم المتقدم والنمذجة، مش في الضبط اليومي.
ليه بيقولوا PI بس مش PID؟
لأن الحد التفاضلي صعب الضبط، حساس للضوضاء، وبيضيف قيمة محدودة في أنظمة كتير. الممارسة الصناعية الشائعة إن أغلب الحلقات بتشتغل PI. ابدأ بـ PI، وأضف D بس لو محتاجه فعلاً.
كام مرة أعيد ضبط الـ PID؟
بعد أي تغيير في النظام (استبدال صمام، تغيير في العملية، تغيير موسمي كبير). وممارسة جيدة: مراجعة سنوية لأداء الحلقات الحرجة. حلقات كتير في المصانع بتشتغل بمعاملات المصنع الافتراضية من سنين — وده هدر أداء كبير.
PID بيشتغل في البيت الذكي؟
آه، ومستخدم فعلاً. أنظمة التدفئة الأرضية والتحكم في التكييف بتستخدم PID. في Home Assistant فيه مكوّن PID Thermostat جاهز.
بديل PID فيه إيه؟
• On/Off (Bang-Bang): أبسط، بيستخدم في الثرموستات المنزلي. عيبه: تذبذب مستمر حول المستهدف وتآكل المعدات.
• MPC (Model Predictive Control): بيستخدم نموذج رياضي للتنبؤ وتحسين عبر أفق زمني. أقوى بكتير لكن أعقد ومكلف. بيستخدم في التكرير والبتروكيماويات.
• Fuzzy Logic: بيستخدم قواعد وصفية بدل معادلات. مفيد في الأنظمة صعبة النمذجة.
• التحكم بالتعلم المعزز (RL): الحدود الحالية للبحث، وبيدخل تدريجيًا في التطبيقات الصناعية.
PID موجود في PLC؟
آه، كل PLC حديث فيه بلوك PID جاهز (PID_Compact في Siemens، PIDE في Rockwell). متكتبوش من الصفر إلا لو عندك سبب قوي — البلوكات الجاهزة فيها Anti-Windup وفلاتر ومعالجة للـ Derivative Kick مدمجة ومختبرة.
الخلاصة
الـ PID مش معادلة تُحفظ. ده طريقة تفكير في ثلاثة أزمنة:
المكوّن • بيشوف • السؤال اللي بيجاوب عليه
P • الحاضر • "الخطأ كبير قد إيه دلوقتي؟"
I • الماضي • "الخطأ ده مستمر من إمتى؟"
D • المستقبل • "الخطأ رايح على فين بسرعة قد إيه؟"
وأهم 4 نصايح عملية:
• ابدأ بـ P، وبعدين I، وبعدين D لو محتاج. ومتستغربش لو وقفت عند PI.
• Anti-Windup مش اختياري. ده أشهر سبب لسلوك غريب في الأنظمة الحقيقية.
• المشتقة على PV مش على الخطأ. بيمنع القفزات المفاجئة عند تغيير المستهدف.
• افهم نظامك الأول. نظام سريع محتاج ضبط مختلف تمامًا عن نظام بطيء بتأخير كبير.
ولو حسّيت إن الموضوع معقد، ارجع للدُش. إنت بتعمل PID كل يوم من غير ما تدري.
