2013-12-11 71 views
0

我试图使用OPC基金会的OPC UA java堆栈连接到远程环境。阅读价值正在正确的,对于我使用下面的代码:用OPC UA Java编写一个值(OPC基金会)

NodeId nodeId= NodeId.get(IdType.String, 2, "TYPES!M!MULTIPLYER!MU_79.MULTIPLYER_BIAS"); 
ReadResponse res = mySessionChannel.Read(null, 500.0, TimestampsToReturn.Source, new ReadValueId(nodeId, Attributes.Value, null, null)); 

现在我试图用写命令来设置这个(输入)变量,如下所示:

NodeId nodeId = NodeId.get(IdType.String, 2, "TYPES!M!MULTIPLYER!MU_79.MULTIPLYER_BIAS"); 
DataValue dataValue = new DataValue(new Variant(999)); 
WriteValue writeValue[] = new WriteValue[1]; 
writeValue[0] = new WriteValue(nodeId, Attributes.Value, "0", dataValue); 

RequestHeader requestHeader = new RequestHeader(nodeId, null, null, null, null, null, null); 
WriteRequest writeRequest = new WriteRequest(requestHeader, writeValue); 
WriteResponse response = mySessionChannel.Write(writeRequest); 

写命令运行没有错误,但值永远不会改变。 有人可以帮我吗?

回答

0

您正在将“0”定义为IndexRange(WriteValue的第3个参数)。我相信,你有一个标量变量,所以你应该使用null来代替。

此外,你需要检查响应,看看它是否成功。 E:写入参数必须与变量节点的数据类型相匹配。

+0

我改变了它为空,则该值心不是改变和响应是:WriteResponse(ID = 1474131049) ResponseHeader = ResponseHeader(ID = 676105376) ServiceDiagnostics = DiagnosticInfo(ID = 967078155) localizedText = NULL 语言环境=空 innerDiagnosticInfo = NULL symbolicId = NULL innerStatusCode = NULL additionalInfo = NULL STRINGTABLE = NULL 字符串数组=类java.lang.String [0] 的namespaceURI = NULL STRINGTABLE =类java.lang.String [0] – user3083205

+0

RequestHandle = UnsignedInteger(id = 1526310589) 值= 1个 时间戳=日期时间(ID = 1925333515) 值= 130393207472672000 AdditionalHeader = NULL ServiceResult =的StatusCode(ID = 2163771) 值= 0 DiagnosticInfos =类org.opcfoundation.ua.builtintypes.DiagnosticInfo [0] 结果= class org.opcfoundation.ua.builtintypes.StatusCode [1] [0] = StatusCode(id = 2006760845) value = -2139881472 – user3083205

+0

最好将StatusCodes打印为字符串:它会告诉你实际的代码,例如response.getResults()[0] –