OPC客户端与服务器概率通信异常

weixin_39940645 2019-03-24 05:37:00
最近一个项目涉及到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<NodeId> 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<List<StatusCode>> f =
mWriteClient.writeValues(nodeIds, ImmutableList.of(dv));

// ...but block for the results so we write in order
List<StatusCode> 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. 每次写操作都单独建立一个客户端。这次写操作完成以后在断开服务器。
实际测试过程中,这个三种方式出现上述问题的概率依次降低,但还是会出现。

请各位大神能够帮忙分析一下这个问题,不胜感激。

...全文
184 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧