The items could probably use some tidying up - I did this a while ago in OpenHAB 1.x which I stopped using then recently converted it to OH2. Unlike in the above example- I was able to use mutiple poll requests, so used a separate poll for each block of contiguous data. This may not be the most efficient, but it works.
modbus.cfg
#Separate connection blocks required for different register type polls
poll=2000
tcp.FroniusBlk1.connection=192.168.21.202:502
tcp.FroniusBlk1.id=1
tcp.FroniusBlk1.start=213
tcp.FroniusBlk1.length=1
tcp.FroniusBlk1.type=holding
tcp.FroniusBlk1.valuetype=uint16
tcp.FroniusBlk2.connection=192.168.21.202:502
tcp.FroniusBlk2.id=1
tcp.FroniusBlk2.start=499
tcp.FroniusBlk2.length=14
tcp.FroniusBlk2.type=holding
tcp.FroniusBlk2.valuetype=uint32
tcp.FroniusBlk3.connection=192.168.21.202:502
tcp.FroniusBlk3.id=1
tcp.FroniusBlk3.start=40071
tcp.FroniusBlk3.length=22
tcp.FroniusBlk3.type=holding
tcp.FroniusBlk3.valuetype=float32
tcp.FroniusBlk4.connection=192.168.21.202:502
tcp.FroniusBlk4.id=1
tcp.FroniusBlk4.start=40091
tcp.FroniusBlk4.length=20
tcp.FroniusBlk4.type=holding
tcp.FroniusBlk4.valuetype=float32
tcp.FroniusBlk5.connection=192.168.21.202:502
tcp.FroniusBlk5.id=1
tcp.FroniusBlk5.start=40117
tcp.FroniusBlk5.length=1
tcp.FroniusBlk5.type=holding
tcp.FroniusBlk5.valuetype=uint16
tcp.FroniusBlk6.connection=192.168.21.202:502
tcp.FroniusBlk6.id=1
tcp.FroniusBlk6.start=40123
tcp.FroniusBlk6.length=8
tcp.FroniusBlk6.type=holding
tcp.FroniusBlk6.valuetype=uint32
tcp.FroniusBlk7.connection=192.168.21.202:502
tcp.FroniusBlk7.id=1
tcp.FroniusBlk7.start=40281
tcp.FroniusBlk7.length=31
tcp.FroniusBlk7.type=holding
tcp.FroniusBlk7.valuetype=uint16
items
Group gMyOpenHab
Group gSolar
Group gSolarMain (gSolar)
Group gSolarPower (gSolar)
Group gSolarAC (gSolar)
Group gSolarDC (gSolar)
Group gSolarInfo (gSolar)
/* Solar
Number Solar_Active_StateCode "Current State [%d]" (gSolarMain) {modbus="FroniusBlk1:0"}
Number Solar_Site_Power "Actual Power [%d W]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:0"}
//Number Solar_Site_Energy_Day_HW "Generated Today HW [%d Wh]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:1"}
Number Solar_Site_Energy_Day "Generated Today [%d Wh]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:2"}
//Number Solar_F_Site_Energy_Year_HW "Generated Year HW [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:3"}
Number Solar_F_Site_Energy_Year_LW "Generated Year [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:4"}
//Number Solar_F_Site_Energy_Tot_HW"Generated Lifetime HW [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:5"}
Number Solar_F_Site_Energy_Tot_LW "Generated Lifetime [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:6"}
Number Solar_AC_Current "AC total current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:0"}
Number Solar_AphA "AC phase A current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:1"}
Number Solar_AphB "AC phase B current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:2"}
Number Solar_AphC "AC phase C current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:3"}
Number Solar_PPVphBC "AC voltage phase BC [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:5"}
Number Solar_PPVphCA "AC voltage phase CA [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:6"}
Number Solar_PPVphAB "AC voltage phase AB [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:4"}
Number Solar_PhVphA "AC voltage phase AN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:7"}
Number Solar_PhVphB "AC voltage phase BN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:8"}
Number Solar_PhVphC "AC voltage phase CN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:9"}
Number Solar_AC_Power "AC power [%.2f W]" (gSolarAC) {modbus="FroniusBlk4:0"}
Number Solar_AC_Freq "AC frequency [%.2f Hz]" (gSolarAC) {modbus="FroniusBlk4:1"}
Number Solar_WH "AC lifetime energy production [%.0f Wh]"(gSolarAC) {modbus="FroniusBlk4:5"}
//BCK 16/07/17 for some reason Solar_DCA & Solar_DCV below cause errors - need to look at it
//Number Solar_DCA "DC current [%.2f A]" (gSolarDC) {modbus="FroniusBlk4:6"}
//Number Solar_DCV "DC voltage [%.2f V]" (gSolarDC) {modbus="FroniusBlk4:7"}
Number Solar_DCW "DC power [%.2f W]" (gSolarDC) {modbus="FroniusBlk4:8"}
Number Solar_State "Operating state (enum)[%d]" (gSolarInfo) {modbus="FroniusBlk5:0"}
Number Solar_EvtVnd1 "Event Flag 1 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:0"}
Number Solar_EvtVnd2 "Event Flag 2 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:1"}
Number Solar_EvtVnd3 "Event Flag 3 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:2"}
Number Solar_EvtVnd4 "Event Flag 4 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:3"}
Number Solar_1_DCA "String 1 DC current [%d A]" (gSolarDC) {modbus="FroniusBlk7:0"}
Number Solar_1_DCV "String 1 DC voltage [%d V]" (gSolarDC) {modbus="FroniusBlk7:1"}
Number Solar_1_DCW "String 1 DC power [%d W]" (gSolarDC) {modbus="FroniusBlk7:2"}
Number Solar_1_Tmp "String 1 Temperature [%d C]" (gSolarDC) {modbus="FroniusBlk7:7"}
Number Solar_1_DCSt "String 1 Operating state [%d]" (gSolarDC) {modbus="FroniusBlk7:8"}
Number Solar_2_DCA "String 2 DC current [%d A]" (gSolarDC) {modbus="FroniusBlk7:20"}
Number Solar_2_DCV "String 2 DC voltage [%d V]" (gSolarDC) {modbus="FroniusBlk7:21"}
Number Solar_2_DCW "String 2 DC power [%d W]" (gSolarDC) {modbus="FroniusBlk7:22"}
Number Solar_2_Tmp "String 2 Temperature [%d C]" (gSolarDC) {modbus="FroniusBlk7:27"}
Number Solar_2_DCSt "String 2 Operating state [%d]" (gSolarDC) {modbus="FroniusBlk7:28"}
Hopefully somebody finds this useful.
Brent