OVH Cloud OVH Cloud

Durée d'une impulsion ?

2 réponses
Avatar
Thierry
Bonjour,

je dispose de VB6 et d'une carte E/S avec 5 entrées numériques racordées à
des contacteurs destinés à compter des objets en mouvement.

Je veux récupérer la durée de l'impulsion des contacteurs, sachant qu'il est
possible d'en actionner plusieurs simultanément, afin d'éviter de fausses
activations par rebondissement du contacteur ou ralentissement du mouvement
des objets.

Je pense devoir utiliser le Timer et Interval mais de quelle manière ?

Merci d'avance à ceux qui me permettrons d'avancer dans mon projet.

Thierry.

Windows 2000 Pro et VB6.

2 réponses

Avatar
Bob
Bonjour Thierry,

Je ne sais pas quelle est la durée minimale pendant laquelle un contacteur
reste actionné, mais le principe pourrait être le suivant :

Pour chaque entrée :
- On définit un timer (timer1 pour l'entrée 1 par exemple)
- Dans les propriétés du timer, on paramètre "Interval0" soit 100
millisecondes et "enabledúlse".

- L'entrée 1 passe à 1 :
Quand le programme voit le passage à 1 de cette entrée, on démarre le
timer
en faisant "timer1.Enabled =True"

On attend l'échéance du timer1.
C'est le sub suivant qui sera exécuté quand le timer arrive à échéance :

Private Sub Timer1_Timer()
' Quand ce sub s'exécute, c'est que le timer est arrivé à échéance
' C'est à ce moment qu'il faut regarder si l'entrée est toujours à 1
' Si oui, on met une variable à 1 (exemple : capteur 1=1)
' c'est cette variable qui sera utilisée dans le programme pour effectuer
les actions attachées à l'entrée 1.
' elle sera l'image de l'entrée 1 à 1

if entree1=1 then
Capteur1 = 1
else
timer1.Enabled úlse
end if

End Sub

Cette solution filtre les passages par 0 de l'entrée pendant la phase
d'établissement du contact.
On suppose que l'entrée est stable au bout de 100ms.

La disparition de l'entrée 1, après la période de 100ms, doit effacer notre
variable et remettre le timer à 0.

Quand le programme voit l'entrée 1 passer par 0, on écrit :
If Capteur1 = 1 Then
Capteur1 = 0
timer1.Enabled úlse
end If

On pourrait aussi, pour détecter le retour à 0 de l'entrée, filtrer les
passages parasites par 0 en ajoutant un second timer si le besoin s'en fait
sentir.

On démarrerait un second timer au passage à 0 de l'entrée 1
If Capteur1 = 1 Then
timer2.Enabled =True
end If

A l'échéance du second timer, on regarde si l'entrée est réellement à 0.
Si oui, on efface la variable capteur et on remet les timers = false.

Private Sub Timer2_Timer()
' Quand ce sub s'exécute, c'est que le timer2 est arrivé à échéance
' C'est à ce moment qu'il faut remettre la variable à 0

if Capteur1=1 then
Capteur1 = 0
timer1.Enabled úlse
timer2.Enabled úlse
end if

End Sub

Bon courage, Bob

"Thierry" a écrit dans le message de news:

Bonjour,

je dispose de VB6 et d'une carte E/S avec 5 entrées numériques racordées à
des contacteurs destinés à compter des objets en mouvement.

Je veux récupérer la durée de l'impulsion des contacteurs, sachant qu'il
est
possible d'en actionner plusieurs simultanément, afin d'éviter de fausses
activations par rebondissement du contacteur ou ralentissement du
mouvement
des objets.

Je pense devoir utiliser le Timer et Interval mais de quelle manière ?

Merci d'avance à ceux qui me permettrons d'avancer dans mon projet.

Thierry.

Windows 2000 Pro et VB6.




Avatar
Thierry
Bonjour et Merci Bob pour tes explications.

Dès que possible je mets en application tout cela.

Encore Merci
et
Bon week-end.


"Bob" a écrit dans le message de news:
45f433d6$0$23653$
Bonjour Thierry,

Je ne sais pas quelle est la durée minimale pendant laquelle un contacteur
reste actionné, mais le principe pourrait être le suivant :

Pour chaque entrée :
- On définit un timer (timer1 pour l'entrée 1 par exemple)
- Dans les propriétés du timer, on paramètre "Interval0" soit 100
millisecondes et "enabledúlse".

- L'entrée 1 passe à 1 :
Quand le programme voit le passage à 1 de cette entrée, on démarre le
timer
en faisant "timer1.Enabled =True"

On attend l'échéance du timer1.
C'est le sub suivant qui sera exécuté quand le timer arrive à échéance :

Private Sub Timer1_Timer()
' Quand ce sub s'exécute, c'est que le timer est arrivé à échéance
' C'est à ce moment qu'il faut regarder si l'entrée est toujours à 1
' Si oui, on met une variable à 1 (exemple : capteur 1=1)
' c'est cette variable qui sera utilisée dans le programme pour effectuer
les actions attachées à l'entrée 1.
' elle sera l'image de l'entrée 1 à 1

if entree1=1 then
Capteur1 = 1
else
timer1.Enabled úlse
end if

End Sub

Cette solution filtre les passages par 0 de l'entrée pendant la phase
d'établissement du contact.
On suppose que l'entrée est stable au bout de 100ms.

La disparition de l'entrée 1, après la période de 100ms, doit effacer


notre
variable et remettre le timer à 0.

Quand le programme voit l'entrée 1 passer par 0, on écrit :
If Capteur1 = 1 Then
Capteur1 = 0
timer1.Enabled úlse
end If

On pourrait aussi, pour détecter le retour à 0 de l'entrée, filtrer les
passages parasites par 0 en ajoutant un second timer si le besoin s'en


fait
sentir.

On démarrerait un second timer au passage à 0 de l'entrée 1
If Capteur1 = 1 Then
timer2.Enabled =True
end If

A l'échéance du second timer, on regarde si l'entrée est réellement à 0.
Si oui, on efface la variable capteur et on remet les timers = false.

Private Sub Timer2_Timer()
' Quand ce sub s'exécute, c'est que le timer2 est arrivé à échéance
' C'est à ce moment qu'il faut remettre la variable à 0

if Capteur1=1 then
Capteur1 = 0
timer1.Enabled úlse
timer2.Enabled úlse
end if

End Sub

Bon courage, Bob

"Thierry" a écrit dans le message de news:

> Bonjour,
>
> je dispose de VB6 et d'une carte E/S avec 5 entrées numériques racordées


à
> des contacteurs destinés à compter des objets en mouvement.
>
> Je veux récupérer la durée de l'impulsion des contacteurs, sachant qu'il
> est
> possible d'en actionner plusieurs simultanément, afin d'éviter de


fausses
> activations par rebondissement du contacteur ou ralentissement du
> mouvement
> des objets.
>
> Je pense devoir utiliser le Timer et Interval mais de quelle manière ?
>
> Merci d'avance à ceux qui me permettrons d'avancer dans mon projet.
>
> Thierry.
>
> Windows 2000 Pro et VB6.
>
>