n03l
23-11-2013, 15:17:57
Saludos, tengo un pequeño codigo que recorre una tabla y va enviando comandos a un dispositivo USB a traves del componente TComport.... el codigo que tengo me funsiona bien, ya que cada vez que envio un comando al disposivo USB hago una pausa de 10seg para esperar la respuesta del dispositivo.
el problema esque el tiempo de respuesta es variado es decir podria devolver la respuesta en 3eg o en 7seg y la manera como yo lo hago estoy perdiendo tiempo ya q espero 10seg para asegurar la respuesta q debo almacenar en una tabla
el codigo que uso es el siguiente
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
Application.ProcessMessages;
if FrmPrincipal.resp='ERROR' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
FrmPrincipal.Tabla.Post;
end //fin resp error
else
if FrmPrincipal.resp='OK' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
FrmPrincipal.Tabla.Post;
end; //fin resp ok
FrmPrincipal.Tabla.Next;
end;
Tambien e tratado de agregarle un while para de esta manera avanzar cuando se obtenga una respuesta pero no camina de esa forma
FrmPrincipal.resp:='';
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
// Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
Application.ProcessMessages;
while (FrmPrincipal.resp<>'') do
begin
if FrmPrincipal.resp='ERROR' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
FrmPrincipal.Tabla.Post;
end //fin resp error
else
if FrmPrincipal.resp='OK' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
FrmPrincipal.Tabla.Post;
end; //fin resp ok
end;//fin de while
FrmPrincipal.Tabla.Next;
end;
aver si alguien me echa una manito para optimizar este codigo. saludos
el problema esque el tiempo de respuesta es variado es decir podria devolver la respuesta en 3eg o en 7seg y la manera como yo lo hago estoy perdiendo tiempo ya q espero 10seg para asegurar la respuesta q debo almacenar en una tabla
el codigo que uso es el siguiente
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
Application.ProcessMessages;
if FrmPrincipal.resp='ERROR' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
FrmPrincipal.Tabla.Post;
end //fin resp error
else
if FrmPrincipal.resp='OK' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
FrmPrincipal.Tabla.Post;
end; //fin resp ok
FrmPrincipal.Tabla.Next;
end;
Tambien e tratado de agregarle un while para de esta manera avanzar cuando se obtenga una respuesta pero no camina de esa forma
FrmPrincipal.resp:='';
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
// Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
Application.ProcessMessages;
while (FrmPrincipal.resp<>'') do
begin
if FrmPrincipal.resp='ERROR' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
FrmPrincipal.Tabla.Post;
end //fin resp error
else
if FrmPrincipal.resp='OK' then
begin
FrmPrincipal.Tabla.Edit;
FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
FrmPrincipal.Tabla.Post;
end; //fin resp ok
end;//fin de while
FrmPrincipal.Tabla.Next;
end;
aver si alguien me echa una manito para optimizar este codigo. saludos