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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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" <admin.tr@free.fr> a écrit dans le message de news:
ujAO9nMWHHA.4796@TK2MSFTNGP05.phx.gbl...
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.
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.
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. > >
Bonjour et Merci Bob pour tes explications.
Dès que possible je mets en application tout cela.
Encore Merci
et
Bon week-end.
"Bob" <avisiter@free.fr> a écrit dans le message de news:
45f433d6$0$23653$426a74cc@news.free.fr...
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" <admin.tr@free.fr> a écrit dans le message de news:
ujAO9nMWHHA.4796@TK2MSFTNGP05.phx.gbl...
> 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.
>
>
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. > >