以上方法报错 java.lang.Short cannot be cast to org.eclipse.milo.opcua.stack.core.types.builtin.NodeId
时间: 2023-10-02 13:09:54 浏览: 226
java 项目中遇到的错误
很抱歉,我可能误导了你。在我的前一个答案中,我假设 `DataType` 属性返回的是一个 `NodeId` 对象,但实际上它返回的是一个 `UnsignedShort` 对象,因此你需要将其转换为 `NodeId` 对象才能使用。以下是修改后的代码示例:
```java
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.stack.core.AttributeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
import java.util.concurrent.CompletableFuture;
public class ReadNodeDataType {
public static void main(String[] args) throws Exception {
// 创建 OPC UA 客户端
OpcUaClient client = OpcUaClient.create(endpointUrl);
// 连接到 OPC UA 服务器
client.connect().get();
// 读取节点的 DataType 属性
NodeId nodeId = new NodeId(namespaceIndex, nodeIdString);
CompletableFuture<DataValue> future = client.readValue(
0, TimestampsToReturn.Both, nodeId, AttributeId.DataType);
// 处理读取结果
DataValue dataValue = future.get();
int dataTypeValue = (int) dataValue.getValue().getValue();
NodeId dataTypeNodeId = new NodeId(dataTypeValue);
System.out.println("Node data type: " + dataTypeNodeId.getIdentifier());
// 断开连接
client.disconnect().get();
}
}
```
在上面的代码中,我们将 `UnsignedShort` 对象转换为 `int` 类型,然后使用 `int` 类型的值创建一个 `NodeId` 对象,这样就可以获取到节点的类型了。
阅读全文