بالعودة إلى
المقالة الأولى ، أود أن أوضح أين نشأت الحاجة لتطوير آلية ملحق بواجهة رسومية (GUI) وأشرح بمزيد من التفصيل آلية إنشاء المكونات الإضافية.
تم استلام مهمة لتطوير البرمجيات التكنولوجية لضبط وتنظيم ومراقبة وجمع وتحليل المعلومات من البنادق ذاتية الدفع (أنظمة التحكم الآلي) للمحرك على نظام التشغيل الروسي. حيث يتم التبادل بين المدافع ذاتية الدفع والبرنامج التكنولوجي عبر واجهة RS-232 أو RS422 ، وفقًا لبروتوكول تبادل خاص.
بعد مراجعة وتحليل قدرات قائمة أنظمة التشغيل الروسية ، تم اختيار نظام التشغيل AstraLinux. هذا نظام خاص الغرض قائم على توزيع دبيان ، مصمم لحماية المعلومات بشكل شامل وبناء أنظمة آلية آمنة. يتم تطوير نظام التشغيل Astra Linux في نسختين: الإصدار العام (مجاني ، للأغراض العامة) والإصدار الخاص (المدفوع ، غرض خاص مع مجموعة من خوارزميات الحماية).
عند تطوير البرامج ، تم استخدام مكتبة Qt.
يتكون البرنامج من وحدات وظيفية ، تتيح لك كل منها أداء أعمال محددة على إعدادات المحرك.
الوحدة الوظيفية عبارة عن عنصر واجهة مستخدم يتكون من مكونات مرئية ورسومات وجداول مختلفة ، حيث يتم عرض معلمات المحرك في شكل سهل الاستخدام.
الوحدة الوظيفية "لوحة القيادة"
الوحدة الوظيفية التي تتيح لك التحكم في قيم المعلمات ديناميكيًا ضمن الحدود المقبولة
وحدة وظيفة لتحديد خصائص البنادق ذاتية الدفعتم تصميم البرنامج المطور (البرنامج التكنولوجي) فقط لنوع معين من المحركات. بالنسبة إلى نوع جديد من المحركات ، كان من الضروري تطوير برامج جديدة ، مما أدى إلى زيادة كبيرة في تكاليف العمالة لتطوير واختبار وتصحيح الأخطاء ، ونتيجة لذلك ، هناك تأخير في تنفيذ هذا البرنامج - على الرغم من أن مثل هذا البرنامج كان بالفعل مطلوبًا في مرحلة تطوير ACS.
من أجل الابتعاد عن هذه الممارسة الباهظة لتطوير البرمجيات التكنولوجية ، فقد تقرر تطوير حزمة برامج تتكيف مع أي محرك تدعم ACS نفس بروتوكول التبادل.
كان المفهوم في تطوير حزمة البرامج هو إمكانية توسيع الوظائف القائمة على تقنية المكونات الإضافية مع دعم وحدات الرسوم البيانية.
تتكون حزمة البرنامج من ثلاثة أجزاء رئيسية:
- وظيفية الأساسية للمجمع
- محرك نظام التمديد
- مجموعة البرنامج المساعد
تشمل الوظائف الأساسية ضمان تبادل موثوق للبيانات مع ACS وتنفيذ المهام التالية:
- اتصال RS232 باستخدام بروتوكول خاص
- الرصد المستمر لقائمة المعلمات المحرك
- طلب تغيير معلمة المحرك
- قراءة محرك قراءة الطلبات
- عرض المعلمات في شكل جدول
- معالجة الطلبات من الملحقات (إنشاء قائمة مراقبة جديدة حسب الضرورة ، طلبات كتابة وقراءة واحدة)
نظام التوسع مع الوظائف التالية:
- البحث عن الامتدادات
- الحصول على تمديد الرسومات
- عرض الكائنات التمديد
- مهمة ربط الطلبات (الإشارات) من الكائنات بنواة البرنامج
كل مكون إضافي هو مصنع للكائنات ، وتتمثل الوظيفة الرئيسية للمكون الإضافي في إنشاء كائن رسومي.
تتمثل مهمة نظام الامتداد في الحصول على كائن وربطه بنواة البرنامج (باستخدام واجهات معروفة) ، وتهيئة الكائن وتنشيطه.
يحدث اتصال الكائنات مع kernel باستخدام فئة افتراضية من الواجهات. لتطوير امتداد جديد ، ما عليك سوى معرفة الواجهات التي يدعمها جوهر البرنامج التكنولوجي. ويرد هيكل البرنامج في الشكل التالي.

تطوير التسلسل الهرمي المساعد.

النظر في التسلسل الهرمي للكائن الرسومية التي أنشأتها البرنامج المساعد. منذ العمل مع المكونات الإضافية يجب أن تعمل على كائنات Qt ، فإن الفئة الرئيسية ، مثل مكتبة Qt ، ستكون فئة QObject ، التي تدعم آلية فتحة إشارة Qt.
الفئة التالية هي QWidget - من الضروري إنشاء نماذج رسومية خاصة بك.
بعد ذلك ، تحتاج إلى فئة الواجهات الخاصة بك ، interfaceWidget. للقيام بذلك ، يتم إنشاء فئة مجردة ، والتي سيتم توريثها من QWidget. في هذه الفئة ، يتم الإعلان عن واجهات (إشارات ، وظائف ، فتحات) ستربط المشروع الرئيسي وكائن المكونات الإضافية. توفر فئة الملخص دعمًا للواجهة في المشروع الرئيسي.
فئة MyFormQt ، التي ترث من فئة واجهة interfaceWidget وتعرف الواجهات والتي يتم فيها تطوير الرسومات والوظائف الداخلية للوحدة النمطية. بفضل نظام الميراث هذا ، تدعم فئة MyFormQt وظائف فئة QWidget وواجهات الاتصال المتقدمة مع كائن التطبيق الرئيسي.
class interfaceWidget: public QWidget { public:
مثل هذا التسلسل الهرمي يسمح بالالتفاف على مشكلة الميراث على شكل الماس ، مع الحفاظ على آلية فتحة الإشارة للكائن الذي تم إنشاؤه ، وهي نقطة مهمة في التكنولوجيا المقترحة لتطوير البرمجيات التكنولوجية.
عملية التهيئة وتبادل البيانات: يعتمد المشروع بالكامل على منطقة MDI ، وبالتالي ، سيتم تحميل جميع المكونات الإضافية كنافذة MDI منفصلة.
يقوم المكون الإضافي الخاص بالمصنع بإنشاء كائن من الفئة MyFormQt ، ويقوم بتحويل المؤشر إلى الكائن الذي تم إنشاؤه إلى مؤشر إلى QObject ويمرره إلى البرنامج التكنولوجي ، حيث يتم تحويل الكائن باستخدام عملية dynamic_cast إلى كائن من فئة interfaceWidget ، ونتيجة لذلك نحصل على الوصول الكامل إلى النموذج الرسومي والواجهات لهذا الكائن. .
وظيفة المصنع (إنشاء كائن وظيفة رسومية في البرنامج المساعد).
وظيفة الحصول على وبدء كائن وظيفي بياني في برنامج تقني (أساسي).
يتم وضع كائن من فئة interfaceWidget (كائن وظيفة الرسم) في نافذة QmdiSubWindow التي تم إنشاؤها ، وبالتالي تعيينها كطفل.
بعد ذلك ، قم بتوصيل (توصيل) إشارات وفتحات الكائن بإشارات وفتحات لب البرنامج التكنولوجي والمرحلة الأخيرة من نافذة العرض باستخدام طريقة show (). عند إغلاق إطار QmdiSubWindow ، سيتم أيضًا حذف كائن فئة interfaceWidget ، نظرًا لتعيين الخاصية DeleteOnClose مقدمًا للنوافذ الفرعية التي تم وضع الكائن فيها.
يتم تبادل البيانات بين الكائنات الوظيفية الرسومية وبرنامج تقني باستخدام تنظيم البيانات ووضعين:
• وضع واحد (استجابة الطلب) ؛
• وضع المراقبة ، نتلقى باستمرار البيانات مع فترة تحددها آلية تبادل البيانات مع الجهاز المستهدف ؛
التنظيم هو عملية تحويل البيانات إلى تنسيق مناسب للتخزين أو النقل. يتم استخدامه عند الحاجة إلى نقل المعلومات بين أجزاء مختلفة من برنامج أو من برنامج إلى آخر.في وضع واحد ، يقوم المستخدم بالضغط على زر في كائن وظيفة رسومية (عنصر واجهة المستخدم) ينشئ إشارة تحتوي على قائمة من المعلمات ، ينبغي قراءة بياناتها في الجهاز الهدف (ACS) ونقلها إلى كائن وظيفة الرسوم. تقوم آلية تبادل البيانات في البرنامج الرئيسي بمعالجة الإشارة وتبدأ في طلب بيانات RS-232 من المدافع ذاتية الدفع ، ويتم حزم البيانات المستلمة في QbyteArray وإرسالها مع الإشارة إلى كائن رسومي. يحتوي الكائن على قائمة بالمعلمات المطلوبة ، وبالتالي يعرف أنواعها ، ويقوم بفك حزم البيانات الموجودة في QbyteArray ويعرضها في شكل رسوم بيانية وجداول وأدوات رسوم بيانية متخصصة (مؤشرات الأسهم ، المؤشرات الرقمية ، أزرار الإضاءة الخلفية ، إلخ).
في وضع المراقبة ، عندما تتم تهيئة المكون الإضافي ، يطلب النظام على الفور قائمة المعلمات اللازمة للمكون الإضافي ، وخلال المراقبة المستمرة لمعلماته ، يقرأ المعلمات الإضافية للمكون الإضافي ويعطيها كحزمة بايت في كل دورة لتبادل البيانات. تعتمد فترة دورة تبادل البيانات على عدد المعلمات المطلوبة.
في الوقت الحالي ، يجري الاختبار ، وفي الوقت نفسه يتم تطوير مجموعات من المكونات الإضافية للقيام بمهام مختلفة.
تم إنشاء قالب مكون إضافي يسرع عملية تطوير مكونات إضافية جديدة. باستخدام قالب المكونات الإضافية لتطوير وحدة وظيفية جديدة ، من الضروري إنشاء نموذج رسومي جديد وتنفيذ خوارزميات معالجة البيانات والتصور.
تم تطوير وحدات برامج التشغيل الفعلية لواجهة RS-232 السلكية و WIFI اللاسلكية والبلوتوث.
حتى الآن ، تعمل حزمة البرامج في وضع 2-channel ، أي أنها يمكن أن تعمل في وقت واحد مع بندقيتين ذاتية الدفع (كان هذا هو متطلبات العميل). ترتبط المكونات الإضافية للوحدات الوظيفية بأي قناة من قِبل المستخدم.
أثناء الاختبار ، تمكنا من تشغيل 12 مكونًا إضافيًا تمت معالجتها بنجاح بواسطة kernel. وحتى 12 الملحقات ليست الحد لهذا النظام. نظرًا لنظام التخزين المؤقت المزدوج Qt ، يتم تقليل الوقت المستغرق في رسم المكونات الإضافية ومنع الخفقان ، لذلك عند زيادة عدد المكونات الإضافية في المستقبل ، فإن العبء الرئيسي لن يستمر إلا في تبادل البيانات عبر واجهة RS-232. على الرغم من أن الممارسة توضح أنه أثناء تصحيح الأخطاء ، والتوليف ، واختبار محرك ACS ، فإن 3-4 مكونات إضافية تعمل في نفس الوقت تكفي.
كنتيجة للعمل ، تلقينا حزمة برمجية للتطوير السريع للبرامج التكنولوجية المخصصة لضبط وتجهيز واختبار البنادق ذاتية الدفع لأنواع مختلفة من المحركات (أنظمة الميكاترونيك).
تم تطوير مجموعتين من المكونات الإضافية لأنواع مختلفة من المحركات.
من خلال توصيل مجموعة من المكونات الإضافية لنوع معين من البنادق ذاتية الدفع بحزمة البرنامج ، نحصل على برنامج متعدد الوظائف لتكوين هذا النوع من البنادق ذاتية الدفع والتكليف بها واختبارها.

في المستقبل ، نخطط لكتابة مقال عن تطوير أدوات الرسوم البيانية الخاصة بنا ، من أجل مهام محددة ومقال منفصل عن تخطيط الكائنات الرسومية.