GARANTIR DESCONTO

Fórum Eletronica digital e Delphi #277349

15/04/2005

0

Fiz um programa que conta peças (Piso Cerâmico). No inicio
da linha de esmaltação, foi colocado 1 sensor e no final da linha outro.
O sensor 2 é diminuido pelo sensor 1, que da o resultado da
quantidade de peças que quebrou durante o processo. Obs: Cada vez
que uma peça passa por baixo do sensor é encrementado + 1 em um
edit. O problema é que: Os canais todos abertos tem o valor em Hexa
decimal 3FFF, sensor 1 canal 1 quando acionado é 3FFE, sensor 2
canal 2 é 3FFD. Meu problema é quando os dois sensores, estão acionados
que o valor é 3FFC. Se as peças passacem exatamente ao mesmo tempo
embaixo de cada sensor eu só encrementava + 1 em cada sensor.
Mas elas variam. Quando da 3FFE sosinha incrementa sensor 1, 3FFD
sensor 2. Quando uma peça esta um pouca a frente da outra incremta
um sensor, e a outra chega e vai para 3FFC eu não posso encrementar
1 a cada sensor porque ja tinha incremetado 1 em um deles.

Teria que achar um jeito de fazer contar individualmente, os canais mesmo com Hexa 3FFC acionado que diz estar com os dois acionados.
Sei que é complicado para explicar. qualquer coisa de seu telefone
que é mais facil para entender. desde ja agradeço

Grato
juarezber@terra.com.br


Juarezber

Juarezber

Responder

Posts

15/04/2005

Massuda

...Os canais todos abertos tem o valor em Hexa decimal 3FFF, sensor 1 canal 1 quando acionado é 3FFE, sensor 2 canal 2 é 3FFD. Meu problema é quando os dois sensores, estão acionados que o valor é 3FFC. Se as peças passacem exatamente ao mesmo tempo embaixo de cada sensor eu só encrementava + 1 em cada sensor. Mas elas variam. Quando da 3FFE sosinha incrementa sensor 1, 3FFD sensor 2. Quando uma peça esta um pouca a frente da outra incremta um sensor, e a outra chega e vai para 3FFC eu não posso encrementar 1 a cada sensor porque ja tinha incremetado 1 em um deles....
Fiquei com a impressão que você está usando sensores ópticos (infravermelho?) normalmente fechados e que terá uma contagem quando o feixe é interrompido. Não ficou claro para mim como esses sensores estão ligados ao PC (provavelmente em uma placa de multi I/O ou na porta da impressora?), mas você está interpretando errado o sinal.

O tratamento dos sensores precisa ser algo mais ou menos assim:
const
  SENSOR1 = $1;
  SENSOR2 = $2;
var
  LeituraAtual: Word;
  UltimaLeitura: Word;
....
  // isto deve ser executado periodicamente

  LeituraAtual := ...obtem o estado atual dos sensores...;

  if ((UltimaLeitura and SENSOR1) = 1) and ((LeituraAtual and SENSOR1) = 0) then begin
    // conta uma peça no sensor 1
  end;

  if ((UltimaLeitura and SENSOR2) = 1) and ((LeituraAtual and SENSOR2) = 0) then begin
    // conta uma peça no sensor 2
  end;
  
  UltimaLeitura := LeituraAtual;
Imagino que você faz leitura periódica dos sensores. Dependendo da sua instalação física, talvez tenha problemas com acionamentos falsos; nesse caso teria de implementar um filtro de bouncing (debounce).


Responder

Gostei + 0

15/04/2005

Juarezber

Massuda, obrigado pela resposta. É uma placa externa ao PC e o sensor é
refletivo. Não te preocupas que ja consegui, la vai o codigo para quem
por ventura precisar:
E, Z, X, Y: Integer;
begin
E:= StrToInt(Edit2.Text);
X:= StrToInt(IntToStr(gw7000[5])); // 3FFF todas portas abertas
Edit99.Text:= IntToStr(X);
Z:= ($0001); // Mascara Hex
Edit999.Text:= IntToStr(Z);
Y:= (X) and (Z); // Iguala masca com porta
Edit9999.Text:= IntToStr(Y);

if Edit9999.Text = ´0´ then // se 0 acionado 1 desativado
Edit2.Text:= IntToStr(E + 1); // incrementa
end;

Grato
juarezber@terra.com.br


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar