Milo opc 往kepware服务器写数据,返回结果成功,但是kepware不显示

最近一个项目涉及到OPC通信。项目需要建立的节点有200个,都是String类型。需要客户端监听和写的分别是100个。项目客户端采用milo, 服务采用kepware。系统采用订阅方式来获取opc数据。实际测试过程中,获取数据都是ok的,没有出现数据丢失的情况。但是写数据时,概率出现客户端写操作结果显示“StatusCode{name=Good, value=0x00000000, quality=good}” ,kepware 服务器上显示不出来写入的数据 。
实际采用的客户端代码如下:
try {
mWriteClient.connect().get();
} catch (Exception e) {
e.printStackTrace();
logger.error(“OPCUAClient connect Exception”, e);
return ;
}
logger.info(“Wrote identifier: " + identifier);
List nodeIds = ImmutableList.of(new NodeId(namespaceIndex, identifier));//Int32"t|bbb”

             Variant v = new Variant(value);

            // don't write status or timestamps
            DataValue dv = new DataValue(v, null, null);
            logger.info("OPCUAClient begin write");
            // write asynchronously....
            CompletableFuture> f =
                    mWriteClient.writeValues(nodeIds, ImmutableList.of(dv));

            // ...but block for the results so we write in order
            List statusCodes = null;
  
             statusCodes = f.get();
            StatusCode status = statusCodes.get(0);
            logger.info("Wrote status: " + status.toString());
            if (status.isGood()) {
                logger.info("Wrote '{}' to nodeId={}", v, nodeIds.get(0));
            }

}

 目前采用过的处理方式如下:
  1. 采用读写公用一个客户端。
  2. 建立单独的客户端来进行操作。系统共用一客户端来进行写操作。
  3. 每次写操作都单独建立一个客户端。这次写操作完成以后在断开服务器。
 实际测试过程中,这个三种方式出现上述问题的概率依次降低,但还是会出现。

你可能感兴趣的:(opc,java)