Thanks On Mon, Jan 2, 2023 at 2:35 PM Christofer Dutz <[email protected]> wrote:
> That went off too soon … > > https://en.wikipedia.org/wiki/IEC_61131-3 > > Even if we initially had different type names for each driver, we sort of > consolidated on using the IEC defaults. > However, this doesn’t mean that we can only use these. It should be > possible to support additional type names. > > From what I read from the spec you referenced, it shouldn’t be too > difficult: > > Int16=INT > Uint16=UINT > BitField16=WORD > Int32=DINT > Uint32=UDINT > BitField32=DWORD > … > Float32=REAL > > Just the Arc and the Enum types I don’t quite know what they are and the > scale-factors I haven’t seen before. > > I would assume a simple translation from the SunSpec names to > IEC/PLC4X-Names should get most of the job done. > I haven’t tested reading strings however. > > But in general, I would say: If there’s a need to do so, PLC4X would 100% > be extendible to support different types of encoding schemes. > Even if it meant having multiple DataIo implementations. > > https://github.com/apache/plc4x/blob/develop/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec#L311 > > > Chris > > > > > > > > From: Christofer Dutz <[email protected]> > Date: Monday, 2. January 2023 at 14:28 > To: [email protected] <[email protected]> > Subject: Re: Interpreting the modbus registers. > Hi Nils, > > As it’s the goal of PLC4X to have a shared API over many protocols. We > sort of settled on using this as a reference for the supported types: > > From: Niels Basjes <[email protected]> > Date: Monday, 2. January 2023 at 13:33 > To: [email protected] <[email protected]> > Subject: Re: Interpreting the modbus registers. > Hi, > > Just as background info: > The Sunspec modbus spec is a standardized way of doing modbus for energy > equipment across many vendors with lots of different features. It also has > types like a `string` which is a sequence of modbus registers which are > then interpreted as ASCII (used for serial numbers, brand names) and a type > for an IPv6 address (and many others). > > https://sunspec.org/ > > https://sunspec.org/wp-content/uploads/2015/06/SunSpec-Information-Models-12041.pdf > https://github.com/sunspec/models > > Long ago I wrote some code to handle modbus for Sunspec (for my Solar > panels at home) and my SDM630 (which measures the power usage of my > Geothermal Heatpump at home) > See: https://github.com/nielsbasjes/energy > > I recently got a new Heatpump which supports modbus itself and decided to > write some code for that thing too and cleanup/refactor/reconsider the code > I wrote a few years ago. > As part of this reconsidering I'm having a close look at this project. > > How does the plc4x project look at having these kinds of very specific > decoders as part of this project ? > Or do you prefer to have them outside this project ? > > Niels > > On Mon, Jan 2, 2023 at 1:00 PM Christofer Dutz <[email protected]> > wrote: > > > Hi Niels, > > > > and welcome to the plc4x community :-) > > > > In general, we already have a general-purpose mapping layer. However, > it’s > > not as universal as you would need for that given use-case. > > So, if for example you read a register as type “REAL” it will > > automatically fetch two registers and interpret the two as 32bit floating > > point number. > > > > However, in your case you currently would need to manually do the > > conversion. Unfortunately, I don’t know the “sunspec”, so not 100% sure > how > > this is encoded. > > > > Does that help? > > > > Chris > > > > > > > > From: Niels Basjes <[email protected]> > > Date: Monday, 2. January 2023 at 12:48 > > To: [email protected] <[email protected]> > > Subject: Interpreting the modbus registers. > > Hi, > > > > The modbus protocol simply talks about 1 bit coils and 16 bit registers > and > > are retrieved and written back. > > Modbus does not assign any meaning to these bits so real applications > need > > a translation from these register bits to usable values. > > In some cases the meaning of the bits even varies with the content of > other > > registers; For example the sunspec has a "scaling factor" which indicates > > how much 10^X a field must be multiplied to get the real value. > > > > Is there a generic example on how to implement such a mapping layer > cleanly > > with plc4j? > > > > I did have a look at the OPM feature but that retrieves all values one by > > one; I want all measurements retrieved at the 'exact' same instant. > > > > -- > > Best regards / Met vriendelijke groeten, > > > > Niels Basjes > > > > > -- > Best regards / Met vriendelijke groeten, > > Niels Basjes > -- Best regards / Met vriendelijke groeten, Niels Basjes
