Estou testando uma balança Urano Pop Z US 20/2 POP LIGHT e metade das vezes que tento ler o peso da balança ocorre um Access violation no Delphi. A excessão é tratada internamente e não exibe o erro ao usuário, mas nessa situação o resultado obtido do peso da balança é zero.
O problema é que se eu manter a comunicação ativa o peso fica alternando entre o peso real e zero num intervalo de meio segundo.
No arquivo ACBrBALUrano.pas, no método LePeso, tem um Sleep de 200 milissegundos. Como o erro acontecia na linha seguinte (LeSerial) para resolver o problema aumentei o Sleep para 300 milissegundos.
function TACBrBALUrano.LePeso(MillisecTimeOut : Integer) : Double;
begin
fpDevice.Serial.Purge;
fpDevice.EnviaString(#05); { Envia comando solicitando o Peso }
//sleep(200);
sleep(300);
LeSerial( MillisecTimeOut );
Result := fpUltimoPesoLido;
end;