Qt Modbus با اتصال TCP / IP

در این وبلاگ، من می خواهم یک برنامه کوچک Qt Quick (qml) را به عنوان نمونه ای از اتصال Modbus از روی TCP / IP ارائه دهم.
در نمونه های Qt، من فقط نمونه های QWidget را برای اتصالات Modbus پیدا کرده ام و پس از ایجاد یک برنامه Qt Quick برای این، می خواهم یک نسخه باریک از ان را به عنوان مثال ارائه دهم.

آزمایشگاه

به منظور قادر به ازمایش برنامه، شما نیاز به یک سرور Modbus یا یک برنامه است که "شبیه سازی" چنین سرور. من از "Modbus Server Pro" از http://www.apphugs.com/modbus-server.html برای این کار استفاده کردم. این به شما اجازه می دهد تا از طریق تمام سناریوهایی که نیاز دارید اجرا کنید.

برنامه Qt

اول از همه: از انجا که ان را بیش از حد دور برای ارسال تمام کد در اینجا، من کل کد به عنوان یک فایل زیپ ارائه (پایین را ببینید).

تنظیمات

اول، من یک کلاس 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 = حداکثر زمان در ms که در ان یک پاسخ از سرور منتظر است
    numberOfRetries = تعداد تلاشهای ناموفقی که پذیرفته خواهند شد.

کاربرد

onConnectButtonClicked()

تابع onConnectButtonClicked() داده های اتصال را از فایل تنظیمات می خواند و اتصال به سرور Modbus را برقرار می کند.

onReadButtonClicked()

با onReadButtonClicked() readRequests مختلف اغاز می شوند و ثبات های مربوطه از سرور Modbus خوانده می شوند. مقادیر برگشتی به qml منتقل می شوند، زیرا Q_PROPERTY از طریق سیگنال های منتشر شده و در رابط کاربری به روز می شوند.

نوشتن تابع

تابع onWriteButtonClicked (int writeregister) برای نوشتن به رجیسترهای سرور Modbus استفاده می شود. در اینجا پیش بینی شده است که ثبات های مختلف را می توان بر روی سرور Modbus از طریق متغیر "writeregister" نوشت.

شما می توانید برنامه را در اینجا دانلود کنید ix-modbus-tcp-example.zip.