Création d'un programme en langage ST pour la configuration du Lexium
(Traduction du document original anglais)
Présentation
Cette section présente la procédure de configuration du Lexium. Elle s'applique uniquement lorsque l'étape Configuration_Lexium a été atteinte dans le grafcet (reportez-vous à la section Illustration de la section Move_Sequence).
Structure de programmation
La structure de programmation est la suivante :
Numéro de l'étape
Description de l'étape
0
Commande de démarrage du Lexium.
10
Si l'état du Lexium est Run, il passe en mode Prise de référence en cours à l'aide d'une fonction WRITE_VAR.
20
Si le résultat de la fonction WRITE_VAR est concluant, passez à l'étape 30.
30
Définition de la méthode Prise de référence à l'aide d'une fonction WRITE_VAR. Pour plus d'informations sur la méthode de mouvement de référence, reportez-vous au manuel de mise en œuvre du Lexium.
40
Si le résultat de la fonction WRITE_VAR est concluant, passez à l'étape 50.
50
Démarrage de la méthode Prise de référence en cours.
60
La prise de référence a été exécutée.
70
Le Lexium passe en mode Positionnement à l'aide d'une fonction WRITE_VAR.
80
Si le résultat de la fonction WRITE_VAR est concluant, la configuration du Lexium est terminée.
NOTE : Pour une déclaration correcte des variables, cliquez sur Outils/Options du projet/Extensions de langage, puis sélectionnez les options "Autoriser la représentation directe de tableaux" et "Autoriser les tableaux dynamiques".
Programme ST
Cet exemple est programmé en langage ST (littéral structuré). La section correspondante se trouve dans la même tâche maître (MAST).
CASE Lexium_Config_Step OF
0 : (* Le Lexium est en position "Prêt au démarrage" *)
IF (Lexium.statusword.0) THEN
Lexium.controlword:=Lexium_operation_enable;
Lexium_Config_Step:=10;
END_IF;
10 : (* Le Lexium est en position "Run" *)
IF (Lexium.statusword.2) THEN (* Mode de marche : prise de référence en cours *)
index_subindex:=16#00006060 (*Adresse du paramètre CANopen*)
%MW200:=6; (*Définition de la fonction Lexium : prise de référence en cours*)
%MW162:=5; (*Time out 500 ms*)
%MW163:=1; (*Longueur 1 octet*)
WRITE_VAR(ADDM('0.0.2.55'),'SDO',index_subindex,0,%MW200:1, %MW160:4);
Lexium_Config_Step:=20;
END_IF;
20: (* Tester le résultat de la fonction WRITE_VAR *)
IF (NOT %MW160.0) THEN (* Tester le bit d'activité*)
IF (%MW161=0) THEN (* échange correct*)
Lexium_Config_Step:=30;
END_IF;
END_IF;
30: (* Méthode de prise de référence : définir les dimensions *)
index_subindex:=16#00006098
%MW150:=35; (*Définition de la méthode de prise de référence*)
%MW252:=5; (*Time out 500 ms*)
%MW253:=1; (*Longueur 1 octet*)
WRITE_VAR(ADDM('0.0.2.55'),'SDO',index_subindex,0,%MW150:1, %MW250:4);
Lexium_Config_Step:=40;
40: (* Tester le résultat de la fonction WRITE_VAR *)
IF (NOT %MW250.0) THEN (* tester le bit d'activité*)
IF (%MW251=0) THEN (* échange correct*)
New_Setpoint :=0;
Lexium_Config_Step:=50;
END_IF;
END_IF;
50 : (* Déclencher la prise de référence *)
New_Setpoint :=1;
Lexium_Config_Step:=60;
60 :(* Prise de référence effectuée *)
IF (Target_Reached) AND (Homing_Done) THEN
New_Setpoint :=0;
Lexium_Config_Step:=70;
END_IF;
70: (* Mode de marche : positionnement *)
index_subindex:=16#00006060
%MW450:=1; (*Définition de la méthode de positionnement*)
%MW352:=5; (*Time out 500 ms*)
%MW353:=1; (*Longueur 1 octet*)
WRITE_VAR(ADDM('0.0.2.55'),'SDO',index_subindex,0,%MW450:1, %MW350:4);
Lexium_Config_Step:=80;
80: (* Tester le résultat de la fonction WRITE_VAR *)
IF (NOT %MW350.0) THEN (* tester le bit d'activité*)
IF (%MW351=0) THEN (* échange correct*)
Configuration_Done := 1;
END_IF;
END_IF;
END_CASE;