عمليات المقارنة
منطق القرار والنطاقات
مقارنة القيم هي محرك منطق القرار الصناعي. أتقن المقارنات القياسية، اختبارات النطاق، والتحقق من الصحة.
ما هي عمليات المقارنة في TIA Portal؟
تسمح عمليات المقارنة بمقارنة قيمتين من نفس نوع البيانات (أعداد صحيحة، حقيقية، وقت، إلخ) أو التحقق مما إذا كانت القيمة تقع داخل أو خارج نطاق محدد. وهي أساسية لإنشاء عتبات الإنذار، شروط الانتقال وحلقات التنظيم.
يوفر TIA Portal مقارنات قياسية (==، <>، >=، إلخ)، تعليمات النطاق (IN_Range، OUT_Range)، اختبارات الصحة للأرقام العائمة، وتعليمات متقدمة لأنواع البيانات Variant ومؤشرات DB.
المقارنات القياسية
تقييم التساوي وعدم التساوي بين معاملين
CMP == — يساوي (Equal)
==ماذا يفعل
يقارن بين معاملين (IN1 و IN2). إذا كان IN1 يساوي IN2، فإن التعليم ترجع TRUE. وهو يدعم جميع أنواع البيانات البسيطة تقريباً.
متى تستخدمه
التحقق مما إذا كان العداد قد وصل إلى هدفه، أو إذا كانت القيمة المحددة في واجهة المستخدم (HMI) تطابق القيمة الحالية، أو إذا كانت حالة آلة معينة نشطة.
نصائح الخبراء
احذر مع الأنواع Real: قد تفشل المقارنة الدقيقة بسبب الدقة. يفضل استخدام هامش أو نطاق.
في SCL: IF value1 = value2 THEN ...
يمكنك مقارنة السلاسل النصية (String) للتحقق من أكواد التعريف.
CMP <> — لا يساوي (Not equal)
<>ماذا يفعل
يرجع TRUE إذا كان المعاملان IN1 و IN2 مختلفين. وهو عكس التساوي.
متى تستخدمه
كشف تغير القيمة، التأكد من أن الحساس لا يرجع 0، أو التحقق من أن وضع التشغيل ليس هو الوضع المحظور.
نصائح الخبراء
غالباً ما يستخدم لتشغيل إجراء بمجرد أن تنحرف القيمة عن هدفها.
في SCL: IF value1 <> value2 THEN ...
يمكن استخدامه لمقارنة الطوابع الزمنية (DTL) لمعرفة ما إذا كان التاريخ قد تغير.
CMP >= — أكبر من أو يساوي
>=ماذا يفعل
يرجع TRUE إذا كانت القيمة الأولى (IN1) أكبر من أو تساوي الثانية (IN2).
متى تستخدمه
تشغيل إنذار المستوى العالي، السماح بالتسخين طالما لم يتم الوصول إلى درجة الحرارة المطلوبة.
نصائح الخبراء
مثالي لعتبات السلامة حيث يجب تضمين القيمة الحدية في الشرط.
في SCL: IF level >= setpoint THEN ...
يمكن استخدامه مع أنواع Time للتحقق مما إذا كانت مدة زمنية دنيا قد انقضت.
CMP <= — أصغر من أو يساوي
<=ماذا يفعل
يرجع TRUE إذا كان IN1 أصغر من أو يساوي IN2.
متى تستخدمه
مراقبة المستوى المنخفض، إيقاف مضخة، التحقق من الضغط الأدنى.
نصائح الخبراء
غالباً ما يقترن بفرق استجابة (hysteresis) لتجنب تذبذب المخرج.
يعمل بشكل طبيعي مع أنواع Date و Time.
في SCL: IF pressure <= min_limit THEN ...
CMP > — أكبر من (Greater than)
>ماذا يفعل
يرجع TRUE إذا كان IN1 أكبر قطعاً من IN2.
متى تستخدمه
مقارنة صارمة لا ينبغي أن تتضمن القيمة المستهدفة.
نصائح الخبراء
أقل استخداماً من >= في الأتمتة، ولكنه مفيد للخوارزميات الرياضية.
في SCL: IF current > max THEN ...
يفضل لمقارنة فهارس الحلقات (FOR).
CMP < — أصغر من (Less than)
<ماذا يفعل
يرجع TRUE إذا كان IN1 أصغر قطعاً من IN2.
متى تستخدمه
اختبارات الحدود الدنيا الصارمة.
نصائح الخبراء
مفيد للتحقق مما إذا كانت القيمة 'في السالب' (val < 0).
في SCL: IF val < 0 THEN ...
يعمل مع الحروف (الترتيب الأبجدي).
عمليات النطاق
التحقق من الانتماء إلى فترة [MIN..MAX]
IN_Range — داخل النطاق
IN_Rangeماذا يفعل
يتحقق مما إذا كانت القيمة (VAL) تقع بين حد أدنى (MIN) وحد أقصى (MAX). الفترة مغلقة: MIN <= VAL <= MAX.
متى تستخدمه
مراقبة نافذة التشغيل (مثلاً: الضغط بين 2 و 5 بار)، التحقق من سرعة الآلة.
نصائح الخبراء
يحل محل مقارنين متصلين على التوالي، مما يجعل الشبكة أكثر وضوحاً.
إذا كان MIN > MAX، فإن التعليم ترجع دائماً FALSE.
مفيد جداً لشروط 'Ready to Run' التي تتطلب عدة شروط تناظرية.
OUT_Range — خارج النطاق
OUT_Rangeماذا يفعل
يرجع TRUE إذا كانت القيمة (VAL) خارج الفترة المحددة بـ MIN و MAX. إما VAL < MIN أو VAL > MAX.
متى تستخدمه
كشف الخلل أو تجاوز العتبات القصوى (إنذار النطاق).
نصائح الخبراء
هو العكس تماماً لـ IN_Range.
استخدمه لتبسيط منطق إنذار العمليات.
في SCL: res := (val < min) OR (val > max);
اختبارات الصحة
التحقق من سلامة الأرقام ذات الفاصلة العائمة
|OK| — تحقق من الصحة
|OK|ماذا يفعل
يتحقق مما إذا كانت القيمة العائمة (Real أو LReal) عدداً صالحاً. يرجع FALSE إذا كانت القيمة NaN (ليس عدداً) أو Inf (ما لا نهاية).
متى تستخدمه
بعد الحسابات المعقدة (قسمة، جذور مربعة، لوغاريتم) لتجنب نشر أخطاء رياضية قد تؤدي لتوقف PLC.
نصائح الخبراء
ضروري قبل إرسال قيمة Real إلى مخرج تناظري أو عاكس تردد.
يسمح بكشف القسمة على صفر غير المباشرة.
عملي لتصفية بيانات الحساسات المتعطلة.
|NOT_OK| — تحقق من عدم الصحة
|NOT_OK|ماذا يفعل
يرجع TRUE إذا كانت القيمة العائمة غير صالحة (NaN أو Inf).
متى تستخدمه
تشغيل بت خطأ في الحساب أو فرض قيمة بديلة آمنة.
نصائح الخبراء
استخدمه لوضع آلتك في حالة آمنة إذا فشل حساب المسار.
هو المعادل لـ IS_NAN في لغات أخرى.
في SCL: IF NOT OK(value) THEN ...
المقارنات المتقدمة (Variant)
تعليمات للبرمجة الديناميكية والأنواع المعقدة
EQ_Type / NE_Type
ماذا يفعل
يقارن نوع بيانات متغير من نوع Variant مع نوع متغير آخر أو نوع محدد.
متى تستخدمه
في القوالب العامة التي يجب أن تعالج أنواع بيانات مختلفة (مثلاً: قالب تسجيل يقبل Int أو Real).
نصائح الخبراء
أساسي للبرمجة كائنية التوجه والمكتبات القابلة لإعادة الاستخدام.
يسمح بتأمين الوصول الديناميكي للذاكرة.
يستخدم مع تعليمة VariantGet.
IS_NULL / NOT_NULL
ماذا يفعل
يتحقق مما إذا كان المؤشر (Variant أو DB_ANY) صفرياً (لا يشير إلى شيء).
متى تستخدمه
تجنب أخطاء الوصول عند استخدام DB المعنونة بشكل غير مباشر.
نصائح الخبراء
اختبر دائماً NOT_NULL قبل استدعاء وظيفة أو قراءة بيانات عبر مؤشر.
معادل لكائن 'Nothing' أو 'null' في C#/Java.
ضروري لإدارة القوائم المرتبطة أو الهياكل الديناميكية في PLC.
IS_ARRAY
ماذا يفعل
يتحقق مما إذا كان متغير Variant يشير إلى مصفوفة (Array).
متى تستخدمه
برمجة وظائف معالجة الدفعات أو مخازن البيانات المؤقتة.
نصائح الخبراء
اقرنه مع CountOfElements لمعرفة حجم المصفوفة.
يسمح بإنشاء وظائف ترتيب عالمية.
يعمل أيضاً مع مصفوفات الهياكل (UDT).
مقارنة المقارنات — أيها تستخدم؟
اختيار التعليمة المناسبة لمنطق PLC الخاص بك
| تريد... | استخدم هذا | مثال |
|---|---|---|
| اختبار التساوي التام | CMP == | كود المنتج صحيح |
| عتبة سلامة عالية | CMP >= | الضغط > 10 بار |
| الحفاظ في منطقة محددة | IN_Range | الحرارة بين 18 و 24 درجة |
| مراقبة أخطاء Real | |OK| | التحقق من نتيجة القسمة |
| التحقق من مؤشر DB | NOT_NULL | تم تحميل DB الوصفة |
| التحقق من نوع Variant | EQ_Type | المدخل هو Int بالفعل |
الأسئلة الشائعة
لماذا تفشل مقارنة == أحياناً مع الأرقام Real؟
الأرقام Real (العائمة) لها دقة محدودة. قد تعطي العملية 10.000001 بدلاً من 10.0. استخدم دائماً IN_Range مع تفاوت صغير (مثلاً: بين 9.99 و 10.01) لمقارنة القيم العائمة.
ما الفرق بين IN_Range ومقارنين متصلين على التوالي؟
وظيفياً هما متطابقان. ومع ذلك، IN_Range أكثر إيجازاً رسومياً، وأسهل في القراءة وأكثر كفاءة لأن PLC يعالج التعليم في خطوة واحدة.
ما فائدة التعليمات |OK| و |NOT_OK|؟
تستخدم لكشف الأخطاء 'الصامتة' في حسابات Real. إذا قمت بجذر مربّع لعدد سالب، النتيجة هي NaN. بدون اختبار |OK|، هذا الـ NaN سيلوث جميع حساباتك الأخرى وقد يتسبب في توقف CPU.
هل يمكن مقارنة هياكل كاملة (UDT)؟
التعليمة CMP == لا تسمح بمقارنة هيكلين مباشرة. يجب مقارنة كل عضو على حدة أو استخدام قالب خاص يقارن مناطق الذاكرة.