الرئيسية قاعدة المعرفة الأتمتة والتحكم أنواع البيانات في PLC: من البت إلى الهيكل المعقد
الأتمتة والتحكم

أنواع البيانات في PLC: من البت إلى الهيكل المعقد

الأنواع الأساسية: BOOL و INT و REAL

معيار IEC 61131-3 يُحدد مجموعة من أنواع البيانات الأساسية التي تدعمها جميع أجهزة PLC.

BOOL - القيمة المنطقية

VAR
    bSensorActive  : BOOL := FALSE;  // حسّاس القُرب
    bValveOpen     : BOOL := TRUE;   // حالة الصمام
END_VAR

// العمليات المنطقية
bResult := bSensor1 AND bSensor2;         // و
bResult := bSensor1 OR bSensor2;          // أو
bResult := NOT bEmergencyStop;            // عكس
bResult := bSensor1 XOR bSensor2;        // أو حصري

الأعداد الصحيحة

النوع الحجم المجال الاستخدام
SINT 8 بت -128 إلى 127 قيم صغيرة
INT 16 بت -32768 إلى 32767 عدّادات، مواضع
DINT 32 بت حوالي -2 مليار إلى 2 مليار عدّاد إنتاج يومي
USINT 8 بت 0 إلى 255 عناوين Modbus
UINT 16 بت 0 إلى 65535 قراءة تناظرية خام
UDINT 32 بت 0 إلى حوالي 4 مليار عدّاد تراكمي
VAR
    iMotorSpeed    : INT := 0;       // سرعة المحرك RPM
    diTotalCount   : DINT := 0;      // إجمالي الإنتاج
    uiRawAnalog    : UINT;           // قراءة تناظرية 0-65535
END_VAR

REAL و LREAL - الأعداد العشرية

VAR
    rTemperature   : REAL := 25.0;   // 32 بت، دقة 7 أرقام
    lrPreciseWeight: LREAL := 0.0;   // 64 بت، دقة 15 رقم
END_VAR

// الحسابات
rArea := 3.14159 * rRadius * rRadius;
rFahrenheit := (rCelsius * 9.0 / 5.0) + 32.0;

تحذير: مقارنة REAL

لا تُقارن أعداد REAL بالتساوي المباشر بسبب أخطاء التقريب:

// خاطئ - قد لا يتحقق أبداً
IF rTemperature = 25.0 THEN ...

// صحيح - استخدم نطاق تسامح
IF ABS(rTemperature - 25.0) < 0.1 THEN ...

النصوص والوقت: STRING و TIME و DATE

STRING - النصوص

VAR
    sProductName : STRING(50) := 'زيت محرك 5W-30';
    sAlarmMsg    : STRING(80);
    sBatchID     : STRING(20);
END_VAR

// بناء رسالة إنذار
sAlarmMsg := CONCAT('عطل في المحطة ', INT_TO_STRING(iStationNum));
iLength := LEN(sProductName);  // طول النص

TIME - المدة الزمنية

VAR
    tFillDuration  : TIME := T#3s500ms;   // 3.5 ثانية
    tCycleTime     : TIME := T#2m30s;     // دقيقتان و30 ثانية
    tMixDuration   : TIME := T#1h;        // ساعة واحدة
END_VAR

// الحساب الزمني
tTotalTime := tFillDuration + tCapDuration + tLabelDuration;

DATE و DATE_AND_TIME

VAR
    dMaintenanceDate : DATE := D#2026-06-15;
    dtLastCalibration: DATE_AND_TIME := DT#2026-01-10-08:30:00;
    todShiftStart    : TIME_OF_DAY := TOD#06:00:00;
END_VAR

المصفوفات: تخزين بيانات متعددة

المصفوفات تُخزّن مجموعة قيم من نفس النوع تحت اسم واحد.

مصفوفة أحادية البعد

VAR
    arTempReadings : ARRAY[1..10] OF REAL;    // 10 قراءات حرارة
    arBinFull      : ARRAY[0..7] OF BOOL;     // حالة 8 حاويات
    arRecipeAmounts: ARRAY[1..5] OF REAL;     // كميات الوصفة
END_VAR

// كتابة وقراءة
arTempReadings[1] := 72.5;
arTempReadings[2] := 73.1;
rCurrentTemp := arTempReadings[iSensorIndex];

تدوير قراءات لحساب المتوسط المتحرك

// إزاحة القراءات القديمة
FOR i := 9 TO 1 BY -1 DO
    arTempReadings[i + 1] := arTempReadings[i];
END_FOR;
// إدخال القراءة الجديدة
arTempReadings[1] := rNewReading;

// حساب المتوسط
rSum := 0.0;
FOR i := 1 TO 10 DO
    rSum := rSum + arTempReadings[i];
END_FOR;
rMovingAvg := rSum / 10.0;

مصفوفة ثنائية البعد

VAR
    // جدول وصفات: 5 وصفات × 4 مكونات
    arRecipes : ARRAY[1..5, 1..4] OF REAL;
END_VAR

// الوصفة 3، المكوّن 2 = 15.5 كغ
arRecipes[3, 2] := 15.5;

الهياكل STRUCT: تجميع بيانات المستشعر

الهيكل يجمع متغيرات من أنواع مختلفة تحت اسم واحد.

تعريف هيكل مستشعر

TYPE ST_Sensor :
STRUCT
    rValue       : REAL;       // القيمة الحالية
    rMinLimit    : REAL;       // الحد الأدنى
    rMaxLimit    : REAL;       // الحد الأعلى
    bFault       : BOOL;       // عطل
    bAlarmHigh   : BOOL;       // إنذار مرتفع
    bAlarmLow    : BOOL;       // إنذار منخفض
    sUnit        : STRING(10); // الوحدة
    tLastUpdate  : TIME;       // آخر تحديث
END_STRUCT
END_TYPE

استخدام الهيكل

VAR
    stPressure  : ST_Sensor;
    stTempTank1 : ST_Sensor;
    stTempTank2 : ST_Sensor;
END_VAR

// تهيئة مستشعر الضغط
stPressure.rMinLimit := 0.0;
stPressure.rMaxLimit := 10.0;
stPressure.sUnit := 'بار';

// فحص الحدود
stPressure.bAlarmHigh := stPressure.rValue > stPressure.rMaxLimit;
stPressure.bAlarmLow := stPressure.rValue < stPressure.rMinLimit;
stPressure.bFault := (stPressure.rValue < -1.0) OR (stPressure.rValue > 12.0);

مصفوفة من الهياكل

VAR
    astTankTemps : ARRAY[1..8] OF ST_Sensor;  // 8 خزانات
END_VAR

// فحص جميع الخزانات
FOR i := 1 TO 8 DO
    astTankTemps[i].bAlarmHigh :=
        astTankTemps[i].rValue > astTankTemps[i].rMaxLimit;
END_FOR;

التعدادات ENUM: حالات الآلة

التعداد يُعرّف مجموعة محددة من القيم المسمّاة، مثالي لآلات الحالة.

TYPE E_MachineState :
(
    IDLE := 0,        // خاملة
    STARTING := 10,   // بدء التشغيل
    RUNNING := 20,    // تعمل
    PAUSED := 30,     // متوقفة مؤقتاً
    STOPPING := 40,   // جاري الإيقاف
    FAULTED := 99     // عطل
);
END_TYPE

VAR
    eState : E_MachineState := E_MachineState.IDLE;
END_VAR

CASE eState OF
    E_MachineState.IDLE:
        IF bStartCommand THEN
            eState := E_MachineState.STARTING;
        END_IF;

    E_MachineState.STARTING:
        // تسلسل بدء التشغيل
        bMotor := TRUE;
        IF bMotorRunning THEN
            eState := E_MachineState.RUNNING;
        END_IF;

    E_MachineState.FAULTED:
        bMotor := FALSE;
        IF bResetCommand THEN
            eState := E_MachineState.IDLE;
        END_IF;
END_CASE;

تنظيم الذاكرة: المناطق والعناوين

في أجهزة PLC التقليدية، تُقسّم الذاكرة إلى مناطق:

المنطقة البادئة الوصف مثال
المداخل I إشارات المستشعرات I0.0, IW64
المخارج Q أوامر المُشغّلات Q0.0, QW80
العلامات M متغيرات داخلية M10.0, MW100

طريقة العنونة (Siemens)

I 0 . 3
│ │   │
│ │   └── رقم البت (0-7)
│ └────── رقم البايت
└──────── نوع المنطقة (I=مدخل)
IW 64
│  │
│  └── رقم الكلمة (Word = 16 بت)
└──── منطقة المداخل

في بيئات البرمجة الحديثة (مثل TIA Portal)، يُفضّل استخدام أسماء رمزية بدلاً من العناوين المباشرة لتحسين قابلية القراءة والصيانة.

الخلاصة

أنواع البيانات في IEC 61131-3 تُغطي كل احتياجات الأتمتة الصناعية من القيم المنطقية البسيطة إلى الهياكل المعقدة. استخدام STRUCT لتجميع بيانات المستشعرات و ENUM لآلات الحالة يُنتج كوداً أنظف وأسهل صيانة. في الدرس القادم سنتعمّق في المؤقتات والعدّادات التي تُعدّ أكثر العناصر استخداماً في برامج PLC.

data-types BOOL INT REAL ARRAY STRUCT أنواع البيانات المتغيرات المصفوفات الهياكل تنظيم البيانات الذاكرة