إدارة المتغيرات
نظرة عامة
لوحة المتغيرات هي العرض المركزي على 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_1 → T_1_1).
السحب والإفلات في HmiVarList
يمكن سحب المتغيرات من اللوحة الرئيسية إلى POU من نوع HmiVarList. عندئذ يضبط المحرر تلقائياً علم تصدير HMI للمتغير ويكتب مجموعة HMI كعلامة — تصدير Bellows مسلّح الآن.
مفاتيح الأمان لكل متغير
ثلاثة مفاتيح لكل متغير، كل منها يتطلب اشتراكاً صريحاً:
- HMI — يسمح لـ Bellows بقراءة/كتابة المتغير.
- Monitor — يسمح بالمراقبة الحية في الوضع المتصل.
- Force — يسمح بفرض قيمة وقت تشغيل.
هذه الأعلام منفصلة عن علامة hmiGroup. العلامة تصف
عضوية المجموعة؛ العلم يفعّل التأثير. قبل كل توليد كود يتحقق
مترجم ST من أن كل وصول Bellows أو Force يستهدف متغيراً
علمه مضبوط — وإلا يرفع خطأ ترجمة.
مواضيع ذات صلة
- إضافة متغير —
FAddVariableDialogبأنماط النطاق وغلاف المصفوفة. - تنسيق ملف المشروع — كيف يُحفظ المجمّع
ككتلة
<addData>في PLCopen XML. - المكتبة — كيف ترى كتل الوظائف نسخها في المجمّع.