我尝试同时写入String和LocalizedText(服务器中使用的两种主要数据类型),但没有收到错误,但是在调用后一秒钟再次读取节点时,一切都没有改变(并且我没有在使用OPC检查器时也看不到新值) 我的writeOpcValue函数非常简单,并且基于milo随附的函数:
/*Writes a String to the nodeId given as parameter*/
public void writeOpcValue(OpcUaClient client, NodeId nodeId, String value, boolean logValue)
{
//client.writeValue(nodeId, DataValue.valueOnly(new Variant(value)));
VariableNode node = client.getAddressSpace().createVariableNode(nodeId);
node.writeValue(DataValue.valueOnly(new Variant(value)));
if (logValue)
logger.info("Wrote {} to nodeId {}", value, nodeId);
}
第一行被注释掉了,因为我尝试了两种方式,但是没有任何变化。当我在自己的示例服务器上使用此功能时,它可以很好地工作,但在“真实”服务器上却不能。我是在做错什么,还是应该在服务器端做些什么?应当指出,我无法访问服务器的代码或名称空间,实际上它甚至不是用Java编写的,到目前为止,这还没有引起任何问题。 也许那些节点是只读的?在那种情况下,我希望在某处会看到异常或错误。
在此先感谢您的帮助
答案 0 :(得分:1)
您至少应该检查一下writeValue
调用返回的StatusCode是否告诉您有用的信息,而不是忽略它。