Spécial cahiers de vacances

Trucs-Astuces-Micro cours sur les automatismes industriels
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Spécial cahiers de vacances

Message par itasoft »

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
Archi_Codeur.JPG
Automaticien privé (de tout)
itasoft@free.fr
steph68
Codeur fou
Codeur fou
Messages : 268
Inscription : 21 oct. 2015, 08:23

Re: Spécial cahiers de vacances

Message par steph68 »

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 :mrgreen:

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) ?

@+
steph68
Codeur fou
Codeur fou
Messages : 268
Inscription : 21 oct. 2015, 08:23

Re: Spécial cahiers de vacances

Message par steph68 »

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:

Code : Tout sélectionner

TAB_POS[INDEX_CELLULE] := I_CODEUR;
TAB_BOX[INDEX_CELLULE] := I_BOX;

INDEX_CELLULE := (INDEX_CELLULE + 1) MOD 100;
pour chaque éjecteur:

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
en remplaçant n par 1,2,3 et 4 ...

c'est un registre à décalage sur évènement avec buffer tournant

@+
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Spécial cahiers de vacances

Message par itasoft »

@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
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
djé
Dieu du process
Dieu du process
Messages : 776
Inscription : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Spécial cahiers de vacances

Message par djé »

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.
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 ...
Francisco
Codeur fou
Codeur fou
Messages : 214
Inscription : 21 oct. 2015, 09:13
Localisation : LE MANS

Re: Spécial cahiers de vacances

Message par Francisco »

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!
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Spécial cahiers de vacances

Message par itasoft »

@francisco,
à la chaîne évidement sinon ça serait trop simple, LOL
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
maxpeigne
Créateur de langage
Créateur de langage
Messages : 712
Inscription : 11 oct. 2015, 17:31
Localisation : Nord pas de calais

Re: Spécial cahiers de vacances

Message par maxpeigne »

Sympa comme truc!

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 ... *)
Ca se passe en 3 trois:
  • 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.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Spécial cahiers de vacances

Message par itasoft »

@ Maxpeigne
Ta solution marche mais si on a 50 Boxs ça fait beaucoup de lignes de programme à écrire
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Spécial cahiers de vacances

Message par itasoft »

slts,
Solution :
Le code reste le même qu’il y ai 4 Boxs ou 100 Box

Cliquer dessus pour agrandir l'image
solutionCodeur2.JPG
Automaticien privé (de tout)
itasoft@free.fr
Répondre