背景:小编是个ifix盲,在拿到需求之前是一脸懵逼,在恶补了两周ifix基础知识后对ifix有一定的了解。其实我们写java的只是取ifix的数据,对于ifix的一些配置可以不用去管,但为了自己做测试不得不自己搭建ifix。还有就是客户使用的ifix是MBE,不是像kepware或者IGS那种直接就能作为opc服务器的应用,相较于使用kepware或IGS作为opc服务器稍微麻烦了点,其实就是换了一个opc服务器而已。
推荐看看这些博客
云逸大佬的其他博客也可以看看:
使用kepware作为opc服务器的文章:
步骤跟上面博客一样,先配置DCOM和OPC,使用MBE先将模拟器的数据读上来。然后就是使用java读ifix opc。
跟使用kepware/IGS作为服务器不一样的是,ifix opc应该读取的是iFIX OPC Client Data Access Server,所以在配置DCOM时要配置iFIX OPC Client Data Access Server的DCOM。然后就是拿到iFIX OPC Client Data Access Server的应用程序ID,也就是下图所示。
然后就是代码,配置itemid这块,我是这么配的:
public static void syncOpcRead(ConnectionInformation ci){
Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
try {
server.connect();
for (int i = 0; i < 10; i++) {
Group group = server.addGroup();
Item item = group.addItem("Server2;Group3;d1:400011");
Item item2 = group.addItem("Server2;Group3;d1:400013");
log.info("ItemName:[" + item.getId()+ "],value:”" + item.read(false).getValue());
log.info("ItemName:[" + item.getId()+ "],value:”" + item2.read(false).getValue());
Thread.sleep(1000);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (JIException e) {
e.printStackTrace();
} catch (org.openscada.opc.lib.common.AlreadyConnectedException e) {
e.printStackTrace();
} catch (AddFailedException e) {
e.printStackTrace();
} catch (NotConnectedException e) {
e.printStackTrace();
} catch (DuplicateGroupException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
写的不好,相互交流。