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;