Regarding the TIA protocol ...

We probably won't be able to provide an active driver for TIA, however I will 
start working on a passive mode version pretty soon. 
With this we can at least intercept the traffic and read it.
Perhaps one day we'll find out how to also be able to provide active versions.

Regarding the hang-ups ... could you possibly do a Wireshark capture of what's 
happening when you execute your program and attach that to an issue?


Chris



Am 08.11.19, 13:03 schrieb "Julian Feinauer" <[email protected]>:

    Hi Sebastian,
    
    thanks fort he response, good to hear that it works now.
    The stacktrace that you show could be related to the disconnect, indeed.
    I remember that it was a bit tricky to get it right and if you would create 
a Jira I can try to look into it.
    
    To your question regarding S7CommPlus (optimized datablocks):
    We currently cannot but there is a long discussion around this topic (I 
would like it too).
    The main issue is that we would need to reverse engineer some part of the 
TIA Libraries to extract private keys of a cryptographic challenge that is done 
during initial handshake which is illegal in Germany (“Hackerparagraph”).
    
    But we are on the topic and have ideas for other ways around it as it would 
be really good to have this feature.
    
    Julian
    
    Von: Sebastian Wiendl <[email protected]>
    Antworten an: "[email protected]" <[email protected]>
    Datum: Freitag, 8. November 2019 um 12:55
    An: "[email protected]" <[email protected]>
    Betreff: Antwort: Re: Antwort: Re: Configuring a S7-1500 for Access with 
PLC4J
    
    Hi all,
    
    news from my side: The logged exception happens during the disconnect 
phase. Connecting, pinging and reading values works just fine. Fun Fact: The 
communication works regardless of the specified rack/slot.
    
    This is my updated program:
    
    
    public static void main(String[] args) {
       try (PlcConnection plcConnection = new 
PlcDriverManager().getConnection("s7://172.30.74.65/0/0")) {
           System.out.println("connected");
           System.out.println(plcConnection);
           CompletableFuture<Void> ping = plcConnection.ping();
           ping.get(500, TimeUnit.MILLISECONDS);
           System.out.println("ping exception = " + 
ping.isCompletedExceptionally());
    
           // non optimized DB
           for (int i = 0; i < 3; i++) {
               PlcReadRequest.Builder builder = 
plcConnection.readRequestBuilder();
               final String fieldName = "field";
               builder.addItem(fieldName, "%DB101.DBW78:INT");
               PlcReadRequest readRequest = builder.build();
               LocalDateTime start = now();
               PlcReadResponse plcReadResponse = readRequest.execute().get();
               System.out.println("request took " + Duration.between(start, 
now()));
               System.out.println(fieldName + " response: " + 
plcReadResponse.getResponseCode(fieldName) + "; value: " + 
plcReadResponse.getInteger(fieldName));
           }
    
           try (BufferedReader br = new BufferedReader(new 
InputStreamReader(System.in))) {
               br.readLine();
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       System.out.println("disconnected");
    }
    
    The execution yields this output:
    
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further 
details.
    connected
    org.apache.plc4x.java.s7.connection.S7PlcConnection@131276c2
    ping exception = false
    request took PT0.029S
    field response: OK; value: 2
    request took PT0.002S
    field response: OK; value: 2
    request took PT0.002S
    field response: OK; value: 2
    
    Nov 08, 2019 12:53:36 PM io.netty.channel.DefaultChannelPipeline 
onUnhandledInboundException
    WARNUNG: An exceptionCaught() event was fired, and it reached at the tail 
of the pipeline. It usually means the last handler in the pipeline did not 
handle the exception.
    java.io.IOException: Eine vorhandene Verbindung wurde vom Remotehost 
geschlossen
            at sun.nio.ch.SocketDispatcher.read0(Native Method)
            at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
            at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
            at sun.nio.ch.IOUtil.read(IOUtil.java:192)
            at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
            at 
io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
            at 
io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1125)
            at 
io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
            at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
            at 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682)
            at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617)
            at 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534)
            at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
            at 
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)
            at 
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
            at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
            at java.lang.Thread.run(Thread.java:748)
    
    disconnected
    
    The exception only shows after pressing enter, therefore during the 
disconnect. I think what i discovered is a non-issue. Not nice, but not 
stopping me.
    
    BTW does PLC4J support reading optimized S7 DBs? If not, is support for 
this planned at some point in time?
    
    Mit freundlichen Grüßen
    Kind regards
    
    Sebastian Wiendl
    DSE / Digital Solutions Software Engineer
    Phone: +49 9605 919 - 9341
    E-Mail: [email protected]
    Internet: www.bhs-world.com<https://www.bhs-world.com>
    Shop: www.icorr.shop
    ________________________________
     [cid:_1_15253CC8152538CC00417B1CC12584AC]
    
    BHS Corrugated Maschinen- und Anlagenbau GmbH
    Paul-Engel-Straße 1
    92729 WEIHERHAMMER
    GERMANY
    
    Management: Christian Engel, Lars Engel
    Registered at Amtsgericht Weiden, HR B 1320
    
    ________________________________
    
    [cid:_2_158FEFC0158FEE7000417B1CC12584AC]
    [cid:_2_158FF6A4158FF2C000417B1CC12584AC]
    [cid:_2_158FFC90158FF8AC00417B1CC12584AC]
    
    
    [cid:_1_1590012C158FF9FC00417B1CC12584AC]
    
    
    
    
    Von:        "Tim Mitsch" <[email protected]>
    An:        "[email protected]" <[email protected]>
    Datum:        07.11.2019 17:47
    Betreff:        Re: Antwort: Re: Configuring a S7-1500 for Access with PLC4J
    ________________________________
    
    
    
    Hey Sebastian
    
    Sorry for delayed answer – but first of all warm welcome on the list.
    
    Just tested ur code-snippet vs our S7-1515 and is working fine.
    U said u activated Put/Get.
    Do u have the possibility to execute the scraper runner:
    Plc4j/util/scraper/test/TriggeredScraperRunner
    
    U need to adjust the ‘example_triggered_scraper.yml’ to ur needs (ip, 
field) …
    Please take into account that the field to be read from must be a 
NON-optimized block
    
    If there are still issue please write on the list and I can make a 
cross-check to the S7 Settings.
    
    Best
    Tim
    
    
    
    Von: Sebastian Wiendl <[email protected]>
    Antworten an: "[email protected]" <[email protected]>
    Datum: Donnerstag, 7. November 2019 um 16:29
    An: "[email protected]" <[email protected]>
    Betreff: Antwort: Re: Configuring a S7-1500 for Access with PLC4J
    
    Hi Cesar,
    
    thanks for your input.
    
    s7://172.30.74.65/0/0 <http://172.30.74.65/0/2> is an illegal plc4j 
connection string. (The PLC's webserver is disabled btw.)
    
    s7://172.30.74.65/0/0 yields the same exception as before.
    
    I checked with our IT department in parallel - there is one router between 
me and the PLC and port 102 is open and reachable. No firewalls either.
    
    Mit freundlichen Grüßen
    Kind regards
    
    Sebastian Wiendl
    DSE / Digital Solutions Software Engineer
    Phone: +49 9605 919 - 9341
    E-Mail: [email protected]
    Internet: 
www.bhs-world.com<https://www.bhs-world.com<https://www.bhs-world.com/>>
    Shop: www.icorr.shop
    ________________________________
    [cid:_1_150B9900150B9504005508A3C12584AB]
    
    BHS Corrugated Maschinen- und Anlagenbau GmbH
    Paul-Engel-Straße 1
    92729 WEIHERHAMMER
    GERMANY
    
    Management: Christian Engel, Lars Engel
    Registered at Amtsgericht Weiden, HR B 1320
    
    ________________________________
    
    [cid:_2_150BB3DC150BAFF8005508A3C12584AB]
    [cid:_2_150BB9C8150BB5E4005508A3C12584AB]
    [cid:_2_150BBFB4150BBBD0005508A3C12584AB]
    
    
    [cid:_1_150BC450150BBD20005508A3C12584AB]
    
    
    
    
    Von:        "Cesar Garcia" <[email protected]>
    An:        "Apache PLC4X" <[email protected]>
    Datum:        07.11.2019 15:53
    Betreff:        Re: Configuring a S7-1500 for Access with PLC4J
    ________________________________
    
    
    
    Hello,
    
    Try (*"s7://172.30.74.65/0/0 <http://172.30.74.65/0/2>")*
    
    For S7-1200 and S7-1500 is Rack=0, Slot=0,
    
    Best regards
    
    El jue., 7 nov. 2019 a las 9:58, Sebastian Wiendl (<
    [email protected]>) escribió:
    
    > Hello everyone,
    >
    > my sample program of PLC4J (very similiar to the hello world example)
    > fails to connect to my test PLC (S7-1500):
    >
    > Nov 07, 2019 2:37:51 PM io.netty.channel.DefaultChannelPipeline
    > onUnhandledInboundException
    > WARNUNG: An exceptionCaught() event was fired, and it reached at the tail
    > of the pipeline. It usually means the last handler in the pipeline did not
    > handle the exception.
    > java.io.IOException: Eine vorhandene Verbindung wurde vom Remotehost
    > geschlossen
    >         at sun.nio.ch.SocketDispatcher.read0(Native Method)
    >         at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    >         at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    >         at sun.nio.ch.IOUtil.read(IOUtil.java:192)
    >         at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    >         at
    > 
io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
    >         at
    > io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1125)
    >         at
    > 
io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
    >         at
    > 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
    >         at
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682)
    >         at
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617)
    >         at
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534)
    >         at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
    >         at
    > 
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)
    >         at
    > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    >         at
    > 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    >         at java.lang.Thread.run(Thread.java:748)
    >
    > "An existing connection was closed by the remote host"
    >
    > Thats my program at the moment:
    >
    >
    >     *public static void *main(String[] args) {
    >        *try *(PlcConnection plcConnection = *new *
    > PlcDriverManager().getConnection(*"s7://172.30.74.65/0/2
    > <http://172.30.74.65/0/2>"*)) {
    >            System.*out*.println(*"connected"*);
    >            System.*out*.println(plcConnection);
    >            CompletableFuture<Void> ping = plcConnection.ping();
    >            ping.get(500, TimeUnit.*MILLISECONDS*);
    >            System.*out*.println(*"ping exception = " *+
    > ping.isCompletedExceptionally());
    >        } *catch *(Exception e) {
    >            e.printStackTrace();
    >        }
    >        System.*out*.println(*"disconnected"*);
    >    }
    >
    > I can both ping the PLC as well as connect to it with the Siemens TIA
    > Portal. Does the PLC need some special configuration in the project to be
    > reachable via S7Comm via ISO on TCP? nmap shows port 102 TCP as open.
    >
    > Any help is much appreciated!
    >
    > Mit freundlichen Grüßen
    > Kind regards
    >
    >
    > *Sebastian Wiendl *DSE / Digital Solutions Software Engineer
    > Phone: +49 9605 919 - 9341
    > 
<http://www.bhs-world.com<http://www.bhs-world.com/><http://www.bhs-world.com/>>E-Mail:
 [email protected]
    > Internet: www.bhs-world.com
    > Shop: www.icorr.shop
    > ------------------------------
    >
    >
    >
    > *BHS Corrugated Maschinen- und Anlagenbau GmbH *Paul-Engel-Straße 1
    > 92729 WEIHERHAMMER
    > GERMANY
    >
    > Management: Christian Engel, Lars Engel
    > Registered at Amtsgericht Weiden, HR B 1320
    > ------------------------------
    >
    >
    >
    >
    >
    
    --
    *CEOS Automatización, C.A.*
    *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,*
    *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,*
    
    *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI*
    *Ing. César García*
    *Cel: 0416-681.03.99*
    
    *Cel: 0414-760.98.95*
    
    *Hotline Técnica SIEMENS: 0800 1005080*
    
    *Email: [email protected]
    <[email protected]>*
    
    
    
    
    
    
    

Reply via email to