في هذه المدونة ، أود تقديم تطبيق Qt Quick صغير (qml) كمثال على اتصال Modbus عبر TCP / IP.
في أمثلة Qt ، وجدت فقط أمثلة QWidget لاتصالات Modbus ، وبعد إنشاء تطبيق Qt Quick مؤخرا لهذا الغرض ، أود تقديم نسخة مخففة منه كمثال.

المختبر

لكي تتمكن من اختبار التطبيق ، تحتاج إلى خادم Modbus أو برنامج "يحاكي" مثل هذا الخادم. لقد استخدمت "Modbus Server Pro" من http://www.apphugs.com/modbus-server.html لهذا الغرض. هذا يسمح لك بتشغيل جميع السيناريوهات التي تحتاجها.

تطبيق كيو تي

بادئ ذي بدء: نظرا لأنه سيكون بعيدا جدا لنشر كل الكود هنا ، سأقدم الكود بالكامل كملف ZIP (انظر أدناه).

الإعدادات

أولا ، قمت بإنشاء فئة SettingsDialog بسيطة تحتوي على خيارات الاتصال. في المثال المبسط ، هذا هو فقط "modbusServerUrl" و "responseTime" و "numberOfRetries".

    struct Settings {
        QString modbusServerUrl = "192.168.2.86:1502";
        int responseTime = 1000;
        int numberOfRetries = 3;
    };

التسميات - على ما أعتقد - لا تحتاج إلى شرح.

  • modbusServerUrl = رقم TCP / IP بالإضافة إلى منفذ خادم Modbus ، على سبيل المثال 192.168.2.86: 502
  • responseTime = الحد الأقصى للوقت بالمللي ثانية الذي يتم فيه انتظار استجابة من الخادم
  • numberOfRetries = عدد المحاولات الفاشلة التي سيتم قبولها.

تطبيق

onConnectButtonClicked()

تقرأ الدالة onConnectButtonClicked() بيانات الاتصال من ملف الإعدادات وتؤسس الاتصال بخادم Modbus.

onReadButtonClicked()

باستخدام onReadButtonClicked() ، يتم بعد ذلك بدء طلبات القراءة المختلفة وقراءة السجلات المقابلة من خادم Modbus. يتم تمرير القيم التي تم إرجاعها إلى qml كما Q_PROPERTY عبر إشارات الانبعاث وتحديثها في واجهة المستخدم.

وظيفة الكتابة

يتم استخدام الدالة onWriteButtonClicked (int writeregister) للكتابة إلى سجلات خادم Modbus. من المتصور هنا أنه يمكن كتابة سجلات مختلفة على خادم Modbus عبر المتغير "writeregister".

يمكنك تنزيل التطبيق هنا ix-modbus-tcp-example.zip.

Walter Prechtl

Walter Prechtl

تم التحديث في: 15. مارس 2024
وقت القراءة: %count دقائق