REF: ACBrBAlUrano.pas
procedure TACBrBALUrano.LeSerial( MillisecTimeOut : Integer) ;
var
Resposta: String;
Quantos: integer;
begin
fpUltimoPesoLido := 0 ;
fpUltimaResposta := '' ;
try
fpUltimaResposta := fpDevice.Serial.RecvPacket( MillisecTimeOut );
//fpUltimaResposta := '1BT11BA131BN01BS21BD41BQ1931BB * PESO: 5,10kg1BE1BP01';
Resposta := fpUltimaResposta;
if Copy(Resposta, pos('PESO', Resposta)-2, 1) = ' ' then
Resposta := 'I'
else if Copy(Resposta, pos(':', Resposta)+1, 1) = '-' then
Resposta := 'N';
if Length(Resposta) > 1 then
begin
Quantos := (pos('g', Resposta)-2);
//Quantos := Quantos - (pos(':', Resposta)+1);
Quantos := Quantos - (pos('N0', Resposta)+1);
//Resposta := Copy(Resposta, pos(':', Resposta)+2, Quantos); //123456
Resposta := Copy(Resposta, pos('N0', Resposta)+2, Quantos); //123456
end;
{ Ajustando o separador de Decimal corretamente }
Resposta := StringReplace(Resposta, '.', DecimalSeparator, [rfReplaceAll]);
Resposta := StringReplace(Resposta, ',', DecimalSeparator, [rfReplaceAll]);
try
if pos(DecimalSeparator, Resposta) > 0 then { Já existe ponto decimal ? }
fpUltimoPesoLido := StrToFloat(Resposta)
else
fpUltimoPesoLido := StrToInt(Resposta) / 1000 ;
except
case Trim(Resposta)[1] of
'I' : fpUltimoPesoLido := -1 ; { Instavel }
'N' : fpUltimoPesoLido := -2 ; { Peso Negativo }
//'S' : fpUltimoPesoLido := -10 ; { Sobrecarga de Peso }
else
fpUltimoPesoLido := 0 ;
end;
end;
except
{ Peso não foi recebido (TimeOut) }
fpUltimoPesoLido := -9;
end ;
end;
Teste efetuado na Balança Urano POPz US 20/2 POP LGHT