You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gopcua/opcua创建含ExtensionObject的OPC UA Variant传递结构体参数

解决方案

要将AnonymousIdentityToken结构体传入Variant,需要把结构体包装为ExtensionObject(OPC UA中用于传输复杂类型的标准容器),再将ExtensionObject转换为Variant。以下是修正后的代码:

token := ua.AnonymousIdentityToken{PolicyId: "anonymous"}
// 将结构体编码为ExtensionObject
extObj, err := ua.NewExtensionObject(&token)
if err != nil {
    // 生产环境请替换为合理的错误处理逻辑
    panic(err)
}
// 将ExtensionObject转换为Variant
myVariant := ua.MustVariant(extObj)

req := &ua.CallMethodRequest{
    ObjectID:       ua.NewStringNodeID(2, "main"),
    MethodID:       ua.NewStringNodeID(2, "even"),
    InputArguments: []*ua.Variant{
        myVariant,
        // ... 其他输入参数
    },
}

关键说明

  • OPC UA中所有自定义或复杂结构体类型,都需要通过ExtensionObject完成序列化传输,它包含了类型标识和序列化后的结构体数据,确保服务端能正确识别解析。
  • ua.NewExtensionObject会自动适配OPC UA类型系统完成编码,若无需显式处理错误,也可以用ua.MustExtensionObject(&token)简化调用,但生产环境建议保留错误判断。

内容的提问来源于stack exchange,提问作者macnixde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:57:36