golang OpcUaClient

news2025/3/3 5:07:47

实现功能

复制代码

package main

import (
    "fmt"
    "log"
    "opcuaclient/util/plugin/client/opcclient"
    "os"
    "os/signal"
    "syscall"
)

func main() {
    OPCUATest()

    // 监听操作系统信号,阻塞直到接收到信号
    quit := make(chan os.Signal, 1)
    signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
    <-quit
}

func OPCUATest() {
    endpoint := "opc.tcp://127.0.0.1:49320" // KepServer
    username := "admin"
    password := "123456"
    nodeID := "ns=2;s=Channel1.Device1.400101"

    // 创建 OPC UA 客户端
    opcClient, err := opcclient.NewOpcUaClient("Anonymous", endpoint, username, password) // Anonymous | Account
    if err != nil {
        log.Fatalf("Error creating client: %v", err)
    }
    defer opcClient.Close()

    // 连接到服务器
    if err := opcClient.Connect(); err != nil {
        fmt.Println("连接失败", err)
    } else {
        fmt.Println("连接成功")

        // 写入值
        nodeValue := uint16(333)
        opcClient.WriteNodeValue(nodeID, nodeValue)

        // 读取值
        status, value := opcClient.ReadNodeValue(nodeID)
        if status {
            fmt.Println("读取单个节点:", nodeID, value)
        }

        // 订阅节点
        opcClient.NodeIDs = append(opcClient.NodeIDs, "ns=2;s=Channel1.Device1.400101")
        opcClient.NodeIDs = append(opcClient.NodeIDs, "ns=2;s=Channel1.Device1.400102")
        opcClient.NodeIDs = append(opcClient.NodeIDs, "ns=2;s=Channel1.Device1.400103")
        opcClient.BatchNodeIdDatasSubscription(opcClient.NodeIDs, func(uaTag string, uaValueStr string) {
            log.Printf("DataChange %v = %v", uaTag, uaValueStr)
        })
    }
}

复制代码

测试输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git commit冲突,需输入提交信息合并提交

git commit时冲突&#xff0c;需输入提交信息合并提交&#xff0c;该如何操作&#xff1f; windows按esc键进入命令模式&#xff0c;输入&#xff1a;wq并按enter保存并退出即可。

Linux/Ubuntu/银河麒麟 arm64 飞腾FT2000 下使用 arm64版本 linuxdeployqt 打包Qt程序

文章目录 一、前言二、环境三、准备1、下载Linuxdeployqt源码2、下载Appimagetool-aarch64.AppImage四、编译linuxdeployqt1.配置环境变量2.编译linuxdeployqt五、安装patchelf六、配置Appimagetool七、打包Qt程序重要提示:测试启动应用八、其他九、最后一、前言 因为项目需要…

操作系统大题整理

专题一 程序代码题&#xff1a;程序设计与分析&#xff0c;主要考的是线程&#xff0c;多线程的并发&#xff1f; 大题第一问&#xff08;1&#xff09;操作系统的结构有哪几种常用的结构&#xff1f; 宏内核&#xff1a;宏内核是将操作系统的主要功能模块都集中在内核的一种结…

SQL编程语言

第一章 1. 数据库是长期储存在计算机内&#xff0c;由专门的数据管理软件(数据库管理系统)&#xff0c;进行统一组织和管理控制的大量数据的集合。 2.数据库的基本特点不包括可以快速检索。 3. 数据管理技术的发展经历了&#xff1a;人工管理阶段、文件系统阶段、数据库系统阶…

【跨域问题】

跨域问题 官方概念&#xff1a; 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域本质来说&#xff0c;是前端请求给到后端时候&#xff0c;请求头里面&#xff0c;有一个 Origin &#xff0c;会带上 协议域名端口号等&#xff1b;后端接受到请求&…

Linux(CentOS7)安装JDK和Maven

文章目录 CentOS软件安装方式JDK安装Maven安装 CentOS软件安装方式 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布&#xff0c;只要解压&#xff0c;修改配置即可。例如tomcatrpm(redhat package manager)安装软件已经按照redhat的包管理规范进行打包&#x…

RabbitMQ 可观测性最佳实践

RabbitMQ 简介 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写&#xff0c;支持多种客户端。它通过使用交换机&#xff08;Exchanges&#xff09;、队列&#xff08;Queues&#xff09;和绑定&#xff08;Bindings&#xff09;来路由消息&#xff…

Github Copilot学习笔记

&#xff08;一&#xff09;Prompt Engineering 利用AI工具生成prompt设计好的prompt结构使用MarkDown语法&#xff0c;按Role, Skills, Constrains, Background, Requirements和Demo这几个维度描述需求。然后收输入提示词&#xff1a;作为 [Role], 拥有 [Skills], 严格遵守 […

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期&#xff08;晶振周期或外加振荡周期&#xff09;。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时器…

高比例压缩:Linux 中的压缩命令与技巧

文章目录 高比例压缩&#xff1a;Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 3. bzip2 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 4. xz 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 5.…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

Sprint Boot教程之五十:Spring Boot JpaRepository 示例

Spring Boot JpaRepository 示例 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是一个基…

ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告

问题背景&#xff1a; ESP32 IDF VScode出现头文件“无法打开 源 文件 ”&#xff0c;并有红色下划线警告&#xff1a; 解决办法&#xff1a; 在工程里面的.vscode文件夹下&#xff0c;检查是否存在c_cpp_properties.json文件&#xff0c;如果没有可以手动创建添加。如图…

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…

关于ssh-server在windows系统中进行部署及通过mobaxterm中ssh隧道技术实现不同网段之间进行网络通讯的问题

问题1.windows系统部署ssh-server 在安装部署过程中参考先行者就可实现部署。我使用的作者百度云安装包。 记录一下操作步骤&#xff1a; 1.在搜索中打开power shell命令行&#xff0c;将文件夹复制到C:\Program Files&#xff0c;切换到OpenSSH-Win64&#xff0c;执行如下安装…

写了个小工具,绿色/C#/Url/Base64/Encode/Decode

写这个小工具的动机是什么呢&#xff1f; 虽然很多在线工具也非常地方便&#xff0c;但经常在抓包的时候需要操作相关的转码工作&#xff0c;但你开着抓包工具访问网页有时候又非常地不方便。这时候就想到如果有一款本地的工具软件&#xff0c;就非常地耐斯。 这种工具也不是…

【优选算法】Binary-Blade:二分查找的算法刃(下)

文章目录 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇接上一篇二分查找&#xff0c;主要通过部分题目熟悉二分查找的进阶使用&#xff0c;重点强调二段性&#xff0c;…

【Ubuntu22.04】VMware虚拟机硬盘扩容

1.首先打开虚拟机设置 2.根据需要对硬盘扩展 这边提示我们还需要进入虚拟机在内部分区 3.安装界面化磁盘管理工具 # 安装 sudo apt install gparted# 启动 sudo gparted调整硬盘大小 调整的时候会提示我们硬盘是只读的&#xff0c;因此还要进行操作 新建终端重新挂载文件系…

无网络时自动切换备用网络环境

目录 背景目标为什么需要做自动网络切换网络切换手段 网络环境实现思路和代码部署脚本开机自动执行附录连接两个网络时的路由问题 背景 目标 学校实验室有两个网络环境&#xff0c;我电脑使用网线连接稳定但低速的网络A&#xff0c;使用WiFi连接高速但不稳定的网络B。因此&am…

设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析

策略模式&#xff08;Strategy Pattern&#xff09;核心思想是将算法的实现从使用该算法的类中分离出来&#xff0c;作为独立的对象&#xff0c;通过接口来定义算法家族&#xff0c;这样就可以很容易地改变或扩展算法。通过这种方式&#xff0c;可以避免在客户端代码中使用大量…