QOPCUA简易操作指南
文章目录
QOPCUA源码编译
Qt中集成了Open62541, version 0.3版本,但是需要手动编译相关代码,才能在Qt项目配置中直接使用。
编译的前提是,需要安装Perl相关,下载地址为 https://www.perl.org/get.html。选择适合自己的版本安装,安装完成后编译相关Qt OPCUA代码。编译过程代码可以参考博客Building Qt OPC UA with open62541](https://blog.basyskom.com/building-qt-opc-ua-with-open62541/),下面摘选出windows下的编译过程:
Compiling on Windows
MinGW32
在 “Qt 5.12.0 for Desktop (MinGW 5.3.0 32 bit)” shell执行以下命令:
git clone https://code.qt.io/qt/qtopcua.git
cd qtopcua
git checkout 5.12
mkdir build
cd build
qmake ..
mingw32-make
mingw32-make install
MSVC 2017
在“Qt 5.12.0 64-bit for Desktop (MSVC 2017)” shell执行以下命令:
"c:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary\Build\vcvarsx86_amd64.bat"
git clone https://code.qt.io/qt/qtopcua.git
cd qtopcua
git checkout 5.12
mkdir build
cd build
qmake ..
nmake
nmake install
注意:根据自己电脑路径和名称不同,这个路径会有相应的的改变;我的电脑“WDExpress”这个路径不同,修改为社区版本。
"c:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary\Build\vcvarsx86_amd64.bat"
如有兴趣可以参考博客编译linux,ios, android环境下的QOPCUA。
编译完成后,会在qt的plugins下面opcua模块,并且在qt的include目录下 多出QtOpcUa,具体参考下图:
在项目中使用OPCUA时,添加QOPCUA模块并把相对应的库和头文件添加进去,就可以实现QOPCUA的使用。
QOPCUA函数的调用
这里主要是使用C++调用QOPCUA,使用C#从网上的代码来看更为方便。这里参考网上的C#和qt的demo。参考博客为:C#读写OPCUA服务器, qt的demo在编译路径下有相关的程序代码.网上公开的的额一个服务器地址为: opc.tcp://118.24.36.220:62547/DataAccessServer .可以用作后续的验证.
生成QOpcUaClient操作
这里没有找到登陆验证,只是进行匿名登陆,在C#的版本有
opcUaClient.UserIdentity = new Opc.Ua.UserIdentity("admin", "123456");
以下是qopcuaClient.h的全部代码:
class QOpcUaClientPrivate;
class QOpcUaClientImpl;
class Q_OPCUA_EXPORT QOpcUaClient : public QObject
{
Q_OBJECT
Q_PROPERTY(ClientState state READ state NOTIFY stateChanged)
Q_PROPERTY(ClientError error READ error NOTIFY errorChanged)
Q_DECLARE_PRIVATE(QOpcUaClient)
public:
enum ClientState {
Disconnected,
Connecting,
Connected,
Closing
};
Q_ENUM(ClientState)
enum ClientError {
NoError,
InvalidUrl,
AccessDenied,
ConnectionError,
UnknownError
};
Q_ENUM(ClientError)
explicit QOpcUaClient(QOpcUaClientImpl *impl, QObject *parent = nullptr);
~QOpcUaClient();
Q_INVOKABLE void connectToEndpoint(const QUrl &url);
Q_INVOKABLE void disconnectFromEndpoint();
QOpcUaNode *node(const QStrin