Hi everyone, If you wanted to do MSPEC such that you could or could have generated the currently supported protocols with it, you may need to do more than this.
I have been mentioning anecdotally on slack about modbus float permutations in the wild, and took a moment to find someplace with that kind of support that I could show, https://libmodbus.org/docs/v3.1.6/ check out the set or get float sections. On December 11, 2019 at 05:27:11, Christofer Dutz ([email protected]) wrote: Hi Julian, I know ... I haven't encountered a "ufloat" yet, but thought ... if we do it, we do it right ;) Chris Am 11.12.19, 10:57 schrieb "Julian Feinauer" <[email protected]>: Although I have to state that this ufloat thing is overall weird-ish. But overall, I think the way you implemented it is the best. Julian Am 10.12.19, 21:55 schrieb "Christofer Dutz" <[email protected]>: Hi Lukas, Yeah ... the more I thought about it, the more I liked it and since today that version is implemented ... in the feature/knxnet-ip branch __ Chris Am 10.12.19, 18:09 schrieb "Lukas Ott" <[email protected]>: +1 for ufloat Option as Mspec already supports uint so in my humble opinion it would just be consistent to support ufloat as well.. Christofer Dutz <[email protected]> schrieb am Mo., 9. Dez. 2019, 13:59: > Hi all, > > while implementing the mspec for KNXnet/IP I stumbled into the first pit > regarding floating point numbers. > In the spec they claim to be normal IEEE 754 half precision floating point > numbers and therefore I thought a “float 16” would be ok. > However it turned out that they don’t use the formal half precision types. > The exponent is one bit less and the mantissa is one bit more. > So I think it would be great to change the float datatype to something like > > float +4.11 > > If there’s a “+” it’s a signed floating point (Alternatively we could add > a “ufloat” type) … the main thing is that then comes the number of exponent > bits and after the dot the mantissa. > > Right now I “solved” the problem like this: > > ['9' KnxDatapointF16 > [reserved uint 8 '0x0'] > [simple bit 'sign'] > [simple int 4 'exponent'] > [simple uint 11 'mantissa'] > [virtual float 16 'val' '(sign ? -1 : 1) * (0.01 * mantissa) * (2 ^ > exponent)'] > ] > > Which is not that ideal … > > What do you think? > > The more I think of it, I think a: “float” and a “ufloat” is the better > idea as this continues the int / uint concept for integers. > > Chris > > > >
