التحكم بالمحركات عبر PLC: تشغيل وإيقاف وعكس وتحكم بالسرعة
دائرة التشغيل المباشر DOL
التشغيل المباشر (Direct On-Line) هو أبسط طريقة لتشغيل محرك كهربائي ثلاثي الأطوار. يُوصّل المحرك مباشرة بجهد الشبكة الكامل عبر كونتاكتور.
المكونات
- قاطع رئيسي: حماية من القصر
- كونتاكتور: تشغيل/إيقاف المحرك بأمر من PLC
- حماية حرارية (Overload Relay): حماية من الحمل الزائد
- PLC: يتحكم بملف الكونتاكتور عبر مخرج رقمي
مخطط التوصيل
L1 ──┤قاطع├──┤كونتاكتور K1├──┤حماية حرارية├── U ── محرك
L2 ──┤ ├──┤ ├──┤ ├── V ── M
L3 ──┤ ├──┤ ├──┤ ├── W ── 3~
PLC Q0.0 ──── ملف K1 (24VDC)
PLC I0.0 ◄─── تلامس الحماية الحرارية (NC)
الكود في ST
// DOL: تشغيل مباشر مع قفل ذاتي
IF bEStop OR bThermalTrip THEN
bContactor_K1 := FALSE;
ELSIF bStopButton THEN
bContactor_K1 := FALSE;
ELSIF bStartButton THEN
bContactor_K1 := TRUE;
END_IF;
// bContactor_K1 يبقى TRUE بعد تحرير زر البدء (قفل ذاتي برمجي)
القيود
تيار البدء يصل إلى 6-8 أضعاف التيار الاسمي. مناسب فقط للمحركات حتى 7.5 كيلوواط تقريباً، وإلا قد يُسبب هبوط جهد في الشبكة.
دائرة العكس مع القفل المتبادل
عكس اتجاه دوران المحرك يتم بتبديل أي طورين من أطوار التغذية. يُنفّذ بكونتاكتورين مع قفل متبادل لمنع تشغيلهما معاً (قصر كهربائي).
القفل المتبادل
القفل يتم على مستويين للأمان:
- قفل كهربائي: تلامس NC من كل كونتاكتور في دائرة ملف الآخر
- قفل برمجي: شرط في كود PLC
الكود في ST
VAR
bForwardBtn : BOOL; // I0.0 - زر أمام
bReverseBtn : BOOL; // I0.1 - زر خلف
bStopBtn : BOOL; // I0.2 - زر إيقاف
bK1_Forward : BOOL; // Q0.0 - كونتاكتور أمام
bK2_Reverse : BOOL; // Q0.1 - كونتاكتور خلف
tReverseDelay : TON; // تأخير قبل العكس
bWaitReverse : BOOL;
END_VAR
// إيقاف
IF bStopBtn OR bEStop THEN
bK1_Forward := FALSE;
bK2_Reverse := FALSE;
bWaitReverse := FALSE;
END_IF;
// تشغيل أمام (فقط إذا كونتاكتور الخلف مطفأ)
IF bForwardBtn AND NOT bK2_Reverse AND NOT bWaitReverse THEN
bK1_Forward := TRUE;
END_IF;
// تشغيل خلف (فقط إذا كونتاكتور الأمام مطفأ)
IF bReverseBtn AND NOT bK1_Forward AND NOT bWaitReverse THEN
bK2_Reverse := TRUE;
END_IF;
// تأخير 500ms عند تبديل الاتجاه لحماية المحرك
IF bReverseBtn AND bK1_Forward THEN
bK1_Forward := FALSE;
bWaitReverse := TRUE;
END_IF;
tReverseDelay(IN := bWaitReverse, PT := T#500ms);
IF tReverseDelay.Q THEN
bK2_Reverse := TRUE;
bWaitReverse := FALSE;
END_IF;
تطبيق صناعي
سير ناقل في خط تغليف يحتاج العكس أحياناً لإزالة انحشار المنتجات.
التشغيل نجمة-مثلث Star-Delta
للمحركات الأكبر (7.5-75 كيلوواط)، يُقلّل التشغيل نجمة-مثلث تيار البدء إلى ثلث قيمته.
المراحل
- نجمة (Star/Y): المحرك يبدأ بجهد مخفّض (57% من الجهد الاسمي) لمدة 5-10 ثوانٍ
- انتقال: فصل لحظي (50-100ms)
- مثلث (Delta/Δ): المحرك يعمل بالجهد الكامل
الكود في ST
VAR
bK1_Main : BOOL; // Q0.0 - كونتاكتور رئيسي
bK2_Star : BOOL; // Q0.1 - كونتاكتور نجمة
bK3_Delta : BOOL; // Q0.2 - كونتاكتور مثلث
iStartStep : INT := 0;
fbStarTimer : TON; // مدة النجمة
fbTransTimer: TON; // مدة الانتقال
END_VAR
CASE iStartStep OF
0: // انتظار أمر التشغيل
bK1_Main := FALSE;
bK2_Star := FALSE;
bK3_Delta := FALSE;
IF bStartButton AND NOT bEStop THEN
iStartStep := 10;
END_IF;
10: // تشغيل نجمة
bK1_Main := TRUE;
bK2_Star := TRUE;
bK3_Delta := FALSE;
fbStarTimer(IN := TRUE, PT := T#7s);
IF fbStarTimer.Q THEN
fbStarTimer(IN := FALSE);
iStartStep := 20;
END_IF;
20: // انتقال: فصل النجمة
bK2_Star := FALSE;
bK3_Delta := FALSE;
fbTransTimer(IN := TRUE, PT := T#80ms);
IF fbTransTimer.Q THEN
fbTransTimer(IN := FALSE);
iStartStep := 30;
END_IF;
30: // تشغيل مثلث
bK1_Main := TRUE;
bK2_Star := FALSE;
bK3_Delta := TRUE;
// المحرك يعمل بكامل طاقته
99: // عطل
bK1_Main := FALSE;
bK2_Star := FALSE;
bK3_Delta := FALSE;
END_CASE;
// إيقاف من أي مرحلة
IF bStopBtn OR bEStop OR bThermalTrip THEN
iStartStep := 0;
END_IF;
التحكم بالسرعة عبر المحول الترددي VFD
المحول الترددي (Variable Frequency Drive) يتحكم بسرعة المحرك عبر تغيير تردد التغذية. هو الحل الأحدث والأكثر مرونة.
التوصيل مع PLC
PLC مخرج رقمي Q0.0 ──── مدخل VFD: تشغيل/إيقاف
PLC مخرج رقمي Q0.1 ──── مدخل VFD: اتجاه الدوران
PLC مخرج تناظري AO ──── مدخل VFD: مرجع السرعة (0-10V)
PLC مدخل رقمي I0.0 ◄─── مخرج VFD: يعمل (Running)
PLC مدخل رقمي I0.1 ◄─── مخرج VFD: عطل (Fault)
PLC مدخل تناظري AI ◄─── مخرج VFD: التردد الفعلي
الكود في ST
VAR
bVFD_Run : BOOL; // Q0.0 - أمر التشغيل
bVFD_Reverse : BOOL; // Q0.1 - اتجاه العكس
iVFD_SpeedRef: INT; // AO - مرجع السرعة (0-27648)
bVFD_Running : BOOL; // I0.0 - حالة التشغيل
bVFD_Fault : BOOL; // I0.1 - حالة العطل
rSpeedPercent: REAL; // السرعة المطلوبة 0-100%
END_VAR
// تحويل النسبة المئوية إلى قيمة خام للمخرج التناظري
iVFD_SpeedRef := REAL_TO_INT(rSpeedPercent / 100.0 * 27648.0);
// تحديد القيمة ضمن النطاق
IF iVFD_SpeedRef < 0 THEN iVFD_SpeedRef := 0; END_IF;
IF iVFD_SpeedRef > 27648 THEN iVFD_SpeedRef := 27648; END_IF;
// التحكم
bVFD_Run := bStartCmd AND NOT bVFD_Fault AND NOT bEStop;
حماية المحرك: الحمل الزائد والحرارة
أنظمة الحماية
| الحماية | الخطر | الطريقة |
|---|---|---|
| حرارية | حمل زائد مستمر | مرحّل حراري (Overload Relay) |
| قصر | تيار عالٍ مفاجئ | قاطع دائرة (Circuit Breaker) |
| عدم توازن الأطوار | فقدان طور | مرحّل حماية الأطوار |
| حرارة اللفات | ارتفاع حرارة المحرك | مستشعر PTC/PT100 في اللفات |
مراقبة تيار المحرك في ST
VAR
rMotorCurrent : REAL; // التيار الفعلي (أمبير)
rNominalCurrent: REAL := 15.0; // التيار الاسمي
fbOverloadTon : TON;
bOverload : BOOL;
END_VAR
// إنذار عند تجاوز 110% لمدة 10 ثوانٍ
fbOverloadTon(
IN := rMotorCurrent > (rNominalCurrent * 1.1),
PT := T#10s
);
bOverload := fbOverloadTon.Q;
IF bOverload THEN
bMotorRun := FALSE;
bOverloadAlarm := TRUE;
END_IF;
مثال عملي: تشغيل سير ناقل بسرعتين
وصف النظام
سير ناقل في خط تعبئة يعمل بسرعتين:
- سرعة عالية (80%): نقل المنتجات بين المحطات
- سرعة منخفضة (30%): عند اقتراب المنتج من محطة التعبئة
PROGRAM ConveyorTwoSpeed
VAR
// مداخل
bStartBtn : BOOL; // I0.0
bStopBtn : BOOL; // I0.1
bEStop : BOOL; // I0.2
bSlowZoneSensor: BOOL; // I0.3 - حسّاس منطقة التباطؤ
bVFD_Fault : BOOL; // I0.4 - عطل محول التردد
bVFD_Running : BOOL; // I0.5
// مخارج
bVFD_Enable : BOOL; // Q0.0
iSpeedRef : INT; // AO - مرجع السرعة
// داخلية
rTargetSpeed : REAL;
rCurrentSpeed : REAL := 0.0;
rRampRate : REAL := 2.0; // %/دورة مسح
bRunCommand : BOOL;
END_VAR
// القفل الذاتي
IF bEStop OR bVFD_Fault THEN
bRunCommand := FALSE;
ELSIF bStopBtn THEN
bRunCommand := FALSE;
ELSIF bStartBtn THEN
bRunCommand := TRUE;
END_IF;
// تحديد السرعة المطلوبة
IF bRunCommand THEN
IF bSlowZoneSensor THEN
rTargetSpeed := 30.0; // منطقة تباطؤ
ELSE
rTargetSpeed := 80.0; // سرعة عادية
END_IF;
ELSE
rTargetSpeed := 0.0;
END_IF;
// تسارع/تباطؤ تدريجي (Ramp)
IF rCurrentSpeed < rTargetSpeed THEN
rCurrentSpeed := rCurrentSpeed + rRampRate;
IF rCurrentSpeed > rTargetSpeed THEN
rCurrentSpeed := rTargetSpeed;
END_IF;
ELSIF rCurrentSpeed > rTargetSpeed THEN
rCurrentSpeed := rCurrentSpeed - rRampRate;
IF rCurrentSpeed < rTargetSpeed THEN
rCurrentSpeed := rTargetSpeed;
END_IF;
END_IF;
// المخارج
bVFD_Enable := bRunCommand;
iSpeedRef := REAL_TO_INT(rCurrentSpeed / 100.0 * 27648.0);
الخلاصة
التحكم بالمحركات يتدرّج من التشغيل المباشر البسيط إلى المحولات الترددية المتقدمة. القفل المتبادل في دوائر العكس والحماية الحرارية إلزاميان في أي تطبيق صناعي. المحولات الترددية أصبحت الخيار المفضّل لمرونتها وتوفيرها للطاقة. في الدرس القادم سنتعلم بروتوكولات الاتصال الصناعية لربط PLC بالأجهزة الأخرى.