QT實現OPC_UA客戶端程序以及與OPC_UA服務器通信


1.OPC_UA服務器准備工作

1.關於OPC_UA服務器的搭建可以參考前面一篇文章:https://blog.csdn.net/xipengbozai/article/details/115080901

2.搭建好OPC_UA服務器后就可以可是設置服務器通信變量

(1)打開KEPServerEX 6 Configuration,新建通道,選擇Simulator。

(2)起名字,然后一步一步完成。

(3)給通道添加設備,設備名plc,一步一步直到完成。

 

設備節點通信時候要用

(4)創建標記組

(5)新建標記,取名x1,地址輸入x1,數據類型選擇布爾型,客戶端訪問方式為寫

(6)重復5的操作新建4個標記

2.使用客戶端測試通信

1.使用Quick Client創建兩個客戶端

2.創建的客戶端如下圖,可以看到四個標記分別為x1,x2,y1,y2

3.我們從一個客戶端改變變量的值,然后從另一個客戶端觀察如下圖,可以看到值改變了,所以同通信成功。

3.QT客戶端程序編寫

1.下載open62541的OPC庫,下載地址:https://download.csdn.net/download/xipengbozai/16042848,讀者也可以去GitHub下載,然后自己編譯。

2.過工程的pro文件如下

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = OPCUA_example
TEMPLATE = app
QMAKE_CFLAGS += -std=c99
LIBS += -lpthread libwsock32 libws2_32

SOURCES += main.cpp
widget.cpp

HEADERS += widget.h
open62541.h

unix|win32: LIBS += -L$$PWD/dll/ -lopen62541

INCLUDEPATH += $$PWD/dll
DEPENDPATH += $$PWD/dll


3.工程目錄簡單如下

4.mian代碼

#include "widget.h" #include <QApplication> #include <QDesktopWidget> 

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
// w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
return a.exec();
}


5.連接服務器代碼

    //創建OPC_ua客戶端 client = UA_Client_new(UA_ClientConfig_default); //連接OPC_UA服務器,匿名鏈接 UA_StatusCode retval = UA_Client_connect(client,"opc.tcp://127.0.0.1:49320"); //連接不成功的話 if(retval != UA_STATUSCODE_GOOD) { UA_Client_delete(client); QMessageBox::information(this,"Error","連接失敗,請確認服務器是否開啟!"); } else { QMessageBox::information(this,"TIps","連接成功!"); }

6.從服務器讀數據代碼

        //讀取opc標記數據 retval = UA_Client_readValueAttribute(client, showId[i], &showValue[i]); //根據讀取的數據更新UI if(retval == UA_STATUSCODE_GOOD) { if(*(UA_Boolean *)showValue[i].data) { showbtn[i]->setStyleSheet("QPushButton{background:red}"); } else { showbtn[i]->setStyleSheet("QPushButton{background:gray}"); } }

7.給服務器寫數據代碼

    //如果是0 if(flag[num] == 0) { //設置標記的變量值也為1 UA_Variant_setScalar(&ctrlValue[num],&trueflag,&UA_TYPES[UA_TYPES_BOOLEAN]); } else { //否則設置標記的數據值為0 UA_Variant_setScalar(&ctrlValue[num],&falseflag,&UA_TYPES[UA_TYPES_BOOLEAN]); } //向OPC_UA服務器寫入變量值 int retval = UA_Client_writeValueAttribute(client, ctrlId[num], &ctrlValue[num]); if(retval == UA_STATUSCODE_GOOD) { if(*(UA_Boolean *)ctrlValue[num].data) { ctrlbtn[num]->setStyleSheet("QPushButton{background:red}"); flag[num] = 1; } else { ctrlbtn[num]->setStyleSheet("QPushButton{background:gray}"); flag[num] = 0; } }

8.通信效果,x1為1,1燈的顏色變紅;x2為0所以2燈為灰色;點擊下面按鈕2,y2值變為1.

9.至此QT的客戶端基本說明完畢,客戶端源碼下載地址:https://download.csdn.net/download/xipengbozai/16043753?spm=1001.2014.3001.5501。有疑問的可以加我微信X241602


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM