Ho risolto!![]()
ho aggiunto questa funzione che scambia, dato un array di byte, i byte pari con quelli dispari:
poi ho modificato così la ReadRegister: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;
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;![]()

Rispondi quotando