[Unity] Compréhension Scrutation Langage ST

Forum traitant des automates industriels de marque Schneider - Telemecanique
cojac65
Première mise en service
Première mise en service
Messages : 58
Enregistré le : 13 sept. 2021, 21:14

[Unity] Compréhension Scrutation Langage ST

Message par cojac65 »

Bonjour. Voici mon problème, c’est un peu long et j’espère être suffisamment clair.

J'utilise un robot cartésien X,Y et Z( pour la descente et la montée de la pince). L'objectif de ce robot est de prendre un carton sur un tapis puis de le déposer sur une palette. Il peut déposer jusqu'à 6 cartons sur la palette en fonction d’une consigne opérateur.
Pour prendre le carton : X =800, Y = 560 et Z = 550 et ce sont toujours les même coordonnées.
J’appelle la fonction PRENDRE le robot se déplace en X et Y puis la pince descend en Z , saisie le carton et remonte.

Ensuite, j’appelle la fonction DEPOSE dont les paramètres seront différents en fonction du carton.
2: dépose Carton 1 X=200, Y=160, Z=1000
3: dépose Carton 2 X=200, Y=520, Z=1000
4: dépose Carton 3 X=90, Y=400, Z=550
5: dépose Carton 4 X=280, Y=400, Z=550
6: dépose Carton 5 X=200, Y=160, Z=0
7: dépose Carton 6 X=200, Y=520, Z=0

Voici le programme PRENDRE écrit dans Types FB Dérivés:
(* Prendre carton *)
If (* etapes=100 and*) ( ExC>=0 and ExC<=300 and EyC>=0 and EyC<=530 and EzC>=0 and EzC<=20(* CI robot*))then etapes:=101;
end_if;
IF etapes=101 and (ExC>=790 and ExC<=810 and EyC>=550 and EyC<=570 and EzC>=0 and EzC<=20) THEN
etapes:=102;
END_IF;
IF etapes=102 and (asp=TRUE and EzC>=540 and EzC<=560) THEN
etapes:=103;
END_IF;
IF etapes=103 THEN
etapes:=104;
END_IF;
IF etapes=104 and (asp=TRUE and EzC>=0 and EzC<=20) THEN
etapes:=105;
END_IF;

(* cde des sorties *)
IF etapes=101 THEN
(* Déplacement robot *)
QpX:= MOVE (IN := Xc);
QpY:= MOVE (IN := Yc);
QpZ:= MOVE (IN := Zhaut)(* = à zéro *);
END_IF;

(* Descente du bras *)
IF etapes=102 THEN
QpZ:= MOVE (IN := Zc)(* = à 550 *);
END_IF;

(* prendre carton *)
IF etapes=103 THEN
Qasp:= TRUE;
END_IF;

(* Remontée du bras *)
IF etapes=104 THEN
Qasp:= TRUE;
QpZ:= MOVE (IN := Zhaut);

CTU_1 (CU := 1(*BOOL*),

CV => Compteur_carton(*INT*)); (*incrémentation du compteur carton)

END_IF;

(* Prise finie quand on est à l'étape 105*)

Voici la fonction DEPOSE écrit aussi dans Types FB Dérivés:

(* Depose carton *)
If etape=105 then etape:=106;
end_if;

IF etape=106 and (Ex>=X-10 and Ex<=X+10 and Ey>=y-10 and Ey<=y+10 and Ez>=zhaut-10 and Ez<=zhaut+10 ) THEN
etape:=107;
END_IF;

IF etape=107 and (asp=TRUE and Ez>=Z-10 and Ez<=Z+10) THEN
etape:=108;
END_IF;
IF etape=108 THEN
etape:=109;
END_IF;
IF etape=109 and ( Ez>=zhaut-10 and Ez<=zhaut+10 ) THEN
etape:=110;
END_IF;

(* cde des sorties *)
(* Déplacement robot *)
IF etape=106 THEN
Qasp:= TRUE;
QdX:= MOVE (IN := X);
QdY:= MOVE (IN := Y);
QdZ:= MOVE (IN := Zhaut);(* = à zéro *);
END_IF;

(* Descente du bras *)
IF etape=107 THEN
QdZ:= MOVE (IN := Z);
Qasp:= TRUE;
END_IF;

(* lacher carton *)
IF etape=108 THEN
Qasp:= False;
END_IF;

(* Remontée du bras *)
IF etape=109 THEN
Qasp:= False;
QdZ:= MOVE (IN := Zhaut);
END_IF;

Voici maintenant le programme du robot ( pour un seul carton)écrit en ST dans une section MAST :
(* Cde du robot *)
(* CI robot assez large: Z en haut et X et Y au dessus de la palette *)
case correspondante:
1:Prendre X=800, Y=560, Z=550
2: dépose Carton 1 X=200, Y=160, Z=1000
3: dépose Carton 2 X=200, Y=520, Z=1000
4: dépose Carton 3 X=90, Y=400, Z=550
5: dépose Carton 4 X=280, Y=400, Z=550
6: dépose Carton 5 X=200, Y=160, Z=0
7: dépose Carton 6 X=200, Y=520, Z=0
*)

IF Nbr_carton <=Nbr_carton_Consigne and Nbr_carton_Consigne>0 and ( Sp(* palette en position SP*))THEN
Numero:=1;

CASE Numero OF
1: Prise_carton_5 (Xc := Xp(*INT*),
Yc := Yp(*INT*),
Zc := Zp(*INT*),
Zhaut := Z0(*INT*),
ExC := E_RO_X(*INT*),
EyC := E_RO_Y(*INT*),
EzC := E_RO_Z(*INT*),
asp := E_asp(*BOOL*),
etapes := etapes_grafect_robot(*INT*),
QpX => Q_RO_X(*INT*),
QpY => Q_RO_Y(*INT*),
QpZ => Q_RO_Z(*INT*),
Compteur_carton => Nbr_carton(*INT*),

Qasp => Q_RO_ASP(*BOOL*));H1_R:=1;IF Nbr_carton=1 THEN Numero:=2;

END_IF;

2: Depose_Carton_7 (X := 200(*INT*),
Y := 160(*INT*),
Z := 1000(*INT*),
asp := E_asp(*BOOL*),
Zhaut := Z0(*INT*),
EX := E_RO_X(*INT*),
EY := E_RO_Y(*INT*),
EZ := E_RO_Z(*INT*),
etape := etapes_grafect_robot(*INT*),
QdX => Q_RO_X(*INT*),
QdY => Q_RO_Y(*INT*),
QdZ => Q_RO_Z(*INT*),
Qasp => Q_RO_ASP(*BOOL*));

END_CASE;

ELSE
(* Evacué palette *)
Nbr_carton:=0;

END_IF;


La prise du carton se fait correctement mais ensuite le robot ne bouge pas pour aller déposer le carton.
Les sorties QpX, QpY et QpZ gardent les valeurs de la fonction Prendre et non pas les paramètres de la fonction DEPOSE.
Comme si j’étais encore en case 1 ou que je scruté encore la fonction PRENDRE et pourtant je passe bien en case 2. Il faudrait peut être « désactivé » la fonction PRENDRE pour que QpX, QpY et QpZ prennet les valeurs de la fonction DEPOSE.
Je souhaite faire ce programme en Langage ST et non en LD .
J’y ai passé déjà pas mal d’heures. Il doit me manquer un truc mais quoi ????

Merci beaucoup pour votre aide
prof ....donc euh....sais un peu tout mais ne maitrise pas grand chose
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1572
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: [Unity] Compréhension Scrutation Langage ST

Message par MiGaNuTs »

Bonjour,

Pourrait tu, stp, mettre tes extraits de programme entre des balises [_code] et [/_code] ?
Parce que la c'est vraiment très difficile a lire.
Cedric39
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 133
Enregistré le : 05 déc. 2015, 09:47

Re: [Unity] Compréhension Scrutation Langage ST

Message par Cedric39 »

Bonjour, c'est assez indigeste a lire, alors ca m'as intéressé :lol:

déja quand on lit cela :
"IF etapes=103 THEN
etapes:=104;
END_IF;"

on se dit que l'étape 103 est une réserve ?

sauf que plus bas, une sortie est associée
"(* prendre carton *)
IF etapes=103 THEN
Qasp:= TRUE;
END_IF;"

a mon avis "etapes" n'est jamais egal a 103.

Sinon quand tu est bloqué, étape est égal a combien ? Tes positions X, Y et Z sont a combien ?

J'ai pas bien compris ce qui est comparé ici. Je pensais que c'était les positions:
If (* etapes=100 and*) ( ExC>=0 and ExC<=300 and EyC>=0 and EyC<=530 and EzC>=0 and EzC<=20

mais ici il y a pas le "C" dans les variables

IF etape=106 and (Ex>=X-10 and Ex<=X+10 and Ey>=y-10 and Ey<=y+10 and Ez>=zhaut-10 and Ez<=zhaut+10 )
Avatar du membre
chgui
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 126
Enregistré le : 20 oct. 2015, 08:05
Localisation : Amiens

Re: [Unity] Compréhension Scrutation Langage ST

Message par chgui »

Salut,

cela aurait été un peu plus simple en utilisant l'outil grafcet, idéal pour faire ce genre de choses!
J'aurai aussi regroupé les affectations de sorties, histoire de tout avoir au même endroit, et c'est plus sympa à lire, mais ce n'est que mon avis.
IF Nbr_carton <=Nbr_carton_Consigne and Nbr_carton_Consigne>0 and ( Sp(* palette en position SP*))THEN
Numero:=1;

CASE Numero OF
1: Prise_carton_5 (Xc := Xp(*INT*),
Yc := Yp(*INT*),
Zc := Zp(*INT*),
Zhaut := Z0(*INT*),
ExC := E_RO_X(*INT*),
EyC := E_RO_Y(*INT*),
EzC := E_RO_Z(*INT*),
asp := E_asp(*BOOL*),
etapes := etapes_grafect_robot(*INT*),
QpX => Q_RO_X(*INT*),
QpY => Q_RO_Y(*INT*),
QpZ => Q_RO_Z(*INT*),
Compteur_carton => Nbr_carton(*INT*),

Qasp => Q_RO_ASP(*BOOL*));H1_R:=1;IF Nbr_carton=1 THEN Numero:=2;

END_IF;

2: Depose_Carton_7 (X := 200(*INT*),
Y := 160(*INT*),
Z := 1000(*INT*),
asp := E_asp(*BOOL*),
Zhaut := Z0(*INT*),
EX := E_RO_X(*INT*),
EY := E_RO_Y(*INT*),
EZ := E_RO_Z(*INT*),
etape := etapes_grafect_robot(*INT*),
QdX => Q_RO_X(*INT*),
QdY => Q_RO_Y(*INT*),
QdZ => Q_RO_Z(*INT*),
Qasp => Q_RO_ASP(*BOOL*));

END_CASE;

ELSE
(* Evacué palette *)
Nbr_carton:=0;

END_IF;
J'avoue, que ces appels d'instruction, un CASE OF et un IF d'imbriquer, avec un deuxième conditionnement....?
Ton compteur carton (Nbr_carton) évolue?

Qasp => Q_RO_ASP(*BOOL*));H1_R:=1;IF Nbr_carton=1 THEN Numero:=2;

J’enlèverai le compteur carton et l'évolution (Numero) du case afin que cela soit plus facile à suivre.
Bonjour, c'est assez indigeste a lire, alors ca m'as intéressé :lol:
LOL pareil!!!
cojac65
Première mise en service
Première mise en service
Messages : 58
Enregistré le : 13 sept. 2021, 21:14

Re: [Unity] Compréhension Scrutation Langage ST

Message par cojac65 »

Merci pour le temps que vous consacré à mon problème. Voici les copies d'écran
Bloc ( juste pour vous montrer la structure) et programme Prendre
bloc prendre.jpg
Programme prendre.jpg
Bloc ( juste pour vous montrer la structure) et Programme dépose
Bloc_Depose.jpg
Programme_Depose.jpg
et le programme robot qui appelle ces fonctions
Programme robot.jpg

Le robot passe bien en case 2 mais les sorties restent bloqué aux valeurs X=800, Y=560 et Z=550 correspond au coordonnées pour PRENDRE le carton.
Merci
prof ....donc euh....sais un peu tout mais ne maitrise pas grand chose
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: [Unity] Compréhension Scrutation Langage ST

Message par philou77 »

Salut !

Pour chaque franchissement d’étape il te faut une transition et être sûr de ne pas franchir 2 étapes dans le même cycle automate.
Pas sûr qu’en écrivant :
If etapes=103
Then
Étapes=104
End if

Tu respectes les règles de bases du grafcet.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
cojac65
Première mise en service
Première mise en service
Messages : 58
Enregistré le : 13 sept. 2021, 21:14

Re: [Unity] Compréhension Scrutation Langage ST

Message par cojac65 »

Oui. Je suis d'accord avec toi. A la base, j'avais mis une tempo que j'ai enlevé....
Dans le fonctionnement, cela ne pose de problème. La fonction prendre fonctionne correctement. C'est après, lors de l'appel de la fonction dépose
prof ....donc euh....sais un peu tout mais ne maitrise pas grand chose
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7803
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: [Unity] Compréhension Scrutation Langage ST

Message par itasoft »

Suivre le conseil de chgui
sinon si tu veux faire un grafcet programmé il faut d'abord connaitre le principe du grafcet ce qui n'est pas ton cas
Automaticien privé (de tout)
itasoft@free.fr
Cedric39
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 133
Enregistré le : 05 déc. 2015, 09:47

Re: [Unity] Compréhension Scrutation Langage ST

Message par Cedric39 »

Vois a quelle valeur est ta variable "etapes_grafect_robot" :shock:
tu peu passer en ligne et voir dans tes fb ou cela bloque.
cojac65
Première mise en service
Première mise en service
Messages : 58
Enregistré le : 13 sept. 2021, 21:14

Re: [Unity] Compréhension Scrutation Langage ST

Message par cojac65 »

MiGaNuTs a écrit : 14 janv. 2024, 19:47 Bonjour,

Pourrait tu, stp, mettre tes extraits de programme entre des balises [_code] et [/_code] ?
Parce que la c'est vraiment très difficile a lire.
voilà c'est fait
prof ....donc euh....sais un peu tout mais ne maitrise pas grand chose
Répondre