Ho risolto!

ho aggiunto questa funzione che scambia, dato un array di byte, i byte pari con quelli dispari:
codice:
procedure TModBusConnection.SwapByteArray(ArrayOfByte: TpByteBuffer);
var
  i: Integer;
  byt: Byte;
begin
    for i := 0 to 3 do
    begin
        if (i mod 2) = 0 then
        begin
            byt:= ArrayOfByte[i + 1];
            ArrayOfByte[i + 1]:= ArrayOfByte[i];
            ArrayOfByte[i]:= byt;
        end;
    end;
end;
poi ho modificato così la ReadRegister:
codice:
function TModBusConnection.ReadRegister(Adress: Cardinal;
         var Value: Single): Cardinal;
var
  PointerToSingleBuffer: TpSingleBuffer;
  DWordValue: LongWord;
begin
  f_Adress   := Adress;
  f_Quantity := 2;
  f_FunctionCode := mbfREADREGISTER;
  result := Execute;
  if result = 0 then begin
    SwapByteArray(@f_ReadBuffer);
    PointerToSingleBuffer := @f_ReadBuffer;
    Value := PointerToSingleBuffer^[0];
  end;
end;