D'un espace de travail vide à un programme traduit, prêt pour l'automate, pour une vraie station pick-and-place pneumatique.
Vous allez définir le matériel, déclarer les E/S, construire la séquence, la valider en émulation, attribuer les adresses, traduire vers votre automate cible et exporter le code final. Le résultat : un programme .seq fonctionnel, un fichier .machine configuré, une liste d'E/S entièrement adressée et un fichier PLCopen XML prêt à importer dans votre environnement de programmation automate.
Un pick-and-place pneumatique à deux axes qui transfère une pièce d'un alimentateur vers un convoyeur de sortie.
Matériel :
S_Z_UP, S_Z_DOWNS_X_HOME, S_X_OUTS_VAC_OKB_STARTB_ESTOPY_Z_DOWN, Y_X_OUT, Y_VACUUMCycle :
| Élément | Version |
|---|---|
| AutomationView | 0.4.0 ou ultérieur |
| Plugin équipement Festo | Installé (pour les entrées du catalogue utilisées ci-dessous) |
| Fournisseur de traduction CODESYS | Installé (pour l'étape d'export PLC) |
Si ces plugins ne sont pas encore installés, installez-les depuis le panneau Extensions avant de commencer. Voir Extensions.
pick-and-place.AutomationView génère un nouvel espace de travail :
pick-and-place/
machine.machine # Définition machine (équipements, modules E/S, automate cible)
main.seq # Séquence principale
main.py # Point d'entrée Python du projet
L'explorateur de machine dans la barre latérale gauche affiche désormais l'arborescence du projet.
Ouvrez machine.machine. AutomationView ouvre par défaut l'éditeur visuel Machine Config. Le bouton de la barre de titre permet de basculer entre vue visuelle et vue texte (commandes AutomationView: Open Visual Editor et AutomationView: Open Text Editor).
Dans le panneau Controller, choisissez un automate cible réel :
| Champ | Valeur |
|---|---|
| Marque | CODESYS V3 |
| CPU | Generic SoftPLC |
| Temps de cycle | 10 ms |
Ajoutez deux modules depuis le catalogue :
| Slot | Module | Voies |
|---|---|---|
| 0 | DI 8x24VDC | 8 entrées TOR |
| 1 | DO 8x24VDC/0.5A | 8 sorties TOR |
Ouvrez le Catalogue d'équipements dans la barre latérale d'AutomationView. Dépliez Festo > Vérins pneumatiques et glissez les éléments suivants sur la machine :
| Identifiant d'équipement | Rôle |
|---|---|
festo.dsbc-32-100 |
Vérin axe Z |
festo.dsbc-32-200 |
Vérin axe X |
festo.vacuum-vad-1-4 |
Ventouse |
Faites un clic droit sur un élément du catalogue et choisissez Copy Equipment ID pour coller l'identifiant directement dans le fichier machine.
Enregistrez le fichier. L'explorateur de machine liste à présent trois actionneurs avec leurs voies d'E/S exposées.
Les variables sont reprises depuis vos fichiers séquence : tout nom référencé dans une condition de transition ou dans une action est enregistré automatiquement. Vous pouvez aussi les déclarer en amont depuis le panneau Variables de la barre latérale, ce qui est pratique pour figer types, adresses ou commentaires avant d'écrire le SFC.
Ouvrez le panneau Variables et ajoutez les entrées ci-dessous. L'en-tête du panneau permet de basculer entre les modes Global (à l'échelle du projet) et Active (séquence courante).
| Nom | Commentaire |
|---|---|
S_Z_UP |
Vérin Z rétracté |
S_Z_DOWN |
Vérin Z sorti |
S_X_HOME |
Vérin X en position d'origine |
S_X_OUT |
Vérin X en sortie |
S_VAC_OK |
Vide confirmé |
B_START |
Bouton de démarrage de cycle |
B_ESTOP |
Arrêt d'urgence (NF) |
| Nom | Commentaire |
|---|---|
Y_Z_DOWN |
Électrovanne Z descente |
Y_X_OUT |
Électrovanne X avance |
Y_VACUUM |
Électrovanne de vide |
| Nom | Commentaire |
|---|---|
ready |
Machine en position d'origine |
Basculez le panneau sur Set Global View pour vérifier que les huit entrées et les trois sorties sont bien visibles à l'échelle du projet.
Ouvrez main.seq. L'éditeur visuel s'affiche. Vous allez assembler le cycle avec cinq étapes, six transitions et leurs actions associées.
Cliquez sur le canevas et utilisez les raccourcis à une touche :
| Touche | Ajoute |
|---|---|
| I | Étape initiale |
| S | Étape standard |
| T | Transition |
| A | Action sur l'étape sélectionnée |
| C | Commentaire |
Construisez cette disposition :
| Étape | Type | Nom | Commentaire |
|---|---|---|---|
| 0 | Initiale | IDLE |
Position d'origine, attente démarrage |
| 1 | Étape | PICK_DOWN |
Descendre Z au-dessus de l'alimentateur |
| 2 | Étape | GRIP |
Vide actif, attente de confirmation |
| 3 | Étape | TRANSFER |
Remonter Z, déplacer X vers la sortie |
| 4 | Étape | RELEASE |
Descendre Z, relâcher la pièce, remonter Z |
| 5 | Étape | RETURN |
Ramener X en origine |
from automation_machine import Sequence, StepType, ActionInstruction
class PickAndPlace(Sequence):
def setup(self):
idle = self.add_step(StepType.INITIAL, name="IDLE")
pick_dn = self.add_step(name="PICK_DOWN")
grip = self.add_step(name="GRIP")
xfer = self.add_step(name="TRANSFER")
release = self.add_step(name="RELEASE")
retn = self.add_step(name="RETURN")
Reliez les étapes avec les conditions suivantes. Dans l'éditeur visuel, sélectionnez l'étape source, appuyez sur T, puis cliquez sur l'étape cible et saisissez la condition.
| De | Vers | Condition |
|---|---|---|
IDLE |
PICK_DOWN |
B_START AND S_Z_UP AND S_X_HOME AND NOT B_ESTOP |
PICK_DOWN |
GRIP |
S_Z_DOWN |
GRIP |
TRANSFER |
S_VAC_OK AND vac_dwell.Q |
TRANSFER |
RELEASE |
S_Z_UP AND S_X_OUT |
RELEASE |
RETURN |
S_Z_UP AND NOT S_VAC_OK |
RETURN |
IDLE |
S_X_HOME |
Sélectionnez chaque étape et appuyez sur A pour ajouter des actions. Utilisez le qualificatif N (non mémorisé) sauf indication contraire.
| Étape | Qualificatif | Cible / Instruction | Commentaire |
|---|---|---|---|
IDLE |
N | ready |
Machine en position d'origine |
PICK_DOWN |
N | Y_Z_DOWN |
Sortir Z vers le bas |
GRIP |
N | Y_VACUUM |
Vide actif |
GRIP |
N | TON vac_dwell (200 ms) |
Stabiliser le vide |
TRANSFER |
N | Y_X_OUT |
Avancer X |
RELEASE |
S | reset Y_VACUUM |
Relâcher la pièce |
RELEASE |
N | TON release_dwell (150 ms) |
Purger le vide |
RETURN |
R | reset Y_X_OUT |
Rétracter X |
Les qualificatifs S (Set) et R (Reset) garantissent que l'électrovanne de vide reste dans l'état attendu d'une étape à l'autre. Voir Aperçu des qualificatifs.
Enregistrez le fichier. L'éditeur visuel affiche le diagramme SFC complet en temps réel.
B_START à TRUE en cliquant sur sa valeur.Suivez ce script pour valider chaque transition :
| Action | Résultat attendu |
|---|---|
B_START = TRUE, S_Z_UP = TRUE, S_X_HOME = TRUE |
IDLE -> PICK_DOWN, Y_Z_DOWN s'active |
S_Z_DOWN = TRUE, S_Z_UP = FALSE |
PICK_DOWN -> GRIP, Y_VACUUM s'active |
S_VAC_OK = TRUE, attendre 200 ms |
GRIP -> TRANSFER, Y_X_OUT s'active |
S_Z_UP = TRUE, S_X_OUT = TRUE |
TRANSFER -> RELEASE |
S_VAC_OK = FALSE, S_Z_UP = TRUE |
RELEASE -> RETURN, Y_X_OUT retombe |
S_X_HOME = TRUE |
RETURN -> IDLE |
Utilisez Ctrl+Shift+F5 (Cmd+Shift+F5 sur macOS) pour réinitialiser l'émulation et repartir de l'étape initiale.
Une fois le cycle exécuté proprement, appuyez sur Shift+F5 pour arrêter.
| Symptôme | Cause probable | Correctif |
|---|---|---|
L'étape IDLE n'avance jamais |
B_ESTOP est resté actif |
Forcer B_ESTOP = FALSE (contact NF supposé) |
Bloqué sur GRIP |
vac_dwell.Q jamais atteint |
Attendre les 200 ms ou vérifier la durée du timer |
| Sortie maintenue après l'arrêt | Qualificatif S non remis à zéro | Vérifier la présence de l'action R correspondante |
Reliez maintenant les variables aux voies physiques de l'automate.
Résultat attendu pour notre projet :
| Variable | Module | Adresse |
|---|---|---|
S_Z_UP |
DI slot 0 | %IX0.0 |
S_Z_DOWN |
DI slot 0 | %IX0.1 |
S_X_HOME |
DI slot 0 | %IX0.2 |
S_X_OUT |
DI slot 0 | %IX0.3 |
S_VAC_OK |
DI slot 0 | %IX0.4 |
B_START |
DI slot 0 | %IX0.5 |
B_ESTOP |
DI slot 0 | %IX0.6 |
Y_Z_DOWN |
DO slot 1 | %QX1.0 |
Y_X_OUT |
DO slot 1 | %QX1.1 |
Y_VACUUM |
DO slot 1 | %QX1.2 |
Certaines voies d'armoire réelle sont réservées. Pour épingler une variable à une adresse précise :
%IX0.7 pour B_ESTOP si votre câblage l'impose).Lancez AutomationView: Validate All Addresses depuis la palette de commandes. AutomationView signale :
INPUT ou OUTPUT non attribuéesCorrigez chaque avertissement avant de poursuivre.
Les adresses en place, générez le code automate.
main.seq.PLCopen XML à l'invite.AutomationView écrit le fichier traduit à côté de la source, typiquement main.xml. Le panneau de sortie affiche un résumé de la traduction, avertissements compris.
Pour garder le fichier traduit synchronisé pendant les itérations :
automationview.translation.watchMode à true.automationview.translation.openAfterTranslate à true.Chaque enregistrement déclenche désormais une nouvelle traduction. Arrêtez le mode surveillance à tout moment avec AutomationView: Stop Live Translation.
Voir Traduction et export de code pour la référence complète.
Pour livrer le programme à votre logiciel automate :
export/
machine.xml # Descripteur projet PLCopen
sequences/
main.xml # Séquence traduite
io/
address-map.csv # Correspondance variables / adresses
doc/
main.pdf # Impression de séquence (optionnelle)
Pour exporter toutes les séquences en une fois (utile pour les projets multi-séquences), lancez AutomationView: Export All Sequences.
| Cible | Chemin d'import |
|---|---|
| CODESYS V3 | Project > Import > PLCopenXML |
| TwinCAT 3 | PLC > Import > PLCopen XML |
| Schneider EcoStruxure | File > Import > PLCopen XML |
Pour un parcours détaillé du transfert vers l'automate, voir Flux E/S vers automate.
Le même flux s'étend aux stations multi-axes et aux lignes de production complètes. Quelques pistes pour prolonger ce projet :
B_ESTOP via une étape macroautomationview.export.autoExport