31من المختبر إلى المصنع
الاختبار وتصحيح الأخطاء: جدول المراقبة والفرض والمحاكاة
كيف تجعل البرنامج صحيحاً: جدول المراقبة، والفرض ولماذا هو خطير أونلاين، والمسح المفرد، والمحاكاة، وثمانية أخطاء شائعة في ST.
الأدوات الأربع
كل بيئة برمجة تعطيك نفس الأربع، بأسماء مختلفة:
الأداة | ما تفعله | متى تستخدمها |
|---|---|---|
جدول المراقبة | يعرض قيم المتغيرات مباشرة أثناء التنفيذ | دائماً، وهو أول ما تفتحه |
الفرض (Force) | يثبّت قيمة مدخل أو مخرج ويتجاوز البرنامج | في الاختبار فقط، وبحساب شديد |
المسح المفرد | ينفّذ دورة واحدة ويتوقف | لتتبع منطق معقّد خطوة خطوة |
المحاكاة | PLC افتراضي بلا أجهزة | قبل أن تذهب إلى الموقع |
جدول المراقبة أولاً
لا تخمّن. أضف إلى الجدول المتغيرات التي تحكي القصة: رقم الخطوة، مخرج المؤقت وزمنه المنقضي، القيمة المفلترة، ومزلاج الإنذار. ثمانون في المئة من الأخطاء تظهر من مقارنة ما تراه بما توقعته. في مختبر هذا الموقع الجدول يُحدّث كل دورة مسح.
الفرض: لماذا هو خطير
الفرض لا يغيّر البرنامج، بل يفصل القيمة عن الواقع. المخرج المفروض يبقى مفروضاً حتى بعد إعادة تحميل البرنامج، وفي بعض المتحكمات بعد إعادة التشغيل. القواعد:
- لا تفرض مخرجاً على معدات متصلة دون إذن كتابي وشخص واقف عند الجهاز.
- لا تفرض مدخل سلامة أبداً.
- اكتب كل فرض في ورقة، وأزله قبل أن تغادر، وتحقق أن قائمة الفروض فارغة.
- إذا كان الفرض ضرورياً لتشغيل المحطة، فأنت لا تختبر بل تخفي عطلاً.
البديل الأنظف في الاختبار: متغير محاكاة داخلي في البرنامج تضع فيه القيمة، فيظهر في الكود ويختفي معه.
المسح المفرد
يجعل الزمن ثابتاً. تنفّذ دورة واحدة، تقرأ الجدول، تفهم. مفيد جداً لمعرفة في أي دورة بالضبط تتغير قيمة، ولرؤية كشف الحافة يعمل. ما لا يصلح له: أي منطق يعتمد على مرور الزمن الحقيقي، لأن المؤقتات تحسب الساعة لا الدورات.
المحاكاة
- PLCSIM و PLCSIM Advanced في TIA Portal: متحكم افتراضي يتحدث مع البرنامج والـ HMI.
- محاكاة CODESYS: تشغّل المشروع على جهازك بزر واحد، وتدعم نقاط التوقف.
- مختبر هذا الموقع: محرر وخزان افتراضي بمضخة وصمام وجدول مراقبة، للتعلم والتجربة السريعة.
المحاكاة تكشف أخطاء المنطق، لا أخطاء الأسلاك ولا التوقيت الحقيقي للمحرك. اعتبرها المرحلة الأولى من ثلاث: محاكاة، ثم اختبار على طاولة بمتحكم حقيقي ومفاتيح، ثم تشغيل تجريبي في الموقع.
نقاط التوقف
في CODESYS و TwinCAT يمكنك وضع نقطة توقف في سطر ST. انتبه: المتحكم يتوقف عند النقطة، والمخارج تبقى على آخر قيمة، والمؤقتات تستمر. على معدات حقيقية هذا يساوي تجميد الآلة في منتصف حركتها. نقاط التوقف للمحاكاة ولمنصة الاختبار، لا للخط المنتج.
ثمانية أخطاء تتكرر في ST
=بدل:=—Pump = TRUE;ليس إسناداً بل مقارنة بلا نتيجة. أغلب المترجمات ترفضه، وبعضها يقبله بصمت.- فاصلة منقوطة ناقصة — الخطأ يُعلن عادة في السطر التالي، فابحث قبل السطر المذكور.
END_IFناقص — المترجم يشتكي من نهاية الكتلة، والسبب شرط فُتح ولم يُغلق في مكان بعيد.- استدعاء مؤقت داخل فرع لا ينفّذ كل دورة — أشهر خطأ في ST. نسخة المؤقت لا تتقدم إلا عند استدعائها.
- قسمة الأعداد الصحيحة —
7 / 2تساوي3. ابدأ بالتحويل إلىREALأو اضرب قبل أن تقسم. - حافة غير مكتشفة — مقارنة الحالة الحالية بالحالة السابقة أو
R_TRIG؛ بدونها يُحسب الضغط الواحد مرات بعدد الدورات. - كتابة المخرج مرتين —
Pump := TRUE;في مكان وPump := FALSE;في مكان آخر: آخر إسناد يغلب، والأول يضيع بلا أثر. - متغير
RETAINغير مهيّأ — بعد تبديل بطارية أو تحميل بارد يبدأ عدّاد الدفعات أو نقطة الضبط من صفر. تحقق منها في أول دورة.
البرنامج في المختبر فيه خطأ
البرنامج المحمّل تحت هذا الدرس يجب أن: يملأ الخزان إلى 60%، ينتظر 3 ثوان، ثم يفتح صمام التفريغ. شغّله وستجد أن المستوى يتوقف عند 60% ولا يحدث شيء بعدها.
السبب من القائمة أعلاه: المؤقت مستدعى داخل IF Start THEN. وزر التشغيل لحظي، فالمؤقت لا يُستدعى إلا أثناء ضغط إصبعك، ولا يكمل الثلاث ثوان أبداً. جدول المراقبة يقولها بوضوح: Hold.ET يبقى صفراً.
الإصلاح: أخرج استدعاء المؤقت من الشرط ليُنفّذ في كل دورة. احذف سطر IF Start THEN وسطر END_IF المقابل له، فيصبح الاستدعاء على مستوى البرنامج:
AtLevel := Level >= 60.0;
Hold(IN := AtLevel, PT := T#3s);شرط البدء يجب أن يكون في مدخل IN للمؤقت، لا في شرط يحيط باستدعائه. هذه هي القاعدة التي تمنع هذا الخطأ كله.
جرّبه في المختبر
المختبر يعمل في متصفحك: محرر ST، وعملية افتراضية تناسب الدرس، ونفس البرنامج كمخطط Ladder حي، وجدول مراقبة، وتصدير إلى Siemens SCL.
ماذا تجرّب
- شغّل البرنامج واضغط OPEN مطولاً ثانية: المنارة تضيء ثم يصعد الباب.
- اضغط CLOSE مطولاً، وأثناء النزول ارفع «سيارة في الفتحة»: الباب يكمل نزوله ويظهر CRUSH. هذا هو الخطأ.
- في جدول المراقبة لاحظ Beam = TRUE بينما MotDown ما زال TRUE.
- أصلحه بإضافة AND NOT Beam إلى سطر MotDown، وأعد التجربة.
يبحث الناس عن هذا الدرس بـ
تصحيح اخطاء PLCجدول المراقبة watch tableforce في PLCPLCSIM محاكاةاخطاء structured textاختبار برنامج PLCsingle scan في PLC
محتوى الدورة
- 01ما هي لغة ST؟ ومتى تستخدمها بدل Ladder
- 02كيف يشتغل الـ PLC: دورة المسح وصورة المداخل والمخارج
- 03هيكل البرنامج: POU و PROGRAM و FUNCTION و FUNCTION_BLOCK
- 04أول برنامج: تشغيل مضخة بالإمساك الذاتي (Seal-in)
- 05أنواع البيانات: BOOL و INT و REAL و TIME وغيرها
- 06التصريح عن المتغيرات: VAR و VAR_INPUT و RETAIN
- 07القيم الحرفية والثوابت: 16#FF و 2#1010 و T#5s
- 08التحويل بين الأنواع وتحجيم إشارة 4-20 مللي أمبير
- 09الإسناد والحساب في ST: := وأولوية العمليات
- 10المنطق البولياني والمقارنات وعمليات البتات
- 11الدوال القياسية: ABS و SQRT و MIN و MAX و LIMIT و SEL و MUX
- 12الشرط IF و ELSIF و ELSE: القواعد ومتى تتجنبه
- 13التعليمة CASE وأول آلة حالات
- 14حلقة FOR والحارس Watchdog
- 15WHILE و REPEAT و EXIT و CONTINUE و RETURN
- 16كشف الحافة: R_TRIG و F_TRIG ومشكلة «نفّذ في كل مسح»
- 17المؤقتات: TON و TOF و TP
- 18العدّادات: CTU و CTD و CTUD
- 19القلّابات: SR و RS ومن يغلب عند التعارض
- 20اكتب دالتك: FUNCTION وقيمة الإرجاع
- 21اكتب كتلتك الوظيفية: FUNCTION_BLOCK لمحرك
- 22المصفوفات: ARRAY وفلتر المتوسط المتحرك
- 23الأنواع المركّبة: STRUCT والتعدادات
- 24المراجع والمؤشرات: REF_TO و POINTER TO ولماذا تتجنبها
- 25آلة الحالات: تسلسل دفعة كامل بـ CASE لا يعلق أبداً
- 26إدارة الإنذارات على أصول ISA-18.2: تأخير، نطاق ميت، إقرار، وأول خروج
- 27معالجة الإشارة التناظرية: من العدّات إلى وحدة هندسية، و NE43، وفلتر EMA
- 28التحكم المغلق في ST: من التشغيل والإيقاف بفجوة إلى PID عملي
- 29تشغيل المحركات والصمامات: سماحيات، تشابيك، رجع تشغيل، وزمن حركة
- 30نفس الكود عند كل شركة: SCL و Studio 5000 و CODESYS و TwinCAT
- 31الاختبار وتصحيح الأخطاء: جدول المراقبة والفرض والمحاكاة
- 32دليل أسلوب ST: التسمية والتعليقات والثوابت وإدارة النسخ
- 33المشروع الختامي: محطة خزان كاملة بآلة حالات وإنذار وعدّ دفعات
- 3420 سؤال مقابلة في ST وبرمجة PLC بإجابات قصيرة