Hi all,

so I have been spending a lot more time than I wanted to on cleaning up in the 
PlcValues and especially the PlcValueHandler.

Here I’ve noticed a few things:

  *   We had some PlcValues extens the IECValue type and some a SimplePlcValue 
type … I updated all to have the same base-type
  *   Now all PlcValue types have an “of” method and constructors accepting the 
major types: Byte, Short, Integer, Long, Float, Double, BigInteger, BigDecimal, 
String (and some also specialized ones like: Boolean, Duration, LocalTime, 
LocalDate, LocalDateTime.

In order to allow creating almost any PlcValue with almost any Java type, for 
the temporal types I had to decide which “encoding” the numeric values are in. 
In general did I allow floating-point values, which are simply treated as 
integers (ignoring the fractional part). However this unified approach makes 
using them easier, but it makes less use of the possible value range. While a 
long is able to produce any sensible date, a byte can only reference dates on 
the first day of 1970.

Now we could use different measures depending on the type, but I think that 
makes things a lot more complicated. If a PlcDATE for example would use “byte” 
as days of the current year (we could somehow use it a bit, but it wouldn’t be 
able to represent a full year), a short could be something different …

I would say, we stick to one unified measure for all numeric constructors per 
type and if somone thinks it’s a good idea to represent a date with a byte, 
that’s his problem to solve. Otherwise, I could imagine a complete cascade of 
possible problems: Someone has an existing PLC4X program and notices that one 
variable, which was a short, now requires an integer … as soon as he changes 
that the code stays compatible, but now the conversion of value-to-plcvalue 
uses a different measure.

For allowing to support different measures for the temporal fields, I would 
much more suggest to use speaking constructor methods (as we have been doing) … 
something like:

PlcLTIME.ofNannoseconds
PlcLTIME_OF_DAY.ofNannosecondsSinceMidnight
PlcDATE.ofSecondsSinceEpoch
PlcDATE.ofDaysSinceEpoch
…

And one last thing … I would like to remove the LIST type in PlcValueTypes as 
this is actually not a type, it’s more an implementation detail of how we 
implement array types.

What do you think?

As discussions on the Plc4x mailing list have become sort of monolouges again, 
till I hear any real objection, I’ll continue my path (However if you support 
me, leaving a +1 lets me feel less like I’m wasting my time even trying to 
discuss things)


Chris

Reply via email to