Actually you can, because the protocol should be interpreted as bit patterns. So consequently 16 bit float values are possible. If you really need that is another matter. Same goes for - 2 char - string encodings: as long as you encode to a bitpattern you have 2 chars. And indeed: casting will suffice to get back and forth. (one of the reasons I wrote some helper functions for sysutils, a bit simpler than Avra's bit manipulation library. Both are on this forum, both are written with hardware control in mind)
Basically any type that can be expressed as a 16 bit value or less can - of course - be used. It is up to the programmer to interpret such encoding.
Thaddy, you are saying the same I remark, the protocol itself is made to transmit 16 bit integer, but no one stop you to handle those 16 bit with the format you want.
What I want to tell to "jdp" is that if the functions in the library only handle integers, there is no problem, just type casting those bits (16, 32 or whatever size) to the format you want.
I never use third-party modbus libraries because I wrote my own modbus library over the freepascal sockets (no indy or synapse in the middle), and I use this library every day in my work to read every kind of data form PLC (integer, floats, null terminated string, datetimes, etc).