Fórum Porta Serial Lenta #356156
28/03/2008
0
Eu tenho que enviar +- 20 comandos por segundo e o componente não ta ta suportando essa demanda, desses 20 só envia 10 +-.
Já tentei vários componentes de porta.
Mas nenhum funciona rápido o suficiente.
Eu verifiquei usando um programa proprio da empresa do hardware para testar e no programa deles envia mais de 20 tranquilamente.
O que pode está acontecendo?
Obrigado desde já.
Rudá
Curtir tópico
+ 0Posts
28/03/2008
Edilcimar
a) computador
b) da forma como acessa o processo
c) da forma como envia o processo
d) da forma como desenvolveu o processo
e) outras
Gostei + 0
29/03/2008
Rudá
Acho que não seja o computador já que o próprio programa da Empresa funciona.
Então acho que seja como eu estou fazendo como faço para acessar.
Estou usando atualmente o Componente TSerialPort.
Eu me conecto a porta serial com essas configuracoes:
Envio usando o comando o Componente.
Então criei uma Theard.
Quando dou o Create ele inicia e espera a Section liberar quando liberar ele envia e espera 50ms ai a outra Theard que foi criada envia e espera mais 50ms e com isso a cada 50ms envia um comando para a porta serial formando 20 comandos em 1 segundo.
Já tentei colocar 10 comandos em um segundo e nada de ele enviar tudo.
Gostei + 0
29/03/2008
Kroki
Gostei + 0
29/03/2008
Rudá
TEnviarThread = class(TThread)
private
FDado: String;
protected
procedure Execute(); override;
public
constructor Create(Dado: String);
end;
var
Form1: TForm1;
EnviarThreadSection: TCriticalSection;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
EnviarThreadSection:= TCriticalSection.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:= 1 to 20 do
TEnviarThread.Create(´Comando ´+IntToStr(i));
end;
constructor TEnviarThread.Create(Dado: String);
begin
inherited Create(False);
Priority:= tpNormal;
FreeOnTerminate:= True;
FDado:= Dado;
end;
procedure TEnviarThread.Execute();
begin
EnviarThreadSection.Enter;
Form1.PortaSerial.SendString(Dado);
Sleep(50);
EnviarThreadSection.Leave;
end;Gostei + 0
29/03/2008
Kroki
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i:= 1 to 20 do TEnviarThread.Create(´Comando ´+IntToStr(i)); Application.ProcessMessages; end
Gostei + 0
31/03/2008
Rodc
Em C++ eu uso o código abaixo quando preciso pausar 50ms sem perder muito tempo, como o Sleep() faz.
clock_t begin;// Declaração da variável do tipo clock_t begin = clock(); // begin recebe o clock atual (valor em ms) while (clock() - begin < 50);// fica em loop enquando não passar 50ms
Não sei no Delphi qual a função que retorna o tempo atual, nem sei se existe o tipo clock_t. Mas boa pesquisa.
Outra questão: você não pode reduzir o tempo de 50ms para um tempo que faça os 20 comandos serem enviados em um segundo?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)