ProfnovA a écrit : ↑23 mai 2019, 11:42 tu fais 2 boucles imbriquée:
pistolet1 va de 1 à n-1
pistolet2 va de p1+1 à n
for p1 =1 to n-1
avance le pistolet à la position p1
for p2 =p1+1 to n
avancer le pistolet à la position p2
faire le test
next
next
un truc du genre
si tu veux absolument faire du grafcet, il faut gérer les 2 compteurs dans les étapes
Stage - Automatisation d'une série de test diélectrique
Re: Stage - Automatisation d'une série de test diélectrique
-
- Asservi son premier moteur
- Messages : 25
- Inscription : 16 mai 2019, 14:29
Re: Stage - Automatisation d'une série de test diélectrique
Merci pour vos réponses seulement, je suis absolument incapable de retranscrire le bout de code de ProfnovA en grafcet.
Pour ce qui est du registre à décalage, cette solution me parait plus simple, cependant j'ai quelques difficultés à comprendre son fonctionnement.
Malgré mes recherches sur l'aide de soMachine, je comprends pas comment je peux faire pour décaler un bit d'un mot binaire, par exemple si j'ai le mot suivant 1000 0000 0000 j'aimerais que sur chaque front montant de l'étape %Xi ça décale le '1' vers la droite donc : 0100 0000 0000 ect ect.
Je comprends comment le bloc de registre à décalage fonctionne : 3 entrées :
Une pour décaler à droite, l'autre à gauche et enfin pour reset, mais je sais pas sur quel mot binaire ça agit
Pour ce qui est du registre à décalage, cette solution me parait plus simple, cependant j'ai quelques difficultés à comprendre son fonctionnement.
Malgré mes recherches sur l'aide de soMachine, je comprends pas comment je peux faire pour décaler un bit d'un mot binaire, par exemple si j'ai le mot suivant 1000 0000 0000 j'aimerais que sur chaque front montant de l'étape %Xi ça décale le '1' vers la droite donc : 0100 0000 0000 ect ect.
Je comprends comment le bloc de registre à décalage fonctionne : 3 entrées :
Une pour décaler à droite, l'autre à gauche et enfin pour reset, mais je sais pas sur quel mot binaire ça agit
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Stage - Automatisation d'une série de test diélectrique
slts,
voir les instructions SHL et SHR
voir les instructions SHL et SHR
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Stage - Automatisation d'une série de test diélectrique
Bon en grafcet voila une idée de ce que ça pourrait donner
-
- Asservi son premier moteur
- Messages : 25
- Inscription : 16 mai 2019, 14:29
Re: Stage - Automatisation d'une série de test diélectrique
Merci pour vos réponses.
J'ai donc opté pour la solution des registres à décalages, sauf que, petit problème en utilisant ces registres je fais :
---------- première boucle ----------
---------- première sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0100 0000 0000 ... 0000
---------- deuxième sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0010 0000 0000 ... 0000
.
.
.
---------- nième sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0000 0000 0000 ... 0001
.
.
.
---------- deuxième boucle ----------
---------- première sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0100 0000 0000 ... 0000
---------- deuxième sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0010 0000 0000 ... 0000
.
.
.
---------- nième sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0000 0000 0000 ... 0001
ect ect jusqu'à :
borne 1 : 0000 0000 0000 ... 0001
borne 2 : 0000 0000 0000 ... 0001
Le problème étant qu'avec ceci je ne gère absolument pas les répétitions et parfois même les superposition, car comme dit précédemment il est inutile de tester borne 1 et 6 puis borne 6 et 1 par exemple, avec ce système il y'a même des cas ou on à deux fois le même mot pour les deux bornes et c'est problématique.
J'ai pas mal réfléchie mais je n'arrive pas à trouver un moyen d'éviter ces répétition toujours en utilisant le système des registres à décalage, auriez vous des idées à me soumettre ?
Merci par avance.
J'ai donc opté pour la solution des registres à décalages, sauf que, petit problème en utilisant ces registres je fais :
---------- première boucle ----------
---------- première sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0100 0000 0000 ... 0000
---------- deuxième sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0010 0000 0000 ... 0000
.
.
.
---------- nième sous-boucle ----------
borne 1 : 1000 0000 0000 ... 0000
borne 2: 0000 0000 0000 ... 0001
.
.
.
---------- deuxième boucle ----------
---------- première sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0100 0000 0000 ... 0000
---------- deuxième sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0010 0000 0000 ... 0000
.
.
.
---------- nième sous-boucle ----------
borne 1 : 0100 0000 0000 ... 0000
borne 2: 0000 0000 0000 ... 0001
ect ect jusqu'à :
borne 1 : 0000 0000 0000 ... 0001
borne 2 : 0000 0000 0000 ... 0001
Le problème étant qu'avec ceci je ne gère absolument pas les répétitions et parfois même les superposition, car comme dit précédemment il est inutile de tester borne 1 et 6 puis borne 6 et 1 par exemple, avec ce système il y'a même des cas ou on à deux fois le même mot pour les deux bornes et c'est problématique.
J'ai pas mal réfléchie mais je n'arrive pas à trouver un moyen d'éviter ces répétition toujours en utilisant le système des registres à décalage, auriez vous des idées à me soumettre ?
Merci par avance.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Stage - Automatisation d'une série de test diélectrique
slts,
ya pas de répétitions
ya pas de répétitions
Dernière modification par itasoft le 24 mai 2019, 16:38, modifié 2 fois.
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
- Créateur de langage
- Messages : 732
- Inscription : 27 avr. 2017, 11:11
- Localisation : Loin de la civilisation
Re: Stage - Automatisation d'une série de test diélectrique
Un début d'idée que je vais écrire en C (mettons qu'il y ait 4 bornes à tester)
Voilà... en mettant toujours au départ de ta boucle de test la borne B au même niveau que la borne A, tu ne refais pas les bornes d'avant. Et tu décalles tout de suite après ton registre B de 1 donc tu ne fais pas de test type "borne 2 + borne 2".
Par contre il faut bien penser à mettre ton comptage de ta boucle de test à la bonne valeur tout de suite : t'en ait au test de la borne 6 tu lui mets la valeur 5. Le plus simple pour ça c'est de lui mettre directement la valeur de ton comptage de ta boucle primaire.
Et en grafcet ça doit donner un truc similaire et bien plus simple que tes 1500 boucles...
Code : Tout sélectionner
For (R =0; R <4; R++)
{
If(R=0)
{
borne A : 1000
}
For (S = 0; S< 4; S++)
{
If (S = 0)
{
borne B = borne A;
S = R; *-
}
borne B = décallage de 1;
Test;
}
Borne A = décallage de 1;
}
Par contre il faut bien penser à mettre ton comptage de ta boucle de test à la bonne valeur tout de suite : t'en ait au test de la borne 6 tu lui mets la valeur 5. Le plus simple pour ça c'est de lui mettre directement la valeur de ton comptage de ta boucle primaire.
Et en grafcet ça doit donner un truc similaire et bien plus simple que tes 1500 boucles...
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Stage - Automatisation d'une série de test diélectrique
Re !
Ton mot 'Mobile' est égal au Mot FIXE décalé de 1 pour la première boucle
Donc par exemple
ETAPE 1 :
Initialiser valeurs pour test
FIXE := 1000 0000 0000 0000
ETAPE 2
Mobile := SHR(FIXE,1)
ETAPE 3
TEST
si pas fin de MOBILE alors ETAPE 4
PROCHAIN TEST MOBILE
MOBILE := SHR(MOBILE,1)
Boucle sur Etape 3
si fin de mobile et pas fin de FIXE alors ETAPE 4
FIXE:=SHR(FIXE,1)
Retour sur ETAPE 2
si fin de MOBILE et FIN DE FIXE alors ETAPE 5
FIN DE TEST
La fin est
Fixe 0000 0000 0000 00010
Mobile 0000 0000 0000 0001
La fin de MOBILE est bit 0 MOBILE =1 (soit MOBILE = 1)
La fin de fixe est Bit 1 FIXE = 1 ( oit FIXE =2)
Je vois pas ou sont les répétitions.
Ton mot 'Mobile' est égal au Mot FIXE décalé de 1 pour la première boucle
Donc par exemple
ETAPE 1 :
Initialiser valeurs pour test
FIXE := 1000 0000 0000 0000
ETAPE 2
Mobile := SHR(FIXE,1)
ETAPE 3
TEST
si pas fin de MOBILE alors ETAPE 4
PROCHAIN TEST MOBILE
MOBILE := SHR(MOBILE,1)
Boucle sur Etape 3
si fin de mobile et pas fin de FIXE alors ETAPE 4
FIXE:=SHR(FIXE,1)
Retour sur ETAPE 2
si fin de MOBILE et FIN DE FIXE alors ETAPE 5
FIN DE TEST
La fin est
Fixe 0000 0000 0000 00010
Mobile 0000 0000 0000 0001
La fin de MOBILE est bit 0 MOBILE =1 (soit MOBILE = 1)
La fin de fixe est Bit 1 FIXE = 1 ( oit FIXE =2)
Je vois pas ou sont les répétitions.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Stage - Automatisation d'une série de test diélectrique
@philou77, c'est juste peut pas y avoir de répétitions
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Stage - Automatisation d'une série de test diélectrique
@Itasoft,
Dans sa façon de programmer, oui il en y a des répétitions
Dans la mienne, c'est moins sûr !
Dans sa façon de programmer, oui il en y a des répétitions
Dans la mienne, c'est moins sûr !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !