Spécial cahiers de vacances
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Spécial cahiers de vacances
Spécial cahiers de vacances.
Je voulais proposer des petits problèmes d’automatismes dont l’intérêt réside dans le fait que il ni as qu’une solution qui est la bonne
et que les milliers d’autres solutions risquent d’être du type usine à gaz.
Ci dessous exposé du problème N°1 , solution au prochain numéro, LOL
Cliquer dessus pour agrandir l'image
Je voulais proposer des petits problèmes d’automatismes dont l’intérêt réside dans le fait que il ni as qu’une solution qui est la bonne
et que les milliers d’autres solutions risquent d’être du type usine à gaz.
Ci dessous exposé du problème N°1 , solution au prochain numéro, LOL
Cliquer dessus pour agrandir l'image
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Spécial cahiers de vacances
Salut Itasoft,
Tu poses mal le problème ... tout dépend de ce que tu veux voir ...
FDC sur les éjecteurs ou tempo ?
tolérance sur les distances D1 à D4 ?
capacité max en fûts du convoyeur ?
gestion des congestions ?
alarmes timeout ?
ça peut vite devenir une usine à gaz
bref, tu veux un programme opérationnel (dans ce cas il faut définir toutes les variables IN / OUT et constantes) ou juste un algorithme (façon de traiter le problème) ?
@+
Tu poses mal le problème ... tout dépend de ce que tu veux voir ...
FDC sur les éjecteurs ou tempo ?
tolérance sur les distances D1 à D4 ?
capacité max en fûts du convoyeur ?
gestion des congestions ?
alarmes timeout ?
ça peut vite devenir une usine à gaz
bref, tu veux un programme opérationnel (dans ce cas il faut définir toutes les variables IN / OUT et constantes) ou juste un algorithme (façon de traiter le problème) ?
@+
Re: Spécial cahiers de vacances
je me lance sur la partie algo, j'ai la flemme pour la partie code :
il faut:
* un tableau qui recueillera le compteur impulsion du codeur au moment de la détection : TAB_POS[0..99] OF UDINT par exemple
* un tableau qui recueillera le n° de box de destination au moment de la détection : TAB_BOX[0..99] OF INT par exemple
* un indice pour ces 2 tableaux par station (soit 5 stations => éjecteurs 1 à 4 + station d'entrée) - au départ, les 5 indices sont égaux à 0 (valeur initiale, après le système se gère tout seul hors procédure de vidange du convoyeur)
principe :
sur détection cellule passage (front montant de l'entrée filtrée) : écriture dans les tableaux d'un nouveau fût
soit:
pour chaque éjecteur:
en remplaçant n par 1,2,3 et 4 ...
c'est un registre à décalage sur évènement avec buffer tournant
@+
il faut:
* un tableau qui recueillera le compteur impulsion du codeur au moment de la détection : TAB_POS[0..99] OF UDINT par exemple
* un tableau qui recueillera le n° de box de destination au moment de la détection : TAB_BOX[0..99] OF INT par exemple
* un indice pour ces 2 tableaux par station (soit 5 stations => éjecteurs 1 à 4 + station d'entrée) - au départ, les 5 indices sont égaux à 0 (valeur initiale, après le système se gère tout seul hors procédure de vidange du convoyeur)
principe :
sur détection cellule passage (front montant de l'entrée filtrée) : écriture dans les tableaux d'un nouveau fût
soit:
Code : Tout sélectionner
TAB_POS[INDEX_CELLULE] := I_CODEUR;
TAB_BOX[INDEX_CELLULE] := I_BOX;
INDEX_CELLULE := (INDEX_CELLULE + 1) MOD 100;
Code : Tout sélectionner
IF INDEX_EJECTEURn <> INDEX_CELLULE THEN
IF (I_CODEUR - TAB_POS[INDEX_EJECTEURn]) > (DIST_EJECTEURn + DIST_TOLERANCE) THEN
INDEX_EJECTEURn := (INDEX_EJECTEURn + 1) MOD 100; (* le fût à dépasser l'éjecteur *)
ELSIF (I_CODEUR - TAB_POS[INDEX_EJECTEURn]) > (DIST_EJECTEURn - DIST_TOLERANCE) AND TAB_BOX[INDEX_EJECTEURn] = n THEN
(* Lancer ici le cycle d'éjection *)
END_IF
END_IF
c'est un registre à décalage sur évènement avec buffer tournant
@+
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Spécial cahiers de vacances
@steph
FDC sur les éjecteurs ou tempo ? tempo 1s
capacité max en fûts du convoyeur ? 100 futs
pour le reste ça ne rentre pas en compte, c'est un exercice ce qui compte c'est le principe retenu
FDC sur les éjecteurs ou tempo ? tempo 1s
capacité max en fûts du convoyeur ? 100 futs
pour le reste ça ne rentre pas en compte, c'est un exercice ce qui compte c'est le principe retenu
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- djé
- Dieu du process
- Messages : 776
- Inscription : 20 oct. 2015, 09:55
- Localisation : Bretagne, Pays de la Loire, Nantes
Re: Spécial cahiers de vacances
Salut,
Intéressant comme truc:
Déjà pour moi les distance D1 à D4 ne sont utiles que d'un point de vue mécanique, ce qui compte c'est le "pas" du convoyeur appellons le "D" (Pas = distance entre deux futs).
Ce vers quoi je m'orienterai:
un table (type FIFO)de suivi de n (nombre maxi de futs sur le convoyeur) mots que l'on décale à chaque nouveau pas. Ici on suit les numéros de Box.
Ensuite il faut connaitre simplement les positions (le rang dans la table) R1 R2 R3 R4 des vérins d'éjection.
Si on prend l'exemple du schéma:
On aura une table de suivi de 14 Mots avec :
R1:Rang verin Box1=2
R2:Rang verin Box2=6
R3:Rang verin Box3=10
R4:Rang verin Box4=14
A la fin de chaque pas on vérifie la valeur enregistrée dans la table aux rang 1 à 4; si la valeur correspond au rang, on éjecte, on met "Zéro" dans la valeur.
If TableSuivi[R1]= 1 then Sortieverin1
If TableSuivi[R2]= 2 then Sortieverin2
If TableSuivi[R3]= 3 then Sortieverin3
If TableSuivi[R4]= 4 then Sortieverin4
Simple.
Intéressant comme truc:
Déjà pour moi les distance D1 à D4 ne sont utiles que d'un point de vue mécanique, ce qui compte c'est le "pas" du convoyeur appellons le "D" (Pas = distance entre deux futs).
Ce vers quoi je m'orienterai:
un table (type FIFO)de suivi de n (nombre maxi de futs sur le convoyeur) mots que l'on décale à chaque nouveau pas. Ici on suit les numéros de Box.
Ensuite il faut connaitre simplement les positions (le rang dans la table) R1 R2 R3 R4 des vérins d'éjection.
Si on prend l'exemple du schéma:
On aura une table de suivi de 14 Mots avec :
R1:Rang verin Box1=2
R2:Rang verin Box2=6
R3:Rang verin Box3=10
R4:Rang verin Box4=14
A la fin de chaque pas on vérifie la valeur enregistrée dans la table aux rang 1 à 4; si la valeur correspond au rang, on éjecte, on met "Zéro" dans la valeur.
If TableSuivi[R1]= 1 then Sortieverin1
If TableSuivi[R2]= 2 then Sortieverin2
If TableSuivi[R3]= 3 then Sortieverin3
If TableSuivi[R4]= 4 then Sortieverin4
Simple.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Re: Spécial cahiers de vacances
un fut à la fois ou à la chaîne?
La pile la plus utilisée: la pile GIGO. Bien plus souvent que les FIFO ou LIFO.
Garbage in, garbage out!
Garbage in, garbage out!
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Spécial cahiers de vacances
@francisco,
à la chaîne évidement sinon ça serait trop simple, LOL
à la chaîne évidement sinon ça serait trop simple, LOL
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- maxpeigne
- Créateur de langage
- Messages : 713
- Inscription : 11 oct. 2015, 17:31
- Localisation : Nord pas de calais
Re: Spécial cahiers de vacances
Sympa comme truc!
Voila ma solution:
Ca se passe en 3 trois:
Voila ma solution:
Code : Tout sélectionner
(* ~~~~~~~~~ GESTION DES TABLEAUX DE DEST. DES VERINS ~~~~~~~~~ *)
IF RE Capteurentree AND Destinationbox=1 THEN
%MW100[Indexbox1]:=Distancecodeur+D1;
Indexbox1:=Indexbox1+1;
END_IF;
(* ... Etc pour les trois autres ... *)
(* ~~~~~~~~~ GESTION DES ODRES DE MARCHE DES VERINS ~~~~~~~~~ *)
IF Distancecodeur>%MW100 THEN
Ordreverin1:=TRUE;
%MW100:99:=%MW101:99;
Indexbox1:=Indexbox1-1;
END_IF;
(* ... Etc pour les trois autres ... *)
(* ~~~~~~~~~ PILOTAGE DES VERINS ~~~~~~~~~ *)
IF Ordreverin1 THEN
START %MN1;
Pilotageverin1:=%MN1.R;
Ordreverin1:=FALSE;
END_IF;
(* ... Etc pour les trois autres ... *)
- On passe du fut devant le capteur, je mémorisation dans un tableau (%MW100:100 pour le 1, %MW200:100 pour le 2...) propre à chaque vérin la distance jusqu'a sa destination (absolue).
- Lorsque la distance du codeur est égale à la destination, j'envoie un ordre de marche du verin en question, je décalle mon tableau et réajuste mon index.
- Puis j'active mon verin pdt 1 secondes.
http://automacile.fr - Site et tutoriels sur l'arduino.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Spécial cahiers de vacances
@ Maxpeigne
Ta solution marche mais si on a 50 Boxs ça fait beaucoup de lignes de programme à écrire
Ta solution marche mais si on a 50 Boxs ça fait beaucoup de lignes de programme à écrire
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Spécial cahiers de vacances
slts,
Solution :
Le code reste le même qu’il y ai 4 Boxs ou 100 Box
Cliquer dessus pour agrandir l'image
Solution :
Le code reste le même qu’il y ai 4 Boxs ou 100 Box
Cliquer dessus pour agrandir l'image
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr