Hey everybody, first, a great compliment for starting this excellent project and bringing it this far forward. I am on the dev mailing list since some months and was following the development very interested but was not able to give any input due to other duties. We are a small german start-up doing (at least some of) the IoT and Industry 4.0 stuff everybody is talking about. Currently, we have our own home-build implementation of the S7 protocol as we do a lot of communication with Siemens PLCs. We also had some discussions and ideas of a more general interface as we start to incorporate other devices and protokolls in our stack. And from my perspective PLC4J is the “ideal” approach and fits nearly perfect with our ideas and thus, we are currently thinking about replacing our own code with PLC4J and in turn, try to bring this project forward in the directions we aim to go.
Thus, from my side a warm welcome to the community and all contributors and I’m really looking forward for the discussions with you! And let me start with a first idea of a feature, I think we would need. For a short background, we are doing a lot of interaction with PLCs and usually read a lot of data (many variables) from the PLC with high frequencies. Thus, our approach is not to read single addresses and cast them in one step but to read one connected memory region (datablock) and extract all variables of interest from the block and cast them to the respective types. The main reason for this is to reduce the communication load on the PLC side. I hope that I’m not duplicating existing ideas or concepts but I didn’t find anything specific to this problem. To be able to switch to PLC4J my idea was to have a concept of “Batch” Reads or Writes, kind of like the JDBCs batch mode. This could have two variants. One would be the possibility to give the driver a list of variables to read and the driver batches them as it makes sense and then performs the read opaque and returns all the result. The other option, especially in the async case could be that the reader internally batches subsequent calls until certain thresholds (number of commands, time limit) are met and then performs batched reads of consecutive memory regions. What do you think of this approach? Best! Julian pragmatic industries