Я столкнулся с проблемой подключения к OPC-серверу через Java с помощью openScada, Utgard и Jinterop.Java-соединение с OPC-сервером: NotConnectedException (AutoReconnectController)
Я ранее использовал OPC-сервер Matrikon (все работало отлично) и попытался переключиться на Kepware Server Ex. Демонстрация Kepware закончилась, и я не хотел ее покупать, поэтому решил переключиться на OPC-сервер Matrikon. Я полностью удалил 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()
Я получаю значение Null. Таким образом, очевидно, что сервер не подключался, поэтому я попытался удалить AutoReconnectController.
При удалении AutoReconnectController, как таковой:
server = new Server(conn, Executors.newSingleThreadScheduledExecutor());
try{
server.connect();
createOPCGroup(tagNames);
}catch (Exception e){
e.printStackTrace(System.out);
}
NotConnectedException не срабатывает, и программа работает успешно. Однако мне нужна функция повторного подключения. Есть ли у кого-нибудь мысли о том, что может происходить здесь?
Поскольку код не был изменен, я понял, что это настройки DCOM или что-то похожее; но снова ничего не изменилось с тех пор, как Матрикон был изменен на Kepware, и обратно.
Вы джентльмен и ученый. Спасибо, что исправил мою проблему. Примечание: Мне нужно было сделать мои имена тегов с окончательным объявлением, но это не повлияло на мою программу, так как мне нужно только один раз загрузить теги tagNames. – ballBreaker