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
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
Curtir tópico
+ 0
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;
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
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
Clique aqui para fazer login e interagir na Comunidade :)