使用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
相关产品推荐
相关产品推荐

