golang OpcUaClient

实现功能

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

测试输出:

 

posted @ 2025-01-08 10:16  CHHC  阅读(72)  评论(0)    收藏  举报