Нам нет никакого смысла делать столько повторов, тем более что мы хотим от этого избавиться и если-бы это было в наших силах - давно бы убрали. Повторы делает сама функция owen_io.ReadUInt и ей подобные!
Вот пример кода (RetryCount задается в конфиге программы и обычно равно 0 или 1):
Код:
function _ReadUInt(const Address: TAddress; out Value: DWORD): Boolean;
var
I: Integer;
begin
Result := False;
IOSync.Enter;
try
LastError := owen_io.SelectPort(Address.Port);
if LastError <> ERR_OK then
Exit;
LastError := owen_io.ReadUInt(Address.Addr, ADRTYPE_11BIT, @Address.Code, Value, -1);
for I := 1 to RetryCount do
begin
if LastError = ERR_OK then
Break;
LastError := owen_io.ReadUInt(Address.Addr, ADRTYPE_11BIT, @Address.Code, Value, -1);
end;
if LastError <> ERR_OK then
Exit;
finally
IOSync.Leave;
end;
Result := True;
end;