This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Modbus data types breaking change in latest FW?
#1
After I installed latest firmware (had previous one before), I have a strong suspicion that something happened with modbus profile calculations since reading resolution dropped significantly. Here's screenshot of the readings where you can see a sharp drop in precision:
   

Below is my profile.
From the sniffer data (one example), i receive 0x2D5 which should decode to 725*0.0625 = 45.31C, but data written to bus is 46C. 
I had suspicion that this happens due to wrong datatype applied during conversion. Since field called "modbus register datatype", i used int16 with 0.0625 multiplier. This worked previously. I've tried to change datatype to float16, but result was unexpected - all calculated values became /100, so i had to update multiplier to 6.25 to compensate for that. 

I'm not seeing this behavior mentioned in documentation , nor in the changelog of the firmware.

Is this a bug, or should i update all profiles? is this a correct way to "fix" calculations?

Code:
{   "manufacturer": "WirenBoard",   "description": "WB-M1W2 Temperature",   "mapping": [     {       "bus_address": "32/4/1",       "value_delta": 0.1,       "datatype": "int16",       "bus_datatype": "temperature",       "type": "inputregister",       "address": 3584,       "value_multiplier": 0.0625,       "bus_write": false,       "name": "Temperature 1:1"     },     {       "bus_address": "32/4/2",       "value_delta": 0.1,       "datatype": "int16",       "bus_datatype": "temperature",       "type": "inputregister",       "address": 3585,       "value_multiplier": 0.0625,       "bus_write": false,       "name": "Temperature 1:2"     },     {       "bus_address": "32/4/3",       "value_delta": 0.1,       "datatype": "int16",       "bus_datatype": "temperature",       "type": "inputregister",       "address": 3624,       "value_multiplier": 0.0625,       "bus_write": false,       "name": "Temperature 2:1"     },     {       "bus_address": "32/4/4",       "value_delta": 0.1,       "datatype": "int16",       "bus_datatype": "temperature",       "type": "inputregister",       "address": 3625,       "value_multiplier": 0.0625,       "bus_write": false,       "name": "Temperature 2:2"     }   ] }

after further testing i think i found more interesting details:
all problems are happening with bus_datatype=temperature, which is a subset of float16 (so i assumed it will have identical behavior). Also it causes rounding errors which returns slightly incorrect values.

if i use bus_datatype=float16 with datatype=int16 and 0.0625 multiplier then everything seems correct.
Reply


Forum Jump: