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

QT实现OPC_UA客户端程序以及与OPC_UA服务器通信的更多相关文章

  1. 〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理

    之所以写出来,是由于经常因为这个问题屡屡丢面子.. 一般情况下,QString转换成(char*),我们一般直接使用: char *str = qstr->text().toLatin1().d ...

  2. 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)

    本系列文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以  SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...

  3. php编写tcp服务器和客户端程序

    这是我从别的地方看到的. 1.修改php.ini,打开extension=php_sockets.dll 2.客户端程序 SocketClient.php <?php set_time_limi ...

  4. qt 单文档程序关闭时在delete ui处出现segmentation fault

    做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...

  5. 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序

    转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775  最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不 ...

  6. 使用 Socket 通信实现 FTP 客户端程序(来自IBM)

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  7. winform客户端程序第一次调用webservice方法很慢的解决方法

    .net2.0的winform客户端最常用的与服务端通信方式是通过webservice,最近在用dottrace对客户端做性能测试的时候发现,客户端程序启动以后,第一次调用某一个webservice的 ...

  8. [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)

    介绍完了服务器,这篇我们就要介绍重点了,写我们自己的IOS客户端程序 先看一下我们完成的效果图 首先下载xmppframework这个框架,下载 点ZIP下载 接下来,用Xcode新建一个工程 将以下 ...

  9. Qt之重启应用程序

    简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...

随机推荐

  1. 「NGK每日快讯」2021.2.3日NGK公链第92期官方快讯!

  2. 2020 NGK 全球启动大会于美国硅谷圆满落幕

    据NCC报道美国西海岸时间11月25日,NGK全球启动大会在美国加利福尼亚北部的硅谷会展中心成功举办.本次大会吸引了来自世界各地的企业家.创业者.开发者,以及投资人达一万人次齐聚硅谷. NGK创始人. ...

  3. Baccarat凭什么吸引做市商?2021年将如何发展?

    在过去的一年里,基于资金池的AMM自动化做市商几乎统治了所有DeFi活动,他们没有订单簿,而是根据算法曲线提供资产.尽管在流动性和交易方面取得了令人惊叹的成绩,但是其自身具有无常损失.多代币敞口以及低 ...

  4. servlet内置对象(传递数据)

    一个servlet向另一个servlet发送数据,可以将数据放置在一个容器中(io.数据库.servlet的内置对象),servlet的内置对象成本最小. 一共有三个内置对象. 名字 类型 reque ...

  5. Ping 的工作原理你懂了,那 ICMP 你懂不懂?

    计算机网络我也连载了很多篇了,大家可以在我的公众号「程序员cxuan」 或者我的 github 系统学习. 计算机网络第一篇,聊一聊网络基础 :计算机网络基础知识总结 计算机网络第二篇,聊一聊 TCP ...

  6. 【HTB系列】靶机Teacher的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.50 靶机地址:10.10.10.153 先用nmap 对 ...

  7. .NET测试--模拟框架NSubstitute

    .NET测试--模拟框架NSubstitute .NET测试 NSubstitute在GitHub的开源地址:https://github.com/nsubstitute/nsubstitute/do ...

  8. 在Windows服务中添加定时器

    创建windows服务: 在VisualStudio中用C#创建一个Windows服务,微软MSDN参考地址: http://msdn.microsoft.com/zh-cn/library/zt39 ...

  9. Python3.x 基础练习题100例(61-70)

    练习61: 题目: 打印出杨辉三角形. 程序: if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in ...

  10. android上实现0.5px线条

    转: android上实现0.5px线条 由于安卓手机无法识别border: 0.5px,因此我们要用0.5px的话必须要借助css3中的-webkit-transform:scale缩放来实现. 原 ...