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