إدارة المتغيرات

نظرة عامة

لوحة المتغيرات هي العرض المركزي على FAddressPool — المصدر الوحيد للحقيقة لكل متغير في مشروع ForgeIEC. كل متغير يوجد بالضبط مرة واحدة في المجمّع، مفتاحه عنوان IEC (%IX0.0، %QW3، …). الحاويات مثل GVL، AnvilVarList، HmiVarList أو واجهات POU هي فقط عروض على هذا المجمّع — لا يوجد متغير في مخزنين متوازيين.

FAddressPool  (single source of truth)
   |
   +-- FAddressPoolModel  (Qt table)
         |
         +-- FVariablesPanel  (filters + bulk ops + clipboard)
               |
               +-- Tree filter sets FilterMode + tag

ترتسي اللوحة في أسفل النافذة الرئيسية وتعكس فوراً كل تغيير في كل عرض آخر (محرر POU، مترجم ST، حفظ PLCopen-XML).

الأعمدة

يحوي الجدول 15 عموداً؛ يمكن تبديل كل منها فردياً عبر قائمة سياق الترويسة — كل نسخة محرر POU تخزن رؤية الأعمدة بشكل مستقل.

العمودالمحتوى
الاسمالاسم المرئي للمبرمج. تظهر مدخلات المجمّع المؤهلة بمسارها الكامل: Anvil.Pfirsich.T_1، Bellows.Stachelbeere.T_Off، GVL.Motor.K1_Mains.
النوعنوع IEC الأولي أو نوع معرّف من المستخدم. تظهر المصفوفات كـ ARRAY [0..7] OF BOOL.
الاتجاهفئة متغير IEC: VAR / VAR_INPUT / VAR_OUTPUT / VAR_IN_OUT / VAR_TEMP لمحليات POU؛ in/out للمتغيرات العامة في المجمّع (مشتقة من %I مقابل %Q).
العنوانعنوان IEC — المفتاح الأساسي. %IX0.0 لإدخال بت، %QW1 لإخراج كلمة، %MX10.3 لبت علامة.
القيمة الأوليةالقيمة الأولية (FALSE، 0، T#100ms، 'OFF'). تُحمَّل في المتغير في الدورة الأولى.
جهاز الناقلUUID لجهاز الناقل (عبد Modbus، إلخ) المرتبط به هذا المتغير — قابل للتحرير كقائمة منسدلة.
عنوان الناقلإزاحة سجل Modbus نسبية للعبد (0، 1، …).
R (Retain)مربع اختيار — هل تصمد القيمة أمام دورة طاقة؟
C (Constant)مربع اختيار — ثابت IEC (VAR CONSTANT)، القيمة غير قابلة للكتابة في وقت التشغيل.
RO (ReadOnly)مربع اختيار — للقراءة فقط من كود البرنامج.
Syncفئة مزامنة المهام المتعددة (L/A/D)، يُنتجها آخر تشغيل لمترجم ST.
مستخدم بواسطةأي المهام تقرأ/تكتب هذا المتغير، مثلاً PROG_Fast (R/W), PROG_Slow (R).
Monitor / HMI / Forceمفاتيح أمان لكل متغير. العنقود A في قائمة المهام — اشتراكات صريحة، مميزة عن علامة hmiGroup. يتحقق مترجم ST قبل توليد الكود من أن الوصول Force/HMI يستهدف فقط متغيرات تحمل العلامة.
Liveقيمة وقت التشغيل في الوضع المتصل (تغذيها مخزن قيم anvild الحية؛ مخفي عند فصل الاتصال).
Scopeمربع اختيار رؤية الأوسيلوسكوب — يرسل المتغير إلى لوحة الراسم.
التوثيقتعليق نص حر.

أوضاع المرشّح

لا تُظهر اللوحة المجمّع بكامله دفعة واحدة — شجرة المشروع على اليسار تختار أي شريحة مرئية. النقر على عقدة شجرة يجعل النافذة الرئيسية تضبط FilterMode بالإضافة إلى علامة:

FilterModeيعرض
FilterAllالمجمّع بأكمله — لا تقييد بعلامة.
FilterByGvlالمتغيرات بـ gvlNamespace == tag (مثل GVL.Motor فقط).
FilterByAnvilالمتغيرات بـ anvilGroup == tag (مجموعة Anvil IPC واحدة).
FilterByHmiالمتغيرات بـ hmiGroup == tag (مجموعة Bellows HMI واحدة).
FilterByBusالمتغيرات بـ busBinding.deviceId == tag (كل متغيرات جهاز ناقل واحد).
FilterByModuleمثل FilterByBus، إضافة moduleSlot — صيغة العلامة hostname:slot.
FilterByPouمحليات POU — المتغيرات بـ pouInterface == tag.
FilterCommentsOnlyالفواصل التعليقية فقط، لا متغيرات.

محاور المرشّح (قابلة للتركيب)

فوق الجدول تجلس أربعة محاور إضافية تعمل جميعها بالتوازي فوق مرشح الشجرة:

  • بحث نص حر على الاسم والعنوان والعلامات — to يجد T_Off.
  • مرشح نوع IEC كقائمة منسدلة (all / BOOL / INT / REAL / …).
  • مرشح نطاق العنوان: all / %I (المدخلات) / %Q (المخرجات) / %M (العلامات)؛ ضمن %M بحجم الكلمة (%MX / %MW / %MD / %ML).
  • تبديل TaggedOnly — يخفي كل مدخل مجمّع بدون أي علامة حاوية (مفيد للعثور على مجمّع “يتيم”).

كل مرشح مدمج بـ AND: أي شيء لا يطابق كل المحاور النشطة يُخفى.

التحديد المتعدد + العمليات الجماعية

كما في أي جدول Qt: Shift-click و Ctrl-click يحددان نطاقات أو صفوفاً فردية. قائمة سياق التحديد تقدم:

  • تعيين مجموعة Anvil… — يضبط anvilGroup على كل متغير محدد.
  • تعيين مجموعة HMI… — نفسه لـ hmiGroup.
  • تعيين مجال GVL… — نفسه لـ gvlNamespace.
  • مسح العلامة — يجرّد علامة وضع المرشح النشط.
  • تبديل Monitor / HMI / Force — تبديل جماعي لمفاتيح الأمان.

كل تحرير جماعي يمر عبر FAddressPoolModel::applyToRows، ينتج إشارة dataChanged واحدة، وقابل للتراجع كخطوة تراجع واحدة.

الحافظة (نسخ / قص / لصق)

يمكن نسخ المتغيرات المحددة — مع كل العلامات والأعلام — ولصقها في عرض آخر. تستخدم الحمولة تنسيقين:

  • MIME مخصص (application/x-forgeiec-vars+json) كآلية ذهاب وإياب تحمل معلومات المجمّع الكاملة.
  • TSV نص عادي كبديل لـ Excel / محررات النص.

عند اللصق تعيد اللوحة تلقائياً توجيه علامات الحاوية إلى وضع المرشح النشط: نسخ من FilterByAnvil (المجموعة Pfirsich) ولصق في FilterByHmi (المجموعة Stachelbeere) فيُسقط المتغيرات anvilGroup ويلتقط hmiGroup = Stachelbeere. يُعالَج تكرار العناوين والأسماء المتضاربة (T_1T_1_1).

السحب والإفلات في HmiVarList

يمكن سحب المتغيرات من اللوحة الرئيسية إلى POU من نوع HmiVarList. عندئذ يضبط المحرر تلقائياً علم تصدير HMI للمتغير ويكتب مجموعة HMI كعلامة — تصدير Bellows مسلّح الآن.

مفاتيح الأمان لكل متغير

ثلاثة مفاتيح لكل متغير، كل منها يتطلب اشتراكاً صريحاً:

  • HMI — يسمح لـ Bellows بقراءة/كتابة المتغير.
  • Monitor — يسمح بالمراقبة الحية في الوضع المتصل.
  • Force — يسمح بفرض قيمة وقت تشغيل.

هذه الأعلام منفصلة عن علامة hmiGroup. العلامة تصف عضوية المجموعة؛ العلم يفعّل التأثير. قبل كل توليد كود يتحقق مترجم ST من أن كل وصول Bellows أو Force يستهدف متغيراً علمه مضبوط — وإلا يرفع خطأ ترجمة.

مواضيع ذات صلة