Vous utilisez un navigateur non à jour ou ancien. Il ne peut pas afficher ce site ou d'autres sites correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Sub Main()
Dim nbmax_input As Long 'nb total d'entrée à compter avant déclenchment
Dim duree_maxi As Integer 'nb de secondes maxi avant echec
Dim nbinput As Long 'nb d'entrées comptées
Dim Ok As Boolean 'a true si tout s'est bien passé
Dim t1 As Double
message "comptage des rouleaux en sortie" 'efface les messages
Do While (Timer()-t1) < duree_maxi 'boucler tant que le temps n'est pas dépassé
If IsActive(Input4) Then 'si entrée active, ajoute 1 au compteur
nbinput = nbinput + 1
sleep(500) 'évite un comptage multiple par rebond du contact (ou si reste trop longtemps enfoncé)
End If
If nbinput = nbmax_input Then 'nb d'entrée attendues atteint
Ok = true
ActivateSignal (output3)
ActivateSignal (output2)
Exit Do 'sort de la boucle
End If
sleep(100)
Loop
'affichage.
If Ok = false Then
code "M1"
ActivateSignal (output1)
message "temps dépassé"
Je suppose que la limite de temps doit être réglée largement supérieure au temps nécessaire pour faire ton cycle, ce ne doit être qu'une sécurité si quelque chose bloque.
est ce qu il y a pas une fonction qui detecte le passage d un etat haut, a un etat bas ou vis versa?
Sub Main()
Dim nbmax_input As Long 'nb total d'entrée à compter avant déclenchment
Dim duree_maxi As Integer 'nb de secondes maxi avant echec
Dim nbinput As Long 'nb d'entrées comptées
Dim Ok As Boolean 'a true si tout s'est bien passé
Dim t1 As Double
message "comptage des rouleaux en sortie" 'efface les messages
Do While (Timer()-t1) < duree_maxi 'boucler tant que le temps n'est pas dépassé
If IsActive(Input4) Then 'si entrée active, ajoute 1 au compteur ifnotisactive(input4)then
nbinput = nbinput + 1
sleep(500) 'évite un comptage multiple par rebond du contact (ou si reste trop longtemps enfoncé)
End If
If nbinput = nbmax_input Then 'nb d'entrée attendues atteint
Ok = true
ActivateSignal (output3)
ActivateSignal (output2)
Exit Do 'sort de la boucle
End If
sleep(100)
Loop
'affichage.
If Ok = false Then
code "M1"
ActivateSignal (output1)
message "temps dépassé"
Else
message "cycle suivant"
End If
End Sub
est ce que comme ca, ca marche?
ps: j ai tester ca marche pas...normal
on est d accord que un comptage, si on le fait les yeux fermé, avec la main tendu, c est un etat haut, puis un etat bas, ca veut dire qu on passe au suivant
hors la: je ferme les yeux et tout les 0.1secondes, je touche le tapis ponctuellement, si j ai qq chose c est 1 comptage, si j ai rien, je continue
hors si jai toujours le meme rouleaux devant moi, je compte 4 fois le meme
j essaye juste de cogiter une macro ou l operateur si il decide de mettre 20m/mn ou 60m/mn sur le tapis, ne sera pas obligé d intervenir dans la macro,parce que il le fera pas
Non, je ne pense pas ; dans la partie en couleur, je pense qu'il ne faut pas une boucle If Then, mais une boucle do while/loop qui tourne jusqu'à ce que l'entrée 4 ne soit plus active avant de laisser le prog continuer.
Mais pour mieux comprendre, il me faudrait un synoptique de fonctionnement du système ... là c'est un peu flou pour moi
au debut je pense ouvrir le verin de sortie, lorsque les 4 capteurs de presence signal "plus de rouleaux", on referme,,et on ouvre l entrée en attendant les 4 rouleaux du premier etage suivant
hors en terme de timing, c est de la perte de temps
je voulais donc ouvrir la sortie, puis un leger decalage, j ouvre l entrée, une sonde en sortie (surelevée), compte le nombre de pile a passer devant, cette sonde ne detectera que les piles superieur à 1 rouleaux vue sa hauteur, des qu elle a compter le nombre 4, elle referme le convoyeur, et on passe au cycle d empilage suivant en attendant que les 4 premiers rouleaux du cycle suivant soit en place devant les 4 capteurs de position