我在使用 openScada、Utgard 和 Jinterop 通过 Java 连接到 OPC 服务器时遇到了问题。
我之前使用的是 Matrikon 的 OPC Server(一切正常),并试图切换到 Kepware Server Ex。Kepware 演示用完了,我不想购买它 - 所以我决定切换回 Matrikon 的 OPC 服务器。我完全卸载了 Kepware,并且在运行我的程序时没有更改任何代码,但我遇到了“org.openscada.opc.lib.common.NotConnectedException”。
我找到了解决此问题的“解决方法”。但它阻碍了程序的原始功能: 最初使用了 AutoReconnectController:
public void createOPCConnection( String host, String domain, String progID, String clsid, List<String>tagNames) throws OPCException {
this.conn = new ConnectionInformation();
conn.setHost(this.host);
conn.setDomain(this.domain);
conn.setUser(this.user);
conn.setPassword(this.pass);
conn.setProgId(this.progID);
conn.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");
server = new Server(conn, Executors.newSingleThreadScheduledExecutor());
AutoReconnectController autoReconnectController = new AutoReconnectController ( server );
// disable GC for COM objects to prevent the socket from being closed
JISystem.setJavaCoClassAutoCollection(false);
try {
// connect to server
autoReconnectController.connect();
createOPCGroup(tagNames);
} catch (IllegalArgumentException e) {
throw new OPCException(e.getMessage());
}
使用测试服务器状态时
server.getServerState()
我得到一个空值。所以很明显服务器没有连接所以我尝试删除 AutoReconnectController。
删除 AutoReconnectController 时,如下:
server = new Server(conn, Executors.newSingleThreadScheduledExecutor());
try{
server.connect();
createOPCGroup(tagNames);
}catch (Exception e){
e.printStackTrace(System.out);
}
NotConnectedException 没有触发,程序运行成功。但是,我需要重新连接功能。有人对这里可能发生的事情有任何想法吗?
由于没有更改代码,我认为这是 DCOM 设置或类似的东西;但是自从 Matrikon 更改为 Kepware 之后,什么都没有改变,然后又回来了。