首页 > 其他分享 >golang OpcUaClient

golang OpcUaClient

时间:2025-01-08 10:23:19浏览次数:9  
标签:quit syscall golang OpcUaClient main os

实现功能

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)
        })
    }
}

测试输出:

 

标签:quit,syscall,golang,OpcUaClient,main,os
From: https://www.cnblogs.com/chen1880/p/18659142

相关文章

  • 【记录一个问题】macos arm64 中,使用 golang 的 atomic.LoadUint32() 得到的值是 0
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯在macosarm64下调试一个无锁算法的时候,总在莫名其妙的地方崩溃,后来发现是atomic.LoadUint32()的地方读到的值是0.1使用curItemLen:=atomic.LoadUint32(ne......
  • Golang基础-值类型、引用类型区别
    在Go语言中,引用类型和值类型是两种不同的数据类型,它们在内存中的存储和传递方式有很大的区别。理解这两者的定义和适用场景对有效地编写Go代码至关重要。1.值类型(ValueTypes)定义值类型是指变量直接保存数据的副本。当你将一个值类型的变量赋值给另一个变量时,实际上是......
  • Golang基础-mutex的正常模式和饥饿模式1
    正常模式(非公平锁)正常模式下,所有等待锁的goroutine按照FIFO(先进先出)顺序等待。唤醒的goroutine不会直接拥有锁,而是会和新请求goroutine竞争锁。新请求的goroutine更容易抢占:因为它正在CPU上执行,所以刚刚唤醒goroutine有很大可能在锁竞争中失败。在这种情况下,这个被唤醒的gorou......
  • 01背包问题 Golang实现
    背包问题的分类:01背包描述:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。思路分析:问题核心:从给定的......
  • 96. 不同的二叉搜索树 && 343. 整数拆分 Golang实现
    这两个题目的分析思路是十分类似的。都是进行一个拆分。1.不同的二叉搜索树题目描述:给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例1:输入:n=3输出:5思路分析:动态规划分析:确定状态:令dp[i]......
  • xing-zr/gowatermark golang 实现图片文字水印
    xing-zr/gowatermark是一个基于go语言开发的水印工具,可以添加图片和文字水印。安装goget-ugithub.com/xing-zr/gowatermark使用添加图片水印//相关配置config:=gowatermark.ImageWatermarkConfig{ OriginImagePath:"./origin.jpg",//水印底图图片路......
  • 字节二面:你怎么理解信道是golang中的顶级公民
    1.信道是golang中的顶级公民goroutine结合信道channel是golang中实现并发编程的标配。信道给出了一种不同于传统共享内存并发通信的新思路,以一种通道复制的思想解耦了并发编程的各个参与方。信道分为两种:无缓冲和有缓冲信道(先入先出)。分别用于goroutine同步和异步生产消费:......
  • GoLang 2024 安装激活详细使用教程(激活至2026,实测是永久,亲测!)
    开发工具推荐:GoLang安装激活详细使用教程(激活至2026,实际上永久,亲测!)申明:本教程GoLang补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!GoLang是JetBrains公司推出的一款功能强大的GO语言集成开发环境(IDE),凭借其丰富的......
  • golang自带的死锁检测并非银弹
    网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰。这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句话的含金量。这个说法的杀伤力在于它虽然不对,但也不是全错,真真假假很容易让人失去......
  • 可能是GitHub star星最多的Golang Web框架-Gin初识
    对比目前主流GolangWeb框架对比名称描述star数量GinGin是用Go(Golang)编写的HTTPWeb框架。它具有类似Martini的API,性能要好得多-速度提高了40倍。79.6kFiber用Go编写的受Express启发的Web框架34.4kBeegobeego是一个用于Go编程语言的......