go 语言实现OPCUA 客户端代码示例
时间: 2023-07-07 15:28:57 浏览: 1462
西门子opcUA客户端示例(C#).rar_DEMO_angrywho_c# opc ua test_c#西门子opc ua_o
5星 · 资源好评率100%
以下是一个使用go语言实现OPCUA客户端的示例代码:
```go
package main
import (
"fmt"
"time"
"github.com/gopcua/opcua"
"github.com/gopcua/opcua/debug"
"github.com/gopcua/opcua/ua"
)
func main() {
// 创建一个新的OPCUA客户端连接
endpoint := "opc.tcp://localhost:4840"
securityPolicy := ua.SecurityPolicyNone
securityMode := ua.MessageSecurityModeNone
cfg := opcua.NewClientConfig(securityMode, securityPolicy)
c := opcua.NewClient(endpoint, cfg)
// 连接OPCUA服务器
if err := c.Connect(); err != nil {
panic(err)
}
defer c.Close()
// 认证
if err := c.ActivateSession(); err != nil {
panic(err)
}
defer c.CloseSession()
// 浏览节点
root, err := c.Node(ua.NewNumericNodeID(0, ua.ObjectTypeNode))
if err != nil {
panic(err)
}
fmt.Printf("Root node: %v\n", root)
children, err := root.Children()
if err != nil {
panic(err)
}
for _, child := range children {
fmt.Printf("Child node: %v\n", child)
}
// 读取节点值
nodeID := ua.NewNumericNodeID(2, 2)
value, err := c.ReadValue(nodeID)
if err != nil {
panic(err)
}
fmt.Printf("Value of node %v: %v\n", nodeID, value)
// 监听节点值变化
sub, err := c.Subscribe(ua.NewVariableNodeID(2, 3))
if err != nil {
panic(err)
}
defer sub.Cancel()
for {
select {
case <-time.After(5 * time.Second):
fmt.Println("Timeout")
return
case n := <-sub.Notifs:
fmt.Printf("Value changed: %v\n", n.Value)
}
}
}
```
这个示例代码实现了以下操作:
1. 连接到OPCUA服务器
2. 认证
3. 浏览节点
4. 读取节点值
5. 监听节点值变化
你可以根据自己的需要进行修改和扩展。
阅读全文