Trong blog này, tôi muốn cung cấp một ứng dụng Qt Quick (qml) nhỏ làm ví dụ về kết nối Modbus qua TCP / IP.
Trong các ví dụ Qt, tôi chỉ tìm thấy các ví dụ QWidget cho các kết nối Modbus và sau khi tạo ứng dụng Qt Quick gần đây cho việc này, tôi muốn cung cấp một phiên bản rút gọn của nó làm ví dụ.
Phòng thí nghiệm
Để có thể kiểm tra ứng dụng, bạn cần một máy chủ Modbus hoặc một chương trình "mô phỏng" một máy chủ như vậy. Tôi đã sử dụng "Modbus Server Pro" từ http://www.apphugs.com/modbus-server.html cho việc này. Điều này cho phép bạn chạy qua tất cả các kịch bản bạn cần.
Ứng dụng Qt
Trước hết: Vì nó sẽ đi quá xa để đăng tất cả các mã ở đây, tôi sẽ cung cấp toàn bộ mã dưới dạng tệp ZIP (xem bên dưới).
Cài đặt
Đầu tiên, tôi tạo một lớp SettingsDialog đơn giản chứa các tùy chọn kết nối. Trong ví dụ đơn giản, đây chỉ là "modbusServerUrl", "responseTime" và "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
Các chỉ định là - tôi nghĩ - tự giải thích.
- modbusServerUrl = số TCP / IP cộng với cổng máy chủ Modbus, ví dụ: 192.168.2.86: 502
- responseTime = thời gian tối đa tính bằng ms trong đó phản hồi từ máy chủ được chờ đợi
- numberOfRetries = số lần thử không thành công sẽ được chấp nhận.
Ứng dụng
onConnectButtonClicked()
Hàm onConnectButtonClicked() đọc dữ liệu kết nối từ tệp cài đặt và thiết lập kết nối với máy chủ Modbus.
onReadButtonClicked()
Với onReadButtonClicked(), nhiều readRequests khác nhau sau đó được khởi tạo và các thanh ghi tương ứng được đọc từ máy chủ Modbus. Các giá trị trả về được chuyển đến qml dưới dạng Q_PROPERTY thông qua tín hiệu phát ra và được cập nhật trong giao diện người dùng.
Chức năng ghi
Hàm onWriteButtonClicked(int writeregister) được sử dụng để ghi vào các thanh ghi máy chủ Modbus. Ở đây, người ta dự tính rằng các thanh ghi khác nhau có thể được viết trên máy chủ Modbus thông qua biến "writeregister".
Bạn có thể tải ứng dụng tại đây ix-modbus-tcp-example.zip.