lovejobs

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  138 随笔 :: 3 文章 :: 46 评论 :: 28万 阅读

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

posted on   lovejobs  阅读(3269)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示