plc4x-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christofer Dutz <>
Subject Re: Subscriber emulation
Date Thu, 13 Sep 2018 07:14:27 GMT
Hi all,

Why not do, what we (ok I) wrote on the Website?
- If a protocol/device supports something, we use that directly 
- If a protocol/device doesn't directly support something, we try to emulate it

So in this context I wouldn't care in my application how the subscription works. All I care
about is that I subscribe to something and I get data.
So if for example this application is based on the subscriber, then when using ADS, this would
simply be used and if for example the application uses S7, then the Driver internally uses
the "PollingSubscriber" (Or whatever we call it) and just offers the same functionality. 

I bet there never will be a user that is connected to a device that supports subscriptions
natively, but requests to use the polling mechanism.

I would strongly suggest not to add another type.


Am 13.09.18, 08:59 schrieb "Sebastian Rühl" <>:

    We could also do something like a PlcPolledReader which extends the PlcSubscriber. 
    With that in mind we would use the same API but avoid confusion as drivers in this case
return an empty Optional for PlcSubscriber but an actual Reader for the polled case.
    But at the moment I would think some util in driver-base would be sufficient too.
    > Am 12.09.2018 um 15:45 schrieb Christofer Dutz <>:
    > Hi,
    > why not implement this in driver-base? Usually a driver could implement the subscription
part directly or use the simulated subscriber, but any other combination doesn't really make
sense, does it?
    > Chris
    > Am 12.09.18, 15:31 schrieb "Sebastian Rühl" <>:
    >    Hi,
    >    I agree with Julian here; we could implement these things in a plc4j-util module
or something like that (or pooling in a plc4j-pool).
    >    Regarding implementing a plcSubscriber based on PlcReader: I think I did that
in the camel component when no plcSubscriber is available if I remember correctly.
    >    I would vote against implementing such thing in the core module as PlcSubscriber
shall only be used for „real“ notifications and not polled reads.
    >    Sebastian
    >> Am 12.09.2018 um 13:33 schrieb Julian Feinauer <>:
    >> Hi Andrey,
    >> we use this heavily (as we want frequent updates from S7 plcs) and have built
a complete layer on top of the communication in the last year.
    >> So I strongly suggest to add this to the project but as another level.
    >> I think we can also provide some code for this feature.
    >> The main reason why this should be "standalone" from my perspective is that it
has to deal with things like ThreadPools or Executors and handling of connection losses and
all those things.
    >> And questions on how to deal with timeouts (if the plc is pretty busy) and things
like that.
    >> Patterns like circuit breaker or request collapsing can be useful if you poll
enough messages (or are even necessary).
    >> So in-depth we spent a lot of time with these things and do not see how we could
make a simple and easy to use solution for the core.
    >> Best
    >> Julian
    >> Am 12.09.18, 13:04 schrieb "Andrey Skorikov" <>:
    >>   Hello all,
    >>   since not all protocols and devices support the subscriber model, I 
    >>   believe that it is sensible to emulate the PlcSubscriber based on a 
    >>   PlcReader as a fallback. This could be realized by polling the device at 
    >>   a fixed rate in the client process. However, I am not sure whether this 
    >>   should be part of the core plc4j component, or implemented separately on 
    >>   top of it. What do you think?
    >>   Regards,
    >>   Andrey Skorikov

View raw message