我正在尝试在 Eclipse Milo OpcUa 服务器上编写一个 ExtensionObject 数组。我在 Java 8 和 Milo 0.2.3 上做所有这些。
我测试我写到我的服务器的方法是统一自动化 UaExpert 客户端和一个小的 Python 客户端。两者都显示相同的结果。
我有以下结构(我在这个场景中将它命名为 MyStructure)。它已经作为一个数组存在,我想将它写入相应的节点。
@Getter
@Setter
@AllArgsConstructor
public class MyStructure implements UaStructure {
private String name;
private Integer dataType;
private String stringValue;
private Integer intValue;
private Float floatValue;
public static final String Description = "MyStructure ";
public static NodeId getNodeId() {
return new NodeId(2, 3081);
}
@Override
public NodeId getTypeId() {
return getNodeId();
}
@Override
public NodeId getBinaryEncodingId() {
return getNodeId();
}
@Override
public NodeId getXmlEncodingId() {
return getNodeId();
}
public static class Codec extends GenericDataTypeCodec<MyStructure > {
@Override
public Class<MyStructure > getType() {
return MyStructure .class;
}
@Override
public MyStructure decode(SerializationContext context, UaDecoder reader) {
return new MyStructure (
reader.readString("Name"),
reader.readInt32("DataType"),
reader.readString("StringValue"),
reader.readInt32("IntValue"),
reader.readFloat("FloatValue")
);
}
每当我设置节点时,服务器都不会抱怨。它实际上设置了一些东西,准确地说它设置了 42 个扩展对象。在 UaExpert 中,我看到值(包括其时间戳)发生了变化,但我看不到实际值。该值只是 ExtensionObject 的 Array 类型,我无法读取任何嵌套值。但这是我在其他项目中看到的。它们具有自定义结构,并且嵌套字段在 UaExpert 中是人类可读的。
如果我在没有 Array 的情况下执行此操作并只编写一个 MyStructure,问题不会改变。
你有什么想法,我做错了什么或根本没有做什么?
拉莫斯之舞
相关分类