Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java连接到OPC服务器:NotConnectedException(AutoReconnectController)_Java_Wildfly_Opc_Scada_J Interop - Fatal编程技术网

Java连接到OPC服务器:NotConnectedException(AutoReconnectController)

Java连接到OPC服务器:NotConnectedException(AutoReconnectController),java,wildfly,opc,scada,j-interop,Java,Wildfly,Opc,Scada,J Interop,我在通过Java与openScada、Utgard和Jinterop连接OPC服务器时遇到了一个问题 我以前使用Matrikon的OPC服务器(一切都很好),并试图切换到Kepware服务器Ex。Kepware演示版用完了,我不想购买它-因此我决定切换回Matrikon的OPC服务器。我完全卸载了Kepware,在运行我的程序时,没有更改任何代码,我运行到了“org.openscada.opc.lib.common.NotConnectedException” 我已经找到了这个问题的“解决办法”

我在通过Java与openScada、Utgard和Jinterop连接OPC服务器时遇到了一个问题

我以前使用Matrikon的OPC服务器(一切都很好),并试图切换到Kepware服务器Ex。Kepware演示版用完了,我不想购买它-因此我决定切换回Matrikon的OPC服务器。我完全卸载了Kepware,在运行我的程序时,没有更改任何代码,我运行到了“org.openscada.opc.lib.common.NotConnectedException”

我已经找到了这个问题的“解决办法”。但它妨碍了程序的原始功能: 最初使用的是AutoReconnect控制器:

  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 = new Server(conn, Executors.newSingleThreadScheduledExecutor());
   try{
        server.connect();
        createOPCGroup(tagNames);
    }catch (Exception e){
    e.printStackTrace(System.out);
    }
我得到一个Null值。很明显服务器没有连接,所以我试着移除AutoReconnectController

删除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 = new Server(conn, Executors.newSingleThreadScheduledExecutor());
   try{
        server.connect();
        createOPCGroup(tagNames);
    }catch (Exception e){
    e.printStackTrace(System.out);
    }
NotConnectedException不会触发,程序将成功运行。但是,我需要重新连接功能有人对这里可能发生的事情有什么想法吗?


由于没有代码被更改,我想这是DCOM设置或类似的东西;但是自从Matrikon被换成Kepware,再回来之后,一切都没有改变

AutoReconnectController会异步触发连接过程。服务器类同步工作。由于您没有同步到连接状态,因此状态可能是,也可能不是“null”

但是,AutoReconnectController的“addListener”方法允许您在连接状态下添加侦听器。比如:

autoReconnectController.addListener ( new AutoReconnectListener () {
   public void stateChanged ( AutoReconnectState state ) {
       if ( state == AutoReconnectState.CONNECTED ) {
           createOPCGroup(tagNames);
       }
   }
} );
autoReconnectController.connect ();

你是一位绅士和学者。谢谢,这解决了我的问题。注意:我必须用一个最终声明来创建标记名,但这并不影响我的程序,因为我只需要加载一次标记名。