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

ก่อนอื่น: เนื่องจากมันจะไปไกลเกินไปที่จะโพสต์รหัสทั้งหมดที่นี่ฉันจะให้รหัสทั้งหมดเป็นไฟล์ 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 = เวลาสูงสุดใน ms ที่รอการตอบกลับจากเซิร์ฟเวอร์
  • numberOfRetries = จํานวนความพยายามที่ล้มเหลวที่จะได้รับการยอมรับ

ใบสมัคร

onConnectButton คลิก()

ฟังก์ชัน onConnectButtonClicked() อ่านข้อมูลการเชื่อมต่อจากไฟล์การตั้งค่าและสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ Modbus

onReadButtonClicked()

ด้วย onReadButtonClicked() readRequests ต่างๆจะเริ่มต้นและการลงทะเบียนที่เกี่ยวข้องจะถูกอ่านจากเซิร์ฟเวอร์ Modbus ค่าที่ส่งกลับจะถูกส่งต่อไปยัง qml เป็น Q_PROPERTY ผ่านสัญญาณปล่อยและอัปเดตในส่วนติดต่อผู้ใช้

ฟังก์ชั่นเขียน

ฟังก์ชัน onWriteButtonClicked(int writeregister) ถูกใช้เพื่อเขียนไปยังรีจิสเตอร์เซิร์ฟเวอร์ Modbus ที่นี่มีการคาดการณ์ว่าการลงทะเบียนที่แตกต่างกันสามารถเขียนบนเซิร์ฟเวอร์ Modbus ผ่านตัวแปร "writeregister"

คุณสามารถดาวน์โหลดแอปพลิเคชันได้ที่นี่ ix-modbus-tcp-example.zip