plc4x-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christofer Dutz <christofer.d...@c-ware.de>
Subject Re: Reconnect of driver 2
Date Tue, 26 Mar 2019 11:57:26 GMT
Hi all,

yes definitely a "ping" is needed ... especially as this way we can really start to do some
"autodiscover" stuff ...
Sort of giving PLC4X just an IP address and it listing up drivers in the classpath that are
able to communicate with that device.
Would definitely ease the setup process dramatically.

Chris



Am 26.03.19, 12:13 schrieb "Julian Feinauer" <j.feinauer@pragmaticminds.de>:

    Hi Gunther,
    
    good catch : )
    In fact, the isConnected() implementation is currently not soo god.
    In fact it checks if the underlying communication channel from netty is connected (which
does not know that it is disconnected yet, in your case).
    We already had discussions to introduce a real "request" based implementation like "ping()"
which sends a request.
    
    Furthermore, for your use case there is the PooledDriverManager which does implicitly
what you do... throws away a not working connection and issues a new one, if needed, but that’s
a separate topic.
    
    I think we should spend some effort into this "ping" functionality.
    Perhaps you can even assist with the implementation Gunther, what do you think?
    
    Julian
    
    Am 26.03.19, 11:19 schrieb "Gunther Gruber" <gunther.gruber@IDA-Analytics.de>:
    
        Put it another way, isConnected does not work as i expect it
        
        plcConnection.isConnected() returns true even when i disconnect the vpn (maybe of
some tcp/ip keepalive?)
        
        this is the snippet of code which i expect to work (instead of the thread which reconnects
ever 10 minutes)
        while (doCollect) {
        
          try {
            if (plcConnection == null || plcConnection.isConnected() == false) {
              plcConnection = initPLC(config.get(CONNECTION_KEY));
            }
          } catch (PlcConnectionException e) {
            logger.log(Level.WARNING, "error connecting with driver", e);
            plcConnection = null;
            incrementalSleep();
            break;
          }
        
          // Create a new read request:
          // - Give the single item requested the alias name "value"
          PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
        
        Gunther Gruber
        
        
    
    

Mime
View raw message