Introduction aide

Introduction

Vous pouvez trouver des informations sur le Motion Studio de différentes façons (les sections qui suivent décrivent ces sources d'information) :

  • Dans l'aide en ligne

  • Sur le site Web de SERAD

Pour des informations sur les nouveautés de cette version, reportez-vous à la rubrique Nouveauté de l'aide en ligne.


Aide en ligne

Le système d'aide en ligne fournit des informations détaillées sur les fonctionnalités de l'interface utilisateur, l'implémentation des langages et les tâches de programmation.

Pour afficher la table des matières, choisissez Aide | Sommaire de l'aide. Pour rechercher des informations sur l'installation, la configuration, la programmation ou d'autres sujets, choisissez les onglets Index ou Recherche et saisissez votre requête.


Aide F1

Pour obtenir de l'aide sur une partie de l'environnement de développement Motion Studio (y compris les éléments de menu, les boîtes de dialogue, les barres d'outils), sélectionnez l'élément et appuyez sur F1.

Les messages d'erreur du compilateur ou du lieur apparaissent dans la console. Pour avoir de l'aide sur les erreurs de compilation, sélectionnez une ligne sur la console et appuyez sur F1.

Il est également possible d'obtenir de l'aide sur une instruction du langage ST / IL en la sélectionnant et en cliquant sur


Documentation imprimée

Impression documentation

II est possible d'imprimer la rubrique sélectionnée ou toutes les rubriques du titre sélectionné grâce au bouton d'impression disponible dans la barre d'outils de l'aide en ligne.


Service de support

Service et support

SERAD offre de nombreuses possibilités de service et support si vous avez besoin d'informations supplémentaires : hot line, site Web http://www.serad.fr .


Mise en garde

Avant la première mise en service de l'installation, veuillez lire les informations suivantes afin d'éviter des dommages corporels et/ou matériels.

Le montage, le raccordement, la mise en service et la maintenance de l'appareil ne peuvent être réalisés que par des personnes qualifiées et doivent obéir aux normes nationales et internationales (DIN, VDE, EN, IEC). Le non respect de ces normes peut engendrer de graves dommages matériels.

De plus, il est indispensable de respecter les instructions de sécurité. Des blessures et dommages corporels peuvent résulter d'une méconnaissance de ces instructions de sécurité.

En cas d'erreur sur le MPC, l'utilisateur est responsable d'assurer la mise en sécurité des autres dispositifs qui peuvent être reliés.


Description des symboles

Les symboles suivants de mise en garde sont employés dans ce guide d'installation. Ils sont prévus pour alerter le lecteur aux instructions de sûreté associées.


Historique du manuel

Version | Date | Commentaire
R1.02 | 01/09/2008 | Mise à jour et correction
R1.01 | 28/05/2007 | Ajout compteur, boite à cames
R0.59 | 03/05/2007 | Mise à jour et correction
R0.54 | 11/10/2006 | Mise à jour synchronisation et capture
R0.51 | 19/09/2006 | Version originale


Généralités

Doté de hautes performances et d'une grande flexibilité, MPC répond à une large gamme d'applications industrielles.

La puissance du calculateur MPC lui permet de gérer des machines complexes à haute cadence.

Son noyau temps réel exécute des tâches cycliques, acycliques, interruptives.

MPC bénéficie de toutes les interfaces de communications d'un PC et propose en plus un réseau Ethernet Industriel et un bus de terrain CANopen.


Données techniques

* Option


Généralités

Grâce à son interface intuitive et son langage normalisé IEC 61131-3, l'atelier logiciel Motion Studio offre une convivialité parfaite et permet un développement rapide de votre application.

Convivialité :

Ä Gestion de projets

Ä Configuration simplifiée par arborescence

Ä Multi-fenêtrage

Ä Editeurs graphiques

Ä Menus flottants

Ä Navigation intuitive

Ä Boîtes à outils

Ä Aide intégrée

Développement rapide:

Ä Programmation possible dans les 5 langages normalisés

Ä Editeurs avec mise en évidence de la syntaxe

Ä Création de blocs fonctionnels

Ä Choix des types et priorités des programmes

Ä Références croisées

Ä Définition de profils de cames par outil graphique

Ä Déclaration en clair des axes, I/O et variables

Ä Liste et historique des messages d'erreurs

Ä Nombreuses librairies intégrées

Outils de réglages :

Ä Tableau de bord

Ä Modes trace et pas à pas

Ä Définition de points d'arrêts

Ä Auto-tuning des axes

Ä Générateur de trajectoires

Ä Simulateur Motion

Ä Hyper Terminal

Ä Visualisation des variables

Ä Tables d'animation

Ä Oscilloscope numérique

Ä Analyseur de réseau


Applications

Ä Impression d'étiquettes

Ä Lignes d'emballage

Ä Machines textiles

Ä Amenage de presse

Ä Découpe jet d'eau

Ä Robots pick & place

Ä Machines à bois

Ä Gestion de flux

Ä Dosage, etc.


Vue de face


Vue de dessus


Vue de côté


Interface CANopen


Interface Industriel Ethernet


Interface Ethernet TCP/IP


Compact Flash

Compact Flash et DIPSwitchs

  • Pour accéder au module Compact Flash ou aux DIPSwitchs, retirer les deux vis de fixation du capot :

  • Pour retirer la Compact Flash 64 Mo, tirer sur le ruban adhésif :

    La Compact Flash est fournie par SERAD, tout autre Compact Flash entraîne des dysfonctionnements.

  • Assignation des DIPSwitchs :


Entrées logiques


Sorties logiques


Alimentation E/S


Alimentation générale


Interface USB


Interface SERIAL1 et SERIAL2


Montage

Le MPC doit être installé verticalement pour assurer un refroidissement optimal.

Il doit être à l'abri de l'humidité, des projections de liquides quelconques, de la poussière.

Afin de garantir la bonne circulation de l'air, montez le système de sorte que les espacements du dessus, du bas, et des côtés correspondent au schéma suivant :


Sécurités

ÄLes normes de sécurité imposent un réarmement manuel après un arrêt provoqué soit par coupure secteur, défaut chien de garde ou arrêt d'urgence.

ÄLe chien de garde du MPC doit être relié en série dans la boucle d'arrêt d'urgence.

ÄLe chien de garde doit être activé au début du programme. Dans le cas d'un défaut (problème interne, micro-coupure, ...), la sortie chien de garde retombe.

ÄLe paramètre "Erreur de poursuite maxi" de chaque axe devra être réglé.

ÄDes capteurs, pour limiter la course de chacun des axes devront être reliés en série dans la boucle d'arrêt d'urgence.

ÄIl est recommandé d'utiliser les butées logicielles dans le cas des axes finis.

ÄRelier l'information « Puissance armoire électrique OK » sur une entrée automate et la traiter dans une tâche non bloquante de sécurité.

ÄSur détection d'une erreur de poursuite, le MPC passe tous les axes en boucle ouverte et ouvre le chien de garde. Si un autre traitement est souhaité, il faut utiliser l'instruction SECURITY.

ÄIl faut prévoir sur toutes sorties statiques des diodes de roue libre sur les charges inductives. Ces diodes doivent être placés le plus près possible de la charge. Les conducteurs d'alimentation et de signaux ne doivent pas être le siège de surtensions.


Mise en route

La mise en route du MPC s'effectue de la façon suivante :

Ä On commence par définir les axes en déclarant chaque variateur avec un numéro de node différent sur le réseau Ethercat et une configuration moteur.

Ä On déclare les entrées/sorties disponibles en locales ou déportés.

Ä On charge la configuration ainsi définie en utilisant la fonction "Envoyer la configuration" à partir du menu communication du Motion Studio.

Ä On définit les variables globales.

Ä On transfère la valeur initiale des variables sauvegardées en utilisant "Envoyer les variables" à partir du menu communication du Motion Studio.

Ä On écrit les différentes tâches.

Ä On transfère les tâches après les avoir compilées.

Par la suite chaque modification apportée aux tâches nécessite une nouvelle compilation et un transfert des tâches dans le MPC. Une modification de la configuration nécessite un nouvel envoi de la configuration dans le MPC.


Raccordement avec variateurs IMD

Raccordement avec des variateurs IMD


Raccordement avec des variateurs IMDL


Raccordement des variateurs IMDx au réseau ETHERCAT

< AJOUTER PHOTO DU BANC 5 AXES

  1. Chaque variateur doit avoir une adresse ETHERCAT différent

  2. Les câbles ETHERCAT doivent être de catégorie 5E SFTP

  3. Les adresses ETHERCAT des variateurs correspondront au numéro + 1 présent sur les DIPSwitchs au dessus des prises RJ45


Configuration de l'adresse IP par l'Assistant

Configuration de l'adresse IP

Après avoir créé un nouveau projet, l'adresse IP configurée par défaut dans votre projet 192.168.1.1 et ne correspond pas forcément à celle de votre MPC.

Pour établir la première connexion et configurer les adresses IP de votre projet et celle du MPC, démarre l'assistant de paramétrage TCP/IP

Sélectionner la carte réseau relié au réseau du MPC

Si le pare-feu Windows vous bloque la connexion

Choisir « Débloquer » puis redémarrer l'assistant de paramétrage TCP/IP

L'assistant affiche les MPC détectés sur le réseau

Afin de repérer physiques les MPC, l'assistant affiche leur numéro sur l'afficheur 7 segments :

Pour le MPC à l'adresse 192.168.1.155, l'afficheur 7 segments affiche L1.

Pour le MPC à l'adresse 192.168.1.136, l'afficheur 7 segments affiche L2.

Sélectionner votre MPC puis cliquer sur « Suivant »

L'assistant affiche la configuration du projet du PC et la configuration du MPC

Cliquer sur « Suivant »

Choisir entre la configuration du projet du PC ou la configuration du MPC.

Cliquer sur « Suivant »

L'assistant affiche le résultat du test de communication entre le PC et le MPC

Cliquer sur « Terminé »


Forcage de l'adresse IP par DIPSwitchs

Cette procédure permet de forcer l'adresse IP du MPC à l'adresse 192.168.1.1 et son masque à l'adresse 255.255.255.0.

  • Mettre le MPC hors tension

  • Mettre le DIP2 sur ON

  • Mettre le MPC sous tension

  • Après la séquence de démarrage (environ 15s) on doit avoir une animation et un C sur l'afficheur 7 segments

  • Sans éteindre le MPC, basculer le DIP2 sur OFF puis à nouveau sur ON.

  • Attendre 5s

  • Mette le MPC hors tension

  • Mettre le DIP2 sur OFF

  • Mettre le MPC sous tension : son adresse IP est 192.168.1.1 et le marque est 255.255.255.0


Procédure de réglage d'un axe

Le paramétrage des axes se fait à partir de la librairie moteur disponible dans le logiciel ou à partir d'un autotuning du variateur.


Configuration du système

Configuration minimale :

Ä PC Pentium III 800 MHz

Ä RAM 128 Mo (Windows 2000) / 256 Mo (Windows XP)

Ä Disque dur (50 Mo disponibles)

Ä Microsoft® Windows 2000 ou XP

Ä Lecteur de CD-ROM (16X)

Ä Ecran SVGA 1024x768

Ä Souris ou autre périphérique de pointage

Configuration recommandée :

Ä PC Pentium® IV ou plus

Ä RAM 256 Mo (Windows 2000) / 512 Mo (Windows XP)

Ä Disque dur (50 Mo disponibles)

Ä Microsoft® Windows 2000 ou XP

Ä Lecteur de DVD-ROM

Ä Ecran SVGA 1280x1024

Ä Souris ou autre périphérique de pointage

Cette application ne fonctionne pas sous Unix, Linux, Mac OS, MS-DOS et Microsoft® Windows 3.11, 95, 98, Me et NT4.


Procédure d'installation du Motion Studio

Le logiciel Motion Studio est fourni sous forme de CD-ROM avec le système MPC. Le programme d'installation crée des répertoires et copie les fichiers du disque d'installation du Motion Studio sur votre PC. Le programme d'installation est très explicatif. Les notions élémentaires sur l'installation du Motion Studio vous sont données dans les étapes suivantes :

Pour installer le Motion Studio

  1. Vérifier la configuration requise pour installer le logiciel.

  2. Insérer le CD-ROM dans le lecteur approprié.

  3. Dans le menu déroulant [image] , sélectionner [image] .

  4. Dans la boîte de dialogue « Exécuter », sélectionner [image] .

  5. Dans la boîte de dialogue « Parcourir », sélectionner le lecteur où se situe le CD-ROM.

  6. Sélectionner [image] puis [image] dans la boîte de dialogue « Parcourir ».

  7. Sélectionner [image] dans la boîte de dialogue « Exécuter ».

ðLe programme d'installation du logiciel Motion Studio débute.

  8. Le début de l'installation est marqué par une série de boîte de dialogue guidant l'utilisateur :

  • Choix de la langue d'installation

  • Message d'accueil

  • Options d'installation

  • Démarrage de la copie des fichiers

ð L'installation des fichiers débute et est indiquée par l'évolution d'une barre de progression.

  • Fin de la copie des fichiers

ð L'installation se termine par l'ajout de l'icône du Motion Studio dans le dossier programme.


Les répertoires

Le logiciel Motion Studio est installé par défaut dans le répertoire C :\Program files\SERAD\Motion studio X.XX\

X.XX représente la version du logiciel installée. Plusieurs versions peuvent être installées en même temps. Les répertoires sont différents pour chaque version installée.

Le répertoire DATA contient la base de données système, ou sont stocké les déclarations des périphériques reconnus par le système (IMD, Mode entrées / sorties CAN ).

Le répertoire DOC regroupe les documentations sur la table Modbus et le dictionnaire CANopen.

Le répertoire GFX contient les images utilisées par le logiciel.

Le répertoire HELP regroupe les fichiers de la documentation en ligne.

Le répertoire INFO contient les outils nécessaires à l'édition et à la compilation des fichiers du projet (éditeur de langage, compilateur, outils de debug ).

Le répertoire LIB regroupe la bibliothèque de paramètre moteur, au format iDPL. Ceci permet de créer un axe dans le projet, en se basant sur le paramétrage adapté au moteur.

Dans le répertoire OS, une copie du système d'exploitation du MPC ainsi qu'une image complète de Linux sur la carte compact flash sont présentes. Ces fichiers sont utilisés pour mettre à jour le MPC ou recréer une compact flash.


Contenu d'un projet

Un projet créé avec le logiciel Motion Studio sarticule autour dun fichier principal et de trois sous répertoires. Le fichier principal, qui possède l'extension .MPC, définit les propriétés et les options utilisées par le logiciel. Par exemple, pour un projet nommé « motion » on obtient les répertoires suivants :

Le répertoire XXX.idb contient tous les fichiers sources des programmes, bloc fonctionnels, fonctions, déclarations de type et tous les fichiers nécessaires pour compiler le projet.

Le répertoire XXX.sdb contient la base de données du projet, regroupant les données des périphériques (axes, modules d'entrées / sorties ), les déclarations des variables et les affectations des entrées sorties. Cette base répertorie également les tâches, programmes, bloc fonctionnels, fonctions, et tous les paramètres de lIEC1131.

Le répertoire XXX.odb contient tous les autres fichiers nécessaires au projet :

  • Les valeurs des données

  • La configuration du scope et autres outils

  • Les commentaires du projet

  • Etc

Dans ces répertoires, les sous répertoires .arch contiennent des archives du projet, réalisées à chaque sauvegarde. Le nombre d'archives disponibles est paramétrable dans les préférences. Voir l'écran préférence.

Ces archives peuvent, à tout moment, être récupérées. Voir le menu projet.


Création d'un projet

  1. Démarrer l'atelier logiciel Motion Studio

  2. Cliquer sur Projet dans le menu principal

  3. Cliquer sur Nouveau dans le menu déroulant

  4. Dans la fenêtre Nouveau Projet, indiquer le nom du nouveau projet ainsi que son emplacement


Ecran initial

Les éléments de l'environnement de programmation Motion Studio ont été conçus pour que vous soyez doté d'outils permettant de développer rapidement et intuitivement des applications. Cette section décrit brièvement chacun de ces éléments.

Le Motion Studio est composé d'une fenêtre principale comportant :

  1. Le menu principal et la barre d'outils

  2. Le navigateur de projet

  3. La zone d'édition en multi fenêtrage

  4. La zone commandes rapides

  5. La console de sortie

Le menu principal regroupe l'ensemble des commandes disponibles sous forme de menu set sous menus. Les barres d'outils du Motion Studio permettent un accès rapide aux opérations et aux commandes les plus utilisées. De nombreuses commandes possèdent des équivalents claviers ainsi que des boutons dans la barre d'outils. Lorsqu'un raccourci clavier est disponible, il est toujours inscrit à côté de la commande dans le menu déroulant.

Le navigateur de projet donne une vue d'ensemble, répartie par groupe de tous les constituants d'un projet. La navigation est ainsi rapide et précise. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.

La zone de multi fenêtrage contient les fenêtres ouvertes par l'utilisateur et en donne une liste sous forme d'onglet en dessous. Les propriétés du multi fenêtrage permettent à l'utilisateur de pouvoir passer d'une fenêtre à l'autre sans avoir à les fermer. Les onglets permettent, à la fois, le basculement rapide vers une fenêtre cachée et la fermeture des fenêtres en cliquant sur la croix.


Menu Projet

Nouveau

Icône :

Action : Créer un nouveau projet. Le dernier projet en cours doit être fermé. Une fenêtre d'exploration s'ouvre pour indiquer l'emplacement du nouveau projet (comme ci-dessous).

Ouvrir

Icône :

Action : Ouvrir la boîte de dialogue "Ouvrir un Projet". Elle permet à l'utilisateur de spécifier le chemin et le nom du projet à charger. Le projet en cours doit être fermé avant d'entreprendre une ouverture.

Enregistrer

Icône :

Action : Sauvegarder le projet en cours. Lorsque le Motion Studio est en ligne avec le MPC, les paramètres sont reçus automatiquement avant la sauvegarde.

Enregistrer sous

Icône :

Action : Ouvrir la boîte de dialogue "Enregistrer sous" et spécifier le nom du projet de sauvegarde. Cette commande permet de créer des copies de projets.

Fermer

Icône :

Action : Fermer le projet en cours.

Ouvrir à partir d'une archive

Icône :

Action : Décompresser et ouvrir un projet précédemment archivé.

Archiver le projet

Icône :

Action : Archiver en compressant le projet afin de réduire son encombrement sur le disque.

Envoyer le projet par E-Mail

Icône :

Action : Compresser et envoyer le projet par E-Mail en ouvrant le lecteur d'E-Mail par défaut.

Commentaires

Icône :

Action : Permettre de rentrer des commentaires liés au projet grâce à l'éditeur de texte intégré (format RTF).

Si la case "Afficher automatiquement à l'ouverture du projet" est cochée, cette fenêtre s'ouvre automatiquement pour rappeler les commentaires et peut ainsi servir d'aide mémoire.

Recherche globale

Icône :

Action : Rechercher un texte dans l'ensemble du projet.

Les résultats de recherche sont répartis par fichier. En double cliquant sur une ligne, le fichier correspondant s'ouvre à la ligne concernée.

Envoi des sources du projet PC -> MPC

Icône :

Action : Stocker les sources du projet PC dans le MPC.

Réception des sources du projet MPC -> PC

Icône :

Action : Récupérer les sources contenues dans le MPC vers le PC.

Vérifier la version du système

Icône :

Action : Comparer les versions entre le PC et le MPC pour :

      • L'application

      • Le système d'exploitation

      • Linux

L'onglet PC regroupe les informations disponible sur le PC, concernant l'atelier logiciel, le système d'exploitation associé et le projet.

L'onglet MPC regroupe les informations concernant le MPC référencé dans le projet.

Restaurer le projet à partir d'une archive

Icône :

Action : Restaurer une archive du projet à partir d'une date. Les archives sont créées automatiquement lors de la sauvegarde du projet.

Imprimer

Icône :

Action : Réaliser une impression totale ou personnalisée du projet. Dans cette impression, on retrouve la configuration du MPC, les tâches et le contenu des différents programmes, fonctions et blocs fonctionnels.

Quitter

Icône :

Action : Quitter le logiciel.


Menu Objets

Configuration

Icône :

Action : Activer l'onglet configuration dans le navigateur de projet.

Motion

Icône :

Action : Activer l'onglet motion dans le navigateur de projet.

Automate

Icône :

Action : Activer l'onglet automate dans le navigateur de projet.

Programmation

Icône :

Action : Activer l'onglet programmation dans le navigateur de projet.

Outils

Icône :

Action : Activer l'onglet outils dans le navigateur de projet.


Menu Edition

Défaire

Icône :

Action : Annuler la dernière action dans un éditeur de langage.

Refaire

Icône :

Action : Refaire la dernière action annulée dans un éditeur de langage.

Couper

Icône :

Action : Couper du texte ou un objet afin de le coller à un autre emplacement. Sélectionnez-le, puis cliquez sur Couper. Cette commande ne fonctionne que dans les éditeurs de langage.

Copier

Icône :

Action : Copier du texte ou un objet afin de le coller à un autre emplacement. Sélectionnez-le, puis cliquez sur Copier. Cette commande ne fonctionne que dans les éditeurs de langage.

Coller

Icône :

Action : Coller le texte ou un objet que vous avez coupé ou copié. Placez le point d'insertion à l'emplacement voulu, puis cliquez sur Coller. Cette commande ne fonctionne que dans les éditeurs de langage.

Supprimer

Icône :

Action : Supprimer du texte ou un objet. Sélectionnez-le, puis cliquez sur Supprimer. Cette commande ne fonctionne que dans les éditeurs de langage.

Tout sélectionner

Icône :

Action : Sélectionner l'ensemble des objets ou du texte d'un programme. Cette commande ne fonctionne que dans les éditeurs de langage.

Rechercher

Icône :

Action : Rechercher du texte dans les fenêtres d'édition. Cette commande ne fonctionne que dans les éditeurs de langage.

Remplacer

Icône :

Action : Remplacer du texte dans les fenêtres d'édition. Cette commande ne fonctionne que dans les éditeurs de langage.


Menu Affichage

Zoom +

Icône :

Action : Permettre à l'utilisateur d'effectuer un agrandissement de la zone d'affichage de vos schémas SFC, Ladder, FBD et CFC.

Zoom -

Icône :

Action : Permettre à l'utilisateur d'effectuer une diminution de la zone d'affichage de vos schémas SFC, Ladder, FBD et CFC.


Menu Compilation

Vérifier la syntaxe

Icône :

Action : Vérifier la syntaxe du programme en cours.

Compiler

Icône :

Action : Compiler le programme en cours.

Construire

Icône :

Action : Reconstruire le projet.


Menu Communication

Connecter

Icône :

Action : Passer en ligne avec le MPC. Cette opération nécessite le réception des paramètres stockés dans le MPC afin de garantir la cohérence des informations affichés.

Déconnecter

Icône :

Action : Interrompre la connexion avec le MPC.

Auto-détecter la configuration

Icône :

Action : Reçoit la configuration le MPC et ajoute automatiquement les périphériques dans le projet. Le projet doit être vierge pour pouvoir utiliser cette fonction.

Envoyer la configuration

Icône :

Action : Envoyer la configuration et initialise le MPC avec les paramètres définis dans les écrans de configuration du projet. A la fin de l'envoi de la configuration, le réseau Ethercat est automatiquement ré-initialisé, ce qui à pour effet d'arrêter les tâches.

Recevoir la configuration

Icône :

Action : Mettre à jour à partir du MPC les paramètres indiqués dans les écrans de configuration.

Envoyer les variables

Icône :

Action : Envoyer les variables sauvegardées et initialise dans le MPC, les valeurs affectées à ces variables. Ainsi il n'est pas nécessaire de les initialiser dans le programme.

Recevoir les variables

Icône :

Action : Recevoir les variables sauvegardées et conserver une copie de leur valeur sur le PC.

Envoyer les profils de cames

Icône :

Action : Envoyer les variables sauvegardées et initialise dans le MPC, les valeurs affectées à ces variables. Ainsi il n'est pas nécessaire de les initialiser dans le programme.

Recevoir les profils de cames

Icône :

Action : Recevoir les variables sauvegardées et conserver une copie de leur valeur sur le PC.

Envoyer les tâches

Icône :

Action : Envoyer la totalité des tâches compilées dans le MPC. L'exécution des tâches est lancée automatiquement dès la fin du transfert.

Effacer les tâches

Icône :

Action : Ecraser les tâches présentes dans le MPC.

Run

Icône :

Action : Démarrer les tâches du MPC.

Continuer

Icône :

Action : Continuer les tâches du MPC précédemment suspendues.

Suspendre

Icône :

Action : Suspendre les tâches du MPC.

Stop

Icône :

Action : Arrêter les tâches du MPC.

Redémarrer

Icône :

Action : Redémarrer le MPC.

Aller à la position d'exécution sauvegardée

Icône :

Action : Indiquer la dernière ligne/instruction exécutée avant redémarrage du MPC.

Aller à la position d'exécution courante

Icône :

Action : Indiquer la ligne/instruction en cours d'exécution du MPC.


Menu Fenêtres

Cascade

Icône :

Action : Afficher les différentes fenêtres en cascade.

Mosaïque

Icône :

Action : Afficher les différentes fenêtres en mosaïque.

Console

Icône :

Action : Forcer l'affichage de la console.


Menu Options

Préférences

Icône :

Action : Permettre à l'utilisateur de personnaliser la couleur et le fond des textes, mots-clefs des éditeurs de programmes.

Voir la rubrique préférences.

Assistant de paramétrage TCP/IP

Icône :

Action : Configurer l'adresse IP d'un MPC par liaison Ethernet ou Série.

Voir la rubrique Assistant de paramétrage TCP/IP.

Système d'exploitation

Icône :

Action : Mettre à jour le système d'exploitation du MPC par transfert direct dans celui-ci. Si cette opération échoue, se reporter à « Compact Flash ».

Effacement de la mémoire sauvegardée

Icône :

Action : Effacer le contenu de la mémoire sauvegardée (BBM) contenant la configuration et les variables globales sauvegardées.

Compact flash

Icône :

Action : Mettre à jour l'image complète du système d'exploitation du MPC (OS, Linux ) sur une compact flash à partir d'un PC équipé d'un lecteur de compact flash.


Menu Aide

A propos

Icône :

Action : Ouvrir une boîte de dialogue indiquant la version du logiciel, sa date de création, etc...

Sommaire de l'aide

Icône :

Action : Ouvrir l'aide en ligne du Motion Studio à partir du sommaire.

Index de l'aide

Icône :

Action : Ouvrir l'aide en ligne du Motion Studio à partir de l'index.

Recherche dans l'aide

Icône :

Action : Ouvrir l'aide en ligne du Motion Studio pour une recherche par mot clé.

Site Web SERAD

Action : Ouvrir une fenêtre de navigateur html sur le site Internet SERAD.

Table CANopen classée par Index

Action : Ouvrir une fenêtre de navigateur html sur la table CANopen classée par Index.

Table CANopen classée par groupe

Action : Ouvrir une fenêtre de navigateur html sur la table CANopen classée par groupe.

Table Modbus classée par Index

Action : Ouvrir une fenêtre de navigateur html sur la table Modbus classée par Index

Table Modbus classée par groupe

Action : Ouvrir une fenêtre de navigateur html sur la table Modbus classée par groupe.


Onglet Configuration

L'onglet Configuration rassemble la configuration du MPC et de ses périphériques, répartis par connexion. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.

Ajouter

Icône :

Action : Ajouter un axe IMD ou virtuel, un module d'entrées / sorties CANopen.

Supprimer

Icône :

Action : Supprime le périphérique sélectionné, après confirmation.

Menu Pop-up

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Renommer

Icône :

Action : Renomme l'axe sélectionné.

Déplacer vers le haut

Icône :

Action : Déplace l'axe sélectionné, au dessus dans la liste.

Déplacer vers le bas

Icône :

Action : Déplace l'axe sélectionné, au dessous dans la liste.

Importer à partir d'un fichier

Icône :

Action : Importe les données de l'axe à partir d'un fichier IDPL ou MSS.

Choisir le fichier à importer en cliquant sur [image] .

Sélectionnez le type de fichier (IDPL ou MSS) à importer

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour importer le fichier

Exporter vers un fichier

Icône :

Action : Exporte les données de l'axe à partir d'un fichier IDPL ou MSS.

Choisir le fichier à exporter en cliquant sur [image] .

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour exporter le fichier


Onglet Motion

L'onglet Motion représente la liste axes et les fichiers de cames associés. La partie motion de l'axe inclue ses unités, son profile de vitesse, sa prise d'origine et le contrôle de ses défauts de positionnement (erreur de poursuite, fenêtre de position et butées). Les axes physiquement reliés y sont représentés, ainsi que les axes virtuels. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.

Ajouter

Icône :

Action : Ajouter un profil de cames.

Supprimer

Icône :

Action : Supprime le périphérique sélectionné, après confirmation.

Menu Popup

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Renommer

Icône :

Action : Renomme l'axe sélectionné.

Déplacer vers le haut

Icône :

Action : Déplace l'axe sélectionné, au dessus dans la liste.

Déplacer vers le bas

Icône :

Action : Déplace l'axe sélectionné, au dessous dans la liste.


Onglet Automate

L'onglet automate donne accès aux paramétrage des entrées / sorties. Leur nom, inversion et filtrage sont ainsi définit grâce à l'éditeur d'entrées / sorties. Les entrées / sorties du MPC, des IMD et des modules d'entrées / sorties CANopen sont accessible sur cet écran. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.


Onglet Programmation

L'onglet programmation répertorie l'ensemble des fichiers utilisés pour créer l'application. Les fichiers sont répartis par type (Tâches, programmes, bloc fonctionnels, fonctions, définitions de type, variables globales, bibliothèques). Différents éditeurs sont alors utilisé pour créer ces fichiers. Un éditeur de variable permet de placer précisément les variables en mémoire sauvegardée ou dans la zone d'échange. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.

Ajouter

Icône :

Action : Ajouter une tâche, un programme, un bloc fonctionnel, une fonction, un fichier de déclaration de type, un fichier de variables globales ou une bibliothèque.

Supprimer

Icône :

Action : Supprime l'élément sélectionné, après confirmation.

Menu Popup

En cliquant avec le clic droit de la souris on accède au menu popup suivant :

Renommer

Icône :

Action : Renomme l'élément sélectionné

Déplacer vers le haut

Icône :

Action : Déplace l'élément sélectionné, au dessus dans la liste.

Déplacer vers le bas

Icône :

Action : Déplace l'élément sélectionné, au dessous dans la liste.

Dans le cas des éditeurs de variables sauvegardées et d'échange, il est également possible d'importer et d'exporter les listes de variables.

Importer à partir d'un fichier

Icône :

Action : Importe les variables globales à partir d'un fichier MSV.

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour importer le fichier

Exporter vers un fichier

Icône :

Action : Exporte les variables globales à partir d'un fichier MSV.

Choisir le fichier à exporter en cliquant sur [image] .

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour exporter le fichier


Onglet Outils

L'onglet outils rassemble les outils disponibles pour le MPC, chaque périphérique, Ethercat ou CANopen. Le pointeur de souris [image] indique la présence d'une commande accessible par double clic sur un élément du navigateur.

Ajouter

Icône :

Action : Ajouter un axe IMD ou virtuel, un module d'entrées / sorties CANopen.

Ajout d'un IMD

  • Nom : Nom de l'axe à ajouter.

  • Configuration : Nom du fichier de configuration IDPL à appliquer

  • Importer : Permet de sélectionner le fichier de configuration à appliquer

  • Créer à partir de : Active la création par copie d'un axe existant. Sélectionnez l'axe dans la liste

Ajout dun Axe virtuel

  • Nom : Nom de l'axe à ajouter.

Ajout d'un module d'entrées / sorties CANopen

  • Nom : Nom du module d'entrées / sorties à ajouter.

Supprimer

Icône :

Action : Supprime le périphérique sélectionné, après confirmation.

Menu Popup

En cliquant avec le clic droit de la souris on accède au menu popup suivant :

Renommer

Icône :

Action : Renomme l'axe sélectionné.

Déplacer vers le haut

Icône :

Action : Déplace l'axe sélectionné, au dessus dans la liste.

Déplacer vers le bas

Icône :

Action : Déplace l'axe sélectionné, au dessous dans la liste.

Importer à partir d'un fichier

Icône :

Action : Importe les données de l'axe à partir d'un fichier IDPL ou MSS.

Choisir le fichier à importer en cliquant sur [image] .

Sélectionnez le type de fichier (IDPL ou MSS) à importer

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour importer le fichier

Exporter vers un fichier

Icône :

Action : Exporte les données de l'axe à partir d'un fichier IDPL ou MSS.

Choisir le fichier à exporter en cliquant sur [image] .

Sélectionnez le fichier et cliquez sur Ok.

Cliquez sur [image] pour exporter le fichier


Commandes rapides

La zone de commandes rapides, à droite, sur la fenêtre principale du Motion Studio permet d'avoir une vue globale des fonctions essentiels du MPC (Afficheur Status, Etat des liaisons, des axes et des tâches). Il fait également office de panneau de contrôle rapide.

Validation des axes

Etat

Icône :

Signification : Indique l'état global de la validation des axes.

  • Eteint : Tous les axes dont dévalidés

  • Clignotant jaune : Tous les axes ne sont pas validés

  • Allumé jaune : Tous les axes sont validés.

L'état n'est visualisable qu'en mode En ligne.

Validation

Icône :

Action : Demande la validation de tous les axes, réel, en simulation ou virtuel présent dans la configuration.

Dévalidation

Icône :

Action : Demande la dévalidation de tous les axes, réel, en simulation ou virtuel présent dans la configuration.

Ces commandes ne sont accessibles qu'en mode En ligne

Liaison EtherCAT

Etat

Icône :

Signification : Indique l'état global de la liaison EtherCAT avec les variateurs.

  • Eteint : La liaison EtherCAT est non initialisé ou interrompue.

  • Allumé vert: La liaison EtherCAT est établie et le réseau est initialisé correctement

L'état n'est visualisable qu'en mode En ligne.

Init

Icône :

Action : Demande l'initialisation de la liaison EtherCAT et la vérification des axes présents sur le réseau.

Cette commande n'est accessible qu'en mode En ligne

Liaison CANopen

Etat

Icône :

Signification : Indique l'état global de la liaison CANopen avec les modules d'entrées / sorties.

  • Eteint : La liaison CANopen est non initialisé ou arrêtée.

  • Clignotant rouge : La liaison est en erreur.

  • Allumé vert : La liaison CANopen est établie et le bus de terrain est initialisé correctement.

L'état n'est visualisable qu'en mode En ligne.

Afficheur status

Etat

Icône :

Signification : Indique l'état de l'afficheur de « status » du MPC. Ceci permet de visualiser les erreurs présentes sur le MPC

L'état n'est visualisable qu'en mode En ligne.

En cliquant sur l'afficheur on accède à l'écran des alarmes.

Cet écran répertorie les défauts détectés sur le MPC.

Acuitter

Icône :

Action : Demande l'acquittement des défauts afficher qui ont été corrigés. Si la source d'un défaut est encore présente, celui-ci ne peut être acquitté.

Etat des tâches

Etat

Icône :

Signification : Indique l'état du séquenceur qui gère les tâches dans le MPC.

  • : Le séquenceur est arrêté, toutes les tâches sont arrêtées

  • : Le séquenceur est suspendu. Toutes les tâches sont suspendues.

  • : Le séquenceur fonctionne. Les tâches démarrées automatiquement fonctionnent.

L'état n'est visualisable qu'en mode En ligne.


Console de sortie

La zone de console est la zone de communication entre le logiciel Motion Studio et l'utilisateur. Sur cette console sont reproduit l'enchaînements des opérations demandé ( envoi, réception, connexion, déconnexion, compilations ).

Les informations sont indiquées en utilisant différentes couleurs pour signifier leur importance :

Noir : Information d'ordre générale, sans indication particulière

Vert : Résultat positif. L'opération s'est terminée avec succès.

Orange : Avertissement. L'opération a été abandonnée, un problème est survenu, ou l'opération est interdite.

Rouge : Une erreur est survenue


Liste des points d'arrêts

La liste des points d'arrêts donne un aperçu rapide des points d'arrêt apposés aux programmes ST et IL. Cette liste permet de les retrouver facilement, par fichier, instance et numéro de ligne.

Supprimer

Icône :

Action : Supprimer le point d'arrêt sélectionné

Tout supprimer

Icône :

Action : Supprime tout les points d'arrêts


Fichiers


Console


Langues


Mode


Texte


Ladder


Options


Oscilloscope


Sélection de l'interface réseau

La première étape consiste à sélectionner l'interface réseau sur laquelle le MPC est relié. Le MPC ne peut être relié que par une interface de type Ethernet.

La première tentative de connexion donne lieu à un avertissement du pare-feu de Windows.

Il est nécessaire de débloquer le programme de façon permanente de façon à pouvoir communiquer avec le MPC.

On passe alors à l'auto-détection du MPC


Auto détection

La phase d'auto-détection permet de rechercher tout les MPC disponible sur le réseau local ou est connecté le PC.

Si l'auto-détection s'est bien déroulée, la liste des MPC détectés apparaît.

Afin de repérer physiquement les MPC, l'assistant affiche leur numéro sur l'afficheur 7 segments :

Pour le MPC à l'adresse 192.168.1.136, l'afficheur 7 segments affiche L1.

Pour le MPC à l'adresse 192.168.1.155, l'afficheur 7 segments affiche L2.

Sélectionner votre MPC puis cliquer sur «Suivant» pour obtenir un résumé des configurations.

Si l'auto-détection à échoué, il est néanmoins possible de paramétrer le MPC par liaison série.

De même s'il n'est pas dans la liste, on doit cocher la case "Le MPC n'est pas dans la liste" pour pouvoir utiliser la liaison série.

Pour cela, comme indiqué sur l'écran, on active le DIP2 du MPC, pour pouvoir utiliser la liaison série de configuration et redémarrer le MPC.

On doit alors utiliser la liaison série.


Liaison série

Pour utiliser la liaison série de configuration, on doit indiquer au système, le lien série du PC sur lequel le MPC est relié.

Il faut alors relier le MPC avec un câble série croisé standard sur le port X18 - COM1.

Le MPC indique qu'il est prêt à communiquer avec un "C" sur l'afficheur de "Status".

Si la lecture des paramètres à été réalisée avec succès, on accède à au résumé des configurations.

Sinon un erreur de lecture est indiquée :

Dans ce cas vérifier le câble et le MPC et recommencer la procédure.


Résumé des configurations

Le résumé des configurations permet de confronter et comparer les paramètres de communication du projet et du MPC.

Ces informations ne tiennent pas compte de la compatibilité avec les paramètres de communication du PC.

Dans le cas où la liaison série a été utilisée, il est également possible de :

- Effacer les tâches dans le MPC.

- Effacer la mémoire sauvegardée.

Choisir suivant pour continuer. Si la configuration est identique, on passe directement à la validation de la configuration.

Si la liaison série est utilisée, il faut désactiver le DIP2 et redémarrer le MPC avant de pouvoir valider la configuration.

Si les configurations sont différentes on doit faire un choix de la configuration.


Choix de la configuration

Il est alors possible de décider quelle sera la configuration conservée.

La configuration est alors modifiée dans le PC ou le MPC.

On pourra alors la vérifier en procédant à la validation de la configuration.

Dans le cas ou la liaison série est utilisée, il est nécessaire de désactiver le DIP 2 et redémarrer le MPC préalablement.


Validation de la configuration

Le paramétrage de la configuration se termine toujours par une validation des paramètres, afin de s'assurer que le PC est capable de transmettre les informations véhiculés entre le logiciel Motion Studio et le MPC. On a maintenant la certitude que la configuration du MPC est identique à celle indiquée dans le projet.

Pour cela on compare et on vérifie la compatibilité :

- Des classes d'adresses du MPC et du PC

- Des adresses IP et des masques réseau

On termine la vérification par un échange de données (PING)

Si un incompatibilité est détectée entre le MPC et le PC, vérifier les paramètres de communication Ethernet du PC.


Configuration Interne

MPC

Accessible à partir d'un double-clic sur le nom MPC, cette fenêtre permet d'obtenir la liste complète des paramètres du MPC.


Ethernet TCP

  • Nom: Nom interne du MPC

  • Adresse IP: Adresse IP sur le réseau Ethernet TCP/IP

  • Masque: Masque sur le réseau Ethernet TCP/IP

  • Passerelle: Passerelle par défaut sur le réseau Ethernet TCP/IP

Les paramètres de la liaison Ethernet TCP/IP dépendent de l'installation du MPC sur le réseau ou sur le PC directement. Dans tous les cas, faire appel à l'administrateur du réseau pour déterminer les paramètres adaptés et utiliser l'assistant de paramétrage TCP/IP dans Menu Options | Assistant de paramétrage TCP/IP.


EtherCAT

  • Node : Noeud interne Ethercat du MPC, ne pas modifier.

  • Mode Ethercat (en mode usine) : Définit la longueur de la trame Ethercat, ce paramètre ne doit être modifié sans l'autorisation d'un technicien SERAD).


CANopen

  • Node : Numéro de noeud utilisé par le MPC, sur le réseau CANopen

  • Vitesse (Kbps) : Vitesse de la liaison CANopen

  • Timeout (ms) : Limite d'attente des réponses aux requêtes SDO

  • Relance : Nombre de relance des requêtes SDO avant échec.

  • Inversion des doubles mots : Mode de transfert des doubles mots.

  • Conversion des flottants : Conversion des flottants en virgules fixes pour les périphériques qui ne supportent pas les flottants ou qui ont des flottants codés différemment

  • Précision : Nombre de chiffres après la virgule dans le cas où la conversion des flottants en virgule fixe est activée.


COM1

  • COM1 / Configuration:

    • Vitesse (bauds) : Vitesse du port COM 1

    • Bits : Nombre de bits de données sur la trame RS232.

    • Parité : Mode de fonctionnement du bit de parité de la trame

    • Stops : Nombre de bits de stop sur la trame RS232.

    • Protocole : Choix du protocole de communication (Libre, Modbus maître ou Modbus esclave)

    • Mode : Mode de fonctionnement de la liaison (RS232 uniquement)

  • COM1 / Modbus RTU:

    • Node : Numéro de noeud utilisé sur la liaison en Modbus RTU

    • Timeout (ms) : Limite d'attente des réponses aux requêtes Modbus

    • Relance : Nombre de relance des requêtes Modbus avant échec

    • Inversion des doubles mots : Mode de transfert des doubles mots.

    • Conversion des flottants : Conversion des flottants en virgules fixes pour les périphériques qui ne supportent pas les flottants ou qui ont des flottants codés différemment

    • Précision : Nombre de chiffres après la virgule dans le cas où la conversion des flottants en virgule fixe est activée.


COM2

  • COM2 / Configuration:

    • Vitesse (bauds) : Vitesse du port COM 2

    • Bits : Nombre de bits de données sur la trame RS232 ou RS 485

    • Parité : Mode de fonctionnement du bit de parité de la trame

    • Stops : Nombre de bits de stop sur la trame RS232 ou RS 485

    • Protocole : Choix du protocole de communication (Libre, Modbus maître ou Modbus esclave)

    • Mode : Mode de fonctionnement de la liaison (RS232 ou RS485)

  • COM2 / Modbus RTU :

    • Node : Numéro de noeud utilisé sur la liaison en Modbus RTU

    • Timeout (ms) : Limite d'attente des réponses aux requêtes Modbus

    • Relance : Nombre de relance des requêtes Modbus avant échec

    • Inversion des doubles mots : Mode de transfert des doubles mots.

    • Conversion des flottants : Conversion des flottants en virgules fixes pour les périphériques qui ne supportent pas les flottants ou qui ont des flottants codés différemment

    • Précision : Nombre de chiffres après la virgule dans le cas où la conversion des flottants en virgule fixe est activée.


Accessoires

  • Horloge : Contrôle et réglage de l'horloge interne du MPC.

  • Chien de garde : Visualise et change l'état du relais de chien de garde du MPC.

  • Backup : Permet de définir le fonctionnement du système de gestion des données sauvegardées (Paramètres et variables sauvegardées). Par cet outil, on contrôle l'état de la mémoire sauvegardée et de sa sauvegarde en flash. Il est également possible de définir une sauvegarde automatique en flash (au démarrage et / ou sur batterie faible). Enfin des outils sont disponibles pour sauvegarder manuellement ou pour effacer les données sauvegardées.


Ajout d'un axe virtuel

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Dans la fenêtre Ajout, sélectionner Virtuel dans l'arborescence de gauche.

  4. Nommer l'axe virtuel et terminer en cliquant sur Ajouter


Liste des paramètres d'un axe virtuel

Accessible à partir d'un double-clique sur le nom de l'axe virtuel cette fenêtre permet d'obtenir la liste complète ces paramètre.


Configuration

Node interne : Noeud interne de l'axe virtuel. Ne pas modifier sauf dans le cas où 2 axes virtuels ont la même valeur de noeud.


Modbus RTU

Node Modbus : Numéro de noeud utilisé par une liaison Modbus RTU pour accéder aux paramètres de l'axe virtuel. Mette 0 si l'on souhaite inhiber l'accès.


CANopen

Node CANopen : Numéro de noeud utilisé par le réseau CANopen pour accéder aux paramètres de l'axe virtuel. Mette 0 si l'on souhaite inhiber l'accès.


Suppression d'un axe virtuel

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Afficher l'arborescence des périphériques internes en cliquant sur le + devant « Interne ».

  3. Dans le navigateur de projet, faire un clic gauche sur l'axe virtuel à supprimer.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Ajout d'un axe IMD

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Dans la fenêtre Ajout, sélectionner IMD dans l'arborescence de gauche.

  4. Nommer l'axe virtuel

  5. Configurer l'axe IMD :

    1. Soit en important un fichier de paramètre parmi la bibliothèque

    2. Soit en copiant un axe IMD existant en cochant la case « Créer à partir de »

  6. Terminer en cliquant sur Ajouter


Configuration EtherCAT

Paramétrage d'un axe IMD

Accessible à partir d'un double-clique sur le nom d'un axe IMD, cette fenêtre permet d'obtenir la liste complète des paramètres du variateur.


Variateur

  • Mode : Mode de fonctionnement de la régulation (Couple, vitesse ou position)

  • Modèle : Modèle de variateur IMD connecté

  • Node : Numéro de noeud du variateur sur le réseau EtherCAT

  • Courant nominal (A) : Courant nominal du variateur

  • Courant Max (A) : Courant maximal du variateur

  • Tension nominale (V) : Tension nominal du variateur (230v ou 400v)

  • Simulation : Passage de l'axe en mode "Simulation". Permet de faire fonctionner le MPC sans l'IMD connecté.


Régulation

Action : Fenêtre principale pour le paramétrage de la régulation du variateur. Elle permet d'accéder aux autres fenêtres de régulation et aux fenêtres de configuration.

  • Boucle simple:

Les 3 boucles de régulation utilisent le même retour de position (Résolveur ou SinCos). Il est possible à partir de cet écran de modifier le sens du retour de position.

  • Double boucle:

La boucle de position utilise un retour de position (Résolveur ou SinCos) différent des 2 autres boucles de régulations (couple et vitesse). Il est possible à partir de cet écran de modifier le sens du retour de position.

Boucle de courant

Action : Configurer la boucle courant du variateur

  • Consigne : Sélection de la source (valeur, entrée analogique ou RS232) exprimée en pourcentage du courant maximal du moteur.

  • Limite accélération : Limitation de la pente de la variation de courant

  • Limite courant : Limitation du courant en pourcentage du courant maximal du moteur.

  • Gain intégral : Régulation

  • Gain proportionnel : Régulation

Les limites d'accélération et de courant sont accessibles en mode paramètres avancés.

Boucle de vitesse

Action : Configurer la boucle vitesse du variateur

  • Consigne : Sélection de la source : valeur, entrée analogique, RS232

  • Limite accélération : Limitation de la pente de vitesse

  • Limite vitesse : Limitation de la vitesse en pourcentage de la vitesse nominale

  • Gain intégral : Régulation

  • Gain proportionnel : Régulation

Tableau de correspondance entre le pourcentage de la limite d'accélération et le temps pour passer de 0 à la vitesse nominale du moteur :

Les limites d'accélération et de vitesse sont accessibles en mode paramètres avancés.

Boucle de position

Action : Configurer la boucle de position du variateur.

  • Anticipation : Assure une erreur de poursuite proche de zéro à vitesse constante en ajoutant à la consigne une composante proportionnelle à la vitesse théorique.

  • Gain proportionnel : Définit la raideur de la régulation de position. Une valeur trop faible donne un asservissement mou, une valeur trop forte rend le système instable.


Entrées/sorties analogiques

Action : Configurer les entrées et sorties analogiques.

Entrées analogiques :

En mode boucle de courante, la voie 1 peut être utilisée comme consigne et la voie 2 en limite de courant avec comme valeur maximum : Inom * Imax.

  • Echelle : 10V= : Permet d'associer un pourcentage pour 10V sachant que 100% correspond à la valeur maximale du courant ou de la vitesse.
    Ex : Vitesse nominale = 3000tr/min
    Vitesse maximale = 110 %
    Tension sur la voie 1 -> ± 5V
    On a alors la vitesse maximale du moteur à 3300 tr/min et on choisira une échelle de 200 % pour faire correspondre 5V à la vitesse maximale.

  • Offset : Ajoute un offset à la valeur réelle reçue.

Sortie analogique :

  • Echelle : Permet de choisir la plage du signal de sortie.


Sécurité

Action : Ajuster les paramètres de sécurité pour une sécurité maximale.

DC Bus

Réglages usines, ne pas les modifier.

Dans le cas où une résistance externe est nécessaire, cocher la case Résistance externe (si elle n'est pas cocher, le variateur utilisent des paramètres par défaut pour gérer le ballast).

Cette résistance devra être bien dimensionnée sous peine de détérioration de celle-ci, son réglage est accessible en paramètres avancés.

  • Sous-tension : actif par défaut, tension minimum du variateur lorsqu'il est asservi. Provoque le défaut E02 sous tension.

  • Sur-tension : actif par défaut, tension maximum du variateur. Provoque le défaut E01 sur-tension.
    : Ce paramètre est modifiable seulement si on est en mode usine et si le paramètre Tension nominal est sur « Autre » (fenêtre paramètres, onglet variateur) sinon une valeur par défaut lui est attribuée (390 pour un drive 230V, 780 pour un drive 400V).

  • Résistance de freinage externe : à activer que si une résistance externe a été connectée au variateur.

  • Seuil de freinage : permet de définir à partir de quelle tension, le sur-tension DCBus sera dissipé par la résistance de freinage.
    : Ce paramètre est modifiable si on est en mode usine et si le paramètre Tension nominal est sur « Autre » (fenêtre paramètres, onglet variateur) sinon une valeur par défaut lui est attribuée (375 pour un drive 230V, 750 pour un drive 400V).

  • Ton et Période : permettent de définir la durée d'activation de la résistance de freinage :
    Tant que la durée Ton n'est pas dépassée la surtension DCBus peut être dissipé par la résistance de freinage après le variateur passe en défaut E01 sur-tension.
    : Ces paramètres sont utilisés que si la résistance de freinage externe est activée sinon des valeurs par défaut leurs sont attribuées.

Température

Réglages usines, ne pas les modifier.

  • Température moteur : permet de définir le seuil et la durée de dépassement de température moteur pour provoquer le défaut E07.

  • Température IGBT : permet de définir la température seuil et la durée de dépassement du module IGBT pour provoquer le défaut E06.

Courant

Réglages usines, ne pas les modifier.

  • I²t : Les moteurs brushless acceptent des courants crêtes (jusqu'à 2 fois le courant nominal). I2t permet de surveiller le courant moyen du variateur, sachant que celui-ci ne doit pas dépasser le courant nominal. En fonctionnement stabilisé, I2t doit rester à 0. La durée permet de définir la période sur laquelle le contrôle du courant moyen est effectué.

  • Sur-courant : Le variateur contrôle en permanence si le courant est dans une certaine plage (dépend du type de variateur), si ce courant est hors limite pendant durée du paramètre sur-courant alors le variateur passe en défaut E04 sur-courant.


Moteur

Action : Configurer le moteur et le choisir le type de type de retour moteur associés au variateur.

Moteur

  • Courant nominal : Courant nominal du moteur en A.

  • Courant maximal : Pourcentage par rapport au courant nominal. Par défaut 200% (Imax = 2 * Inom).

  • Couple nominal : Couple nominal du moteur en Nm. Cette information n'est pas utilisée par la régulation et est juste à titre indicatif.

  • NB paire de pole : Suivant le type de moteur (faire un autotunning résolveur).

  • Vitesse nominal : Vitesse nominal du moteur en tr/mn

  • Vitesse maximal : Pourcentage de la vitesse nominal utilisé dans le boucle de vitesse pour limiter le vitesse du moteur.

Capteur de température

  • Type : Réglage usine (PTC ou NTC).

  • Sonde PTC : l'erreur est déclenchée lorsque la résistance de la sonde est supérieure au seuil du variateur.

  • Sonde NTC : l'erreur est déclenchée lorsque la résistance de la sonde est inférieure au seuil du variateur.

Retour moteur

  • Type : Choix du retour moteur : retour résolveur X11 ou retour SinCos X13.


Résolveur / Sincos

Action : Configurer le retour moteur associé au variateur.

Résolveur

Action : Permet de configurer le retour résolveur du variateur

  • Offset : calage résolveur.

  • NB paire de pôle : indique le nombre de paire de pôles du résolveur.

  • Pour un résolveur ayant plusieurs paires de pôles, la position du rotor sur un tour pourra être décalée de NB paire de pôles / 360° (ex : 0, 120° ou 240° pour un résolveur avec 3 paires de pôles). De la même manière, une prise d'origine sur TOP Z pourra être décalé de NB paire de pôles / 360°.

Sincos

Action : Permet de configurer le retour SinCos du variateur

  • Résolution : Entrer la résolution en nombre d'incréments (4 incréments par point). Ex : pour un codeur 500 points rentrer 2000 incréments.

  • Lien série : si aucun est sélectionné, alors le retour position est relatif ; si Hiperface est sélectionné, on reçoit une position absolue.

  • En cas de défaut sur le lien série, une erreur résolveur E08 ce produira lors de la demande d'asservissement.


Entrée sortie codeur multifonction

Action : Configurer l'entrée et la sortie codeur multifonction.

Entrée codeur multifonction

Action : Permet de paramétrer l'entrée codeur

Mode incrémental :

  • Résolution : Codeur maître : rentrer la résolution en nombre d'incréments (4 incréments par point). Ex : pour un codeur 500 points rentrer 2000 incréments.

Mode Stepper :

Permet de raccorder une commande de moteur pas à pas d'un constructeur quelconque au variateur IMD. Le nombre de pas est réglable ainsi que le sens de rotation.

  • Résolution : Codeur maître : rentrer la résolution du codeur STEPPER en nombre d'incréments.

Mode SSI :

Permet de raccorder un codeur absolu de type SSI pour les fonctions codeur maître ou régulation double boucle (retour boucle de position).

C'est à partir des signaux cycliques absolus sur l'entrée codeur que la position de l'arbre moteur est calculée.

  • Bit : Nombre de bit composant l'information de la position (de 2 à 31).

  • Fréquence : Fréquence d'horloge (1,5 Mhz maxi)

  • Résolution : Codeur maître : entrer la résolution du codeur, en nombre d'incréments.

  • Code GRAY: Oui/Non (dépend du type de codeur)

Attention : La résolution doit être inférieure ou égale à 2^nb Bit et la durée maxi pour un échantillonnage (2^nb Bit / Fréquence) doit être inférieure à 100µs.

Sortie codeur multifonction

Action : Permet de paramétrer la sortie codeur

  • Mode inactif: La sortie codeur n'est pas utilisée.
    Mode actif : La sortie codeur renvoie un signal incrémental par rapport à la source sélectionné et la résolution saisie.
    Mode bypass: (codeur incrémental) L'entrée codeur multifonctions est recopiée sur la sortie codeur.

  • Source : Résolveur, SinCos, Entrée multifonction (incrémental, stepper, SSI), Virtuel, Analogique

  • Résolution : la résolution de la sortie codeur en nombre d'incréments.


Codeur auxiliaire

Action : Configurer le codeur auxiliaire


Suppression d'un axe IMD

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Afficher l'arborescence des périphériques Ethercat en cliquant sur le + devant « Périphériques EtherCAT ».

  3. Dans le navigateur de projet, faire un clic gauche sur l'axe IMD à supprimer.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Ajout d'un module E/S

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Dans la fenêtre Ajout, sélectionner E/S CANopen dans l'arborescence de gauche.

  4. Nommer le module E/S CANopen et terminer en cliquant sur Ajouter


Paramétrage d'un module E/S

Action : Configurer le module RIO40

Node : Numéro de noeud du module Entrées / Sorties sur le réseau CANopen.


Suppression d'un module E/S

  1. Dans le navigateur de projet, sélectionner l'onglet Configuration.

  2. Afficher l'arborescence des périphériques CANopen en cliquant sur le + devant « Périphériques CANopen ».

  3. Dans le navigateur de projet, faire un clic gauche sur le module E/S CANopen à supprimer.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Axes

Liste des paramètres Motion d'un axe IMD

Accessible à partir d'un double-clique sur le nom d'un axe IMD, cette fenêtre permet d'obtenir la liste complète des paramètres motion du variateur.


Principal

Action : Définir la cinématique de l'axe.

Réducteur

  • RIn : Rapport d'entrée du réducteur

  • Rout : Rapport de sortie sortie du réducteur

Pour RIn tour à l'entrée du réducteur on obtient Rout tour en sortie de réducteur. Le rapport de réduction du réducteur est donc Rout / Rin

Unité

  • Position : Unité logique de la position de l'axe. L'unité saisie n'est qu'informative et ne rentre pas dans le calcul des positions.

Position

  • Distance pour un Rout : Distance parcourue par l'axe pour un tour en sortie de réducteur

  • Inversion du sens de rotation : Inverse le sens d'évolution de la position de l'axe, par rapport au déplacement physique de l'arbre moteur.

Modulo

  • Actif : Active le modulo sur l'axe

  • Valeur : Valeur du modulo de l'axe

Exemple 1 : Axe infini

Moteur en bout de vis à bille au pas de 5mm.

Unités = mm, Rin = 1, Rout = 1, Distance par tour = 5.000, Modulo non activé

Exemple 2 : Axe infini

Moteur avec réducteur de 10.

En sortie de réducteur, tourelle 360°, Unités = degrés, Rin = 10, Rout = 1, Distance par tour = 360.000, modulo activé avec une valeur de 360.000


Profil

Action : Définir le profile par défaut de l'axe. Ce profile est utilisé, comme valeur par défaut dans les instructions de mouvement (si aucune instruction comme VEL, ACC ou DEC ne vient définir une valeur du profile). L'outil Motion et les instructions qui utilisent des pourcentages utilisent ces valeurs comme.

  • Vitesse : Vitesse par défaut de l'axe

  • Accélération : Accélération par défaut de l'axe

  • Décélération : Décélération par défaut de l'axe

  • Décélération urgente : Décélération urgente, utilisée lorsqu'une butée est atteinte ou lors de la désactivation, si l'option Utiliser la décélération urgente lors de la désactivation est active.

  • Courbe en S : permet d'avoir des accélérations et décélérations en forme de S, ce qui permet d'adoucir les débuts et fins de mouvement. L'accélération avec un coefficient S peut varier de 0 à 200% de l'accélération donnée dans le profil de vitesse.

L'accélération sinus est en cours de développement et non disponible sur cette version.

  • Utiliser la décélération lors de la désactivation : Permet de provoquer une décélération suivant la pente de décélération urgente lors de la désactivation avant de désactiver l'axe afin de tenter de freiner l'axe avant de le désactiver au lieu de le laisser continuer en roue libre.


Prise d'origine

Action : Définir les paramètres de la prise d'origine de l'axe. Ces paramètres sont utilisés par l'instruction de prise d'origine par l'outil Motion.

  • Type : Définit le type de prise d'origine pour l'outil motion. L'instruction HOME peut également utiliser ce paramètre, en mettant -1 comme type dans l'instruction.

  • Entrée : Entrée utilisée dans certains types de prise d'origine. L'entrée peut être l'entrée E4 de l'IMD ou une entrée du MPC.

  • Vitesse : Vitesse appliquée à l'axe pendant les déplacements en prise d'origine.

  • Zéro programme : Position physique de référence ou se situe le zéro logique.

Les types de prise d'origine sont détaillés dans la rubrique « Programmation du contrôle de mouvement | Paramétrage de l'axe | Prise d'origine »


Contrôle

Action : Répertorier tout les paramètres de contrôles de l'axe

Position

  • Erreur de poursuite : Dès que l'axe passe en mode asservi, il est contrôlé à tout moment : à l'arrêt, en mouvement. Si la différence entre sa position théorique calculée et sa position réelle donnée par le retour codeur est supérieure à l'erreur de poursuite maxi, l'axe est désactivé. Le réglage de cette valeur est très important : une valeur trop petite entraîne des arrêts intempestifs sur l'axe, une valeur trop grande influe sur la sécurité des organes électriques et mécaniques.
    : la valeur de l'erreur de poursuite se fait dans l'unité sélectionnée et dépend des paramètres de l'écran Motion control \ Unités.

  • Fenêtre de position : Ce paramètre est utilisé pour modifier la fenêtre de positionnement minimale entre la position réelle et la position théorique. Après un déplacement, si la différence entre la position réelle et la position demandée sont inférieurs à la fenêtre de position, le système considère que la position est atteinte.
    : la valeur de l'erreur de poursuite se fait dans l'unité sélectionnée et dépend des paramètres de l'écran Motion control \ Unités.

Butées

  • Mini :

  • Maxi :

La décélération urgente (motion control / profil de vitesse) est utilisée pour arrêter le mouvement lorsqu'on utilise les entrées de Fin de course quand le variateur est en mode position.

Entrées sorties

  • Fonction de l'entrée E1 :

  • Fonction de la sortie S1 :

  • Fonction de la sortie S2 :

La sortie variateur prêt doit être insérée dans la boucle d'arrêt d'urgence.

Si le frein est sélectionné sur la sortie 2, il est nécessaire d'insérer un relais statique externe (la sortie n°2 étant limitée à 100 mA) avec une diode de roue libre.

L'état logique de la sortie frein correspond à la validation interne du variateur.


Auxiliaire

Action : Répertorier tout les paramètres de l'entrée codeur auxiliaire

Position

  • Distance pour un Rout : Distance parcourue par l'entrée codeur auxiliaire pour un tour en sortie de réducteur

  • Inversion du sens de rotation : Inverse le sens d'évolution de la position de l'entrée codeur auxiliaire, par rapport au déplacement physique.

Unité

  • Position : Unité logique de la position de l'entrée codeur auxiliaire. L'unité saisie n'est qu'informative et ne rentre pas dans le calcul des positions.

Prise d'origine

  • Zéro programme : Position physique de référence ou se situe le zéro logique.

Modulo

  • Actif : Active le modulo sur l'entrée codeur auxiliaire

  • Valeur : Valeur du modulo de l'axe


Liste des paramètres Motion d'un axe Virtuel

Accessible à partir d'un double-clique sur le nom d'un axe Virtuel, cette fenêtre permet d'obtenir la liste complète des paramètres motion de l'axe virtuel.


Principal

Action : Définir la cinématique de l'axe virtuel.

Réducteur

  • RIn : Rapport d'entrée du réducteur

  • Rout : Rapport de sortie sortie du réducteur

Pour RIn tour à l'entrée du réducteur on obtient Rout tour en sortie de réducteur. Le rapport de réduction du réducteur est donc Rout / Rin

Unité

  • Position : Unité logique de la position de l'axe. L'unité saisie n'est qu'informative et ne rentre pas dans le calcul des positions.

Position

  • Distance pour un Rout : Distance parcourue par l'axe pour un tour en sortie de réducteur

  • Inversion du sens de rotation : Inverse le sens d'évolution de la position de l'axe, par rapport au déplacement physique de l'arbre moteur.

Modulo

  • Actif : Active le modulo sur l'axe

  • Valeur : Valeur du modulo de l'axe

Exemple 1 : Axe infini

Moteur en bout de vis à bille au pas de 5mm.

Unités = mm, Rin = 1, Rout = 1, Distance par tour = 5.000, Modulo non activé

Exemple 2 : Axe infini

Moteur avec réducteur de 10.

En sortie de réducteur, tourelle 360°, Unités = degrés, Rin = 10, Rout = 1, Distance par tour = 360.000, modulo activé avec une valeur de 360.000


Ajout d'un profil

Ajout d'un profil de came

  1. Dans le navigateur de projet, sélectionner l'onglet Motion.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Dans la fenêtre Ajout, sélectionner Profil de came dans l'arborescence de gauche.

  4. Nommer le profil de came et terminer en cliquant sur Ajouter


Paramétrage d'un profil

Présentation de l'éditeur de profil de came

Accessible à partir d'un double-clique sur le nom d'une came, cette éditeur permet de créer / modifier les cames électroniques à exécuter sur les axes.

L'éditeur est composé d'un éditeur de came graphique dans la partie supérieure et d'une zone d'options répartie sur trois onglets :

  • Vitesse et accélération

  • Table

  • Paramètres

Editeur de came graphique

Cet éditeur graphique donne une représentation sous forme de courbe du déplacement de l'axe aux différentes positions de la came. Les points de la came sont représentés par des croix sur le graphique.

  1. Une barre d'outils permet un accès rapide aux fonctions de base de l'édition de came :

Curseur

Icône :

Signification : Active l'outil curseur. Permet les mesures de positions sur l'écran de l'éditeur. Pour cela, cliquer sur l'éditeur graphique à l'endroit où se trouve l'origine de la mesure. Un petite croix rouge apparaît à la position de l'origine.

Déplace

Icône :

Signification : Active l'outil de déplacement de points. Cet outil autorise le placement manuel des points sur l'écran.

Insérer

Icône :

Signification : Active l'outil d'insertion de point. Grâce à cet outil, on insère les points, un par un pour former la courbe de déplacement de l'axe.

Supprimer

Icône :

Signification : Active l'outil de suppression de point. En cliquant sur un point avec cet outil, il est supprimé et la courbe est re-calculée en tenant compte de cette modification.

Centrage automatique

Icône :

Signification : Centre automatiquement la courbe sur l'écran de manière à ce qu'elle soit visible en totalité.

Zoom sélection

Icône :

Signification : Active l'outil de zoom par sélection. Sélectionnez une zone de l'écran à l'aide de cet outil en gardant le bouton de la souris enfoncé. En relâchant, la zone sélectionnée est agrandie pour occuper la totalité de la fenêtre d'édition.

  2. Un outil de zoom vertical est à la disposition de l'utilisateur pour affiner le positionnement des points sur la came. Cet outil est muni de deux flèches permettant l'agrandissement comme la réduction de l'échelle. Une barre permet le décalage vertical de la courbe par rapport à l'écran de l'éditeur.

  3. En permanence, la position sur la courbe est disponible afin de placer précisément les points.

  4. La zone d'édition graphique permet le placement des points, les déplacements, zoom de la courbe. En mode « Curseur » cliquer sur le graphique permet de placer l'origine de la mesure indiquée en (3). Ceci permet de mesurer les distances. En mode « Déplacement » un carré rouge apparaît pour indiquer le point choisir. Cliquer sur le point pour le déplacer.

  5. Un outil de zoom horizontal est à la disposition de l'utilisateur pour affiner le positionnement des points sur la came. Cet outil est muni de deux flèches permettant l'agrandissement comme la réduction de l'échelle. Une barre permet le décalage horizontal de la courbe par rapport à l'écran de l'éditeur.


Onglet Vitesse et accélération

L'onglet « Vitesse et accélération » donne accès à la visualisation de la vitesse et de l'accélération résultante de la courbe de position saisie.


Table

Onglet Table ou éditeur de came en liste

L'onglet « Table » donne accès à la table des points de la came.

  1. Une barre d'outil permet un accès rapide aux fonctions de base de l'édition de liste :

Insérer

Icône :

Signification : Active l'outil d'insertion de point. Grâce à cet outil, on insère les points, un par un pour former la courbe de déplacement de l'axe.

Supprimer

Icône :

Signification : Active l'outil de suppression de point. En cliquant sur un point avec cet outil, il est supprimé et la courbe est re-calculée en tenant compte de cette modification.

  2. Dans cette table on liste les points avec leurs coordonnées X,Y et la pente dX,dY. Le champ mode indique la méthode de calcul de la pente au point correspondant. Suivant le mode choisi, on obtient des valeurs différentes pour dX et dY. Le champ mode n'est pas transmit dans le MPC. Le mode est interprété à partir des valeurs de dX et dY.

  • Mode Ligne : dX=X et dY=1. Dans ce mode, une ligne droite est automatique calculée entre ce point et le suivant.

  • Mode Manuel : dX et dY sont libre. Dans ce mode dX et dY détermine la pente au point comme étant dY/dX.

  • Mode Auto : dX=X et dY=0. Dans ce mode, la pente au point est calculée automatiquement comme la moyenne arithmétique des pentes aux points précédent et suivant.


Paramètres

Onglet Paramètres

L'onglet « paramètres » permet de définir la came.

  • Description : Information sur le rôle de la came.

  • Nombre : Nombre de point de la came. Minimum 2.

  • Début maître : Origine des positions sur le maître.

  • Fin maître : Position maximale sur le maître.

  • Unité : Unité sur l'axe maître, utilisé pour la représentation graphique.

  • Début esclave : Origine des positions sur l'esclave.

  • Fin esclave : Position maximale sur l'esclave.

  • Unité : Unité sur l'axe esclave, utilisé pour la représentation graphique.


Suppression d'un profil

Suppression d'un profil de came

  1. Dans le navigateur de projet, sélectionner l'onglet Motion.

  2. Afficher l'arborescence des profils de came en cliquant sur le + devant « Profils de came ».

  3. Dans le navigateur de projet, faire un clic gauche sur le profil de came à supprimer.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Affectation

L'éditeur de variables d'entrées/sorties

A partir d'un double-clic sur Editeur celui-ci permet de définir pour chaque entrée/sortie : un nom, une inversion et un filtrage.
Pour les sorties, il est possible de définir en plus une valeur de replie.
Des noms peuvent être affectés à des blocs de 8, 16 ou 32 entrées ou sorties.
Le choix des inversions, filtrage, numéro de filtre et valeur de repli ne sont paramétrables que pour des entrées ou sorties unitaires.
Les entrées / sorties nommées sont utilisées pour créer un fichier IO.POE utilisé à la compilation pour déclarer les entrées / sorties globales.
Les déclarations de ce fichier doivent être reprises dans la déclaration des variables des programmes qui les utilisent, sans la partie affectation directe (AT %XX.X).

  • Périphérique : Nom du périphérique à paramétrer (MPC, axe ou module E/S CANopen

  • Nom : Nom de l'entrée, du bloc d'entrées, de la sortie ou du bloc de sorties.

  • Inversion : NON pour travailler en logique positive (état hardware = état software), OUI pour travailler en logique négative.

  • Filtré : Indique si l'entrée est filtrée.

  • Filtre : 1 si l'entrée utilise le filtre n°1 ou 2 si l'entrée utilise le filtre n°2.
    Nota : Sur les axes IMD, le filtre n° n'est pas géré.

  • Repli : Valeur de repli de la sortie en cas de rupture de la communication.

  • Adresse : Adresse dans l'image de process, calculée par le Motion Studio et servant à déclarer les entrées sorties dans le fichier IO.POE.


Paramètrage des E/S MPC

Paramétrage des E/S MPC

Accessible à partir d'un double-clique sur MPC, cette fenêtre permet d'obtenir la liste complète des paramètres des entrées / sorties du MPC. Elle reprend les valeurs d'inversion, filtrage de l'éditeur d'entrées / sorties et permet en plus de régler les valeurs des filtres.

  • Inversion des entrées 1 à 32 : Inversion des entrées en binaire

  • Filtrage des entrées 1 à 32 : Filtrage des entrées en binaire

  • Sélection du filtre des entrées 1 à 32 : Sélection du filtre en binaire

  • Filtre 1 (ms) : Valeur du filtre 1 en ms

  • Filtre 2 (ms) : Valeur du filtre 2 en ms

  • Inversion des sorties 1 à 32 : Inversion des sorties en binaire

Les paramètres des sorties sont indiqués par un bloc de 32 sorties. Le MPC ne possédant que 24 sorties, les autres bits de cette valeur ne sont pas pris en compte.


Paramètrage des E/S IMD

Paramétrage des E/S IMD

Accessible à partir d'un double-clique sur le nom d'un axe IMD, cette fenêtre permet d'obtenir la liste complète des paramètres des entrées / sorties du variateur. Elle reprend les valeurs d'inversion, filtrage, repli de l'éditeur d'entrées / sorties et permet en plus de régler la valeur du filtre 1.

  • Inversion des entrées 1 à 32 : Inversion des entrées en binaire.

  • Filtrage des entrées 1 à 32 : Filtrage des entrées en binaire.

  • Sélection du filtre des entrées 1 à 32 : Sélection du filtre en binaire.

  • Filtre 1 (ms) : Valeur du filtre 1 en ms.

  • Fonction entrée 1 : Permet d'activer la fonction autorisation variateur (enable).

  • Inversion des sorties 1 à 32 : Inversion des sorties en binaire.

  • Valeur de repli des sorties 1 à 32 : Valeur affectée aux sorties en cas de rupture de communication en binaire.

  • Fonction sortie 1 : Permet d'activer la fonction variateur prêt.

  • Fonction sortie 2 : Permet d'activer la fonction pilotage de frein parking.

Les paramètres des entrées et des sorties sont indiqués par un bloc de 32 ou 16 bits. Le variateur ne possédant que 16 entrées et 10 sorties, les autres bits de ces valeurs ne sont pas pris en compte.


Paramétrage des E/S CANIO

Paramétrage des E/S CANopen

Accessible à partir d'un double-clique sur le nom d'un module CANopen, cette fenêtre permet d'obtenir la liste complète des paramètres des entrées / sorties du module d'entrées / sorties CANopen. Elle reprend les valeurs d'inversion, filtrage, repli de l'éditeur d'entrées / sorties et permet en plus de régler les valeurs des filtres.

  • Nombre d'entrées : Nombre d'entrées présentes sur le module. Cette valeur est utilisée dans la fonction d'initialisation du module d'entrées / sorties CANopen pour le paramétrage de ce dernier.

  • Adresse des entrées : Paramètre calculé par l'éditeur d'entrées / sorties et utilisé dans la fonction d'initialisation du module d'entrées / sorties CANopen pour le paramétrage de ce dernier.

  • Inversion des entrées XX à XX : Inversion des entrées en binaire, par bloc de 32 entrées, en fonction du nombre d'entrées déclarées.

  • Filtrage des entrées XX à XX : Filtrage des entrées en binaire, par bloc de 32 entrées, en fonction du nombre d'entrées déclarées.

  • Sélection du filtre des entrées XX à XX : Sélection du filtre en binaire, par bloc de 32 entrées, en fonction du nombre d'entrées déclarées.

  • Filtre 1 (ms) : Valeur du filtre 1 en ms

  • Filtre 2 (ms) : Valeur du filtre 2 en ms

  • Nombre de sorties : Nombre de sorties présentes sur le module. Cette valeur est utilisée dans la fonction d'initialisation du module d'entrées / sorties CANopen pour le paramétrage de ce dernier.

  • Adresse des sorties : Paramètre calculé par l'éditeur d'entrées / sorties et utilisé dans la fonction d'initialisation du module d'entrées / sorties CANopen pour le paramétrage de ce dernier.

  • Inversion des sorties XX à XX : Inversion des sorties en binaire, par bloc de 32 entrées, en fonction du nombre de sorties déclarées.

  • Valeur de repli des sorties XX à XX : Valeur affectée aux sorties en cas de rupture de communication, en binaire, par bloc de 32, en fonction du nombre de sorties déclarées.

Un module d'entrées / sorties CANopen pouvant posséder jusqu'à 256 entrées et 256 sorties, les paramètres de toutes ces entrées / sorties sont accessibles afin de pouvoir moduler sa taille en fonction de l'évolution du projet sans être obligé de le recréer.


Configuration du multitâche

Accessible à partir d'un double-clique sur le mot Tâches, cette fenêtre indiquer les paramètres du multitâche.

  • Vieillissement des tâches de fond : Temps de cycle total pour toutes les tâches de fond.

  • Action du chien de garde :

    • Aucune : Aucune action en cas de déclenchement du chien de garde d'une tâche

    • Erreur système sans arrêt des tâches : Les tâche ne sont pas arrêté mais une erreur système apparaît sur l'afficheur

    • Erreur système avec arrêt des tâches : Les tâches sont arrêtées et une erreur système apparaît sur l'afficheur

    • Avertissement : Un avertissement apparaît sur l'afficheur

    • Evènement système : Un événement système est généré afin que le programme gère ce cas.

  • Puissance réservée pour linux : Pourcentage d'utilisation du processeur réservé pour le système d'exploitation

  • Période des statistiques : Période de calcul des statistiques visualisable dans l'outil performance.

  • Nombre de banque de variable : Nombre de banque de variable sauvegardées

  • Taille d'une banque de variable : Taille en octet d'une banque de variables sauvegardées. Maximum 65283 octets

  • Activer la sauvegarde de la trace d'exécution : permet d'activer l'outil « aller à la position d'exécution sauvegardée » et de connaître la dernière instruction exécuter par le MPC avant redémarrage (Attention l'activation de cette outil dégrade les performances du MPC).


Configuration des communications

Accessible à partir d'un double-clique sur le mot Tâches, cette fenêtre indiquer les paramètres de bus de terrain.

  • Priorité des communications CAN : Défini la priorité de la tâche de traitement des messages CANopen dans le système d'exploitation.

  • Priorité des communications Modbus : Défini la priorité de la tâche de traitement des messages Modbus dans le système d'exploitation.

  • Priorité des communications Modbus TCP : Défini la priorité de la tâche de traitement des messages Modbus TCP dans le système d'exploitation.

  • Durée minimale entre deux messages CAN : Défini le temps d'attente sur le BUS CANopen entre deux messages. Permet de limiter le débit pour permettre aux périphériques lents de traiter tous les messages.

  • Durée minimale entre deux messages Modbus : Défini le temps d'attente en Modbus entre deux messages. Permet de limiter le débit pour permettre aux périphériques lents de traiter tous les messages.

  • Durée minimale entre deux messages Modbus TCP : Défini le temps d'attente en Modbus TCP entre deux messages. Permet de limiter le débit pour permettre aux périphériques lents de traiter tous les messages.


Création d'une tâche

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Dans la fenêtre Ajout, sélectionner Tâches dans larborescence de gauche.

  4. Nommer et paramétrer votre nouvelle tâche puis terminer en cliquant sur Ajouter


Configuration des tâches

Accessible à partir d'un double-clique sur le mot Tâches, cette fenêtre indiquer les paramètres de chacune des tâches.

  • Nom : Nom de la tâche

  • Type : Type de tâche (Cyclique, Timer, Evènement utilisateur ou système)

  • Priorité : Priorité de la tâche.

  • Démarrage :

    • Automatique : Démarrage automatique à la fin de la tâche d'initialisation

    • Manuel : Démarrage manuel par l'instruction RUN dans un programme

    • Initialisation : Démarrage exclusif avant le démarrage des autres programmes

  • Gestion des entrées / sorties :

    • Directe : Utilisation des instructions INP et OUT pour gérer les entrées / sortie directement

  • Par image de process : Utilisation des entrées / sorties déclarés dans l'éditeur d'affectation. Les entrées / sorties sont mis à jour par l'image de process en début et fin de tâche.


Modification d'une tâche

Modification des paramètres d'une tâche :

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, double cliquer sur le nom « tâches ».

  3. Dans la fenêtre Modification, sélectionner la tâche à modifier a partir de l'arborescence de gauche.

  4. Modifier les paramètres de votre tâche et fermer la fenêtre.

Renommer une tâche :

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Faire un clic droit sur la tâche et sélectionner Renommer dans le menu contextuel.

Déplacer une tâche :

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Faire un clic droit sur la tâche et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel pour déplacer la tâche.


Suppresion d'une tâche

Suppression d'une tâche

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».
    ð     Vérifier que la tâche ne contient plus de programmes.

  3. Dans le navigateur de projet, cliquer gauche sur la tâche à supprimer.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Création d'un programme

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Afficher l'arborescence des types de programme, en cliquant sur le + devant « Programmes ».

  4. Sélectionner un type de programme à partir de la liste.

  5. Nommer et paramétrer votre nouveau programme puis terminer en cliquant sur Ajouter.


Configuration des programmes

Accessible à partir d'un double-clic sur le mot Tâches, cette fenêtre indiquer les paramètres de chacun des programmes.

  • Nom : Nom du programme

  • Type : Langage utilisé pour écrire le programme

  • Actif : Définit s'il doit être ajouté à la liste des programmes de la tâche à l'exécution.

  • Tâche : Nom de la tâche auquel il appartient.

  • Index : Index dans la liste des programmes de la tâche. Permet de définir l'ordre d'exécution des programmes dans la tâche.


Modification d'un programme

Edition d'un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Afficher l'arborescence des programmes, en cliquant sur le + devant le nom de la « tâche » contenant le programme à modifier.

  4. Double-cliquer sur le programme à modifier à partir de la liste.

Renommer un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Afficher l'arborescence des programmes, en cliquant sur le + devant le nom de la « tâche » contenant le programme à modifier.

  4. Faire un clic droit sur le programme et sélectionner Renommer dans le menu contextuel.

Déplacer un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Afficher l'arborescence des programmes, en cliquant sur le + devant le nom de la « tâche » contenant le programme à modifier.

  4. Faire un clic droit sur la tâche et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel pour déplacer la tâche.

Propriété d'un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, double cliquer sur le nom « tâches ».

  3. Dans la fenêtre Modification, ouvrir l'arborescence de la tâche contenant le programme à modifier à partir de l'arborescence de gauche.

  4. Ouvrir l'arborescence de la tâche contenant le programme

  5. Faire un clic droit sur le programme et modifier les propriétés du programme

  6. Fermer la fenêtre pour revenir à l'éditeur.


Suppression d'un programme

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « tâches ».

  3. Afficher l'arborescence la liste des programmes en cliquant sur le + devant la tâche contenant le programme à supprimer.

  4. Dans l'arborescence, sélectionner le programme à supprimer avec un clique gauche.

  5. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  6. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Création d'un bloc fonctionnel

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Afficher l'arborescence des types de bloc fonctionnel, en cliquant sur le + devant « Blocs fonctionnels ».

  4. Sélectionner un type de blocs fonctionnels à partir de la liste.

  5. Nommer et paramétrer votre nouveau bloc fonctionnel puis terminer en cliquant sur Ajouter.


Modification d'un bloc fonctionnel

Edition d'un bloc fonctionnel:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des blocs fonctionnels en cliquant sur le + devant « blocs fonctionnels ».

  3. Double-cliquer sur le bloc fonctionnel à modifier à partir de la liste.

Renommer un bloc fonctionnel:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des blocs fonctionnels en cliquant sur le + devant « blocs fonctionnels ».

  3. Puis cliquer droit sur le bloc fonctionnel et sélectionner Renommer dans le menu contextuel.

Déplacer un bloc fonctionnel:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des blocs fonctionnels en cliquant sur le + devant « blocs fonctionnels ».

  3. Puis cliquer droit sur le bloc fonctionnel et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel pour déplacer la tâche.


Suppresion d'un bloc fonctionnel

Suppression d'un bloc fonctionnel

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des blocs fonctionnels en cliquant sur le + devant « blocs fonctionnes ».

  3. Dans l'arborescence, sélectionner le bloc fonctionnel à supprimer avec un clique gauche.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Création d'une fonction

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Afficher l'arborescence des types de fonction en cliquant sur le + devant « Fonctions ».

  4. Sélectionner un type de fonctions à partir de la liste.

  5. Nommer et paramétrer votre nouvelle fonction puis terminer en cliquant sur Ajouter.

Attention

La configuration du retour de la fonction se fait dans la fenêtre d'édition de la tâche


Modification d'une fonction

Edition d'une fonction:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des fonctions en cliquant sur le + devant « fonctions ».

  3. Double-cliquer sur la fonction à modifier à partir de la liste.

Renommer un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des fonctions en cliquant sur le + devant « fonctions ».

  3. Puis cliquer droit sur le fonction et sélectionner Renommer dans le menu contextuel.

Déplacer un programme:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des fonctions en cliquant sur le + devant « fonctions ».

  3. Puis cliquer droit sur la fonction et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel pour déplacer la tâche.

Modifier le retour d'une fonction:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des fonctions en cliquant sur le + devant « fonctions ».

  3. Double-cliquer sur la fonction à modifier à partir de la liste.

  4. Dans le coin supérieur gauche de la fenêtre d'édition de la fonction est affiché le type de retour de la fonction, cliquer sur le bouton Change.

  5. Saisir le nouveau type de retour et valider en appuyant sur le bouton OK.


Suppresion d'une fonction

Suppression d'une fonction

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des fonctions en cliquant sur le + devant « Fonctions ».

  3. Dans l'arborescence, sélectionner la fonction à supprimer avec un clique gauche.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Ajout d'un fichier de type de données

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Cliquer sur « Définition de types »:

  4. Nommer le nouveau fichier de type puis terminer en cliquant sur Ajouter.


Modification d'un type de données

Modification d'un fichier de type de données

Edition d'un type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des types de fonction en cliquant sur le + devant « TypeDefs ».

  3. Double cliquer sur « Usertype.TYP » ou au autre fichier de type que vous avez créer, pour ouvrir l'éditeur de type de données.

Renommer un fichier de type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Typedefs ».

  3. Faire un clic droit sur un des fichiers de type de données et sélectionner Renommer dans le menu contextuel.

Déplacer un fichier de type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Typedefs ».

  3. Faire un clic droit sur un des fichiers de type de données et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel.


Suppression d'un type de données

Suppression d'un fichier de type de données

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Typedefs ».

  3. Dans l'arborescence, sélectionner le fichier de type de donnés à supprimer avec un clique gauche.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Ajout d'un variable globale

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Dans le navigateur de projet, cliquer sur le bouton Ajout [image].

  3. Cliquer sur « Variables globales »:

  4. Nommer le nouveau fichier de variables globales puis terminer en cliquant sur Ajouter.


Modification d'une variable globale

Modification d'un fichier de variable globale

Edition d'un type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des types de fonction en cliquant sur le + devant « Variables globales ».

  3. Double cliquer sur « Global.POE » ou au autre fichier de variable globale que vous avez créer, pour ouvrir l'éditeur de type de données.

Renommer un fichier de type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Variables globales ».

  3. Faire un clic droit sur un des fichiers de type de données et sélectionner Renommer dans le menu contextuel.

Déplacer un fichier de type de données:

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Variables globales ».

  3. Faire un clic droit sur un des fichiers de type de données et sélectionner Déplacer vers le haut ou Déplacer vers le Bas du menu contextuel.


Suppression d'une variable globale

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des tâches en cliquant sur le + devant « Variables globales ».

  3. Dans l'arborescence, sélectionner le fichier de type de donnés à supprimer avec un clique gauche.

  4. Dans le navigateur de projet, cliquer sur le bouton Suppression [image].

  5. Confirmer la suppression en cliquant sur OK dans la fenêtre d'avertissement.


Editeur de variables sauvegardées

Ouverture de l'éditeur de variables sauvegardées

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Cliquer sur le + devant « Variables globales ».

  3. Double cliquer sur « Editeur de variables sauvegardé es ».


Utilisation de l'éditeur de variables sauvegardées

Choisir une banque

Dans le coin supérieur gauche, choisir la banque de mémoire

Ajouter une variable sauvegardée

Cliquer le sur bouton ajout
L'éditeur créé automatique une variable VARxx à la fin de la table

Modifier une variable sauvegardée

Cliquer sur une des cellules de la variable

Supprimer une variable sauvegardée

Cliquer sur une des cellules de la variable

Cliquer sur le bouton Supprimer

Vérifier les variables sauvegardées

A la fin de la déclaration des variables, appuyer sur le bouton


Fermeture de l'éditeur de variables sauvegardées

Avant de fermer l'éditeur de variables sauvegardées, lancer une vérification de votre table en cliquant sur l'icône

Vérifier le console si des messages d'erreurs apparaissent:

Si des messages d'erreur apparaissent, vous devez corriger toutes les erreurs pour pouvoir sauvegarder et ferme l'éditeur


Ouverture de l'éditeur de variables d'échange

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Cliquer sur le + devant « Variables globales ».

  3. Double cliquer sur « Editeur de variables sauvegardé es ».


Editeur de variables d'échange

Utilisation de l'éditeur de variables d'échange

Ajouter une variable d'échange

Cliquer le sur bouton ajout
L'éditeur créé automatique une variable VARxx à la fin de la table

Modifier une variable d'échange

Cliquer sur une des cellules de la variable

Supprimer une variable d'échange

Cliquer sur une des cellules de la variable

Cliquer sur le bouton Supprimer

Vérifier les variables d'échange

A la fin de la déclaration des variables, appuyer sur le bouton


Fermeture de l'éditeur de variables d'échange

Avant de fermer l'éditeur de variables sauvegardées, lancer une vérification de votre table en cliquant sur l'icône

Vérifier le console si des messages d'erreurs apparaissent:

Si des messages d'erreur apparaissent, vous devez corriger toutes les erreurs pour pouvoir sauvegarder et ferme l'éditeur


Tableau de bord

Accessible à partir d'un double-clic sur Tableau de bord, cet outil permet de contrôler l'état hardware du MPC.

  • CPU : Donne la température du CPU

  • Batterie : Indique l'état de batterie de sauvegarde. Si la pile de sauvegarde est indiquée comme basse, la première fois, elle n'est pas suffisamment déchargée pour perdre les données, mais elle doit être changée rapidement.

  • PFD : Donne des informations sur la détection des défauts d'alimentation

    • Status : Etat courant fournit physiquement par le détecteur de défaut secteur.

    • Détections : Nombre de détection de défaut secteur depuis la mise sous tension. Si ce chiffre s'incrémente régulièrement, l'alimentation 24 v est insuffisante ou endommagée.

    • Défaut : Indique qu'un défaut a été détecté.

    • Cumul : Cumul du nombre de défaut détecté. Se chiffre augmente normalement à chaque mise hors tension.

    • Raz : Remise à zéro du voyant de défaut.

  • Dips : Etat des dip switch de configuration du MPC.

  • VCore, V3.3, V5 : Etat des tensions d'alimentation du MPC.


Entrées / Sorties

Accessible à partir d'un double-clic sur Entrées / Sorties, cet outil permet de contrôler l'état des entrées / sorties du MPC. Sur cet écran l'état physique et l'état logique y sont indiqué.

Il est possible de manipuler les entrées et les sorties en modifiant les inversions.

En cliquant sur les voyants des sorties il est également possible de les modifier si elle ne sont pas utilisée dans une des tâche utilisant une image de process.

En effet cette dernière vient périodiquement écrire physiquement les sorties qu'elle utilise, à partir du moment ou elle sont déclaré dans un des programmes de la tâche.


Hyper-Terminal

Accessible à partir d'un double-clic sur Hyper-terminal, cette outils permet de contrôler l'état des tâches / programmes, de visualiser l'état des axes et la valeur des variables.

L'outil est composé de trois zones distinctes déplaçables sur l'écran au moyen de séparateurs.

  1. Une zone contenant les éléments visualisables du système regroupe les visualisations disponibles sur les axes et l'ensemble des variables du projet réparties par instance.

  2. L'état des tâches et des programmes qu'elles contiennent est accessible dans cette zone. Une barre d'outils permet de gérer l'exécution des tâches.

Stop

Icône :

Signification : Arrête la tâche sélectionnée.

Run

Icône :

Signification : Démarre la tâche sélectionnée.

Suspendre

Icône :

Signification : Suspend l'exécution de la tâche sélectionnée.

Continuer

Icône :

Signification : Continu l'exécution de la tâche sélectionnée.

  3. Une barre d'outil permet un accès rapide aux fonctions de base de l'outil de visualisation:

Debug

Icône :

Signification : Active / désactive la visualisation de la valeur des variables ou de l'état des axes.

Ajouter

Icône :

Signification : Ajoute l'élément sélectionné de la liste des éléments visualisable, dans la liste de visualisation en cours.

Supprimer

Icône :

Signification : Supprime l'élément sélectionné.

Ouvrir

Icône :

Signification : Ouvre une liste de visualisation sur fichier.

Enregistrer

Icône :

Signification : Enregistre la liste de visualisation en cours dans une liste de visualisation sur fichier.

Tout supprimer

Icône :

Signification : Supprime la liste de visualisation en cours.


Oscilloscope

Accessible à partir d'un double-clic sur Oscilloscope, cet outil permet d'observer des données en temps réel.

L'outil est composé de trois zones distinctes déplaçables sur l'écran au moyen de séparateurs, ainsi que d'une barre d'outils.

- Au centre, la visualisation des données capturées

- A droite, la barre d'outils

Lecture

Icône :

Signification : Lancer l'acquisition en mode automatique. A la fin d'une acquisition, on affiche les données et on relance automatiquement l'acquisition suivante.

Mono-coup

Icône :

Signification : Lance une seule acquisition.

Force trig

Icône :

Signification : Force le déclenchement du Trigger programmé.

Stop

Icône :

Signification : Stoppe l'acquisition en cours et affiche les données capturées.

Zoom +

Icône :

Signification : Augmente la profondeur du zoom.

Zoom -

Icône :

Signification : Diminue la profondeur du zoom.

Zoom sélection

Icône :

Signification : Zoom sur la zone sélectionnée.

Pan

Icône :

Signification : Déplace la zone de visualisation de l'écran.

Zoom d'origine

Icône :

Signification : Affiche les données en utilisant la totalité de l'écran.

Mesures

Icône :

Signification : Active ou désactive l'outils de mesure.

L'outils mesure permet d'évaluer les amplitudes et les écarts temporelles.

Pour cela, on affiche la position courante en X (temps), Y (amplitude) et le delta mesuré.

La ligne de mesure en matérialisée par une ligne continue tandis que la ligne de référence est discontinue.

Permet déplace la ligne de mesure des temps.

Permet de permuter ligne de mesure et ligne de référence des temps.

Permet déplace la ligne de mesure des amplitudes.

Permet de permuter ligne de mesure et ligne de référence des amplitudes.

Enregistrement

Icône :

Signification : Enregistre au format HTML les courbes capturées et les paramètres associés.

- A gauche, la liste des données à observer

Chaque canal est paramétrable en cliquant sur la barre de séparation. On a alors la possibilité de régler :

- Offset : Décale la courbe verticalement

- Couleur : Sélectionne la couleur de représentation de la courbe

- Activation : La case à cocher permet d'afficher ou cacher une courbe sans perdre ses données.

- Coefficient : Permet d'amplifier ou de réduire l'échelle de visualisation d'une courbe pour permettre une comparaison

Pour sélectionner la source on ouvre la liste de sélection :

Une source peut être une grandeur mesurable d'un périphérique (axe ...), une variable du programme.

Une expression peut-être utilisée pour appliquer une formule aux canaux existant et en extraire une autre courbe.

La formule utilise donc les autres canaux (CH1, CH2, CH3, CH4 ... ) en tous les opérateurs et fonction mathématiques suivantes :

- Opérateurs de bases : +, -, *, /, ^, DIV, MOD

- Opérateurs trigonométriques : SIN, COS, TAN, SINH, COSH, ARCTAN

- Opérateurs mathématiques à un argument :

EXP : Exponentielle

LN : Logarithme népérien

LOG10 : Log base 10

LOG2 : Log base 2

SQR : Carré

SQRT : Racine carrée

ABS : Valeur absolue

TRUNC,INT : Partie entière

CEIL : Arrondi supérieur

FLOOR : Arrondi inférieur

HEAV : Négatif

SIGN : Signe

ZERO : Zéro

PH : Phase

RND : Nombre aléatoire

RANDOM : Nombre aléatoire

- Opérateurs mathématiques à deux arguments :

MAX : Valeur maxi

MIN : Valeur minimale

ARG : Angle formé par deux vecteurs

POWER : Puissance

INTPOWER: Puissance entière

LOGN : Logarithme népérien

- En bas, le paramétrage de la capture et de la visualisation

Le trigger permet de définir le déclenchent de l'oscilloscope sur un événement ou une condition particulière sur les données.

Pour cela on doit sélectionner :

- Une source, sélectionnée dans la même liste que les canaux d'acquisition.

- La variation à détecter sur cette source : Front montant ou descendant

- La position temporelle de cet événement par rapport à l'acquisition.

La Position 0 correspond au début, si la valeur est différente de 0, on peut observer, pendant le temps définit par Position, ce qui s'est passé avant ou après l'événement.

- Le niveau au delà (front montant) ou en deçà (front descendant) duquel on déclenchement

Une fois le déclenchement sélectionné, on doit enfin définir les conditions d'acquisition et de visualisation.

L'amplitude définit les conditions d'affichage des données sur l'écran. Le mode auto permet de laisser l'oscilloscope choisir automatiquement.

Ce peut être un bon choix pour une première acquisition. Par la suite et surtout dans le cas on l'on veut observer des variations d'amplitude, d'une acquisition à l'autre il est recommandé de désactiver ce mode

De même, on peux choisir résolution et durée d'acquisition. En mode auto, la résolution est calculée en fonction de la durée, de façon à obtenir un temps de transfert correcte avec une bonne finesse des données.


Performances

Accessible à partir d'un double-clic sur Oscilloscope, cet outil permet d'observer les performances du système en temps réel.

Pour cela, on indique, pour chaque tâche, les données cruciales concernant l'exécution :

  • Etat : Indique l'état de l'exécution de la tâche

  • Processeur : Cette rubrique regroupe les temps vu par le processeur, sans tenir compte du fait que les tâches sont régulièrement interrompu.

  • Proc (%) : Pourcentage d'utilisation de la tâche sur le processeur

  • Durée (µs) : Durée courant de la tâche sur le processeur

  • Max (µs) : Durée maxi pour exécuter entièrement la tâche sur le processeur

  • Cumul (ms) : Cumule du temps d'exécution observé

  • Cycle : Cette rubrique regroupe les temps d'exécution des cycles des tâches en tenant compte des interruptions dues aux tâches de priorités plus élevés

  • Durée (µs) : Durée courante d'exécution totale d'un cycle de la tâche

  • Max (µs) : Durée maxi observée pour l'exécution totale d'un cycle de la tâche

  • Chien de garde : Nombre de fois que le chien de garde de la tâche à été déclenché par un temps d'exécution trop long

  • Nb Cycles : Nombre de cycle effectués

  • Manqués : Nombre de cycle manqués, par faute de temps alloué suffisant


Informations

Accessible à partir d'un double-clic sur Information, cet outil permet d'obtenir des informations détaillées sur le MPC et l'utilisation qui en est faite.

Cet outils permet d'obtenir un résumé, ou des information détaillés, suivant la page choisie. Les informations détaillées n'étant interprétable que par le service technique SERAD, il n'est pas utile de le consulter directement. En revanche, il peut être demandé par ce dernier, de générer un rapport à partir de ces informations.

Pour cela, cliquer sur Rapport pour le générer et l'envoyer par la suite, ou sur eMail pour le générer et l'envoyer immédiatement.

Le résumé est composé de deux rubriques :

La rubrique hardware regroupe les caractéristiques matérielles du MPC

La rubrique utilisation regroupe les informations concernant l'utilisation qui est faire des ressources :


Alarmes

Cet écran répertorie les défauts détectés sur le MPC.

Acquitter

Icône :

Action : Demande l'acquittement des défauts afficher qui ont été corrigés. Si la source d'un défaut est encore présente, celui-ci ne peut être acquitté.


Messages

Accessible à partir d'un double-clic sur Messages, cet outil permet l'historique des événements observé sur le MPC.

L'observation des événements commence par la mise à jour de la liste à partir du MPC en cliquant sur "Mise à jour".

La partie supérieur de cet outils est un bandeau chronologique, sur lequel les événements sont indiqués.

Un point d'interrogation désigne une information, un point d'exclamation une erreur. En sélectionnant une date sur ce bandeau, on affiche la liste.

La liste de droite permet de paramétrer les événements que le MPC doit enregistrer. On définir également la période d'enregistrement de l'historique sur la compact flash du MPC.

Il est possible, enfin d'effacer l'historique.


Console

Accessible à partir d'un double-clic sur Console, cet outil permet d'accéder à la console système du MPC. Cette console est également disponible en reliant un écran et clavier directement sur les connecteurs prévus à cet effet. Cependant, l'utilisation de cet outils étant complexe il est fortement recommandé de ne l'utiliser qu'à la demande expresse du service technique SERAD.


Tableau de bord

Accessible à partir d'un double-clic sur Tableau de bord, cet outil permet de contrôler l'état hardware de l'IMD et du moteur.

  • I²t : Donne une indication sur l'échauffement du moteur. Si cette valeur augmente progressivement, le moteur est sous dimensionnée. Si cette valeur augmente rapidement à l'arrêt, la régulation et la mécanique doivent être vérifiée avec attention. En fonctionnement normale, l'I²t peut monter, mais seulement brièvement.

  • Ballast: Donne une indication sur l'utilisation de la résistance de freinage. De même que pour l'I²t, en fonctionnement normale, cette valeur peut monter brièvement, en particulier pendant les phases de freinage. Si l'augmentation est progressive la résistance est sous dimensionnée. Si la résistance interne est utilisée, il faudra réduire les accélérations ou ajouter une résistance externe pour évacuer le surplus d'énergie.

  • IGBT : Donne la température du module de puissance.

  • Position : Position de l'arbre du moteur.

  • Courant : Indique le courant efficace instantané consommé par le moteur. Une valeur en n.m est également indiquée, par conversion à partir des données du moteurs.

  • DC Bus : Donne la tension actuel du bus continu interne. La valeur peut augmenter pendant les phases de décélération.

  • Vitesse : Indique la vitesse du moteur en Tr/min


Entrées / Sorties

Accessible à partir d'un double-clic sur Entrées / Sortie, cet outil permet de contrôler l'état hardware des entrées / sorties. Sur cet écran l'état physique et l'état logique y sont indiqué.

Il est possible de manipuler les entrées et les sorties en modifiant les inversions.

En cliquant sur les voyants des sorties il est également possible de les modifier si elle ne sont pas utilisée dans une des tâche utilisant une image de process.

En effet cette dernière vient périodiquement écrire physiquement les sorties qu'elle utilise, à partir du moment ou elle sont déclaré dans un des programmes de la tâche.


Entrées / Sorties analogiques

Accessible à partir d'un double-clic sur Entrées / Sortie analogiques, cet outil permet de contrôler l'état hardware des entrées / sorties analogiques.

Les tensions des entrées / sorties analogiques sont indiquées. Il est également possible de modifier la tension sur la sortie analogique, à condition qu'elle ne soit pas écrite dans une tâche en cours d'exécution.


Motion

Accessible à partir d'un double-clic sur Motion, cet outil permet de tester le comportement dynamique de l'axe.

L'outil se compose de trois partie disposés verticalement :

  • Le contrôle globale en haut

Cette partie regroupe le pilotage de l'asservissement de l'axe et le choix du mode de fonctionnement de la régulation (Courant, Vitesse, Position).

  • L'état de l'axe au centre

Au centre se trouve les informations en retour de cet axe et de son auxiliaire, a savoir, la position, la vitesse et l'état des prises d'origine.

Des boutons de remise à zéro sont également présent pour initialiser les compteurs de position.

  • Le pilotage de l'axe en bas

Le pilotage de l'axe prend deux formes différentes, suivant que l'axe est en mode couple ou vitesse d'une part ou en mode position d'autre part.

En mode couple et vitesse

Le pilotage de l'axe revient à exécuter sur l'axe le profile ci-dessus en couple ou vitesse.

Le contrôle de l'exécution du profile est réalisé par les bouton Start et Stop.

En mode Cycle va et vient, l'amplitude est alternativement positive et négative.

En mode Position

Le pilotage en mode position permet de réaliser des déplacements, suivant le mode choisi à droite (+Infini, -Infini, ...).

En mode Absolu P1 et Relatif P1, la valeur du champ P1 intervient. En mode cycle, T permet d'attendre entre chaque mouvement.

Le cycle, P1 est un déplacement relatif de P1. Le cycle P1/P2 permet, en particulier sur les axes finis, d'exécuter des déplacements entre deux positions absolues.

Le mode Prise d'origine lance la prise d'origine, telle qu'elle a été définie dans la configuration de l'axe.


Auto tuning

Accessible, en mode avancé, à partir d'un double-clic sur Auto-tuning, cet outil permet d'effectuer les réglages de base automatiquement sur axe.

  • Auto-tuning de la boucle de courant :

Durant cette phase le moteur va effectuer des mouvements très petits pour calculer la limite de vibrations puis des mouvements d’amplitude plus élevés (en fonctions de l’inertie)

Attention : il est possible de faire cette phase d’auto-tuning moteur à vide ou accouplé mais il est recommandé de faire cette dernière à vide si la mécanique est fragile.

  • Auto-tuning de la boucle de vitesse :

Durant cette phase le moteur va effectuer plusieurs tours à vitesse moyenne.

Attention : L’axe doit être de type infini car le nombre de tour moteur nécessaire pour l’auto-tuning n’est pas connu. Pour un réglage optimum, il est nécessaire de raccorder la mécanique sinon l’axe manquera de raideur.

  • Auto-tuning de la boucle de position :

Durant cette phase le moteur va effectuer plusieurs tours à vitesse faible.

Attention : La mécanique peut être ou ne pas être raccordée.

  • Auto-tuning complet :

Permet d’enchaîner les différents auto-tuning : du retour position à la boucle de position.

  • Mise en garde sur l’auto-tuning :

Pendant l’auto-tuning, toutes les sécurités sont actives (I²t etc ...)

Pour diminuer/annuler les « bruits » en début et fin de trajectoires, mettre à 0 la compensation d’accélération dans la boucle de vitesse (l’erreur de poursuite sera alors plus élevée durant les phases d’accélérations et décélérations

Pour augmenter la raideur du système, augmenter le gain proportionnel de la boucle de vitesse.

Pour augmenter le temps de réponse du système, augmenter le gain intégral de la boucle de vitesse.

En cas d’instabilité du système diminuer/annuler le gain intégral de la boucle de vitesse.


La zone de déclaration de variables des éditeurs de code

Tous les éditeurs de code sont divisés en deux parties :

  • Une partie supérieure pour la déclaration de variables

  • Une partie inférieure pour la saisie du code

Dans la partie déclaration, on retrouve toutes les variables utilisées dans la partie code.

Ces variables sont classés selon leur utilisation (local, global, externe ) à travers les différentes sections de déclaration du langage IEC61131

Menu Pop-up

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Couper

Action : Couper la sélection.

Copier

Action : Copier la sélection.

Coller

Action : Coller la sélection.

Supprimer

Action : Supprimer la sélection.

Chercher

Action : Rechercher un texte.

Remplacer

Action : Remplacer un texte.

Type de base

Action : Insérer un type pour une variable parmi les types de base.

Type complexes

Action : Insérer un type pour une variable parmi les types complexes.

Blocs fonctionnels

Action : Insérer un type pour une variable parmi les types de blocs fonctionnels.


Editeur ST

Les éditeurs ST et IL

Les éditeurs ST et IL se décomposent en une zone d'édition de texte dans lequel l'utilisateur vient entrer le code ST ou IL associé à son application, une barre d'outil (permettant l'aide à l'édition du code et le débogage en mode « connecter ») et une zone de déclaration des variables.

Barre doutils

Menu Pop-up de la zone d'édition

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Insérer une variable

Action : Ouvre une fenêtre avec la liste de variables déclarer dans le POU et permet de l'insérer dans le code

Insérer une fonction

Action : Ouvre une fenêtre avec la liste des fonctions disponibles.

Défaire

Action : Annuler la dernière action dans l'éditeur.

Refaire

Action : Refaire la dernière action annulée dans l'éditeur.

Couper

Action : Copier la sélection.

Copier

Action : Copier la sélection.

Coller

Action : Coller la sélection.

Sélectionner tout

Action : Sélectionner l'ensemble du code de l'éditeur.

Basculer le signet

Action : Ajouter ou supprimer un signet

Voir aussi :

Langage ST

Langage IL


Editeur LD

L'éditeur LD

L'éditeur LD (Ladder) se décompose en une zone d'édition du POU ladder (la grille), une barre d'outils et une zone de déclaration des variables.
Un POU ladder est constitué de plusieurs réseaux.
Chaque réseau est la constitution d'un en-tête ou commentaire et d'une seule expression associée à une sortie (voir langage LD)

Barre d'outils

Menu Pop-up de la zone d'édition

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Ce menu Pop-up peut être différent celui l'objet sélectionné.

Insérer une variable

Action : Ouvre une fenêtre avec la liste de variables déclarer dans le POU et permet de l'insérer dans le code

Insérer une fonction

Action : Ouvre une fenêtre avec la liste des fonctions disponibles.

Insérer un bloc fonctionnel

Action : Ouvre une fenêtre avec la liste des blocs fonctionnels disponibles.

Insérer un réseau

Action : Insère un nouveau réseau après le réseau courant

Insérer en série (AND)

Action : Insère un contact en série avec les éléments sélectionnés

Insérer en parallèle

Action : Insère un contact en parallèle avec les éléments sélectionnés

Insérer un contact

Action : Insère un contact à l'endroit de la sélection

Insérer un relais

Action : Insère un relais à l'endroit de la sélection

Insérer un saut

Action : Insère un saut à l'endroit de la sélection

Insérer un reset

Action : Insère un relais reset à l'endroit de la sélection

Insérer un set

Action : Insère un relais set à l'endroit de la sélection

Insérer un retour

Action : Insère un retour à l'endroit de la sélection


Editeur CFC

L'éditeur CFC

L'éditeur CFC (éditeur de diagramme de fonction continue) est un outil technique, utilisé pour créer graphiquement des programmes d'automation.

Les éléments principaux d'un diagramme de CFC sont les blocs (blocs progiciels, blocs utilisateur, blocs composants), qui peuvent être arrangé librement sur le diagramme, les barres d'alimentation (à gauche et à droite), qui fournissent des liens aux variables IEC1131 et des liens virtuels dans le diagramme, et des connexions pour relier une sortie (bloc ou barre d'alimentation) à l'une ou plusieurs entrées (bloc ou barre d'alimentation).

Niveau 0 :

Niveau 1 :

Barre d'outils

Menu Pop-up de la zone d'édition

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Ce menu Pop-up peut être différent celui l'objet sélectionné.

Couper

Action : Copie la sélection.

Copier

Action : Copie la sélection.

Supprimer

Action : Supprime la sélection.

Chercher/Remplacer

Action : Permet de rechercher du texte

Insérer un bloc

Action : Permet d'insérer un bloc.

Remplacer un bloc

Action : Remplace le bloc sélectionné.

Insérer un bloc composant

Action : Permet de créer un bloc composant ou diagramme de niveau inférieur.

Insérer un bloc de texte

Action : Insère un bloc permettant d'ajouter un commentaire.

Zoom +

Action : Permet à l'utilisateur d'effectuer un agrandissement de la zone d'affichage.

Zoom -

Action : Permet à l'utilisateur d'effectuer une diminution de la zone d'affichage.

Niveau haut :

Action : Permet d'aller au diagramme (bloc composant) supérieur.

Afficher la documentation

Action : Affiche l'aide du bloc sélectionné.

Voir/Cacher la grille

Action : Options d'affichage

Voir aussi :

Langage CFC


Editeur FBD

L'éditeur FBD

L'éditeur F.B.D est un outil technique, utilisé pour créer graphiquement des programmes d'automatisation.

Il se décompose d'une zone d'édition du POU (la grille), une barre d'outils et une zone de déclaration des variables.
Un POU FBD est constitué de plusieurs réseaux.
Chaque réseau est la constitution d'un en-tête ou commentaire et d'un schéma.

Les éléments principaux du graphique FBD sont les réseaux et les symboles graphiques. Avec chaque réseau définit par l'utilisateur, un projet à une structure facile. Entre les barres de variables (gauche et droite) les symboles graphiques choisis représentant par exemple des blocs de fonctions sont placés dans des places fixes. Vous trouvez toutes les parties graphiques dans la fenêtre d'instructions du cadre « ControlX ».

Barre d'outils

Menu Pop-up de la zone d'édition

En cliquant avec le clic droit de la souris on accède au menu pop-up suivant :

Ce menu Pop-up peut être différent celui l'objet sélectionné.

Couper

Action : Copier la sélection.

Copier

Action : Copier la sélection.

Supprimer

Action : Supprimer la sélection.

Sélectionner tout

Action : Sélectionner l'ensemble du code de l'éditeur.

Rechercher/Remplacer

Action : Permet de rechercher ou remplacer du texte

Insérer une variable

Action : Ouvre une fenêtre avec la liste de variables déclarer dans le POU et permet de l'insérer dans le code

Insérer une fonction

Action : Ouvre une fenêtre avec la liste des fonctions disponibles.

Insérer un bloc fonctionnel

Action : Ouvre une fenêtre avec la liste des blocs fonctionnels disponibles.

Insérer un bloc de texte

Action : Insère un bloc permettant d'ajouter un commentaire.

Remplacer le bloc fonctionnel

Action : Remplace le bloc fonctionnel sélectionné.

Zoom +

Action : Permettre à l'utilisateur d'effectuer un agrandissement de la zone d'affichage.

Zoom -

Action : Permettre à l'utilisateur d'effectuer une diminution de la zone d'affichage.

Voir/Cacher les limites des pages d'impression

Action : Options d'impression

Voir aussi :

Langage FBD


Description

Introduction

Motion Studio est un outil de programmation puissant et simple à utiliser. Il offre une architecture structurée basée sur la norme IEC 61131-3.

Ce langage est géré par un noyau temps réel multitâches, utilisant des instructions définies par la norme IEC 61131-3 et contenant également des fonctions de contrôle de mouvement.

Le langage intègre aussi la gestion de données sous la forme de variables globales, locales, sauvegardées...

Un projet Motion Studio regroupe :

  1. une configuration (MPC, axes, E/S)

  2. des tâches contenant des programmes

  3. des blocs fonctionnels

  4. des fonctions

  5. des données


Editeur IL : introduction

Langage IL

Description

Un programme écrit en langage IL est une liste d'instructions.

Chaque instruction doit être écrite sur une ligne de texte.

Une instruction peut avoir un ou plusieurs opérandes.

Les opérandes peuvent être des variables ou des expressions constantes.

Chaque instruction peut commencer par une étiquette suivie par le caractère ":".

Les étiquettes sont les destinations pour les instructions de saut.

Structure du langage

Le langage IL utilise ce que l'on appelle un registre, chaque instruction utilise ou modifie le contenu du registre :

Exemple : | LD | 10 | (* On charge la valeur 10 dans le registre*)
 | ADD | 25 | (* Le contenu du registre est additionné avec 25*)
 | ST | A | (* Le résultat (contenu du registre) est stocké dans la variable A*)

Le registre et la variable A contiennent maintenant la même valeur : 35. Si la prochaine instruction ne commence pas par LD, l'instruction suivante utilisera aussi cette valeur. C'est pour cela qu'il est important de toujours commencer une liste d'instructions par LD.

Pour ce langage, il n'y a pas de différences entre les majuscules et les minuscules lors de la saisie des étiquettes, opérandes et modificateurs.

L'opérande et le contenu actuel du registre doivent obligatoirement contenir le même type de données. Si l'on doit traiter différents types de données, il faut au préalable convertir la donnée contenue dans le registre :

Conversion : | LD | 10 | (* On charge la valeur 10 dans le registre*)
 | INT_TO_REAL | 25 | (* On la convertie en réel*)
 | ADD | 0.543 | (* On l'additionne à la valeur 0.543*)
 | ST | A | (* On stocke le résultat dans la variable A*)

Instructions

Instructions logiques de programme:

Instruction | Modificateur | Opérande | Description
CAL | C, CN | bloc fonctionnel | appel de bloc fonctionnel - pas de résultat courant utilisé
JMP | C, CN | étiquette | saut inconditionnel - pas de résultat courant utilisé
RET | C, CN |  | saut à la fin du programme

Opérations booléennes et instructions:

NOT |  | booléen |
AND | N, N (, ( | booléen | ET entre l'opérande et le résultat courant
OR | N, N (, ( | booléen | OU entre l'opérande et le résultat courant
XOR | N, N (, ( | booléen | OU exclusif entre l'opérande et le résultat courant
S(et) |  | booléen | force l'opérande à TRUE si le résultat courant est TRUE
R(eset) |  | booléen | force l'opérande à FALSE si le résultat courant est TRUE

Opérations Mathématiques:

ADD | ( | numérique | addition entre l'opérande et le résultat courant
SUB | ( | numérique | soustraction entre l'opérande et le résultat courant
MUL | ( | numérique | multiplication entre l'opérande et le résultat courant
DIV | ( | numérique | division entre l'opérande et le résultat courant

Instruction de chargement/Forçage:

LD | N | tout type | charge l'opérande dans le résultat courant
ST | N | tout type | stocke le résultat courant dans l'opérande

Opérateurs logiques:

GT | ( | numérique | compare le résultat courant et l'opérande
GE | ( | numérique | compare le résultat courant et l'opérande
EQ | ( | numérique | compare le résultat courant et l'opérande
NE | ( | numérique | compare le résultat courant et l'opérande
LE | ( | numérique | compare le résultat courant et l'opérande
LT | ( | numérique | compare le résultat courant et l'opérande

Modificateurs

Dans le langage IL, on utilise des modificateurs, les modificateurs influencent l'exécution de l'opérateur :

Modificateur

Opérande

Description

N

tout type

Le modificateur N est utilisé pour inverser bit à bit la valeur d'un opérande.

Exemple : Dans l'exemple, C est 1, si A est 1 et B est 0.

LD A

ANDN B

ST C

C

booléen

Le modificateur C est utilisé pour exécuter l'instruction associée, si la valeur de l'accu est 1 (TRUE).

Exemple :Dans l'exemple, le saut vers START est exécuté seulement si A est 1 (TRUE) et B est 1 (TRUE).

LD A

AND B

JMPC START

CN

booléen

Si le modificateur C est combiné avec le modificateur N,l'instruction associée est exécutée seulement si la valeur de l'accu est un 0 booléen (FALSE).

Exemple : Dans l'exemple, le saut vers START est exécuté seulement si A est 0 (FALSE) et B est 0 (FALSE).

LD A

AND B

JMPCN START

(

tout type

Le modificateur Parenthèse gauche ( est utilisé pour repousser l'évaluation de l'opérande, jusqu'à ce que l'opérateur Parenthèse droite ) apparaisse. Le nombre d'opérations Parenthèse droite doit être égal au nombre de modificateurs Parenthèse gauche. Il est possible d'imbriquer les parenthèses.

Exemple :Dans cet exemple, E aura la valeur 1, si C et/ ou D sont à 1, ainsi que si A et B ont aussi la valeur 1.

LD A

AND B

AND( C

OR D

)

ST E

L'exemple peut être programmé de la façon suivante :

LD A

AND B

AND(

LD C

OR D

)

ST E

Sous-programmes

L'appel d'un sous- programme en langage IL est fait en utilisant les opérateurs CAL et CALC. Les appels de sous programme ne fournissent pas de valeurs de retour. La section IL appelée doit se situer dans la même tâche que la section IL appelante :

Appel fonction : | ST | A
 | CAL | Ma_fonction()
 | LD | B

Ou

Appel fonction : | ST | A
 | CAL | Ma_fonction
 | LD | B

Commentaires

Des textes de commentaire peuvent être entrés à la fin de chaque ligne d'instruction. Les commentaires n'ont pas d'influence sur l'exécution du programme. Un commentaire doit être délimité par les caractères "(*" et "*)". Vous pouvez également entrer des commentaires sur des lignes vides (sans instruction). Les commentaires ne peuvent pas être imbriqués.


Editeur ST : introduction

Langage ST

Description

Le ST est un langage textuel structuré. Un programme ST est une liste d'instructions. Chaque instruction décrit une action et se termine par un point-virgule (";"). La présentation du texte n'a pas d'influence sur l'exécution du programme. Vous pouvez insérer des caractères blancs ou des sauts de lignes n'importe où dans le texte.

Les retours à la ligne ne sont pas significatifs puisque l'on peut écrire plusieurs instructions sur une même ligne. De même, une instruction peut être sur plusieurs lignes.

Expressions

Chaque instruction décrit une action et peut inclure des expressions complexes.

Une expression est évaluée:

Ä de gauche à droite

Ä selon la priorité des opérateurs

Ä la priorité par défaut peut être changée à l'aide de parenthèses

Les arguments d'une expression sont:

Ä des variables déclarées

Ä des expressions constantes

Ä des appels de fonction

Les opérateurs sont exécutés en fonction de leur rang dans les expressions :

Opérateur

Signification

Rang

Opérandes possibles

Description

( )

Mise entre parenthèses

1 (le plus haut)

Expression

La mise entre parenthèses est utilisée pour modifier la séquence d'exécution des opérateurs.

Exemple : Si les opérandes A, B, C et D ont respectivement les valeurs 1, 2, 3 et 4, alors

A+B-C*D

donne le résultat -9 et

(A+B-C)*D

donne le résultat 0.

FUNCNAME (liste des paramètres réels)

Traitement de fonction (appel)

2

Expression, valeur littérale, variable, adresse (tous les types de données)

Le traitement de fonction est utilisé pour exécuter des fonctions

-

Négation

3

Expression, valeur littérale, variable, adresse du type de données INT, DINT, UINT, UDINT ou REAL

Dans le cas de la négation -, le système change le signe de la valeur de l'opérande.

Exemple : Dans l'exemple, OUT est -4, si IN1 est 4.

OUT := - IN1 ;

NOT

Complément

3

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, WORD ou DWORD

Dans le cas de NOT, le système effectue une inversion de chaque bit de l'opérande.

Exemple : Dans l'exemple, OUT est 0011001100, si IN1 est 1100110011.

OUT := NOT IN1 ;

**

Elévation de puissance

4

Expression, valeur littérale, variable, adresse du type de données REAL (base) et INT, DINT, UINT, UDINT ou REAL (exposant)

Dans le cas de l'élévation à une puissance plus haute **, la valeur du premier opérande (base) est augmentée de la valeur du second opérande (exposant).

Exemple : Dans l'exemple, OUT est égal à 625,0, si IN1 est 5,0 et IN2 4,0.

OUT := IN1 ** IN2 ;

*

Multiplication

5

Expression, valeur littérale, variable, adresse du type de données INT, DINT, UINT, UDINT ou REAL

Dans le cas de la multiplication *, la valeur du premier opérande est multipliée par la valeur du deuxième opérande.

Exemple : Dans l'exemple, OUT est égal à 20,0, si IN1 est 5,0 et IN2 4,0.

OUT := IN1 * IN2 ;

Remarque : La fonction MULTIME de la bibliothèque obsolète est destinée aux multiplications du type de données Time.

/

Division

5

Expression, valeur littérale, variable, adresse du type de données INT, DINT, UINT, UDINT ou REAL

Dans le cas de la division /, la valeur du premier opérande est divisée par la valeur du deuxième opérande.

Exemple : Dans l'exemple, OUT est égal à 4,0, si IN1 est 20,0 et IN2 5,0.

OUT := IN1 / IN2 ;

Remarque : La fonction DIVTIME de la bibliothèque obsolète est destinée aux divisions du type de données Time.

MOD

Modulo

5

Expression, valeur littérale, variable, adresse du type de données INT, DINT, UINT ou UDINT

Dans le cas de MOD, la valeur du premier opérande est divisée par la valeur du deuxième opérande et le reste de la division (Modulo) est sorti comme résultat.

Exemple : Dans l'exemple donné,

Ä OUT est 1 si IN1 est 7 et IN2 2

Ä OUT est 1, si IN1 est 7 et IN2 -2

Ä OUT est -1, si IN1 est -7 et IN2 2

Ä OUT est -1, si IN1 est -7 et IN2 -2

OUT := IN1 MOD IN2 ;

+

Addition

6

Expression, valeur littérale, variable, adresse du type de données INT, DINT, UINT, UDINT, REAL ou TIME

Dans le cas de l'addition +, la valeur du premier opérande est ajoutée à la valeur du deuxième opérande.

Exemple : Dans l'exemple OUT est égal à 9 si IN1 est 7 et IN2 2.

OUT := IN1 + IN2 ;

<

Comparaison

"inférieur à"

7

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, INT, DINT, UINT, UDINT, REAL, TIME, WORD, DWORD, STRING, DT, DATE ou TOD

< permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande est inférieur au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande est supérieur ou égal au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 est inférieur à 10. Sinon, il est sur 0.

OUT := IN1 < 10;

>

Comparaison "supérieur à"

7

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, INT, DINT, UINT, UDINT, REAL, TIME, WORD, DWORD, STRING, DT, DATE ou TOD

> permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande est supérieur au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande est inférieur ou égal au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 est supérieur à 10 et est sur 0 si IN1 est inférieur à 10.

OUT := IN1 > 10 ;

<=

Comparaison "inférieur ou égal à"

7

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, INT, DINT, UINT, UDINT, REAL, TIME, WORD, DWORD,

STRING, DT, DATE ou TOD

<= permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande est inférieur ou égal au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande est supérieur au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 est inférieur ou égal à 10. Sinon, il est sur 0.

OUT := IN1 <= 10 ;

>=

Comparaison "supérieur ou égal à"

7

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, INT, DINT, UINT, UDINT, REAL, TIME, WORD, DWORD, STRING, DT, DATE ou TOD

>= permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande est supérieur ou égal au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande est inférieur au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 est supérieur ou égal à 10. Sinon, il est sur 0.

OUT := IN1 >= 10 ;

=

Egalité

8

Expression, valeur littérale,

variable, adresse du type

de données BOOL, BYTE,

INT, DINT, UINT, UDINT,

REAL, TIME, WORD, DWORD,

STRING, DT, DATE ou TOD

= permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande est égal au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande n'est pas égal au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 est égal à 10. Sinon, il est sur 0.

OUT := IN1 = 10 ;

<>

Inégalité

8

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, INT, DINT, UINT, UDINT, REAL, TIME, WORD, DWORD, STRING, DT, DATE ou TOD

<> permet de comparer la valeur du premier opérande à celle du deuxième opérande. Si le premier opérande n'est pas égal au deuxième opérande, le résultat est un 1 booléen. Si le premier opérande est égal au deuxième opérande, le résultat est un 0 booléen.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 n'est pas égal à 10. Sinon, il est sur 0.

OUT := IN1 <> 10 ;

&

ET logique

9

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, WORD ou DWORD

& permet d'établir une liaison ET logique entre les opérandes. Pour les types de données BYTE, WORD et DWORD, le lien est fait par bit.

Exemple : Dans les exemples, OUT est sur

1, si IN1, IN2 et IN3 sont sur 1.

OUT := IN1 & IN2 & IN3 ;

AND

ET logique

9

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, WORD ou DWORD

AND permet d'établir une liaison ET logique

entre les opérandes. Pour les types de

données BYTE, WORD et DWORD, le lien est

fait par bit.

Exemple : Dans les exemples, OUT est sur 1, si IN1, IN2 et IN3 sont sur 1.

OUT := IN1 AND IN2 AND IN3 ;

XOR

OU exclusif logique

10

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, WORD ou DWORD

XOR permet d'établir une liaison OU exclusif logique entre les opérandes. Pour les types de données BYTE, WORD et DWORD, le lien est fait par bit.

Exemple : Dans l'exemple, OUT est sur 1, si IN1 et IN2 ne sont pas égaux. Si IN1 et IN2 ont le même état (tous deux 0 ou 1), OUT est sur 0.

OUT := IN1 XOR IN2 ;

Si plus de deux opérandes sont reliés, le résultat de l'opération est à l'état 1 pour un nombre impair d'états 1 et à l'état 0 pour un nombre pair d'états 1.

Exemple : Dans l'exemple, OUT est sur 1 si un ou trois opérandes sont sur 1. OUT est

sur 0 si zéro, deux ou quatre opérandes sont sur 1.

OUT := IN1 XOR IN2 XOR IN3 XOR IN4 ;

OR

OU logique

11 (le plus

bas)

Expression, valeur littérale, variable, adresse du type de données BOOL, BYTE, WORD ou DWORD

OR permet d'établir une liaison OU logique entre les opérandes. Pour les types de données BYTE, WORD et DWORD, le lien est fait par bit.

Exemple : Dans l'exemple, OUT est sur 1, si IN1, IN2 ou IN3 est sur 1.

OUT := IN1 OR IN2 OR IN3 ;

Instructions

Voici les différents styles d'instructions de base d'un programme ST:

Assignation

Appel de fonction

Appel de bloc fonctionnel

Voici les instructions disponibles pour l'exécution conditionnelle d'instructions:

IF / THEN / ELSE (sélecteur binaire)

CASE (énumération de cas)

Voici les instructions disponibles pour l'exécution itérative d'instructions:

WHILE (avec test en entrée de boucle)

REPEAT (avec test en fin de boucle)

FOR (énumération)

WHILE

Commentaire

Des commentaires peuvent être entrés n'importe où dans un programme ST. Les commentaires n'ont pas d'influence sur l'exécution du programme. Un commentaire doit commencer par "(*" et se terminer par "*)". Les commentaires peuvent être entrés sur plusieurs lignes (un commentaire peut contenir des sauts de lignes). Les commentaires ne peuvent pas être imbriqués.

Exemple :

(* Commentaires sont utiles *)

(* Ce commentaire
est long et
nécessite plus
d'une ligne

*)


Editeur LD : introduction

Langage LD

Description

Le langage Ladder Diagram (ou Schéma à relais) est une liste de réseaux. Chaque réseau représente un flux de données booléen depuis une barre d'alimentation à gauche vers une barre d'alimentation à droite. La barre d'alimentation à gauche représente l'état TRUE qui initialise le flux dans le réseau. Chaque symbole inséré sur le réseau modifie le flux de données et/ou exécute une opération.

Réseaux

Un réseau se compose :

Ä Une étiquette : Chaque réseau qui peut être une cible de saut dans un autre réseau sera automatiquement identifié par un repère alphanumérique ou nombre entier décimal non signé. Par défaut, les réseaux seront numérotés. Cette numérotation de tous les réseaux sera automatiquement mise à jour toutes les fois qu'un nouveau réseau est inséré. La numérotation simplifie la recherche d'un réseau correspondant au numéro de ligne des langages de programmation textuel.

Ä Un commentaire : Le commentaire de réseau est représenté comme secteur carré dans le diagramme Ladder. Pour écrire un texte de commentaire, double cliquer sur cette zone. Le commentaire est toujours placé au-dessous de l'étiquette de réseau. Notez que le premier réseau contient en plus un commentaire de diagramme Ladder au-dessus de l'étiquette de réseau et du commentaire de réseau.

Ä Un graphique : Le graphique de réseau se compose des objets graphiques, qui peuvent être des symboles ou des connexions graphiques. Les connexions transportent les données entre les symboles graphiques, qui traitent les données avec leurs entrées et transfèrent les données traitées à leurs sorties. Notez que les connexions peuvent également se croiser.

Voici les éléments composants un graphique de réseau:

ÄContacts

ÄOpérations

ÄFonctions

ÄBlocs fonctionnels

Contacts

Les contacts sont des éléments graphiques de base du langage LD. Un contact est associé à une variable booléenne indiqué en dessus du symbole graphique. Un contact modifie l'état du flux de donnée en fonction de l'état de la variable associée.

Voici les différents types de contacts disponibles:

1.) Normal: la valeur du flux de donnée à droite est le ET booléen entre le flux à gauche et la valeur de la variable associée.

2.) Inversé: la valeur du flux de donnée à droite est le ET booléen entre le flux à gauche et l'inverse de la valeur de la variable associée.

Deux contacts normaux en série représentent une opération logique AND.

Deux contacts normaux en parallèle représentent une opération logique OR.

Opérations

Relais de contrôle

Les relais de contrôle sont des contacts qui sont insérés devant les bobines. Les relais de contrôle peuvent être utilisés comme points d'arrêt dans l'exécution manuelle, par exemple. Il peut toujours y avoir un relais de contrôle avant chaque bobine seule.

Insérer -> Relais de contrôle: Employez cette commande pour insérer un relais de contrôle additionnel au symbole logique.

Bobines

Les bobinages sont des éléments graphiques du langage LD. Un bobinage est associé à une variable booléenne, inscrite en dessus du symbole graphique. Un bobinage représente un forçage de la variable associée en fonction du flux de donnée en entrée.

Voici les différents styles de bobinages:

(1) Normal: la variable associée prend la valeur du flux d'entrée.

(2) Inversé: la variable associée prend la valeur de l'inverse du flux d'entrée.

(3) S(et): la variable associée est forcée à TRUE si le flux d'entrée est TRUE. (Aucune action n'est effectuée si le flux d'entrée est FALSE).

(4) R(eset): la variable associée est forcée à FALSE si le flux d'entrée est TRUE. (Aucune action n'est effectuée si le flux d'entrée est FALSE).

(5) Les opérations de saut manoeuvrent le flux de contrôle. Avec des sauts, des réseaux peuvent être exécutés seulement si certaines conditions se tiennent. Des sauts peuvent être conditionnés par un résultat de combinaison binaire, ou inconditionnel, c.-à-d. obligatoire. La cible de saut doit toujours être le commencement d'un réseau, indiqué par son étiquette de réseau.

(6) Les RETOUR arrêtent l'exécution du programme dans le POU courant, et continuent au point d'où le POU a été appelé. Les RETOUR peuvent être conditionnés par un résultat de connexion binaire, ou inconditionnel.


Editeur CFC : introduction

Langage CFC

Description

Un diagramme CFC (Chart Function Block) représente un flux de données entre des expressions constantes ou des variables et des opérations représentées par des boites rectangulaires. Les opérations peuvent être des opérateurs de base du langage, des appels de fonctions ou de blocs fonctionnels.

Ordre d'exécution

L'arrangement des blocs sur un diagramme est directement lié à l'ordre d'exécution : Les blocs sont exécutés colonne par colonne et de haut en bas dans une colonne. Pour modifier l'ordre d'exécution, réarrangez les blocs comme requis.

Les blocs composés seront exécutés comme un ensemble à un moment dans l'ordre d'exécution où le bloc composé est localisé. Le contenu des blocs composés sera exécuté selon les mêmes règles. Ceci est très semblable aux sous-programmes dans des langages de programmation modernes.

Barres d'alimentation

Les barres de marge relient la logique contenue dans le diagramme CFC à d'autres parties du même diagramme CFC, ou à d'autres parties de l'application ou du processus à commander.

Pour configurer tout élément de la barre de marge, faire un "clique droit" et choisir "propriétés" à partir du menu de contexte :

Dans le Nom, écrivez le nom de l'objet. Ceci devrait être un nom valide de variable IEC61131-3.

Si vous voulez que l'éditeur CFC déclare une variable pour cet objet de barre de marge, choisissez Variable IEC61131. Autrement, si vous choisissez `connexion CFC', l'objet est employé seulement virtuellement, et toute les informations est immédiatement propagée aux sorties connectées. Ceci peut être plus économique en temps d'exécution et de mémoire utilisée, mais il empêche de faire de la surveillance en ligne.

Pour les variables IEC61131-3, choisissez la section de déclaration à partir de la "boîte de dialogue". Le choix offert ici dépend du type de bloc et du type de barre de marge. Pour certains genres de variables, vous pouvez choisir une adresse physique ou une valeur initiale.

Pour les connecteurs CFC, vous pouvez choisir le "connecteur de bloc de composé", c.-à-d. une connexion de l'intérieur d'un bloc composé vers l'extérieur, de "connecter à un connecteur interne"', c.-à-d. qu'on relie une entrée sur la barre droite de marge à une sortie sur la barre gauche de marge. Le "connecteur interne" et "connecte à un connecteur interne" sont semblables, mais le premier est seulement disponible sur la barre droite de marge (où des connecteurs internes sont définis), tandis que le dernier est disponible seulement sur la barre gauche de marge, où des connecteurs internes peuvent être utilisés.

Les variables d'entrée du diagramme CFC doivent être connectées aux entrées des boîtes fonctions. Le type de chaque variable doit être cohérent avec le type de l'entrée de la boîte correspondante. Une entrée pour le diagramme CFC peut être une expression constante, toute variable interne, d'entrée ou de sortie.

Pour utiliser une valeur constante comme entrée d'un bloc, sélectionnez l'entrée (ou entrée de la barre d'alimentation), cliquez droit dessus avec la souris, sélectionnez "propriétés" et entrez la valeur constante dans le champ d'édition "valeur" de la feuille "valeur par défaut".

Les variables de sortie du diagramme CFC doivent être connectées aux sorties des boîtes fonctions. Le type de chaque variable doit être cohérent avec le type de la sortie de la boîte correspondante. Une sortie pour le diagramme CFC peut être une variable interne ou de sortie, ou le nom du programme édité (pour les fonctions seulement). Quand le nom de la fonction éditée est utilisé comme sortie du diagramme, il représente une assignation de la

valeur retournée par la fonction.

Les variables d'entrée et de sortie, les entrées et les sorties des boîtes fonctions sont reliées par des arcs de liaison. Des lignes sont utilisées pour représenter les liaisons entre deux points du diagramme :

Ä une variable d'entrée et une entrée de boîte.

Ä une sortie d'une boîte et une entrée d'une autre boîte.

Ä une sortie de boîte et une variable de sortie.

Boites

Pour ajouter des blocs à votre diagramme CFC, utilisez "Insérer à Bloc" pour des progiciels ou des blocs définis pour l'utilisateur, "Insérer à bloc de texte" pour des blocs des textes, ou "Insérer à bloc de composants" pour les blocs de composants.

Le curseur de la souris change, cliquez sur le diagramme où vous voulez insérer le nouveau bloc.

Pour réarranger des blocs, sélectionnez les blocs et faites un "glisser lâcher" jusqu'à leur nouvel emplacement.

Lorsque vous ajoutez de nouveaux blocs ou des blocs existants mobiles, l'éditeur CFC fera de la place en déplaçant les blocs avoisinants existants comme il se doit.

Pour enlever des blocs de votre diagramme, choisissez-les et appuyez sur DEL.

Connexion

Pour relier deux objets, sélectionner en premier l'objet de sortie (sortie d'un bloc, ou d'objet sur la barre gauche de marge), pour choisir alors l'entrée (entrée d'un bloc de fonction, ou d'un objet sur la barre droite de marge), puis appuyer sur "Insertion à Connexion".

L'éditeur CFC supporte aussi des connexions entre une sortie et des entrées multiples. Pour créer une connexion multiple créer d'abord une connexion entre la sortie désirée et une entrée. Ensuite, marquer la prochaine entrée et cliquer dans la sortie. La connexion créée à la première étape et la sortie sont maintenant marquées. Choisir "Insérer à Connexion" pour créer la connexion multiple entre la sortie et deux entrées. Vous pouvez maintenant ajouter plus d'entrées de la même manière.

Pour enlever une entrée d'une connexion multiple, marquer l'entrée et appuyer sur la clé effacer. Seule la connexion entre cette entrée et la sortie sera enlevée.

Bloc de texte

Utilisez "Insertion à Bloc" de texte pour insérer un bloc de textes dans votre diagramme. Un bloc de textes est seulement pour la documentation et n'ajoute rien au code étant exécuté.


Bloc composé: introduction

Description d'un bloc composé

Les blocs de composé sont une manière de structurer votre application

La zone de travail de l'éditeur CFC est limitée à une largeur de page. En choisissant le format papier, vous déterminez le nombre de blocs qui peuvent être placés horizontalement. Verticalement, un diagramme de fonction peut se développer à l'infini.

Bien qu'en fait vous ne soyez pas limité dans la longueur de votre diagramme CFC, il est facile de perdre la vue d'ensemble sur un diagramme trop grand. Les blocs composés permettent de décomposé votre application, cachant des groupes de blocs de logique relatifs à l'intérieur de `Bloc composé' afin d'améliorer la lisibilité de l'application

Les signaux entre les blocs à l'intérieur d'un bloc composé ne sont pas visibles à l'extérieur. En dehors du bloc composé, seuls les signaux entrants et sortants sont visibles

Sur l'écran, double-cliquer sur le bloc composé pour voir son contenu. Utiliser 'Voir à Niveau supérieur' ou dans la barre d'outil l'icône correspondant à 'Dossier parent' pour retourné à l'écran ou le bloc composé est appelé.

Les blocs de composé peuvent être imbriqués, c.-à-d. à l'intérieur d'un bloc composé vous pouvez définir, ou utiliser, d'autres blocs composés. Le contenu d'un bloc composé peut être édité, vous peut ajouter ou supprimer des blocs, refaire les connexions, ajouter, modifier ou supprimer des connexions entrants ou sortant du bloc composé.

Sur l'écran, les dernières connexions d'entrée et de sortie du bloc composé sont plus courtes que n'importe quel autre connexion, ainsi vous pouvez facilement distinguer un bloc composé d'un autre blocs.


Créer un bloc composé CFC

Créer un bloc composé

Pour créer un nouveau bloc composé vide,

1. | Sélectionner "Insertion à Bloc composé ..."
2. | Le pointeur de souris change
3. | Cliquer sur la souris à l'endroit où vous voulez insérer le nouveau bloc de composant

Vous pouvez maintenant remplir bloc composé d'abord par un double-clique et éditer comme n'importe quel autre diagramme de fonction. Ou, ajouter des entrées et sorties au bloc composé , éditer son contenu plus tard en utilisant les entrées et sorties déjà fournies.

Quand vous manquez d'espace sur un diagramme, ou pensez que la lisibilité serait augmentée en créant des groupes hiérarchiques, vous pouvez vous défaire certains de vos blocs pour les mettre dans des blocs composés :

1. | Avoir un Block(s) de choisi
2. | Sélectionner "Insertion à Bloc composé..."
3. | CFC-Editor vous demandera de vérifier si vous voulez convertir les blocs en bloc composé
4. | Les blocs sélectionnés seront enlevés du diagramme et remplacés par un bloc composé. Tous les signaux entre ces blocs seront déplacés avec les blocs, tous les signaux à d'autres blocs seront gardés et changés en signaux d'interface du bloc composé.

Notes:

Actuellement, le processus de retour en groupe de blocs à partir d'un bloc compose, n'est pas supporté.


Ajouter une E/S à un bloc composé CFC

Ajouter une E/S à un bloc composé

Vous pouvez éditer le contenu d'un bloc composé comme n'importe quel autre diagramme de fonction. Quand vous devez ajouter des entrées ou des sorties, vous devez changer l'interface du bloc composé en conséquence. Vous pouvez faire ceci de l'extérieur (Top-Down) ou de l'intérieur du bloc composé (Bottom-Up).

Top-Down:

1. | Tous les blocs composés ont le tout dernier connecteur qui est plus court que les autres. C'est toujours le dernier connecteur, un du côté gauche comme entrée, un du côté droit comme sortie.
2. | Câblez cette dernière E/S
3. | Dès que vous utiliserez ce dernier connecteur, il sera agrandie à la taille normale et un autre connecteur plus court sera ajouté à l'extrémité.

Bottom-Up:

1. | Double-cliquez sur le bloc composé que vous voulez ajouter un connecteur.
2. | Câblez une connexion d'un bloc à l'intérieur du bloc composé à la barre de marge gauche ou droite (selon que vous voulez créer une entrée ou une sortie)
3. | Cliquez droit sur le connecteur et ouvrez la boite de dialogue 'propriétés... ' par l'intermédiaire du menu contextuel.
4. | Marquez les objets 'Connecteur CFC' et 'Connecteur de bloc composé' nomme le et fermez la boite de dialogue en cliquant sur 'OK'.

Si vous montez d'un niveau en cliquant le symbole approprié vous voyez qu'un autre connecteur inutilisé plus court a été ajouté au bloc composé.


Editeur FBD : introduction

Langage FBD

Description

Un diagramme FBD (Function Block Diagram) représente un flux de données entre des expressions constantes ou des variables et des opérations représentées par des boites rectangulaires. Les opérations peuvent être des opérateurs de base du langage, des appels de fonctions ou de blocs fonctionnels.

Réseaux

Vous pouvez structurer un diagramme FBD avec des réseaux. Chaque réseau obtient automatiquement un n° d'identification à 4 chiffres. Un clic ou un double-clique dans cette zone permet de saisir un nom pour référencer le réseau.

Lorsquon utilise le bouton droit de la souris, un menu de sélection apparaît qui permet d'ajouter un nouveau réseau, ou de passer au suivant ou au précédent.

Chaque réseau est composé des éléments suivants:

Ä une barre d'alimentation d'entrée

Ä une barre d'alimentation de sortie

Ä des boites pouvant être un opérateur, une fonction ou un bloc fonctionnel

Ä des connexions reliant les barres d'alimentation et les différentes boites entre elles.

Ordre d'exécution

L'arrangement des blocs sur un diagramme est directement lié à l'ordre d'exécution : Les blocs sont exécutés colonne par colonne et de haut en bas dans une colonne. Pour modifier l'ordre d'exécution, réarrangez les blocs comme requis.

Les blocs composés seront exécutés comme un ensemble à un moment dans l'ordre d'exécution où le bloc composé est localisé. Le contenu des blocs composés sera exécuté selon les mêmes règles. Ceci est très semblable aux sous-programmes dans des langages de programmation modernes.

Barres d'alimentation

Les barres d'alimentation sur les côtés gauche et droit vous permettent de connecter la logique contenue dans le FBD avec les variables d'entrée (gauche) et de sortie (droite). Double-cliquer dans la barre de marge et saisir le nom de la variable :

Barre d'alimentation gauche :

Barre d'alimentation droite :

Les variables d'entrée du diagramme FBD doivent être connectées aux entrées des boîtes fonctions. Le type de chaque variable doit être cohérent avec le type de l'entrée de la boîte correspondante. Une entrée pour le diagramme FBD peut être une expression constante, toute variable interne, d'entrée ou de sortie.

Pour utiliser une valeur constante comme entrée d'un bloc, sélectionnez l'entrée (ou entrée de la barre d'alimentation), cliquez droit dessus avec la souris, sélectionnez "propriétés" et entrez la valeur constante dans le champ d'édition "valeur" de la feuille "valeur par défaut".

Les variables de sortie du diagramme FBD doivent être connectées aux sorties des boîtes fonctions. Le type de chaque variable doit être cohérent avec le type de la sortie de la boîte correspondante. Une sortie pour le diagramme FBD peut être une variable interne ou de sortie, ou le nom du programme édité (pour les fonctions seulement). Quand le nom de la fonction éditée est utilisé comme sortie du diagramme, il représente une assignation de la

valeur retournée par la fonction.

Les variables d'entrée et de sortie, les entrées et les sorties des boîtes fonctions sont reliées par des arcs de liaison. Des lignes sont utilisées pour représenter les liaisons entre deux points du diagramme :

Ä une variable d'entrée et une entrée de boîte.

Ä une sortie d'une boîte et une entrée d'une autre boîte.

Ä une sortie de boîte et une variable de sortie.

Boites

Pour ajouter des blocs à votre diagramme FBD, utilisez "Insérer à Bloc" pour des progiciels ou des blocs définis pour l'utilisateur, "Insérer à bloc de texte" pour des blocs des textes, ou "Insérer à bloc de composants" pour les blocs de composants.

Le curseur de la souris change, cliquez sur le diagramme où vous voulez insérer le nouveau bloc.

Pour réarranger des blocs, sélectionnez les blocs et faites un "glisser lâcher" jusqu'à leur nouvel emplacement.

Lorsque vous ajoutez de nouveaux blocs ou des blocs existants mobiles, l'éditeur CFC fera de la place en déplaçant les blocs avoisinants existants comme il se doit.

Pour enlever des blocs de votre diagramme, choisissez-les et appuyez sur DEL.

Connexion

Pour relier deux objets, sélectionner en premier l'objet de sortie (sortie d'un bloc, ou d'objet sur la barre gauche de marge), pour choisir alors l'entrée (entrée d'un bloc de fonction, ou d'un objet sur la barre droite de marge), puis appuyer sur "Insertion -> Connexion".

L'éditeur FBD supporte aussi des connexions entre une sortie et des entrées multiples. Pour créer une connexion multiple créer d'abord une connexion entre la sortie désirée et une entrée. Ensuite, marquer la prochaine entrée et cliquer dans la sortie. La connexion créée à la première étape et la sortie est maintenant marquée. Choisir "Insérer à Connexion" pour créer la connexion multiple entre la sortie et deux entrées. Vous pouvez maintenant ajouter plus d'entrées de la même manière.

Pour enlever une entrée d'une connexion multiple, marquer l'entrée et appuyer sur la touche DEL. Seule la connexion entre cette entrée et la sortie sera enlevée.

Bloc de texte

Utilisez Insertion -> Bloc de texte pour insérer un bloc de textes dans votre diagramme. Un bloc de textes est seulement pour la documentation et n'ajoute rien au code étant exécuté.


Principe du multitâches

Principe des tâches

Chaque tâche s'exécute parallèlement aux autres grâce à un noyau temps réel et à un niveau de priorité.

Une tâche contient un ou plusieurs programmes (jusqu'à 255 maximum).

Il existe 5 types différents de tâches :

  1. Tâche d'initialisation (1ère tâche à s'exécuter lors du démarrage du MPC)

  2. Tâche cyclique (exécutée en tâche de fond)

  3. Tâche TIMER (exécutée périodiquement)

  4. Tâche événementielle utilisateur (déclenchée sur événement utilisateur)

  5. Tâche événementielle système (1 seule tâche et déclenchée sur événement système)

Tâche d'initialisation :

Une tâche d'initialisation permet de :

  • Configurer les divers réseaux (Ethercat, CANOpen, Modbus )

  • Paramétrer votre système et réaliser d'autres actions nécessaire au démarrage ou reprise de cycle du MPC.

Au démarrage du MPC, la tâche d'initialisation est la première à s'exécuter. La fin de celle-ci déclenche l'exécution des autres tâches déclarées en Automatiques.

En cycle, le déclenchement de la tâche d'initialisation par une autre tâche, provoque la mise en attente de toutes les tâches jusqu'à la fin d'exécution de cette dernière.

Tâche cyclique :

Elles s'exécutent lorsque le séquenceur n'exécute pas les tâches TIMER et événementielles.

Ce type de tâche permet de réaliser des tâches de fond, gestion de process, communication.

Avec gestion des entrées/sorties par image de process

Nom : nom de la tâche

Type : type de la tâche -> choisir CYCLIQUE

Priorité : permet de choisir la priorité de la tâche

Démarrage : automatique ou manuel

Process : type de gestion des entrées / sorties -> choisir PAR IMAGE DE PROCESS

Le cycle s'exécute de manière cyclique :

  1. Acquisition des entrées : écriture dans les variables d'entrées de la tâche (ensemble des variables d'entrée déclarées dans tous les programmes de la tâche) de l'état physique des entrées.

  2. Traitement des différents programmes de la tâche : les programmes écris par l'utilisateur sont exécutés.

  3. Mise à jour des sorties : écriture des variables de sorties de la tâche (ensemble des variables de sortie déclarées dans tous les programmes de la tâche) sur les bits physiques des sorties.
    Une variable de sortie déclarée dans un programme mais non utilisée sera automatiquement re-forcée à 0 à la fin de la tâche (risque d'aléa sur les sorties physiques).

La durée de l'exécution de la tâche n'est pas limitée dans le temps.

Avec gestion des entrées/sorties directe :

Nom : nom de la tâche

Type : type de la tâche -> choisir CYCLIQUE

Priorité : permet de choisir la priorité de la tâche

Démarrage : automatique ou manuel

Process : type de gestion des entrées / sorties -> choisir DIRECTE

Le cycle s'exécute de manière cyclique :

Traitement des différents programmes de la tâche : les programmes écris par l'utilisateur sont exécutés.

L'accès aux E/S se fait directement par des fonctions INP et OUT : la fonction INP lit l'état de l'entrée physique et la fonction OUT agit directement sur la sortie physique.

La durée de l'exécution de la tâche n'est pas limitée dans le temps.

Tâche Timer :

Ce type permet de réaliser des tâches répétitives à intervalle fixe.

La gestion des entrées sorties se fait uniquement par image de process.

Nom : nom de la tâche

Type : type de la tâche -> choisir TIMER

Priorité : permet de choisir la priorité de la tâche

Démarrage : automatique ou manuel

Période : durée avant redémarrage de la tâche

Chien de garde : période après laquelle on déclenche un défaut si la tâche n'a pas terminée son exécution.

Tache Evénementielle Utilisateur:

Ce type permet de déclencher une tâche sur l'arrivée d'un événement utilisateur

Nom : nom de la tâche

Type : type de la tâche -> choisir EVENEMENT UTILISATEUR

Priorité : permet de choisir la priorité de la tâche

Démarrage : automatique, manuel ou initialisation

Evénement : numéro d'événement qui démarrera la tâche

Chien de garde : période après laquelle on déclenche un défaut si la tâche n'a pas terminée son exécution.

Tache Evénementielle Système :

Ce type permet de déclencher une tâche sur l'arrivé d'un événement utilisateur ou système

Nom : nom de la tâche

Type : type de la tâche -> choisir EVENEMENT SYSTEME

Priorité : permet de choisir la priorité de la tâche

Démarrage : automatique, manuel ou initialisation

Chien de garde : période après laquelle on déclenche un défaut si la tâche na pas terminée son exécution.


Priorité des tâches

Afin de partager au mieux les ressources de l'application, un séquenceur gère les différentes tâches dans le noyau temps réel du MPC selon leurs types (cycliques, TIMER), leurs priorités et leurs états.

Exemple de partage des ressources du MPC :

Timer : Ensemble des tâches Timer et événementielles.

Cyclique : Ensemble des tâches cycliques.

Interne : Traitement du Motion, driver de communication Ethercat, CANopen, traitement des E/S du MPC.

Système : Réseau TCP, Console, FLASH, atelier logiciel Motion Studio.

Les tâches sont divisées en deux groupes selon leur type:

  1. Les tâches interruptives : les tâches TIMER, événementielles

  2. Les tâches cycliques

Dans chaque groupe, une tâche a un niveau de priorité : de 1 à 31 (1 étant la priorité la plus haute).

Les tâches de type Timer et Evénementielle :

Les tâches événementielles doivent avoir la priorité la plus élevée (1).

Les tâches TIMER occupent les priorités intermédiaires de façon à être prioritaire sur les tâches cycliques (de fond) mais aussi laisser la main aux tâches événementielles.

Les tâches s'exécutent entre elles en commençant de la plus prioritaire à la moins.

Ex : 2 tâches

T1 priorité 5 avec une période de 10 ms,

T2 priorité 10 avec une période de 1 ms

Les tâches cycliques :

Les tâches cycliques dépendent des paramètres suivants :

Temps de vieillissement (en ms)

Puissance PC (en %)

Chaque tâche cyclique a une priorité définie par l'utilisateur.
Cette priorité est convertie en interne: PTx (PTx=1 / Priorité x)

La puissance réservée au système est convertie en temps réservé au système.

Exemple : on ne montre que les tâches de fond. Dans le même temps, ces tâches sont interrompues par les tâches TIMER, les process internes (motion, communications, etc.).

Le temps alloué à chaque tâche de fond est calculé au moment de l'exécution de chaque tâche en supposant que la situation reste identique sur toute la période de vieillissement.

Le temps alloué à la tâche t correspond à PTt / (somme PTx)

Le temps de vieillissement est fixe mais le «temps réel» de son déroulement dépend de la charge en tâche TIMER / événementielles et interne. Plus cette charge augmente et plus la puissance disponible pour système diminue.


Gestion des tâches

Chaque tâche possède un mode de démarrage qui a été paramétré lors de sa création :

Démarrage automatique : à chaque démarrage du MPC la tâche est lancée automatiquement après l'initialisation du MPC.

Démarrage manuel : la tâche n'est pas lancée automatiquement.

Initialisation : démarre avant toutes les autres tâches (voir tâche d'initialisation)

Un projet doit au moins contenir une tâche avec démarrage automatique et/ou une tâche d'initialisation. Il est conseillé d'avoir une tâche d'initialisation où sera réalisée l'initialisation des périphériques et des variables de l'application et qui démarrera ensuite les autres tâches.

On dispose de 5 instructions pour gérer les tâches :

RUN | lancement d'une tâche qui est à l'arrêt.
SUSPEND | suspension (pause) d'une tâche en cours d'exécution
CONTINUE | reprise de l'exécution d'une tâche suspendue là où elle s'était arrêtée
HALT | arrêt d'une tâche en cours d'exécution
STATUS | indique l'état de la tâche

Attention :

Le système multitâche du MPC a été prévu pour gérer de nombreuses tâches. Cependant, l'arrêt et la suspension des tâches influencent le fonctionnement du séquenceur et peuvent modifier les performances du MPC.


Introduction

Pour chaque tâche, il est possible d'avoir un ou plusieurs programmes qui s'exécutent l'un après l'autre.

Ses programmes doivent être écrit dans un des 6 langages décrits dans les chapitres suivants et correspondants à la norme IEC 61131-3.

IL : Instruction List

LD : Ladder Diagram

ST : Structured Text

SFC : Sequential Function Chart

FBD : Function Bloc Diagram

CFC : Continius Function Chart

Exemple de création de programme :


Les fonctions

Description

Une fonction calcule un résultat à partir de ses paramètres d'entrée.

Contrairement à un bloc fonctionnel, une fonction ne dispose pas de données privées pour le stockage d'information.

Une fonction a une sortie et une seule.

Une fonction peut être :

  • une fonction standard (SHL, SIN...)

  • une fonction écrite en langage "C" et intégrée à la cible

Exemple ST

Pour appeler une fonction en ST, entrez son nom, suivi de ses paramètres entre parenthèses et séparés par des virgules.

La fonction peut être imbriquée dans une expression complexe.

Un paramètre de fonction peut être un appel à une autre fonction.

Voici un exemple d'utilisation des fonctions "ODD" et "SEL" en ST :

(* L'énoncé suivant convertit un entier impair en l'entier pair le plus proche *)

iEvenVal := SEL ( ODD( iValue ), iValue, iValue+1 );

Exemple FBD, CFC et LD

Pour appeler une fonction en FBD et LD, il suffit de l'insérer dans le diagramme et de connecter ses entrées et sa sortie.

Exemple IL

Pour appeler une fonction en IL, il faut d'abord charger le premier paramètre de la fonction dans le résultat courant, puis utiliser le nom de la fonction comme une instruction.

Les entrées suivantes (si la fonction a plus d'une entrée, sont les opérandes de l'instruction, séparés par des virgules.

Le résultat de la fonction est chargé dans le résultat courant.

Voici un exemple d'utilisation de la fonction "OR" en IL:

(* les instructions suivantes exécutent un OU logique entre IN1 et IN2 *)

Op1: | LD | IN1 |
 | OR | IN2 |
 | ST | Q | (* Q = IN1 OR IN2 *)


Les blocs fonctionnels

Description

Un bloc fonctionnel regroupe un algorithme et un jeu de données privées.

Il peut avoir des paramètres en entrée et en sortie.

Un bloc fonctionnel peut être :

  • un bloc standard de la librairie (RS, TON...)

  • un bloc intégré au système cible

  • un bloc utilisateur ou "User Defined Function Block" (UDFB) écrit en ST, FBD, LD ou IL

Pour utiliser un bloc fonctionnel, vous devez déclarer une instance du bloc de la même façon qu'on déclare une variable.

Chaque instance doit être identifiée par un symbole unique.

Chaque instance de bloc représente un jeu de données privées et peut être appelée indépendamment des autres instances.

Un appel à une instance de bloc lance l'algorithme du bloc sur les données de l'instance, en utilisant les paramètres passés lors de l'appel.

Exemple ST

Pour appeler un bloc en ST, vous devez spécifier le nom de l'instance, suivi des paramètres d'appel écrits entre parenthèses et séparés par des virgules.

Pour accéder à un paramètre de sortie, vous devez spécifier le nom de l'instance suivi par un point '.' et le nom du paramètre.

Voici un exemple d'utilisation du bloc TON en ST:

(* MyTimer est une instance déclarée du bloc TON *)

MyTimer (bTrig, t#2s); (* active le bloc fonctionnel *)

TimerOutput := MyTimer.Q;

ElapsedTime := MyTimer.ET;

Exemple FBD et LD

Pour appeler un bloc fonctionnel en FBD ou LD, il suffit d'insérer le bloc dans le schéma et de connecter des variables à ses entrées/sorties.

Le nom de l'instance est spécifié en dessus du cadre du bloc.

Exemple IL

Pour appeler un bloc en IL, utilisez l'instruction CAL, en spécifiant une instance déclarée ayant le type du bloc.

Le nom de l'instance est l'opérande de l'instruction, suivi par les paramètres d'entrée entre parenthèses et séparés par des virgules.

Les instructions CALC, CALCN ou CALNC représentent un appel conditionnel du bloc:

CAL Appelle le bloc

CALC Appelle le bloc si le résultat courant est TRUE

CALCN Appelle le bloc si le résultat courant est FALSE

Voici un exemple d'appel du bloc TON en IL:

(* MyTimer est une instance déclarée du bloc TON *)

Op1: | CAL | MyTimer (bTrig, t#2s
 | LD | MyTimer.Q
 | ST | TimerOutput
 | LD | MyTimer.ET
 | ST | ElapsedTimer

Op2: | LD | bCond |
 | CALC | MyTimer (bTrig, t#2s) | (* appelé si bCond = TRUE *)

Op3: | LD | bCond |
 | CALCN | MyTimer (bTrig, t#2s) | (* appelé si bCond = FALSE *)


Editeur de déclaration : introduction

Introduction

La norme IEC61131-3 exige que tous les objets de données soient déclarés comme des variables. Différentes sections de déclaration sont disponibles pour déclarer des variables ou instances selon leur portée :

Les différentes zones de mémoire pour déclarer les variables dans un projet sont :

Ä Global : Cette mémoire contient les variables globales non sauvegardées du projet.

La déclaration de ces variables se fait dans un fichier textuel.

Ä Bank : Cette mémoire contient les variables sauvegardées, elle est divisée en plusieurs blocs de taille ajustable (4 banques de 64Ko par défaut), ces variables peuvent aussi être échangés (via Modbus ou CANopen dans certaines limites).

La déclaration de ces variables se fait à partir de l'éditeur ci-dessous.

Ä Exchange : Cette mémoire contient les variables échangés en Modbus ou CANopen.

La déclaration de ces variables se fait à partir de l'éditeur ci-dessous.

Ä IO : Cette mémoire contient la déclaration des d'entrées/sorties du projet.

La déclaration de ces variables se fait à partir de l'éditeur ci-dessous.

IEC61131-3 est fourni avec un ensemble de type de donnée pré défini, appelé aussi type de donnée élémentaire. Mais, il est aussi possible de définir des types de données dérivés (déclaré par l'utilisateur), des structures, des tableaux et des énumérations.

Pour utiliser une variable dans un programme, il faut obligatoirement la déclarer dans la zone "Déclaration de variable" de la fenêtre programme en cours. Les déclarations sont écrites dans un format textuel défini par la norme IEC61131-3.


Sections de déclaration

Les variables sont déclarées dans différentes sections de variables, appelées sections de déclaration. Une section de déclaration commence par un mot-clé et se termine par END_VAR (par exemple, VAR_GLOBAL... END_VAR).

VAR_INPUT: Si un bloc variable doit seulement être lu à l'intérieur d'un POU, vous devez déclarer cette variable comme variable d'entrée. Cette variable ne pourra être modifiée dans ce POU. Un variable d'entrée peut être employée pour le transfert de paramètres dans une fonction ou un bloc de fonction.

VAR_IN_OUT: Une variable d'entrée/sortie est accessible sous le même nom dans un bloc de fonction. La variable obtient une référence (pointeur) à la variable transférée et à son emplacement mémoire pendant le transfert des paramètres par l'appel du bloc. Puisqu'une opération d'écriture a un effet direct sur le contenu de la variable In_Out, il n'est pas autorisé d'employer un type protégé en écriture pour la variable transférée à l'inverse des variables d'entrées ayant l'attribut CONSTANT.

VAR_OUTPUT: Les variables de sorties sont déclarées dans un bloc de fonction qui les utilise pour le retour de valeurs. Le POU appelant peut y accéder.

VAR_GLOBAL: Une variable doit être déclarée en tant que variable globale dans un 'programme ' POU si cette variable est utilisée dans ce POU et dans les blocs de fonctions appelés par ce POU. Cette variable doit être déclarée en tant que variable externe (VAR_EXTERNAL) dans tous les blocs de fonction qui prévoient de l'utiliser.

VAR_EXTERNAL: Si une variable déclarée en globale est utilisée à l'intérieur d'un bloc de fonction, cette variable doit être déclarée en tant que variable externe à l'intérieur de ce bloc de fonction.

VAR: Une variable locale est seulement valide à l'intérieur du POU dans lequel elle est déclarée. La déclaration des variables locales peut être complétée par les attributs 'RETAIN' ou 'CONSTANT ', ou par une adresse.

TYPE : Le mot-clé 'TYPE ' est utilisé pour la déclaration de type de données (dérivé) défini par l'utilisateur avec une portée locale dans les 'programmes' types POU et 'bloc de fonction', ou avec une portée globale dans les définitions de type.

Selon le type de POU seul certaines sections de variable peuvent être employées :

Un POU de type programme peut contenir les types : local, global et externe

Un POU de type bloc fonctionnel peut contenir les types : Entrée, Sortie, E/S, local et externe

Un POU de type fonction peut contenir les types : Entrée, Sortie et local.


Structure d'une ligne de déclaration

Description

Une ligne de déclaration à la forme suivante, où les éléments facultatifs sont placés entre parenthèses [ ], et les expressions sont placées entre parenthèses < > :

<Variable name> : <Type> [:= <Initial value>]; [(* <Comment> *)]

D'abord on donne le nom de la variable, suivi de deux points. Derrière les deux points suit le type. Si la variable a une valeur d'initialisation, cette valeur sera indiquée après ':='. Une ligne finit toujours avec un point-virgule (;). La ligne peut être commentée avec les commentaires placés entre (* et *).

Exemple:

Expvariable1 : BOOL; (* variable de type BOOL *)

Expvariable2 : BOOL := TRUE; (* variable de type BOOL commençant avec la valeur TRUE *)

Exemples

Variable sans valeur initiale: InterMedSum : INT;

Variable avec valeur initiale: Pieces : INT := 5;

Variable directement représentée avec un nom et sans valeur initiale: Valve : BOOL;

Exemple de bloc fonctionnel: Counter1 : CTU;

Déclaration de variable d'E/S pour les tâches avec image de process

Les variables d'E/S sont automatiques déclarées dans le fichier IO.POE par l'éditeur d'E/S sous la forme suivante:

VAR_GLOBAL

 Entree_MPC_1a8 AT %IB0.0: BYTE;

 Entree_MPC_9a16 AT %IB1.0: BYTE;

END_VAR

Pour réutiliser ces variables dans une tâche avec image de process, il faut les saisir dans la zone de variable de l'éditeur de programme et enlever l'attribut AT ainsi que l'adressage :

VAR_ EXTERNAL

 Entree_MPC_1a8: BYTE;

 Entree_MPC_9a16: BYTE;

END_VAR

Note

(1) Les valeurs initiales doivent seulement être littérales. Il n'est pas possible d'utiliser d'autres variables pour initialiser des variables pendant la déclaration.

(2) La longueur maximale du nom d'une variable est de 64 caractères.

Attention

Il est interdit de faire de l'adressage direct avec ou sans noms de variables (l'attribut AT est interdit), l'adressage se fait à partir de l'éditeur d'E/S.


Types de donné élémentaire

Types de base

Le logiciel Motion Studio ne met pas en application les types de données suivants définies par la norme IEC61131-3:

DATE: 'Jour, Mois, Année (seulement)'

TIME_OF_DAY: 'Heure du jour (seulement)'

DATE_Inst_AND_TIME: 'Date et heure'

Hiérarchie des différents types de base:


Type dérivé de donné

Types redéfinis

Description

Les mots clefs TYPE ... END_TYPE permettent de créer un synonyme d'un type de base, d'un type redéfini ou d'un tableau.

Les types redéfinis peuvent être déclaré par SERAD ou par vous-même.

Après définition, ils peuvent être utilisés comme des types de base dans les zones de déclaration de variable des éditeurs de programme.

Exemple

Dans l'exemple suivant, un nouveau type redéfini est déclaré pour représenter la valeur de 'pression'.

Déclaration du type:

TYPE Pressure: INT;

 tTable: Array [1..10] Of INT; END_TYPE

Déclaration de la variable:

VAR PreValvePressure: Pressure;

 Table: tTable; END_VAR

Utilisation de la variable de type redéfini en ST:

PreValvePressure:= 0;

Table[1]:= 15;


Déclaration de tableau

Description

Les tableaux contiennent des éléments multiples d'un même type. Le mot-clef ARRAY est employé pour définir un tableau. Chaque élément d'un tableau peut être une variable de type de base, redéfini ou structure.

Exemple

Déclaration de variable de type tableau :

VAR (* Déclaration d'un tableau de cinq entiers initialisé *)

Arr1: ARRAY [1..5] OF INT := [1,2,3,4,5];

(* Déclaration d'un tableau à deux dimensions de 25 éléments de type structure tStuct *)

Arr2: ARRAY [1..5,10..14] of tStruct;

(* Déclaration d'un tableau à deux dimensions de 4 éléments de type tPressure *):

Arr3: ARRAY [0..3] Of tPressure;

END_VAR

Utilisation de la variable de type tableau en ST:

Arr1[2]:= 2728;

Arr2[2,11].Param1:= 12.3;

Arr3[3]:= 12;

Attention

Motion Studio utilise des nombres entiers 16bits pour les index de tableau donc les tableaux ne doivent pas être dépasser 65536 éléments.


Déclarations de structure

Déclaration de structure

Description

Une structure contient des éléments multiples du même ou de différents types de données, élémentaires. Le mot-clé STRUCT est employé pour définir une structure. Les différents éléments d'une structure s'appellent les membres de cette structure, et sont accédés en saisissant le nom de la structure, suivie d'un point et du nom du membre.

Exemple

Déclaration de la structure:

TYPE RobotArm: STRUCT Angle_1: REAL;

Angle_2: REAL;

Grip: BOOL;

Length: INT;

 END_STRUCT;

END_TYPE

Déclaration de la variable:

VAR Robot1: RobotArm;

Robot2: RobotArm;

END_VAR

Utilisation de la variable en ST:

Robot1.Grip:= TRUE;


Déclaration de type énuméré

Description

Une variable de type énumération de données peut prendre n'importe quel valeur d'une liste fixe. La liste de valeurs légales est énumérée dans la déclaration du type énumération de données, séparée par des virgules. Une valeur initiale peut être indiquée après la fermeture ')'; si la valeur initiale n'est pas indiquée, la première valeur sera la valeur par défaut.

Exemple

Le type de données de TrafficLight peut être 'red', 'yellow' ou green. 'Yellow' 'sera la valeur par défaut.

TYPE TrafficLight: (Red, yellow, green):= yellow;END_TYPE

VAR MainRoad: TrafficLight; CrossRoad: TrafficLight;

StopCar: BOOL;

END_VAR

Dans l'élément de l'instruction du POU, les valeurs énumérées définies peuvent être employé:

Exemple: IL

LD MainRoadEQ redST StopCar


tBcleMode

Description

Ce type est une énumération des différents modes d'utilisation des variateurs:

  • m_torque : variateur en boucle de courant

  • m_speed : variateur en boucle de vitesse

  • m_position : variateur en boucle de position


tEdgeType

Description

Ce type est une énumération des différents types de front :

  • t_falling : front descendant

  • t_rising : front montant

  • t_all : tous les fronts


tFilterMaster

Description

Ce type est une énumération des différents filtres applicable lors de mouvement synchronisé

  • filter_none

  • filter_std

  • filter_advanced

  • filter_advanced2

  • filter_interpol

  • filter_interpol2


tModeInitVal

Description

Ce type est une énumération des différents paramètres de transistion lors du passage d'un mode à un autre :

  • Inital_Zero

  • Initial_real

  • Initial_theoric

  • Initial_v alue

Passage de Couple à Couple : ignoré silencieusement

Passage de Vitesse/Position à Couple :

  • Initial_Zero : passage en couple, TORQUE=0 et CURRENT=0

  • Initial_real : passage en couple, TORQUE=TORQUE_S et CURRENT=CURRENT_S

  • Initial_theoric : interdit, erreur système

  • Initial_ value : passage en couple

Passage de Couple à Vitesse :

  • Initial_Zero : passage en vitesse, SPEED=0

  • Initial_real : passage en vitesse, SPEED=SPEED_S

  • Initial_theoric : interdit, erreur système

  • Initial_ value : passage en vitesse

Passage de Vitesse à Vitesse : ignoré silencieusement

Passage de Position à Vitesse:

  • Initial_Zero : passage en vitesse, SPEED=0

  • Initial_real : passage en vitesse, SPEED=SPEED_S

  • Initial_theoric : passage en vitesse, SPEED=vitesse théorique du profil

  • Initial_ value : passage en vitesse

Passage de Couple/Vitesse à Position :

  • Initial_Zero : interdit, erreur système

  • Initial_real : passage en position, POS=POS_S

  • Initial_theoric : interdit, erreur système

  • Initial_value : interdit, erreur système

Passage de Position à Position : ignoré silencieusement


tMoveDirection

Description

Ce type est une énumération des sens d'un axe:

  • s_all : les deux sens

  • s_neg : sens négatif

  • s_pos : sens positif


tSrcPos

Description

Ce type est une énumération des différentes sources de position disponible pour un axe :

  • SRC_AXE pour la position réel de l'axe

  • SRC_AUX pour la position auxiliaire de l'axe

  • SRC_TRC pour la position théorique de l'axe

  • SRCX_TRC pour la position théorique en X de l'axe d'interpolation

  • SRCY_TRC pour la position théorique en Y de l'axe d'interpolation

  • SRCZ_TRC pour la position théorique en Z de l'axe d'interpolation


tSegmentDef

Déclaration

TYPE tSegmentDef :
     STRUCT
        Count :         UInt;
        Active :        Array [0..31] Of Bool;
        OutputNum :     Array [0..31] Of UInt;
        BeginPosition : Array [0..31] Of Real;
        EndPosition :   Array [0..31] Of Real;
        Direction :     Array [0..31] Of tMoveDirection ;
        EventIn :       Array [0..31] Of UInt;
        EventInParam :  Array [0..31] Of UDInt;
        EventOut :      Array [0..31] Of UInt;
        EventOutParam : Array [0..31] Of UDInt;
        Mode :          Array [0..31] Of tSegmentMode ;
        Duration :      Array [0..31] Of Udint;
    END_STRUCT;
END_TYPE

Description

Ce type de structure permet de déclarer les segments de boites à cames

  • <Count> nombre de segments

  • <Active> TRUE si le segment est actif sinon FALSE

  • <OutputNum> numéro de la sortie correspondante (0 à 31) de définie dans une structure de type tOutputDef

Si plusieurs segments sont sur la même sortie (d'une même boite), un OU logique est effectué entre les segments.

  • <BeginPosition> position de début du segment

  • <EndPosition> position de fin du segment
    Pour un axe modulo    , si <BeginPostion> est inférieur à <EndPosition> alors le segment correspondra au segment de <BeginPosition> à <EndPosition> sinon au segment de <EndPosition> à <BeginPosition> en passant par 0.
    Pour un axe non modulo    , si <BeginPostion> est supérieur à <EndPosition> alors le segment ne sera jamais actif.

  • <Direction> direction du mouvement (indifférente, positive ou négative)

Indifférente : ne tient pas compte de la direction du mouvement

Positive : le segment ne sera activé que si l'on y entre en sens STTI+

Négative : le segment ne sera activé que si l'on y entre en sens STTI-

Dans le cas d'une direction positive ou négative, le sens est testé lors de l'ENTREE dans le segment (instant où l'on passe de "hors segment" à "dans segment").

Si on est déjà dans le segment (démarrage de la boite à came alors que la source de position est déjà dans le segment), on considère que l'on ENTRE dans le segment à cet instant. Si l'on est à l'arrêt avec une source de position bruitée (résolveur), le comportement sera aléatoire (le segment sera activé ou non).

  • <EventIn> événement utilisateur à monter lorsque l'on rentre dans le segment. (0 : aucun événement)

  • <EventInParam> paramètre à passer à l'événement

  • <EventOut> événement utilisateur à monter lorsque l'on sort du segment. (0 : aucun événement)

  • <EventOutParam> paramètre à passer à l'événement

  • <Mode> mode (position ou durée)

Position : sort l'état du segment (activé ou non)

Durée : sort une pulse égale à <D uration> lorsque l'on franchit la borne de début. Hystérésis est ignorée, CompensationOn et Direction sont utilisés. Cette pulse est monostable NON redéclenchable (une fois la pulse armée, tout passage sur la borne est ignoré tant que la durée ne soit pas écoulée). L'activation ou désactivation d'un segment ou d'une sortie de la boite à came, recharge automatiquement la durée de la pulse à <Duration>

  • <Duration> durée en µs (utilisé seulement en mode durée)


tOutputDef

Déclaration

TYPE tOutputDef:
      STRUCT
        Count :           UINT;
        Active :          Array [0..31] Of BOOL;
        Target :          Array [0..31] Of tOutTarget ;
        OutBit :          Array [0..31] Of tIOBitOut ;
        InBit :           Array [0..31] Of tIOBitIn ;
        Hysteresis :      Array [0..31] Of REAL;
        CompensationOn :  Array [0..31] Of DINT; (*compensation en µs*)
        CompensationOff : Array [0..31] Of DINT; (*compensation en µs*)
        Timeout :         Array [0..31] Of UDINT; (*timeout en µs*)

Description

Ce type de structure permet de déclarer les sorties de boites à cames

  • <Count> numéro de sortie

  • <Active> TRUE si le segment est sinon FALSE

  • <Target> type de destination de la sortie de la boîte à cames

  • <OutBit> nom de la sortie physique du MPC, d'un IMD ou d'un module d'I/O CANopen

  • <InBit> nom de l'entrée interne du MPC

  • <CompensationOn> durée en µs à compenser à l'activation de la sortie.

  • <CompensationOff> durée en µs à compenser à la désactivation de la sortie

Le système anticipe/retarde l'activation en fonction de la vitesse en cours.

    • Valeur positive : retarde l'activation

    • Valeur négative : anticipe l'activation

  • <Hysteresis> hystérésis pour éviter les changements d'état rapides sur la sortie, lorsque l'on est proche d'une position de changement d'état.

  • <Timeout>timeout en µs sur état actif de la sortie

0 : aucun timeout sur la sortie.

Si la sortie reste active pendant la durée du timeout elle est remise à 0 tant que tous les segments activant cette sortie ne soient pas terminés.


tSegmentMode

Description

Ce type est une énumération utilisé pour le choix du mode d'activation dans la déclaration des segments de boites à cames :

  • <smPosition > : par rapport à la position

  • <smDuration > : par rapport à une pulse


tOutTarget

Description

Ce type est une énumération utilisé pour le choix de la cible dans la déclaration des sorties de boites à cames :

  • <om_physicaloutbit> : utilisé une sortie physique

  • <om_internalinbit> : utilisé une entrée virtuelle


tCamTable

Déclaration

TYPE tCamTable :

      STRUCT

        Nb :UDINT;

        X :  array [0..1023] of REAL;

        Y : array [0..1023] of REAL;

        Dx : array [0..1023] of REAL;

        Dy : array [0..1023] of REAL;

      END_STRUCT;

END_TYPE

Description

Ce type de structure permet de déclarer une came à partir d'un tableau de point :

  • <Nb> : le nombre de points dans la came

  • <X> : la position maître

  • <Y> : la position esclave

  • <dX>: la tangente X

  • <dY>: la tangente Y


tCapType

Description

Ce type est une énumération des différents types de capture :

  • W_NONE pour pas de fenêtre

  • W_INT pour fenêtre interne

  • W_EXT pour fenêtre externe


tCapImdIo

Description

Ce type est une énumération de différentes entrées rapides du variateur IMD et IMDL:

  • IO_3 pour l'entrée rapide IMD 3

  • IO_4 pour l'entrée rapide IMD 4

  • IO_14 pour l'entrée rapide IMD 14

  • IO_15 pour l'entrée rapide IMD 15

  • IO_Z pour le TOP Z de la source


tHandle

Description

Ce type permet d'associer un numéro (UDINT) à un port de communication physique.


tIObitIn

Description

Ce type est une énumération de tous les entrées de type BIT du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des entrées du type BIT présents dans l'éditeur d'E/S de l'onglet Automate :


tIObitOut

Description

Ce type est une énumération de tous les sorties de type BIT du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des sorties du type BIT présents dans l'éditeur d'E/S de l'onglet Automate :


tIObyteIn

Description

Ce type est une énumération de tous les entrées de type BYTE du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des entrées du type BYTE présents dans l'éditeur d'E/S de l'onglet Automate :


tIObyteOut

Description

Ce type est une énumération de tous les sorties de type BYTE du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des sorties du type BYTE présents dans l'éditeur d'E/S de l'onglet Automate :


tIOwordIn

Description

Ce type est une énumération de tous les entrées de type WORD du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des entrées du type WORD présents dans l'éditeur d'E/S de l'onglet Automate :


tIOwordOut

Description

Ce type est une énumération de tous les sorties de type WORD du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des sorties du type WORD présents dans l'éditeur d'E/S de l'onglet Automate :


tCam

Description

Ce type est contient toutes les cames du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des cames présentes dans l'onglet Motion :


tGeoEntry

Déclaration

TYPE tGeoEntry :

     STRUCT

        Input : Array [1..3] of USINT;

        Output : Array [1..3] of USINT;

        Param : Array [1..3] of REAL;

        GeoType : tGeoType ;

     END_STRUCT;

END_TYPE

Description

Ce type de structure permet décrire les transformations géométriques de l'interpolation :

<Input> : entrées de la transformation

<Output> : sorties de la transformation

Les entrées et sorties de la transformation peuvent prendre les valeurs suivantes :

  • 0 : NULL, aucune donnée, non utilisé

  • 1 : X

  • 2 : Y

  • 3 : Z

  • 4...9 => invalide (éventuelles autres variables spéciales d'entrées)

  • 1119 => Axe de sortie 1 à 9

  • 2099 => invalide

  • 100...255 => Entrée "de calcul" permettant de relier une entrée à une sortie.

<Geotype> : type de transformation :

  • TINVALID génère une erreur

  • TROTATESERIAL effectue 3 rotations successives du repère

  • TROTATEPARALELL effectue 3 rotations du repère par rapport à un repère fixe

  • TTRANSLATE effectue une translation du repère

  • TSCALE retourne l'orientation de la direction d'une trajectoire

<Param> : la valeur à appliquer à la transformation.


tGeoType

Description

Ce type est une énumération des différents types de transformation géométrique pour l'interpolation:

  • TINVALID génère une erreur

  • TROTATESERIAL effectue 3 rotations successives du repère

  • TROTATEPARALELL effectue 3 rotations du repère par rapport à un repère fixe

  • TTRANSLATE effectue une translation du repère

  • TSCALE effectue un changement d'échelle

  • TTANGENTIAL retourne l'orientation de la direction d'une trajectoire


tInterpolateParam

Déclaration

TYPE tInterpolateParam :

     STRUCT

        Axes_Count :USINT;

        Axes : Array [1..10] of tPeripheral ;

        Acc_Limit : Array [1..10] of BOOL;

        Acc_Limit_Value : Array [1..10] of REAL;

        Vel_Limit : Array [1..10] of BOOL;

        Vel_Limit_Value  : Array [1..10] of REAL;

        Limit_Type : tInterpoLimitType ;

        Geo_Count :USINT;

        Geo_ReverseCount :USINT;

        Geo : Array [1..10] of tGeoEntry ;

        Geo_Reverse : Array [1..10] of tGeoEntry ;

     END_STRUCT;

END_TYPE

Description

Ce type de structure permet configurer tout les paramètres à une interpolation :

<Axes_Count> : nombre d'axe du modèle

<Axes> : tableau des noms d'axe du modèle

<Acc_Limit> : tableau d'activation des limites d'accélération des différents axes

<Acc_Limit_Value> : tableau des valeurs de limite d'accélération des différents axes

<Vel_Limit> : tableau d'activation des limites de vitesse des différents axes

<Vel_Limit_Value> : tableau des valeurs de limite de vitesse des différents axes

<Limit_Type> : TADAPTSPEED pour que l'interpolation suive le plus précisément possible le profil de vitesse ou TADAPTTRAJ pour privilégié la trajectoire

<Geo_Count> : nombre de transformation

<Geo_ReverseCount> : nombre de transformation inverse

<Geo> : tableau de transformation de type tGeoEntry

<Geo_Reverse> : tableau de transformation inverse de type tGeoEntry


tInterpoLimitType

Description

Ce type est une énumération des différents modes de suivi de l'interpolation :

  • TADAPTSPEED pour que l'interpolation suive le plus précisément possible le profil de vitesse

  • TADAPTTRAJ pour privilégié la trajectoire


tIntParam

Description

Ce type est une énumération de tous les paramètres accessible dans configuration et de type entier.

La liste de ces paramètres est consultable à partir des fenêtres suivantes :

Aide \ Table CANopen classé par Index/Sub

Aide \ Table CANopen classé par Groupe

Aide \ Table modbus classé par Index/Sub

Aide \ Table modbus classé par Groupe

Les paramètres ne contenant pas «Real» dans la colonne «Prec» sont du type réel


tRealParam

Description

Ce type est une énumération de tous les paramètres accessible dans configuration et de type réel.

La liste de ces paramètres est consultable à partir des fenêtres suivantes :

Aide \ Table CANopen classé par Index/Sub

Aide \ Table CANopen classé par Groupe

Aide \ Table modbus classé par Index/Sub

Aide \ Table modbus classé par Groupe

Les paramètres contenant «Real» dans la colonne «Prec» sont du type réel


tPeripheral

Description

Ce type est une énumération de tous les périphériques du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des périphériques présents dans l'onglet Configuration :


tGroup

Description

Ce type est une énumération de toutes les tâches du projet, il est mis à jour automatiquement par le Motion Studio et correspond à la liste des tâches présentes dans l'onglet Programmation :


tTaskStatus

Description

Ce type est une énumération des différents états que peuvent avoir une tâche :

<TSTOP> : la tâche est arrêtée

<TSUSPEND> : la tâche est suspendue

<TRUN> : la tâche est en cours d'exécution


Introduction

Le MPC peut gérer jusqu'à 40 axes.

Les ordres de mouvement sont envoyés directement aux variateurs via le bus Ethercat.

Le logiciel Motion Studio contient de nombreuses fonctions évoluées pour le contrôle de mouvement :

Positionnement rapide et précis

Arbre électrique à rapport variable

Profil de came avec déphasage dynamique

Registration 10 µs avec fenêtre de déclenchement

Boîtes à contacts

Synchronisation de mouvements

Axes virtuels

Interpolations linéaire, circulaire, hélicoïdale, modèles géométriques


Buffer de mouvments

Buffer de mouvements

Le processeur du MPC qui exécute les tâches, échange périodiquement des informations de mouvements avec les variateurs.

Les informations de mouvement (MOVA, STTA, MOVS, GEARBOX, STOP ...) sont transmises du MPC vers chaque axe via un buffer logiciel.

Le buffer de mouvement contient 10000 tronçons (décomposition la plus simple d'un mouvement) dont 100 réservés aux arrêts d'urgence.

Un mouvement peut prendre plusieurs tronçons dans le buffer de mouvement selon son type et ses paramètres.

Lorsqu'une tâche rencontre une fonction de mouvement, elle l'envoie dans le buffer :

Ä Tout mouvement doit passer par le buffer pour être exécuté.

Ä Si le buffer est déjà plein, la tâche est bloquée jusqu'à ce qu'une place soit disponible (ce mode de fonctionnement dégrade les performances de toutes les tâches et bloque l'inclusion de tous mouvements).

Ä La place dans le buffer est libérée lorsque le mouvement a été complètement exécuté.

Ä Tous les mouvements sont composés de tronçons :

STTA : <= 3 tronçons

MOVS : <= 3 tronçons

STTI : <= 2 tronçons

STOP : 1 tronçon

Ä MOVS est composé de 1 à 3 tronçons selon les valeurs de «Distance esclave», «Distance accélération», «Distance décélération».

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 0.0, 0.0); (* 1 tronçon *)

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 100.0, 0.0); (* 1 tronçon *)

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 0.0, 100.0); (* 1 tronçon *)

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 20.0, 0.0); (* 2 tronçons *)

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 0.0, 20.0); (* 2 tronçons *)

MOVS (Y, X, SRC_AXE, Dmaitre, 100.0, 20.0, 20.0); (* 3 tronçons *)

Attention:

Ä Les fonctions STOP, SSTOP et STOPS arrêtent le mouvement en cours d'exécution et retirent tous les tronçons concernant l'axe dans le buffer.

Ä Si l'axe est en boucle ouverte (AXIS (Axe, OFF)), toute fonction de mouvement rencontrée dans une tâche passe par le buffer et est directement consommée par l'axe sans exécution du mouvement.


Mode de fonctionnement

Il existe 3 modes de fonctionnement pour un axe :

Mode couple

L'axe fonctionne par l'envoi d'une consigne de couple.

Mode vitesse

L'axe fonctionne par l'envoi d'une consigne de vitesse.

Mode Position

Un générateur de mouvement effectue des déplacements sur l'axe.

Le choix du mode de fonctionnement d'un variateur se fait dans l'onglet CONFIGURATION

Liste des fonctions

CURRENT

CURRENT_S

GETMODE

SETMODE

POS

POS_S

POS_T

POSAUX_S

POSERROR_S

SPEED

SPEED_S

TORQUE

TORQUE_S

Force la consigne de courant

Retourne le courant actuel

Retourne le mode de fonctionnement d'un axe

Force le mode de fonctionnement d'un axe

Modifie la position à atteindre

Retourne la position réelle

Retourne la position à atteindre

Retourne la position auxiliaire

Indique une erreur de mouvement

Force la consigne de vitesse

Retourne la vitesse courante

Force la consigne de couple

Retourne le couple actuel


Passage en mode non asservi

Un axe passe en mode non asservi (boucle ouverte) :

Ä A chaque redémarrage du MPC.

Ä A chaque exécution de la fonction AXIS (Axe, 0) à partir d'une tâche.

Ä Sur erreur de poursuite de n'importe quel axe servo (sauf si modification des paramètres de sécurité des axes par la fonction SECURITY).

Ä Sur un forçage à partir des menus de debug (bouton asservi / débrayé ...), du menu communication (arrêt des tâches, redémarrage des tâches, envoi des tâches).

La fonction AXIS_S (Axe) permet de lire l'état dans lequel se trouve l'axe.

La lecture de AXIS_S doit se faire uniquement quand AXISREQUEST_S est égale à 0.

Si une fonction de mouvement est envoyée à un axe paramétré en boucle ouverte, elle sera consommée par celle-ci mais le mouvement ne sera pas effectué.

Par exemple :

Tâche Process

...

... (* Le MPC a détecté une erreur de poursuite sur un *)

... (* axe => tous les axes passent en mode non asservi *)

MOVA (Axe_X, 1000.0); (* le mouvement est consommé par le variateur *)

... (* mais non effectué *)

OUTP (S1, 1) ; (* sortie S1=1 *)

MOVA (Axe_X, 2000.0); (* le mouvement est consommé par le variateur *)

... (* mais non effectué *)

OUTP (S1, 0); (* sortie S1=0 *)

... (* la sortie S1 est passée fugitivement à 1 car *)

... (* la fontion MOVA (Axe_X, 2000.0) a pris peu de temps au système *)


Passage en mode asservi

Pour que le MPC puisse piloter et contrôler les mouvements d'un axe, il est nécessaire de le passer en mode asservi.

Un axe passe en mode asservi (boucle fermée) :

Ä A chaque exécution de la fonction AXIS (Axe, 1) à partir d'une tâche.

Ä Sur un forçage à partir des menus de debug (bouton asservi ).

La fonction AXIS_S (Axe) permet de lire l'état dans lequel se trouve le variateur.

La lecture de AXIS_S doit se faire uniquement quand AXISREQUEST_S est égale à 0.

Pour des raisons de sécurité, il est nécessaire d'affecter une sortie logique du MPC à la gestion de la fonction «Enable / Disable» des variateurs reliés au MPC.

Cette sortie devra être reliée sur l'entrée «Enable» du variateur. La gestion de la sortie sera insérée dans une tâche de surveillance non bloquante.

Par exemple :

Tâche Defauts

...

OUTP (EnableDrive,AXIS_S(Axe_X)) ; (* si axe en mode asservi *)

...  (* => OUT (EnableDrive)=1 sinon =0 *)

Attention

Si l'on souhaite vérifier qu'un axe a fini un mouvement à partir d'un programme du MPC, il faut tester MOVE_S; AXISREQUEST_S et AXIS_S.

Pour s'assurer que l'asservissement est effectif, écrire :

(* TEST COMPLET *)

AXIS (Axe_X, 1) ;    (* Demande d'asservissement *)

WAIT (AXISREQUEST_S (Axe_X) =0); (* Attente fin de demande d'asservissement *)

If (AXIS_S (Axe_X) =0) Then  (* Test de l'asservissement *)

 FlagDefaut := 1;

Else

 FlagDefaut := 0;

End_If;


Régulation

Le diagramme ci-dessous représente, de façon simplifiée les trois boucles de régulations dans le système. Les boucles de couple et vitesse sont exécuté par l'IMD, le MPC quand à lui se charge de la boucle de position.

L'asservissement d'un axe est réglable à partir de ses paramètres. Il peut être programmé en mode «vitesse» ou en mode «couple» et «position» ; par défaut, en mode position.

Il est conseillé d'utiliser la bibliothèque de paramètres moteur afin de calibrer les boucles de régulation nécessaire au bon fonctionnement du moteur, pour plus d'information voir le chapitre Paramétrage d'un axe et les écrans de réglages de l'IMD.


Paramétrage d'un axe

Un axe doit être paramétré avant de pouvoir l'utiliser.

Le paramétrage d'un axe consiste à régler les boucles, d'une part et ensuite a intégrer la cinématique de la machine.

L'accès aux paramètres des boucles se fait à partir des l'onglets Configuration du navigateur de projet

Plusieurs solutions existes pour paramétrer les boucles :

  • Utiliser le fichier de paramètre correspondant au moteur en l'important dans le projet, à la création de l'axe ou par le menu popup (clic droit) sur l'axe dans l'onglet configuration. Dans ce cas les paramètres des boucles de vitesse et position devront être réajusté sur la machine.

  • Réaliser un auto-tuning moteur à vide. Les réglages de base sont trouvés par cette méthode, un réajustement et un optimisation sur machine est nécessaire.

  • Utiliser les caractéristiques du moteur, saisir les paramètres et régler les boucles manuellement. C'est la méthode la plus longue. Elle ne doit être utilisée qu'en dernier recours.

Pour ajuster les réglages ainsi obtenus, on peut agir sur les paramètres suivants :

  • Boucle de courant :

    • Le gain Kp agit sur la réactivité aux changement sur la boucle de courant

    • Augmenter le gain Ki améliore le suivi mais peut, par excès, dégrader la stabilité de la boucle

    • Diminuer le gain Ki permet de stabiliser la boucle mais le courant demandé peut ne pas être atteint

  • Boucle de vitesse :

    • Le gain Kp agit sur la réactivité aux changement sur boucle de vitesse

    • Augmenter le gain Ki améliore le suivi mais peut, par excès, dégrader la stabilité de la boucle

    • Diminuer le gain Ki permet de stabiliser la boucle mais la vitesse demandé peut ne pas être atteinte

  • Boucle de position :

    • Le gain Kp agit sur la réactivité aux changement sur boucle de vitesse

    • Le gain Kv permet d'injecter dans la boucle l'image de la vitesse théorique. Il permet donc, une fois réglé, d'obtenir une erreur de poursuite nulle à vitesse constante. Un gain trop faible entraîne une erreur de poursuite positive (axe en retard) tandis qu'un gain trop for provoque une erreur de poursuite négative (axe en avance).

Le paramétrage de la cinématique consiste à saisir les paramètres Motion de l'axe en fonction de la mécanique présente sur la machine. Par la suite, les informations de position seront directement dans les unités de la machine et seront automatiquement converti avant d'être appliqué sur les moteurs.

Si par la suite on souhaite régler un paramètre en temps réel, on peut passer en ligne sur le MPC et agir dessus.

Il est également possible de modifier, par programme, les paramètres en utilisant les fonctions READPARAM et WRITEPARAM à l'intérieur d'une tâche.


Unité utilisateur

En fonction de l'application, de la mécanique (axe linéaire, rotatif), il est d'intéressant de pouvoir affecter à chaque axe une unité utilisateur représentative : mm, point (point codeur * 4), degrés, radian, pouce, tour, unité quelconque...

En fait, l'unité est utilisée uniquement sur les écrans du Motion Studio afin d'y apporter un confort d'utilisation et de compréhension.

Par exemple, si le choix de l'unité est «mm», dans l'écran "Principal" du paramétrage de l'axe dans l'onglet Motion, la vitesse sera exprimée en mm/s, les accélérations et décélérations en mm/s²...

Exemple 1 : Axe fini

Moteur en bout de vis à bille au pas de 5mm. Unités = mm, Rin = 1, Rout = 1, Distance par tour = 5.000, Modulo non activé

Exemple 2 : Axe infini

Moteur avec réducteur de 10. En sortie de réducteur, tourelle 360°, Unités = degrés, Rin = 10, Rout = 1, Distance par tour = 360.000, modulo activé avec une valeur de 360.000


Profil de vitesse

Une trajectoire en positionnement intègre les phases d'accélération, de vitesse plateau, de décélération.

Les champs contenus dans la configuration du profil de l'axe dans l'onglet Motion permettent de donner des valeurs par défaut à ces différentes phases.

Les valeurs sont prises en compte à chaque démarrage du MPC, elles sont également utilisées par l'outil Motion et par les fonctions ACC%, DEC%, VEL%.

Rentrez dans le champ «Vitesse» (paramètre associé _IMD_PROFILE_VELOCITY), la vitesse par défaut en unité/s.

Rentrez dans les champs «Accélération» (paramètre associé _IMD_PROFILE_ACCELERATION) et «Décélération» (paramètre associé _IMD_PROFILE_DECELERATION), l'accélération et la décélération par défaut en unité/s2.

Si l'on désire modifier ces phases à l'intérieur d'une tâche, utilisez les fonctions ACC, DEC, VEL, ACC%, DEC%, VEL%.

La fonction VEL_S permet de lire la vitesse de l'axe.

Elles sont effectives à tout moment : axe en mouvement ou à l'arrêt.

Les phases d'accélération/décélération peuvent être linéaires ou sinus (paramètre associé _IMD_GENERATEUR_SINUS).

Dans le cas où le sinus a été choisi, un coefficient permet d'intégrer une portion linéaire dans le sinus.

L'accélération sinus est en cours de développement et non disponible sur cette version.

Par exemple :

Remarque

La décélération urgente (paramètre associé _IMD_PROFILE_DECELERATION_URG) est utilisée pour arrêter le mouvement lorsqu'on utilise les entrées de Fin de course ou en cas d'erreur entraînant un stop urgent.


Prise d'origine

Description :

La Prise d'origine permet au système de déterminer l'origine de l'axe, celle-ci étant perdue à chaque coupure d'alimentation.

La prise d'origine machine (P.O.M) permet de référencer la position moteur par rapport à une position de la mécanique.

Différents types de POM sont disponibles : immédiat, sur capteur, avec dégagement.

Un cycle de POM force le compteur de position moteur à une valeur de référence.

Un home prend en compte :

Ä Le type de prise d'origine de l'axe

Ä Le choix de l'entrée POM (IMD_HOME_INPUT)

Ä Le zéro programme de l'axe (IMD_HOME_ZEROP)

Ä La vitesse de prise d'origine (IMD_HOME_VELOCITY)

Ä L'accélération et la décélération en cours

Un home sur l'auxiliaire prend en compte :

Ä Le type de prise d'origine de l'auxiliaire

Ä Le choix de l'entrée POM (IMD_HOME_INPUT)

Ä Le zéro programme de l'auxiliaire (IMD_AUX_ZEROP)

Choix de l'entrée utilisée pour la POM :

Ä 0 : Utilisation de l'entrée dédiée (E4) de l'IMD

Ä 1-32 : Utilisation d'une entrée locale du MPC

Le zéro programme :

Lorsque l'axe a rencontré sa position d'origine, il remet son compteur à 0 et s'arrête en se repositionnant sur 0. Cette position correspond au zéro machine. Si l'on souhaite travailler dans un autre repère à partir du programme, il suffit de rentrez une valeur dans le champ «Zéro programme». Par exemple :

Fonctions de prise d'origne :

HOME(Axe,type)

Lance une prise d'origne sur un Axe.

HOMEREQUEST_S(Axe)

Indique l'état de la demande de prise d'origine

HOME_S(Axe)

Indique l'état de la prise d'origine

HOMECANCEL(Axe)

Arrête un home sur un Axe.

CLEAR(Axe)

Met la position d'un axe à la valeur - zéro programme

HOMEAUX(Axe,type)

Lance un home sur une position auxiliaire.

HOMEAUXREQUEST(Axe)

Indique l'état de la demande de prise d'origine sur l'auxiliaire

HOMEAUX_S(Axe)

Indique l'état de la prise d'origine sur l'auxiliaire

HOMEAUXCANCEL(Axe)

Arrête un home sur une position auxiliaire.

CLEARAUX(Axe)

Met la position auxiliaire à la valeur - zéro programme

Les types pour laxe:

Type 0 : immédiate :

Le compteur de position est forcé à la valeur de référence de façon immédiate.

Exemple : Référence = 100 dans la fenêtre de saisie

HOME (0)  position moteur = 100

Type 1 : sur TOP Z :

Le moteur n'effectue aucun déplacement mais sa position est recalculée par rapport au Top Z moteur et à la valeur de référence. On obtient une position se situant entre +/- ½ tour ou référence +/- ½ tour moteur.

Type 2 : Sur capteur, en sens +, sans dégagement

Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 3 : Sur capteur, en sens +, avec dégagement

Si l4entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.

Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME pour forcer la position à la valeur de référence et le moteur s'arrête à cette position.

Type 4 : Sur capteur, en sens -, sans dégagement

Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 5 : Sur capteur, en sens -, avec dégagement

Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.

Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME pour forcer la position à la valeur de référence et le moteur s'arrête à cette position.

Type 6 : Sur capteur et TOP Z, en sens +, sans dégagement

Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 7 : Sur capteur et TOP Z, en sens +, avec dégagement

Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens - pour se dégager du capteur HOME.

Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 8 : Sur capteur et TOP Z, en sens -, sans dégagement

Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 9 : Sur capteur et TOP Z, en sens -, avec dégagement

Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.

Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.

La position est alors forcée à la valeur de référence et le moteur s'arrête sur cette position.

Type 10 : Initialise la position de l'axe avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

Type 11 : Remise à 0 de l'erreur de poursuite (utile pour des applications en couple limité)

Les types pour l'auxiliaire

Type 0 : Immédiate - l'auxiliaire revient à sa valeur "Zéro Programme"

Type 1 : Sur Top Z (la fonction attend le top Z sur l'entrée auxiliaire)

Type 2 : Sur capteur (la fonction attend un front montant sur le capteur HOME)

Type 3 : Sur capteur et Top Z (la fonction attend un niveau haut sur le capteur HOME et un top Z sur le codeur auxiliaire)

Type 4 : Initialise la position de l'auxiliaire avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

Remarque

Le paramètre de position de prise d'origine (_IMD_HOME_ZEROP) est pris en compte en permanence.

Le paramètre de position de prise d'origine sur l'auxiliaire (_IMD_AUX_ZEROP) est pris en compte en permanence.

Un AXIS OFF arrête une prise d'origine

La fonction HOME ne modifient pas la vitesse courante de l'axe, ex :

WRITEPARAMR(AXE_Y, _IMD_HOME_ZEROP, 1.0) ;

VEL(Axe_Y, 5.0);

MOVA(Axe_Y, 1.0); (*va en 1 avec une vitesse de 5*)

HOME(Axe_Y, 3); (*prise d'origine sur capteur avec dégagement, le dégagement a pour vitesse 1*)

STTA(Axe_Y, 10.0); (*va en 10 avec une vitesse de 5*)

En cas de problème sur un HOME, HOMEAUX, CLEAR, CLEARAUX (erreur de poursuite, désasservissement ou tout ce qui peut arrêter le mouvement), la fonction est alors annulée et HOME_S=0.


Contrôle

Erreur de poursuite maxi

Dès qu'un axe passe en mode asservi, il est contrôlé à tout moment : à l'arrêt, en mouvement.

Si la différence entre sa position théorique calculée et sa position réelle donnée par le retour codeur est supérieure à l'erreur de poursuite maxi, le système passe tous les axes servo en mode non asservi et ouvre le contact de chien de garde (sauf si utilisation de la fonction (SECURITY).

Le réglage de cette valeur est très importante : une valeur trop petite entraîne des arrêts intempestifs sur les axes, une valeur trop grande influe sur la sécurité des organes électriques et mécaniques.

Rentrez dans le champ «Erreur de poursuite maxi » du MPC avec la valeur adéquate.

Fenêtre de position

Lorsque l'on envoie un axe à une position, la MPC considère que le mouvement est terminé quand le profil théorique de la trajectoire est exécuté et que la position réelle est comprise entre +/- la fenêtre de position. Par exemple, sur une machine de perçage où l'on recherche une précision de +/- 0.1mm, on réglera la fenêtre à cette valeur.

Rentrez dans le champ «Fenêtre de position » du Motion Studio la valeur de précision recherchée.

Butées

Sur un axe à course limité, il est possible de déclarer des fins de course mini et maxi. Si le système détecte qu'une entrée de fin de course est activée alors il arrête et interdit tout mouvement dans le sens du fin de course.

Le dégagement de l'axe se fait dans le sens inverse

Il est possible d'utiliser les entrées du MPC ou les entrées fin de course du variateur pour réaliser cette fonction.

E/S de sécurités

  • La fonction "E1 : Entrée autorisation" permet de verrouiller la fonction AXIS (Axe, 1).

Si l'entrée autorisation passe à 0 alors l'axe est désasservi et tout demande d'asservissement est refusée (AXIS_S reste à 0).

Si l'entrée autorisation est à 1 les demandes d'asservissement sont autorisés.

Lors d'un asservissement, le processus de validation suit les étapes suivante et s'arrête dès la présence d'une Annulation ou d'une Erreur :

Etape | Condition | E1 : aucune | E1 : Autorisation | E1 : Autorisation sans erreur | E1 : Mode MCS
1 | L’entrée E1 est à 0 |  | Annulation (*) | Annulation (*) |
2 | Défaut paramètre dans le variateur (E09) | Annulation (*) | Annulation (*) | Annulation (*) | Annulation (*)
3 | Défaut modèle de variateur (E10) | Annulation (*) | Annulation (*) | Annulation (*) | Annulation (*)
4 | Le paramètre "Utiliser la décélération urgente" est actif et une décélération est en cours | Annulation (*) | Annulation (*) | Annulation (*) | Annulation (*)
5 | Puissance non présente ou depuis mois de 100 ms | Erreur E02 | Erreur E02 | Erreur E02 | Erreur E02
6 | Le variateur exécute une fonction spéciale telle que : Auto- tuning ou re-calage de l'excitation résolveur après une rupture de liaison. | Annulation (*) | Annulation (*) | Annulation (*) | Annulation (*)
7 | Le SinCos est utilisé mais aucune information absolue n'as été reçue. | Erreur E08 | Erreur E08 | Erreur E08 | Erreur E08
8 | Un défaut est encore présent sur le variateur | Erreur Exx | Erreur Exx | Erreur Exx | Erreur Exx
9 | Le défaut E21 (entrée validation non active) est présente. Ce défaut doit être acquité à l'aide de CLEARAXISFAULT | Erreur E21 | Erreur E21 | Erreur E21 | Erreur E21
10 | Le frein moteur est en cours de décollage (TOn) |  |  |  |
11 |  | Ok | Ok | Ok | Ok

(*) La Led "Validation refusée" de l'outil Motion est allumée

Pendant que l'axe est asservi il peut arriver l'un ou l'autre des événements :

Evénement | E1 : aucune | E1 : Autorisation | E1 : Autorisation sans erreur | E1 : Mode MCS
L’entrée E1 est à 0 |  | Erreur E21 | AXIS OFF | Puissance coupée
L’entrée E1 est à 1 |  |  |  | Puissance rétablie

Lors d'un dés-asservissement, suite à une erreur ou à un AXIS OFF, le processus de dé-validation suit les étapes suivante :

Etape | Condition | E1 : quelque soit le mode
1 |  | AXISREQUEST_S(<Axe>)=1 et AXIS_S(<Axe>)=1
2 | Si le paramètre "Utiliser la décélération urgente" est actif, la décélération s'effectue |
3 |  | AXISREQUEST_S(<Axe>)=1 et AXIS_S(<Axe>)=0
4 | Temporisation TOff du frein moteur |
5 |  | AXISREQUEST_S(<Axe>)=0 et AXIS_S(<Axe>)=0

  • La fonction "Sortie état variateur" permet d'avoir une sortie image de l'état du variateur, c'est à dire qu'en cas de défaut du variateur, la sortie passe à 0.Le défaut E21 "entrée validation non active" n'a pas d'influence sur cette sortie.

  • La fonction "Activation frein moteur" permet de commander le frein parking du moteur, la sortie correspond à l'image de AXIS_S en incluent les temporisations de mise en fonction et d'arrêt (TOn et TOff).

Fonction Entrée E1 : aucune

Pendant Ton :

    • Tous les mouvements sont ignorés

    • Un AXIS ON est ignoré

    • Un AXIS OFF est pris en compte et dés-asservit l’axe (abrège Ton, recolle le frein et exécute TOff)

Pendant TOff :

    • Tous les mouvements sont ignorés,

    • Un AXIS ON est pris en compte (abrège TOff, décolle le frein et exécute Ton)

    • Un AXIS OFF est ignoré

Fonction Entrée E1 : Validation ou Validation retardée

Pendant Ton :

    • Tous les mouvements sont ignorés

    • E1 à 0 est pris en compte et dés-asservit l’axe (abrège Ton, recolle le frein et exécute TOff)

Pendant TOff :

    • Tous les mouvements sont ignorés,

    • Un front montant sur E1 est pris en compte (abrège TOff, décolle le frein et exécute Ton)

Fonction Entrée E1 : Validation + iDPL

Pendant Ton :

    • Tous les mouvements sont ignorés

    • Un AXIS OFF est pris en compte et dés-asservit l’axe (abrège Ton, recolle le frein et exécute TOff)

    • Un état bas sur E1 dés-asservit l’axe (abrège Ton, recolle le frein et exécute TOff)

Pendant TOff :

    • Tous les mouvements sont ignorés

    • Un AXIS ON ou un front montant sur E1 est ignoré. (abrège TOff, décolle le frein et exécute Ton)

Les erreurs suivantes désactivent immédiatement le variateur SANS passer par la gestion du frein (la puissance est coupée immédiatement).

  • E01 : Sur tension

  • E02 : Sous tension

  • E03 : I²t

  • E04 : Sur courant

  • E05 : Court-circuit

  • E15 : Sur vitesse

  • E16 : Résolveur saturé

Les autre erreurs entraînent un AXIS OFF passant par la phase de dés-activation du frein.


Auxiliaire

En fonction de l'application, de la mécanique (axe linéaire, rotatif), il est d'intéressant de pouvoir affecter à l'auxiliaire de chaque axe une unité utilisateur représentative : mm, point (point codeur * 4), degrés, radian, pouce, tour, unité quelconque...

En fait, l'unité est utilisée uniquement sur les écrans du Motion Studio afin d'y apporter un confort d'utilisation et de compréhension.


Déclaration d'un axe en mode virtuel

Déclaration d'un axe en mode simulation

Il est possible de configurer des axes en mode simulation. Dans ce mode, le MPC simulera les mouvements de façon interne et ainsi toute commande envoyée sera exécutée virtuellement.

Ce mode est intéressant lors de la phase développement du programme : on peut tester la globalité de l'application sans avoir les variateurs et moteurs connectés.

Pour cela, il faut :

  1. Passer en mode hors-ligne

  2. Passer en mode avancé à partir du menu Options, rubrique Mode.

  3. Ouvrir la liste des périphériques EtherCAT en double-cliquant sur Périphériques EtherCAT dans l'onglet Configuration

  4. Cocher la case Simul pour les axes concernés

  5. Sauvegarder le projet

  6. Envoyer la configuration


Déclaration d'un axe virtuel

Il est possible de déclarer un maître virtuel afin de synchroniser des axes. Un axe virtuel n'utilise pas de ressource sur le bus EtherCAT.

Pour déclarer un axe virtuel, voir la rubrique Ajout d'un axe virtuel.


Mouvements absolues

Départ de mouvement : STTA

Pour lancer un mouvement vers une position absolue et ne pas attendre sa fin pour poursuivre l'exécution de la tâche, on doit utiliser STTA.

Cette fonction est très utile si la vitesse ou la position à atteindre doit changer en cours de mouvement.

Avec cette fonction, l'erreur absolue est minimale.

Cette fonction est non bloquante pour la tâche (excepté si le buffer de mouvements est plein).

Elle utilise les valeurs courantes d'accélération, de décélération et de vitesse.

La syntaxe est :

STTA (<Axe>, <Position>)

Par exemple :

VELP (X, 100.0); (* Vitesse normale *)

STTA (X, 2000.0); (* Start absolu en position 2000 *)

WAIT (POS_S(X) >200.0); (* Attente position 200 *)

OUTP (A1, 1); (* Activation d'une sortie *)

WAIT (POS_S(X) >700.0); (* Attente position 700 *)

OUTP (A1, 0); (* Désactivation de la sortie *)

WAIT (NOT MOVE_S (X)); (* Attente fin de mouvement *)

Dans cet exemple, pendant le mouvement, on peut changer des sorties car l'exécution n'est pas interrompue.

Si la fonction MERGE est activée et que l'on charge plusieurs STTA dans le MPC, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Si l'axe est modulo, un lancement à une position sera effectué dans le sens positif si la valeur demandée est positive, sens négatif dans le sens contraire. Par exemple :

Axe modulo 360°

Axe en position initiale à 90°

STTA(X, -10.0); (* déplacement dans le sens - d'une distance de 80° *)

WAIT NOT MOVE_S(X);

STTA(X, 350.0); (* déplacement dans le sens + d'une distance de 340° *)

WAIT NOT MOVE_S(X);

STTA(X, 20.0); (* déplacement dans le sens + d'une distance de 30° *)

WAIT NOT MOVE_S(X);

Mouvement : MOVA

La fonction MOVA envoie un axe à une position absolue. Elle utilise les valeurs courantes d'accélération, de décélération et de vitesse. La syntaxe est :

MOVA (<Axe>, <Position>)

Cette fonction envoie <Axe> à la position absolue dont la valeur est <Position>. Le programme attend la fin du mouvement avant de continuer. L'erreur de positionnement absolue est minimale.

Par exemple :

MOVA(X, 100.0);

Percage (Diametre);

MOVA(X, 0.0);

La fonction MOVA est bloquante pour la tâche tant que le mouvement n'est pas terminé (condition MOVE_S (Axe)=0.0).

MOVA(X, 100.0);

;est équivalent à :

STTA (X, 100.0);

WAIT (NOT MOVE_S(X));

Pour obtenir une précision relative accrue on peut demander un mouvement absolu utilisant la position courante :

MOVA(X, POS_S(X) +100.0); (* Déplacement relatif avec précision relative *)

Si l'axe est modulo, le mouvement sera effectué dans le sens positif si la valeur demandée est positive, sens négatif dans le sens contraire. Par exemple :

Axe modulo 360°

Axe en position initiale à 90°

MOVA(X, -10.0); (* déplacement dans le sens - d'une distance de 80° *)

MOVA(X, 350.0); (* déplacement dans le sens+ d'une distance de 340° *)

MOVA(X, 20.0); (* déplacement dans le sens+ d'une distance de 30° *)

Trajectoire : TRAJA

La fonction Trajectoire est conçue pour simplifier la définition de mouvements complexes.

Pour faire un mouvement à une vitesse spécifique, une accélération ou une décélération donnée, ces paramètres doivent être précisés avant de lancer le mouvement.

Syntaxe de la fonction TRAJA :

TRAJA (<Axe>, <Positon>, <Vitesse>, <Accélération>, <Décélération>)

Par exemple :

TRAJA(X, 500.0, 1000.0, 100.0, 100.0) ;

Cet exemple est équivalent à :

VEL(X, 1000.0);

ACC(X, 100.0);

DEC(X, 100.0);

STTA(X, 500.0);

La fonction TRAJA n'est pas bloquante pour la tâche tant que tous les mouvements ne sont pas terminés.

Si la fonction MERGE est activée et que l'on charge plusieurs TRAJ pour un axe, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Par exemple :

MERGE(X, 1);

TRAJA(X, 500.0, 1000.0, 100.0, 100.0);

TRAJA(X, 1000.0, 200.0, 100.0, 100.0); (* passage en petite vitesse à la position 500 *)


Mouvements relatifs

Départ de mouvement : STTR

Pour lancer un mouvement vers une position relative et ne pas attendre sa fin pour poursuivre l'exécution de la tâche, on doit utiliser STTR. Cette fonction est très utile si la vitesse ou la position à atteindre doit changer en cours de mouvement. Avec cette fonction, l'erreur absolue est minimale.

Cette fonction est non bloquante pour la tâche (excepté si le buffer de mouvements est plein).

Elle utilise les valeurs courantes d'accélération, de décélération et de vitesse. La syntaxe est :

STTR (<Axe>, <Distance>)

Par exemple :

VELP(X, 100.0); (* Vitesse rapide *)

Position:=POS_S(X);

STTR(X, 2000.0); (* Start relatif en position 2000 *)

WAIT ((POS_S(X)-Position) >100.0); (* Attente position +100 *)

VELP(X, 10.0); (* Vitesse lente *)

WAIT (NOT (MOVE_S(X))); (* Attente fin de mouvement *)

Dans cet exemple, pendant un mouvement, la vitesse peut être modifiée car l'exécution du programme n'est pas arrêtée.

Si la fonction MERGE est activée et que l'on charge plusieurs STTR pour un axe, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Mouvement : MOVR

La fonction MOVR envoie un axe à une position relative. Elle utilise les valeurs courantes d'accélération, de décélération et de vitesse. La syntaxe est :

MOVR (<Axe>, <Distance>)

Cette fonction envoie <Axe> à une valeur relative <Distance>. Le programme attend la fin du mouvement avant de continuer. L'erreur de positionnement absolue est minimale.

Par exemple :

FOR I :=1 To 10 DO

 MOVR(X, 100.0);

 Percage (Diametre);

END_FOR;

La fonction MOVR est bloquante pour la tâche tant que le mouvement n'est pas terminé (condition MOVE_S (Axe)=0).

MOVR(X, 100.0);

; est équivalent à

STTR (X, 100.0);

WAIT (NOT (MOVE_S(X)));

Trajectoire : TRAJR

La fonction Trajectoire est conçue pour simplifier la définition de mouvements complexes.

Pour faire un mouvement à une vitesse spécifique, une accélération ou une décélération donnée, ces paramètres doivent être précisés avant de lancer le mouvement.

Syntaxe de la fonction TRAJR :

TRAJR (<Axe>, <Positon>, <Vitesse>, <Accélération>, <Décélération>)

Par exemple :

TRAJR(X, 500.0, 1000.0, 100.0, 100.0) ;

Cet exemple est équivalent à :

VEL(X, 1000.0);

ACC(X, 100.0);

DEC(X, 100.0);

STTR(X, 500.0);

La fonction TRAJR n'est pas bloquante pour la tâche tant que tous les mouvements ne sont pas terminés.

Si la fonction MERGE est activée et que l'on charge plusieurs TRAJ pour un axe, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Par exemple :

MERGE(X, 1);

TRAJR(X, 500.0, 1000.0, 100.0, 100.0);

TRAJR(X, 1000.0, 200.0, 100.0, 100.0); (* passage en petite vitesse à la position 1500 *)


Mouvements infinis

Mouvement : STTIP

Pour lancer un mouvement continu positif, il faut utiliser la fonction STTIP. L'axe concerné se déplace à sa vitesse courante.

Cette fonction est non bloquante pour la tâche (excepté si le buffer de mouvements est plein).

La fonction STOP ou SSTOP est nécessaire pour arrêter un mouvement continu.

Syntaxe :

STTIP (<Axe>)

Exemple :

WAIT (INP (BoutonPlus) =1) ;

STTIP(X);

WAIT (INP (BoutonPlus) =0);

STOP(X);

Mouvement : STTIM

Pour lancer un mouvement continu négatif, il faut utiliser la fonction STTIM. L'axe concerné se déplace à sa vitesse courante.

Cette fonction est non bloquante pour la tâche (excepté si le buffer de mouvements est plein).

La fonction STOP ou SSTOP est nécessaire pour arrêter un mouvement continu.

Syntaxe :

STTIM (<Axe>)

Exemple :

WAIT (INP (BoutonMoins) =1) ;

STTIM(X);

WAIT (INP (BoutonMoins) =0);

STOP(X);

Trajectoire : TRAJIP

La fonction Trajectoire est conçue pour simplifier la définition de mouvements complexes.

Pour faire un mouvement infini positif à une vitesse spécifique et avec une accélération donnée, ces paramètres doivent être précisés avant de lancer le mouvement.

Syntaxe de la fonction TRAJIP :

TRAJIP (<Axe>, <Vitesse>, <Accélération>)

Par exemple :

TRAJP(X, 1000.0, 100.0);

Cet exemple est équivalent à :

VEL(X, 1000.0);

ACC(X, 100.0);

STTIP(X);

La fonction TRAJIP n'est pas bloquante pour la tâche tant que tous les mouvements ne sont pas terminés.

Si la fonction MERGE est activée et que l'on charge plusieurs TRAJ pour un axe, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Par exemple :

MERGE(X, 1);

TRAJR(X, 500.0, 1000.0, 100.0, 100.0);

TRAJIP(X, 200.0, 100.0); (* passage en petite vitesse à la position 500 *)

Trajectoire : TRAJIM

La fonction Trajectoire est conçue pour simplifier la définition de mouvements complexes.

Pour faire un mouvement infini négatif à une vitesse spécifique et avec une accélération donnée, ces paramètres doivent être précisés avant de lancer le mouvement.

Syntaxe de la fonction TRAJIM :

TRAJIM (<Axe>, <Vitesse>, <Accélération>)

Par exemple :

TRAJIM(X, 1000.0, 100.0);

Cet exemple est équivalent à :

VEL(X, 1000.0);

ACC(X, 100.0);

STTIM(X);

La fonction TRAJIM n'est pas bloquante pour la tâche tant que tous les mouvements ne sont pas terminés.

Si la fonction MERGE est activée et que l'on charge plusieurs TRAJ pour un axe, les mouvements seront exécutés les uns après les autres sans passer par une vitesse nulle.

Par exemple :

MERGE(X, 1);

TRAJR(X, 500.0, 1000.0, 100.0, 100.0);

TRAJIM(X, 200.0, 100.0); (* passage en petite vitesse à la position 500 *)


Arrêt d'un mouvement

Pour arrêter un mouvement, il faut utiliser les fonctions STOP ou SSTOP. Elles arrêtent l'axe spécifié via leur décélération programmée et elles vident le buffer de mouvement de tous les mouvements de l'axe.

La fonction STOP est bloquante pour la tâche tant que le mouvement n'est pas terminé (condition MOVE_S(Axe)=0 ) alors que SSTOP n'est pas bloquante.

Syntaxe :

STOP (<Axe>)

Exemple : déplacement jusqu'à un capteur.

STTIP(X);

WAIT (INP (Capteur)=1);

STOP(X);

La fonction AXIS (Axe)=0 arrête aussi le mouvement mais sans aucun contrôle car l'asservissement est inhibé.


Mouvements déclenchés

Introduction

Les fonctions TRIGGER permettent de lancer un mouvement sur un événement :

Ä Une position du maître

Ä Un changement d'état d'une entrée

Ä Un changement d'état d'une entrée dans une fenêtre de position

Description

La fonction TRIGGER peut être associée à 3 types de mouvements et pour chaque groupe, on peut avoir 1 trigger de mouvement en attente :

Groupe 1: MOVA, MOVR, STTA, STTR, STTIM, STTIP, TRAJA, TRAJR, TRAJIM, TRAJIP, MOVS, GEARBOX, STARTCAM

Un trigger sur une fonction du Groupe 1 est pris en compte lorsque le mouvement précédent est terminé :

Groupe 2: STOP, SSTOP, POS, GEARBOXRATIO, STOPS, BREAKCAM

Un trigger sur une fonction du Groupe 2 est pris en compte dès qu'il est chargé :

Groupe 3: ICORRECTION

Un trigger sur une fonction du Groupe 3 est pris en compte dès qu'elle est chargé (cas particulier du ICORRECTION, en réalité dès que le ICORRECTION précédent est terminé, mais il n'y a jamais de ICORRECTION en attente)

Liste des fonctions

TRIGGERP | Cette fonction indique que le prochain mouvement sera déclenché sur le passage du maître à une position.
TRIGGERI | Cette fonction indique que le prochain mouvement sera déclenché sur changement d'état d'une entrée.
TRIGGERF | Cette fonction indique que le prochain mouvement sera déclenché sur changement d'état d'une entrée et dans une fenêtre de position.
TRIGGERAXISSET | Force le démarrage d'un mouvement qui attendait un trigger
TRIGGERAXIS_S | Retourne l'état d'un trigger sur un axe

Exemple

(* Déplacement de l'axe X sur front montant de l'entrée 4 du MPC lorsque l'axe Y est entre 10 et 20 *)

TRIGGERF (Mpc_4, 1, Axe_Y, SRC_AXE, 10.0, 20.0, 1);

MOVR (Axe_X, 100.0);

...

(* Déplacement de l'axe X sur front montant de l'entrée 4 du MPC *)

TRIGGERI (Mpc_4, 1);

MOVR (Axe_X, 100.0);

...

(* Déplacement de l'axe X à partir de la position Y= 10 en sens positif *)

TRIGGERP (Axe_Y, SRC_AXE, 10.0, 1);

MOVR (Axe_X, 100.0);

...


Arbre électrique

Introduction

Les fonctions GEARBOX permettent de réaliser un arbre électrique entre un axe maître et un axe esclave.

Liste des fonctions

GEARBOX | démarre un arbre électrique entre un axe maître et un axe esclave.
GEARBOX2 | démarre un arbre électrique entre un axe maître et un axe esclave.
GEARBOXRATIO | modifie le rapport de réduction d'une liaison arbre électrique.
GEARBOXRATIO_S | retourne l'état de changement de ratio sur un axe.

Exemple

(* Maitre : 360° par tour, modulo de 360 *)

(* Esclave : 25.4 mm/tour *)

(* Un ratio de 25.4 (num)/360 (den) correspond à : 1 tour esclave pour un tour maître *)

GEARBOX (Axe_X, Axe_Y, SRC_AXE, 25.4, 360.0, 1, 0.0) ;

...

If GEARBOXRATIO_S(Axe_X)=1 Then

 (* il faut 2 tour sur le maître pour 1 tour sur l'esclave *)

 GEARBOXRATIO (Axe_X, 25.4, 720.0, 0.0);

End_If;

...


Mouvements synchronisés

Formules générales

Liste des fonctions

MOVS | effectue une synchronisation entre un axe esclave et un maître.
STOPS | arrête la synchronisation suivant une destination absolue sur l'esclave.
STOPS_S | indique si la position esclave donné par la fonction STOPS n'a pu être atteinte.

Applications

La fonction MOVS accepte les combinaisons de paramètres suivantes :

Phase de changement de vitesse

Phase de changement de vitesse + Phase plateau

Phase plateau

Phase plateau + Phase d'arrêt

Phase d'arrêt

Phase de changement de vitesse + Phase plateau + Phase d'arrêt

Phases de changement de vitesse

Vitesse initiale nulle :

Dans l'exemple précédent la phase 1 est une phase de changement de vitesse avec vitesse initiale nulle.

MOVS (dM1, dE1, dM1, 0)

Le rapport de vitesse atteint à la fin de cette phase est 2*dE1/dM1

Vitesse initiale non nulle et inférieure à la vitesse finale :

La phase 3 représente ce type de changement de vitesse.

Le rapport de vitesse initial est dE2/dM2 et le rapport final est dE4/dM4 donc : dE3 = dM3 * (dE2/dM2+dE4/dM4) / 2

MOVS (dM3, dE3, dM3, 0)

Le rapport de vitesse moyen pendant cette phase est dE3/dM3 et est supérieur au rapport de vitesse initial; on a donc une phase d'accélération.

Vitesse initiale non nulle et supérieure à la vitesse finale :

Ce type de changement de vitesse est représenté en phase 5.

Le rapport de vitesse initial est dE4/dM4 et le rapport final est dE6/dM6 donc :

dE5 = dM5 * (dE4/dM4+dE6/dM6) /2

MOVS (dM5, dE5, dM5, 0)

Le rapport de vitesse moyen pendant cette phase est dE5/dM5 et est inférieur au rapport de vitesse initial; on a donc une phase de décélération.

Phases de changement de vitesse + Phase plateau

Vitesse initiale nulle :

Dans l'exemple précédent la phase 1 est une phase de changement de vitesse avec vitesse initiale nulle.

dE10=dE1+dE2=1/2*dM1*dE2/dM2+dE2

dM10=dM1+dM2

MOVS (dM10, dE10, dM1, 0)

Vitesse initiale non nulle et inférieure à la vitesse finale :

La phase 3 représente ce type de changement de vitesse.

Le rapport de vitesse initial est dE2/dM2 et le rapport final est dE4/dM4 donc :

dE30=dE3+dE4=dM3*(dE2/dM2+dE4/dM4)/2+dE4

dM30=dM3+dM4

MOVS (dM30, dE30, dM3, 0)

Le rapport de vitesse moyen pendant la phase 3 est dE3/dM3 et est supérieur au rapport de vitesse initial; on a donc une phase d'accélération.

Vitesse initiale non nulle et supérieure à la vitesse finale :

Ce type de changement de vitesse est représenté en phase 5.

Le rapport de vitesse initial est dE4/dM4 et le rapport final est dE6/dM6 donc :

dE50=dE5+dE6=dM5*(dE4/dM4+dE6/dM6)/2+dE6

dM50=dM5+dM6

MOVS (dM50, dE50, dM5, 0)

Le rapport de vitesse moyen pendant la phase 5 est dE5/dM5 et est inférieur au rapport de vitesse initial; on a donc une phase de décélération.

Phase plateau

Les phases 2, 4 et 6 peuvent être décrites directement :

MOVS (dM2, dE2, 0, 0)

MOVS (dM4, dE4, 0, 0)

MOVS (dM6, dE6, 0, 0)

Phase plateau + Phase d'arrêt

Dans les phases 6 et 7 on réalise une phase plateau suivi d'une phase d'arrêt.

dE70=dE6+dE7=dE6+1/2*dM7*dE6/dM6

dM70=dM6+dM7

MOVS (dM70, dE70, 0, dM7)

Phase d'arrêt

La phase d'arrêt 7 est décrite directement :

MOVS (dM7, dE7, 0, dM7)

Le rapport de vitesse avant cette phase était 2*dE7/dM7

Phases de changement de vitesse + Phase plateau + Phase d'arrêt

Dans l'exemple ci-contre on a :

dE1=1/2*dM1*dE2/dM2

dE3=1/2*dM3*dE2/dM2

dE=dE1+dE2+dE3=1/2*(dM1+dM3)*dE2/dM2

dM=dM1+dM2+dM3

MOVS (dM, dE, dM1, dM3)

Exemple

...

(* DOUBLE COUPE *)

MOVS (Axe_X, Axe_Y, SRC_AXE, DistMaitre, DistEsclave, DistMaitre, 0.0); (* Phase d'accélération *)

MOVS (Axe_X, Axe_Y, SRC_AXE, CoteMaxSynchro, CoteMaxSynchro, 0.0, 0.0); (* Phase plateau *)

MOVS (Axe_X, Axe_Y, SRC_AXE, DistMaitre, DistEsclave, 0.0, DistMaitre); (* Phase de décélération *)

MOVS (Axe_X, Axe_Y, SRC_AXE, LongueurPiece, 0.0, 0.0, 0.0); (* Phase d'arrêt de l'esclave *)

MOVS (Axe_X, Axe_Y, SRC_AXE, DistMaitre, DistEsclave, DistMaitre, 0.0); (* Phase d'accélération *)

MOVS (Axe_X, Axe_Y, SRC_AXE, CoteMaxSynchro, CoteMaxSynchro, 0.0, 0.0); (* Phase plateau *)

MOVS (Axe_X, Axe_Y, SRC_AXE, DistMaitre, DistEsclave, 0.0, DistMaitre); (* Phase de décélération *)

WAIT (ORDER_S (Axe_X) =2);

Coupe (Diametre);

WAIT (ORDER_S (Axe_X) =6);

Coupe (Diametre);

...


Came

Introduction

Définition de la came

La fonction came permet de réaliser un profil de came sur un axe esclave lié à un axe maître. Ce profil est défini par un tableau de points

Chaque point est représenté par une position de l'axe maître et une position de l'axe esclave.

La MPC exécutera entre deux points consécutifs une trajectoire calculée à partir d'un polynôme du 3ème degré.

Les valeurs données aux positions de l'axe maître à l'intérieur de la table doivent être des valeurs croissantes.

La forme de la came dépend du mode de chaque point :

Ä Ligne : trace une ligne droite qui relie le point actuel au point suivant (il y a discontinuité de la vitesse au point actuel puis la vitesse reste constante jusqu au point suivant).

Ä Auto : calcule automatique avec un polynôme en x3 utilisant le point avant, actuel et les deux suivants.

Ä Manuel : trace une courbe avec un tangente au point actuel de pente tangente maître / tangente esclave.

Came absolue ou relative

Définit à partir de quel point s'exécute le profil de CAME : en absolue la référence est 0, en relatif la référence est la position des axes au lancement du profil de came.

Exemple:

Profile de came
Maître | Esclave
0 | 5
10 | 7
20 | 30
30 | 35
40 | 30
50 | 15

  • Si la position du maître est 20 et celle de l'esclave est 30, avant le déclenchement de la came, on a les mouvements suivants pour la came absolue :

    • Came absolue
Maître | Esclave
20 | 30
30 | 35
40 | 30
50 | 15

    • Si la position du maître est 20 et celle de l'esclave est 30, avant le déclenchement de la came, on a les mouvements suivants pour la came relative :

      • Came relative
Maître | Esclave
20 | 35
30 | 37
40 | 60
50 | 65
60 | 60
70 | 45

      Came finie ou came infinie

      Une came mécanique correspond à une came électronique finie. Dans le tableau de points, la 1ère et la dernière valeur de la position de l'esclave sont confondues. Le mouvement de l'esclave sera un mouvement linéaire d'amplitude finie.

      La came électronique permet également de créer un mouvement sur l'axe esclave de type rotatif infini : la position absolue de l'esclave augmente à chaque cycle maître.

      Came finie

      Came infinie

      Attention :

      Si l'axe maître ou l'axe esclave est un axe infini, il doit être déclaré en axe modulo à partir de l'onglet Motion.

      Si la came est infinie et absolue, elle doit être déclaré sur l'intégralité du modulo du maître.

      Programmation d'une came

      Editeur graphique

      Voir "Editeur de came" dans le chapitre Logiciel Motion Studio

      Stockage des cames

      Modification d'une came

      Pour modifier une came (stockés dans la CF-CARD) il faut la transférer dans une variable de type tCamTable, il faut utiliser les fonctions suivantes:

      READCAM | lit une came de la CF-CARD vers un tableau de came
WRITECAM | enregistre un tableau de came dans la CF-CARD.

      Le type tCamTable est défini par la structure suivante :

      UDINT  Nb ;  (*nb de points dans la came, offset IEC : 2*)

      REAL   X [1024]; (*position maitre, offset IEC: 18*)

      REAL  Y [1024]; (*position esclave: 4126*)

      REAL   dX [1024]; (*tangente X: 8234*)

      REAL  dY [1024]; (*tangente Y: 12342*)

      Le choix du mode de trajectoire pour chaque point dépend des valeurs des différents membres de la structure tCameTable :

      Ä Si X (Position maître) <> dX (Tangente maître) alors on a une trajectoire de type Manuel

      Ä Si X (Position maître) = dX (Tangente maître) et dY (Tangente esclave) <> 0 alors on a une trajectoire de type ligne.

      Ä Si X (Position maître) = dX (Tangente maître) et dY (Tangente esclave) = 0 alors on a une trajectoire de type Auto.

      Chargement d'une came

      Pour utiliser une came, il faut la charger en mémoire interne :

      LOADCAM | charge une came dans le MPC depuis la CF-CARD.
LOADCAMI | charge une came dans le MPC depuis un tableau de came.

      Il est possible d'avoir jusqu'à 128 cames chargées en mémoire interne simultanément.

      Une came interne contient :

      Ä Un nombre de segments de came

      Ä Les données des segments de came, prêtes à être exécutées selon les options passées au LOADCAM

      Ä La référence sur le maître

      Ä La référence sur l'esclave

      Remarque

      Pour une came absolue, les calages absolus qui ont lieu à l'embrayage et pendant le fonctionnement (si nécessaire), agissent sur le MASTEROFFSET_S et le SLAVEOFFSET_S. Ils utilisent l'accélération définie pour le MASTEROFFSET et le SLAVEOFFSET.

      Attention, ce calage est sensible aux fonctions affectant la position de l'axe, par ex HOME, HOMEAUX, CLEAR, etc

      Absolue | Direction | Embrayage | Fin de came (si mono-coup=1) | Débrayage (si mono-coup=1)
0 | Indif. | Toujours en début de came. Si le maître va dans le sens d'un STTIP sur son axe, l'esclave va dans le sens d'un STTIP. Si le maître va dans le sens d'un STTIM sur son axe, l'esclave va dans le sens d'un STTIM. | Une fois le dernier point de la came atteint. | Si l'on revient au début, la came est réversible. (réembraye en sens inverse)
0 | + | Toujours en début de came. Si le maître va dans le sens d'un STTIP sur son axe, l'esclave va dans le sens d'un STTIP. Sinon pas d'embrayage | Une fois le dernier point de la came atteint. | Si l'on revient au début, désembraye puis réembraye
0 | - | Toujours en début de came. Si le maître va dans le sens d'un STTIM sur son axe, l'esclave va dans le sens d'un STTIP. Sinon pas d'embrayage | Une fois le dernier point de la came atteint. | Si l'on revient au début, désembraye puis réembraye
1 | Indif. | N'importe où dans la came | Aucun (nécessite un arrêt manuel : STOP / BREAKCAM) | Si l'on sort d'un côté ou l'autre de la came
1 | + | Embraye lors du passage sur le premier élément de la came | Une fois le dernier point de la came atteint. | Si l'on ressort au début de came
1 | - | Embraye lors du passage sur le dernier élément de la came | Une fois le premier point de la came atteint. | Si l'on ressort à la fin de la came

      Enchainement non réversible de came :

      Lorsque l'on démarre plusieurs cames par plusieurs STARTCAM, on ne peut revenir que jusqu'au début de la came du STARTCAM en cours d'exécution

      LOADCAM (Esclave,Maitre,SRC_AXE,1,1,Came1,0,1,0,1.0,1.0,0,0);

      LOADCAM (Esclave,Maitre,SRC_AXE,2,1,Came2,0,1,0,1.0,1.0,0,0);

      LOADCAM (Esclave,Maitre,SRC_AXE,3,1,Came3,0,1,0,1.0,1.0,0,0);

      STARTCAM (1);

      STARTCAM (2);

      STARTCAM (3);

      Enchainement réversible de came :

      Lorsque l'on démarre plusieurs cames liées, on peut revenir jusqu'au début de la came (ici dans la came 3, on peut revenir jusque dans la 1)

      LOADCAM (Esclave,Maitre,SRC_AXE,1,1,Came1,0,1,0,1.0,1.0,2,0);

      LOADCAM (Esclave,Maitre,SRC_AXE,2,1,Came2,0,1,0,1.0,1.0,3,1);

      LOADCAM (Esclave,Maitre,SRC_AXE,3,1,Came3,0,1,0,1.0,1.0,0,2);

      STARTCAM (1);

      Le calcul des profils de came tient compte de :

      Ädes points de la came calculée et de leur type (droite, manuel, auto)

      Ädu fait que la came soit mono coup ou non (chaîne les premiers points avec les derniers)

      Ädes gains maîtres et esclaves

      Le calcul des profils de came ne tient PAS compte de :

      Äles informations came suivante/came précédente. Un point en mode auto en bout de came sera systématiquement pris avec une pente nulle, assurant de facto un raccord correct entre 2 cames liées par suivant/précédent, mais n'étant pas forcément aussi optimisé que tous les points dans une seule came.

      Lancement d'une came

      STARTCAM

      démarre une came.

      Exemple 1 : came de 6 points, infinie, non mono-coup

      (* Définition du tableau dans le tableau de réel TabCam *)

      MaCame.X [1] := 0.0;

      MaCame.Y [1] := 0.0;

      MaCame.dX [1] := 0.0;

      MaCame.dY [1] := 0.0;

      MaCame.X [2] := 30.0;

      MaCame.Y [2] := 20.0;

      MaCame.dX [2] := 30.0;

      MaCame.dY [2] := 0.0;

      MaCame.X [3] := 90.0;

      MaCame.Y [3] := 76.0;

      MaCame.dX [3] := 90.0;

      MaCame.dY [3] := 0.0;

      MaCame.X [4] := 270.0;

      MaCame.Y [4] := 283.0;

      MaCame.dX [4] := 270.0;

      MaCame.dY [4] := 0.0;

      MaCame.X [5] := 330.0;

      MaCame.Y [5] := 338.0;

      MaCame.dX [5] := 330.0;

      MaCame.dY [5] := 0.0;

      MaCame.X [6] := 360.0;

      MaCame.Y [6] := 360.0;

      MaCame.dX [6] := 360.0;

      MaCame.dY [6] := 0.0;

      MaCame.Nb := 6;

      (* Chargement de la came *)

      LOADCAMI (Esclave, Maitre, SRC_AXE, 1, 1, MaCame, 0, 1, 0, 1.0, 1.0, 0, 0);

      (* Lancement de la came *)

      STARTCAM (1);

      ...

      WAIT (INP (InfoStop)); (* Attente demande d'arrêt *)

      ENDCAM (Esclave); (* Demande d'arrêt en fin du profil courant *)

      ...

      Exemple 2 : enchaînement de cames

      Soit un cycle composé de 3 cames : une came C1 de «profil d'entrée» mono-coup, une came C2 de «profil répétitif» non mono-coup, une came C3 de «profil de sortie» mono-coup.

      La came C1 est enchaînée à C2 et C2 est enchaînée à C3.

      ...

      (* Chargement de la came n°1 : 10 points, mono-coup, enchaînée sur came n°2 *)

      LOADCAM (Esclave, Maitre, SRC_AXE, 1, 0, Came1, 1, 1, 1, 1.0, 1.0, 2, 0);

      (* Chargement de la came n°2 : 76 points, non mono-coup, enchaînée sur came n°3 *)

      LOADCAM (Esclave, Maitre, SRC_AXE, 2, 0, Came2, 0, 1, 0, 1.0, 1.0, 3, 1);

      (* Chargement de la came n°3 : 6 points, mono-coup *)

      LOADCAM (Esclave, Maitre, SRC_AXE, 3, 0, Came3, 1, 1, 0, 1.0, 1.0, 0, 3);

      (* Lancement de la came n°1 => exécution de la came1 puis de la came2 *)

      STARTCAM (1);

      WAIT (CAMNUM_S (Esclave)=2); (* Attente exécution de la came2 *)

      ...

      WAIT (INP (InfoStop)=1); (* Attente demande d'arrêt *)

      ENDCAM(Esclave); (* Arrêt came2 en fin profil et enchaînement sur came3 *)

      ...

      WAIT (CAM_S (Esclave)=0); (* Attente came 3 terminée *)

      Etat de la came

      Trois fonctions permettent de connaître l'état courant d'une came :

      CAM_S | indique le numéro de came et de segment en cours d'exécution.
CAMNUM_S | indique le numéro de came en cours d'exécution.
CAMSEG_S | indique le numéro d'équation de la came en cours d'exécution.

      Attention : on peut obtenir un aléa si on lit séparément CAMNUM_S et CAMSEG_S, utiliser dans ce cas CAM_S.

      Arrêt d'une came

      ENDCAM | arrête le mouvement de l'axe <Esclave> à la fin de la came.
BREAKCAM | arrête le mouvement de synchronisation en cours et passe au suivant sans désynchronisation.
BREAKCAM_POS | retourne la position de l'axe lors du dernier BREAKCAM ou STOPS.

      Remarque :

      Le retour d'une came vers une came bouclée transforme cette dernière en came mono-coup.

      Modification de points d'une came

      CAMREADPOINT | calcule la position de l'esclave <Position Esclave> dans la came, correspondant à la position du maître <Position Maître>.
LOADCAMPOINT | modifie un point de came à la volée.

      Déphasage dynamique

      Ces déphasages sont effectuées indépendamment des mouvements du maitre et de l'esclave, leur application dépend du temps et de l'accélération donnée, ou est immédiate.

      Décalage du maître :

      Le décalage du maître a pour effet de déphaser le cycle du maître par rapport à celui de l'esclave. Dans le cas d'une came absolue rebouclée il est nécessaire de prendre en compte ce décalage pour positionner l'esclave par rapport au maître (la fonction CAMREADPOINT prend en compte ce décalage). Le décalage du maître peut se faire progressivement par l'application d'un paramètre d'accélération. Le décalage est appliqué directement si le mouvement synchro n'est pas en cours ou si l'axe n'est pas embrayé.

      MASTEROFFSET | décale dynamiquement la position du maître utilisée par la came absolue
MASTEROFFSET_S | retourne la valeur courante de l'offset maître.
ICORRECTIONA | applique les compensations à effectuer pour se situer au point ad hoc.

      Décalage de l'esclave

      Le décalage de l'esclave a pour effet de décaler les positions de l'esclave mais conserve la phase avec le cycle du maître. Il est nécessaire dans tous les cas de prendre en compte ce décalage pour positionner l'esclave par rapport au maître(la fonction CAMREADPOINT prend en compte ce décalage). Le décalage de l'esclave peut se faire progressivement par l'application d'un paramètre d'accélération. Le décalage est appliqué directement si l'axe n'est pas embrayé, ou le mouvement en cours n'est pas un mouvement synchronisé.

      SLAVEOFFSET | décale dynamiquement la position de l'esclave.
SLAVEOFFSET_S | retourne la valeur courante de l'offset esclave.
ICORRECTIONA | applique les compensations à effectuer pour se situer au point ad hoc.

      Came déclenchée sur entrée capture

      Il est possible d'exécuter des cames synchronisées en utilisant les fonctions TRIGGER


Fonction de compensation / décompensation

Introduction

Les fonctions de compensation / décompensation permettent d'effectuer un déphasage dynamique sur un axe esclave lié à un axe maître. La liaison entre les deux axes doit être de type arbre électrique (GEARBOX), synchronisation (MOVS) ou came (CAM).

Ce déphasage est un mouvement synchronisé, son application dépend donc du mouvement du maître.

Liste des fonctions

ICORRECTION | applique un mouvement de correction sur un axe esclave pendant une distance de l'axe maître.
ICORRECTION_S | retourne l'état du cycle de compensation.

Exemple

...

MOVS (Axe_X, Axe_Y, SRC_AXE, 100.0, 50.0, 0.0, 0.0);

MOVS (Axe_X, Axe_Y, SRC_AXE, 200.0, 250.0, 0.0, 0.0);

MOVS (Axe_X, Axe_Y, SRC_AXE, 60.0, 60.0, 0.0, 0.0);

(* Recalage automatique, pas de risque de perte de point suite à des rapports non finis *)

ICORRECTIONA (Axe_X, Axe_Y, SRC_AXE, 360.0, 360.0);

...


Fonction de superposition de mouvements

Introduction

La fonction ADDMOV permet de superposer sur un axe esclave ses propres mouvements avec ceux effectué par un axe maître. La liaison entre les deux axes doit être de type arbre électrique (GEARBOX), synchronisation (MOVS) ou came (CAM) ou positionnement (MOVA, MOVR, SSTA, STTR, STTIP, STTIM).

Liste des fonctions

ADDMOV | Cette fonction permet de superposer sur un axe esclave ses propres mouvements avec ceux effectué par un axe maître.
ADDSTOP | Cette fonction permet de détruire les liens de superposition de mouvements de l'axe esclave.

Exemple

HOME (Axe_Y, 0);

HOME (Axe_X, 0);

ADDMOV (Axe_X, Axe_Y, SRC_AXE); (* activation du lien de superposition *)

STTIP (Axe_Y); (* lancement axe Y => axe X se déplace également *)

...

WAIT (INP (StartCycle));

MOVR (Axe_X, StepCycle); (* superposition d'un mouvement de distance StepCycle *)

...

STOP (Axe_X);

ADDSTOP (Axe_X); (* arrêt du lien de superposition *)


Arrêt d'une liaison maître / esclave

Introduction

Pour arrêter une liaison maître / esclave, il faut utiliser les fonctions STOP, SSTOP ou STOPS sur l'axe esclave.

Les fonctions STOP et SSTOP arrêtent l'axe spécifié via la décélération courante alors que STOPS utilise une pente de décélération calculée automatiquement permettant d'attendre le point d'arrêt voulu.

Toutes ces fonctions vident le buffer des mouvements concernant l'axe esclave.

Liste des fonctions

STOP | arrête l'axe avec la décélération courante.
SSTOP | arrête l'axe avec la décélération courante (non bloquant).
STOPS | arrête l'axe et permet à l'axe esclave de décélérer pour atteindre la position <Pos.esclave>.
STOPS_S | indique si STOPS a pu sexécuter correctement

Exemple

GEARBOX (Esclave, Maitre, SRC_AXE, 25.4, 360.0, 1, 0.0); (* activation du lien maître / esclave *)

STTIP (Maitre); (* départ du maître => l'esclave suit *)

...

STOP (Maitre); (* arrêt du maître => l'esclave s'arrête *)

...

STOP (Esclave); (* arrêt de la liaison maître / esclave *)


Interpolation linéaire 2D

Interpolation linéaire

Introduction

Les fonctions STTL2D et TRAJL2D permettent d'effectuer des interpolations linéaires sur deux axes et
les fonctions STTL3D et TRAJL3D permettent d'effectuer des interpolations linéaires sur trois axes.

Liste de fonctions

INTERPOLATE2D | démarre une interpolation 2D.
STTL2D | lance un mouvement linéaire en deux dimensions.
TRAJL2D | lance un mouvement linéaire pouvant être enchaîné en deux dimensions.

INTERPOLATED3D | démarre une interpolation 3D.
STTL3D | lance un mouvement linéaire en trois dimensions.
TRAJL3D | lance un mouvement linéaire pouvant être enchaîné en trois dimensions.

Exemple

Axe_Interpo est un axe virtuel déclaré dans le projet

Axe_X et Axe_Y sont des axes déclarés dans le projet

(* Déclaration de mon interpolation Axe_Interpo selon les axes Axe_X et Axe_Y *)

INTERPOLATE2D (Axe_Interpo, Axe_X, Axe_Y);

(* Réalisation d'un rectangle

STTL2D(Interpo_2D, 100, 0.0, 1);

STTL2D(Interpo_2D, 100, 10.0, 1);

STTL2D(Interpo_2D, 0.0, 10.0, 1);

STTL2D(Interpo_2D, 0.0, 0.0, 1);


Interpolation circulaire 2D

Interpolation circulaire

Introduction

Les fonctions STTL2D et TRAJL2D permettent d'effectuer des interpolations circulaires sur deux axes et
Les fonctions STTC2D et TRAJC2D permettent d'effectuer des interpolations circulaires sur trois axes.

Liste de fonctions

INTERPOLATE2D | démarre une interpolation 2D.
STTC2D | lance un mouvement circulaire en deux dimensions.
TRAJC2D | lance un mouvement circulaire pouvant être enchaîné en deux dimensions.

INTERPOLATE3D | démarre une interpolation 3D.
STTC3D | lance un mouvement circulaire en trois dimensions.
TRAJC3D | lance un mouvement circulaire pouvant être enchaîné en trois dimensions.

Exemple

Axe_Interpo est un axe virtuel déclaré dans le projet

Axe_X et Axe_Y sont des axes déclarés dans le projet

(* Déclaration de mon interpolation Axe_Interpo selon les axes Axe_X et Axe_Y *)

INTERPOLATE2D (Axe_Interpo, Axe_X, Axe_Y);

(* Réalisation d'un cercle *)

MERGE() ;

TRAJC2D(Interpo_2D, CentreX, CentreY, RX, RY, 0, 1) ;

TRAJC2D(Interpo_2D, CentreX, CentreY, -RX, -RY, 0, 1) ;


Interpolation hélicoïdalde

Interpolation hélicoïdale

Introduction

Les fonctions STTH3D et TRAJH3D permettent d'effectuer des interpolations hélicoïdales.

Liste de fonctions

INTERPOLATE3D | démarre une interpolation 3D.
STTH3D | lance un mouvement circulaire en trois dimensions.
TRAJH3D | lance un mouvement circulaire pouvant être enchaîné en trois dimensions.

Exemple

Axe_Interpo est un axe virtuel déclaré dans le projet

Axe_X, Axe_Y et Axe_Z sont des axes déclarés dans le projet

(* Déclaration de mon interpolation Axe_Interpo selon les axes Axe_X et Axe_Y *)

INTERPOLATE3D (Axe_Interpo, Axe_X, Axe_Y, Axe_Z);

(* Réalisation d'un mouvement hélicoïdale *)

STTH3D(Interpo_3D, Xcentre, Ycentre, ZPas, Angle, Sens, Abs) ;


Accélération / Vitesse résultante

Comme en positionnement, un mouvement interpolé possède une phase d'accélération, vitesse plateau, décélération. Ces valeurs correspondent à des accélérations et vitesse résultantes des axes interpolés.

L'instruction ACC (<Axe_Interpo>, <Expression>) permet d'affecter une valeur d'accélération résultante. Elle est prise en compte à tout moment.

L'instruction DEC (<Axe_Interpo>, <Expression>) permet d'affecter une valeur de décélération résultante. Elle est prise en compte à tout moment.

L'instruction VEL (<Axe_Interpo>, <Expression>) permet d'affecter une valeur de vitesse résultante. Elle est prise en compte à tout moment.

Si l'instruction MERGE (< Axe_Interpo >,1) est exécuté et que l'on charge plusieurs TRAJL, TRAJC dans le buffer de la carte d'axe, la phase d'accélération sera effective jusqu'à ce que la vitesse soit atteinte et ensuite les mouvements étant enchaînés, on passera d'un mouvement à l'autre sans passer par une vitesse nulle. La phase de décélération s'effectuera sur le ou les derniers mouvements.

' Attention : sur des pièces qui possèdent des arcs de cercle et sur lesquelles on travaille en mouvements enchaînés (MERGE(Axe_Inter,1), l'accélération réelle peut devenir très importante :

Accél (t) = - (Vi² / r) * Cos (Téta i + ((Vi / r) * t))

Accél. Maxi = - (Vi² / r)

Avec Vi = vitesse initiale avant l'arc de cercle en m / s

r = rayon de l'arc en m

Accél en m / s²

Accél maxi = - (0.5² / 0.01) = -25 m/s²


Arrêt d'un mouvement d'interpolation 2D

Arrêt d'un mouvement d'interpolation

Pour arrêter un mouvement interpolé en cours de trajectoire, il faut utiliser l'instruction STOP (<Axe_Inter >). Les axes s'arrêtent en suivant la trajectoire interpolée via la pente de décélération donnée par l'instruction ACC (<Axe_Inter>). Le buffer de mouvement est vidé : on ne pourra donc pas faire de reprise de trajectoire.

L'instruction est bloquante pour la tâche tant que le mouvement n'est pas terminé (condition MOVE_S(Axe_Inter)=0). Par exemple :

VEL (Axe_Interpo, 300.0) ; (* Vitesse interpolée *)
ACC (Axe_Interpo, 2000.0) ; (* Accélération interpolée *)
DEC (Axe_Interpo, 2000.0) ;
INTERPOLATE2D(Axe_Interpo, X, Y) ;
MERGE (Axe_Interpo, 1) ; (* Mouvements enchaînés *)
STTL2D (Axe_Interpo, 0.0, 2.0, 0) ; (* Déplacement interpolé en 0,20*)
STTL2D (Axe_Interpo, 10.0, -10.0, 0) ; (* Déplacement en 10,-10 - Gravure du M*)
...

STOP (Axe_Inter);

Si l'on souhaite faire une pause sur une trajectoire il faut mettre à 0 la vitesse résultante. Par exemple :

VEL (Axe_Interpo, 300.0) ; (* Vitesse interpolée *)
ACC (Axe_Interpo, 2000.0) ; (* Accélération interpolée *)
DEC (Axe_Interpo, 2000.0) ;
INTERPOLATE2D(Axe_Interpo, X, Y) ;
MERGE (Axe_Interpo, 1) ; (* Mouvements enchaînés *)
STTL2D (Axe_Interpo, 0.0, 2.0, 0) ; (* Déplacement interpolé en 0,20*)
STTL2D (Axe_Interpo, 10.0, -10.0, 0) ; (* Déplacement en 10,-10 - Gravure du M*)
...

IF (FlagStop=1) Then

 FlagStop:=0 ;

 VEL (Axe_Interpo, 0.0) ; (* Vitesse interpolée *)

END_IF;

IF (FlagStart=1) Then

 FlagStart:=0 ;

 VEL (Axe_Interpo, 300.0) ; (* Vitesse interpolée *)

END_IF;

...


Exemples d'interpolation 2D

Dépose de colle

Programme :

Axe_Interpo est un axe virtuel déclaré dans le projet

X et Y sont des axes déclarés dans le projet

MarcheDepose:=1000;
VEL (X, 1000.0) ; (* Vitesse en mode positionnement *)
VEL (Y, 1000.0) ;
ACC (X, 1500.0) ; (* Accélération et décélération *)
ACC (Y, 1500.0) ;
DEC (X, 1500.0) ; (* en mode positionnement *)
DEC (Y, 1500.0) ;
AXIS (X, 1) ;
AXIS (Y, 1) ;
VEL (Axe_Interpo, 1000.0) ; (* Vitesse interpolée *)
ACC (Axe_Interpo, 1500.0) ; (* Accélération interpolée *)
DEC (Axe_Interpo, 1500.0) ;
INTERPOLATE2D(Axe_Interpo, X, Y);
MERGE (Axe_Interpo, 1) ; (* Mouvements enchaînés *)

STTA (X, 20.0) ; (* Déplacement de positionnement au 1er point *)
STTA (Y, 10.0) ;
WAIT ((MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;
OUTP (Depose, 1) ; (* Activation *)
DELAY (MarcheDepose) ; (* Tempo *)
STTL2D (Axe_Interpo, 110.0, 0.0, 0) ; (* Déplacement interpolé en 130,10 *)
STTC2D (Axe_Interpo, 10.0, 10.0, 0.0, 10.0, 0, 0) ; (* Déplacement en 140,20 sens anti-horaire *)
STTL2D (Axe_Interpo, 0.0, 60.0, 0) ; (* Déplacement interpolé en 140,80 *)
STTC2D (Axe_Interpo, -20.0, 0.0, -10.0, 0.0, 0, 0) ; (* Déplacement en 120,80 sens anti-horaire *)
STTC2D (Axe_Interpo, -10.0, -10.0, -10.0, 0.0, 1, 0) ; (* Déplacement en 110,70 sens horaire *)
STTL2D (Axe_Interpo, -90.0, 0.0, 0) ; (* Déplacement interpolé en 20,70 *)
STTC2D (Axe_Interpo, -10.0, -10.0, 0.0, -10.0, 0, 0) ; (* Déplacement en 10,60 sens anti-horaire *)
STTL2D (Axe_Interpo, 0.0, -40.0, 0) ; (* Déplacement interpolé en 10,20 *)
STTC2D (Axe_Interpo, 10.0, -10.0, 10.0, 0.0, 0 ,0) ; (* Déplacement en 20,10 sens anti-horaire *)
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ; (* Attente de la fin des déplacements *)
OUTP (Depose, 0) ; (* Désactivation *)
DELAY (ArretDepose) ; (* Tempo *)

STTA (X, 0.0) ; (* Retour origine *)
STTA (Y, 0.0) ;
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;

Dans cet exemple, les axes X and Y sont utilisés pour déposer un cordon de colle. "Depose" est la sortie qui commande la dépose de colle. Après un mouvement de l'origine vers la première position (20,10), la dépose commence en décrivant la figure. Quand le mouvement rejoint le point de départ, la sortie est désactivée et les axes se replacent à l'origine.

Gravure ou découpe

Programme :

VEL (X, 1000.0) ; (* Vitesse en mode positionnement *)
VEL (Y, 1000.0) ;
ACC (X, 1500.0) ; (* Accélération et décélération *)
ACC (Y, 1500.0) ;
DEC (X, 1500.0) ; (* en mode positionnement *)
DEC (Y, 1500.0) ;
AXIS (X, 1) ;
AXIS (Y, 1) ;
VEL (Axe_Interpo, 300.0) ; (* Vitesse interpolée *)
ACC (Axe_Interpo, 2000.0) ; (* Accélération interpolée *)
DEC (Axe_Interpo, 2000.0) ;
INTERPOLATE2D(Axe_Interpo, X, Y) ;
MERGE (Axe_Interpo, 0) ; (* Mouvements non enchaînés *)

STTA (X, 0.0) ; (* Déplacement de positionnement au 1er point *)
STTA (Y, 10.0) ;
WAIT ((MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;
OUTP (Graveuse, 1) ; (* Activation *)
DELAY (MarcheGraveuse) ; (* Tempo *)
STTL2D (Axe_Interpo, 0.0, 2.0, 0) ; (* Déplacement interpolé en 0,20*)
STTL2D (Axe_Interpo, 10.0, -10.0, 0) ; (* Déplacement en 10,-10 - Gravure du M*)
STTL2D (Axe_Interpo, 10.0, 10.0, 0) ; (* Déplacement interpolé en 20,20 *)
STTL2D (Axe_Interpo, 0.0, -20.0, 0) ; (* Déplacement interpolé en 20,0 *)
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ; (* Attente de la fin des déplacements *)
OUTP (Graveuse, 0) ; (* Désactivation *)
DELAY (ArretGraveuse) ; (* Tempo *)

STTA (X, 40.0) ; (* Déplacement en 35,0 *)
STTA (Y, 0.0) ;
WAIT ((MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;
OUTP (Graveuse, 1) ; (* Activation *)
DELAY (MarcheGraveuse) ; (* Tempo *)
STTL2D (Axe_Interpo, 5.0, 0.0, 0) ; (* Déplacement interpolé en 35,0 *)
STTC2D (Axe_Interpo, 20.0, 0.0, 10.0, 0.0, 1, 0) ; (* Déplacement en 35,20 - Gravure du C *)
STTL2D (Axe_Interpo, 5.0, 0.0, 0) ; (* Déplacement interpolé en 40,0 *)
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ; (* Attente de la fin des déplacements *)
OUTP (Graveuse, 0) ; (* Désactivation *)
DELAY (ArretGraveuse) ; (* Tempo *)

STTA (X, 60.0) ; (* Déplacement en 60,20 *)
STTA (Y, 20.0) ;
WAIT ((MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;
OUTP (Graveuse, 1) ; (* Activation *)
DELAY (MarcheGraveuse) ; (* Tempo *)
STTL2D (Axe_Interpo, -10.0, 0.0, 0) ; (* Déplacement interpolé en 50,20 *)
STTC2D (Axe_Interpo, 0.0, -10.0, 0.0, -5.0, 0, 0) ; (* Déplacement en 50,10 *)
STTL2D (Axe_Interpo, 10.0, 0.0, 0) ; (* Déplacement interpolé en 60,10 - Gravure du S *)
STTC2D (Axe_Interpo, 0.0, -10.0, 0.0, -5.0, 1, 0) ; (* Déplacement en 60,0 *)
STTL2D (Axe_Interpo, -10.0, 0.0, 0) ; (* Déplacement interpolé en 50,0 *)
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ; (* Attente de la fin des déplacements *)
OUTP (Graveuse, 0) ; (* Désactivation *)
DELAY (ArretGraveuse) ; (* Tempo *)

STTA (X, 0.0) ; (* Retour origine *)
STTA (Y, 0.0) ;
WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;


Déclaration d'un axe d'interpolation

Principe :

  1. Pour réaliser une interpolation, il faut déclarer un axe virtuel dans l'onglet Motion

  2. A partir des tâches, on définit le modèle géométrique et la liste des axes esclaves

Règle de l'interpolation :

  1. Les axes esclaves doivent être asservis.

  2. La gestion de la désactivation des axes lorsqu'un axe d'une interpolation passe en erreur est laissé au SECURITY(x,x).

  3. Tout autre mouvement déclenché sur les axes esclaves, lors d'un mouvement d'interpolation, est strictement interdit.

  4. Les fonctions de contrôle de mouvement des axes virtuels sont utilisables avec l'axe d'interpolation

  5. Pendant un mouvement d'interpolation, une modification de numérateur, dénominateur ou distance sur un axe esclave n'est pas prise en compte.

  6. Le MOVE_S des axes esclaves est à 1 tant que le mouvement d'interpolation n'est pas terminé.


Définition du modèle géométrique

L'instruction INTERPOLATE permet de définir un modèle géométrique et de définir l'ensemble des paramètres nécessaires à l'interpolation.

Le modèle géométrique est pris en compte à l'instant du démarrage d'un mouvement.

Les paramètres nécessaires à l'interpolation sont contenus dans une structure du type tInterpolateParam :

  1. Axes_Count: nombre d'axe du modèle

  2. Axes[] : tableau des noms d'axe du modèle

  3. Acc_Limit[] : tableau d'activation des limites d'accélération des différents axes

  4. Acc_Limit_Value[] : tableau des valeurs de limite d'accélération des différents axes

  5. Vel_Limit[] : tableau d'activation des limites de vitesse des différents axes

  6. Vel_Limit_Value [] : tableau des valeurs de limite de vitesse des différents axes

  7. Limit_Type [] : TADAPTSPEED pour que l'interpolation suive le plus précisément possible le profil de vitesse ou TADAPTTRAJ pour privilégié la trajectoire

  8. Geo_Count : nombre de transformation

  9. Geo_ReverseCount : nombre de transformation inverse

  10. Geo : tableau de transformation de type tGeoEntry

  11. Geo_Reverse : tableau de transformation inverse de type tGeoEntry

Les paramètres nécessaires à la description des transformations géométrique sont contenus dans une structure tGeoEntry :

  1. Input : entrées de la transformation

  2. Output : sorties de la transformation

Les entrées et sorties de la transformation peuvent prendre les valeurs suivantes :

  • 0 : NULL, aucune donnée, non utilisé

  • 1 : X

  • 2 : Y

  • 3 : Z

  • 4...9 => invalide (éventuelles autres variables spéciales d'entrées )

  • 1119 => Axe de sortie 1 à 9

  • 2099 => invalide

  • 100...255 => Entrée "de calcul" permettant de relier une entrée à une sortie.

  3. Geotype : type de transformation :

  • TINVALID génère une erreur

  • TROTATESERIAL effectue 3 rotations successives du repère

  • TROTATEPARALELL effectue 3 rotations du repère par rapport à un repère fixe

  • TTRANSLATE effectue une translation du repère

  • TSCALE retourne l'orientation de la direction d'une trajectoire

  4. Param : la valeur à appliquer à la transformation.

Type de transformation:

TROTATESERIAL:

Cette transformation effectue 3 rotations successives du repère

  • angle ø (degrés) Param[0] selon Z, ø

  • puis angle è (degrés) Param[1] selon Xø, è

  • puis angle ö (degrés) Param[2] selon Zè, ö

TROTATEPARALLEL :

Cette transformation effectue 3 rotations du repère par rapport à un repère fixe

  • Angle á (degrés) Param[0] selon X

  • Angle â (degrés) Param[1] selon Y

  • Angle ã (degrés) Param[2] selon Z

TTRANSLATE :

Cette transformation effectue une translation du repère

  • de +Param[0] en X

  • de +Param[1] en Y

  • de +Param[2] en Z

TSCALE :

Cette transformation effectue une mise à léchelle/dilatation/inversion du repère

  • de *Param[0] en X

  • de *Param[1] en Y

  • de *Param[2] en Z

TTANGENTIAL :

Cette transformation retourne lorientation de la direction dune trajectoire. Valeur retournée entre -0.5 et 0.5 tour esclave, effectue les raccords automatiques entre mouvement et tient compte du multi tour.

  • Input [0] : X

  • Input [1] : Y

P1 : Axe X

P2 : Axe Y

Z : Axe Z


Exemples d'interpolation étendue

Découpe avec outil tangentiel

Modèle géométrique direct :

Modèle géométrique inverse :

Programme :

Axe_Interpo est un axe virtuel déclaré dans le projet

X et Y sont des axes déclarés dans le projet

OutilTAN est l'axe contrôlant l'orientation de l'outil de découpe

VAR

     InterpoParam:tInterpolateParam;

     MarcheDepose:UDINT;

     ArretDepose:UDINT;

END_VAR

;

InterpoParam.axes_count:=3; (* Déclaration des axes *)

InterpoParam.axes[1]:=X;

InterpoParam.axes[2]:=Y;

InterpoParam.axes[3]:=OutilTAN;

;

InterpoParam.geo_count:=2; (* Déclaration du modèle géométrique direct *)

InterpoParam.geo[1].Input[1]:=1; (* Axe X *)

InterpoParam.geo[1].Input[2]:=2; (* Axe Y *)

InterpoParam.geo[1].Input[3]:=0; (* aucun *)

InterpoParam.geo[1].Output[1]:=11;

InterpoParam.geo[1].Output[2]:=12;

InterpoParam.geo[1].Output[3]:=0;

InterpoParam.geo[1].Param[1]:=0.0;

InterpoParam.geo[1].Param[2]:=0.0;

InterpoParam.geo[1].GeoType:=TTRANSLATE;

InterpoParam.geo[2].Input[1]:=1; (* Axe X *)

InterpoParam.geo[2].Input[2]:=2; (* Axe Y *)

InterpoParam.geo[2].Input[3]:=0; (* aucun *)

InterpoParam.geo[2].Output[1]:=13;

InterpoParam.geo[2].Output[2]:=0;

InterpoParam.geo[2].Output[3]:=0;

InterpoParam.geo[2].GeoType:=TTANGENTIAL;

;

InterpoParam.geo_reversecount:=2; (* Déclaration du modèle géométrique inverse *)

InterpoParam.geo_reverse[1].Input[1]:=11;

InterpoParam.geo_reverse[1].Input[2]:=12;

InterpoParam.geo_reverse[1].Input[3]:=0;

InterpoParam.geo_reverse[1].Output[1]:=1;

InterpoParam.geo_reverse[1].Output[2]:=2;

InterpoParam.geo_reverse[1].Output[3]:=0;

InterpoParam.geo_reverse[1].Param[1]:=0.0;

InterpoParam.geo_reverse[1].Param[2]:=0.0;

InterpoParam.geo_reverse[1].GeoType:=TTRANSLATE;

InterpoParam.geo_reverse[2].Input[1]:=13;

InterpoParam.geo_reverse[2].Input[2]:=0;

InterpoParam.geo_reverse[2].Input[3]:=0;

InterpoParam.geo_reverse[2].Output[1]:=13;

InterpoParam.geo_reverse[2].Output[2]:=0;

InterpoParam.geo_reverse[2].Output[3]:=0;

InterpoParam.geo_reverse[2].GeoType:=TTANGENTIAL;

;

VEL (X, 1000.0) ; (* Vitesse en mode positionnement *)

VEL (Y, 1000.0) ;

ACC (X, 1500.0) ; (* Accélération et décélération *)

ACC (Y, 1500.0) ;

DEC (X, 1500.0) ; (* en mode positionnement *)

DEC (Y, 1500.0) ;

AXIS (X, 1) ;

AXIS (Y, 1) ;

AXIS (OutilTan, 1) ;

VEL (Axe_Interpo, 1000.0) ; (* Vitesse interpolée *)

ACC (Axe_Interpo, 150000.0) ; (* Accélération interpolée *)

DEC (Axe_Interpo, 150000.0) ;

INTERPOLATE(Axe_Interpo, InterpoParam);

MERGE (Axe_Interpo, 1) ; (*Mouvements enchaînés *)

;

STTA (X, 20.0) ; (* Déplacement de positionnement au 1er point *)

STTA (Y, 10.0) ;

STTA (OutilTan, 0.0) ;

WAIT ((MOVE_S (X) = 0) And (MOVE_S (Y) = 0) And (MOVE_S (OutilTan) = 0) ) ;

(* OUTP (Depose, 1) ; Activation *)

DELAY (MarcheDepose) ; (* Tempo *)

STTL2D (Axe_Interpo, 110.0, 0.0, 0) ; (* Déplacement interpolé en 130,10 *)

STTC2D (Axe_Interpo, 10.0, 10.0, 0.0, 10.0, 0, 0) ; (* Déplacement en 140,20 sens anti-horaire *)

STTL2D (Axe_Interpo, 0.0, 60.0, 0) ; (* Déplacement interpolé en 140,80 *)

STTC2D (Axe_Interpo, -20.0, 0.0, -10.0, 0.0, 0, 0) ; (* Déplacement en 120,80 sens anti-horaire *)

STTC2D (Axe_Interpo, -10.0, -10.0, -10.0, 0.0, 1, 0) ; (* Déplacement en 110,70 sens horaire *)

STTL2D (Axe_Interpo, -90.0, 0.0, 0) ; (* Déplacement interpolé en 20,70 *)

STTC2D (Axe_Interpo, -10.0, -10.0, 0.0, -10.0, 0, 0) ; (* Déplacement en 10,60 sens anti-horaire *)

STTL2D (Axe_Interpo, 0.0, -40.0, 0) ; (* Déplacement interpolé en 10,20 *)

STTC2D (Axe_Interpo, 10.0, -10.0, 10.0, 0.0, 0 ,0) ; (* Déplacement en 20,10 sens anti-horaire *)

WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ; (* Attente de la fin des déplacements *)

(* OUTP (Depose, 0) ; Désactivation *)

DEB_Dscope(2,x,0);

DELAY (ArretDepose) ; (* Tempo *)

;

STTA (X, 0.0) ; (* Retour origine *)

STTA (Y, 0.0) ;

WAIT ( (MOVE_S (X) = 0) And (MOVE_S (Y) = 0) ) ;

HALT (T_PRINC,0) ;


Capture

Introduction

Une capture permet d'enregistrer la position courante d'un axe sur certaine condition.

Il existe 128 registres de capture à disposition. (De 0 à 127)

Au démarrage des tâches, tous les registres sont ré-initialisés à 0 et toutes les captures en cours sont annulées (redémarrage du séquenceur)

Liste des fonctions

CAPTURE

CAPTURECANCEL

CAPTUREIMD

CAPTUREEVENT

DISABLERECALE

ENABLERECALE

REG_S

REGPOS_S

Lancement de capture de position

Annule une capture

Lancement de capture de position sur un variateur IMD

Associe un événement à la capture

Désactivation du recalage

Fonction de recalage automatique

Etat de la capture

Position capturée

Exemple

(* Capture position réelle du moteur sur front montant de l'entrée 4 du MPC lorsque l'axe est entre 10 et 20. *)

CAPTURE (1, Axe_X, SRC_AXE, Mpc_4, 1, W_NONE , 10.0, 20.0) ;

WAIT (REG_S(1) = 1) ; (* Attente d'une capture *)

Position:= REGPOS_S(1) ; (* Position = valeur de la position lors de la capture *)

Attention

Le nombre de captures simultanées dépend des ressources internes.


Lecture des entrées

La fonction INP est utilisée pour lire 1 entrée, INPB un bloc de 8 entrées et INPW un bloc de 16 entrées.


Ecriture des sorties

La fonction OUTP est utilisée pour écrire 1 sortie, OUTB un bloc de 8 sorties et OUTW un bloc de 16 sorties.


Lecture des sorties

La fonction OUTP_S est utilisée pour lire 1 sortie, OUTB_S un bloc de 8 sorties et OUTW_S un bloc de 16 sorties.


Attente d'un état

Il est possible d'attendre un changement d'état sur une entrée grâce à l'instruction WAIT.


Test d'un état

Il est possible de tester l'état d'une entrée grâce à l'instruction IFTHENELSE END_IF

La syntaxe est : IF (<Condition>) THEN <Action1> ELSE <Action2> END_IF

La structure IFTHENELSE est utilisée pour tester une condition à un instant donné. La validation de la <Condition> permet d'exécuter l'<Action1>. Dans le cas contraire, c'est l'<Action2> qui est exécuté.

Exemple :

IF (Inp(Bouton Depart)=On) THEN (* Test de l'état de l'entrée *)
(* Bouton Depart *)
Out(LedMarche, ON) ; (* Action associée à Bouton Depart=On *)
RUN(Cycle) ;
ELSE
Out(LedMarche, OFF) ; (* Action associée à Bouton Depart=Off *)

 HALT (T_Cycle) ;

END_IF;


Lecture d'une entrée

La fonction ADC est utilisée pour lire une entrée analogique.


Ecriture d'une sortie

La fonction DAC est utilisée pour écrire sur une sortie analogique.


Lecture d'une sortie

La fonction DAC_S est utilisée pour lire une entrée analogique.


Attente passive

La fonction DELAY est utilisée pour établir une attente passive.

Avec cette fonction, le programme attend la durée indiquée.


Attente active

Les instructions LOADTIMER et TIMER permettent d'établir des attentes actives.

LOADTIMER permet de charger la temporisation.

TIMER indique que la temporisation est écoulée.

TIMEL et TIMEH donnent le nombre de ms écoulées depuis la mise sous tension du MPC

Ces instructions utilisent un timer interne du type entier long qui représente le millième de secondes écoulées depuis la dernière mise sous tension.

Ce timer peut donc être utilisée comme base de temps.


Evénements

Dans un système multitâche, les mécanismes d'événements sont utiles pour la communication entre tâches. La gestion d'événements peut aussi fournir des fonctions de contrôle de process. Plusieurs programmes peuvent attendre ou envoyer le même événement.

Le Motion Studio offre deux types de tâches événementielles pour réaliser ces mécanismes :

  • tâche événementielle système (1 seule par projet)

  • tâche événementielle utilisateur (nombre non limité)

Tâche événementielle système

Principe de la tâche événementielle système

Elle possède une «file d'attente». Chaque événement système est placé dans cette file d'attente (FIFO), tant que la file est non vide, la tâche événement système est déclenchée (elle doit donc vider cette file).

Si la tâche d'erreur système ne dépile pas (via GETSYSTEMEVENT()) les erreurs système, soit elle a un WD et il se déclenche, sinon la tâche est prête en permanence (et il n'y a plus qu'elle qui s'exécute si elle est la plus prioritaire)

Si cette tâche a un Watchdog et qu'elle le dépasse, quelle que soit la configuration du Watchdog, cela entraîne une erreur LZS qui arrête toutes les tâches

Si la tâche d'erreur ne traite pas les erreurs assez vite, le buffer se remplit ce qui entraîne une erreur interne

S'il n y a pas de tâche d'événement système les événements systèmes sont ignorés.

List des événements systèmes :

  • 1 : Watchdog des tâches (l'action du chien de garde doit être paramétré en «Evénement système»)

  • 2 : Ethercat (perte de communication ou pas de communication ou erreur d'initialisation Ethercat lors d'un RESTART(1))

  • 3 : Erreur LZS

  • 4 : Erreur Read/Write : en cas d'erreur sur un READ/WRITE/PARAM/REAL

  • 5 : Erreur Init Task error : erreur lors de l'exécution de la tâche d'initialisation

  • 6 : Erreur NodeGuarding slave : erreur déclenchée par le Node Guarding esclave/serveur local (le MPC n'a pas reçu de paquet NodeGuarding d'un maître distant avant le timeout)

  • 7 : Erreur CAN Hard

  • 8 : Erreur NodeGuarding master : erreur déclenchée par le Node Guarding d'un noeud distant (un noeud distant n'a pas répondu à la requête NodeGuarding du MPC)

Liste des fonctions pour gérer les tâches événementielles systèmes

GETLASTSYSEVENT

GETSYSTEMEVENT

Retourne le dernier événement de la pile système

Retourne le premier événement de la pile système

Tâche événementielle utilisateur

Principe de la tâche événementielle utilisateur

Mode standard

Cette tâche possède un N° d'événement, arbitraire, donné par l'utilisateur. Par défaut, elle n'a pas de liste d'événements. Dans ce mode elle est mise prête à être exécutée (déclenchée) à chaque fois qu'un événement (avec son N°) se produit. Si un événement se produit alors que la tâche s'exécute, il est perdu. Dans ce mode, aucun acquittement n'est nécessaire.

Mode avec file d'attente

Il est possible de rajouter une file d'attente pour obtenir le même fonctionnement qu'une tâche événementielle système. Dans ce mode la file d'attente stocke en plus un "paramètre" permettant de différencier plusieurs source d'un même événement (et de traiter ces différentes sources dans une seule tâche).

Plusieurs tâches peuvent attendre un événement utilisateur.

Plusieurs tâches peuvent attendre le même événement utilisateur.

Chaque tâche n'attend qu'un seul événement

Une tâche événement utilisateur non associée à une liste d'événement, «ignore» les événements qu'elle reçoit lorsqu'elle est en train de s'exécuter.

Une tâche événement utilisateur associée à une liste d'événement, «conserve» les événements qu'elle reçoit et se remet prête automatiquement tant que tous les événements n'ont pas été traités. Si la tâche ne parvient pas à traiter tous ses événements en attente, une erreur système est déclenchée

Liste des fonctions pouvant générer un événement utilisateur :

SIGNAL

CAPTUREEVENT

CAMBOX

COUNTEREVENT

Génération d'événement

Associe un événement à la capture

Boîte à cames

Associe un événement au compteur

Liste des fonctions pour gérer les tâches événementielles utilisateurs

GETUSEREVENTPARAM

SETTASKEVENTLIST

Récupère le paramètre associé au dernier événement

Associe une liste d'événement


Compteurs

Le MPC possède 64 compteurs 32 bits.

Chaque entrée du système (MPC, IMD, CANopen ...) peut être affectée à un compteur.

Les fonctions disponibles sont :

COUNTER

COUNTER_S

COUNTEREVENT

COUNTERSET

STARTCOUNTER

STOPCOUNTER

Configuration du compteur

Lecture du compteur

Associe un événement au compteur

Initialise le compteur à une valeur

Démarre le compteur

Arrête le compteur

Attention

- Lorsque le compteur atteint sa valeur maxi, il repasse à 0 au prochain front


Boîtes à cames

La boîte à cames permet de piloter des sorties TOR suivant des positions angulaires :

Motion Studio accepte jusqu'à 32 boîtes à cames avec jusqu'à 32 segments et 32 sorties par boîte.

Ces boites à cames sont rafraîchies tous les 300 µs

Les fonctions disponibles sont :

CAMBOX

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

SETINP

STARTCAMBOX

STOPCAMBOX

Boîte à cames

Etat d'une boite à came

Modifie une sortie de boîte à cames

Modifie un segment de boîte à cames

Force l'état d'une entrée

Exécute une boîte à came

Arrête une boîte à came

Les types nécessaires à la déclaration des boites à cames sont :

tSegmentDef

tOutputDef

tSegmentMode

tOutTarget

Permet la déclaration des segments

Permet la déclaration des sorties

Sélectionne un mode pour les segments

Sélectionne le type de sortie

Exemple de déclaration de boite à cames :

Dans cet exemple, l'axe <Axe_X> est un axe modulo 360

La boite à came s'écrit donc de la façon suivant :

VAR

SegmentDef : tSegmentDef;

OutputDef : tOutputDef;

END_VAR

(* Déclaration des segments *)

SegmentDef.Count:=6;

(* Le segment 1 met la sortie 1 à 1 entre 20° et 60° *)

SegmentDef.Active[0]:=1;

SegmentDef.OutputNum[0]:=0;

SegmentDef.BeginPosition[0]:=20.0;

SegmentDef.EndPosition[0]:=60.0;

SegmentDef.Direction[0]:=S_ALL;

SegmentDef.Mode[0]:=SMPOSITION;

(* Le segment 2 met la sortie 2 à 1 entre 100° et 135° *)

SegmentDef.Active[1]:=1;

SegmentDef.OutputNum[1]:=1;

SegmentDef.BeginPosition[1]:=100.0;

SegmentDef.EndPosition[1]:=135.0;

SegmentDef.Direction[1]:=S_ALL;

SegmentDef.Mode[1]:=SMPOSITION;

(* Le segment 3 met la sortie 1 à 1 entre 135° et 180° *)

SegmentDef.Active[2]:=1;

SegmentDef.OutputNum[2]:=0;

SegmentDef.BeginPosition[2]:=135.0;

SegmentDef.EndPosition[2]:=180.0;

SegmentDef.Direction[2]:=S_ALL;

SegmentDef.Mode[2]:=SMPOSITION;

(* Le segment 4 met la sortie 3 à 1 entre 200° et 240° *)

SegmentDef.Active[3]:=1;

SegmentDef.OutputNum[3]:=2;

SegmentDef.BeginPosition[3]:=200.0;

SegmentDef.EndPosition[3]:=240.0;

SegmentDef.Direction[3]:=S_ALL;

SegmentDef.Mode[3]:=SMPOSITION;

(* Le segment 5 met la sortie 1 à 1 entre 200° et 240° *)

SegmentDef.Active[4]:=1;

SegmentDef.OutputNum[4]:=0;

SegmentDef.BeginPosition[4]:=200.0;

SegmentDef.EndPosition[4]:=240.0;

SegmentDef.Direction[4]:=S_ALL;

SegmentDef.Mode[4]:=SMPOSITION;

(* Le segment 6 met la sortie 3 à 1 entre 350° et 10° *)

SegmentDef.Active[5]:=1;

SegmentDef.OutputNum[5]:=2;

SegmentDef.BeginPosition[5]:=350.0;

SegmentDef.EndPosition[5]:=10.0;

SegmentDef.Direction[5]:=S_ALL;

SegmentDef.Mode[5]:=SMPOSITION;

(* Déclaration des sorties *)

OutputDef.Count:=3;

(* Assigne la sortie MPC 4 à la sortie 1 de la boite à came *)

OutputDef.Active[0]:=1;

OutputDef.Target[0]:=OM_PHYSICALOUTBIT;

OutputDef.OutBit[0]:=MPC_OUT_4;

(* Assigne la sortie MPC 3 à la sortie 2 de la boite à came *)

OutputDef.Active[1]:=1;

OutputDef.Target[1]:=OM_PHYSICALOUTBIT;

OutputDef.OutBit[1]:=MPC_OUT_3;

(* Assigne la sortie MPC 12 à la sortie 3 de la boite à came *)

OutputDef.Active[2]:=1;

OutputDef.Target[2]:=OM_PHYSICALOUTBIT;

OutputDef.OutBit[2]:=MPC_OUT_12;

(* Paramètrage de la boite à came *)

CAMBOX(1,axe_X,SRC_AXE,FILTER_NONE,SegmentDef,OutputDef);

;

STARTCAMBOX(1); (* Lancement de la boîte *)

DELAY(1000);

STOPCAMBOX(1,1); (* Arrêt de la boîte et remise à zéro des sorties activées *)


Opérations de base

Voici les principaux éléments de langage pour la manipulation de données:

Assignation

Accès aux bits d'un mot

Parenthèses

Appel de fonction

Appel de bloc fonctionnel

Voici les principaux éléments de langage pour le contrôle de l'exécution d'un programme:

Etiquettes

Sauts

RETURN


Conversion de type

Fonction de conversion de type


Opérations mathématiques

Fonctions mathématiques

Voici les opérateurs standards pour le calcule arithmétique:

Addition

Soustraction

Multiplication

Division

MOVE (assignation)

Voici les fonctions standard effectuant des opérations mathématiques:

ABS SQRT LN LOG EXP EXPT MOD | valeur absolue racine carrée logarithme de base e logarithme de base 10 exponentiel de base e exponentiel de base 10 modulo
TRUNC INTP FRAC NEG SGN | partie entière partie entière (identique à l'IMD) partie fractionnelle (identique à l'IMD) Inverse le signe d'un nombre signe d'un nombre
FIXTOREAL REALTOFIX UDINTSWAP | convertit un nombre à virgule fixe en réel convertit un réel en nombre à virgule fixe inversion de mots

Voici les fonctions trigonométriques standard:

SIN

COS

TAN

ASIN

ACOS

ATAN

Sinus

Cosinus

Tangente

arc-sinus

arc-cosinus

arc-tangente


Registres

Fonctions de décalage de bit

Voici les fonctions standard pour la manipulation de registres à décalage :

SHL

SHR

ROL

ROR

décalage à gauche

décalage à droite

rotation à gauche

rotation à droite


Opérations booléennes

Fonctions booléennes

Voici les opérateurs standard pour les opérations booléennes:

AND

OR

XOR

NOT

ET booléen

OU booléen

OU exclusif

Inversion booléen (opérateur unaire)


Sélections

Fonctions de sélection

MIN | minimum de deux valeurs entières
MAX | maximum de deux valeurs entières
LIMIT | limite un entier entre deux bornes
SEL | sélection
MUX | multiplexage


Opérations de comparaison

Voici les opérateurs et blocs standard effectuant des comparaisons:

Supérieur

Supérieur ou égal

Différent

Egalité

Inférieur ou égal

Inférieur


Manipulation des chaines de caractères

Manipulation des chaînes de caractères

LEN | longueur courante d'une chaîne
LEFT | extrait des caractères à gauche dans une chaîne
RIGHT | extrait des caractères à droite dans une chaîne
MID | extrait des caractères dans une chaîne
CONCAT | concaténation de deux chaînes de caractères
INSERT | insère des caractères dans une chaîne
DELETE | supprime des caractères dans une chaîne
REPLACE | remplace des caractères dans une chaîne
FIND | trouve des caractères dans une chaîne


Bistable

RS

SR

Bascule avec RESET prioritaire

Bascule avec SET prioritaire


Détection de front

R_TRIG

F_TRIG

Détection de front montant

Détection de front descendant


Compteurs

Compteur

CTU

CTD

CTUD

Compteur

Décompteur

Compteur/Décompteur


Temporisateurs

Temporisateur

TON

TOF

TP

Temporisateur à l'enclenchement

Temporisateur au déclenchement

Temporisateur d'impulsions


A

Gestion des tâches

CONTINUET

HALT

GETLASTSYSEVENT

GETSYSTEMEVEN

INIT_S

INITGETCONTEXT

INITSETRESULT

NEXTTASK

RUN

SIGNAL

STATUS_S

SUSPEND

Continue l'exécution d'une tâche

Arrête une tâche

Retourne le dernier événement de la pile système

Retourne le premier élément de la pile système

Retourne l'état de la tâche d'Initialisation

Retourne le contexte de la tâche d'Initialisation

Force la valeur de retour de la tâche d'Initialisation

basculer immédiatement vers la tâche suivante

Lance une tâche

Génère un événement

Etat d'une tâche

Suspend une tâche


Contrôle de l'axe

Controle de l'axe

ACC

ACC_T

ACCP

AXIS

AXIS_S

AXISREQUEST_S

BUFMOV_S

CLEAR

CLEARAUX

CLEARAXISFAULT

CURRENT

CURRENT_S

DEC

DEC_T

DECP

FE_S

FEMAX_S

GETMODE

SETMODE

HOME

HOME_S

HOMEAUX

HOMEAUX_S

HOMEAUXCANCEL

HOMEAUXREQUEST_S

HOMECANCEL

HOMEREQUEST_S

MERGE

MOVE_S

ORDER

ORDER_S

ORDER_T

POS

POS_S

POS_T

POSAUX_S

POSERROR_S

SPEED

SPEED_S

STTH

STTHAUX

TORQUE

TORQUE_S

VEL

VEL_T

VEL_S

VELAUX_S

VELP

Accélération

Retourne la valeur de ACC

Accélération en pourcentage

Contrôle la boucle d'asservissement

Lit l'état de la boucle d'asservissement

Etat de la demande d'asservissement

Nombre de mouvement dans le buffer

Met à zéro la position de l'axe

Met à zéro la position de l'auxiliaire

Acquitte les défauts d'un axe

Force la consigne de courant

Retourne le courant actuel

Décélération

Retourne la valeur de DEC

Décélération en pourcentage

Valeur courante de l'erreur de poursuite

Limite d'erreur de poursuite atteinte

Retourne le mode de fonctionnement d'un axe

Force de mode de fonctionnement d'un axe

Prise d'origine

Etat de la prise d'origine

Prise d'origine sur le codeur auxiliaire

Etat de la prise d'origine du codeur auxiliaire

Annule la prise d'origine sur l'auxiliaire

Etat de demande de prise d'origine sur l'auxiliaire

Annule la prise d'origine

Etat de demande de prise d'origine

Définit l'enchaînement

Etat du mouvement

Force le numéro d'ordre du prochain mouvement

Numéro d'ordre courant

Numéro d'ordre du dernier mouvement déposé

Modifie la position à atteindre

Position réelle

Retourne la position à atteindre

Position réelle de l'auxiliaire

Indique une erreur de mouvement

Force la consigne de vitesse

Retourne la vitesse courant

Prise d'origine non bloquante

Prise d'origine sur l'auxiliaire non bloquante

Force la consigne de couple

Retourne la couple courant

Vitesse

Retourne la valeur de VEL

Vitesse courante

Vitesse courante de l'auxiliaire

Vitesse en pourcentage


Positionnement

MOVA

MOVR

SSTOP

STOP

STTA

STTIM

STTIP

STTR

TRAJA

TRAJIM

TRAJIP

TRAJR

Mouvement absolu

Mouvement relatif

Arrêt d'un axe sans attente

Arrêt d'un axe

Lance un mouvement absolu

Lance un mouvement infini en sens moins

Lance un mouvement infini en sens plus

Lance un mouvement relatif

Trajectoire absolue

Lance un mouvement infini en sens moins

Lance un mouvement infini en sens plus

Trajectoire relative


Mouvements déclenchés

TRIGGERAXIS_S

TRIGGERAXISSET

TRIGGERF

TRIGGERI

TRIGGERP

Retourne l'état d'un trigger d'un axe

Force le déclenche immédiat d'un mouvement

Déclenche le prochain mouvement sur une fenêtre

Déclenche le prochain mouvement sur changement d'état d'une entrée.

Déclenche le prochain mouvement sur le passage du maître à une position.


Synchronisation

BREAKCAM

BREAKCAM_POS

CAM_S

CAMNUM_S

CAMREADPOINT

CAMSEG_S

ENDCAM

FILTERMASTER

GEARBOX

GEARBOXRATIO

GEARBOXRATIO_S

ICORRECTION

ICORRECTION_S

ICORRECTIONA

LOADCAM

LOADCAMI

LOADCAMPOINT

MASTEROFFSET

MASTEROFFSET_S

MOVS

READCAM

SLAVEOFFSET

SLAVEOFFSET_S

STARTCAM

STOPS

STOPS_S

WRITECAM

Arrête de la came en cours

Retourne la position du maître ou de l'esclave lors du dernier breakcam

Etat de la came

Numéro de la came en cours d'exécution

Retourne la position esclave

Numéro d'équation de la came en cours d'exécution

Arrêt de la came à sa fin

Applique un filtrage lors de mouvement synchrone

Arbre électrique

Modifie le rapport de réduction d'un arbre électrique

Retourne le rapport de réduction d'un arbre électrique

Fonction de compensation

Etat de la compensation

Fonction de compensation

Charge une came de la CF-CARD

Charge une came de la mémoire

Modification de points d'une came

Offset maître sur une came absolue

Valeur courante du décalage

Mouvement synchronisé

Lit une came

Offset esclave sur une came absolue

Valeur courante du décalage

Lance l'exécution d'une came

Permet de stopper une synchronisation en cours

Etat du mouvement synchronisé

Ecrit une came


Interpolation

INTERPOLATE

INTERPOLATE2D

INTERPOLATE3D

STTL2D

STTL3D

TRAJL2D

TRAJL3D

STTC2D

STTC3D

TRAJC2D

TRAJC3D

STTH3D

TRAJH3D

Démarre une interpolation

Démarre une interpolation 2D

Démarre une interpolation 3D

Démarre un mouvement linéaire 2D

Démarre un mouvement linéaire 3D

Démarre une trajectoire linéaire 2D

Démarre une trajectoire linéaire 3D

Démarre un mouvement circulaire 2D

Démarre un mouvement circulaire 3D

Démarre une trajectoire circulaire 2D

Démarre une trajectoire circulaire 3D

Démarre un mouvement hélicoïdal

Démarre une trajectoire hélicoïdale


Capture

CAPTURE

CAPTURECANCEL

CAPTUREIMD

CAPTUREEVENT

REG_S

REGPOS_S

Lancement de capture de position

Annule une capture

Lancement de capture de position sur un variateur IMD

Associe un événement à la capture

Etat de la capture

Position capturée


Automate

Entrées / sorties logiques

INP

INPB

INPW

OUTP

OUTP_S

OUTB

OUTB_S

OUTW

OUTW_S

Lecture d'une entrée TOR

Lecture d'un bloc de 8 entrées

Lecture d'un bloc de 16 entrées

Ecriture d'une sortie

Lecture d'une sortie TOR

Ecriture d'un bloc de 8 sorties

Lecture d'un bloc de 8 sorties

Ecriture d'un bloc de 16 sorties

Lecture d'un bloc de 16 sorties

Entrées / sorties analogiques

ADC

DAC

Entrées analogiques

Sorties analogiques

Temporisations

DELAY

WAIT

Attente passive

Attente d'une condition

Evènements

GETLASTSYSEVENT

GETSYSTEMEVENT

GETUSEREVENTPARAM

SETTASKEVENTLIST

SIGNAL

Retourne le dernier événement de la pile système

Retourne le premier événement de la pile système

Récupère le paramètre associé au dernier événement

Associe une liste d'événement

Génération d'événement

Compteurs

COUNTER

COUNTER_S

COUNTEREVENT

COUNTERSET

STARTCOUNTER

STOPCOUNTER

Configuration du compteur

Lecture du compteur

Associe un événement au compteur

Initialise le compteur à une valeur

Démarre le compteur

Arrête le compteur

Boites à cames

CAMBOX

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

SETINP

STARTCAMBOX

STOPCAMBOX

Boîte à cames

Etat d'une boite à came

Sortie de boîte à cames

Segment de boîte à cames

Force l'état d'une entrée

Exécute une came

Arrête une boîte à came


Mots clefs de déclaration

TYPE

END_TYPE

VAR_EXTERNAL

VAR_GLOBAL

VAR

VAR_IN

VAR_IN_OUT

VAR_OUTPUT

END_VAR

Déclaration d'un nouveau type

Fin de déclaration de type

Déclaration des variables externes

Déclaration des variables globales

Déclaration des variables locales

Déclaration des variables d'entrées

Déclaration des variables entrées/sorties

Déclaration des variables de sorties

Fin de déclaration de variable


Instructions du langage IL

Instructions de programmation:

Parenthèses

CAL <Instance name>

CALC <Instance name>

CALCN <Instance name>

JMP <Label>

JMPC <Label>

JMPCN <Label>

RET

RETC

RETCN

Appel de bloc fonctionnel

Saut inconditionnel

Saut à la fin du programme

Instructions et opérations booléennes:

NOT

AND

ANDN

OR

ORN

XOR

XORN

S BOOL

R BOOL

ET

OU

OU exclusive

force à TRUE

force à FALSE

Opétations mathématiques:

ADD

SUB

MUL

DIV

MOD

addition

soustraction

multiplication

division

modulo

Instructions du registre CR:

LD ANY

LDN ANY_BIT

ST ANY

STN ANY_BIT

charge l'opérande

stocke le résultat

Opérateurs logiques:

GT

GE

EQ

NE

LE

LT

Comparaison "supérieur à"

Comparaison "supérieur ou égal à"

Egalité

Inégalité

Comparaison "inférieur ou égal à"

Comparaison "inférieur à"


Instructions du langage ST

CASE

OF

END_CASE

Sélectionne un groupe d'énoncés

IF

THEN

ELSE

ELSEIF

END_IF

Exécution conditionnelle d'énoncés

FOR

TO

BY

DO

END_FOR

Itère des énoncés

REPEAT

UNTIL

END_REPEAT

Répète des énoncés jusqu'à ce que la condition soit vrai

WHILE

END_WHILE

Répète des énoncés tant que la condition est vrai

EXIT

Quitte une boucle d'itérations


Flash, Sécurité, Divers

Afficheur

DISPLAY

Afficheur 7 segments

Sécurité

WATCHDOGOFF | Ouvre le chien de garde
WATCHDOGON | Ferme le chien de garde
WATCHDOG_S | Retourne l'état du chien de garde
WDTASKRAZ | Remet à 0 le nombre de déclenchement du chien de garde d'une tâche
WDTASK_S | Retourne le nombre de déclenchement du chien de garde d'une tâche

Horloge

LOADTIMER | Charge un TIMER
TIMEH | Temps écoulé depuis le démarrage du MPC
TIMEL | Temps écoulé depuis le démarrage du MPC
TIMER | Vérifie si le TIMER est écoulé

Paramètres

READ | Lecture de la table CANopen d'un périphérique
READPARAM | Lecture de la table CANopen d'un périphérique
READPARAMR | Lecture de la table CANopen d'un périphérique
READR | Lecture de la table CANopen d'un périphérique
SECURITY | Définit les actions de sécurités
SECURITYFEMAX | Gestion «Drive Ready» d'un axe
WRITE | Ecriture dans la table CANopen d'un périphérique
WRITEPARAM | Ecriture dans la table CANopen d'un périphérique
WRITEPARAMR | Ecriture dans la table CANopen d'un périphérique
WRITER | Ecriture dans la table CANopen d'un périphérique

Système

RESTART | Redémarrage du système
RESTART_S | Retourne la raison du dernier démarrage
VERSION | Version de l'Operating System
RAMTOFLASH | Copie-le contenue de la BBM en FLASH
CLEARTOFLASH | Efface la mémoire FLASH
FLASHOK_S | Retourne l'état de la copie en FLASH
RAMOK_S | Indique l'état de la BBM
BATERY_S | Indique l'état de la pile de la BBM
IOFAULT_S | Indique si les entrées / sorties sont en surcharges


Accès aux bits d'un mot

Vous pouvez directement spécifier un bit d'une variable entière dans les expressions et les diagrammes, en utilisant la syntaxe suivante:

Variable.BitNo

Où:

Variable: est le nom d'une variable de type ANY_BIT
BitNo: constante indiquant le numéro du bit dans la variable

La variable peut avoir un des types suivants:

BYTE (8 bits de .0 à .7)
WORD (16 bits de .0 à .15)
DWORD (32 bits de .0 à 31)

0 représente toujours le bit de poids le plus faible.

Pour pouvoir accéder au bit d'un variable ANY_BIT via une variable, il faut utiliser une des fonctions suivantes:

SETBITB | Modifie un bit d'une variable BYTE
SETBITW | Modifie un bit d'une variable WORD
SETBITD | Modifie un bit d'une variable DWORD
GETBITB | Retourne un bit d'une variable BYTE
GETBITW | Retourne un bit d'une variable WORD
GETBITD | Retourne un bit d'une variable DWORD

Exemple ST

VAR
    a: BYTE;
    b: DWORD;
    c: DWORD;
    j: USINT;
END_VAR

If a.1=1 Then                      (* Test le 1er bit de a *)
  For j:=1 To 8 Do
    SETBITD(c, j, GETBITD (b, j)); (* Copie les 8 premiers bits de b->c *)
  End_For;
End_If;


Assignation

Assignation de variable

Syntaxe

<Variable> := <Expression>

Types acceptés

<Variable> : ANY
<Expression> : ANY

Description

La variable forcée et l'expression doivent avoir le même type.
En IL, l'instruction LD est utilisée pour charger la valeur dans le résultat courant, et l'instruction ST force la variable.
Le résultat courant et l'opérande de l'instruction ST doivent avoir le même type.
Les instructions LD et ST peuvent être modifiées par le suffixe "N" pour indiquer une inversion dans le cas d'un opérande booléen.

Remarques

":=" est un mot-clé réservé au langage ST, il est défini par la norme IEC61131-3.

Exemple ST

VAR
    a: INT;
    b: ARRAY [0..5] OF INT;
    c: REAL;
    e: INT;
END_VAR

a := 5;               (* assigne 5 à a *)
b[1]:= a*2; e := a;   (* double assignations *)
e:= REAL_TO_INT( c ); (* assignement avec un appel de fonction *)

Exemple IL

VAR
    IN: BOOL;
    IN1: BOOL;
    IN2: BOOL;
    Q: BOOL;
END_VAR

Op1: LD  IN  (* résultat courant: IN *)
     ST  Q   (* Q = IN *)
     LDN IN1 (* résultat courant: NOT (IN1) *)
     ST  Q   (* Q = NOT (IN1) *)
     LD  IN2 (* résultat courant: IN2 *)
     STN Q   (* Q = NOT (IN2) *)

Voir aussi

Parenthèses


Parenthèses

Syntaxe

( )

Description

Les parenthèses permettent force l'ordre d'évaluation d'une expression complexe.
Les parenthèses sont utilisées en ST et en IL pour changer l'ordre par défaut lors de l'évaluation des éléments d'une expression complexe.
Par exemple, l'ordre par défaut pour l'évaluation de l'expression "2 * 3 + 4" en ST donne un résultat de 10 puisque l'opérateur "*" est prioritaire.
Changer l'ordre avec des parenthèses pour "2 * ( 3 + 4 )" donne un résultat de 14.
Les parenthèses peuvent être imbriquées dans une expression.

Remarques

Voici l'ordre de priorité appliqué par défaut pour les opérateurs du langage ST (le premier a la plus grande priorité):
Opérateurs unaires: - NOT
Multiplication/Division: * /
Addition/Soustraction: + -
Comparaisons: < > <= >= = <>
ET booléen: & AND
OU booléen: OR
OU exclusif: XOR

En IL, l'ordre par défaut est donné par l'ordre des instructions dans la séquence. Chaque nouvelle instruction modifie le résultat courant. En IL, une parenthèse ouvrante "(" doit être écrite entre une instruction et son opérande. La parenthèse fermante ")" est écrite seule sur une ligne, sans opérande.

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     IN4: INT;
     Q: INT;
END_VAR

Q := (IN1 + (IN2 / IN 3)) * IN4;

Exemple IL

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     IN4: INT;
     Q: INT;
END_VAR

Op1: LD   IN1
     ADD( IN2
     MUL  IN3
     )
     SUB  IN4
     ST   Q    (* Q = IN1 + (IN2 * IN3) - IN4 *)

Voir aussi

Assignation


Etiquettes

Etiquettes  Destination d'une instruction de saut

Les étiquettes sont les destinations des instructions de saut en FDB, LD ou IL. Les sauts et les étiquettes ne sont pas disponibles en ST. Une étiquette est représentée par un nom unique suivi de deux points (":"). En LD et FBD, une étiquette identifie une échelle et est inscrite au dessus de la barre gauche d'alimentation. En IL, les étiquettes sont les destinations des instructions JMP, JMPC, JMPCN. Elles doivent être inscrites en début de ligne, avant une instruction, et doivent précéder une instruction valide: LD (chargement), instructions inconditionnelles telles que CAL, JMP ou RET. L'étiquette peut également être insérée seule sur une ligne, avant une instruction valide. Dans tous les langages, il n'est pas obligatoire qu'une étiquette soit la destination d'un saut. Les étiquettes peuvent également être utilisées comme des repères dans les programmes pour en augmenter la lisibilité.

Exemple ST

Non disponible

Exemple FBD

(* Dans cet exemple, la seconde échelle n'est pas évaluée si IN1 = TRUE *)

Exemple LD

(* Dans cet exemple, la seconde échelle n'est pas évaluée si IN1 = TRUE *)

Exemple IL

VAR
 IN1: BOOL;
 IN2: BOOL;
 IN3: BOOL;
 Q2: BOOL;
 Q3: BOOL;
END_VAR

Start: LD IN1 (* étiquette inutilisée *)
JMPC TheRest (* Saut à "TheRest" si IN1 = TRUE *)
LD IN2 (* ces instructions ne sont pas exécutées *)
ST Q2 (* si IN1 = TRUE *)

TheRest: LD IN3 (* destination du saut *)
ST Q3

Voir aussi

Sauts

RETURN


Sauts

Un saut à une étiquette déroute l'exécution du programme vers l'étiquette spécifiée. Les sauts et les étiquettes ne sont pas disponibles en ST. En FBD, un saut est représenté par un bloc opérateur JMPC contenant le nom de l'étiquette de destination. Le flux en entrée du bloc doit être connecté à une variable booléenne qui conditionne le branchement. Le saut n'est exécuté que si le flux en entrée est TRUE. En LD, l'opérateur JMP ou JMPN, suivi par le nom d'une étiquette, finit une échelle. Le saut est exécuté si le flux est TRUE pour un JMP et FALSE pour un JMPN. En IL, les instructions JMP, JMPCet JMPCN spécifient des opérations de saut. La destination du saut est l'opérande de l'instruction.

Attention: les sauts en arrière peuvent créer des boucles infinies et bloquer le cycle.

Exemple ST

Non disponible

Exemple FBD

(* Dans cet exemple, la seconde échelle n'est pas évaluée si IN1 = TRUE *)

Exemple LD

(* Dans cet exemple, la seconde échelle n'est pas évaluée si IN1 = TRUE *)

Exemple IL

Les instructions suivantes sont disponibles:
JMP Branchement inconditionnel
JMPC Branchement si le résultat courant = TRUE
JMPCN Identique à JMPNC

VAR
 IN1: BOOL;
 IN2: BOOL;
 IN3: BOOL;
 Q2: BOOL;
 Q3: BOOL;
END_VAR

Start: LD IN1 (* étiquette inutilisée *)
JMPC TheRest (* Saut à "TheRest" si IN1 = TRUE *)
LD IN2 (* ces instructions ne sont pas exécutées *)
ST Q2 (* si IN1 = TRUE *)

TheRest: LD IN3 (* destination du saut *)
ST Q3

Voir aussi

Etiquettes

RETURN


Addition

Syntaxe

<Q> := <IN1> + <IN2>

Type acceptés

<IN1>: ANY_NUM ou TIME
<IN2>: ANY_NUM ou TIME
<Q>: ANY_NUM ou TIME

Description

Cet opérateur additionne deux expressions numériques et retourne une valeur du même type que ces opérandes.
< IN1> et < IN2> doivent être des expressions valides et être du même type.

Remarques

En langage LD et FBD, plusieurs fonctions ADD sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
Voir la Table E.1: Les conditions d'erreur pour un résultat avec débordement.

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: INT;
END_VAR

Q := IN1 + IN2;

Exemple FBD

(* le bloc peut avoir jusqu'à 16 entrées *)

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     Q: INT;
END_VAR

Op1: LD  IN1
     ADD IN2
     ST  Q   (* Q = IN1 + IN2 *)
Op2: LD  IN1
     ADD IN2
     ADD IN3
     ST  Q   (* Q = IN1 + IN2 + IN3 *)

Voir aussi :

Soustraction

Multiplication

Division


Soustraction

Syntaxe

<Q> := <IN1> - <IN2>

Type acceptés

<IN1> : ANY_NUM ou TIME
<IN2> : ANY_NUM ou TIME
<Q>: ANY_NUM ou TIME

Description

Cet opérateur soustrait l'expression <IN2> de l'expression <IN1> et retourne une valeur du même type que ces opérandes.
< IN1> et < IN2> doivent être des expressions valides et être du même type.

Remarques

En langage LD et FBD, plusieurs fonctions SUB sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
Voir la Table E.1: Les conditions d'erreur pour un résultat avec débordement.

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: INT;
END_VAR

Q := IN1 - IN2;

Exemple FBD

(* le bloc peut avoir jusqu'à 16 entrées *)

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     Q: INT;
END_VAR

Op1: LD  IN1
     SUB IN2
     ST  Q   (* Q = IN1 + IN2 *)

Op2: LD  IN1
     SUB IN2
     SUB IN3
     ST  Q   (* Q = IN1 + IN2 + IN3 *)

Voir aussi :

Addition

Multiplication

Division


Multiplication

Syntaxe

<Q> := <IN1> * <IN2>

Type acceptés

<IN1> : ANY_NUM ou TIME
<IN2> : ANY_NUM
<Q>: ANY_NUM ou TIME

Description

Cet opérateur multiplie deux expressions numériques et retourne une valeur du même type que ces opérandes.
< IN1> et < IN2> doivent être des expressions valides et être du même type.

Remarques

En langage LD et FBD, plusieurs fonctions MUL sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
Voir la Table E.1: Les conditions d'erreur pour un résultat avec débordement.

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: INT;
END_VAR

Q := IN1 * IN2;

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     Q: INT;
END_VAR

Op1: LD  IN1
     MUL IN2
     ST  Q   (* Q = IN1 * IN2 *)

Op2: LD  IN1
     MUL IN2
     MUL IN3
     ST  Q   (* Q = IN1 * IN2 * IN3 *)

Voir aussi :

Addition

Soustaction

Division


Division

Syntaxe

<Q> := <IN1> / <IN2>

Type acceptés

<IN1> : ANY_NUM ou TIME
<IN2> : ANY_NUM
<Q>: ANY_NUM ou TIME

Description

Cet opérateur divise deux expressions numériques et retourne une valeur du même type que ces opérandes.
< IN1> et < IN2> doivent être des expressions valides et être du même type.

Remarques

En langage LD et FBD, plusieurs fonctions DIV sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
Voir la Table E.1: Les conditions d'erreur pour un résultat avec débordement.

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: INT;
END_VAR

Q := IN1 / IN2;

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN1: INT;
     IN2: INT;
     IN3: INT;
     Q: INT;
END_VAR

Op1: LD  IN1
     DIV IN2
     ST  Q   (* Q = IN1 / IN2 *)

Op2: LD  IN1
     DIV IN2
     DIV IN3
     ST  Q   (* Q = IN1 / IN2 / IN3 *)

Voir aussi :

Addition

Soustaction

Multiplication


Négation

Syntaxe

<Q> := - <IN>

Type acceptés

<IN1> : ANY_NUM
<Q>: ANY_NUM

Description

Cet opérateur retourne la négation de l'opérande.

Remarques

En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

VAR
    IN: INT;
    Q: INT;
END_VAR

Q := - IN;


Inférieur

Syntaxe

<Q> := <EN1> LT <EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer le contenu du registre au contenu de l'opérande, si le contenu du registre est inférieur à celui de l'opérande, le résultat est TRUE. Si le contenu du registre est supérieur ou égal à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération, et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction LE compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, "ABC" est plus petit que "ZX" ; "ABCD" est plus grand que "ABC".

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q := IN1 < IN2;

Langage FBD

Langage LD

(* La comparaison est exécutée si EN = TRUE *)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     LT IN2
     ST Q

Voir aussi

Inférieur ou égal

Egalité

Différent

Supérieurou égal

Supérieur


Inférieur ou égal

Syntaxe

<Q> := <EN1> LE <EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer le contenu du registre au contenu de l'opérande, si le contenu du registre est inférieur ou égal à celui de l'opérande, le résultat est TRUE. Si le contenu du registre est supérieur à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération, et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction LE compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, "ABC" est plus petit que "ZX" ; "ABCD" est plus grand que "ABC".

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q := IN1 <= IN2;

Langage FBD

Langage LD

(* La comparaison est exécutée si EN = TRUE *)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     LE IN2
     ST Q

Voir aussi

Inférieur

Egalité

Différent

Supérieur ou égal

Supérieur


Egalité

Syntaxe

<Q> := <EN1>EQ<EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer contenu du registre au contenu de l'opérande, si le contenu du registre est égal à celui de l'opérande, le résultat est TRUE. Si le contenu du registre n'est pas égal à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction EQ compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, «ABC» est plus petit que «ZX» ; «ABCD» est plus grand que «ABC».
Les tests d'égalité ne peuvent pas être utilisés avec des entrées de type TIME. En effet, une temporisation active croît avec la résolution de temps de cycle et certaines valeurs peuvent ne jamais apparaître.

Langage ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q :=IN1=IN2 ;

Langage FBD

Langage LD

(*La comparaison est exécutée si EN=TRUE*)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     EQ IN2
     ST Q

Voir aussi

Inférieur

Inférieur ou égal

Différent

Supérieur ou égal

Supérieur


Différent

Syntaxe

<Q> := <EN1> NE <EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer le contenu du registre au contenu de l'opérande, si le contenu du registre est différent de celui de l'opérande, le résultat est TRUE. Si le contenu du registre est égal à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction EQ compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, «ABC» est plus petit que «ZX» ; «ABCD» est plus grand que «ABC».
Les tests d'égalité ne peuvent pas être utilisés avec des entrées de type TIME. En effet, une temporisation active croît avec la résolution de temps de cycle et certaines valeurs peuvent ne jamais apparaître.

Langage ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q :=IN1<> IN2 ;

Langage FBD

Langage LD

(*La comparaison est exécutée si EN=TRUE*)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     NE IN2
     ST Q

Voir aussi

Inférieur

Inférieur ou égal

Egalité

Supérieur ou égal

Supérieur


Supérieur ou égal

Syntaxe

<Q> := <EN1> EQ <EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer le contenu du registre au contenu de l'opérande, si le contenu du registre est supérieur ou égal à celui de l'opérande, le résultat est TRUE. Si le contenu du registre est inférieur à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération, et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction EQ compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, "ABC" est plus petit que "ZX" ; "ABCD" est plus grand que "ABC".

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q := IN1 >= IN2;

Langage FBD

Langage LD

(* La comparaison est exécutée si EN = TRUE *)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     EQ IN2
     ST Q

Voir aussi

Inférieur

Inférieur ou égal

Egalité

Différent

Supérieur


Supérieur

Syntaxe

<Q> := <EN1> GT <EN2>

Types acceptés

<IN1> : ANY
<IN2> : ANY
<Q> : BOOL

Description

Permet de comparer le contenu du registre au contenu de l'opérande, si le contenu du registre est supérieur à celui de l'opérande, le résultat est TRUE. Si le contenu du registre est inférieur ou égale à celui de l'opérande, le résultat est FALSE.

Remarques

Les deux entrées doivent être du même type.
En LD, le flux d'entrée (EN) conditionne l'opération, et le flux de sortie est le résultat de la comparaison.
En IL, l'instruction EQ compare le résultat courant et l'opérande.
L'opérande et le résultat courant doivent être du même type.
La comparaison peut être utilisée pour des chaînes de caractères.
Dans ce cas, le système effectue une comparaison lexicographique des chaînes.
Par exemple, "ABC" est plus petit que "ZX" ; "ABCD" est plus grand que "ABC".

Exemple ST

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Q := IN1 > IN2;

Langage FBD

Langage LD

(* La comparaison est exécutée si EN = TRUE *)

Langage IL

VAR
     IN1: INT;
     IN2: INT;
     Q: BOOL;
END_VAR

Op1: LD IN1
     GT IN2
     ST Q

Voir aussi

Inférieur

Inférieur ou égal

Egalité

Différent

Supérieur ou égal


ABS

ABS  Calcule la valeur absolue

Syntaxe

<Q> := ABS (<IN>)

Types acceptés

<IN> : ANY_NUM
<Q>: ANY_NUM

Description

Cette fonction fournit la valeur absolue de <IN>. Un nombre négatif est donc converti en un nombre positif.
<IN> doit être une expression numérique valide. La valeur absolue d'un nombre est sa valeur non-signée.

Remarques

En langage LD et FBD, plusieurs fonctions ABS sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

VAR
 IN: INT;
 Q: INT;
END_VAR

Q := ABS (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
IN: INT;
Q: INT;
END_VAR

Op1: LD IN
ABS
ST Q

Voir aussi

TRUNC

LOG

SQRT

EXP


ACC

ACC  Accélération

Syntaxe

ACC (<Axe>, <Expression>)

Unité

<Expression> en unité utilisateur par s² (Ex : mm/s², degré/s², tr/s²)

Limite

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette instruction modifie l'accélération courante.
<Axe> : nom de l'axe
<Expression> contient la valeur à appliquer.

Remarque

L'accélération courante peut être modifiée à tout moment.

Exemple ST

VAR
     Acceleration : REAL;
END_VAR

ACC(Axe_X, 500.0); (* Accélération de 500 unités/s² *)
Acceleration := 250.0 ;
ACC(Axe_X, Acceleration); (* Accélération de 250unités/s² *)

Voir aussi

DEC

VEL

ACC_T

ACCP


ACC_T

ACC_T  Accélération

Syntaxe

<Variable> : = ACC_T (<Axe>)

Unité

<Variable> en unité utilisateur par s² (Ex : mm/s², degré/s², tr/s²)

Limite

<Variable> est supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Variable> : REAL

Description

Cette instruction retourne l'accélération courante.
<Axe> : nom de l'axe
<Expression> contient la valeur retournée par la fonction.

Remarque

L'accélération courante peut être lue à tout moment.

Exemple ST

VAR
     VitesseX: REAL;
END_VAR

ACC(Axe_X, 500.0);        (* Accélération de 500 unités/s² *)
VitesseX := ACC_T(Axe_X); (* VitesseX = 500 *)

Voir aussi

DEC_T

VEL_T

ACC

ACCP


ACCP

ACCP  Accélération en pourcentage

Syntaxe

ACCP (<Axe>, <Expression>)

Limite

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction ajuste l'accélération courante en pourcentage du paramètre d'accélération par défaut définie dans le profil de l'axe.
<Axe> : nom de l'axe
<Expression> contient le pourcentage à appliquer.

Remarques

La valeur d'accélération peut être entrée dans l'écran "Profil de vitesse" lors de la configuration Motion de l'axe et peut être modifié une tâche.

Exemple ST

VAR
     Acceleration : REAL;
END_VAR

ACCP(Axe_X, 10.0) ; (* 10% de la l'accélération définie dans le profil de vitesse *)
Acceleration := 15.0 ;
ACCP(Axe_X, Acceleration); (* Accélération de 15% *)

Voir aussi :

DECP

VELP

ACC

ACC_T


ACOS

ACOS  Cosinus inverse

Syntaxe

<Q> := ACOS (<IN>)

Types acceptés

<IN> : REAL
<Q>: REAL

Description

Cette fonction restitue l'arccosinus de <IN>. Cette fonction restitue un angle exprimé en radian.
<IN> doit être une expression numérique valide.

Remarques

En langage LD, la fonction Cosinus inverse s'appelle : ACOS_REAL
En langage FBS, la fonction Cosinus inverse s'appelle : ACOS_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Q := ACOS (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Op1: LD   IN
     ACOS
     ST   Q

Voir aussi :

ASIN

ATAN

COS

SIN

TAN


ADC

ADC  Entrées analogiques IMD

Syntaxe

<Variable> := ADC (<Axe>, <Entrée>)

Unité

<Variable> en Volt

Limite

<Variable> valeur lue, après application de l'échelle et de l'offset associés à l'entrée ANA.

Types acceptés

<Axe> : tPeripheral
<Entrée> : UINT
<Variable> : REAL

Description

Cette fonction retourne la tension d'une entrée analogique +/- 10 V.
<Axe> : nom de l'axe
<Entrée> doit représenter le numéro de l'entrée analogique :

  • 0 correspond à l'entrée CONSIGNE du variateur (ANA1)

  • 1 correspond à l'entrée LIMITE du variateur (ANA2)

<Variable> contient la valeur retournée par la fonction.

Exemple ST

VAR
     Temperature : REAL;
END_VAR

Temperature:= ADC (Axe_X, 1); (* Température est égale à la tension sur l'entrée ANA2 du variateur Axe_X *)

Voir aussi

DAC


ADD

ADD  Addition (langage IL)

Voir Addition


ADDMOV

ADDMOV  Superposition de mouvements

Syntaxe

ADDMOV (<Esclave>, <Maître>, <Source>, <Coef>)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<Coef> : REAL

Description

Cette fonction permet de superposer sur un axe esclave ses propres mouvements avec ceux effectué par un axe maître.
<Esclave> : nom de l'axe
<Maître> : nom de l'axe
<Source> permet de sélectionner la source du <Maître>
<Coef> permet d'ajouter un coefficient sur l'axe esclave

Remarque

Le maître et l'esclave peuvent exécuter n'importe quel type de mouvement : positionnement, synchronisation, interpolation.

Exemple ST

ADDMOV (Axe_X, Axe_Y, SRC_AXE,1.0) ; (* Superperposition sur l'Axe_X des mouvements de l'Axe_Y *)

Voir aussi

ADDSTOP


ADDSTOP

ADDSTOP  Arrêt superposition de mouvements

Syntaxe

ADDSTOP (<Esclave>)

Types acceptés

<Esclave> : tPeripheral

Description

Cette fonction permet de détruire les liens de superposition de mouvements de l'axe esclave.
<Esclave> : nom de l'axe

Remarques

Si l'axe esclave passe en mode non asservi ( AXIS(Esclave)=Off ), le lien entre le maître et l'esclave est également coupé.

Exemple ST

ADDMOV(Axe_X,Axe_Y, SRC_AXE);  (* Superperposition sur l'Axe_X les mouvements de l'Axe_Y *)
Delay(10000);
ADDSTOP(Axe_X); (* Arrêt de la superposition sur l'Axe_X après 10s *)

Voir aussi

ADDMOV


AND

Syntaxe

<Q> := <IN1> AND <IN2>

Types acceptés

<IN1> : ANY_BIT
<IN2> : ANY_BIT
<Q> : ANY_BIT

Description

Cette fonction effectue un ET binaire entre deux expressions et retourne une valeur du type de lopérande.
<IN1> et <IN2> doivent être du même type.

Remarque

AND est défini par la norme IEC61131-3.

Exemple ST

VAR
 IN1 : BOOL;
 IN2 : BOOL;
 IN3 : BOOL;
 Q : BOOL;
END_VAR

Q:= IN1 AND IN2;
Q:= IN1 & IN2 & IN3;

Exemple FBD

Exemple LD

(* contacts en série *)

Exemple IL

VAR
 IN1 : BOOL;
 IN2 : BOOL;
 IN3 : BOOL;
 Q : BOOL;
END_VAR

Op1: LD IN1
 & IN2 (* "&" et "AND" sont équivalents *)
ST Q (* Q = IN1 AND IN2 *)

Op2: LD IN1
 AND IN2
 &N IN3 (* "&N" et "ANDN" sont équivalents *)
ST Q (* Q = IN1 AND IN2 AND (NOT IN3) *)

Voir aussi

OR

XOR

NOT


ANDN

ANDN  Opérateur ET avec l'entrée 2 inversée

Voir AND avec l'entrée 2 inversée


ASIN

ASIN  Sinus inverse

Syntaxe

<Q> := ASIN (<IN>)

Types acceptés

<IN> : REAL
<Q>: REAL

Description

Cette fonction restitue l'arcsinus de <IN>. Cette fonction restitue un angle exprimé en radian.
<IN> doit être une expression numérique valide.

Remarques

En langage LD, la fonction Sinus inverse s'appelle : ASIN_REAL
En langage FBS, la fonction Sinus inverse s'appelle : ASIN_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Q := ASIN (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Op1: LD   IN
     ASIN
     ST   Q

Voir aussi

ACOS

ATAN

COS

SIN

TAN


ATAN

ATAN  Tangente inverse

Syntaxe

<Q> := ATAN (<IN>)

Types acceptés

<IN>: REAL
<Q>: REAL

Description

Cette fonction restitue l'arctangente de <IN>. Cette fonction restitue un angle exprimé en radian.
<IN> doit être une expression numérique valide.

Remarques

En langage LD, la fonction Tangente inverse s'appelle : ATAN_REAL
En langage FBS, la fonction Tangente inverse s'appelle : ATAN_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Q := ATAN (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

VAR
     IN: REAL;
     Q: REAL;
END_VAR

Op1: LD   IN
     ATAN
     ST   Q

Voir aussi :

ACOS

ASIN

COS

SIN

TAN


AXIS

AXIS  Contrôle la boucle d'asservissement

Syntaxe

AXIS (<Axe>, <Commande>)

Types acceptés

<Axe> : tPeripheral
<Commande> : UINT

Description

Cette fonction est utilisée pour ouvrir et fermer les boucles d'asservissement.
Lorsque l'axe est en boucle fermé (AXIS=ON), toutes les instructions de mouvement sont transmises à l'axe par l'intermédiaire du buffer de mouvement et sont exécutées. Si l'axe passe en boucle ouverte (AXIS=OFF), le buffer de mouvement est vidé, les instructions MOVE_S et FE_S retournent la valeur 0.
<Axe> : nom de l'axe
<Commande> "1" ou ON pour demander un asservissement et "0" ou OFF pour demander un désasservissement

Remarques

Ä La fonction Axis effectue une demande d'asservissement. Le temps de traitement dépend de l'axe (réel, simulation, virtuel) et de ses paramètres.
Ä Toute fonction de mouvement envoyée à un axe qui est en boucle ouverte sera consommée par l'axe mais ne sera pas exécutée réellement.

Exemple ST

VAR
     FlagDefaut : BOOL;
END_VAR

(* TEST COMPLET *)
AXIS (Axe_X, 1);                  (* Demande d'asservissement *)
WAIT (AXISREQUEST_S (Axe_X) =0); (* Attente fin de demande d'asservissement *)
If (AXIS_S (Axe_X) =0) Then      (* Test de l'asservissement *)
     FlagDefaut := 1;
Else
     FlagDefaut := 0;
End_If;

(* BLOQUANT SI DEFAUT PENDANT L'ASSERVISSEMENT *)
AXIS (Axe_X, 1) ;          (* Demande d'asservissement *)
WAIT (AXIS_S (Axe_X) =1); (* Attente asservissement de l'axe *)

(* PAS DE CONTROL DE L'ASSERVISSEMENT *)

AXIS (Axe_X, 1) ;  (* Demande d'asservissement *)
Delay (10) ;
MOVA (Axe_X, 100.0);

Voir aussi

AXIS_S

AXISREQUEST_S

SECURITY


AXIS_S

AXIS_S  Lit l'état de la boucle d'asservissement

Syntaxe

<EtatAxe> := AXIS_S(<Axe>)

Types acceptés

<Axe> : tPeripheral
<EtatAxe> : BOOL

Description

Cette fonction est utilisée pour lire l'état de la boucle d'asservissement et retourne une réponse 0 ou 1.
<Axe> : nom de l'axe

Remarque

Cette fonction peut être utilisée à tout moment pour voir si l'axe est asservi.

Exemple ST

VAR
     FlagDefaut : BOOL;
END_VAR

(* TEST COMPLET *)
AXIS (Axe_X, 1) ;                (* Demande d'asservissement *)
WAIT (AXISREQUEST_S (Axe_X) =0); (* Attente fin de demande d'asservissement *)
If (AXIS_S (Axe_X) =0) Then      (* Test de l'asservissement *)
     FlagDefaut := 1;
Else
     FlagDefaut := 0;
End_If;

Voir aussi

AXIS

AXISREQUEST_S

SECURITY


AXIS_REQUEST_S

AXISREQUEST_S  Lit l'état de la demande d'asservissement

Syntaxe

<EtatDemandeAxe> := AXISREQUEST_S(<Axe>)

Types acceptés

<Axe> : tPeripheral
< EtatDemandeAxe > : BOOL

Description

Cette fonction est utilisée pour lire l'état de la demande d'asservissement et retourne une réponse 0 ou 1.
<Axe> : nom de l'axe

Remarques

Cette fonction peut être utilisée à tout moment pour voir si une commande AXIS est en cours.

Exemple ST

VAR
     FlagDefaut : BOOL;
END_VAR

(* TEST COMPLET *)
AXIS (Axe_X, 1) ;                (* Demande d'asservissement *)
WAIT (AXISREQUEST_S (Axe_X) =0); (* Attente fin de demande d'asservissement *)
If (AXIS_S (Axe_X) =0) Then      (* Test de l'asservissement *)
     FlagDefaut := 1;
Else
     FlagDefaut := 0;
End_If;

Voir aussi

AXIS

AXIS_S

SECURITY


AXISWAIT

Syntaxe

<EtatAxe> := AXISWAIT (<Axe>, <Commande>)

Types acceptés

<Axe> : tPeripheral
<Commande> : UINT
<EtatAxe> : BOOL

Description

Cette fonction exécute le code suivant :

AXIS(Axe, Commande);
WAIT(AXISREQUEST_S(Axe)=0);
RETURN AXIS_S(Axe);

Voir aussi

AXIS_S

AXISREQUEST_S

SECURITY


BATERY_S

Syntaxe

<Q> := BATERY_S (0)

Types acceptés

<Q> : BOOL

Description

Cette fonction indique l'état de la pile de sauvegarde BBM du MPC : à 1 indique que la pile de sauvegarde est OK

Voir aussi

RAMTOFLASH

CLEARFLASH


BOOL

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


BREAKCAM

BREAKCAM  Arrêt du mouvement de synchronisation

Syntaxe

BREAKCAM (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

Cette fonction est utilisée pour interrompre le mouvement de synchronisation en cours et passer au suivant.
<Axe> : nom de l'axe

Voir aussi

BREAKCAM_POS


BREAKCAM_POS

BREAKCAM_POS  Position après un BREAKCAM / STOPS

Syntaxe

<Position> := BREAKCAM_POS (<Axe>, <Source>)

Types acceptés

<Axe> : tPeripheral
<Source> : USINT
<Position> : REAL

Description

Cette fonction renvoie la position de l'axe lors du dernier BREAKCAM ou STOPS.
<Axe> : nom de l'axe
<Source> permet de sélectionner la source :

  • 0 pour la position de l'esclave

  • 1 pour la position du maître

  • 2 pour l'erreur de poursuite

Voir aussi

BREAKCAM


BUFMOV_S

BUFMOV_S  Nombre de mouvement dans le buffer

Syntaxe

<Variable> := BUFMOV_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Variable> : UDINT

Description

Cette fonction retourne le nombre de mouvements en attente dans le buffer de l'axe.
Le mouvement en cours d'exécution n'est pas comptabilisé par cette fonction.
Cette fonction peut être utilisée après avoir lancé des mouvements, pour savoir si un mouvement est fini.
<Axe> : nom de l'axe

Remarque

Dans le cas où le buffer de mouvement se trouve plein, la tâche se bloque jusqu'à ce qu'une place soit libérée (ce mode de fonctionnement dégrade les performances du MPC).

Exemple ST

STTR(Axe_X, 100.0) ;
STTR(Axe_X, 50.0) ;
STTR(Axe_X, 50.0) ;
WAIT (BUFMOV_S(Axe_X) <2) ; (* Attendre la fin du premier
 mouvement *)


BY

Voir FOR


BYTE

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


CAL

CAL  Appel de bloc fonctionnel (langage IL)

Voir Appel d'un bloc de fonction


CALC

CALC  Appel de bloc fonctionnel (langage IL)

Voir Appel d'un bloc de fonction


CALCN

CALCN  Appel de bloc fonctionnel (langage IL)

Voir Appel d'un bloc de fonction


CAM_S

CAM_S  Etat de la came

Syntaxe

< Variable > := CAM_S (< Esclave >)

Types acceptés

< Esclave >: tPeripheral
< Variable > : UDINT

Description

Cette fonction permet de savoir quel numéro et segment de came est en cours d'exécution en une seule fonction.
< Esclave > : nom de l'axe esclave où est effectuée la came

Remarques

Voir CAMNUM_S et CAMSEG_S pour le détail des valeurs possibles.

Exemple ST

VAR
     NumCame : UINT;
     NumSegment : UINT;
     EtatCame : UDINT;
END_VAR

(* Risque d'aléa *)
NumCame:= CAMNUM_S(Axe_X);
...
NumSegment:= CAMSEG_S(Axe_X);

(* Pas d'aléa *)
EtatCame:=CAM_S (Axe_X);
...
NumCame:= DWORD_TO_UINT (SHR (UDINT_TO_DWORD (EtatCame) ,16));
...
NumSegment:= UDINT_TO_UINT(EtatCame);

Voir aussi

CAMNUM_S

CAMSEG_S


CAMBOX

CAMBOX  Boîte à cames

Syntaxe

CAMBOX (<NumCamBox>, <Axis_Ref>, <Src_Pos>, <Filtrage>, <SegmentDef>, <OutputDef>)

Type accepté

<NumCamBox> : USINT
<Axis_Ref> : tPeripheral
<Src_Pos> : tSrcPos
<Filtrage> : tFilterMaster
<SegmentDef> : tSegmentDef
<OutputDef> : tOutputDef

Description

Cette fonction définit une boîte à came.
<NumCamBox> : Numéro de boîte (0..31)
<Axis_Ref> : Axe sur lequel est la source de position
<Src_Pos> : Référence de la source de position
<Filtrage> : type de filtrage sur la source de position
<SegmentDef> : définition des segments
<OutputDef> : définition des sorties

Remarques

L'exécution de cette instruction provoque l'arrêt de la boîte à came si elle est active (mais les sorties ne sont pas remises à zéro).
Si un paramètre est incorrect ou une erreur survient, la boite reste inactive

Voir aussi

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

SETINP

STARTCAMBOX

STOPCAMBOX


CAMBOX_S

Syntaxe

<Q> := CAMBOX_S (<NumCamBox>)

Type accepté

<NumCamBox> : USINT
<Q> : BOOL

Description

Cette fonction teste l'état d'une boite à came et retourne TRUE si la boite est lancée

Voir aussi

CAMBOX

CAMBOXOUT

CAMBOXSEG

SETINP

STARTCAMBOX

STOPCAMBOX


CAMBOXOUT

CAMBOXOUT Sortie de boîte à cames

Syntaxe

CAMBOXOUT (<NumCamBox>, <NumOut>, <OutputDef>)

Type accepté

<NumCamBox> : USINT
<NumOut> : USINT
<OutputDef> tOutputDef

Description

Cette fonction modifie une sortie de la boite à came.
<NumOut> contient le numéro de la sortie à modifier, ses données sont prises à l'endroit correspondant dans le tableau de définition des sorties passés en paramètre <OutputDef>.
L'appelle de cette fonction Influe sur tous les segments reliés à la sortie concernée
<NumCamBox> : numéro de boîte (0..31)
<NumOut> : numéro du segment (0..31)
<OutputDef> : définition des sorties

Remarques

Il est possible d'ajouter/retirer une sortie à la volée.
La fonction est bloquante jusqu'à ce que la sortie soit effectivement prise en compte (300µs max).
En cas de modification de sortie concernée, la sortie initiale conserve sa valeur au moment du changement.

Voir aussi

CAMBOX

CAMBOX_S

CAMBOXSEG

SETINP

STARTCAMBOX

STOPCAMBOX


CAMBOXSEG

CAMBOXSEG  Segment de boîte à cames

Syntaxe

CAMBOXSEG (<NumCamBox>, <NumSeg>, <SegmentDef>)

Type accepté

<NumCamBox> : USINT
<NumSeg> : USINT
<SegmentDef> : tSegmentDef

Description

Cette fonction modifie un segment de la boite à came. NumSeg contient le N° de segment à modifier, ses données sont prises à l'endroit correspondant dans le tableau de définition des segments passés en paramètre.
<NumCamBox> : Numéro de boîte (0..31)
<NumSeg> : Numéro du segment (0..31)
<SegmentDef> : définition des segments

Remarques

Il est possible d'ajouter un segment à la volée.
La fonction est bloquante jusqu'à ce que le segment soit effectivement pris en compte (300µs max).
En cas de modification de la sortie concernée, la sortie initiale conserve sa valeur au moment du changement.

Voir aussi

CAMBOX

CAMBOX_S

CAMBOXOUT

SETINP

STARTCAMBOX

STOPCAMBOX


CAMNUM_S

CAMNUM_S  Numéro de la came en cours d'exécution

Syntaxe

<Variable> := CAMNUM_S (<Esclave >)

Types acceptés

<Esclave> : tPeripheral
<Variable> : UINT

Description

Cette instruction permet de savoir quel numéro de came est en cours d'exécution (entre 1 et 128).
< Esclave >: nom de l'axe

Remarques

La valeur retournée est significative que si CAM_S est à 1.
CAMNUM_S retourne la valeur 0 si aucune came n'est lancée
Si une came est lancée mais n'est pas encore embrayé ou est en attente de TRIGGER, son numéro sera quand même retourné par CAMNUM_S.

Exemple ST

VAR
     FlagCame1EnCours : BOOL;
     FlagCame2EnCours : BOOL;
END_VAR

If (CAMNUM_S(Axe_X)=1) Then
     FlagCame1EnCours:= 1;  (* Came 1 en cours *)
End_If;
If (CAMNUM_S(Axe_X)=2) Then
     FlagCame2EnCours:= 1;  (* Came 2 en cours *)
End_If;

Voir aussi

CAM_S

CAMSEG_S


CAMREADPOINT

CAMREADPOINT  Position de l'esclave dans la came

Syntaxe

<Position Esclave> := CAMREADPOINT (<Position Maître>, <N° Came>)

Types acceptés

<Position Esclave> : REAL
<Position Maître > : REAL
< N° Came > : UINT

Description

Cette instruction permet de calculer la position de l'esclave <Position Esclave> dans la came, correspondant à la position du maître <Position Maître>.

Remarques

Cette instruction tient en compte des valeurs de MASTEROFFSET et SLAVEOFFSET en cours pour cet axe.

Voir aussi

CAM_S

CAMSEG_S


CAMSEG_S

CAMSEG_S  Numéro d'équation de la came en cours d'exécution

Syntaxe

<Variable> := CAMSEG_S (< Esclave >)

Types acceptés

<Esclave> : tPeripheral
< Variable > : UINT

Description

Cette instruction permet de savoir quel segment de la came est en cours d'exécution (entre 1 et le nombre de position de la came-1).
< Esclave >: nom de l'axe

Remarques

La valeur retournée est significative que si CAM_S est à 1.
CAMSEG_S retourne la valeur 0 si aucune came n'est lancée.
Si une came n'est pas encore embrayée ou est en attente de TRIGGER, CAMSEG_S retourne la valeur 1.

Exemple ST

VAR
     Segment1EnCours : BOOL;
     Segment2EnCours : BOOL;
END_VAR

If (CAMSEG_S(Axe_X)=1) Then
     Segment1EnCours :=1 ;  (* Segment entre le point 1 et le point 2 *)
End_If ;
If (CAMSEG_S(Axe_X)=2) Then
     Segment2EnCours :=1 ;  (* Segment entre le point 2 et le point 3 *)
End_If ;

Voir aussi

CAM_S

CAMNUM_S


CAPTURE

CAPTURE  Lancement d'une capture de position

Syntaxe

CAPTURE (<Numéro>, <Axe>, <Source>, <RefEntrée>, <Front>, <Fenêtre>, <Min>, <Max>)

Types acceptés

<Numéro> : UINT
<Axe> : tPeripheral
<Source> : tSrcPos
<RefEntrée> : tIObitIn
<Front> : USINT
<Fenêtre> : tCapType
<Mini> : REAL
<Maxi> : REAL

Description

La fonction CAPTURE est utilisée pour enregistrer la position courante de la source.
Avec cette instruction, le variateur attend un front sur l'entrée capture (éventuellement d'une fenêtre).
Quand le front est détecté, la position est stockée dans la variable REGPOS_S.
Le flag REG_S est alors positionné à vrai.
<Axe> : nom de l'axe
<Numéro> est le numéro de registre stockant le capture (de 0 à 127).
<Source> : permet de sélectionner la source de la capture.
<RefEntrée> : Référence de l'entrée de type BIT déclarée dans l'éditeur E/S.
<Front> : 1 pour front montant ou 0 pour front descendant.
<Fenêtre> : type de fenêtre.
<Mini> doit toujours être inférieur à <Maxi>.

Exemple ST

VAR
     Position : REAL;
END_VAR

(* Capture position réelle du moteur sur front montant de l'entrée 4 du MPC lorsque l'axe est entre 10 et 20 *)
CAPTURE (1, Axe_X, SRC_AXE, Mpc_4, 1, W_NONE , 10.0, 20.0);
WAIT (REG_S(1) = 1);    (* Attente d'une capture *)
Position:= REGPOS_S(1); (* Position = valeur de la position lors de la capture *)

Voir aussi

CAPTURECANCEL

CAPTUREIMD

CAPTUREEVENT

REG_S

REGPOS_S


CAPTURECANCEL

CAPTURECANCEL  Annule une capture

Syntaxe

CAPTURECANCEL (<Numéro>)

Types acceptés

<Numéro> : UINT

Description

La fonction CAPTURECANCEL est utilisée pour annule une capture en cours.

<Numéro> : est le numéro du registre stockant le capture (de 0 à 127).

Voir aussi

CAPTURE

CAPTUREIMD

CAPTUREEVENT

REG_S

REGPOS_S


CAPTUREIMD

CAPTUREIMD  Lancement d'une capture de position à partir d'une entrée rapide IMD

Syntaxe

CAPTUREIMD (<Numéro>, <Axe>, <Source>, <N° de l'entrée>, <Front>, <Fenêtre>, <Min>, <Max>)

Types acceptés

<Numéro> : UINT
<Axe> : tPeripheral
<Source> : tSrcPos
<N° de l'entrée> : tCapImdIo
<Front> : USINT
<Fenêtre> : tCapType
<Mini> : REAL
<Maxi> : REAL

Description

La fonction CAPTUREIMD est utilisée pour enregistrer la position courante de l'axe ou de la position du maître.
Avec cette instruction, le variateur attend un front sur l'entrée capture.
Quand le front est détecté, la position est stockée dans la variable REGPOS_S.
Le flag REG_S est alors positionné à vrai.

<Axe> : Nom de l'axe
<Source> : permet de sélectionner la source de la capture.
<N° de l'entrée> : référence de l'entrée rapide du variateur pour la capture
<Front> : USINT -> 1 sur front montant ou 0 sur front descendant.
<Fenêtre> : type de fenêtre.
<Mini> doit toujours être inférieur à <Maxi>.

Exemple ST

(* Capture position réelle du moteur sur front montant de l'entrée 3 de l'IMD lorsque l'axe est entre 10 et 20 *)
CAPTUREIMD (1, Axe_X, SRC_AXE, IO_3, 1, W_NONE, 10.0, 20.0);
WAIT (REG_S(1) = 1);    (* Attente d'une capture *)
Position:= REGPOS_S(1); (* Position = valeur de la position lors de la capture *)

Remarques

Cette fonction utilise les captures liées aux entrées rapides du variateur IMD/IMDL

Voir aussi

CAPTURE

CAPTURECANCEL

CAPTUREEVENT

REG_S

REGPOS_S


CAPTUREEVENT

CAPTUREEVENT  Associe un événement à la capture

Syntaxe

CAPTUREEVENT (<Numéro>, <Evénement>, <Paramètre>)

Types acceptés

<Numéro> : UINT

<Evénement> : UINT

<Paramètre> : UDINT

Types acceptés

Cette fonction associe un événement à une capture.

<Numéro> : N° de capture (0 à 127)

<Evénement> : N° d'événement à lancer

<Paramètre> : Paramètre à passer à l'événement

Remarque

Si l'événement est égal à 0, l'événement est dissocié de la capture.

Voir aussi

CAPTURE

CAPTURECANCEL

CAPTUREIMD

REG_S

REGPOS_S


CASE

CASE OF ELSE END_CASE  Test multiples

Syntaxe

   CASE <expression > OF
   <valeur> :
       <instructions>
   <valeur> , <valeur> :
       <instructions>
   <valeur> .. <valeur> :
       <instructions>
   ELSE
       <instructions>
   END_CASE;

Types acceptés

<expression> : ANY_BIT ou ANY_INT

Description

Cette instruction permet d'exécuter d'un groupe d'instructions selon la valeur d'une expression.
Le cas dont la <valeur> correspond à <expression> est exécuté. Si aucun cas ne correspond ELSE est exécuté

Remarques

Pour chaque cas, vous devez spécifier soit une valeur, soit une liste de valeurs séparées par des virgules (",") soit une plage spécifiée par un intervalle "min .. max".

Attention

Pour chaque cas du CASE, l'<expression> est recalculé ce qui peut provoquer des incohérences et surtout des appels multiples dans le cas d'une fonction.
Il faut utiliser une variable intermédiaire afin d'avoir une valeur constante pour les différents cas.

Il est interdit de faire un case avec un type énuméré.

Exemple ST

(* cet exemple teste les nombres premiers jusqu'à 5 *)
iNumber := Number;
CASE iNumber OF
0 :
   Alarm := TRUE;
   AlarmText := '0 = pas de résultat';
1 .. 3, 5 :
   bPrime := TRUE;
4, 6 :
   bPrime := FALSE;
ELSE
   Alarm := TRUE;
   AlarmText := 'Je ne sais pas après 6 !';
END_CASE;

Voir aussi

IF

WHILE

REPEAT

FOR

EXIT


CLEAR

CLEAR  Met à zéro la position de l'axe

Syntaxe

CLEAR (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

Cette instruction force la position de l'axe à la valeur du paramètre -ZERO_P.
<Axe> : Nom de l'axe

Exemple ST

CLEAR(Axe_X);
Position :=POS_S(Axe_X); (* Résultat : Position=0.0 *)


CLEARAUX

CLEARAUX  Met à zéro la position de l'auxiliaire

Syntaxe

CLEARAUX (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

Cette instruction force la position auxiliaire de l'axe à la valeur du paramètre -ZEROAUX_P.
<Axe> : Nom de l'axe

Exemple ST

CLEARAUX(Axe_X);
Position :=POSAUX_S(Axe_X) ; (* Résultat : Position=0.0 *)


CLEARAXISFAULT

CLEARAXISFAULT - Acquitte les défauts d'un axe

Syntaxe

CLEARAXISFAULT (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

CLEARAXISFAULT acquitte tous les défauts d'un axe (y compris l'erreur de poursuite).
<Axe> : Nom de l'axe


CLEARFLASH

Syntaxe

CLEARFLASH (0)

Description

Cette fonction efface le contenue de la mémoire FLASH du MPC

Voir aussi

RAMTOFLASH

FLASHOK_S


CONCAT

CONCAT  concaténation de deux chaînes de caractères

Syntaxe

<Q> := CONCAT(<In1>, <In2>)

Types acceptés

<In1> : STRING
<In2> : STRING
<Q>: STRING

Description

Les chaînes de caractères 'IN1 'et 'IN2 'dans le registre de fonctionnement sont assemblées pour former une chaîne de caractères qui est chargée dans le registre de fonctionnement. Les chaînes IN1 à IN2 sont écrites de la gauche vers la droite dans l'ordre croissant dans la variable Q.


CONTINUET

CONTINUE  Continue l'exécution d'une tâche

Syntaxe

CONTINUE(< tâche >)

Types acceptés

< Tâche > : tGroup

Description

Cette instruction est utilisée pour continuer l'exécution d'une tâche suspendue.
< Tâche > est le nom de la tâche suspendue.

Remarques

Cette fonction n'a pas d'effet sur une tâche stoppée ou en cours d'exécution.

Exemple ST

Delay (100);
Run (MaTache);
Delay (100);
SUSPEND(MaTache);
Delay (100);
CONTINUE(MaTache);

Voir aussi

RUN

HALT

SUSPEND


COS

COS  Cosinus

Syntaxe

<Q> := COS (<IN>)

Unité

<IN> est exprimée en radians

Types acceptés

<IN> : REAL
<Q>: REAL

Description

Cette fonction restitue le cosinus de <IN>.
L'argument <IN> doit être une expression numérique valide.
La fonction COS prend un angle et restitue le rapport de deux côtés d'un triangle rectangle.
Le rapport est la longueur du côté adjacent à l'angle divisé par la longueur de l'hypoténuse.

Remarques

En langage LD, la fonction Cosinus inverse s'appelle : COS_REAL
En langage FBS, la fonction Cosinus inverse s'appelle : COS_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := COS (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

Op1: LD  IN
     COS
     ST  Q

Voir aussi :

ACOS

ASIN

ATAN

SIN

TAN


COUNTER

COUNTER  Configure le compteur

Syntaxe

COUNTER (<NumCounter>, <Src_io>, <Up>, <Fronts>)

Type accepté

<NumCounter> : USINT
<Src_io> : tIOBitIn
<Up> : BOOL
<Fronts> : tEdgeType

Description

Cette fonction permet de configurer le compteur
<NumCounter> : N° de compteur (de 0 à 63)
<Src_io> : Nom de l'entrée
<Up> : TRUE compte, FALSE décompte
<Fronts> : Choix du front

Remarques

Si le compteur était lancé, cette fonction arrête le compteur, le remet à 0 et retire l'événement associé.

Voir aussi

COUNTER_S

COUNTEREVENT

COUNTERSET

STARTCOUNTER

STOPCOUNTER


COUNTER_S

Syntaxe

<Q> := COUNTER_S (<NumCounter>)

Type accepté

<NumCounte> : USINT
<Q> : UDINT

Description

Cette fonction retourne la valeur courante du compteur.
<NumCounter> : N° de compteur (0 à 63)

Voir aussi

COUNTER

COUNTEREVENT

COUNTERSET

STARTCOUNTER

STOPCOUNTER


COUNTEREVENT

COUNTEREVENT  Associe un événement au compteur

Syntaxe

COUNTEREVENT (<NumCounter>, <Modulo>, <Event>, <Param>, <Use_modulo>)

Type accepté

<NumCounter> : USINT
<Modulo> : UDINT
<Event> : UINT
<Param> : UDINT
<Use_modulo> : BOOL

Description

Cette fonction permet d'associer un événement à un compteur
<NumCounter> : N° de compteur (0 à 63)
<Modulo> : Modulo/Déclenchement du compteur
<Event> : N° d'événement à lancer (0 si aucun événement)
<Param> : Paramètre à passer à l'événement
<Use_modulo> : Utiliser la valeur du modulo

En mode compteur :
Lorsque le compteur atteint "modulo", l'événement est lancé (sauf si 0).
La valeur du compteur est remise à 0 si use_modulo est TRUE
En mode décompteur :
Lorsque le compteur atteint "0", l'événement est lancé (sauf si 0).
La valeur du compteur est remise à modulo-1 si use_modulo est TRUE

Remarques

Il existe un seul événement par compteur, un 2ème appel sur le même compteur remplace l'événement affecté à ce compteur.

En modulo, le compteur va de 0 à modulo-1, si le compteur est initialisé à une valeur en dehors du modulo, il n'y reviendra que lorsqu'il ré atteindra la valeur naturelle du modulo

Voir aussi

COUNTER

COUNTER_S

COUNTERSET

STARTCOUNTER

STOPCOUNTER


COUNTERSET

Syntaxe

COUNTERSET (<NumCounter>, <Valeur>)

Type accepté

<NumCounter> : USINT
<Valeur> : UDINT

Description

Cette fonction pré positionne un compteur à une valeur donnée
<NumCounter> : N° de compteur (0 à 63)
<Valeur> : Valeur à donner au compter

Voir aussi

COUNTER

COUNTER_S

COUNTEREVENT

STARTCOUNTER

STOPCOUNTER


CTD

CTD  Décompteur

Syntaxe

CTD(<CD >,< LOAD >,< PV>)
CTD.<Q>
CTD.<CV>

Types acceptés

<CD> : bool
<LOAD> : bool
<PV> : int
<Q> : bool
<CV> : int

Description

Permet de réaliser un bloc fonction décompteur
<CD> est l'entrée de décomptage. Le compteur est décrémenté à chaque front montant de CD
<LOAD> est la valeur de chargement. Le compteur est forcé à PV si LOAD = TRUE
<PV> est la valeur maximum programmée
<Q> est à TRUE si le comptage est terminé, c'est-à-dire si CV = 0
<CV> est la valeur courante du compteur

Remarque

A l'initialisation, le compteur à est chargé à la valeur "0".

Exemple ST

(* MyCounter est une instance déclarée du bloc CTD *)
MyCounter(CD:=0,LOAD:=1,PV:=10); (* Initialisation du décompteur à la valeur 10 *)
MyCounter(LOAD:=0);
MyCounter(CD:=1);                (* CV = 9 *)
MyCounter(CD:=0);
MyCounter(CD:=1);                (* CV = 8 *)
Q_BOOL := MyCounter.Q;
CV := MyCounter.CV;

Exemple LD

Exemple FBD

Exemple IL

(* MyCounter est une instance déclarée du bloc CTD *)

Op1: CAL MyCounter(CD:=0,LOAD:=1,PV:=10)
     CAL MyCounter(LOAD:=0)
     CAL MyCounter(CD:=1)
     CAL MyCounter(CD:=0)
     CAL MyCounter(CD:=1)
     LD  MyCounter.Q
     ST  Q_BOOL
     LD  MyCounter.CV
     ST  CV

Voir aussi

CTU

CTUD


CTU

CTU  Compteur

Syntaxe

CTU(<CU>,< RESET >,< PV>)
CTU.<Q>
CTU.<CV>

Types acceptés

<CD> : bool
<RESET> : bool
<PV> : int
<Q> : bool
<CV> : int

Description

Permet de réaliser un bloc fonction compteur
<CD> esrt l'entrée de comptage. Le compteur est incrémenté à chaque front montant de CD
< RESET > est la valeur de chargement. Le compteur est forcé à PV si LOAD = TRUE
<PV> est la valeur maximum programmée
<Q> est à TRUE si le comptage est terminé, c'est-à-dire si CV = 0
<CV> est la valeur courante du compteur

Remarque

A l'initialisation, le compteur à est chargé à la valeur "0".

Exemple ST

(* MyCounter est une instance déclarée du bloc CTU *)
MyCounter(CD:=0,LOAD:=1,PV:=0); (* Initialisation du compteur à la valeur 0*)
MyCounter(LOAD:=0);
MyCounter(CD:=1);                 (* CV = 1 *)
MyCounter(CD:=0);
MyCounter(CD:=1);                (* CV = 2 *)
Q_BOOL := MyCounter.Q;
CV := MyCounter.CV;

Exemple LD

Exemple FBD

Exemple IL

(* MyCounter est une instance déclarée du bloc CTU *)
Op1: CAL MyCounter(CD:=0,LOAD:=1,PV:=0)
     CAL MyCounter(LOAD:=0)
     CAL MyCounter(CD:=1)
     CAL MyCounter(CD:=0)
     CAL MyCounter(CD:=1)
     LD  MyCounter.Q
     ST  Q_BOOL
     LD  MyCounter.CV
     ST  CV

Voir aussi

CTD

CTUD


CTUD

CTUD  Compteur/Décompteur

Syntaxe

CTUD(<CU>,<CD>,< RESET >,<LOAD>,< PV>)
CTUD.<QU>
CTUD.<QD>
CTUD.<CV>

Types acceptés

<CU> : bool R_EDGE
<CD> : bool R_EDGE
< LOAD > : bool
< RESET > : bool
<PV> : int
<QU> : bool
<QD> : bool
<CV> : int

Description

Permet de réaliser un bloc fonction compteur ou décompteur
<CU> est l'entrée de comptage. Le compteur est incrémenté à chaque front montant de Cu
<CD> est l'entrée de décomptage. Le compteur est décrémenté à chaque front montant de CD
< RESET > est la valeur de chargement. Le compteur est forcé à PV si RESET = TRUE
< LOAD > est la valeur de chargement. Le compteur est forcé à PV si LOAD = TRUE
<PV> est la valeur maximum programmée
<QU> est à TRUE si le comptage est terminé, c'est-à-dire si CV >= PV
<QD> est à TRUE si le comptage est terminé, c'est-à-dire si CV <= 0
<CV> est la valeur courante du compteur

Remarque

A linitialisation, le compteur à est chargé à la valeur "0".

Exemple ST

(* MyCounter
 est une instance déclarée du bloc CTUD *)
MyCounter(CU :=0 ;CD:=0, RESET :=1,LOAD:=0,PV:=10); (* Initialisation
 du décompteur à la valeur 10 *)
MyCounter(RESET:=0);
MyCounter(LOAD:=0);
MyCounter(CD:=1);
 (* CV = 9 *)
MyCounter(CD:=0);
MyCounter(CD:=1);
 (* CV = 8 *)
MyCounter(CU:=1);
 (* CV = 9 *)
Q_BOOL := MyCounter.Q;
CV := MyCounter.CV;

Exemple LD

Exemple FBD

Exemple IL

(* MyCounter est une instance déclarée du bloc CTUD *)
Op1: CAL MyCounter(CU:=0,CD:=0, RESET:=1;LOAD:=0,PV:=10)
     CAL MyCounter(RESET:=0)
     CAL MyCounter(LOAD:=0)
     CAL MyCounter(CD:=1)
     CAL MyCounter(CD:=0)
     CAL MyCounter(CD:=1)
     CAL MyCounter(CU:=1)
     LD  MyCounter.Q
     ST  Q_BOOL
     LD  MyCounter.CV
     ST  CV

Voir aussi

CTU

CTD


CURRENT

Syntaxe

CURRENT (<Axe>, <Expression>)

Unité

<Expression> en A

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette instruction force la consigne de courant.
<Axe> : Nom de l'axe
<Expression> contient la valeur à appliquer.

Exemple ST

CURRENT (Axe_X, 5.20); (* Courant de 5.2 A *)

Voir aussi

TORQUE

TORQUE_S

CURRENT_S

SPEED

SPEED_S


CURRENT_S

Syntaxe

<Q> := CURRENT_S (<Axe>)

Unité

<Q> en A

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne le courant actuel.
<Axe> : Nom de l'axe

Voir aussi

TORQUE

TORQUE_S

CURRENT

SPEED

SPEED_S


DAC

DAC  Sorties analogiques

Syntaxe

DAC (<Axe>, <Expression>)

Unité

<Expression > : Volts

Limites

<Expression> : de -10 à +10

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction envoie une tension sur une sortie analogique d'un variateur IMD.
<Axe> Nom de l'axe

Exemple ST

DAC(Axe_X, 5.2);

Voir aussi

ADC


DAC_S

Syntaxe

<Value> := DAC_S (<Axe>)

Unité

<Value> : Volts

Limites

<Value> : de -10 à +10

Types acceptés

<Axe> : tPeripheral
<Value> : REAL

Description

Cette fonction retourne la valeur de la sortie analogique d'un variateur IMD.
<Axe> Nom de l'axe

Exemple ST

TensionX := DAC_S(Axe_X);

Voir aussi

ADC


DEC

DEC  Modifie la décélération

Syntaxe

DEC (<Axe>, <Expression>)

Unité

<Expression> en unité utilisateur par s² (Ex : mm/s², degré/s², tr/s²)

Limite

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral

<Expression> : REAL

Description

Cette instruction modifie la décélération courante
<Axe> : Nom de l'axe
<Expression> contient la valeur à appliquer

Remarque

La décélération courante peut être modifiée à tout moment.

Exemple ST

DEC(AXE_X, 500.0) ; (*Décélération de 500 unités/s²*)

Voir aussi

ACC*ACC

VEL

DEC_T

DECP


DEC_T

DEC_T  Renvoie la décélération

Syntaxe

<Variable> := DEC_T(<Axe>)

Unité

<Variable> en unité utilisateur par s² (Ex : mm/s², degré/s², tr/s²)

Limite

<Variable> est supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Variable> : REAL

Description

Cette instruction retourne la décélération courante.
<Axe> : Nom de l'axe
<Expression> contient la valeur retournée par la fonction

Remarques

La décélération courante peut être lue à tout moment.

Exemple ST

DEC (Axe_X, 500.0);      (* Décélération de 500 unités/s² *)
DecX : = DEC_T (Axe _X); (* DecX=500*)

Voir aussi

ACC_T

VEL_T

DEC

DECP


DECP

DECP  Décélération en pourcentage

Syntaxe

DECP (<Axe>, <Expression>)

Limites

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction ajuste la décélération courante en pourcentage du paramètre de décélération par défaut définie dans le profil de l'axe.
<Axe> : Nom de l'axe
<Expression> contient le pourcentage à appliquer

Exemple ST

DECP (Axe_X, 10.0); (*10% de la décélération définie dans le profil de vitesse *)

Voir aussi

ACCP

VELP

DEC

DEC_T


DELAY

DELAY  Attente passive

Syntaxe

DELAY <Durée>

Unité

<Durée> : millisecondes

Type accepté

Durée : UDINT

Description

Cette fonction réalise une attente suivant la durée spécifiée.
Elle endort la tâche et provoque le basculement vers la tâche suivante.

Attention :

Cette instruction peut être utilisée dans tout type de tâche, cependant son utilisation dans une tâche TIMER ou événementielle peut entraîner le déclenchement du chien de garde de celle-ci.

Exemple

DELAY(500);     (* Délai de 0.5 s. *)
DELAY(Tempo1) ;


DELETE

DELETE  Supprime des caractères dans une chaîne

Motion Studio ne met pas en application la fonction DELETE.


DINT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


DISABLERECALE

DISABLERECALE  Désactivation du recalage

Syntaxe

DISABLERECALE (<Axe>, <Source> )

Types acceptés

<Axe> : tPeripheral
<Source> : tSrcPos

Description

Cette fonction annule le recalage automatique d'un axe sur un capteur.


DISPLAY

DISPLAY  Afficheur 7 segments

Syntaxe

DISPLAY <Expression>

Type accepté

<Expression> : BYTE

Description

Cette instruction fixe l'état de l'afficheur status du MPC

Remarque

Chaque bit de <Expression> représente un segment.
Le bit b8 n'est pas utilisé.

Exemple ST

Display (109); (* Affiche 5 sur lafficheur *)


DIV

DIV- Division (langage IL)

Voir Division


DO

Voir FOR et WHILE


DWORD

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


ELSE

Voir IF


ELSIF...THEN

ELSIF

Voir IF


ENABLERECALE

ENABLERECALE  Fonction de recalage automatique

Syntaxe

ENABLERECALE (<Axe>, <Source>, <RefEntrée>, <Front>, <Fenêtre>, <Min>, <Max>, <Position>, <Acceleration>)

Types acceptés

<Axe> : tPeripheral
<Source> : tSrcPos
<RefEntrée> : tIObitIn
<Front> : USINT
<Fenêtre> : tCapType
<Mini> : REAL
<Maxi> : REAL

<Position> : REAL

<Acceleration> : REAL

Description

Cette fonction recale automatiquement un axe sur un capteur.

Cette fonction ne doit pas être utilisée avec des axes synchronisés

Elle permet de remédier au problème d'un rapport de réduction non entier ou fractionnaire (Pi)

Elle s'utilise avec les fonctions de positionnement tel que : STTA, STTR, MOVR, MOVA

<Axe> : nom de l'axe
<Source> : permet de sélectionner la source de la capture.
<RefEntrée> : Référence de l'entrée de type BIT déclarée dans l'éditeur E/S.
<Front> : 1 pour front montant ou 0 pour front descendant.
<Fenêtre> : type de fenêtre.
<Mini> doit toujours être inférieur à <Maxi>.

<Position> : indique la position à laquelle se trouve théoriquement le capteur et que l'on mettra dans le compteur. Pour une remise à zéro on indique 0.

<Acceleration> : comme pour la fonction MASTEROFFSET permet une application progressive du recalage


END_CASE

Voir CASE


END_FOR

Voir FOR


END_IF

Voir IF


END_REPEAT

Voir REPEAT


END_TYPE

Voir les sections de déclaration et les types redéfinis.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.

Les mots-clefs TYPE et END_TYPE ne doivent pas être inséré dans des blocs VAR ... END_VAR, mais dans les fichiers de déclaration de type au niveau du projet.


END_VAR

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


END_WHILE

Voir WHILE


ENDCAM

ENDCAM  Arrêt d'une came

Syntaxe

ENDCAM(<Esclave>)

Types acceptés

<Esclave> : tPeripheral

Description

Cette fonction permet d'arrêter le mouvement de l'axe <Esclave> à la fin de la came.
Elle diffère de la fonction STOP qui met fin au mouvement immédiatement.
<Esclave> : Nom de l'axe

Remarques

Si ENDCAM s'applique à une came qui a été déclarée en mode non mono-coup et enchaînée avec une autre, la came termine son profil et enchaîne sur la suivante.

Voir aussi

STOP


EQ

EQ  Egalité (langage IL)

Voir Egalité


EXIT

EXIT  Abandonne un énoncé itératif

Syntaxe

EXIT

Description

Lénoncé EXIT indique que la boule courante (WHILE, REPEAT ou FOR) doi être quittée.
Lexécution est déroutée après linstruction END_WHILE, END_REPEAT ou END_FOR de la boucle où EXIT est inséré.
EXIT se rapporte à une boucle uniquement et ne peut pas être utilisé pour quitter plusieurs boucles imbriquées

Exemple ST:

VAR
 start: INT :=0;
 summe: INT :=0;
 ende : INT := 10;
END_VAR

FOR Start:=1 TO Ende BY 2 DO
Summe := Summe + 1;
IF Summe > 4 THEN
EXIT;
END_IF;
END_FOR;
(* Will continue here *)

Voir aussi

IF

WHILE

REPEAT

FOR

CASE


EXP

EXP  Exponentiel

Syntaxe

<Q> := EXP (<IN>)

Types acceptés

(<IN>) : REAL
(<Q>) : REAL

Description

Cette fonction restitue la base des logarithmes naturels élevée à la puissance (<Expression>).
L'argument (<Expression>) doit être une expression numérique valide. La valeur retournée est de type réel.

Remarques

En langage LD et FBD, plusieurs fonctions EXPS sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultant courant avant l'appel de la fonction.

Exemple ST

Q :=EXP (IN);

Exemple FBD

Exemple LD

(*La fonction est exécutée seulement si EN est TRUE*°
(*ENO a la même valeur que EN*°

Exemple IL

Op1: LD  IN
     EXP
     ST  Q

Voir aussi

LOG


EXPT

EXPT  Puissance

Syntaxe

<Q> := EXPT (<IN>, <Exp>)

Types acceptés

<IN>, <Q> : ANY_REAL
<Exp> : ANY_NUML

Description

Cette fonction élève <IN> à la puissance (<Exp>).
L'argument (<Exp>) doit être une expression numérique valide. La valeur retournée est de type réel.

Remarques

En langage LD et FBD, plusieurs fonctions EXPT sont disponibles suivant le type de donnée.
En langage IL, la valeur d'entrée doit être chargée dans le résultant courant avant l'appel de la fonction.

Exemple ST

Q :=EXPT
 (IN1,IN2) ;
Q := IN1**IN2 ;

Exemple FBD

Exemple LD

(*La fonction est exécutée seulement si EN est TRUE*°
(*ENO a la même valeur que EN*°

Exemple IL

Op1: LD   IN1
     EXPT IN2
     ST   Q

Voir aussi

LOG


F_TRIG

F_TRIG  Détection de front descendant

Syntaxe

F_TRIG (<CLK>)
F_TRIG.Q

Types acceptés

<CLK> : BOOL
<Q> : BOOL

Description

Le bloc de fonction ´F_TRIG´ détecte l'état de l'entrée de commande ´CLK´.
Le changement d'état de ´1´ à ´0´ dans un cycle de process est détecté et indiqué dans le cycle suivant par l'activation de la sortie ´Q´.
La sortie est à "1" pendant le cycle où le changement de "CLK" est détecté et un front descendant est indiqué.

Exemple ST

(* F_TRIG1 est une instance déclarée du bloc F_TRIG *)
F_TRIG1(CLK:=IN_BOOL);
Q_BOOL:=F_TRIG1.Q;

Exemple FBD

Exemple LD

Exemple IL

(* F_TRIG est une instance déclarée du bloc F_TRIG *)
Op1:  CAL F_TRIG1(CLK:=IN_BOOL)
     LD  F_TRIG1.Q
     ST  Q_BOOL

Voir aussi

R_TRIG


FALSE

Valeur constante du type BOOL


FAULTAXIS_S

Syntaxe

<DrivFlagFault> := FAULTAXIS_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Value> : DWORD

Description

Cette fonction retourne l'état des bits de défauts d'un variateur IMD.
<Axe> Nom de l'axe

Exemple ST

Defauts:=FAULTAXIS_S(X);

If (Defauts.2<>0) Then

    (* DEFAUT SOUS TENSION *)

    Defaut:=2;

End_If;

InitSetResult(Defaut);

Voir aussi

ADC


FE_S

FE_S  Valeur de l'erreur de poursuite

Syntaxe

<Q> := FE_S(<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la valeur de l'erreur de poursuite courante.
<Axe> : Nom de l'axe

Remarques

Cette fonction est utilisée pour connaître la valeur courante de l'erreur de poursuite.
On peut ainsi vérifier le comportement de la régulation en temps réel.

Exemple ST

ValErrPoursuite := FE_S(Axe_X);
If (ValErrPoursuite>10.0) Then
    FlagDefautAxeX:=1;
End_If;

Voir aussi

FEMAX_S

SECURITY


FEMAX_S

FEMAX_S  Limite d'erreur de poursuite

Syntaxe

<Q> : = FEMAX_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique le dépassement de l'erreur de poursuite maximale.
<Axe> : Nom de l'axe

Remarques

Cette fonction est utilisée pour savoir quel axe est passé en erreur de poursuite.
Ce flag peut être traité dans une tâche de gestion des défauts.
Il est possible également de lire l'état des défauts d'un variateur IMD/IMDL :
READPARAM (Axe_X, IMD_FAULT_STATUS);
READPARAM (Axe_X, IMD_FAULT_STATUS2);

Exemple

IF FEMAX_S(Axe_X) THEN
    FlagDefautAxeX:=1;
End_If;
IF FEMAX_S(Axe_X) THEN
    FlagDefautAxeY:=1;
End_If;

Voir aussi

FE_S

SECURITY


FIND

FIND  Chercher la position de caractères dans une chaîne

Syntaxe

<Q> := FIND (<IN1>, <IN2>)

Types acceptés

<IN1> : STRING Chaîne de caractères
<IN2> : STRING Chaîne contenant la séquence de caractères à chercher
<Q> : INT Position du premier caractère de STR dans IN, ou 0 si la recherche a échoué

Description

Cette fonction permet de chercher la position de caractères dans une chaîne.
<IN1> est la chaîne de caractères à scanner
<IN2> est la chaîne contenant la séquence de caractères à chercher
<Q> est la position du premier caractère de <IN2> dans <IN1>, ou 0 si la recherche a échoué

Remarques

La première position valide est 1.
Une valeur de retour de 0 signifie que <IN2> n'a pas été trouvée.
La recherche tient compte de la casse.
En LD, le flux d'entrée (EN) valide l'opération, et le flux en sortie est inchangé.
En IL, le premier paramètre (la chaîne) doit être chargé dans le résultat courant avant l'appel de la fonction.
Le second paramètre est l'opérande de la fonction.

Langage ST

POS := FIND (IN, STR);

Langage FBD

Langage LD

(* La fonction est appelée si EN = TRUE *)
(* ENO est égal à EN *)

Langage IL

Op1: LD   IN
     FIND STR
     ST   POS

Voir aussi

+

MLEN

DELETE

INSERT

REPLACE

LEFT

RIGHT

MID


FILTERMASTER

FILTERMASTER  Applique un filtrage lors de mouvement synchronisé

Syntaxe

FILTERMASTER (<Type>)

Type accepté

<Type> : UINT

Description

Cette fonction permet d'appliquer différents types de filtrage lors de mouvement synchrone
Les valeurs de <Type> sont :
0 : aucun filtrage, la synchronisation est très rapide mais risque de forts à coup si le ratio est élevé (pour 1 tour maître, l'esclave fait plusieurs tours)
1 : filtrage standard (par défaut)
2 : grâce à une faible constante de temps et un filtrage avancé, la synchronisation garde une réponse assez rapide et diminue fortement les à coup (en particulier pour les ratios élevés)
3 : grâce à une constante de temps élevée et un filtrage avancé, la synchronisation élimine très fortement les à coups mais perd en précision (augmente le temps de réponse)
4 : Filtrage par interpolation pour les forts ratios où la vitesse maître varie peu.
5 : Filtrage avancés par interpolation pour les forts ratios où la vitesse maître varie peu, la synchronisation élimine très fortement les à coups mais perd en précision (augmente le temps de réponse)


FIXTOREAL

Syntaxe

<Q> := FIXTOREAL (<IN>, <PREC>, <INV>)

Type acceptés

<IN> : UDINT
<PREC> : USINT
<INV> : BOOL
<Q> : REAL

Description

Cette fonction convertit un nombre à virgule fixe (UDINT) en réel avec la précision indiquée en réel.

<INV> à TRUE, permet d'inversés le poids fort (16bits) et le poids faible (16bits) avant de transformer <IN> en réel.

Langage ST

Valeur := FIXTOREAL (123, 2, 0); (* Valeur = 1.23 *)


FLASHOK_S

Syntaxe

<Q> := FLASHOK_S (0)

Types acceptés

<Q> : BOOL

Description

Cette fonction retourne l'état de la dernière copie en mémoire FLASH du MPC

Voir aussi

RAMTOFLASH

CLEARFLASH


FOR

FOR  Boucle FOR

Syntaxe

FOR <index> := <minimum> TO <maximum> BY <step> DO
    <instructions>
END_FOR

Types acceptés

<index>, <minimum>, <maximum>, <step> : SINT, INT ou DINT

Description

Cette instruction permet de répéter un groupe d'instructions un nombre fini de fois.
<index> est utilisée comme index
<minimum> est utilisée comme valeur initiale d'index
<maximum>est utilisée comme valeur maximum autorisé pour l'index
<step> est le pas d'incrément de l'index après chaque itération (1 par défaut)

Remarques

La mention "BY <step>" peut être omise. Dans ce cas le pas d'incrément est 1.

Attention

Il est possible de créer des boucles infinies si les valeurs <maximum> correspondent au maximum du type de l'<index>, "For index:=0 to 255" avec index du type SINT provoque une boucle infini

Exemple ST

iArrayDim
 := 10;
(* force à 0 tous les éléments d'un tableau *)
FOR iPos := 0 TO (iArrayDim - 1) DO
MyArray[iPos] := 0;
END_FOR;

(* force à 1 tous les éléments aux index impairs *)
FOR iPos := 1 TO 9 BY 2 DO
    MyArray[ipos] := 1;
END_FOR;

Exemple FBD

Non disponible

Exemple LD

Non disponible

Exemple IL

Non disponible

Voir aussi

IF

WHILE

REPEAT

CASE

EXIT


FRAC - Partie fractionnelle

Syntaxe

<Q> := FRAC (<Expression>)

Type accepté

<Expression> : REAL

Description

Cette fonction restitue la partie fractionnelle de <Expression>.

Remarque

Cette fonction restitue une valeur réelle.

Voir aussi

INTP


GE

GE  Supérieur ou égale (langage IL)

Voir Supérieur ou égal


GEARBOX

GEARBOX  Arbre électrique

Syntaxe

GEARBOX(<Esclave>, < Maître>, <SourceMaître>, <Num_Esclave>, <Dén_Maître>, <Réversible>, <Accélération>)

Unités

<Num_Esclave> dans l'unité de l'esclave
<Dén_Maître> dans l'unité du maître

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<SourceMaître> : tSrcPos
<Num_Esclave> : REAL
<Dén_Maître> : REAL
<Réversible> : BOOL
<Accélération> : REAL

Description

Cette fonction lie 2 axes en arbre électrique.

En phase plateau le ratio est tel que pour une distance de <Dén_Maître>, l'esclave parcoure <Num_Esclave>.
< Esclave > nom de l'axe esclave.
< Maître > nom de l'axe maître.
<SourceMaître> : permet de sélectionner la source du <Maître>.
Le rapport de l'arbre est défini par <Num_Esclave> / <Dén_Maître> :
<Réversible>est un booléen qui indique que l'arbre est réversible.

  • Si Reversible = TRUE
    L'esclave est lié au maître quelque soit le sens du maître.
    La phase d'accélération doit être terminée (distance d'accélération à parcourir dans un des sens) pour que le ratio défini par <Num_Esclave> / <Dén_Maître> soit atteint.
    La phase d'accélération est entièrement réversible, y compris si le maître part en sens avant ou arrière (position résolveur bruitée).
    Ratio :

    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.
    Le signe de <Dén_Maître> n'a aucun effet

  • Si Réversible = FALSE
    L'esclave est lié au maître uniquement dans le sens d'accélération du maître.

    L'autre sens n'est pas pris en compte mais mémorisé et la même distance devra être re-parcourue dans le sens d'accélération avant de ré-embrayer la synchronisation.

    Le ré-embrayage de l'esclave peut être très violent !
    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.
    Le sens d'accélération du maître se fait suivant le signe de <Dén_Maître>.

<Accélération> est un paramètre qui permet de définir une phase d'accélération du maître.

Remarque

Le lancement d'un gearbox peut être déclenché (TRIGGER).
L'instruction est non-bloquante sauf si le buffer de mouvement est plein.
La liaison établie entre maître et esclave est valide tant que l'instruction STOP(esclave) ou AXIS(esclave)=OFF n'a pas été activée.
Une valeur nulle de <Dénominateur> provoque une erreur LZS.
Le signe de <Accélération> est ignoré car il est systématiquement pris dans le sens d'avance.

Exemple ST

(* Maitre : 360° par tour, modulo de 360 *)
(* Esclave : 25.4mm/tour *)
(* Un ratio de 25.4 (num)/360(den) correspond à : 1 tour esclave pour un tour maître *)
GEARBOX(Axe_X, Axe_Y, SRC_AXE, 25.4, 360.0, 1, 0.0) ;

Voir aussi

CAM

CAMBOX

MOVS

STOP

AXIS


GEARBOX2

Syntaxe

GEARBOX2(<Esclave >, < Maître >, <SourceMaître>, <Num_Esclave>, <Dén_Maître>, <Réversible>, <Accélération>, <Direction>, <Seuil_Embrayage>)

Unités

<Num_Esclave> dans l'unité de l'esclave
<Dén_Maître> dans l'unité du maître

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<SourceMaître> : tSrcPos
<Num_Esclave> : REAL
<Dén_Maître> : REAL
<Réversible> : BOOL
<Accélération> : REAL
<Direction> : USINT
<Seuil_Embrayage> REAL

Description

Cette fonction lie 2 axes en arbre électrique.

GEARBOX2 permet d'ajouter une distance <Seuil_Embrayage> à parcourir avant d'embrayer l'axe (le paramètre <Direction> permet de définir le type de seuil d'embrayage).

En phase plateau le ratio est tel que pour une distance de <Dén_Maître>, l'esclave parcoure <Num_Esclave>.
< Esclave > nom de l'axe esclave.
< Maître > nom de l'axe maître.
<SourceMaître> : permet de sélectionner la source du <Maître>.
Le rapport de l'arbre est défini par <Num_Esclave> / <Dén_Maître> :
<Réversible>est un booléen qui indique que l'arbre est réversible.

  • Si Reversible = TRUE
    L'esclave est lié au maître quelque soit le sens du maître.
    La phase d'accélération doit être terminée (distance d'accélération à parcourir dans un des sens) pour que le ratio défini par <Num_Esclave> / <Dén_Maître> soit atteint.
    La phase d'accélération est entièrement réversible, y compris si le maître part en sens avant ou arrière (position résolveur bruitée).
    Ratio :

    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.
    Le signe de <Dén_Maître> n'a aucun effet

  • Si Réversible = FALSE
    L'esclave est lié au maître uniquement dans le sens d'accélération du maître.

    L'autre sens n'est pas pris en compte mais mémorisé et la même distance devra être re-parcourue dans le sens d'accélération avant de ré-embrayer la synchronisation.

    Le ré-embrayage de l'esclave peut être très violent !
    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.
    Le sens d'accélération du maître se fait suivant le signe de <Dén_Maître>.

<Accélération> est un paramètre qui permet de définir une phase d'accélération du maître.

<Direction> permet de définir le mode d'utilisation du seuil d'embrayage:

2 : le maître doit avancer de plus de la distance <Seuil_Embrayage> pour déclencher l'arbre électrique.

1 : le maître doit reculer de plus de la distance <Seuil_Embrayage> pour déclencher l'arbre électrique.

0 : embrayage immédiat.

<Seuil_Embrayage> est la distance à parcourir avant d'embrayer l'axe.

Remarque

Le lancement d'un gearbox peut être déclenché (TRIGGER).
L'instruction est non-bloquante sauf si le buffer de mouvement est plein.
La liaison établie entre maître et esclave est valide tant que l'instruction STOP(esclave) ou AXIS(esclave)=OFF n'a pas été activée.
Une valeur nulle de <Dénominateur> provoque une erreur LZS.
Le signe de <Accélération> est ignoré car il est systématiquement pris dans le sens d'avance.

Exemple ST

(* Maître : 360° par tour, modulo de 360 *)
(* Esclave : 25.4mm/tour *)
(* Un ratio de 25.4 (num)/360(den) correspond à : 1 tour esclave pour un tour maître *)
GEARBOX2 (Axe_X, Axe_Y, SRC_AXE, 25.4, 360.0, 1, 0.0, 0, 0.0) ;

Voir aussi

CAM

CAMBOX

MOVS

STOP

AXIS


GEARBOXRATIO

GEARBOXRATIO  Change le rapport de réduction d'un arbre électrique

Syntaxe

GEARBOXRATIO (<AxeEsclave>, <Num_Esclave>, <Dén_Maître>, < Acceleration >)

Unités

<Numérateur> dans l'unité de l'esclave
<Dénominateur> dans l'unité du maître

Types acceptés

<AxeEsclave> : tPeripheral
<Num_Esclave> : REAL
<Dén_Maître> : REAL
<Acceleration> : REAL

Description

Cette fonction modifie le rapport (ratio) de la liaison arbre électrique.
<AxeEsclave> : Nom de l'axe esclave
Le rapport de l'arbre est défini par <Num_Esclave> / <Dénominateur> :

  • Si le GEARBOX est réversible :
    Le ratio est pris en compte quelque soit le sens de déplacement du maître.
    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.
    Si le GEARBOX n'est pas réversible :

  • Le ratio est pris en compte seulement dans le sens d'avance de maître.
    Si le signe de <Num_Esclave> est positif, l'esclave va dans le même sens qu'un STTIP sur son axe.

<Accélération> est un paramètre qui permet de définir une phase d'accélération du maître.

Remarque

La fonction est prise en compte seulement lorsque le GEARBOX a terminé sa phase d'accélération sinon il est ignoré.
L'instruction est non-bloquante sauf si le buffer de mouvement est plein.
La liaison établie entre maître et esclave est valide tant que l'instruction STOP(esclave) ou AXIS(esclave)=OFF n'a pas été activée.
Le signe de <Num_Esclave> est ignoré car il est systématiquement pris dans le sens d'avance.
Le signe de <Dén_Maître> est ignoré.
Une valeur nulle de <Dén_Maître> provoque une erreur LZS.

Exemple ST

WAIT (GEARBOXRATIO_S(Axe_X));
GEARBOXRATIO(Axe_X,1.0,1.0,0.0);

Voir aussi

CAM

CAMBOX

MOVS

STOP

AXIS


GEARBOXRATIO_S

GEARBOXRATIO_S  Etat du changement de ratio

Syntaxe

<Q> = GEARBOXRATIO_S (<Axe_X>)

Types Acceptés

<Axe_X> : tPeripheral
<Q> : BOOL

Description

Cette fonction renvoie TRUE si un changement de ratio est possible
<Axe_X> : Nom de l'axe

Exemple

WAIT (GEARBOXRATIO_S (Axe_X));
GEARBOXRATIO (Axe_X, 1.0, 1.0, 0.0);

Voir aussi

CAM

CAMBOX

MOVS

STOP

AXIS


GETBITB

GETBITB  Retourne un bit d'une variable BYTE

Syntaxe

<Q> := GETBITB (<Data>, <Num>)

Limite

<Num> doit être entre 0 et 7

Types acceptés

<Data> : BYTE
<Num> : USINT
<Q> : BOOL

Description

Cette fonction retourne la valeur d'un bit d'une variable BYTE.


GETBITD

GETBITD  Retourne un bit d'une variable DWORD

Syntaxe

<Q> := GETBITD (<Data>, <Num>)

Limite

<Num> doit être entre 0 et 31

Types acceptés

<Data> : DWORD
<Num> : USINT
<Q> : BOOL

Description

Cette fonction retourne la valeur d'un bit d'une variable DWORD.


GETBITW

GETBITW  Retourne un bit d'une variable WORD

Syntaxe

<Q> := GETBITW (<Data>, <Num>)

Limite

<Num> doit être entre 0 et 15

Types acceptés

<Data>: WORD
<Num>: USINT
<Q>: BOOL

Description

Cette fonction retourne la valeur d'un bit d'une variable WORD.


GETLASTSYSEVENT

GETLASTSYSEVENT  Retourne le dernier événement de la pile système

Syntaxe

<Q> := GETLASTSYSEVENT ( 0 )

Type accepté

<Q> : UINT

Desccription

Cette fonctionne retourne le dernier événement de la pile système :
1 : Erreur Chien de garde : une tâche configuré avec chien de garde et que le paramètre "Action du chien garde" soit "Evénement système"
2 : Erreur Ethercat
3 : Erreur LZS
4 : Erreur de Lecture Ecriture : erreur avec les fonctions READ, WRITE, READR, WRITER, READPARAM, WRITEPARAM, READPARAMR, WRITEPARAMR
5 : Erreur Init Task error : erreur lors de l'exécution de la tâche d'init
6 : Erreur NodeGuarding slave : erreur déclenchée par le nodeguarding esclave/ serveur local (le MPC n'a pas reçu de paquet NodeGuarding d'un maître distant avant le timeout)
7 : Erreur CAN Hard
8 : Erreur NodeGuarding master : erreur déclenchée par le NodeGuarding d'un noeud distant (un noeud distant n'a pas répondu à la requête NodeGuarding du MPC)

Remarque

Le dépassement de la pile d'événements système provoque l'erreur E54.52

Voir aussi

GETSYSTEMEVENT

GETUSEREVENTPARAM

SETTASKEVENTLIST

SIGNAL


GETMODE

Syntaxe

<Q> := GETMODE (<Axe>)

Type accepté

<Axe> : tPeripheral
<Q> : tBcleMode

Description

Cette fonction retourne le mode de fonctionnement d'un axe.
<Axe> : Nom de l'axe

<Q> : Mode de fonctionnement de l'axe

Voir aussi

SETMODE


GETSYSTEMEVEN

GETSYSTEMEVENT  Retourne le premier événement de la pile système

Syntaxe

<Q> := GETSYSTEMEVENT ( 0 )

Type accepté

<Q> : UINT

Desccription

Cette fonctionne retourne et dépile l'événement système le plus ancien ayant eu lieu:
1 : Erreur Chien de garde : une tâche configuré avec chien de garde et que le paramètre "Action du chien garde" soit "Evénement système"
2 : Erreur Ethercat
3 : Erreur LZS
4 : Erreur de Lecture Ecriture : erreur avec les fonctions READ, WRITE, READR, WRITER, READPARAM, WRITEPARAM, READPARAMR, WRITEPARAMR
5 : Erreur Init Task error : erreur lors de l'exécution de la tâche d'init
6 : Erreur NodeGuarding slave : erreur déclenchée par le NodeGuarding esclave/ serveur local (le MPC n'a pas reçu de paquet NodeGuarding d'un maître distant avant le timeout)
7 : Erreur CAN Hard
8 : Erreur NodeGuarding master : erreur déclenchée par le NodeGuarding d'un noeud distant (un noeud distant n'a pas répondu à la requête NodeGuarding du MPC)

Remarque

Le dépassement de la pile d'événements système provoque l'erreur E54.52

Voir aussi

GETLASTSYSEVENT

GETUSEREVENTPARAM

SETTASKEVENTLIST

SIGNAL


GETUSEREVENTPARAM

GETUSEREVENTPARAM - Récupère le paramètre associé au dernier événement

Syntaxe

<Param> := GETUSEREVENTPARAM ( 0 )

Type accepté

<Prama> : UDINT

Description

Cette fonction récupère le paramètre associé au dernier événement reçu.
<Param> : Paramètre

Voir aussi

GETLASTSYSEVENT

GETSYSTEMEVENT

SETTASKEVENTLIST

SIGNAL


GT

GT  Supérieur (langage IL)

Voir Supérieur


HALT

HALT  Arrête une tâche

Syntaxe

HALT(<Tache>, <Synchro>)

Types acceptés

<Tâche> : tGroup
<Synchro> : UDINT

Description

Cette instruction est utilisée pour stopper une tâche en cours d'exécution ou suspendue.
<Tâche> est le nom de la tâche à arrêter.
<Synchro> permet de définir l'arrêt des tâches TIMER :

· 0 pour un arrêt immédiat
· 1 pour un arrêt à la fin du cycle de la tâche

Remarques

Cette fonction n'a pas d'effet sur une tâche déjà arrêtée.
Elle n'affecte pas les mouvements en cours ni les buffers de mouvements.

Seule la valeur "1" est utilisable pour les tâches cycliques


HOME

HOME  Prise d'origine

Syntaxe

HOME(<Axe>, <Type>)

Types acceptés

<Axe> : tPeripheral
<Axe> : Nom de l'axe
<Type> : SINT

Description

La Prise d'origine permet au système de déterminer l'origine de mesure de l'axe, celle-ci étant perdue à chaque coupure d'alimentation.

La prise d'origine machine (P.O.M) permet de référencer la position moteur par rapport à une position de la mécanique.

Différents types de POM sont disponibles : immédiat, sur capteur, avec dégagement.

Un cycle de POM force le compteur de position moteur à une valeur "Zéro Programme".

<Axe> : Nom de l'axe
<Type> :

  • -1 : Type de prise d'origine paramétré dans le profil

  • 0 : Immédiate - l'axe revient à sa valeur "Zéro Programme"

  • 1 : Sur TOP Z
    Le moteur n'effectue aucun déplacement mais sa position est re-calculée par rapport au Top Z moteur et à la valeur "Zéro Programme".
    On obtient une position se situant entre +/- ½ tour ou référence +/- ½ tour moteur.

  • 2 : Sur capteur, en sens +, sans dégagement
    Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME de l'axe.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 3 : Sur capteur, en sens +, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens - pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME pour forcer la position à la valeur "Zéro Programme" et le moteur s'arrête à cette position.

  • 4 : Sur capteur, en sens -, sans dégagement
    Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 5 : Sur capteur, en sens -, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME pour forcer la position à la valeur "Zéro Programme" et le moteur s'arrête à cette position.

  • 6 : Sur capteur et TOP Z, en sens +, sans dégagement
    Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 7 : Sur capteur et TOP Z, en sens +, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens - pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 8 : Sur capteur et TOP Z, en sens -, sans dégagement
    Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 9 : Sur capteur et TOP Z, en sens -, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 10 : Initialise la position de l'axe avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

  • 11 : Remise à 0 de l'erreur de poursuite

Remarque

La fonction HOME est bloquante jusqu'à ce que la prise d'origine soit effectuée.
Un home prend en compte :

  • La position de prise d'origine (zéro Programme)

  • La vitesse de prise d'origine (paramètre _IMD_HOME_VELOCITY)

  • L'accélération et la décélération en cours sur l'axe

Ces mouvements ne modifient pas la vitesse courante de l'axe.

Exemple ST

HOME(Axe_X,0); (*Prise d'origine immédiate *)

Voir aussi

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


HOME_S

HOME_S  Résultat de la prise d'origine

Syntaxe

<Q> := HOME_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique l'état de la prise d'origine
<Axe> : Nom de l'axe

Remarque

Cette fonction est utilisée pour savoir si la prise d'origine a été effectuée ou non.
Pendant un cycle de prise d'origine, l'indicateur HOME_S est forcé en 0.
Dès que le cycle est terminé sans défaut, HOME_S passe à 1.

Exemple ST

WAIT (HOME_S(Axe_X)=1);

Voir aussi

HOME

HOMECANCEL

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


HOMEAUX

HOMEAUX  Prise d'origine sur l'auxiliaire

Syntaxe

HOMEAUX (<Axe>, <Type>)

Types acceptés

<Axe> : tPeripheral
<Type> : SINT

Description

Cette fonction permet de faire une prise d'origine sur l'auxiliaire d'un axe
<Axe> : Nom de l'axe
<Type> :

  • 0 : immédiate - l'auxiliaire revient à sa valeur "Zéro Programme"

  • 1 : Sur Top Z (la fonction attend le top Z sur l'entrée auxiliaire).

  • 2 : Sur capteur (la fonction attend un front montant sur le capteur HOME)

  • 3 : Sur capteur et Top Z (la fonction attend un niveau haut sur le capteur HOME et un top Z sur le codeur auxiliaire)

  • 4 : Initialise la position de l'auxiliaire avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

Remarque

La fonction HOMEAUX est bloquante jusqu'à ce que la prise d'origine soit effectuée.

Exemple ST

HOMEAUX(Axe_X,0); (*Prise d'origine immédiate sur l'auxiliaire*)

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUXCANCEL

HOMEAUX_S


HOMEAUX_S

HOMEAUX_S  Résultat de la prise d'origine sur l'auxiliaire

Syntaxe

<Q> := HOMEAUX_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique l'état de la prise d'origine sur l'auxiliaire
<Axe> : Nom de l'axe

Remarque

Cette fonction est utilisée pour savoir si la prise d'origine a été effectuée ou non sur l'auxiliaire
Pendant un cycle de prise d'origine, l'indicateur HOMEAUX_S est forcé en 0.
Dès que le cycle est terminé sans défaut, HOMEAUX_S passe à 1.

Exemple ST

WAIT (HOMEAUX_S(Axe_X)=1);

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUXCANCEL


HOMEAUXCANCEL

HOMEAUXCANCEL  Annule la prise d'origine sur l'auxiliaire

Syntaxe

HOMEAUXCANCEL (<Axe>)

Type accepté

<Axe> : tPeripheral

Description

Cette fonction permet d'annuler une prise d'origine en cours sur l'auxiliaire.
<Axe> : Nom de l'axe

Remarque

Cette fonction est utilisée dans une autre tâche que celle qui contient la fonction HOMEAUX

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUX_S


HOMEAUXREQUEST_S

HOMEAUXREQUEST_S  Etat de la prise d'origine sur l'auxiliaire

Syntaxe

<Q> := HOMEAUXREQUEST_S (<Axe>)

Type accepté

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique si une prise d'origine est en cours sur l'auxiliaire.
<Axe> : Nom de l'axe

Remarque

Pendant un cycle de prise d'origine, l'indicateur HOMEAUXREQUEST_S est mis à "1".
Dès que le cycle est entièrement terminé, HOMEAUXREQUEST_S passe à "0".

Exemple ST

STTHAUX (Axe_s,0);
WAIT (HOMEAUXREQUEST_S (Axe_X) =0);

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


HOMECANCEL

HOMECANCEL  Annule la prise d'origine

Syntaxe

HOMECANCEL (<Axe>)

Type accepté

<Axe> : tPeripheral

Description

Cette fonction permet d'annuler une prise d'origine en cours.
<Axe> : Nom de l'axe

Remarque

Cette fonction est utilisée dans une autre tâche que celle qui contient la fonction HOME.

Voir aussi

HOME

HOME_S

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


HOMEREQUEST_S

HOMEREQUEST_S  Etat de la prise d'origine

Syntaxe

<Q> := HOMEREQUEST_S (<Axe>)

Type accepté

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique si une prise d'origine est en cours
<Axe> : Nom de l'axe

Remarque

Pendant un cycle de prise d'origine, l'indicateur HOMEREQUEST_S est mis à "1".
Dès que le cycle est entièrement terminé, HOMEREQUEST_S passe à "0".

Exemple

STTH (Axe_s,0);
WAIT (HOMEREQUEST_S(Axe_X)=0);

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


ICORRECTION

ICORRECTION  fonction de compensation

Syntaxe

ICORRECTION (<Esclave>, <Maître>, <Source>, <Dist.maître>, <Dist.esclave>, <Dist. daccél>)

Unités

<Dist.maître>, <Dist.esclave> : unité utilisateur (Ex : mm, degré,)
<Dist.daccél> : unité utilisateur/s²

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<Dist.maître>, <Dist.esclave>, <Dist.daccél> : REAL

Description

Cette fonction permet d'appliquer un mouvement de correction sur un axe esclave pendant une distance de l'axe maître.
L'esclave devra au préalable être lié à un maître par une fonction d'arbre électrique (GEARBOX), de mouvement synchronisé (MOVS) ou came (CAM) avant de lancer une compensation. Au mouvement de synchronisation normal de l'esclave, on superpose le mouvement suivant : Pendant que le maître parcourt une «distance maître», on ajoute un déplacement «distance esclave» avec une accélération et une décélération sur une distance maître de «distance daccél».
Les fonctions STOP et STOPS permettent d'arrêter la compensation
<Esclave>, <Maître> : Nom d'axe
<Source> permet de sélectionner la source du <Maître>

Remarques

La fonction n'est pas prise en compte si une correction est déjà en cours
La fonction est bloquante si le buffer de mouvement est plein.

Voir aussi

CORRECTION_S

ICORRECTIONA


ICORRECTION_S

ICORRECTION_S  Etat de la compensation

Syntaxe

<Q> := ICORRECTION_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction permet de connaître l'état du cycle de compensation : retourne 1 si ICORRECTION est en cours d'exécution sinon renvoie 0.
<Axe> : Nom de l'axe

Voir aussi

ICORRECTION

ICORRECTIONA


ICORRECTIONA

ICORRECTIONA  Fonction de compensation

Syntaxe

ICORRECTIONA (<Esclave>, <Maître>, <Source>, <Pos.maître>, <Pos.esclave>,)

Unités

<Pos.maître>, <Pos.esclave> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<Pos.maître>, <Pos.esclave> : REAL

Description

Cette fonction permet de calculer et d'appliquer les compensations à effectuer pour se situer au point ad hoc.
L'esclave devra au préalable être lié à un maître par une fonction d'arbre électrique (GEARBOX), de mouvement synchronisé (MOVS) ou came (CAM) avant de lancer une compensation. Au mouvement de synchronisation normal de l'esclave, on superpose les mouvements nécessaire pour avoir la position maître = <Pos.maître> et la position esclave = < Pos.esclave >.
Les fonctions STOP et STOPS permettent d'arrêter la compensation
<Esclave>, <Maître> : Nom d'axe
<Source> permet de sélectionner la source du <Maître>

Remarque

Cette instruction tient compte des valeurs de SLAVEOFFSET et MASTEROFFSET actuelles.

La fonction est bloquante si le buffer de mouvement est plein.

Un ICORRECTIONA est appliqué de la même façon qu'un MASTEROFFSET et qu'un SLAVEOFFSET (soumis aux mêmes règles sur arrêt du mouvement ...)

Une séquence MOVS + ICORRECTIONA ne produira pas de décalage physique (lors de l'application du ICORRECTIONA, car il n'y a plus de mouvement dans le buffer).

Une séquence ICORRECTIONA + MOVS ne produira pas de décalage physique (lors de l'application du ICORRECTIONA, car le MOVS n'est pas encore dans le buffer de mouvement).

Une séquence MIOVS +ICORRECTIONA + MOVS produira l'effet escompté.

Exemple

WHILE (NOT Fin_Mvt)
MOVS(Axe_X,Axe_Y, SRC_AXE,100.0,50.0,0.0,.0.0) ;
MOVS(Axe_X,Axe_Y, SRC_AXE,200.0,250.0,0.0,.0.0) ;
MOVS(Axe_X,Axe_Y, SRC_AXE,60.0,60.0,0.0,.0.0) ;
(* Recalage automatique par risque de perte de point avec des rapports non finis *)
ICORRECTIONA(Axe_X,Axe_Y, SRC_AXE,360.0,360.0) ;
END_WHILE ;

Voir aussi

CORRECTION_S

ICORRECTION


IF

IF THEN ELSE ELSIF END_IF

Syntaxe

IF <expression BOOL> THEN
<instructions>
ELSIF <expression BOOL> THEN
<instructions>
ELSE
<instructions>
END_IF;

Types acceptés

<Expression> : BOOL

Description

L'énoncé IF n'est utilisable qu'en ST. L'exécution des instructions est conditionnée par la valeur de l'expression booléenne. Les énoncés ELSIF et ELSE sont optionnels. Il peut y avoir plusieurs énoncés ELSIF.

Exemple ST

(* condition simple *)
IF bCond THEN
 Q1 := IN1;
 Q2 := TRUE;
END_IF;

(* sélection binaire *)

IF bCond THEN
 Q1 := IN1;
 Q2 := TRUE;
ELSE
 Q1 := IN2;
 Q2 := FALSE;
END_IF;

(* conditions énumérées *)

IF bCond1 THEN
 Q1 := IN1;
ELSIF bCond2 THEN
 Q1 := IN2;
ELSIF bCond3 THEN
 Q1 := IN3;
ELSE
 Q1 := IN4;
END_IF;

Voir aussi

CASE

WHILE

REPEAT

FOR

EXIT


INIT_S

INIT_S  Retourne l'état de la tâche d'Initialisation

Syntaxe

<Q> := INIT_S (0)

Type accepté

<Q> : USINT

Description

Cette fonction retourne l'état de la tâche d'initialisation :

  • "1" si la tâche en cours d'exécution

  • "0" si la tâche est arrêtée

Remarque

Cette fonction permet dans une tâche système de traiter le cas particulier de l'initialisation (éviter de relancer en boucle la tâche d'initialisation).


INITGETCONTEXT

INITGETCONTEXT  Retourne le contexte de la tâche d'Initialisation

Syntaxe

<Q> := INITGETCONTEXT (0)

Type accepté

<Q> : USINT

Description

Cette fonction retourne le contexte de la tâche d'initialisation :

  • 0 : première initialisation (appelé lors du "RUN" du séquenceur global)

  • 1 : ré-initialisation (appelé par l'utilisateur) (RESTART(1);)


INITSETRESULT

INITSETRESULT  Force la valeur de retour de la tâche d'Initialisation

Syntaxe

INITSETRESULT (<EN>)

Type accepté

<EN> : USINT

Description

Cette fonction force le résultat de retour de la tâche d'initialisation :

  • 0 : OK

  • 1 : erreur aucun résultat envoyé (valeur par défaut)

  • 2-255 : erreur spécifique, retournée telle quelle sur l'afficheur (erreur 64-xx)

Exemple

Defaut:=0;

(* ---------------- Manque alimentation 24V pupitre -------------------- *)
If (Inp(Etat24VPupitre)=0) Then

     Defaut:=2;

End_If;

(* -------------- Pas de communication avec le pupitre ----------------- *)
If (MODBUSERROR(1)<>0) Then

     Defaut:=3;

End_If;

InitSetResult(Defaut);

Remarque

Une tâche d'initialisation doit impérativement faire appel à cette fonction.


INP

INP  Lecture d'une entrée TOR

Syntaxe

<Q> := INP (<Entrée>)

Types acceptés

<Entrée> : tIObitIn

<Q> : BOOL

Description

Cette fonction donne l'état d'une entrée TOR.

<Entrée> : Nom d'une entrée de type BOOL

Remarque

Cette fonction s'utilise dans une tâche avec gestion des E/S en direct

Exemple ST

Etat_Entree_MPC_1 := INP(Entree_MPC_1) ;

Voir aussi

INPB

INPW


INPB

INPB  Lecture d'un bloc 8 entrées

Syntaxe

<Q> := INPB (<Entrées>)

Types acceptés

<Entrée> : tIObyteIn

<Q> : BYTE

Description

Cette fonction retourne l'état d'un bloc de 8 entrées TOR.

<Entrées> : Nom d'un bloc d'entrée de type BYTE

Remarque

Cette fonction s'utilise dans une tâche avec gestion des E/S en direct

Exemple ST

Etat_Entree_MPC_1a8 := INPB(Entree_MPC_1a8) ;

Voir aussi

INP

INPW


INPW

INPW  Lecture d'un bloc de 16 entrées

Syntaxe

<Q> := INPW (<Entrées>)

Types acceptés

<Entrée> : tIOwordIn

<Q> : WORD

Description

Cette fonction retourne l'état d'un bloc de 16 entrées TOR.

<Entrées> : Nom d'un bloc entrée de type WORD

Remarque

Cette fonction s'utilise dans une tâche avec gestion des E/S en direct

Exemple ST

Etat_Entree_MPC_1a16 := INPW (Entree_MPC_1a16) ;

Voir aussi

INP

INPB


INSERT

Motion Studio ne met pas en application la fonction INSERT.


INT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


INTERPOLATE

Syntaxe

INTERPOLATE (<Axe_virt >, < Param >)

Types acceptés

<Axe_virt> : tPeripheral
<Param>: tInterpolateParam

Description

Cette fonction démarre une interpolation sur un axe virtuel suivant des paramètres définissant le modèle géométrique.
<Axe_virt> : nom de l'axe virtuel
<Param>: description du modèle géométrique


INTERPOLATE2D

Syntaxe

INTERPOLATE2D (<Axe_virt >, < Axe_ X>, < Axe_ Y>)

Types acceptés

<Axe_virt> : tPeripheral
<Axe_ X>, <Axe_ Y> : : tPeripheral

Description

Cette fonction démarre une interpolation à 2 dimensions.
<Axe_virt> : Nom de l'axe virtuel
<Axe_ X>, <Axe_ Y> : Noms des axes


INTERPOLATE3D

Syntaxe

INTERPOLATE3D (<Axe_virt >, < Axe_ X>, < Axe_ Y>, < Axe_ Z>)

Types acceptés

<Axe_virt> : tPeripheral
<Axe_ X>, <Axe_ Y>, <Axe_ Z> : tPeripheral

Description

Cette fonction démarre une interpolation à 3 dimensions.
<Axe_virt> : Nom de l'axe virtuel
<Axe_ X>, <Axe_ Y>, <Axe_ Z> : Noms des axes


INTP

INTP  Partie entière

Syntaxe

<Q> := INTP (<Expression>)

Type accepté

<Expression> : REAL

Description

Cette fonction restitue la partie entière de <Expression>.

Remarque

Cette fonction restitue une valeur réelle.

Voir aussi

FRAC


IOFAULT_S

Syntaxe

<Q> := IOFAULT_S (0)

Types acceptés

<Q> : BOOL

Description

Cette fonction indique si les entrées / sorties sont en surcharges

Remarque

L'état du flag est remis à 0 après l'exécution de l'instruction


JMP

JMP  Effectuer un saut

Syntaxe

JMP Etiquette

Description

La fonction JMP permet de faire un saut à une étiquette.

Remarques

Un saut à une étiquette déroute l'exécution du programme après l'étiquette spécifiée.
Les sauts et les étiquettes ne sont pas disponibles en ST.
En FBD, un saut est représenté pat le symbole ">>" suivi par le nom de l'étiquette de destination.
Le flux en entrée du symbole ">>" doit être connecté à une variable booléenne qui conditionne le branchement.
Le saut n'est exécuté que si le flux en entrée est TRUE.
En LD, le symbole ">>", suivi par le nom d'une étiquette, finit une échelle.
Le saut est exécuté si le flux est TRUE.
En IL, les instructions JMP, JMPC, JMPCN et JMPNC spécifient des opérations de saut.
La destination du saut est l'opérande de l'instruction.

Attention

Les sauts en arrière peuvent créer des boucles infinies et bloquer le cycle.

Exemple FDB

(* Dans cet exemple, le bloc TON n'est pas appelé si bEnable = TRUE *)

Exemple LD

(* Dans cet exemple, la seconde échelle n'est pas évaluée si IN1 = TRUE *)

Exemple IL

Les instructions suivantes sont disponibles:

JMP | Branchement inconditionnel
JMPC | Branchement si le résultat courant = TRUE
JMPCN | Branchement si le résultat courant = FALSE

Start: LD IN1
JMPC TheRest (* Saut à "TheRest" si IN1 = TRUE *)
LD IN2 (* ces instructions ne sont pas exécutées *)
 ST Q2 (* si IN1 = TRUE *)
JMP TheEnd (* branchement inconditionnel à "TheEnd" *)

TheRest: LD IN3
 ST Q3

TheEnd:

Voir aussi

RETURN


JMPC

Voir JMP


JMPCN

Voir JMP


LD

Voir Assignation


LDN

Voir Assignation


LE

LE - Comparaison (langage IL)

Voir Inférieur ou égal


LEFT

LEFT  Partie gauche d'une chaîne

Syntaxe

<Q> := LEFT (<IN>, <NBC>)

Types acceptés

<IN> : STRING
<NBC> : UINT
<Q> : STRING

Description

Cette fonction retourne les <NBC> caractères de gauche d'une chaîne.
<IN> est la chaîne d'où les caractères sont à extraire
<NBC> est le nombre de caractères à extraire
<Q> est la chaîne contenant les <NBC> premiers caractères de <IN>.

Remarques

En LD, le flux d'entrée (EN) conditionne l'opération, et le flux est inchangé en sortie.
En IL, la première entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
La seconde entrée est l'opérande de la fonction.

Exemple ST

Q := LEFT (IN, NBC);

Exemple FBD

Exemple LD

(* La fonction est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD   IN
     LEFT NBC
     ST   Q

Voir aussi

+

MLEN

DELETE

INSERT

FIND

REPLACE

RIGHT

MID


LEN

LEN  Longueur d'une chaîne

Syntaxe

<NBC> := LEN (<IN>)

Types acceptés

<IN> : STRING
<NBC> : INT

Description

Cette fonction retourne le nombre de caractères d'une chaîne.
<IN> est la chaîne de caractères
<NBC> est le nombre de caractères dans la chaîne. 0 si la chaîne est vide

Langage ST

NBC := LEN(IN);

Langage FBD

Langage LD

(* La fonction est appelée si EN = TRUE *)
(* ENO est égal à EN *)

Langage IL

Op1: LEN IN
     ST  NBC

Voir aussi

+

FIND

DELETE

INSERT

REPLACE

LEFT

RIGHT

MID


LIMIT

LIMIT  Borne une valeur entière

Syntaxe

<Q> := LIMIT (<IMIN>, <IN>, <IMAX>)

Types acceptés

<Q>, <IMIN>, <IN>, <IMAX> : ANY_NUM

Description

Cette function permet de borner une valeur entière entre deux limites.
<IMIN> est la borne inférieure
<IN> est la valeur d'entrée
<IMAX> est la borne supérieure
<Q> est la valeur de retour : IMIN si IN < IMIN; IMAX si IN > IMAX; IN dans les autres cas

Remarques

En LD, le flux d'entrée (EN) conditionne l'opération, et le flux est inchangé en sortie.
En IL, la première entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
Les autres entrées sont les opérandes de la fonction, séparés par une virgule.

Exemple ST

Q := LIMIT (IMIN, IN, IMAX);

Exemple FDB

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD IMIN
LIMIT IN, IMAX
ST Q

Voir aussi

MIN

MAX

MOD

ODD


LN

LN  Logarithme de base e

Syntaxe

<Q> := LN (<IN>)

Types acceptés

(<IN>) : REAL
(<Q>) : REAL

Description

Cette fonction restitue le logarithme naturel (base e) de <IN>.
L'argument <IN> doit être une expression numérique valide.
La valeur retournée est de type réel.

Remarque

En langage IL, la valeur d'entrée doit être chargée dans le résultant courant avant l'appel de la fonction.

Exemple ST

Q :=LN (IN) ;

Exemple FBD

Exemple LD

(*La fonction est exécutée seulement si EN est TRUE*)
(*ENO a la même valeur que EN*)

Exemple IL

Op1: LD IN
     LN
     ST Q

Voir aussi

EXP


LOADCAM

LOADCAM  Charge une came

Syntaxe

LOADCAM (<Esclave>,<Maître>,<Source>, <N°came>, <Absolu>, <Reference>, <Mono-coup>, <Réversible>, <DirectionPositive>, <GainMaître>, <GainEsclave>, <N°came suivante>, <N°came précédente>)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<N°came> : UINT
<Absolu> : BOOL
<Reference> : tCam
<Mono-coup> : BOOL
<Réversible> : BOOL
<DirectionPositive> : USINT
<GainMaître> : REAL
<GainEsclave> : REAL
<N°came suivante> : UINT
<N°came précédente> : UINT

Description

Cette fonction charge une came en mémoire
<Esclave> : Nom de l'axe esclave où est effectuée la came
<Maître> : Nom de l'axe maître
<Source> permet de sélectionner la source du <Maître>
<N°came> : numéro de came utilisateur (1 à 127)
<Absolu> : à 1 indique came absolue.
<Reference> : Nom de la came
<Mono-coup> : à 1 cette came n'est pas rebouclée sur elle-même
<Réversible> : Indique si l' <Esclave> doit suivre le <Maitre> dans les deux sens.

  • Rentrez la valeur 0 pour une came non réversible : si le maître se déplace à l'inverse de son sens normal donné par <DirectionPositive>, l'esclave s'arrête ; il repartira lorsque le maître reprendra son sens normal et atteindra la position maître à laquelle l'esclave s'était arrêté.

  • Rentrez la valeur 1 pour une came réversible : l'esclave suit son profil de came quel que soit le sens d'avance du maître.

<DirectionPositive> : Condition d'embrayage.

  • 0 : sens Indifférent : embraye dans n'importe quel sens, en inversant la came pour suivre l'esclave. Si on inverse le sens, le maître ET l'esclave sont inversés.
    Ce mode permet également d'embrayer à n'importe position d'une came absolue.

  • 1 : sens Négatif :
    Pour une came relative : le sens des positions maître est pris dans le sens d'un STTIM sur le maître. Les points esclaves sont dans le sens d'un STTIP sur l'esclave
    Pour une came absolue : le sens des positions maître et esclaves sont dans le sens d'un STTIP sur les axes respectifs
    On embraye la came que lorsque l'on rentre dans le dernier élément

  • 2 : sens Positif :
    Pour une came relative : le sens des positions maître est pris dans le sens d'un STTIP sur le maître. Les points esclaves sont dans le sens d'un STTIP sur lesclave
    Pour une came absolue : le sens des positions maître et esclaves sont dans le sens d'un STTIP sur les axes respectifs
    On embraye la came que lorsque l'on rentre dans le dernier élément

<GainMaître> : gain à appliquer aux points maîtres
<GainEsclave> : gain à appliquer aux points esclaves
<N°came suivante> : Mettre 0 si la came ne doit pas être enchaînée sur une autre came sinon le numéro de la came s'enchaînera.
<N°came précédente> : Mettre 0 si la came n'enchaînera pas sur une came précédente


LOADCAMI

LOADCAMI  Charge une came

Syntaxe

LOADCAM (<Esclave>,<Maître>,<Source>, <N°came>, <Absolu>, <Reference>, <Mono-coup>, <Réversible>, <DirectionPositive>, <GainMaître>, <GainEsclave>, <N°came suivante>, <N°came précédente>)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<N°came> : UINT
<Absolu> : BOOL
<Data> : tCamTable
<Mono-coup> : BOOL
<Réversible> : BOOL
<DirectionPositive> : USINT
<GainMaître> : REAL
<GainEsclave> : REAL
<N°came suivante> : UINT
<N°came précédente> : UINT

Description

Cette fonction charge une came en mémoire
<Esclave> : Nom de l'axe esclave où est effectuée la came
<Maître> : Nom de l'axe maître
<Source> permet de sélectionner la source du <Maître>
<N°came> : numéro de came utilisateur (1 à 127)
<Absolu> : à 1 indique came absolue.
<Data> : Came en mémoire(variable)
<Mono-coup> : à 1 cette came n'est pas rebouclée sur elle-même
<Réversible> : Indique si l' <Esclave> doit suivre le <Maitre> dans les deux sens.

  • Rentrez la valeur 0 pour une came non réversible : si le maître se déplace à l'inverse de son sens normal donné par <DirectionPositive>, l'esclave s'arrête ; il repartira lorsque le maître reprendra son sens normal et atteindra la position maître à laquelle l'esclave s'était arrêté.

  • Rentrez la valeur 1 pour une came réversible : l'esclave suit son profil de came quel que soit le sens d'avance du maître.

<DirectionPositive> : Condition d'embrayage.

  • 0 : sens Indifférent : embraye dans n'importe quel sens, en inversant la came pour suivre l'esclave. Si on inverse le sens, le maître ET l'esclave sont inversés.
    Ce mode permet également d'embrayer à n'importe position d'une came absolue.

  • 1 : sens Négatif :
    Pour une came relative : le sens des positions maître est pris dans le sens d'un STTIM sur le maître. Les points esclaves sont dans le sens d'un STTIP sur l'esclave
    Pour une came absolue : le sens des positions maître et esclaves sont dans le sens d'un STTIP sur les axes respectifs
    On embraye la came que lorsque l'on rentre dans le dernier élément

  • 2 : sens Positif :
    Pour une came relative : le sens des positions maître est pris dans le sens d'un STTIP sur le maître. Les points esclaves sont dans le sens d'un STTIP sur l'esclave
    Pour une came absolue : le sens des positions maître et esclaves sont dans le sens d'un STTIP sur les axes respectifs
    On embraye la came que lorsque l'on rentre dans le dernier élément

<GainMaître> : gain à appliquer aux points maîtres
<GainEsclave> : gain à appliquer aux points esclaves
<N°came suivante> : Mettre 0 si la came ne doit pas être enchaînée sur une autre came sinon le numéro de la coma s'enchaînera.
<N°came précédente> : Mettre 0 si la came n'enchaînera pas sur une came précédente


LOADCAMPOINT

LOADCAMPOINT  Modification de points d'une came

Syntaxe

LOADCAMPOINT (<N°came>, <N° point>, <X>, <Y>, <dX>, <dY>)

Limite

<N°came> de 1 à 127

<N° point> de 1 à n points de la came

Types acceptés

<N°came>, <N° point> : UINT
<X>, <Y>, <dX>, <dY> : REAL

Description

Cette fonction permet de modifier un point d'une came à la volée

Voir aussi

LOADCAM


LOADTIMER

Syntaxe

<TEMPO> := LOADTIMER (<DELAI>)

Limite :

<DELAI>: doit être inférieur à 2^31 (environ 25 jours)

Types acceptés

<TEMPO> : UDINT
<DELAI>: UDINT

Description

L'instruction LOADTIMER est utilisée pour établir des attentes actives. Elle stocke dans la variable <TEMPO>, la somme de la variable interne Time + <DELAI>

Remarques

Time est un entier long qui représente le millième de secondes écoulées depuis la dernière mise sous tension. Cette variable peut donc être utilisée comme base de temps.

Exemple ST

Tempo := LOADTIMER (3000) ; (* Chargement d'une temporisation de 3s *)

BOUCLE :
IF (TIMER (Tempo) = FALSE) THEN

GOTO BOUCLE ; (* Attente de la fin de la temporisation *)

END_IF ;

Voir aussi

TIMER


LOCK

LOCK  Bloque le séquenceur sur la tâche

Syntaxe

LOCK (0)

Description

Cette fonction permet de forcer le séquenceur à n'exécuter que le tâche où se trouve le lock, les autres tâches sont suspendus jusqu'à l'appel de l'instruction UNLOCK, l'arrêt de la tâche ou du séquenceur.


LOG

LOG  Logarithme de base 10

Syntaxe

<Q> := LOG (<IN>)

Types acceptés

<Q>, <IN> :REAL

Description

Cette fonction retourne le logarithme décimal (base 10) de <IN>
<IN> doit être une expression numérique.
La valeur retournée est de type réel.

Remarques

En LD, le flux d'entrée (EN) conditionne l'opération, et le flux est inchangé en sortie.
En IL, l'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := LOG (IN);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD IN
LOG
ST Q (* Q est: LOG (IN) *)

Voir aussi

ABS

TRUNC

POW

SQRT


LT

LT - Comparaison (langage IL)

Voir Inférieur


MASTEROFFSET

MASTEROFFSET  Décale dynamiquement la position du maître

Syntaxe

MASTEROFFSET (<Esclave>, <Maître>, <Source>, <Offset>, <Accélération>)

Unités

<Offset> : Distance dans l'unité utilisateur (Ex : mm, degré,)
<Accélération> : Accélération dans l'unité utilisateur (Ex : mm/s², degré/s²,)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<Offset> : REAL
<Accélération> : REAL

Description

Cette instruction décale dynamiquement la position du maître.
<Esclave>, <Maître> : Nom de l'axe
<Source> permet de sélectionner la source du <Maître>
<Offset> : Valeur de l'offset à appliquer
<Accélération> Accélération utilisée pour appliquer l'offset.

Remarque

Le décalage est appliqué directement si aucun mouvement n'est en cours ou si l'axe n'est pas embrayé.

Cette fonction est principalement utilisée dans une came absolue.

Voir aussi

MASTEROFFSET_S


MASTEROFFSET_S

MASTEROFFSET_S  Valeur courante de l'offset maître

Syntaxe

<Q> := MASTEROFFSET_S (<Esclave>, <Maître>, <Source>)

Unité

<Q> : Distance dans l'unité utilisateur (Ex : mm, degré,...)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<Q> : REAL

Description

Cette fonction retourne la valeur courante de l'offset maître.
<Esclave>, <Maître> : Nom de l'axe
<Source> :SRC_AXE pour la position réel de l'axe, SRC_AUX pour la position auxiliaire de l'axe et SRC_TRC pour la position théorique de l'axe

Remarque

Lorsque la valeur courante est égale à la valeur <Offset> de la fonction MASTEROFFSET, le décalage est alors terminé.

Voir aussi

MASTEROFFSET


MAX

MAX  Retourne le maximum de deux valeurs

Syntaxe

<Q> := MAX (<IN1>, <IN2>)

Unités acceptés

<IN1>, <IN2>, <Q> : ANY_NUM

Description

Cette fonction retourne le maximum de deux valeurs numériques:
Si IN1> IN2 alors Q = IN1 sinon Q = IN2

Remarques

En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En langage LD et FBD, plusieurs fonctions MAX sont disponibles suivant le type de donnée.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction.
Le second paramètre est l'argument de la fonction.

Exemple ST

Q := MAX (IN1, IN2);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN1
     MAX IN2
     ST  Q

Voir aussi

MIN

LIMIT

MOD

ODD


MERGE

MERGE  Définit l'enchaînement

Syntaxe

MERGE (<Axe>, <MergeOn>)

Types acceptés

<Axe> : tPeripheral
<MergeOn> : UINT

Description

Cette instruction est utilisée pour activer ou désactiver l'enchaînement des mouvements consécutifs.
<Axe> : Nom de l'axe

<MergeOn> à "1" permet d'activer le MERGE et à "0" arrête le MERGE.
L'instruction MERGE agit lors de l'entrée dans la partie «décélération» d'un mouvement.
Lorsque le MERGE est actif et qu'un autre mouvement peut être raccordé, la décélération n'est pas réalisée et le raccord est alors effectué.

Remarque

Un merge entre un mouvement rapide et un mouvement "lent" peut entraîner un dépassement de la côte à atteindre (le flag POS_ERREUR_S passe alors à 1).
Les instructions de changement de profil de vitesse comme VEL, ACC, DEC  sont pris en compte au prochain mouvement
L'instruction POS ne fonctionne pas pendant un MERGE

Exemple ST

MERGE(Axe_X,1);
TRAJA(Axe_X,1000.0,500.0,1000.0,1000.0); (* Mouvements enchaînés sans *)
TRAJA(Axe_X,1500.0,200.0,1000.0,1000.0); (* passage par une vitesse
 nulle *)
MERGE(Axe_X,0);
TRAJA(Axe_X,1800.0,700.0,1000.0,1000.0); (* passage par une vitesse
 nulle à la position 1500 *)


MID

Motion Studio ne met pas en application la fonction MID.


MIN

MIN  Retourne le minimum de deux valeurs

Syntaxe

<Q> := MIN (<IN1>, <IN2>)

Unités acceptés

<IN1>, <IN2>, <Q> : ANY_NUM

Description

Cette fonction retourne le maximum de deux valeurs numériques:
Si IN1< IN2 alors Q = IN1 sinon Q = IN2

Remarques

En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En langage LD et FBD, plusieurs fonctions MIN sont disponibles suivant le type de donnée.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction.
Le second paramètre est l'argument de la fonction.

Exemple ST

Q := MIN (IN1, IN2);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN1
     MIN IN2
     ST  Q

Voir aussi

MAX

LIMIT

MOD

ODD


MOD

MOD  Division (langage IL)

Syntaxe

<Q> = MOD (<IN1>, <IN2>)

Types acceptés

<Q>, <IN1>, <IN2> : ANY_INT

Description

Cette fonction permet de diviser la valeur du premier opérande par la valeur du deuxième opérande et de sortir le reste de la division (modulo) comme résultat.

Exemple ST

C:= A MOD B;

Exemple IL

Div: LD  A  (*C=1 pour A=7 et B=2*)
     MOD B  (*C=(-1) pour A=7 et B=(-2)*)
     ST  C  (*C=(-1) pour A=(-7) et B=2*)
            (*C=1 pour A=(-7) et B=(-2)*)


MOTORPOWER_S

MOTORPOWER_S Image de la puissance moteur

Syntaxe

<EtatPuissance> := MOTORPOWER_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<EtatAxe> : BOOL

Description

Cette fonction est utilisée pour lire l'état de la puissance directement sur le moteur.

Remarque

Cette fonction peut être utilisée à tout moment pour voir si le moteur est alimenté en puissance.

Exemple ST

Puissance := MOTORPOWER_S(Axe_x) ;


MOVA

MOVA  Mouvement absolu

Syntaxe

MOVA (<Axe>, <Distance>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Axe> : tPeripheral
<Distance> : REAL

Description

Cette instruction permet de déplacer l'axe à une position absolue.
L'exécution de l'instruction provoque le basculement vers la tâche suivante.
La tâche attend la fin du mouvement (condition MOVE_S=0) avant d'exécuter la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple ST

MOVA (Axe_X, 1200.0);

Voir aussi

MOVR

STTA

STTR

STTIP

STTIM

MOVE_S


MOVE

Voir Assignation


MOVE_S

MOVE_S  Etat du mouvement

Syntaxe

<Q> := MOVE_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction indique si l'axe est en mouvement (trajectoire simple ou mouvement synchronisé).
<Axe> : Nom de l'axe
Si l'axe est en mode non asservi (AXIS OFF), l'instruction MOVE_S = 0.
Si l'axe est en mode asservi, MOVE_S est égale à 0 si les 4 points suivants sont vrais :

  • Le mouvement de positionnement (STTA, TRAJ) courant est terminé (trajectoire théorique terminée).

  • L'erreur de poursuite est à l'intérieur de la fenêtre de positionnement (+/- la valeur entrée dans le menu Paramètres / Sécurités / Position).

  • Le buffer de mouvement de positionnement (STTA, TRAJ) est vide.

  • Dans le cas d'un axe esclave lié par une synchronisation (arbre électrique, mouvement synchronisé, mouvement came) : le lien doit avoir été coupé.

Si l'un de ces points est faux, l'instruction MOVE_S retourne la valeur 1.

Exemple ST

STTA (Axe_X, 100.0);
WAIT (MOVE_S (Axe_X) = 0) ; (* Attente que l'axe soit arrêté *)


MOVR

MOVR  Mouvement relatif

Syntaxe

MOVR (<Axe>, <Distance>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Axe> : tPeripheral
<Distance> : REAL

Description

Cette instruction permet de déplacer l'axe à une position relative.
L'exécution de l'instruction provoque le basculement vers la tâche suivante.
La tâche attend la fin du mouvement (condition MOVE_S=0) avant d'exécuter la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple

MOVR (Axe_X, 1200.0);

Voir aussi

MOVA

STTA

STTR

STTIP

STTIM

MOVE_S


MOVS

MOVS  Mouvement synchronisé

Syntaxe

MOVS( <Esclave>,<Maître>,<Source>, <DistanceMaître>, <DistanceEsclave>, <DistanceAccélération>, <DistanceDécélération>)

Unités

<DistanceMaître>, <DistanceEsclave> : unité utilisateur (Ex : mm, degré,)
<DistanceAccélération>, <DistanceDécélération> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Esclave> : tPeripheral
<Maître> : tPeripheral
<Source> : tSrcPos
<DistanceMaître>, <DistanceEsclave>, <DistanceAccélération>, <DistanceDécélération> : REAL

Description

Cette instruction sont utilisée pour lier un axe esclave à un axe maître pendant une certaine distance de l'axe maître avec des phases d'accélération et de décélération sur l'axe esclave.
Si le buffer est plein, la tâche se bloque jusqu'à ce qu'une place se libère dans le buffer.
<Esclave>,<Maître> : Nom de l'axe
<Source> permet de sélectionner la source du <Maître>
Les <DistanceAccélélération> et <DistanceDécélération> sont exprimées en distance sur l'axe maître et peuvent être nulles.

Exemple ST

(* Coupe au vol *)

ORDER(Axe_X,0); (* initialise le n°+1 du prochain mouvement envoyé dans le buffer *)
MOVS(Axe_X, Axe_Y, SRC_AXE, 0.8, 0.4, 0.8, 0.0); (* Accélération mouvement 1 *)
MOVS(Axe_X, Axe_Y, SRC_AXE, 0.2, 0.2, 0.0, 0.0); (* Phase synchro mouvement 2 *)
MOVS(Axe_X, Axe_Y, SRC_AXE, 0.8, 0.4, 0.0, 0.8); (* Décélération mouvement 3 *)
MOVS(Axe_X, Axe_Y, SRC_AXE, 0.8, 0.2, -1.0, 0.5); (* Retour mouvement 4 *)
WAIT (ORDER_S(Axe_X)>=2); (* Attente fin exécution du mouvement 2 *)
OUT(Couteau,1); (*Activation du couteau *)
WAIT (ORDER_S(Axe_X)>=3); (*Attente fin exécution du mouvement 3 *)
OUT(Couteau,0); (*Arrêt du couteau *)

Voir aussi

CAM

CAMBOX

GEARBOX


MUL

MUL  Multiplication (langage IL)

Voir Multiplication


MULTITASKARRAY

MULTITASKARRAY  Fonction interne de réglage d'accès aux tableaux

Syntaxe

MULTITASKARRAY (<Mode>)

Types acceptés

<Mode> : USINT

Description

Cette fonction permet de modifier le mode d'accès aux données d'un tableau :

Contacter le support technique pour utiliser cette fonction.


MUX

Motion Studio ne met pas en application la fonction MUX.


NE

NE - Comparaison (langage IL)

Voir Différent


NEXTTASK

Syntaxe

NEXTTASK (0)

Description

Cette Instruction permet de basculer immédiatement vers la tâche suivante.


NEG

NEG  Négation (langage IL)

Voir Négation


NOT

NOT  Opérateur complément

Syntaxe

<Q> := NOT <IN>

Types acceptés

<IN> : ANY_BIT

Description

Cette fonction effectue une inversion logique de l'entrée.

Remarque

"NOT" est défini par la norme IEC61131-3.

Exemple ST

Q := IN;

Exemple FBD

(* utilisation du bloc "NOT" *)

(* lien avec inversion: Q = IN1 AND NOT IN2 *)

Exemple LD

(* Contact inversé: Q = IN1 AND NOT IN2 *)

(* Bobinage inversé: Q = NOT (IN1 AND IN2) *)

Exemple IL

Op1: LDN IN1
     OR  IN2
     ST  Q   (* Q = (NOT IN1) OR IN2 *)

Op2: LD  IN1
     AND IN2
     STN Q   (* Q = NOT (IN1 AND IN2) *)

Voir aussi

OR

XOR

AND


OF

Voir CASE


OR

OR  Opérateur OU

Syntaxe

<Q> := <IN1> OR <IN2>

Types acceptés

<IN1> : ANY_BIT
<IN2> : ANY_BIT
<Q> : ANY_BIT

Description

Cette fonction effectue un OU binaire entre deux expressions et retourne une valeur du type de l'opérande.
<IN1> et <IN2> doivent être du même type.

Remarque

"OR" est défini par la norme IEC61131-3.

Exemple ST

Q := IN1
 OR IN2;
Q := IN1 OR IN2 OR IN3;

Exemple FBD

Exemple LD

(* contacts en parallèle *)

Exemple IL

Op1: LD IN1
     OR IN2
     ST Q   (* Q = IN1 OR IN2 *)

Op2: LD  IN1
     ORN IN2
     ST  Q   (* Q = IN1 OR (NOT IN2) *)

Voir aussi

AND

XOR

NOT


ORDER - Numéro d'ordre du mouvement

Syntaxe

ORDER (<Axe>, <Expression> )

Types acceptés

<Axe> : tPeripheral
<Expression> : UDINT

Description

Cette instruction fixe le numéro d'ordre du prochain mouvement à <Expression> + 1.
<Axe> : Nom de l'axe

Remarque

Cette instruction peut être utilisée avec la fonction ORDER_S.

A l'initialisation, un ORDER (0) est effectué

Exemple ST

ORDER (Axe_X,
 0);
MOVS (Axe_X, Axe_Y, SRC_AXE, 50.0, 100.0, 10.0, 10.0) ;
NumMouv := ORDER_S(Axe_X); (* 'Résultat
 : NumMouv=1 *)

Voir aussi

ORDER_S


ORDER_S - Numéro d'ordre courant

Syntaxe

<Q> := ORDER_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : UDINT

Description

Cette instruction lit le numéro d'ordre du mouvement en cours d'exécution.
<Axe> : Nom de l'axe

Remarque

Cette instruction peut être utilisée avec la fonction ORDER.

Exemple ST

ORDER (Axe_X,
 0);
MOVS (Axe_X, Axe_Y,SRC_AXE, 50.0,100.0,10.0,10.0) ;
NumMouv := ORDER_S(Axe_X); (* 'Résultat
 : NumMouv=1 *)

Voir aussi

ORDER


ORDER_T

ORDER_T  Numéro d'ordre du dernier mouvement

Syntaxe

<Q> := ORDER_T (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : UDINT

Description

Cette fonction retourne le numéro d'ordre du dernier mouvement déposé dans le buffer de mouvement.
<Axe> : Nom de l'axe

Voir aussi

ORDER_S


ORN

ORN  Opérateur OU avec l'entrée 2 inversée

Voir OR avec l'entrée 2 inversée


OUTP

OUTP  Ecriture d'une sortie

Syntaxe

OUTP (<Sortie>, <Expression>)

Types acceptés

<Sortie> : tIObitOut

<Expression> : BOOL

Description

Cette fonction charge l'état logique à une sortie TOR.
<Sortie> : Nom d'un sortie de type BOOL

Remarque

L'utilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

OUTP (Sortie_MPC_1, 1) ;

Voir aussi

INP

INPB

INPW

OUTB

OUTW


OUTP_S

OUTP_S  Lecture de l'état de la sortie physique

Syntaxe

<Q> := OUTP_S (<Sortie>)

Types acceptés

<Sortie> : tIObitOut

<Q> : BOOL

Description

Cette fonction lit l'état d'une sortie TOR.
< Sortie > : Nom d'une sortie de type BOOL

Remarque

L'utilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

Etat_Sortie_MPC_1 := OUTP_S(Sortie _MPC_1) ;

Voir aussi

OUTB

OUTW


OUTB

OUTB  Ecriture d'un bloc de 8 sorties

Syntaxe

OUTB (<Sorties>, <Expression>)

Types acceptés

<Sorties> : tIObyteOut

<Expression> : BYTE

Description

Cette fonction charge les états logiques à un bloc de 8 sorties TOR.
<Sorties> : Nom d'un bloc de sorties de type BYTE

Remarque

L'utilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

OUTB (Sortie_MPC_1a8, 32) ;

Voir aussi

INP

INPB

INPW

OUTP

OUTW


OUTB_S

OUTB_S  Lecture de l'état des sorties physiques

Syntaxe

<Q> := OUTB_S (<Sorties>)

Types acceptés

<Sorties> : tIObyteOut

<Q> : BYTE

Description

Cette fonction lit l'état d'un bloc de 8 sorties TOR.
<Sorties> : Nom d'un bloc de sorties de type BYTE

Remarque

Lutilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

Etat_Sorties_MPC_1a8 := OUTB_S(Sorties_MPC_1a8) ;

Voir aussi

OUTP

OUTW


OUTW

OUTW  Ecriture d'un bloc de 16 sorties

Syntaxe

OUTB (<Sorties>, <Expression>)

Types acceptés

<Sorties> : tIOwordOut

<Expression> : WORD

Description

Cette fonction charge les états logiques à un bloc de 16 sorties TOR.
<Sorties> : Nom d'un bloc de sorties de type WORD

Remarque

L'utilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

OUTB (Sortie_MPC_1a16, 2756) ;

Voir aussi

INP

INPB

INPW

OUTP

OUTB


OUTW_S

OUTW_S  Lecture de l'état des sorties physiques

Syntaxe

<Q> := INPW (<Sorties>)

Types acceptés

<Sorties> : tIOwordOut

<Q> : WORD

Description

Cette fonction lit l'état d'un bloc de 16 sorties TOR.
<Sorties> : Nom d'un bloc de sorties de type WORD

Remarque

L'utilisation de cette fonction se fait avec une tâche avec gestion des E/S en direct

Exemple ST

Etat_Sorties_MPC_1a16 := OUTW_S( Sorties_MPC_1a16) ;

Voir aussi

OUTP_S

OUTB_S


POS

POS  Position à atteindre

Syntaxe

POS(<Axe>, <Expression>)

Unité

<Expression> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction fixe la position à atteindre dans l'unité choisie.
Cette fonction est utilisée pour changer la position finale en cours de mouvement.
La position peut être modifiée à tout moment.
Le signe indique le sens dans lequel on doit atteindre la position
La valeur absolue de la position est ramenée dans le modulo.
<Axe> : Nom de laxe

Remarque

L'exécution de POS pendant un MOVA, change la position absolue finale
L'exécution de POS pendant un MOVR, transforme le mouvement en MOVA
L'exécution de POS pendant un STTM ou STTP, transforme le mouvement en MOVA
La mauvaise utilisation de POS peut entraîner un dépassement de la côte à atteindre (le flag POS_ERREUR_S passe alors à 1).

Exemple ST

STTA(Axe_X, 5000.0);        (* Départ de l'axe *)
WAIT (INP(Cellule,1);       (* Attente Cellule *)
POS(Axe_X)=POS_S(Axe_X)+50; (* Arrêt 50 mm après le capteur *)
WAIT (NOT (MOVE_S(Axe_X))); (* Attente arrêt de l'axe *)

Voir aussi

ACC

DEC

VEL


POS_S

POS_S  Position Réelle

Syntaxe

<Expression> := POS_S(<Axe>)

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction retourne la position réelle de l'axe.
On peut ainsi obtenir l'image en temps réel de la position de l'axe.
<Axe> : Nom de l'axe

Exemple

STTA (Axe_X, 100.0);       (* Départ de l'axe *)
WAIT (POS_S(Axe_X)>50.0)); (* Attente que la position soit > 50 *)
OUTP (Verin,1) ;

Voir aussi

VEL_S


POS_T

POS_T  Position à atteindre

Syntaxe

<Expression> := POS_T(<Axe>)

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction retourne la position à atteindre par le mouvement en cours de l'axe :
Pour une axe modulo, la fonction retourne la position à atteindre dans le modulo (ex : POS -5.1 avec modulo de 1.0 => retourne 0.9).
Pour un mouvement MOVA/STTA, la fonction renvoie la position de destination du MOVA.
Pour un mouvement MOVR/STTR, la fonction renvoie la position absolue de destination.
Pour un mouvement STTIM/STTIP, la positon n'est pas mise à jour dans POS_T.
Pour un mouvement POS, la position est mise a jour avec la valeur de POS.
Pour un ordre STOP/SSTOP ou décélération urgente, la fonction revoie la position d'arrêt du système.
Pour les autres instructions de mouvements, la position à atteindre n'est pas mise à jour.
<Axe> : Nom de l'axe

Voir aussi

POS_S


POSAUX_S

POSAUX_S  Position réelle auxiliaire

Syntaxe

<Expression> := POSAUX_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction retourne la position auxiliaire de l'axe.
On peut ainsi obtenir l'image en temps réel de la position auxiliaire de l'axe.
<Axe> : Nom de l'axe

Voir

POS_S


POSERROR_S

POSERROR_S  Indique une erreur de mouvement

Syntaxe

<Q> := POSERROR_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : USINT

Description

Cette fonction indique qu'un mouvement n'était pas générable (ex diminution de pente de décélération pendant la décélération, position d'arrêt dépassé pour un POS ).
Le générateur de trajectoire n'a pu respecter le mouvement demandé.
<Axe> : Nom de l'axe


R- Reset (langage IL)

R  Force une variable booléenne à FALSE

Syntaxe

<Q> := R (<Reset>)

Types acceptés

<Reset> : BOOL
<Q> : BOOL

Description

Cette fonction permet de forcer une variable booléenne à FALSE.

Remarques

Les opérateurs S et R sont disponibles en IL.
En LD, ils sont représentés par les bobinages (S) et (R).
En FBD, vous pouvez également utiliser les bobinages (S) et (R), mais les blocs RS et SR sont également disponibles.
Les opérations S et R n'ont pas d'équivalence directe en ST.

Exemple ST

Non disponible

Exemple FBD

Utilisez les blocs fonctionnels RS et SR

Exemple LD

(* exemple d'utilisation d'un bobinage "R" *)

Exemple IL

Op1: LD Reset
 R Q (* Q est forcé à FALSE si RESET = TRUE *)
 (* aucune action si RESET = FALSE *)

Voir aussi

S

RS

SR


R_TRIG

R_TRIG  Détection de front montant

Syntaxe

R_TRIG (<CLK>)
R_TRIG.Q

Types acceptés

<CLK> : BOOL
<Q> : BOOL

Description

Le bloc de fonction ´R_TRIG´ détecte l'état de l'entrée de commande ´CLK´.
Le changement d'état de ´0´ à ´1´ dans un cycle de process est détecté et indiqué dans le cycle suivant par l'activation de la sortie ´Q´.
La sortie est à "1" pendant le cycle où le changement de "CLK" est détecté et un front montant est indiqué.

Exemple ST

(* R_TRIG1 est une instance déclarée du bloc R_TRIG *)
R_TRIG1(CLK:=IN_BOOL);
Q_BOOL:=R_TRIG1.Q;

Exemple FBD

Exemple LD

Exemple IL

(* F_TRIG est une instance déclarée du bloc F_TRIG *)
Op1: CAL R_TRIG1 (CLK:=IN_BOOL)
     LD  R_TRIG1.Q
     ST  Q_BOOL

Voir aussi

F_TRIG


RAMOK_S

Syntaxe

<Q> := RAMOK_S (0)

Types acceptés

<Q> : USINT

Description

Cette fonction indique l'état de la mémoire BBM (RAM) au démarrage du MPC :

  • 0 : indique que la configuration était incorrecte au démarrage (donc si on est maintenant en train d'exécuter les tâches, elle a du être rechargée).

  • 1 : indique que la configuration en BBM était correcte au démarrage (par contre il peut y avoir des périphériques qui ne sont pas présents sur le bus Ethercat).

  • 2 : indique que la configuration a été restaurée.

Voir aussi

RAMTOFLASH

CLEARFLASH


RAMTOFLASH

Syntaxe

RAMTOFLASH (0)

Description

Cette fonction copie le contenue de la mémoire BBM (RAM) dans la mémoire FLASH du MPC

Voir aussi

CLEARFLASH

FLASHOK_S


READCAM

READCAM  Charge une came dans un tableau

Syntaxe

<TableauCame> := READCAM (<Came>)

Types acceptés

<Came> : tCam
<TableauCame> : tCamTable

Description

Cette fonction charge une came dans un tableau de came, ce qui permet de la modifier.
<Came> : Nom de la came
<TableauCame> :Tableau de came

Voir aussi

WRITECAM


REAL

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


REALTOFIX

Syntaxe

<Q> := REALTOFIX (<IN>, <PREC>, <INV>)

Type acceptés

<IN> : REAL
<PREC> : USINT
<INV> : BOOL

Description

Cette fonction convertit un réel en nombre à virgule fixe (UDINT) avec la précision indiquée.

<PREC> est la précision d'un nombre décimal.

<INV> à TRUE, permet d'inversés le poids fort (16bits) et le poids faible (16bits) du résultat de REALTOFIX

Langage ST

Valeur := REALTOFIX (1.23, 2, 0); (* Valeur = 123 *)


REG_S

REG_S  Etat de la capture

Syntaxe

<Q> := REG_S (<Numéro>)

Limite

<Numéro> : entre 0 et 127

Types acceptés

<Numéro> : UINT
<Q> : Real

Description

Cette fonction indique si une capture de position a été effectuée.
La valeur retournée n'est vraie qu'une fois par capture.
REG_S est remis automatiquement à 0 lorsqu'il est lu.
Sur une relance d'une autre capture et si REG_S vaut 1 alors REG1_S est mis à 0.

Exemple ST

(* Capture position réelle du moteur sur front montant de l'entrée 4 du MPC lorsque l'axe est entre 10 et 20. *)
CAPTURE (1, Axe_X, SRC_AXE, Mpc_4, 1, W_NONE , 10.0, 20.0);
WAIT (REG_S(1) = 1);     (* Attente d'une capture *)
Position:= REGPOS_S(1); (* Position = valeur de la position lors de la capture *)

Voir aussi

CAPTURE

CAPTURECANCEL

CAPTUREIMD

CAPTUREEVENT

REGPOS_S


REGPOS_S

REGPOS_S  Valeur de la capture

Syntaxe

<Q> := REGPOS_S (<Numéro>)

Limite

<Numéro> : entre 0 et 127

Types acceptés

<Numéro> : UINT
<Q> : BOOL

Description

Cette fonction retourne la dernière position capturée pour ce registre par l'exécution de l'instruction CAPTURE.

Exemple ST

(* Capture position réelle du moteur sur front montant de l'entrée 4 du MPC lorsque l'axe est entre 10 et 20. *)
CAPTURE (1, Axe_X, SRC_AXE, Mpc_4, 1, W_NONE , 10.0, 20.0);
WAIT (REG_S(1) = 1);    (* Attente d'une capture *)
Position:= REGPOS_S(1); (* Position = valeur de la position lors de la capture *)

Voir aussi

CAPTURE

CAPTURECANCEL

CAPTUREIMD

CAPTUREEVENT

REG_S


REPEAT

REPEAT  Boucle REPEAT

Syntaxe

REPEAT
<instructions>
UNTIL <expression>
END_REPEAT;

Types acceptés

<expression> : BOOL

Description

Les instructions entre "REPEAT" et "UNTIL" sont exécutés jusqu'à ce que la valeur de l'expression booléenne soit TRUE.
La condition est évaluée après l'exécution des énoncés.
Les instructions sont exécutées au moins une fois.

Remarques

Les instructions de boucle peuvent bloquer le cycle en une boucle infinie.

Exemple ST

iPos := 0;
REPEAT
 MyArray[iPos] := 0;
 iNbCleared := iNbCleared + 1;
 iPos := iPos + 1;
UNTIL iPos = iMax
END_REPEAT;

Exemple FBD

Non disponible

Exemple LD

Non disponible

Exemple IL

Non disponible

Voir aussi

IF

WHILE

FOR

CASE

EXIT


REPLACE

Motion Studio ne met pas en application la fonction REPLACE.


RESTART

RESTART  Redémarrage du système

Syntaxe

RESTART (<Type>)

Type accepté

<Type> : USINT

Description

Cette fonction permet de redémarrer le système.
<Type> : à "0" redémarre le MPC comme un redémarrage électrique, à "1" provoque l'arrêt des tâches, la ré-initialisation d'Ethercat et le redémarrage des tâches.


RESTART_S

RESTART_S  Retourne la raison du dernier démarrage

Syntaxe

<Q> := RESTART (0)

Type accepté

<Q> : USINT

Description

Cette fonction retourne la raison du dernier redémarrage.

  • "0" suite a une mise sous tension ou RESTART(0).

  • "1" si redémarrage manuel des tâches.

  • "2" si redémarrage par RESTART(1).


RET

Voir RETURN


RETC

Voir RETURN


RETCN

Voir RETURN


RETURN

RETURN  Saut à la fin du programme

Syntaxe

RETURN

Description

Cette instruction "RETURN" indique un saut à la fin du programme.

En FBD et en LD, le symbole "<RET>" est disponible. Le saut est conditionné par le flux booléen à gauche.

En IL, les instructions RET, RETC et RETCN peuvent être utilisées.

Quand il est utilisé dans une action d'étape SFC, l'instruction RETURN correspond à un saut vers la fin du bloc d'action.

Exemple ST

IF NOT bEnable THEN
    RETURN;
END_IF;
(* le reste du programme est ignoré si bEnabled = FALSE... *)

Exemple FBD

(* Dans cet exemple, le bloc TON n'est pas évalué si bIgnore = TRUE *)

Exemple LD

(* La seconde échelle n'est pas évaluée si ENABLE = FALSE *)

Exemple IL

Instructions disponibles:
RET Saut inconditionnel
RETC Saut si le résultat courant est TRUE
RETCN Saut si le résultat courant est FALSE

Start: LD   IN1
       RETC     (* saut à la fin si IN1 = TRUE *)
       LD   IN2 (* instructions non écéutées... *)
       ST  .Q2  (* ...si IN1 = TRUE *)
       RET      (* saut inconditionnel *)
       LD   IN3 (* instructions jamais éxécutées *)
       ST   Q3


RIGHT

RIGHT  Partie droite d'une chaîne

Syntaxe

<Q> := RIGHT (<IN>, <NBC>)

Types acceptés

<IN> : STRING
<NBC> : UINT
<Q> : STRING

Description

Cette fonction retourne les <NBC> caractères de droite d'une chaîne.
<IN> est la chaîne d'où les caractères sont à extraire
<NBC> est le nombre de caractères à extraire
<Q> est la chaîne contenant les <NBC> premiers caractères de <IN>.

Remarques

En LD, le flux d'entrée (EN) conditionne l'opération, et le flux est inchangé en sortie.
En IL, la première entrée doit être chargée dans le résultat courant avant l'appel de la fonction.
La seconde entrée est l'opérande de la fonction.

Exemple ST

Q := RIGHT (IN, NBC);

Exemple FBD

Exemple LD

(* La fonction est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1:  LD    IN
     RIGHT NBC
     ST    Q

Voir aussi

+

MLEN

DELETE

INSERT

FIND

REPLACE

LEFT

MID


ROL

ROL  Rotation des bits à gauche

Syntaxe

<Q> := ROL ( <IN>, <NBR> )

Types acceptés

<IN>, <Q> : ANY_BIT
<NBR> : UNIT

Description

Cette fonction permet de faire une rotation à gauche les bits d'une variable de type ANY_BIT.

Remarques

En langage LD et FBD, plusieurs fonctions ROL sont disponibles suivant le type de donnée.
En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction. Le second paramètre est l'argument de la fonction.

Exemple ST

Q := ROL (IN, NBR);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN
     ROL NBR
     ST  Q

Voir aussi

ROR

SHL

SHR


ROR

ROR  Rotation des bits à droite

Syntaxe

<Q> := ROR (<IN>, <NBR>)

Types acceptés

<IN>, <Q> : ANY_BIT
<NBR> : UNIT

Description

Cette fonction permet de faire une rotation à droite les bits d'une variable de type ANY_BIT.

Remarques

En langage LD et FBD, plusieurs fonctions ROR sont disponibles suivant le type de donnée.
En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction. Le second paramètre est l'argument de la fonction.

Exemple ST

Q := ROR (IN, NBR);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN
     ROR NBR
     ST  Q

Voir aussi

ROL

SHL

SHR


RS

RS  Bascule à RESET prioritaire

Syntaxe

<Q> := RS (<SET>, <RESET>)

Type accepté

<SET>, <RESET>, <Q> : BOOL

Description

Cette fonction réalise une bascule à RESET prioritaire
La sortie est inchangée si les deux entrées sont à FALSE.
Quand les deux entrées sont à TRUE, la sortie est forcée à FALSE (reset prioritaire).

SET | RESET | Q prec | Q
0 | 0 | 0 | 0
0 | 0 | 1 | 1
0 | 1 | 0 | 0
0 | 1 | 1 | 0
1 | 0 | 0 | 1
1 | 0 | 1 | 1
1 | 1 | 0 | 0
1 | 1 | 1 | 0

Exemple ST

(* MyRS est une instance déclarée du bloc RS *)
MyRS (SET, RESET1);
Q := MyRS.Q;

Exemple FBD

ExempleLD

Exemple IL

(* MyRS est une instance déclarée du bloc RS *)
Op1: CAL MyRS(SET, RESET1)
 LD MyRS.Q
 ST Q

Voir aussi

R(eset)

S(et)

SR


RUN

RUN  Lance une tâche

Syntaxe

RUN (<Tâche >)

Type accepté

< Tâche > : tGroup

Description

Cette fonction est utilisée pour lancer une tâche stoppée (ex : tâche déclarée en démarrage manuel).

Cette fonction redémarre une tâche suspendue

< Tâche > : Nom de la tâche

Remarque

Cette fonction n'a pas d'effets sur une tâche déjà lancée.

Exemple ST

Wait (Inp(Puissance)=1) ;
RUN (Couteau) ;
Wait (Inp(Puissance)=0) ;
HALT (Couteau) ;

Voir aussi

CONTINUE

HALT

SUSPEND


S - (langage IL)

S  Force une variable booléenne à TRUE

Syntaxe

<Q> := S (<Set>)

Types acceptés

<Set> : BOOL
<Q> : BOOL

Description

Cette fonction permet de forcer une variable booléenne à TRUE.

Remarques

Les opérateurs S et R sont disponibles en IL.
En LD, ils sont représentés par les bobinages (S) et (R).
En FBD, vous pouvez également utiliser les bobinages (S) et (R), mais les blocs RS et SR sont également disponibles.
Les opérations S et R n'ont pas d'équivalence directe en ST.

Exemple ST

Non disponible

Exemple FBD

Utilisez les blocs fonctionnels RS et SR

Exemple LD

(* exemple d'utilisation d'un bobinage "S" *)

Exemple IL

Op1: LD Set
 S Q (* Q est forcé à TRUE si SET = TRUE *)
 (* aucune action si SET = FALSE *)

Voir aussi

R

RS

SR


SECURITY

SECURITY  Définit les actions de sécurités

Syntaxe

SECURITY (<Axe>, <WatchDog>)

Type accepté

<Axe>, <WatchDog> : UINT

Description

Cette fonction permet de définir le comportement des actions de sécurités lors d"erreurs sur le MPC.
<Axe> = TRUE active les sécurités des axes : c'est-à-dire que les axes passent en mode non asservis sur les défauts suivants

  • Erreur de poursuite sur 1 axe

  • 1 défaut sur un des variateurs

  • 1 erreur communication Ethercat

  • 1 erreur MPC (IEC, interne, communication..)

<Axe> = FALSE : les axes passent en mode non asservis lorsque :

  • 1 erreur communication Ethercat

  • 1 défaut sur le variateur concerné

<WatchDog> = TRUE active les sécurités WatchDog du MPC ; c'est-à-dire que le chien de garde s'ouvre sur les défauts suivants :

  • Erreur de poursuite sur 1 axe

  • 1 défaut variateur

  • 1 erreur communication Ethercat

  • 1 erreur MPC (IEC, interne, communication..)

<WatchDog> = FALSE : le watchdog ne s'ouvre pas automatiquement

Remarques

Le redémarrage du MPC provoque l'ouverture du chien de garde.
Le réarmement du chien de garde se fait par la fonction WATCHDOGON.
L'erreur de poursuite d'un axe n'ouvre pas sa sortie DRIVE_READY.
Le redémarrage du MPC ou un plantage interne passe toutes les E/S à "0".


SECURITYFEMAX

Syntaxe

SECURITYFEMAX (<Axe>, <Droff>)

Types acceptés

<Axe> : tPeripheral
<Droff> : UINT

Description

Cette fonction permet de la gestion «Drive Ready» d'un axe lors d'un défaut d'erreur de poursuite (E12).
<Axe> : Nom de l'axe
<Droff> : mettre 1 pour activer la gestion du défaut, 0 pour la désactiver

Remarque

Par défaut la gestion de l'erreur de poursuite est activée.


SEL

Motion Studio ne met pas en application la fonction SEL.


SPEED

Syntaxe

SPEED (<Axe>, <Expression>)

Unité

<Expression> en unité utilisateur

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette instruction force la consigne de vitesse.
<Axe> : Nom de l'axe
<Expression> contient la valeur à appliquer.

Exemple ST

SPEED (Axe_X, 2300.00); (* Vitesse de 2300 tr/mn *)

Voir aussi

TORQUE

TORQUE_S

CURRENT

CURRENT_S

SPEED_S


SPEED_S

Syntaxe

<Q> := SPEED_S (<Axe>)

Unité

<Q> en unité utilisateur

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la vitesse courante.
<Axe> : Nom de l'axe

Voir aussi

TORQUE

TORQUE_S

CURRENT

CURRENT_S

SPEED


SETBITB

SETBITB  Modifie un bit d'une variable BYTE

Syntaxe

<Cible> := SETBITB (<Source>, <Numéro>, <Expression>)

Limite

<Numéro> doit être entre 0 et 7

Types acceptés

<Cible> : BYTE
<Source> : BYTE
<Numéro> : USINT
<Expression> : BOOL

Description

Cette fonction modifie un bit d'une variable BYTE.


SETBITD

SETBITD  Modifie un bit d'une variable DWORD

Syntaxe

<Cible> := SETBITD (<Source>, <Numéro>, <Expression>)

Limite

<Numéro> doit être entre 0 et 31

Types acceptés

<Cible> : DWORD
<Source> : DWORD
<Numéro> : USINT
<Expression> : BOOL

Description

Cette fonction modifie un bit d'une variable DWORD.


SETBITW

SETBITW  Modifie un bit d'une variable WORD

Syntaxe

<Cible> := SETBITW (<Source>, <Numéro>, <Expression>)

Limite

<Numéro> doit être entre 0 et 15

Types acceptés

<Cible> : WORD
<Source> : WORD
<Numéro> : USINT
<Expression> : BOOL

Description

Cette fonction modifie un bit d'une variable WORD.


SETMODE

Syntaxe

SETMODE (<Axe>, <Mode>, <Ini_Val>)

Type accepté

<Axe> : tPeripheral
<Mode> : tBcleMode
<Ini_Val> : tModeInitVal

Description

Cette fonction permet de modifier le mode de fonctionnement d'un axe.
<Axe> : Nom de l'axe

<Mode> : Mode de fonctionnement de l'axe

<Ini_Val> : Choix de transition entre les différents modes

Voir aussi

GETMODE


SETINP

SETINP Force l'état d'une entrée

Syntaxe

SETINP (<Input>>, <Value>)

Type accepté

<Input> : tIObitIn
<Value> : BOOL

Description

Cette fonction force l'état d'une entrée interne du MPC
<Input> : Entrée à modifier
<Value> : Valeur

Voir aussi

CAMBOX

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

STARTCAMBOX

STOPCAMBOX


SETTASKEVENTLIST

SETTASKEVENTLIST - Associe une liste d'évènement

Syntaxe

SETTASKEVENTLIST (<Tache>)

Type accepté

< Tâche > : tGroup

Description

Cette fonction permet d'associer une liste d'évènement utilisateur à une tâche.
<Tache> : Nom de la tâche

Voir aussi

GETLASTSYSEVENT

GETSYSTEMEVENT

GETUSEREVENTPARAM

SIGNAL


SGN

SGN  Signe

Syntaxe

<Signe> := SGN (<Expression>)

Type accepté

<Expression>, <Signe> : REAL

Description

Cette fonction retourne un réel égal à -1 pour les nombres négatifs, 1 pour les nombres positifs et 0 pour les nombres nuls.

Exemple

Signe :=SGN (-10.0) ; (* Résultat : Singe = -1 *)


SHL

SHL  Décalage des bits à gauche

Syntaxe

<Q> := SHL ( <IN>, <NBR> )

Types acceptés

<IN>, <Q> : ANY_BIT
<NBR> : UNIT

Description

Cette fonction permet de décaler à gauche les bits d'une variable de type ANY_BIT.

Remarques

En langage LD et FBD, plusieurs fonctions SHL sont disponibles suivant le type de donnée.
En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction. Le second paramètre est l'argument de la fonction.

Exemple ST

Q := SHL (IN, NBR);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN
     SHL NBR
     ST  Q

Voir aussi

ROL

ROR

SHR


SHR

SHR  Décalage des bits à droite

Syntaxe

<Q> := SHR ( <IN>, <NBR> )

Types acceptés

<IN>, <Q> : ANY_BIT
<NBR> : UNIT

Description

Cette fonction permet de décaler à droite les bits d'une variable de type ANY_BIT.

Remarques

En langage LD et FBD, plusieurs fonctions SHR sont disponibles suivant le type de donnée.
En LD, le flux d'entrée conditionne l'opération, et le flux est inchangé en sortie.
En IL, le premier paramètre doit être chargé dans le résultat courant avant l'appel de la fonction. Le second paramètre est l'argument de la fonction.

Exemple ST

Q := SHR (IN, NBR);

Exemple FBD

Exemple LD

(* L'opération est exécutée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD  IN
     SHT NBR
     ST  Q

Voir aussi

ROL

ROR

SHL


SIGNAL

SIGNAL  Génération d'événement

Syntaxe

SIGNAL (<Evénement>, <Paramètre>)

Type accepté

<Evénement> : UINT

<Paramètre> : UDINT

Description

Cette instruction génère un événement pour les tâches événementielles utilisateurs.
<Evénement> est le numéro de la tâche événementiel à déclencher.
<Paramètre> est un paramètre qui pourra être récupéré dans les tâches événementielles.

Voir aussi

GETLASTSYSEVENT

GETSYSTEMEVENT

GETUSEREVENTPARAM

SETTASKEVENTLIST


SIN

SIN  Sinus

Syntaxe

<Q> := SIN (<IN>)

Unité

<IN> est exprimée en radians

Types acceptés

<IN> : REAL
<Q>: REAL

Description

Cette fonction restitue le sinus de <IN>.
L'argument <IN> doit être une expression numérique valide.
La fonction SIN prend un angle et restitue le rapport de deux côtés d'un triangle rectangle.
Le rapport est la longueur du côté opposé à l'angle divisé par la longueur de l'hypoténuse.

Remarques

En langage LD, la fonction Cosinus inverse s'appelle : SIN_REAL
En langage FBS, la fonction Cosinus inverse s'appelle : SIN_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := SIN (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

Op1: LD  IN
     SIN
     ST  Q

Voir aussi

ACOS

ASIN

ATAN

COS

TAN


SINT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


SLAVEOFFSET

SLAVEOFFSET  Décale dynamiquement la position de l'esclave

Syntaxe

SLAVEOFFSET (<Esclave>, <Offset>, <Accélération>)

Unités

<Offset> : Distance dans l'unité utilisateur (Ex : mm, degré,...)
<Accélération> : Accélération dans l'unité utilisateur (Ex : mm/s², degré/s²,...)

Types acceptés

<Esclave> : tPeripheral
<Offset> : REAL
<Accélération> : REAL

Description

Cette instruction décale dynamiquement la position de l'esclave.
<Esclave> : Nom de l'axe
<Offset> : Valeur de l'offset à appliquer
<Accélération> accélération utilisée pour appliquer l'offset (dans l'unité du maître).

Remarque

Le décalage est appliqué directement si aucun mouvement synchro n'est en cours ou si l'axe n'est pas asservi.
Si les mouvements se terminent et qu'il n'y a plus de mouvement en cours, le SLAVEOFFSET_S prend immédiatement la valeur de SLAVEOFFSET. L'axe n'effectue donc pas la totalité du recalage
Un AXIS OFF ne remet pas à zéro le slaveoffset, la valeur courante est conservée.
SLAVEOFFSET est utilisable en et hors synchro

Voir aussi

SLAVEOFFSET_S


SLAVEOFFSET_S

SLAVEOFFSET_S  Valeur courante de l'offset esclave

Syntaxe

<Q> := SLAVEOFFSET_S (<Esclave>)

Unité

<Q> : Distance dans l'unité utilisateur (Ex : mm, degré,)

Type accepté

<Esclave> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la valeur courante de l'offset esclave.
<Esclave> : Nom de l'axe

Remarque

Lorsque la valeur courante est égale à la valeur <Offset> de la fonction SLAVEOFFSET, le décalage est alors terminé.

Voir aussi

SLAVEOFFSET


SPOST

SPOST  Rend le sémaphore

Syntaxe

SPOT (<NumSema>)

Types acceptés

< NumSema > : UINT

Description

Cette fonction rend le sémaphore <NumSema>.
La première tâche en attente de ce sémaphore est alors débloquée.
Un SPOST sur un sémaphore non pris ne retourne pas d'erreur et n'entraîne aucune action.
Un SPOST sur un sémaphore pris par une autre tâche provoque une erreur système.


SQRT

SQRT  Racine carrée

Syntaxe

<Q> := SQRT (<IN>)

Type accepté

<IN>, <Q> : REAL

Description

Cette fonction retourne la racine carrée de <IN>

Remarques

En LD, le flux en entrée (EN) conditionne l'appel de la fonction, et le flux est inchangé en sortie.
En IL, l'entrée doit être chargé dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := SQRT (IN);

Exemple FBD

Exemple LD

(* La fonction est appelée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD IN
SQRT
ST Q

Voir aussi

ABS

TRUNC

LOG

POW


SR

SR  Bascule à SET prioritaire

Syntaxe

<Q> := SR (<SET>, <RESET>)

Type accepté

<SET>, <RESET>, <Q> : BOOL

Description

Cette fonction réalise une bascule à SET prioritaire.
La sortie est inchangée si les deux entrées sont à FALSE.
Quand les deux entrées sont à TRUE, la sortie est forcée à TRUE (set prioritaire).

SET | RESET | Q prec | Q
0 | 0 | 0 | 0
0 | 0 | 1 | 1
0 | 1 | 0 | 0
0 | 1 | 1 | 0
1 | 0 | 0 | 1
1 | 0 | 1 | 1
1 | 1 | 0 | 1
1 | 1 | 1 | 1

Exemple ST

(* MySR est une instance déclarée du bloc SR *)
MySR (SET, RESET1);
Q := MySR.Q;

Exemple FBD

ExempleLD

Exemple IL

(* MySR est une instance déclarée du bloc SR *)
Op1: CAL MySR(SET, RESET1)
 LD MySR.Q
 ST Q

Voir aussi

R(eset)

S(et)

RS


SSTOP

SSTOP  Arrêt d'un axe

Syntaxe

SSTOP (<Axe>)

Type accepté

<Axe> : tPeripheral

Description

Cette fonction stoppe <Axe> avec la décélération courante.
La fonction n'est pas bloquante pour la tâche.
<Axe> : Nom de l'axe

Si <Axe> est un axe maître lié avec la fonction CAM, GEARBOX ou MOVS, alors <Axe> et son esclave sont stoppés mais le lien n'est pas rompu.
Si <Axe> est un axe esclave lié avec la fonction CAM, GEARBOX ou MOVS, alors <Axe> s'arrête et il n'est plus lié avec le maître.
L'instruction SSTOP vide le buffer de mouvement et stoppe l'axe en utilisant la décélération courante. Cette instruction n'est pas bloquante et n'attend pas que MOVE_S=0.

Remarques

La fonction bloque la tâche tant que le buffer de mouvement est plein.
A la fin de la décélération retire tous les mouvements en attente. Si un mouvement est envoyé après un SSTOP et avant que le mouvement soit terminé, ce mouvement sera ignoré, sauf s'il s'agit d'un STOP/SSTOP qui va modifier la pente de décélération et prendre en compte la nouvelle pente.

Exemple ST

SSTOP (Axe_X);

Voir aussi

STTA

STTR

STTI

CAM

GEARBOX

MOVS


ST

Voir Assignation


STARTCAM

STARTCAM  Exécute une came

Syntaxe

STARTCAM (<N°came>)

Limite

<N°came> de 1 à 128

Type accepté

<N°came> : UINT

Description

Cette instruction lance l'exécution d'une came qui a préalablement été chargé par un LOADCAM ou LOADCAMI.

Voir aussi

LOADCAM

CAM_S


STARTCAMBOX

STARTCAMBOX  Lance une boîte à cames

Syntaxe

STARTCAMBOX (<NumCamBox>)

Type accepté

<NumCamBox> : USINT

Description

Cette fonction lance une boîte à contact précédemment définie.
<NumCamBox> : Numéro de boîte (0..31)

Remarques

Les sorties ne sont pas forcément rafraîchies une fois sorti de cette fonction (cela dépend de l'échange de process)

Voir aussi

CAMBOX

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

SETINP

STOPCAMBOX


STARTCOUNTER

Syntaxe

STARTCOUNTER (<NumCounter>)

Type accepté

<NumCounter> : USINT

Description

Cette fonction démarre un compteur.

<NumCounter> : N° de compteur (0 à 63)

Voir aussi

COUNTER

COUNTER_S

COUNTEREVENT

COUNTERSET

STOPCOUNTER


STATUS_S

STATUS_S  Etat dune tâche

Syntaxe

<Etat> := STATUS_S (<Nom>)

Type accepté

<Nom> : tGroup

<Etat> : tTaskStatus

Description

Cette fonction retourne l'état d'une tâche

<Nom> : Nom d'une tâche
Les valeurs de retour possibles <Etat> sont :

  • TSTOP : La tâche est stoppée

  • TSUSPEND : La tâche est suspendue

  • TRUN : La tâche est en cours d'exécution

Exemple

Run (Percage);

Wait (Status_s (Percage) = TSTOP);


STN

Voir Assignation


STOP

STOP  Arrêt d'un axe

Syntaxe

STOP (<Axe>)

Type accepté

<Axe> : tPeripheral

Description

Cette fonction stoppe <Axe> avec la décélération courante.
La fonction est bloquante pour la tâche.
<Axe> : Nom de l'axe
Si <Axe> est un axe maître lié avec la fonction CAM, GEARBOX ou MOVS, alors <Axe> et son esclave sont stoppés mais le lien n'est pas rompu.
Si <Axe> est un axe esclave lié avec la fonction CAM, GEARBOX ou MOVS, alors <Axe> s'arrête et il n'est plus lié avec le maître.
L'instruction STOP vide le buffer de mouvement et stoppe l'axe en utilisant la décélération courante.

Remarques

La fonction bloque la tâche tant que le buffer de mouvement est plein.
A la fin de la décélération retire tous les mouvements en attente. Si un mouvement est envoyé après un STOP et avant que le mouvement soit terminé, ce mouvement sera ignoré, sauf s'il s'agit d'un STOP/SSTOP qui va modifier la pente de décélération et prendre en compte la nouvelle pente.

Exemple ST

STOP (Axe_X);

Voir aussi

STTA

STTR

STTI

CAM

GEARBOX

MOVS


STOPCAMBOX

STOPCAMBOX  Arrête une boîte à came

Syntaxe

STOPCAMBOX (<NumCamBox>, <ResetOutput>)

Type accepté

<NumCamBox> : USINT
<ResetOuput> : BOOL

Description

Cette fonction Stoppe une boite à came.
<NumCamBox> : Numéro de boîte (0..31)
<ResetOutput> : Remet les sortie à zéro avant d'arrêter la boite à contact

Voir aussi

CAMBOX

CAMBOX_S

CAMBOXOUT

CAMBOXSEG

SETINP

STARTCAMBOX


STOPCOUNTER

Syntaxe

STOPCOUNTER (<NumCounter>)

Type accepté

<NumCounter> : USINT

Description

Cette fonction arrête un compteur.
<NumCounter> : N° de compteur (0 à 63)

Voir aussi

COUNTER

COUNTER_S

COUNTEREVENT

COUNTERSET

STARTCOUNTER


STOPS

STOPS  Permet d'arrêter l'instruction MOVS

Syntaxe

STOPS (<Esclave>, <Pos. Esclave>)

Unité

<Pos. Esclave> : unité utilisateur (Ex : mm, degré,)

Type accepté

<Esclave> : tPeripheral
<Pos. Esclave> : REAL

Description

Cette fonction permet à l'axe esclave de décélérer pour atteindre la position <Pos.esclave>
<Esclave> : Nom de l'axe

Remarque

L'appel de l'instruction STOPS remet le flag STOPS_S à zéro.

Exemple ST

TRIGGERI (FinDeSynchro,1); (* Attend un front montant sur l'entrée FinDeSynchro *)
STOPS (105.0);             (* Décélération jusqu'à la position 105 *)


STOPS_S

STOPS_S  Erreur d'exécution de la fonction STOPS

Syntaxe

<Q> := STOPS_S (<Axe>)

Types acceptés

<Axe> : tPeripheral
<Q> : BOOL

Description

Cette fonction permet de savoir si un STOPS a pu s'exécuter correctement :
<Esclave> : Nom de l'axe
STOPS_S = 1 si :

  • La position esclave demandé par l'instruction STOPS n'est pas réalisable (ex : la position esclave demandée par STOPS est déjà dépassée.)

  • 2ième cas : si la vitesse esclave est nulle.

Sinon retourne 0

Remarque

Il est remis à zéro après chaque lecture.

Exemple

STOPS (Axe_X, 105.0);
WAIT (MOVE_S (Axe_Y) =0);
If (STOPS_S (Axe_X) =1) Then
    Defaut: = 1;
End_If;


STRYWAIT

STRYWAIT  Tente de prendre le sémaphore

Syntaxe

<Etat> := STRYWAIT (<NumSema>)

Types acceptés

< NumSema > : UINT
<Etat> : BOOL

Description

Cette fonction tente de prendre le sémaphore <NumSema> :

  • S'il est disponible alors il est pris et l'exécution continue et la fonction retourne TRUE.

  • S'il est déjà pris par cette tâche : la demande est silencieusement ignorée (le sémaphore reste pris par cette tâche), la fonction retourne TRUE

  • S'il n'est pas disponible, la fonction retourne FALSE

Exemple ST

While (not STRYWAIT(5)) do

(* anime sur l'afficheur pour montrer l'attente*)

Display(1) ;

Delay 10 ;

Display(2) ;

Delay 10 ;

End_while ;

MavarCritique := 23 ;

SPOST(5) ;


STTA

STTA  Lance un mouvement absolu

Syntaxe

STTA (<Axe>, <Distance>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Axe> : tPeripheral
<Distance> : REAL

Description

Cette fonction permet de lancer un mouvement à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple ST

STTA (Axe_X, 1200.0);
WAIT (MOVE_S (Axe_X) = 0);

Voir aussi

STTR

MOVA

MOVR

STTIP

STTIM

MOVE_S


STTC2D

Syntaxe

STTL2D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Centre_ X>, < Centre_Y>, <Sens>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y > : REAL
< Centre_ X>, < Centre_Y> : REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer un mouvement d'interpolation circulaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe_virt> : Nom de l'axe virtuel


STTC3D

Syntaxe

STTL3D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Distance_ Z>, < Centre_ X>, < Centre_Y>, < Centre_Z>, <Sens>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y >, < Distance_ Z> : REAL
< Centre_ X>, < Centre_Y>, < Centre_Z> : REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer un mouvement d'interpolation circulaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe_virt> : Nom de l'axe virtuel


STTH3D

Syntaxe

STTH3D (<Axe_virt >, < Centre_ X>, < Centre_Y>, < Pas>, <Angle>, <Sens>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Centre_ X>, < Centre_Y> : REAL
< Pas >, <Angle> :REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer un mouvement d'interpolation hélicoïdale.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe_virt> : Nom de l'axe virtuel


STTH

STTH  Prise d'origine non bloquante

Syntaxe

STTH (<Axe>, <Type>)

Types acceptés

<Axe> : tPeripheral
<Type> : SINT

Description

La Prise d'origine permet au système de déterminer l'origine de mesure de l'axe, celle-ci étant perdue à chaque coupure d'alimentation.

La prise d'origine machine (P.O.M) permet de référencer la position moteur par rapport à une position de la mécanique.

Différents types de POM sont disponibles : immédiat, sur capteur, avec dégagement.

Un cycle de POM force le compteur de position moteur à une valeur "Zéro Programme".
<Axe> : Nom de l'axe
<Type> :

  • -1 : Type de prise d'origine paramétré dans le profil

  • 0 : Immédiate - l'axe revient à sa valeur "Zéro Programme"

  • 1 : Sur TOP Z
    Le moteur n'effectue aucun déplacement mais sa position est re-calculée par rapport au Top Z moteur et à la valeur "Zéro Programme".
    On obtient une position se situant entre +/- ½ tour ou référence +/- ½ tour moteur.

  • 2 : Sur capteur, en sens +, sans dégagement
    Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME de l'axe.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 3 : Sur capteur, en sens +, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens - pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME pour forcer la position à la valeur "Zéro Programme" et le moteur s'arrête à cette position.

  • 4 : Sur capteur, en sens -, sans dégagement
    Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 5 : Sur capteur, en sens -, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME pour forcer la position à la valeur "Zéro Programme" et le moteur s'arrête à cette position.

  • 6 : Sur capteur et TOP Z, en sens +, sans dégagement
    Le variateur lance un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 7 : Sur capteur et TOP Z, en sens +, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens - pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens + et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 8 : Sur capteur et TOP Z, en sens -, sans dégagement
    Le variateur lance un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 9 : Sur capteur et TOP Z, en sens -, avec dégagement
    Si l'entrée HOME est déjà à 1 alors le variateur lance en premier un mouvement infini en sens + pour se dégager du capteur HOME.
    Le variateur lance ensuite un mouvement infini en sens - et attend un front montant sur l'entrée HOME puis le passage par le TOP Z moteur.
    La position est alors forcée à la valeur "Zéro Programme" et le moteur s'arrête sur cette position.

  • 10 : Initialise la position de l'axe avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

  • 11 : Remise à 0 de l'erreur de poursuite

Remarque

La fonction STTH n'est pas bloquante.

Un home prend en compte :

  • La position de prise d'origine (zéro Programme)

  • La vitesse de prise d'origine (paramètre _IMD_HOME_VELOCITY)

  • L'accélération et la décélération en cours sur l'axe

Ces mouvements ne modifient pas la vitesse courante de l'axe.

Exemple ST

STTH(Axe_X,0); (*Prise d'origine immédiate *)

Voir aussi

HOMECANCEL

HOME_S

HOMEAUX

HOMEAUXCANCEL

HOMEAUX_S


STTHAUX

STTHAUX  Prise d'origine sur l'auxiliaire non bloquante

Syntaxe

SSTHAUX(<Axe>, <Type>)

Types acceptés

<Axe> : tPeripheral
<Type> : SINT

Description

Cette fonction permet de faire une prise d'origine sur l'auxiliaire d'un axe

<Axe> : Nom de l'axe
<Type> :

  • 0 : immédiate - l'auxiliaire revient à sa valeur "Zéro Programme"

  • 1 : Sur Top Z (la fonction attend le top Z sur l'entrée auxiliaire).

  • 2 : Sur capteur (la fonction attend un front montant sur le capteur HOME)

  • 3 : Sur capteur et Top Z (la fonction attend un niveau haut sur le capteur HOME et un top Z sur le codeur auxiliaire)

  • 4 : Initialise la position de l'auxiliaire avec la position absolue (seulement en mode SinCos ou SSI sinon initialisation à 0)

Remarque

La fonction HOMEAUX n'est pas bloquante.

Exemple ST

STTHAUX (Axe_X,0); (*Prise d'origine immédiate sur l'auxiliaire*)

Voir aussi

HOME

HOMECANCEL

HOME_S

HOMEAUXCANCEL

HOMEAUX_S


STTIM

STTIM  Lance un mouvement infini en sens moins

Syntaxe

STTIM (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

Cette fonction permet de lancer un mouvement en sens infini moins.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple ST

STTIM (Axe_X);
WAIT (INP (Arret)) = 0);
STOP (Axe_X);

Voir aussi

STTA

STTR

MOVA

MOVR

STTIP

MOVE_S


STTIP

STTIP  Lance un mouvement infini en sens plus

Syntaxe

STTIP (<Axe>)

Types acceptés

<Axe> : tPeripheral

Description

Cette fonction permet de lancer un mouvement en sens infini plus.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple ST

STTIP (Axe_X) ;
WAIT (INP (Arret)) = 0);
STOP (Axe_X) ;

Voir aussi

STTA

STTR

MOVA

MOVR

STTIM

MOVE_S


STTL2D

Syntaxe

STTL2D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y > : REAL
< Absolu > : BOOL

Description

Cette fonction permet de lancer un mouvement d'interpolation linéaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe_virt> : Nom de l'axe virtuel


STTL3D

Syntaxe

STTL3D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Distance_ Z>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y >, < Distance_ Z> : REAL
< Absolu > : BOOL

Description

Cette fonction permet de lancer un mouvement d'interpolation linéaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe_virt> : Nom de l'axe virtuel


STTR

STTR  Lance un mouvement relatif

Syntaxe

STTR (<Axe>, <Distance>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,)

Types acceptés

<Axe> : tPeripheral
<Distance> : REAL

Description

Cette fonction permet de lancer un mouvement à une position relative.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
L'axe utilise les valeurs courantes de vitesse, d'accélération et de décélération.
<Axe> : Nom de l'axe

Exemple ST

STTR (Axe_X, 1200.0) ;
WAIT (MOVE_S (Axe_X) = 0);

Voir aussi

STTA

MOVA

MOVR

STTIP

STTIM

MOVE_S


SUSPEND

SUSPEND  Suspend une tâche

Syntaxe

SUSPEND (<Tâche >)

Type accepté

< Tâche > : tGroup

Description

Cette fonction suspend une tâche en cours d'exécution.

Remarques

Cette fonction n'a pas d'effets sur les tâches stoppées.
Les fonctions bloquantes continue de s'exécuter pendant un SUSPEND (DELAY, MOVA ).
< Tâche > : Nom de la tâche à suspendre

Exemple ST

Wait (Inp(Puissance)=0);
SUSPEND (Couteau);
Wait (Inp(Puissance)=1);
RUN (Couteau);

Voir aussi

RUN

CONTINUE

HALT


SUB

SUB  Soustraction (langage IL)

Voir Soustraction


SWAIT

SWAIT  Prend le sémaphore

Syntaxe

SWAIT (<NumSema>)

Types acceptés

< NumSema > : UINT

Description

Cette fonction prend le sémaphore <NumSema> :

  • S'il est disponible alors il est pris et l'exécution continue immédiatement.

  • S'il est déjà pris par cette tâche : la demande est silencieusement ignorée (le sémaphore reste pris par cette tâche)

  • S'il n'est pas disponible alors la tâche est mise en attente jusqu'à ce qu'il soit disponible

Exemple ST

SWAIT(5) ;

MavarCritique := 23 ;

SPOST(5) ;


TAN

TAN  Tangente

Syntaxe

<Q> := TAN (<IN>)

Unité

<IN> est exprimée en radians

Types acceptés

<IN> : REAL
<Q>: REAL

Description

Cette fonction restitue la tangente de <IN>.
L'argument <IN> doit être une expression numérique valide.
La fonction TAN prend un angle et restitue le rapport de deux côtés d'un triangle rectangle.
Le rapport est la longueur du côté opposé d'un angle divisée par la longueur du côté adjacent à l'angle.

Remarques

En langage LD, la fonction Cosinus inverse s'appelle : TAN_REAL
En langage FBS, la fonction Cosinus inverse s'appelle : TAN_REAL_FBD
En langage IL, l'entrée (IN) doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := TAN (IN);

Exemple FBD

Exemple LD

(* La fonction est exécutée seulement si EN est TRUE *)
(* ENO a la même valeur que EN *)

Exemple IL

Op1: LD  IN
     TAN
     ST  Q

Voir aussi

ACOS

ASIN

ATAN

COS

SIN


THEN

Voir IF


TIMEH

TIMEH  Temps écoulé depuis le démarrage du MPC

Syntaxe

<Q> := TIMEH (0)

Type accepté

<Q> : UDINT

Description

Cette fonction retourne le nombre de ms écoulé depuis le démarrage au-delà de 49 jours (32 bits de poids forts).

Voir aussi

TIMEL


TIMEL

TIMEL  Temps écoulé depuis le démarrage du MPC

Syntaxe

<Q> := TIMEL (0)

Limite

<Q> : 32 bits soit 1193h soit 49.71j max

Type accepté

<Q> : UDINT

Description

Cette fonction retourne le nombre de ms écoulé depuis le démarrage (32 bits de poids faibles).

Voir aussi

TIMEH


TIMER

Syntaxe

<ETAT_TEMPO> := TIMER (<TEMPO>)

Types acceptés

<ETAT_TEMPO>: BOOL
<TEMPO> : UDINT

Description

L'instruction TIMER est utilisée pour établir des attentes actives. Elle indique si une temporisation chargée par LOADTIMER est écoulée.

Remarques

Le temps entre le chargement et le test de la temporisation ne doit pas dépasser 2^31, ce qui correspond à environ 25 jours.

Exemple ST

Tempo := LOADTIMER (3000) ; (* Chargement d'une temporisation de 3s *)

BOUCLE :
IF (TIMER (Tempo) = FALSE) THEN

GOTO BOUCLE ; (* Attente de la fin de la temporisation *)

END_IF ;

Voir aussi

LOADTIMER


TO

Voir FOR


TOF

TOF  Temporisateur à l'enclenchement

Syntaxe

TOF (<IN>, <PT>)
<Q>:= TOF.Q
<ET>:= TOF.ET

Types acceptés

<IN> : BOOL
<PT> : TIME
<Q> : BOOL
<ET> : TIME

Description

Cette fonction permet de réaliser une temporisation à retard au déclenchement.
La temporisation commence sur un front descendant de <IN>.
Elle s'arrête quand le temps écoulé est égal au temps programmé <PT>.
Un front montant de <IN> remet la temporisation à 0.
Le signal de sortie <Q> passe à "1" quand <IN> passe à "1", et repasse à "0" quand le temps programmé est écoulé.
La variable de sortie <ET> contient le valeur de le temporisation. Elle va croître jusqu'à la valeur temps programmé <PT> tant que la commande <IN> est à "0" et est remise à "0" sur front montant de <IN>.

Remarque

En LD, le flux d'entrée est la commande IN. Le flux en sortie est le signal Q.

Exemple ST

(* MyTimer
 est une instance déclarée du bloc TOF *)
MyTimer (IN, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;

Exemple FBD

Exemple LD

Exemple IL

(* MyTimer est une instance déclarée du bloc TOF *)
Op1: CAL MyTimer (IN, PT)
     LD  MyTimer.Q
     ST  Q
     LD  MyTimer.ET
     ST  ET

Voir aussi

TON

TP


TON

TON  Temporisateur à l'enclenchement

Syntaxe

TON (<IN>, <PT>)
<Q>:= TON.Q
<ET>:= TON.ET

Types acceptés

<IN> : BOOL
<PT> : TIME
<Q> : BOOL
<ET> : TIME

Description

Cette fonction permet de réaliser une temporisation à retard au déclenchement.
La temporisation commence sur un front montant de <IN>.
Elle s'arrête quand le temps écoulé est égal au temps programmé <PT>.
Un front descendant de <IN> remet la temporisation à 0.
Le signal de sortie <Q> passe à "1" quand le temps programmé est écoulé, et repasse à "0" quand la commande <IN> retombe.
La variable de sortie <ET> contient le valeur de le temporisation. Elle va croître jusqu'à la valeur temps programmé <PT> tant que la commande <IN> est à "0" et est remise à "0" sur front montant de <IN>.

Remarques

Le changement de valeur de <PT> est pris en compte que sur front montant de <IN>.
En LD, le flux d'entrée est la commande IN. Le flux en sortie est le signal Q.

Exemple ST

(* MyTimer
 est une instance déclarée du bloc TON *)
MyTimer (IN, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;

Exemple FBD

Exemple LD

Exemple IL

(* MyTimer est une instance déclarée du bloc TON *)
Op1: CAL MyTimer (IN, PT)
     LD  MyTimer.Q
     ST  Q
     LD  MyTimer.ET
     ST  ET

Voir aussi

TOF

TP


TORQUE

Syntaxe

TORQUE (<Axe>, <Expression>)

Unité

<Expression> en N.m

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette instruction force la consigne de couple.
<Axe> : Nom de l'axe
<Expression> contient la valeur à appliquer.

Exemple ST

TORQUE (Axe_X, 5.20); (* Couple de 5.2 N.m *)

Voir aussi

TORQUE_S

CURRENT

CURRENT_S

SPEED

SPEED_S


TORQUE_S

TORQUE_S - Retourne le couple

Syntaxe

<Q> := TORQUE_S (<Axe>)

Unité

<Q> en N.m

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne le couple courant.
<Axe> : Nom de l'axe

Voir aussi

TORQUE

CURRENT

CURRENT_S

SPEED

SPEED_S


TP

TP  Temporisateur d'impulsions

Syntaxe

TON (<IN>, <PT>)
<Q>:= TON.Q
<ET>:= TON.ET

Types acceptés

<IN> : BOOL
<PT> : TIME
<Q> : BOOL
<ET> : TIME

Description

Permet de réaliser un bloc fonction monostable.
La temporisation démarre sur un front montant de <IN>.
Elle s'arrête quand le temps programmé est écoulé.
Un front descendant de <IN> remet la temporisation à 0, seulement après le temps programmé.
Toutes les impulsions de l'entrée <IN> pendant le temps programmé sont ignorées.
Le signal de sortie <Q> est "1" tant que la temporisation est active.
La variable de sortie <ET> contient le valeur de le temporisation.
Après que la temporisation soit écoulée, la variable de sortie <ET> reste à la valeur temps programmé <PT> tant que la commande <IN> est à "1".

Remarques

Le changement de valeur de <PT> est pris en compte que sur front montant de <IN>.
En LD, le flux d'entrée est la commande IN. Le flux en sortie est le signal Q.

Exemple ST

(* MyTimer
 est une instance déclarée du bloc TP *)
MyTimer (IN, PT);
Q := MyTimer.Q;
ET := MyTimer.ET;

Exemple FBD

Exemple LD

Exemple IL

(* MyTimer est une instance déclarée du bloc TP *)
Op1: CAL MyTimer (IN, PT)
     LD  MyTimer.Q
     ST  Q
     LD  MyTimer.ET
     ST  ET

Voir aussi

TON

TOFF


TRAJA

TRAJA  Trajectoire absolue

Syntaxe

TRAJA (<Axe>, <Distance>, <Vitesse>, <Acceleration>, <Deceleration>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,...)
<Vitesse> : unité utilisateur (Ex : mm/s, degré/s,...)
<Acceleration>, <Deceleration> : unité utilisateur/s² (Ex : mm/s², degré/s²,)

Types acceptés

<Axe> : tPeripheral
<Distance>, <Vitesse>, <Acceleration>, <Deceleration> : REAL

Description

Cette fonction permet de lancer une trajectoire complexe à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe> : Nom de l'axe

Exemple ST

MERGE (Axe_X,1);                              (* Passage en petite vitesse *)
TRAJA (Axe_X, 1000.0, Vrapide, 100.0, 100.0); (* à la position 1000 *)
TRAJA (Axe_X, 1500.0, Vlente, 100.0, 100.0);  (* sans arrêt de l'axe *)
MERGE (Axe_X, 0);

Voir aussi

TRAJR

STTA

STTR

MOVA

MOVR

STTIP

STTIM

MOVE_S


TRAJC2D

Syntaxe

STTL2D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Centre_ X>, < Centre_Y, <Sens>, <Vitesse>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y > : REAL
< Centre_ X>, < Centre_Y> : REAL
<Vitesse> : REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer une trajectoire complexe d'interpolation circulaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe_virt> : Nom de l'axe virtuel


TRAJC3D

Syntaxe

STTL3D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Distance_ Z>, < Centre_ X>, < Centre_Y>, < Centre_Z>,<Sens>, <Vitesse>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y >, < Distance_ Z> : REAL
< Centre_ X>, < Centre_Y>, < Centre_Z> : REAL
<Vitesse> : REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer une trajectoire complexe d'interpolation circulaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe_virt> : Nom de l'axe virtuel


TRAJH3D

Syntaxe

STTL3D (<Axe_virt >, < Centre_ X>, < Centre_Y>, < Pas>, <Angle>, <Sens>, <Vitesse>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Centre_ X>, < Centre_Y> : REAL
< Pas >, <Angle> :REAL
<Vitesse> : REAL
< Sens> : BOOL
< Absolu > : BOOL

Description

Cette fonction permet de lancer une trajectoire complexe d'interpolation hélicoïdale.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe_virt> : Nom de l'axe virtuel


TRAJIM

TRAJIM  Lance un mouvement infini en sens moins

Syntaxe

TRAJIM (<Axe>>, <Vitesse>, <Accélération>,)

Unité

<Vitesse> : unité utilisateur (Ex : mm/s, degré/s,...)
<Accélération> : unité utilisateur/s² (Ex : mm/s², degré/s²,...)

Types acceptés

<Axe> : tPeripheral
<Vitesse>, <Accélération> : REAL

Description

Cette fonction permet de lancer un mouvement en sens moins.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe> : Nom de l'axe

Exemple ST

TRAJIM
 (Axe_X, 50.0, 250.0) ;
WAIT (INP (Arret)) = 0);
STOP (Axe_X) ;

Voir aussi

TRAJA

TRAJR

TRAJIP


TRAJIP

TRAJIP Lance un mouvement infini en sens plus

Syntaxe

TRAJIP (<Axe>>, <Vitesse>, <Accélération>,)

Unité

<Vitesse> : unité utilisateur (Ex : mm/s, degré/s,...)
<Accélération> : unité utilisateur (Ex : mm/s², degré/s²,...)

Types acceptés

<Axe> : tPeripheral
<Vitesse>, <Accélération> : REAL

Description

Cette fonction permet de lancer un mouvement en sens plus.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe> : Nom de l'axe

Exemple ST

TRAJIP
 (Axe_X, 50.0, 250.0);
WAIT (INP (Arret)) = 0);
STOP (Axe_X);

Voir aussi

TRAJA

TRAJR

TRAJIM


TRAJL2D

Syntaxe

STTL2D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, <Vitesse>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y > : REAL
<Vitesse> : REAL
< Absolu > : BOOL

Description

Cette fonction permet de lancer une trajectoire complexe d'interpolation linéaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe_virt> : Nom de l'axe virtuel


TRAJL3D

Syntaxe

STTL3D (<Axe_virt >, < Distance_ X>, < Distance_ Y>, < Distance_ Z>, <Vitesse>, < Absolu>)

Types acceptés

<Axe_virt> : tPeripheral
< Distance_ X >, < Distance_ Y >, < Distance_ Z> : REAL
<Vitesse> : REAL
< Absolu > : BOOL

Description

Cette fonction permet de lancer une trajectoire complexe d'interpolation linéaire à une position absolue.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe_virt> : Nom de l'axe virtuel


TRAJR

TRAJR  Trajectoire relative

Syntaxe

TRAJR (<Axe>, <Distance>, <Vitesse>, <Acceleration>, <Deceleration>)

Unité

<Distance> : unité utilisateur (Ex : mm, degré,...)
<Vitesse> : unité utilisateur (Ex : mm/s, degré/s,...)
<Acceleration>, <Deceleration> : unité utilisateur/s² (Ex : mm/s², degré/s²,...)

Types acceptés

<Axe> : tPeripheral
<Distance>, <Acceleration>, <Deceleration> : REAL

Description

Cette fonction permet de lancer une trajectoire complexe à une position relative.
Le système n'attend pas la fin du mouvement (MOVE_S=0) et exécute la prochaine instruction.
<Axe> : Nom de l'axe

Exemple ST

MERGE (Axe_X,1);                              (* Passage en petite vitesse *)
TRAJA (Axe_X, 1000.0, Vrapide, 100.0, 100.0); (* à la position 1000 *)
TRAJR (Axe_X, 500.0, Vlente, 100.0, 100.0);   (* sans arrêt de l'axe *)
MERGE (Axe_X, 0);

Voir aussi

TRAJA

STTA

STTR

MOVA

MOVR

STTIP

STTIM

MOVE_S


TRIGGERAXIS_S

TRIGGERAXIS_S  Etat d'un trigger

Syntaxe

<Q> := TRIGGERAXIS_S (<Axe>)

Type accepté

<Axe> : tPeripheral
<Q> : BYTE

Description

Cette fonction retourne l'état d'un trigger d'un axe :

<Axe> : Nom de l'axe
Retourne 1, si un mouvement déclenché est en attente de déclenchement sur cet axe.
Retourne 0, si un mouvement n'est en attente de déclenchement.


TRIGGERAXISSET

TRIGGERAXISSET  Active le mouvement déclenché

Syntaxe

TRIGGERAXISSET (<Axe>)

Type accepté

<Axe> : tPeripheral

Description

Cette fonction permet de forcer le déclenchement d'un mouvement déclenché immédiatement.
Cette instruction est utilisée dans une autre tâche que celle contenant l'instruction TRIGGERx.
<Axe> : Nom de l'axe


TRIGGERF

TRIGGERF  Mouvement déclenché sur fenêtre

Syntaxe

TRIGGERF (<RefEntrée>, <Front>, <Axe>, <Source>, <Min>, <Max>, <Interieur>)

Types acceptés

<RefEntrée> : tIObitIn
<Front> : USINT
<Axe> : tPeripheral
<Source> : tSrcPos
<Mini> : REAL
<Maxi> : REAL
<Interieur> : BOOL

Description

Cette fonction permet de lancer un mouvement dans une position fenêtre d'un axe et un changement d'état d'une entrée.
<RefEntrée> : Référence de l'entrée de type BIT déclarée dans l'éditeur E/S.
<Front> : 1 pour front montant ou 0 pour front descendant.
<Axe> : Nom de l'axe
<Source> : permet de sélectionner la source du TRIGGERF.
<Intérieur> est utilisé pour indiquer si le déclenchement s'effectue à l'intérieur ou à l'extérieur de la fenêtre.

Remarques

Hors modulo : si Min > Max, le TRIGGERF ne sera jamais déclenché
En modulo : si Min > Max, le déclenchement s'effectue à l'extérieur de la fenêtre.

Exemple ST

(* Déplacement de l'axe X sur front montant de l'entrée 4 du MPC lorsque l'axe Y est entre 10 et 20 *)
TRIGGERF (Mpc_4, 1, Axe_Y, SRC_AXE, 10.0, 20.0, 1);
MOVR (Axe_X, 100.0);

Voir aussi

TRAGGERI

TRIGGERP

TRIGGERAXIS_S

TRIGGERAXISSET


TRIGGERI

TRIGGERI  Mouvement déclenché sur entrée

Syntaxe

TRIGGERI (<RefEntrée>, <Front >)

Types acceptés

<RefEntrée> : tIObitIn
<Front> : USINT

Description

Cette fonction permet de lancer un mouvement sur un changement d'état d'une entrée.
<RefEntrée> : Référence de l'entrée de type BIT déclarée dans l'éditeur E/S.
<Front> : 1 pour front montant ou 0 pour front descendant.

Exemple ST

(* Déplacement de l'axe X sur front montant de l'entrée 4 du MPC *)
TRIGGERF (Mpc_4, 1);
MOVR (Axe_X, 100.0);

Voir aussi

TRAGGERF

TRIGGERP


TRIGGERP

TRIGGERP  Mouvement déclenché sur une position

Syntaxe

TRIGGERP (<Axe>, <Source>, <Position>, <Sens>)

Types acceptés

<Axe> : tPeripheral
<Source> : tSrcPos
<Position> : REAL
<Sens> : tMoveDirection

Description

Cette fonction permet de lancer un mouvement sur détection d'une position d'axe.
<Axe> : Nom de l'axe
<Source> : permet de sélectionner la source du TRIGGERP.
<Position> est la position pour lancer le trigger.
<Sens> est utilisé pour indiquer le sens de déclenchement :

  • S_ALL si aucun

  • S_POS si sens positif

  • S_NEG si sens négatif

Exemple ST

(* Déplacement de l'axe X à partir de la position Y= 10 en sens positif *)
TRIGGERP (Axe_Y, SRC_AXE, 10.0, S_POS);
MOVR (Axe_X, 100.0);

Voir aussi

TRAGGERI

TRIGGERF


TRIGGERRESET

TRIGGERRESET  Annule le mouvement déclenché

Syntaxe

TRIGGERRESET (0)

Description

Cette fonction permet de retirer le trigger mémorisé dans une tache

Exemple ST

TriggerI (mon_io,1) ;

TriggerReset (0) ;

Stta (mon_axe,1.0) ;

(* Lance le mouvement immédiatement *)


TRUE

Valeur constante du type BOOL


TRUNC

TRUNC  Tronque la partie décimale d'un nombre

Syntaxe

<Q> := TRUNC (<IN>)

Types acceptés

<IN> : REAL
<Q> : ANY_INT

Description

Cette fonction tronque la partie décimale d'un nombre.

Remarques

En LD, l'opération n'est exécutée que si le flux d'entrée (EN) est "1".
Le flux est inchangé en sortie (ENO).
En IL, la valeur d'entrée doit être chargée dans le résultat courant avant l'appel de la fonction.

Exemple ST

Q := TRUNC (IN);

Exemple FBD

Exemple LD

(* La fonction est appelée si EN = TRUE *)
(* ENO est égal à EN *)

Exemple IL

Op1: LD    IN
     TRUNC
     ST    Q

Voir aussi

ABS

LOG

POW

SQRT


TYPE

Voir les sections de déclaration et les types redéfinis.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.

Les mots-clef TYPE et END_TYPE ne doivent pas être inséré dans des blocs VAR..END_VAR, mais dans les fichiers de déclaration de type au niveau du projet.


UDINT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


UINT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


UNLOCK

UNLOCK  Débloque le séquenceur

Syntaxe

UNLOCK (0)

Description

Cette fonction permet d'arrêter l'effet de la fonction LOCK


UNTIL

Voir REPEAT


USINT

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


UDINTWSWAP

UDINTWSWAP  Inversion de mots

Syntaxe

<Q> := UDINTSWAP (<IN>)

Type accepté

<IN>, <Q> : UDINT

Description

Cette fonction permet d'inverser les mots de 16 bits d'un mot de 32 bits (ABCD => CDAB)


VAR

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VAR_EXTERNAL

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VAR_GLOBAL

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VAR_IN

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VAR_IN_OUT

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VAR_OUTPUT

Voir les sections de déclaration.

Notes

Ce mot-clef est réservé aux zones de déclaration des POUs
Il est défini par l'IEC61131-3.


VEL

VEL  Vitesse

Syntaxe

VEL(<Axe>, <Expression>)

Unité

<Expression> en unité utilisateur par s (Ex : mm/s, degré/s, tr/s,...)

Limite

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette instruction modifie la vitesse courante.
<Axe> : Nom de l'axe
<Expression> contient la valeur à appliquer.

Remarque

La vitesse courante peut être modifiée à tout moment.

Exemple ST

VEL (Axe_X, 500.0); (* Vitesse de 500 unités/s *)

Voir aussi

VEL_S

VEL_T

VELP

ACC

DEC


VEL_S

VEL_S  Vitesse

Syntaxe

<Q> := VEL_S (<Axe>)

Unité

<Q> en unité utilisateur par s (Ex : mm/s, degré/s, tr/s,...)

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la vitesse courante.
<Axe> : Nom de l'axe

Voir aussi

VEL

VEL_T

VELP


VEL_T

VEL_T  Valeur de la consigne de vitesse

Syntaxe

<Q> = VEL_T (<Axe>)

Unité

<Q> en unité utilisateur par s (Ex : mm/s, degré/s, tr/s)

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la consigne actuelle de vitesse pour cet axe.
<Axe> : Nom de l'axe

Exemple ST

VEL(Axe_X, 500.0); (* Vitesse de 500 unités/s *)

ConsigneVitesse := VEL_T(Axe_X) ; (* ConsigneVitesse = 500 *)

Voir aussi

VEL

VEL_S

VELP

ACC_T

DEC_T


VELAUX_S

VELAUX_S  Vitesse

Syntaxe

<Q> := VELAUX_S (<Axe>)

Unité

<Q> en unité utilisateur par s (Ex : mm/s, degré/s, tr/s,...)

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la vitesse courante de l'auxiliaire.
<Axe> : Nom de l'axe

Voir aussi

VEL_S


VELP

VELP  Vitesse en pourcentage

Syntaxe

VELP(<Axe>,<Expression>)

Limite

<Expression> doit être supérieur ou égal à 0

Types acceptés

<Axe> : tPeripheral
<Expression> : REAL

Description

Cette fonction ajuste la vitesse courante en pourcentage du paramètre de vitesse par défaut définie dans le profil de l'axe.
<Axe> : Nom de l'axe
<Expression> contient le pourcentage à appliquer.

Remarques

La valeur de vitesse peut être entrée dans l'écran "Profil de vitesse" lors de la configuration Motion de l'axe et peut être modifié une tâche.

Exemple ST

VELP(Axe_X, 10.0); (* 10% de la vitesse définie dans le profil de vitesse *)

Voir aussi :

VEL

VEL_S

VELT

ACCP

DECP


VELT_S

VELT_S  Retourne la vitesse théorique courante

Syntaxe

<Q> := VELT_S (<Axe>)

Unité

<Q> en unité utilisateur par s (Ex : mm/s, degré/s, tr/s,...)

Type accepté

<Axe> : tPeripheral
<Q> : REAL

Description

Cette fonction retourne la vitesse théorique courante.
<Axe> : Nom de l'axe

Voir aussi

VEL

VEL_T

VELP


VERSION

VERSION  Version de l'Operating System

Syntaxe

<Q> = VERSION (0)

Type accepté

<Q> : UDINT

Description

Cette fonction retourne la version OS du MPC.


WAIT

WAIT  Attente d'une condition

Syntaxe

WAIT <Condition>

Description

Cette fonction permet au système d'attendre que la condition soit vraie.
L'exécution de cette instruction provoque le basculement vers la tâche suivante.

Remarques

L'instruction WAIT, les instructions suivantes ne sont pas exécutées tant que <Condition> se révèle fausse.
Cette instruction fournit une attente passive pour une condition.

Exemple

WHILE (INP(Capteur) = FALSE) DO (* Attente active *)
END WHILE;

Ce programme peut être remplacé par :
WAIT(INP(Capteur) = TRUE); (* Attente passive *)


WATCHDOGOFF

WATCHDOGOFF  Ouvre le chien de garde

Syntaxe

WATCHDOGOFF (0)

Description

Cette fonction permet à l'utilisateur d'ouvrir le relais de chien de garde.

Remarques

L'état du chien de garde à la mise sous tension est OFF. Il doit donc être mis à ON en début de programme.
La fonction SECURITY peut modifier son comportement.


WATCHDOGON

WATCHDOGON  Ferme le chien de garde

Syntaxe

WATCHDOGON (0)

Description

Cette fonction permet à l'utilisateur de fermer le relais de chien de garde.

Remarques

L'état du chien de garde à la mise sous tension est OFF. Il doit donc être mis à ON en début de programme.
La fonction SECURITY peut modifier son comportement.


WATCHDOG_S

WATCHDOG_S  Retourne l'état du chien de garde

Syntaxe

<Q> := WATCHDOG_S (0)

Type accepté

<Q> : BOOL

Description

Cette fonction retourne l'état du chien de garde en cours


WDTASKRAZ

WDTASKRAZ  Remet à 0 le nombre de déclenchement d'une tâche

Syntaxe

WDTASKRAZ (<Tache>)

Type accepté

< Tâche > : tGroup

Description

Cette fonction remet à "0" le nombre de déclenchement du chien de garde d'une tâche.
<Tache> : Nom de la tâche


WDTASK_S

WDTASK_S  Retourne le nombre de déclenchement de WD d'une tâche

Syntaxe

<Q> := WDTASK_S (<Tache>)

Type accepté

< Tâche > : tGroup

Description

Cette fonction retourne le nombre de déclenchement du chien de garde d'une tâche.
<Tache> : Nom de la tâche


WHILE

WHILE  BOUCLE WHILE

Syntaxe

WHILE <expression> DO
<instructions>
END_WHILE

Type accepté

<expression> : BOOL

Description

Les instructions entre "DO" et "END_WHILE" sont exécutés tant que la valeur de l'expression booléenne est TRUE.
La condition est évaluée avant l'exécution des instructions.
Si la condition est FALSE lors de la première évaluation, les instructions ne sont pas exécutées.

Attention

Les instructions de boucle peuvent bloquer le cycle en une boucle infinie.

Exemple ST

iPos := 0;
WHILE iPos < iMax DO
 MyArray[iPos] := 0;
 iNbCleared := iNbCleared + 1;
END_WHILE;

Exemple FBD

Non disponible

Exemple LD

Non disponible

Exemple IL

Non disponible

Voir aussi

IF

REPEAT

FOR

CASE

EXIT


WORD

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


WRITECAM

WRITECAM  Enregistre un tableau dans une came

Syntaxe

WRITECAM (<Came>, <TableauCame>)

Types acceptés

<Came> : tCam
<TableauCame> : tCamTable

Description

Cette fonction enregistre un tableau de came dans un fichier de came, ce qui permet de la stocker dans la CF-CARD.
<Came> : Nom de la came
<TableauCame> :Tableau de came

Remarque

Certaine CF-CARD ne permettent pas un stockage en tout sécurités, dans ce cas le stockage échoue et une erreur interne est déclenché.

Voir aussi

READCAM


XOR

XOR  Opérateur OU exclusif

Syntaxe

<Q> := <IN1> XOR <IN2>

Types acceptés

<IN1> : ANY_BIT
<IN2> : ANY_BIT
<Q> : ANY_BIT

Description

Cette fonction effectue un OU exclusif binaire entre deux expressions et retourne une valeur du type de l'opérande.
<IN1> et <IN2> doivent être du même type.

Remarque

"XOR" est défini par la norme IEC61131-3.

Exemple ST

Q := IN1
 XOR IN2;
Q := IN1 XOR IN2 XOR IN3;

Exemple FBD

Exemple LD

(* contacts en parallèle *)

Exemple IL

Op1: LD   IN1
     XOR  IN2
     ST   Q   (* Q = IN1 OR IN2 *)
Op2: LD   IN1
     XORN IN2
     ST   Q    (* Q = IN1 OR (NOT IN2) *)

Voir aussi

AND

OR

NOT


XORN

XORN  Opérateur OU exclusif avec l'entrée 2 inversée

Voir XOR avec l'entrée 2 inversée


C10006

Les données du type 'REAL' ne sont pas supportées.

Le type de données "REAL" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10007

Les données du type 'DATE' ne sont pas supportées.

Le type de données "DATE" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10009

Les données du type 'STRING' ne sont pas supportées.

Le type de données "STRING" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10008

Les données du type 'TIME_OF_DAY ' ne sont pas supportées.

Le type de données "TIME_OF_DAY" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10010

Les données du type 'DATE_Inst_AND_TIME' ne sont pas supportées.

Le type de données "DATE_Inst_AND_TIME" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10012

Les données du type 'TIME ' ne sont pas supportées.

Le type de données "TIME" n'est pas supporté par le matériel actif. Pour une liste de types de données supportés Le logiciel Motion Studio voir la norme IEC 1131-3. Veuillez consulter votre documentation matériel pour une liste de types de données supportés par votre matériel.


C10017

Les sections 'VAR_ENTRÉE ', 'VAR_OUTPUT 'et 'VAR_IN_OUT 'ne sont pas soutenues dans les programmes.

Les sections VAR_ENTRÉE, VAR_OUTPUT et VAR_IN_OUT dans les programmes ne sont pas supportés. Pour plus d'informations sur les types variables supportés voir la norme IEC 1131-3.


C10019

Les variables directement représentées ne sont pas supportées dans ce POU.

Soit l'unité de gestion de programme est une fonction ou un bloc de fonction ou un fichier avec des définitions de variables symboliques globales. Les variables directement représentées ne sont pas autorisées dans les fonctions ou les blocs de fonction. Si vous voulez accéder à une variable directement représentée d'un bloc de fonction, déclarer la variable avec un nom symbolique dans la section de VAR_GLOBAL d'un programme et employer ce nom symbolique dans une déclaration dans la section de VAR_EXTERNAL du bloc de fonction. Les fonctions ne peuvent pas accéder à des variables directement représentées.

Les variables globales directement représentées de ressource doivent être déclarées dans un fichier spécifique.


C10021

La constante ne doit pas être négative.

Une constante négative a été trouvée où un opérande non signé était attendu. Veuillez changer la valeur de la constante ou le type variable (si possible).


C10024

La constante est hors limite.

La constante à la position donnée n'est pas dans les limites du type de données associé.


C10025

Des paramètres d'IN/OUT doivent toujours être fournis avec des paramètres effectifs.

Un paramètre formel d'in/out a été déclaré dans un bloc de fonction, mais pas fourni avec un paramètre effectif dans une instruction CAL d'une instance. Les paramètres d'In/out sont des références et doivent être fournis avec un paramètre effectif.


C10026

Adresse non soutenue.

L'adresse à la position donnée n'est pas soutenue par le matériel actif. Veuillez consulter votre documentation matériel pour une liste d'adresses supportée par le matériel.


C10028

Des paramètres InOut du type struct ne sont pas supportés.

Les paramètres In/out structurés ne sont pas supportés. Veuillez définir un paramètre d'entrée et un paramètre de sortie de ce type.


C10031

Les variables RETAIN ne sont pas supportés par le matériel.

Votre matériel ne supporte pas les variables RETAIN. Veuillez enlever l'attribut. Pour une liste de types variables supportés consultez votre documentation matériel.


C10034

Commande non valide pour ce matériel.

La commande à la position donnée n'est pas supportée par ce matériel. Pour une liste de commandes non supportées consultez votre documentation matériel. Pour une liste de commandes non supportées par le logiciel Motion Studio consultez la norme IEC 1131-3.


C10035

L'opérande/paramètre doit être du type 'UINT '.

Un paramètre effectif du type UINT est attendu dans un appel de fonction (opération), mais le paramètre effectif n'est pas de ce type.

Exemple:

VAR

StringVariable : STRING;

Length : INT := 32;

END_VAR

LD EXAMPLE

LEFT length (* Erreur: Ce parameter doit être du type UINT *)

ST StringVariable


C10036

Structures et tableau de type complexe de données ne sont pas supportés par ce matériel.

Un tableur de type structuré, un tableau de type tableau, une structure avec un membre structuré ou une structure avec un membre tableau a été déclaré. Ceci n'est pas supporté par le matériel. Pour plus d'informations sur les types de donnés supportés par votre matériel, consultez votre documentation matériel.

Exemple:

TYPE

DayOfWeek : STRUCT

Name : STRING;

DayNumber : UINT;

END_STRUCT;

DayDescriptions : ARRAY[1..100] OF DayOfWeek; (* Erreur: Day of Week est un type complexe de donné.

Un type de tableau de donné complexe n'est pas supporté par le matériel. *)

Presence : STRUCT

Name : STRING;

OursPerDay : ARRAY[1..31] OF UINT; (* Erreur: ARRAY est un type complexe de donné.

Une structure de donné complexe n'est pas supporté par le matériel *)

END_STRUCT;


C10038

N'a pas pu détecter le type de la constante.

Le type d'une constante n'a pas pu être déterminé. Veuillez initialiser une variable du type désiré avec cette constante et employez la variable au lieu de la constante.


C10043

Le code implémenté n'est pas autorisé.

De code implémenté a été trouvé dans un fichier de déclaration de variable de ressource globale. Ceci n'est pas autorisé. Veuillez déclarer la variable demandée dans une autre unité de gestion de programme en tant que variable externe et déplacez le code dans le fichier respectif.


C10045

Les instances de blocs de fonction ne sont pas autorisées dans cette section.

Une déclaration d'instance d'un bloc de fonction a été trouvée dans une section où cela n'est pas autorisée. Veuillez déplacer la déclaration dans une autre section, où des instances de bloc de fonction sont supportés.


C10046

'VAR_GLOBAL' n'est pas autorisé.

Une section VAR_GLOBAL a été trouvée dans une unité de gestion de programme où cette sorte de section n'est pas soutenue. Veuillez changer le type de section ou déplacez la déclaration variable dans un fichier, où des variables globales sont supportées.

Selon la norme IEC 61131-3, les sections VAR_GLOBAL sont supportées seulement dans PROGRAM. Cependant le fabricant du matériel peut limiter la déclaration des variables globales aux fichiers de variables ressource globaux. C.-à-d. les variables globales sont autorisées seulement dans les fichiers spécifiques qui contiennent seulement des déclarations variables globales.


C10047

Seul les variables 'VAR_GLOBAL' sont autorisées.

Une section de déclaration de variable, qui n'est pas une section VAR_GLOBAL, a été trouvée dans un fichier pour la déclaration variable globale de ressource. Ceci n'est pas autorisé. Veuillez changer la type de section ou déplacez la déclaration de variable dans un autre fichier, où ce type de déclarations sont supportées.


C10049

Chaîne trop longue.

Un chaîne a été déclarée avec des spécifications de longueur, qui excèdent la longueur maximum d'un chaîne supportée par le matériel.

Pour le longueur de chaîne supporté par Le logiciel Motion Studio voir la norme IEC 1131-3. Cependant, le fabricant du matériel peut limiter la longueur maximum d'une chaîne en changeant la valeur de paramètre "MaxStringLength" dans la section [ MODULE ] de description matériel.


C10055

Cette variable ne peut être initialisée.

Soit une initialisation de variable directement représentée a été trouvée soit le matériel ne supporte pas les initialisations variables. L'initialisation des variables directement représentées n'est pas supportée par Le logiciel MS. L'initialisation des variables symboliques peut être interdit par le fabricant en changeant la valeur du paramètre "InitVariables" dans la section [ MODULE ] du fichier de description matériel par 0. Veuillez consulter votre documentation matériel pour savoir, si l'initialisation des variables est supportées par votre matériel.


C10057

Type de donnée non supporté.

Le type de données à la position donnée n'est pas supporté. Pour une liste de types de données supportés par Le logiciel Motion Studio consulter la norme IEC 1131-3. Pour une liste de types de données soutenus par votre matériel, consultez svp votre documentation matériel.


C10060

LD/ST d'instances de bloc de fonction ne sont pas autorisés.

Une instruction LD ou ST avec une instance de bloc de fonction comme opérande a été trouvée. Ceci n'est pas autorisé.


C10063

Une erreur s'est produite pendant l'ouverture d'une fichier.


C10064

Erreur de compilation No.%1. Veuillez entrer en contact avec votre fabricant.

Une erreur interne de compilateur s'est produite. Veuillez entrer en contact avec votre fabricant.


C10067

Les déclarations de structure ne sont pas supportées.

Une déclaration de structure a été détectée, mais n'est pas supportée par le matériel. Les déclarations de structure sont supportées par Le logiciel Motion Studio. Le fabricant du matériel peut cependant interdire les déclarations de structure en plaçant la valeur 0 de le champs "StructAllowed" dans la section [MODULE] du fichier de description du matériel. Veuillez consulter votre documentation matériel pour savoir si les déclarations de structure sont supportées par votre matériel.


C10068

Les déclarations de tableau ne sont pas supportées.

Une déclaration tableau a été détectée, mais n'est pas supportée par le matériel. Les déclarations de tableau sont supportées par Le logiciel Motion Studio. Le fabricant du matériel peut cependant interdire les déclarations de tableau en plaçant la valeur 0 de le champs "ArrayAllowed" dans la section [MODULE] du fichier de description du matériel. Veuillez consulter votre documentation matériel pour savoir si les déclarations de tableau sont supportées par votre matériel.


C10069

Les déclarations de type de données énumérées ne sont pas supportées.

Une déclaration de type de données énumérées a été détectée, mais n'est pas supportée par le matériel. Les déclarations de type de données énumérées sont supportées par Le logiciel Motion Studio. Le fabricant du matériel peut cependant interdire les déclarations de type de données énumérées en plaçant la valeur 0 de le champs "EnumAllowed" dans la section [MODULE] du fichier de description du matériel. Veuillez consulter votre documentation matériel pour savoir si les déclarations de type de données énumérées sont supportées par votre matériel.


C10075

Index de tableau invalide. Il doit compris entre -32767 et 32767.

Un index de tableau est hors limite de la zone supportée [-32767, 32767].


C10078

Type de variable globale ou directement représenté non valide.

Une variable directement représentée d'un type complexe ou d'un type défini par utilisateur a été déclarée. Ceci n'est pas supporté. Les variables globale du type structuré ne sont pas également supportées.


C10083

Seul les variables directement représentées sont autorisées dans ce POU.

Des variables globales de ressource sont séparées dans le sorte de fichiers. Les fichiers qui contiennent seulement les variables symboliques et les fichiers qui contiennent les variables directement représentées. Dans ces fichiers, les variables symboliques et directement représentées ne doivent pas être mélangé.


C10084

Les structures globales ne sont pas supportées.

Veuillez déclarer cette variable dans une section locale et employez les paramètres d'entrée et de sortie, si la valeur est changée par une fonction ou un bloc de fonction. La déclaration du type pour la structure désirée doit être fait au niveau de projet.

Exemple:

(*La structure suivante doit être déclarée comme type global de projet *)

TYPE

DayOfWeek : STRUCT

Name : STRING;

DayNumber : UINT;

END_STRUCT;

END_TYPE

FUNCTION_BLOCK AdjustDayName

VAR_ENTRÉE

DayIn : DayOfWeek;

END_VAR

VAR_OUTPUT

DayOut : DayOfWeek;

END_VAR

LD DayIn

ST DayOut

LD DayIn.DayNumber

EQ 1

LD MONDAY

ST DayOut.Name

LD DayIn.DayNumber

EQ 2

LD TUESDAY

ST DayOut.Name

END_FUNCTION_BLOCK

PROGRAM main

VAR

Day : DayOfWeek;

DayNumber : UINT;

END_VAR

LD DayNumber

ST Day.DayNumber

CAL AdjustDayName(DayIn := Day | Day := DayOut)

END_PROGRAM


C10092

Échec d'attribution de mémoire.


C10108

La constante du type TEMPS est hors limite.

Pour les limites des constantes TEMPS supportées par Le logiciel Motion Studio voyez la norme IEC 1131-3.


C10109

Type de données non valide pour cette opération. Le type entier ou réel est attendu.

L'opération à la position donnée est seulement supportée par les opérandes entier et réel.


C10100

Expression non valide pour le paramètre.

Une expression non valide a été passée comme un paramètre effectif dans un appel de fonction ou d'instance de bloc de fonction.


C10110

Les fonctions intégrées ne sont pas supportées.

Un appel de fonction a été passé comme un paramètre effectif dans l'appel d'une fonction ou d'une instance de bloc de fonction. Ceci n'est pas supporté. Veuillez enregistrer la valeur de retour de la fonction dans une variable et passez cette variable comme un paramètre effectif à l'unité de gestion de programme appelée.


C10112

Conflit de type.

Soit le résultat actuel est incompatible avec le type de données attendu, soit le type d'un paramètre effectif est incompatible avec le type du paramètre formel respectif.


C10113

Opération non supportée pour ce type de données.

Le type de données d'un opérande n'est pas autorisé pour l'opération à la position donnée. Pour plus d'informations sur les types de données autorisé pour cette opération voir la norme IEC 61131-3 et IEC 1131-3.


C10114

Les expressions des paramètres ne sont pas supportés pour cette opération.

Une expression a été employée comme paramètre effectif. Ceci n'est pas supporté. Veuillez stocker le résultat de l'expression dans une variable et passez cette variable à la fonction ou au bloc de fonction appelée.


C10115

L'attribut RETAIN pour des instances de FB est interdit.

Les instances de bloc de fonction RETAIN ne sont pas supportées. Veuillez enlever l'attribut ou déplacez la déclaration de l'instance hors de cette section.


C11001

Ne peut pas déterminer clairement le type de constante -> prendre %1.

Le type d'une constante numérique n'a pas pu être déterminé clairement. Dans ce cas, habituellement, le plus grand type soutenu de la classe de type de données prévue (ANY_INT, ANY_REAL, ANY_BIT) est présumé.


C11007

La fonction n'a aucun paramètre d'entrée. Est-ce normale ?

Un appel de fonction à une fonction qui n'a aucun paramètre a été détecté. Est-ce normal ? Les fonctions ne contiennent pas d'information interne d'état et peuvent être alimenter qu'avec des paramètres d'entrée. Généralement la valeur de retour est calculée en employant les paramètres d'entrée. Pour ces raisons, une fonction sans paramètres d'entrée n'a d'habitude pas de sens. Veuillez vérifier si la fonction appelée à un sens.


L10001

Variable déclarée deux fois : <Variable name>.

La variable avec le nom indiqué a été déclarée deux fois.

Conseil:

Si la variable est déclarée dans un PROGRAMME POU, vérifiez si une variable globale de ressource avec le même nom a été déclarée. Si la variable est une variable global de ressource, vérifiez si une variable globale avec le même nom a été déclarée dans un PROGRAMME POU de la ressource.

Si un des cas ci-dessus est vrai, changez le nom d'une des variables ou déplacez la déclaration variable dans le PROGRAMME POU dans une section de VAR_EXTERNAL. Attention : si vous déplacez la variable dans une section externe, chaque accès à la variable externe accède à la variable ressource globale du même nom.


L10004

Externe non défini: <Variable name>.

Soit une variable globale avec le nom indiqué n'a pas été trouvée,ou un type de bloc de fonction avec le nom indiqué n'a pas été trouvé.

Conseil:

Assurez-vous que le nom variable est orthographié correctement.

Si la variable n'est pas une instance de bloc de fonction, assurez-vous qu'une variable avec ce nom est déclarée dans la section de VAR_GLOBAL du programme d'appel ou dans un fichier avec des déclarations de variables ressource-globales.

Si la variable est une instance de bloc de fonction, assurez-vous que le bloc de fonction a été compilé avec succès, c.-à-d. un fichier d'exécution pour ce bloc de fonction existe.


L10026

Adresse non supportée: <AddressDescription>.

L'adresse <AddressDescription> n'est pas supportée par le matériel.

Conseil:

Vérifiez si l'adresse est orthographiée correctement.

Vérifiez si la syntaxe de la description de l'adresse est correcte. La syntaxe de la description de l'adresse est dépendante du matériel, mais doit être une chaîne constituée du signe "%" suivi d'un préfixe de location, un préfixe de taille et un ou plusieurs entiers non signés, séparés par des périodes (.). Le préfixe de taille peut être vide. Pour ses préfix de location et de taille valides consultez votre documentation matériel.


L10027

Description matériel invalide: %1..

Le fichier de description matériel pour ce nom de périphérique n'a pas été trouvé.

conseil:

  • Vérifiez si les spécifications de ressource contiennent un nom valide de module matériel..

  • Réinstallez Le logiciel Motion Studio. Si ceci n'élimine pas votre erreur, consultez votre documentation matériel ou référez-vous à votre fournisseur.


L10029

Erreur de configuration matériel.

Une erreur s'est produite pendant la lecture des informations du firmware. Veuillez vérifier si le fichier de configuration matériel est correct ou si la DLL indiquée par le firmware est installé dans votre répertoire Le logiciel Motion Studio.

ATTENTION: Ce fichier ne devrait être modifié que par le fabricant.


L10030

Type de variable invalide: %1.

Une variable représentée direct d'un type complexe (tableau, structure, chaîne) a été trouvée. Ceci n'est pas supporté par le matériel.


L10031

Initialisations des variables représentées directement non autorisées

Une initialisation d'une variable représentée directement a été trouvée. Ceci n'est pas supporté par le matériel. Veuillez enlever l'initialisation.


L10032

Adresse <AddressDescription> invalide dans ce contexte.

L'adresse avec la description indiquée est une adresse valide mais non autorisée dans ce contexte (Tâche, POU, ressource, configuration).


L10033

L'attribut RETAIN non supporté pour les variables représentées directement.

Une variable représentée directement avec l'attribut RETAIN a été trouvée. Celui-ci n'est pas supporté par le matériel. Veuillez déplacer la déclaration de variable dans une autre section ou enlevez l'attribut de la section.


L10034

L'attribut CONST non supporté pour les variables représentées directement.

Une variable représentée directement avec l'attribut CONST a été trouvée. Celui-ci n'est pas supporté par le matériel. Veuillez déplacer la déclaration de variable dans une autre section ou enlevez l'attribut de la section.


L10035

Limite d'instance pour le bloc de function <FunctionBlockName> atteinte.

Le nombre maximum d'instances pour le bloc de fonction indiqué a déjà été dépassé. Le nombre maximum d'instances d'un bloc de fonction progiciels est dépendante du matériel et peut être changé par le fabricant du matériel en configurant ou changeant l'entrée "MaxInstances" dans la section de spécifications du bloc de fonction dans le fichier de description du matériel. Veuillez consulter la documentation de votre matériel, pour connaître le nombre maximum d'instances d'un bloc de fonction progiciels.


L10036

Description d'image processus non valide. Veuillez contacter votre fabricant.

La description de l'image processus dans le fichier de configuration matériel est non valide. Veuillez vérifier si les tailles pour les sections d'entrée, de sortie, de marqueur sont correctes et si toutes les entrées de taille sont de la même unité. Elles devraient être indiquées soit en bits ou en octets.

ATTENTION: Ce fichier ne devrait être modifié que par le fabricant.


L10063

Une erreur s'est produite pendant l'ouverture du fichier : %1.


L10105

Erreur interne pendant le chargement de la fonction ou DLL: <DLL/Function-Name>.

Le DLL ou la fonction indiqué n'a pas pu être chargé. Soit votre répertoire Motion Studio ne contient pas de DLL avec le nom indiqué, soit vous n'avez pas la bonne version de DLL. Veuillez réinstaller votre système ou consultez votre description matériel.


L10106

l'optimisation choisie a besoin d'un compilateur de code natif. Veuillez choisir une autre optimisation ou installez un compilateur de code natif.

L'optimisation de "vitesse seule" est activée mais aucun compilateur de code natif n'est défini pour ce matériel. L'optimisation de '"vitesse seule" est autorisée que si un compilateur de code natif est installé. Si vous n'avez pas un compilateur de code inactif, veuillez choisir une autre optimisation dans le dialogue "Caractéristiques de l'éditeur de ressource". Pour le compilateur de code natif pour votre matériel veuillez vous référer à votre fabricant.


L12001

Conflit de type. Le type d'une variable externe ne correspond pas à celui d'une variable globale de même nom.

Une variable globale avec le même nom que la variable externe a été trouvée, mais les types entre la variable globale et externe sont différents.

Conseil:

Assurez-vous que le nom variable externe est orthographié correctement.

Assurez-vous que le type de la variable externe est orthographié correctement.

Assurez-vous que la variable globale est la variable demandée.

Changez le type de la variable externe ou globale


L12002

Accès en lecture à cette variable non autorisé: <Variable name>.

Un accès en lecture à une variable qui est en écriture seul a été tenté.

Conseil:

Assurez-vous que le nom variable indiqué est orthographié correctement.

La variable indiquée est une constante. L'accès en écriture à une variable constante n'est pas autorisé. Vérifiez si l'attribut CONSTANT peut être enlevé de la variable.

La variable indiquée est une source de sortie. L'accès en lecture à cette source de sortie n'est pas autorisé


L12003

Accès en écriture à cette variable non autorisé: <Variable name>.

Un accès en écriture à une variable qui est en lecture seul a été tenté.

Conseil:

Assurez-vous que le nom variable indiqué est orthographié correctement.

La variable indiquée est une constante. L'accès en écriture à une variable constante n'est pas autorisé. Vérifiez si l'attribut CONSTANT peut être enlevé de la variable.

La variable indiquée est une source d'entrée. L'accès en écriture à cette source d'entrée n'est pas autorisé


L12005

Erreur interne du linker no.: <errorno> .Veuillez entrer en contact avec votre fabricant.


L12006

Échec d'attribution de mémoire. Pas assez de mémoire pour effectuer l'opération.


L12007

Aucune information d'objet n'a été trouvé pour la tâche TaskName>. Veuillez tout reconstruire.

Le fichier d'objet (<TaskName>.crd) pour la tâche indiqué n'a pas été trouvé. Veuillez reconstruire complètement la ressource.


L12008

Débordement d'interpréteur de pile dans la tâche <TaskName>.

Débordement de l'interpréteur d'appel de pile. Veuillez réduire la profondeur de la hiérarchie appelante de <TaskName>.


L12996

Commande inconnue: <Command>.

Un argument inconnu de ligne de commande a été employé avec ITLINK.


L12997

Type d'objet inconnu: <ObjectKindSpecification>.

Un fichier d'objet invalide a été trouvé. Veuillez reconstruire entièrement la ressource.


L12998

Type d'objet invalide. Type trouvé/demandé: <ObjectKind>.

Un fichier d'exécution non valide a été trouvé. Veuillez reconstruire entièrement la ressource.


L12999

Version d'objet invalide a été trouvé La version a trouvé/prévu d'objet: <ObjectVersion>.

La version de fichier d'objet et la version d'objet compilé sont différentes. Le fichier d'objet a été créé avec une version différente de compilateur. Veuillez re-compiler entièrement la ressource.


L13000

Echec de chargement des informations de la ressource variable globale.

Le fichier d'exécution avec l'information globale de ressource n'a pas été trouvé. Veuillez reconstruire entièrement la ressource.


L13001

Aucune information d'objet n'a trouvé pour le POU <pouname>

Le fichier d'exécution (<pouname>.obj) pour le POU indiqué n'a pas été trouvé. Veuillez reconstruire entièrement la ressource entière.


S1000

Les commentaires imbriqués ne sont pas autorisés.

Vous utilisez une version compatible IEC 61131-3. Dans cette version, les commentaires imbriqués ne sont pas autorisés.


S1001

Caractère invalide.

Un caractère non supporté a été utilisé. Voir également Table 1: Définition du jeu de caractères


S1002

Fin de fichier terminé par un commentaire.

La fin d'un fichier a été atteinte avant qu'un commentaire ouvert ait été clôturé. Veuillez clôturer le commentaire avant d'appeler la vérification de syntaxe.


S1003

Mot-clé réservé.

Un mot-clé réservé a été utilisé comme identifiant.


S1004

Valeur non valide pour l'heure.

La valeur numérique pour l'unité de d'heure de TIME_OF_DAY ou DATE_Inst_AND_TIME littéral doit être un nombre entier entre [0, 23 ].


S1005

Valeur non valide pour les minutes.

La valeur numérique pour l'unité de minute de TIME_OF_DAY ou DATE_Inst_AND_TIME littéral doit être un nombre entier entre [0, 59 ].


S1006

Valeur non valide pour les secondes.

La valeur numérique pour l'unité de seconde de TIME_OF_DAY ou DATE_Inst_AND_TIME littéral doit être un nombre de point fixe entre [0, 60 ].


S1008

Valeur non valide pour les mois.

La valeur numérique pour l'unité de mois de TIME_OF_DAY ou DATE_Inst_AND_TIME littéral doit être un nombre entier entre [1, 12 ].


S1009

Limite non valide pour les jours.

La valeur numérique pour l'unité de jour de TIME_OF_DAY ou DATE_Inst_AND_TIME littéral doit être un nombre entier entre [1, 31 ], donnant le jour du mois. C-à-d. si le mois a moins de 31 jours, la valeur maximum du jour est la plus grande valeur valide du mois.


S1010

Exposant trop grand.

La valeur numérique pour l'exposant d'un réel littérale doit être un nombre entier dans la gamme [ - 37, 38 ] et pour un LREAL littérale un INT dans la gamme [ - 307, 308 ].


S1011

Adresse direct Incorrecte.

La valeur numérique pour un champ indiqué dans l'adresse hiérarchique d'une variable représentée direct est nombre entier dépendant du matériel, mais ne doit pas excéder 4294967295. Veuillez consulter votre documentation matériel pour déterminer la valeur maximum pour chaque champ dans la hiérarchie d'adresse.


S1012

Saisie non valide du jour.

La valeur numérique de l'unité de jour de TIME littéral doit être un nombre de point fixe entre [0, 255].


S1013

Saisie non valide de l'heure.

La valeur numérique de l'unité d'heure de TIME littéral doit être un nombre de point fixe entre [0, 24] si l'heure n'est pas l'unité la plus significative de la durée littérale. Un débordement est seulement autorisé si l'unité d'heure est l'unité la plus significative de TEMPS littérale.

Exemple:

T#25h_15m est autorisé.

T#1d_25h_15m n'est pas autorisé. La représentation correcte de cette durée littérale est: T#2d_1h_15m.


S1014

Saisie non valide des minutes.

La valeur numérique de l'unité de minute de TIME littéral doit être un nombre de point fixe entre [0, 60] si les minutes n'est pas l'unité la plus significative de la durée littérale. Un débordement est seulement autorisé si l'unité de minute est l'unité la plus significative de TEMPS littérale.

Exemple:

T#75m est autorisé.

T#5h_75m n'est pas autorisé. La représentation correcte de cette durée littérale est: T#6h_15m.


S1015

Saisie non valide des secondes.

La valeur numérique de l'unité des secondes de TIME littéral doit être un nombre de point fixe entre [0, 60] si les secondes n'est pas l'unité la plus significative de la durée littérale. Un débordement est seulement autorisé si l'unité de seconde est l'unité la plus significative de TEMPS littérale.

Exemple:

T#75s est autorisé.

T#5m_75s n'est pas autorisé. La représentation correcte de cette durée littérale est: T#6m_15s.


S1016

Saisie non valide des millisecondesy.

La valeur numérique de l'unité des millisecondes de TIME littéral doit être un nombre de point fixe entre [0, 1000] si les millisecondes n'est pas l'unité la plus significative de la durée littérale. Un débordement est seulement autorisé si l'unité de milliseconde est l'unité la plus significative de TEMPS littérale.

Exemple:

T#1200s est autorisé.

T#1s_1200ms n'est pas autorisé. La représentation correcte de cette durée littérale est: T#2s_200ms.


S1017

Adresse direct trop complexe.

Le nombre maximum des champs indiqués dans la hiérarchie d'adresse d'une variable représentée direct est dépendante du matériel mais ne doit pas excéder 8. Veuillez consulter votre documentation matériel pour déterminer la profondeur maximum de la hiérarchie d'adresse.


S1018

Constante du type entier trop grande/petite.

La valeur d'une constante doit être dans la gamme des valeurs représentables pour son type. Le type d'une constante de type entier dépend du type de la variable dont la constante a été assignée mais ne doit pas excéder la gamme INT/ULINT (entier sur 8 octets/entier non signé).


S1019

Constante de type entier trop grande/petite (ne s'adapte pas dans 32bits)

La valeur numérique de la constante indiquée excède la gamme des valeurs du type DINT/UDINT.


S1020

Valeur numérique trop grande/petite.

La valeur d'une constante doit être dans la gamme des valeurs représentables pour son type. Le type d'une constante de nombre entier signé dépend du type de la variable dont la constante a été assignée mais ne doit pas excéder la gamme LINT (entier sur 8 octets).


S1021

Erreur durant l'exécution d'une fonction à virgule flottante de la librairie mathématique.


S1022

Constante de type chaîne invalide.

La constante de type chaîne contient un caractère non valide. Une chaîne de caractères littérale est une séquence de zéro à n caractères terminés par un caractère de terminaison (`). Tous les caractères valides sont imprimables sauf `$'. La combinaison de trois caractères commençant par dollar ($) suivi de deux chiffres hexadécimaux est interprété comme une représentation hexadécimale d'un code de caractère huit bits voir la table Définition des chaînes de caractères littérales.

En plus, les combinaisons de 2 caractères commençant par le signe du dollar seront interprétées comme la table suivante combinaisons de deux caractères dans des chaînes de caractères quand elles se produisent dans des chaînes de caractères.


S1023

Nombre invalide (ex: constante numérique).

La constante numérique contient un caractère non valide. Voir la table de valeur numérique littérale pour des exemples de valeurs numériques valides.


S1024

Constante invalide.

La constante de donnée contient des caractères non valides.

Pour une liste de représentations constantes valides voir le Tableau 53: Méthode d'invocation des blocs de fonctions pour le langage IL.


S1025

Adresse direct invalide.

Une variable directement représentée contient les caractères non valides.

La représentation directe d'une variable sera déclarée par la concaténation du signe "%", d'un préfixe de location, d'un préfixe facultatif de taille et d'un ou plusieurs nombres entiers non signés séparés par des périodes (.)

Le fabricant indiquera la correspondance entre la représentation directe de la variable et l'emplacement physique ou logique de l'adressage objet en mémoire, entrée ou sortie. Quand une représentation directe est prolongée avec les champs de nombre entier additionnels séparés par des périodes, elle sera interprétée comme adresse physique ou logique hiérarchique avec le champ extrême gauche représentant le niveau le plus élevé de la hiérarchie, avec des niveaux successivement plus bas apparaissant vers la droite. Par exemple, la variable %IW2.5.7.1 peut représenter le premier "canal" (mot) du septième "module" dans le cinquième "module" du deuxième "bus d'I/O" d'un système de contrôle programmable.

L'utilisation des variables directement représentées est seulement autorisée dans les programmes. Le nombre maximum des niveaux d'adressage hiérarchique est dépendante du matériel et ne doit pas excéder 8.

Veuillez consulter votre documentation matériel pour déterminer les niveaux maximum de l'adressage hiérarchique.


S1026

Identifiant invalide (nom, variable, paramètre,...)

Un identifiant contient un ou plus caractères non valides.

Un identifiant est une chaîne de lettres, chiffres, et de caractères "_" qui commenceront soit par une lettre ou un caractère "_". Les lettres peuvent être en majuscules ou minuscules. On ne laisse pas le multiple principal ou le multiple inclus souligne.

Les espaces dans l'identifiant ne sont pas autorisés.


S1027

Fin de fichier trouvé dans l'en tête du fichier.

Une erreur s'est produite durant la lecture de l'en-tête du fichier. Vous pouvez corriger cette erreur, en ouvrant le dossier avec un éditeur de texte et en enlevant toutes les lignes précédant les mots-clé PROGRAM, FUNCTION ou FUNCTION_BLOCK. Si cette erreur se produit plus souvent, veuillez contacter votre fabricant.


S1028

Cette identifiant est trop long (> 64 caractères).

La longueur d'un identifiant est plus grand que la longueur maximum supportée. Dans cette implémentation, seul les identifiants inférieur ou égale à 64 caractères sont supportés.


S1029

Ce mot (identifiant, constante littérale, chaîne, commentaire) est trop long (> 1024 caractères).

Un mot (identifiant, constante littérale, chaîne, commentaire) excède les 1024 caractère. Dans cette implémentation, d'exécution seulement jusqu'à 1024 caractères sont soutenus.


S1030

Trop d'identifiant.

Le nombre maximum d'identifiants a été dépassé. Le nombre d'identifiants maximum supporté est 65535.


S1031

Utilisation non autorisé d'EN. Autorisé comme identifiant pour variable booléenne dans une section d'entrée.

Une variable avec de le nom "EN" a été déclarée dans la mauvaise section de variable ou avec un type incorrect.

Le nom "EN" (enable) est réservé aux variables d'entrée booléenne.

Si la valeur d'EN est FAUSSE quand la fonction ou le bloc fonction est appelée, les opérations définies par la fonction/bloc de fonction ne seront pas exécutées. Si un paramètre de sortie booléen ENON a été défini alors la valeur du ENON est aussi remise à FAUX.

Si la valeur d'EN est VRAIE quand la fonction ou le bloc de fonction est appelée les opérations définies par la fonction/bloc de fonction sont exécutées. Ces opérations peuvent inclure l'affectation d'une valeur booléenne de sortie booléen ENO, si ce paramètre a aussi été défini.


S1032

Utilisation non autorisé d'ENO. Autorisé comme identifiant pour variable booléenne dans une section de sortie.

Une variable avec le nom "ENO" a été déclarée dans la mauvaise section de variable ou avec un type incorrect.

Le nom "ENO" (Enable Out) est réservé aux variables de sortie booléennes. Les variables "ENO" nécessitent une variable d'entrée booléenne "EN".

Si la valeur d'EN est FAUSSE quand la fonction ou le bloc fonction est appelée, les opération définis par la fonction/bloc de fonction ne seront pas exécutées et le paramètre de sortie booléen ENON est remis à FAUX.

Si la valeur d'EN est VRAIE quand la fonction ou le bloc de fonction est appelée les opérations définies par la fonction/bloc de fonction sont exécutées. Ces opérations peuvent inclure l'affectation d'une valeur booléenne de sortie booléen ENO.


S3000

Bloc de fonction non déclaré.

Un CAL à une instance de bloc de fonction inconnue a été trouvée.

Une instance de bloc de fonction doit être déclaré avant d'être utilisé.

Conseil

Assurez-vous que l'instance du bloc de fonction demandé est déclarée dans une des sections de déclaration de variable.

Assurez-vous que le nom de l'instance du bloc de fonction est orthographié correctement.


S3001

Fonction non présente.

Un appel à une fonction inconnue a été trouvé.

Une fonction doit être déclarée avant d'être utilisée. Les paramètres qu'une fonction emploie doivent être indiqués dans une déclaration, ou prototype, avant que la fonction puisse être utilisée.

Conseils

Assurez-vous que le fichier contenant la déclaration ou le prototype de la fonction est dans la zone projet ou que la fonction fait partie du firmware.

Assurez-vous que le nom de la fonction est orthographié correctement.


S3002

Paramètre incorrecte.

Le paramètre demandé n'a pas été trouvé dans la liste de paramètre formel du bloc de fonction.

Conseils

Assurez-vous que le nom du paramètre est orthographié correctement.

Assurez-vous que la liste de paramètre de définition du bloc fonction contient un paramètre avec le nom utilisé dans la tâche.


S3003

Saut d'étiquette non présent.

Une instruction JMP à une étiquette inconnue a été trouvée.

Une étiquette doit être définie dans la zone d'instruction d'un programme dans laquelle elle est employée.

Conseils

Assurez-vous que l'étiquette est définie dans le même programme.

Assurez-vous que le nom de l'étiquette est orthographié correctement.


S3004

Attribution multiple de variable/nom..

L'identifiant donnée a été définie plusieurs fois.

Conseils

Assurez-vous que l'identifiant n'a pas été définie deux fois dans la même programme

Assurez-vous que l'identifiant n'a pas été employée dans une déclaration de type utilisateur, une déclaration de type global ou comme fonction, bloc de fonction ou nom de programme


S3005

Ce n'est pas une instance de bloc de fonction.

Une variable avec le nom utilisé dans un CALL a été trouvée mais n'est pas une instance de bloc de fonction.

Conseils

Assurez-vous que l'identifiant est orthographiée correctement.

Assurez-vous qu'une instance de bloc de fonction avec le nom indiqué a été déclaré dans la zone d'unité programme ou dans la zone globale.


S3006

Ce n'est pas une variable de structure ou une instance de bloc de fonction.

Un accès à un membre d'une variable de structure ou de bloc de fonction a été tenté, mais la variable indiquée par l'identifiant n'est pas un bloc de fonction ou une structure.

Conseils

Assurez-vous que l'identifiant est orthographiée correctement.

Assurez-vous que la variable avec le nom donné est une structure ou un bloc de fonction.


S3007

Ce n'est pas une Fonction

Un identifiant utilisé comme nom de fonction a été définie mais n'est pas un nom de fonction.

Conseils

Assurez-vous que l'identifiant est orthographiée correctement.

Assurez-vous que l'identifiant est le nom de la fonction et pas celui d'un bloc de fonction

Assurez-vous qu'à la position demandée il s'agit d'une utilisation de fonction et non d'un appelle d'instance de bloc de fonction


S3008

Aucun élément de structure or paramètre de bloc.

Un accès à un membre d'une structure ou une variable de bloc de fonction a été essayé, mais le membre indiqué par l'identifiant n'est pas un paramètre du bloc de fonction ou une instance de la structure.

Conseils

Assurez-vous que l'identifiant est orthographiée correctement.

Assurez-vous que le bon identifiant ou la bonne instance de bloc de fonction est employé.

Si la variable consultée est une instance de bloc de fonction assurez-vous que le bloc de fonction a un paramètre avec le nom donné par l'identifiant.

Si la variable consultée est une instance de structure, assurez-vous que la structure a un membre avec le nom donné par l'identifiant.


S3009

Aucun saut d'étiquette.

L'identifiant utilisé dans le JMP/JMPC/JMPCN à la position donnée a été trouvée mais n'est pas un nom d'étiquette.

Conseils

Assurez-vous que l'identifiant est orthographiée correctement.

Assurez-vous que l'identifiant utilisée après le JMP/JMPC/JMPCN est un nom d'étiquette.


S3010

Nom de type ou bloc de fonction attendu.

Un nom de type ou de bloc de fonction a été attendu. L'identifiant a été trouvée dans la zone courante mais n'est pas nom de type ni un nom de bloc de fonction.

Conseils

Vérifiez si le nom est orthographié correctement.

Assurez vous que l'identifiant n'est pas un nom de variable (par exemple un nom de bloc de fonction).


S3011

L'identifiant n'est pas une variable or nom de type.

Une variable ou instance de bloc de fonction a été attendu. L'identifiant a été trouvé dans le zone courante mais n'est pas une variable ni une instance de bloc de fonction.

Conseils

Vérifiez si le nom est orthographié correctement.

Assurez vous que l'identifiant n'est pas un nom de type (par exemple un nom de bloc de fonction).


S3012

Nom de variable ou constante attendu.

Cette erreur se produit, si un identifiant, qui n'est pas un nom variable ou une constante énumérée, est employée où un nom de variable ou une constante est prévu.

Exemple:

TYPE

Colours : (red, yellow, blue) := red;

END_TYPE

VAR

Colour : Colours := Colours; (* Erreur: Constante énumérée attendu.

EnumType est du type nom *)

END_VAR

LD Colours (* Erreur: Constante ou nom de variable attendu. EnumType est du type name *)

ST Colour


S3014

Donné de type numérique était attendu.

L'opérateur et le type d'opérande sont incompatibles. Un opérande d'un type ANYNUM était attendu.


S3017

Valeur de type booléenne était attendue.

L'opérateur et le type d'opérande sont incompatibles. Un opérande du type BOOL était attendu.


S3016

Donné de type bit était attendu.

L'opérateur et le type d'opérande sont incompatibles. Un opérande d'un type d'ANYBIT était attendu.


S3018

Donné de type numérique était attendu.

Type illégal d'opérande. Opérande de type d'ANYNUM attendu.


S3019

Type d'opérande incompatibles.

Le type d'opérande et de résultat sont incompatible.


S3020

Type d'opérande incompatible.

Cette erreur se produit si une combinaison illégale des types de temps et de données de date est utilisés pour les paramètres d'entrée d'une opération SUB. Pour la combinaison autorisées des types de données d'entrée et de sortie pour cette opération voir le tableau 30 "Fonctions de type de données de temps" dans la nome IEC 1131-3.

Exemple:

VAR

TimeVar : TIME;

DateVar : DATE;

END_VAR

LD DateVar

SUB TimeVar (* Erreur: SUB n'est pas définie pour la combinaison de paramètres d'entrée *)

ST DateVar


S3022

Type d'opérande invalide pour cette opération.

Type d'opérande non valide pour l'opération à la position indiquée. Une opérande de type TIME ou ANYNUM est attendue.


S3023

Type d'opérande invalide pour cette opération.

Type d'opérande non valide pour l'opération à la position indiquée. Une opérande de type TIME, TIME_OF_DAY, DATE_Inst_AND_TIME ou ANYNUM est attendue.


S3024

Type d'opérande invalide pour cette opération.

Type d'opérande non valide pour l'opération à la position indiquée. Une opérande de type ANYBIT est attendue.


S3025

Résultat booléen exigé.

Type de résultat incompatible. Le résultat devrait être du type BOOL


S3026

Identifiant non déclaré.

Cette erreur se produit, si l'identifiant à la position donnée, n'a pas été définie dans le domaine valide pour l'unité compilée de gestion du programme.

Exemple:

TYPE

Colours : (red, yellow, blue) := red;

END_TYPE

VAR

Colour : Colours := green; (* Erreur: green a été déclaré en tant qu'énumération de constante *)

END_VAR

LD IntVar (* Erreur: IntVar n'a pas été déclaré. *)

ADD 5

ST IntVar


S3028

Comparaison non définie pour le type de données du résultat actuel.

La comparaison sur la position donnée n'est pas définie pour le type du résultat actuel. C.-à-d. le type du paramètre effectif est incompatible avec le type du premier paramètre formel. Pour plus d'information voir Le tableau 28 "Fonctions de comparaison standard" dans la norme IEC 1131-3.

Exemple:

TYPE

Day_of_Week : STRUCT

Name : String;

DayNon : INT(1..7);

END_STRUCT;

END_TYPE

VAR

DayVar1 : Day_of_Week;

DayVar2 : Day_of_Week;

BoolVar : BOOL;

END_VAR

LD DayVar1

GT DayVar2 (* Erreur: comparaisons sur des variables structurées n'est pas autorisées *)

ST boolVar


S3030

Comparaison non définie pour ce type.

On ne permet pas

Le type de l'opérande à la position donnée pour des comparaisons n'est pas autorisé. C.-à-d. le type du paramètre effectif est incompatible avec le type du paramètre formel. Pour plus d'information voir tableau 28 " Fonctions de comparaison standard" dans la norme IEC 1131-3.

Exemple:

TYPE

Day_of_Week : STRUCT

Name : String;

DayNon : INT(1..7);

END_STRUCT;

END_TYPE

VAR

DayVar1 : Day_of_Week;

DayVar2 : Day_of_Week;

BoolVar : BOOL;

END_VAR

LD DayVar1

GT DayVar2 (* Erreur: comparaisons sur des variables structurées n'est pas autorisées *)

ST boolVar


S3032

Les déclarations autoréférencées (c.-à-d.,récursif) ne sont pas autorisés.

Une récursion a détecté. Une fonction ne peut s'appeler périodiquement, ni directement ni indirectement (c.-à-d. en appelant une autre fonction, qui appelle une des fonctions dans la hiérarchie appelante). Les blocs fonction et les programmes ne peuvent déclarer des instances d'eux-mêmes, ni directement ni indirectement (c.-à-d. en appelant un exemple d'un autre bloc fonction qui déclare un type d'instance d'un bloc fonction dans la hiérarchie appelante).


S3033

L'opérande du type TIME est attendu.

Une constante ou une variable de type TIME a été attendu et l'opérande à la position donnée est d'un autre type.

Exemple:

VAR

StartTime : TIME_OF_DAY;

StopTime : TIME_OF_DAY;

RunTime : TIME := T#10s;

END_VAR

LD StartTime

ADD 10000 (* Erreur: l'opérande doit être du type TIME *)

ST StopTime

LD StartTime

ADD RunTime (* Correcte *)

ST Stop Time


S3034

Chaîne trop longue pour la variable.

Une chaîne littérale a été assignée à une variable chaîne mais la chaîne littérale ne s'adapte pas dans la variable chaîne. C.-à-d. la longueur de la chaîne littérale est plus grande que la longueur assignée à la variable chaîne.


S3035

Type d'opérande non autorisé pour cette fonction ! Opérande numérique ou opérande du type de date ou heure attendu.

L'opération à la position donnée n'est pas définie pour le type du résultat actuel (c.-à-d. le premier paramètre effectif).

Exemple:

VAR

BitMake: WORD;

END_VAR

LD BitMask (* Erreur: l'opérande doit être du type TIME, ANY_DATE ou ANY_NUM *)

SUB 3

ST BitMask


S3036

La constante de nombre entier est hors limite.

La constante de nombre entier à la position donnée n'est pas dans la limite du type de données associé.

Exemple:

VAR

Range1 : UINT(-1..1000); (* Erreur: Disparité de signe. Les valeurs pour UINT ne doivent pas être négatives *)

Range2 : INT(-1..36000); (* Erreur : Débordement : la limite supérieure est plus grande que la valeur maximum du type INT *)

END_VAR


S3037

La limite inférieure du sous domaine ne doit pas être plus grande que la limite supérieure.

La valeur de la limite supérieure dans la déclaration du sous domaine sur la position indiquée est inférieure à la valeur de la limite inférieure. Les valeurs inférieurs et supérieur d'un sous domaine sont du type entier et la limite supérieure doit être plus grande que la limite inférieure.


S3038

L'initialisation est hors des limites du sous domaine (le type de données est un type de sous domaine).

Une variable d'un type sous domaine a été initialisée avec une valeur qui est hors des limites de ce sous domaine. La déclaration d'un sous domaine indique que la valeur de n'importe quel élément de donné de ce type peut seulement prendre des valeurs entre la limite supérieure et inférieure indiquées.


S3039

L'index est hors limite.

Un accès à une variable d'un type tableau a été essayé avec un index dont la valeur est hors de la gamme indiquée dans le type ou la déclaration variable.


S3040

Type de données non valide. ANY_NUM attendu.

L'opération à la position donnée n'est pas définie pour le type du résultat actuel (c.-à-d. le premier paramètre effectif).

Exemple:

VAR

BitMake: WORD;

END_VAR

LD BitMask (* Erreur: l'opérande doit être du type TIME, ANY_DATE ou ANY_NUM *)

NEG

ST BitMask


S3041

Type EN/ENON non autorisé. Doit être du type booléen. Ne doit pas être RETAIN.

Une variable d'entrée avec un nom EN or une variable de sortie avec le nom EN a été déclarée avec un type illégal ou avec le qualificateur RETAIN.

L'identifiant "EN" est réservée pour des variables d'entrée du type BOOL

L'identifiant "ENO" est réservé pour des variables de sortie du type BOOL. Cette variable ne doit pas être déclarée avec le qualificateur RETAIN.


S3042

EN manquant. Utilisation de ENON autorisé seulement en combinaison de EN.

Une variable de sortie avec le nom "ENO" a été définie mais aucune variable d'entrée avec le nom "EN" n'a été trouvée. La variable de sortie "ENO" peut seulement être employé en combinaison avec "EN".


S3044

Données manquantes. Vous avez besoin d'un chargement ou d'une expression.

Le résultat actuel est non défini. Une instruction LD ou une expression doit précéder l'instruction sur la position actuelle. Cette erreur se produit par suite de l'erreur S5010 de syntaxe d'erreur. Veuillez déplacer l'instruction hors de la parenthèse.


S3046

Les noms de type ne peuvent pas être employé en tant que noms d'instance.

Un nom de type ou le nom d'une unité de gestion de programme a été employé dans une déclaration comme nom de variable. Unité de gestion de programme et les type définis au niveau du projet sont connus dans toutes les zones du projet et leurs noms ne peuvent pas être employés comme identifiant pour des variables locales.

Exemple:

FUNCTION Power

(* function block declarations *)

(* statements *)

END_FUNCTION

PROGRAM main

VAR

Power : REAL; (* Erreur: Power n'est pas autorisé comme nom de variable, parce qu'elle a

été déjà employée comme nom de fonction *)

END_VAR

(* Code *)

END_PROGRAM


S4000

'AT%': La déclaration simultanée de plusieurs variables directes n'est pas autorisé.

Une liste d'identifiants a été utilisé dans une déclaration variable localisée. Les représentations directes peuvent seulement être associées à un identifiant simple.

Exemple:

La déclaration suivante n'est pas autorisée:

VAR

dirVar1, dirVar2, dirVar3 : at%I0.0;

END_VAR


S4001

Trop de variables (identifiants). Le maximum d'identifiants est 60.

Trop d'identifiants dans le liste d'identifiant d'une déclaration de variable. Seul les listes d'identifiants avec un maximum de 60 identifiants sont supportées.


S4003

Tableau trop grand.

Le nombre d'élément d'une dimension dans une déclaration de tableau dépasse le nombre maximum d'éléments supporté par le logiciel Motion Studio. Le nombre maximum d'élément est déterminé par le type d'index du tableau.


S4005

La limite supérieur doit être plus grande ou égale à la limite inférieur.

La valeur de l'index de limite supérieure de la déclaration de tableau à la position indiquée est inférieure à la valeur de l'index de même dimension. L'index de limite supérieure d'une dimension doit être plus grand ou égal que l'index associé de limite inférieure.


S4006

Erreur de syntaxe. [ conseil : Dans certains cas, l'erreur réelle est localisée dans une ligne précédente ( '; 'manquant etc...) ].


S4007

Les déclarations "Self-referencing" (c.-à-d., récursives) sont invalides.

Une récursivité a détecté. Une fonction ne peut s'appeler périodiquement, ni directement ni indirectement (c.-à-d. en appelant une autre fonction, qui appelle une des fonctions dans la hiérarchie appelante). Les blocs et les programmes de fonction ne peuvent déclarer des exemples d'eux-mêmes, ni directement ni indirectement (c.-à-d. en appelant une instance d'un autre bloc de fonction qui déclare une instance d'un bloc de fonction dans la hiérarchie appelante).


S4008

Trop d'attributs 'RETAIN' ou 'CONSTANT'. Vous devez en utiliser qu'un seul.

Trop de qualificateurs utilisés dans une déclaration d'une variable.


S4009

Une structure doit contenir au moins un élément de structure (déclaration variable).

Une structure vide a été déclarée. Ceci n'est pas autorisé. Une structure doit contenir au moins une variable membre.

Exemple:

Non autorisé:

TYPE

Mastructure : struct end_struct;

END_TYPE

Autorisé:

TYPE

Mastructure : STRUCT

M1 : int;

END_STRUCT

END_TYPE


S4010

Les déclarations de type simultanées ne sont pas autorisées.

La déclaration de type sur la position indiquée contient une liste d'identifiants. Ceci n'est pas autorisé. Veuillez écrire un identifiant pour chaque nouveau type.

Exemple:

Non autorisé:

TYPE

MonInt1, MonInt2, MonInt3 : int;

END_TYPE

Autorisé:

TYPE

MonInt1 : int;

MonInt2 : int;

MonInt3 : int;

END_TYPE


S4011

Valide seulement dans les programmes et dans les sections VAR et VAR_GLOBAL.

Une variable directement représentée a été déclarée dans une unité d'organisation de programme ou une zone de déclaration de variable dans laquelle elle n'est pas soutenue. Les déclarations de variables localisées sont autorisées seulement dans les zones VAR ou VAR_GLOBAL des programmes.


S4012

Valide seulement dans les programmes, blocs fonctionnels et les fonctions.

Un élément de déclaration de variable (VAR <declarations> END_VAR) a été trouvé dans une zone où elle n'est pas supportée. Les éléments de déclaration de variables sont autorisés dans les programmes, les fonctions et les blocs de fonction.


S4013

Valide seulement dans les programmes, blocs fonctionnels et les fonctions.

Un élément de déclaration d'une variable d'entrée (VAR_ENTRÉE <declarations> END_VAR) a été trouvé dans une zone d'organisation de programme où elle n'est pas supportée.


S4014

Valide seulement dans les programmes et les blocs fonctionnels.

Un élément de déclaration d'une variable d'E/S (VAR_IN_OUT <declarations> END_VAR) a été trouvé dans une zone d'organisation de programme où elle n'est pas supportée.


S4015

Valide seulement dans les programmes et les blocs fonctionnels.

Un élément de déclaration dune variable de soritie (VAR_OUTPUT <declarations> END_VAR) a été trouvé dans une zone d'organisation de programme où elle n'est pas supportée.


S4016

Valide seulement dans les programmes et les blocs fonctionnels.

Un élément de déclaration d'une variable externe (VAR_EXTERNAL <declarations> END_VAR) a été trouvé dans une zone d'organisation de programme où elle n'est pas supportée. Les déclarations variables externes sont supportées dans les programmes et les blocs fonctionnels.


S4017

Valide seulement dans les programmes.

Un élément de déclaration de variable globale VAR_GLOBAL <declarations> END_VAR) a été trouvé dans une zone d'organisation de programme où elle n'est pas supportée. Les déclarations variables globales ne sont autorisés que dans les programmes.


S4018

Valide seulement dans la sections VAR et VAR_GLOBAL.

Un "CONSTANT" a été employé dans une zone de déclaration de variable dans laquelle il n'est pas soutenu.


S4019

Valide seulement dans les programmes ou dans les blocs fonctionnels et à l'intérieur de sections VAR-, VAR_OUTPUT-, ou VAR_GLOBAL.

Un "RETAIN" a été employé dans une zone de déclaration de variable dans laquelle il n'est pas soutenu.


S4020

Valide seulement dans les programmes ou dans les blocs fonctionnels et à l'intérieur de sections VAR_INPUT ayant le type 'BOOL' sans Initialisation.

Une variable a été déclarée avec un qualificateur de bord dans une partie d'organisation du programme ou une zone de déclaration de variable dans laquelle elle n'est pas supportée.


S4021

Valide seulement dans les sections VAR_INPUT, VAR_OUTPUT, et VAR_IN_OUT.

Une variable a été déclarée avec le qualificatif d'adresse dans une partie d'organisation de programme ou une zone de déclaration de variable de déclaration dans laquelle elle n'est pas supportée.


S4022

Valide seulement dans les blocs fonctionnels ou les fonctions et à l'intérieur de sections VAR..END_VAR sans CONSTANT/RETAIN.

Une variable a été déclarée avec le qualificateur d'ATTRIBUTS dans une unité d'organisation de programme ou une zone de déclaration de variable dans laquelle elle n'est pas supportée. Cet attribut est supportée seulement dans les sections VAR sans CONSTANT ou RETAIN qualificatifs de FUNCTIONs et de FUNCTION_BLOCKs.

Note : Le mot-clé ATTRIBUTS est supporté par Le logiciel Motion Studio seulement dans des versions spéciales pour définir des attributs additionnels de variables dans la prolongation de la norme IEC61131-3. Vous ne devriez pas voir ce message dans le logiciel Motion Studio.


S4023

Valide seulement dans les sections TYPE..END_TYPE.

Une déclaration de structure a été trouvée dans une zone de déclaration dans laquelle elle n'est pas supportée. Les déclarations de structure sont seulement supportées dans les éléments de déclaration de TYPE.


S4024

Valide à l'extérieur des sections VAR_EXTERNAL.

Une variable a été déclarée dans une section de déclaration EXTERNAL avec une valeur initiale. Ceci n'est pas autorisé. Veuillez assigner la valeur initiale dans la déclaration variable GLOBALE respective.

Exemple:

VAR_EXTERNAL

A : INT := 5;

END_VAR

VAR_EXTERNAL

A : INT;

END_VAR

VAR_GLOBAL

A : INT := 5

END_VAR


S4033

initialisation multiple.

Un membre d'une variable de structure a été initialisé plus d'une fois. Cette erreur se produit quand une initialisation explicite de structure et une initialisation d'élément sont faites.

Exemple:

L'initialisation suivante n'est pas autorisé:

TYPE

StructType : Struct

Membre1 : int := 5;

Membre2 : bool;

END_STRUCT := (Membre1 := 4, Membre2 := true);

END_TYPE

Utilisez une des initialisations suivantes:

TYPE

StructType : Struct

Membre1 : int ;

Membre2 : bool;

END_STRUCT := (Membre := 4, Membre := true);

END_TYPE

ou

TYPE

StructType : Struct

Membre : int := 5;

Membre2 : bool := true;

END_STRUCT;

END_TYPE


S4034

Nom POU non valide.

Cette erreur se produit quand un mot-clé a été employé comme nom de POU ou si aucun nom n'a été défini.


S4035

Type invalide pour une fonction.

Le type de fonction doit être un type prédéfini ou un identifiant. Cette erreur se produit le plus généralement, quand un mot-clé, une chaîne des caractères IEC61131-3 ou un nombre est employé comme type de fonction ou si aucun type de fonction n'a été défini.


S4036

Une fonction a besoin d'au moins un paramètre entrée VAR_INPUT.

Une fonction a été définie sans paramètre d'entrée. Dans IEC61131-3, une fonction a besoin au moins d'un paramètre d'entrée.


S5000

Mauvais type de paramètre.

Le type d'un paramètre effectif d'une fonction ou instance de bloc de fonction est incompatible avec le type du paramètre formel qu'il lui a été assigné.


S5001

Tableau attendu. Ce n'est pas un tableau.

Un accès indexé a été tenté à une variable qui n'est pas un tableau.

Exemple:

PROGRAM

VAR

x : INT;

y : INT;

END_VAR

LD x[3] (* non autorisé si la variable n'est pas un tableau *)

ST y

END_VAR


S5002

Ce FUNCTION_BLOCK est appelé par CAL si EN=TRUE..CALC/CALCN sont tous les deux inadmissibles.

Une instance de bloc de fonction avec un paramètre d'entrée "EN" est été appelé par l'intermédiaire de CALC/CALCN. Ceci n'est pas autorisé. Employez l'instruction CAL à la place. Le code d'un bloc de fonction avec un paramètre d'entrée "EN" est appelé si la valeur de ce paramètre est VRAIE.


S5003

L'instance d'un bloc de fonction ne peut pas être 'CONSTANT.

Une instance de bloc de fonction a été défini dans une section de variable avec l'attribut CONSTANT. Ceci n'est pas permis. Veuillez enlever l'attribut ou déplacez la déclaration d'instance dans une autre section de variable, qui n'a aucun attribut CONSTANT.


S5004

Les instances de bloc de fonction sont invalides dans les fonctions, structures,et les tableaux.

Une instance de bloc de fonction a été défini dans une section de variable d'une fonction ou comme un membre d'une STRUCT ou d'un type ARRAY. IEC61131-3 ne permet pas des déclarations d'instances de bloc de fonction dans les fonctions. Les instances de bloc de fonction cite comme membres de STRUCT et types de tableau ne sont pas supportées par Le logiciel Motion Studio.


S5005

L'instance de bloc de fonction comme résultat de fonction n'est pas supporté.

L'instance de bloc de fonction comme type de résultat de fonction n'est pas supporté dans Le logiciel Motion Studio.


S5006

L'instance de bloc de fonction comme paramètre n'est pas supporté.

Les paramètres de type de bloc de fonctions ne sont pas supportés dans Le logiciel Motion Studio.


S5008

Est attendu un nombre entier ou un énuméré. Index de tableau invalide.

Le type variable ou la constante utilisée comme index dans un accès variable classé est inadmissible. Un index doit être du type INT ou du type d'énumération.


S5009

Début de séquence non valide. Le résultat actuel est vide. Employez le 'LD 'pour initialiser le résultat actuel.

Cette erreur se produit quand une séquence d'état commence par une instruction qui utilise le résultat courant. La première instruction est habituellement un charment d'état. Cette erreur peut également se produire, si le résultat actuel est employé dans la première instruction après un CAL, un JMP ou une étiquette.

Exemple:

PROGRAM main

VAR

Switch : BOOL;

END_VAR

ST Switch (* Erreur: Le résultat courant n'est pas défini. *)

LD Switch

EQ TRUE

JMPC NextStep

LD TRUE

JMP End (* La valeur charge dans l'état précèdent sera perdu après le JMP *)

NextStep:

LD FALSE

END:

ST Switch (* Erreur: Le résultat courant n'est pas défini après l'étiquette *)

(* Code *)

END_PROGRAM


S5010

Instruction non valide dans un calcul de parenthèses.

L'instruction à la position donnée n'est pas autorisée entre les parenthèses. Veuillez remplacer l'instruction ou déplacez-la hors des parenthèses.

Exemple:

FUNCTION_BLOCK Count

VAR_ENTRÉE

StartValue : DINT;

FReset : BOOL;

END_VAR

VAR_OUTPUT

CurrentCountValue : DINT;

END_VAR

VAR

CountValue : DINT;

END_VAR

LD fReset

EQ TRUE

JMPCN Continue

LD StarValue

ST CountValue

Continue:

LD CountValue

ADD 1

ST CountValue

ST CurrentCountValue

END_FUNCTION_BLOCK

PROGRAM main

VAR

Counter : Count;

StartValue : DINT;

Result : DINT;

END_VAR

LD 5

ADD (StartValue

ST Counter.StartValue

EQ 1000

ST Counter.fReset

CAL Counter (* Erreur: CAL n'est pas autorisé dans des parenthèses *)

LD Counter.CurrentCounter (* Erreur: Load inest pas autorisé dans des parenthèses *)

)

ST Result

END_PROGRAM.


S5011

Tableau d'instance de bloc de fonction non valide.

Les tableaux de bloc de fonction ne sont pas autorisés.


S5012

Type de résultat et type d'opérande incompatibles.

Le type de résultat de l'opération précédente et le type de la variable dans laquelle ce résultat est stocké sont incompatible.

Exemple:

VAR

X : INT;

END_VAR

LD 65000

ST x (* 65000 n'est pas du type INT *)


S5013

Type de résultat et type du premier format du paramètre d'entré sont incompatible.

Le type de résultat de l'opération précédente et le type du premier paramètre d'entrée dans un appel de fonction ou de bloc de fonction sont incompatibles.

Exemple:

FUNCTION Fun1

VAR

InVar : INT;

END_VAR

(* Code *)

END_FUNCTION

PROGRAM main

VAR

X : DINT;

END_VAR

LD x

ADD 1000

Fun1 (* Erreur: Type de résultat de l'opération précédente est un DINT, le type du premier paramètre d'entrée de Fun1 est un INT *)

ST x

END_PROGRAM


S5014

Mauvais nombre de paramètres.

Trop de paramètre ont été trouve dans l'appelle d'une fonction ou d'un bloc de fonction.


S5015

Type d'adresse directe non valide.

Une variable locale a été déclarée avec un type non supporté. Seul les variables locales du type ANY_NUM ou ANY_BIT sont supportées


S5016

La variable est en lecture seul. Accès en écriture non valide.

Un accès en écriture a été tenté sur une variable qui est en lecture seule.


S5017

La variable n'est pas une structure.

Une valeur d'initialisation pour une structure a été assignée à une variable qui n'est pas du type structuré.

Exemple.

VAR

A : INT := (m1 := 5, m2 := TRUE); (* non autorisé *)

END_VAR


S5018

La variable n'est pas un tableau.

Une initialisation de tableau a été affectée à une variable qui n'est pas du type tableau.

Exemple.

VAR

A : INT := [4]; (* non autorisé *)

END_VAR


S5019

Initialisation de valeur et type de variable incompatible.

Le type de la valeur d'initialisation et le type de la variable sont incompatibles.

Exemple:

VAR

X : INT := 65000;

END_VAR


S5020

Trop de valeur d'initialisation.

La valeur d'initialisation pour un type tableau ou variable a plus d'élément que ce qui a été déclaré pour le tableau.

Exemple:

VAR

A : ARRAY [1..5] OF INT := [1, 2, 3, 4, 5, 6]; (* trop de valeurs d'initialisation, la tableau a seulement 5 éléments *)

END_VAR


S5021

Le paramètre formel a été incorrectement déclaré.

Le nom d'un paramètre de sortie a été attendu. L'identifiant a été trouvée dans la zone courante mais n'est pas un nom de paramètre de sortie.

Conseils

Vérifiez si le nom est orthographié correctement.

Assurez-vous que l'identifiant n'est pas un paramètre d'entrée ou d'E/S.


S5022

Assignations multiples d'un paramètre dans un appel d'instance de bloc fonction

Cette erreur se produit, quand dans un appel d'instance de bloc fonction, un paramètre est initialisé 2 fois

Exemple:

FUNCTION_BLOCK Fb1

VAR_ENTRÉE

InParam1 : int;

InParam2 : int;

InParam3 : bool;

END_VAR

(* Code *)

END_FUNCTION_BLOCK

PROGRAM main

VAR

fbInst : fb1;

END_VAR

(* Code *)

cal fbInst( InParam1 := 1,

InParam1 := 2,

InParam3 := true

)

(* Code *)

END_PROGRAM


S5023

Trop de données initialisées.

Cette erreur se produit, quand un membre d'une structure ou une instance est initialisé deux fois dans une initialisation explicite de structure.

Exemple:

TYPE

StructType : STRUCT

Member1 : int;

Member2 : int;

Member3 : bool;

END_STRUCT;

END_TYPE

VAR

StructVar : StructType := (Member1 := 1, Member1 := 2, Member3 := FALSE);

END_VAR


S5024

Type non permis pour cette opération.

L'opération sur la position donnée n'est pas définie pour le type du résultat actuel. C.-à-d. le type du paramètre effectif est incompatible avec le type du premier paramètre formel.

Exemple:

VAR

X : REAL;

END_VAR

LD 1 (* La constante 1 peut être converti implicitement en un entier ou un bit *)

LN (* Erreur: LN est seulement défini pour le type ANY_REAL *)

ST X


S5025

Paramètre non autorisé pour cette fonction.

Le type du paramètre effectif est incompatible avec tout les types autorisés pour le paramètre à la position donnée.

Exemple:

VAR

X : STRING;

END_VAR

LD EXAMPLE

LEFT 3.0 (* Erreur: le second parameter de LEFT est du type UINT *)

ST X


S5026

Type de paramètre formel non valide.

Le nom d'une entrée ou d'un paramètre E/S a été attendu. L'identifiant a été trouvée dans la zone courante mais n'est pas un nom d'entrée ni de paramètre de sortie.

Conseils

Vérifiez si le nom est orthographié correctement.

Assurez-vous que l'identifiant n'est pas un paramètre de sortie.


S5027

Types d'opérande incompatibles.

Les opérandes pour l'opération à la position donnée doivent être compatibles. C.-à-d. ils doivent avoir le même type ou, si au moins un des paramètres est une constante, un transtypage implicite identique à celui de l'autre opérande doit être possible.

Example:

VAR

X : REAL;

END_VAR

LD 1 (* La constante 1 peut être converti implicitement en entier ou bit *)

MAX X (* Erreur: X est du type REAL *)

ST X


S5028

Type de données non autorisé pour cette opération.

Cette erreur se produit, si le type d'un paramètre effectif n'est pas autorisé pour l'opération à la position donnée.

Exemple:

VAR

StringVar : STRING;

END_VAR

LD 1

CONCAT EXAMPLE(* Erreur: CONCAT attend un opérande de type STRING en tant que paramètre d'entré *)

ST StringVar


S5029

Appel de bloc de fonction non valide.

Cette erreur se produit, si un appel à une instance de bloc de fonction est tenté et que cette instance est un paramètre d'entrée d'un appel de bloc de fonction ou de programme.

Example:

FUNCTION_BLOCK Fb1

VAR_ENTRÉE

InParam1 : int;

InParam2 : int;

InParam3 : bool;

END_VAR

(* Code *)

END_FUNCTION_BLOCK

FUNCTION_BLOCK Fb2

VAR_ENTRÉE

fbInstEntrée : Fb1;

(* other Entrée declarations *)

END_VAR

VAR

(* local variable declarations *)

END_VAR

(* Code *)

cal fbInstEntrée( InParam1 := 1,

InParam2 := 2,

InParam3 := true

)

(* Code *)

END_PROGRAM


S5030

Variable en écriture seul. L'accès en lecture non valide.

Un accès en lecture a été tenté sur une variable qui est en écriture seule.


S5031

L'accès par bit est autorisé seulement sur des types de données bit.

Cette erreur se produit si une sélection de bit a été tenté sur une variable qui n'est pas du type de données bit ou du type BOOL.

Exeample:

VAR

DintVar : DINT;

BoolVar : BOOL;

END_VAR

LD DintVar.4 (*Erreur : le sélection de bit est autorisé seulement sur des variables du type ANY_BIT excepté BOOL *)

ST BoolVar


S5032

La position du bit est plus grande que le nombre de bit contenue dans la variable sélectionnée.

Cette erreur se produit, quand la position du bit donné dans un choix de bit est plus grand que le nombre de bit contenue dans la variable sélectionnée. Le nombre de bit accessible dans un choix de bit dépend du type de données de la variable. Les positions de bit sont comptées du bit de poids faible à la position 0 au bit de poids fort à la position n - 1, où n est le nombre de bit dans le type de données.

Exemple:

VAR

wVar : WORD := 5;

fVar : BOOL := FALSE;

END_VAR

(* Code *)

LD wVar.16 (* La variable sélectionnée est du type WORD. c.à.d il a 16 bits avec les positions de bit

de 0 à 15. *)

ST fVar

(* Code *)


S5033

Paramètre IN_OUT manquant. Veuillez fournir chaque paramètre formel IN_OUT avec un paramètre effectif

Cette erreur se produit, si au moins un des paramètres IN_OUT d'un bloc de fonction n'est pas fourni avec un paramètre effectif, lors de l'appel de l'instance du bloc de fonction respectif. Les paramètres IN_OUT sont des références et doivent être fournis avec un paramètre effectif dans chaque appel d'instance de bloc de fonction.

Exemple:

FUNCTION_BLOCK Fb1

VAR_IN_OUT

InOutParam1 : INT;

InOutParam2 : BOOL;

END_VAR

(* Code *)

END_FUNCTION_BLOCK

PROGRAM main

VAR

fbInst : fb1;

IntVar1 : INT;

IntVar2 : INT;

END_VAR

(* Code *)

cal fbInst() (* Erreur: aucune des variables de FB1 n'est fourni avec un paramètre effectif *)

cal fbInst( InOutParam1 := IntVar1

) (* Erreur: le paramètre effectif pour la seconde paramètre IN_OUT est manquant *)

cal fbInst ( InOutParam1 := IntVar1,

InOutParam2 := IntVar2

) (*Correct : chaque paramètre formel IN_OUT de FB1 est fourni avec un paramètre effectif *)

(* Code *)

END_PROGRAM


S5034

Paramètre IN_OUT non valide. Les paramètres IN_OUT ne peuvent pas être des expressions ou des constantes.

Cette erreur se produit, si un paramètre IN_OUT est fourni avec une expression ou une valeur constante. Ceci n'est pas autorisé parce que les paramètres IN_OUT sont des références.

Exemple:

FUNCTION_BLOCK Fb1

VAR_IN_OUT

InOutParam1 : INT;

InOutParam2 : BOOL;

END_VAR

(* Code *)

END_FUNCTION_BLOCK

PROGRAM main

VAR

fbInst : fb1;

IntVar1 : INT;

IntVar2 : INT;

END_VAR

(* Code *)

cal fbInst( InOutParam1 := IntVar1,

InOutParam2 := 5

) (* Erreur: le paramètre effectif pour le deuxième paramètre IN_OUT est une constante. *)

cal fbInst( InOutParam1 := IntVar1,

InOutParam2 := (IntVar1

ADD IntVar2)

) (*Erreur: le paramètre effectif pour le deuxième paramètre IN_OUT est une expression. *)

cal fbInst ( InOutParam1 := IntVar1,

InOutParam2 := IntVar2

) (* Correct: Les deux paramètres de FB1 sont fournies avec des variables. *)

(* Code *)

END_PROGRAM


S5035

Type de données générique ne sont pas autorisés.

Cette erreur se produit, si N'IMPORTE QUEL type de données est employé dans une déclaration de variable ou de paramètre. L'utilisation de types de données génériques est seulement autorisée pour la surcharge de fonction et la conversion de type dans une fonction standard ou les fonctions fournies par le fabricant.

Exemple:

FUNCTION IntegerToString : STRING

VAR_ENTRÉE

InVar : ANY_INT; (* Erreur: Des fonctions définies pour l'utilisateur ne peuvent pas être surchargées *)

END_VAR

(* Code *)

END_FUNCTION


S5036

Les type locaux ne sont pas autorisés dans cette section de variable.

Cette erreur se produit, si un type local défini par utilisateur est employé dans la déclaration d'un variable global ou externe ou dans la déclaration d'un paramètre. Les variables globales et externes aussi bien que les paramètres doivent être d'un type pré-défini ou d'un type global. Les types globaux sont soit dépendants du matériel, soit du firmware ou des types global définis dans le projet utilisateur.

Exemple:

PROGRAM main

TYPE

StructType : STRUCT

Member1 : BOOL;

Member2 : STRING;

END_STRUCT;

(* Other type definitions *)

END_TYPE

VAR_GLOBAL

GlobVar : StructType; (* Non autorisé car StructType n'est pas connu du POU *)

(* Autre définitions de variables globales *)

END_VAR

VAR

(* Definitions de variables locales *)

END_VAR

(* Code *)

END_PROGRAM

FUNCTION_BLOCK Fb1

TYPE

StructType : STRUCT

Member1 : BOOL;

Member2 : STRING;

END_STRUCT;

END_TYPE

VAR_EXTERNAL

GlobVar : StructType; (* Non autorisé car StructType n'est pas connu de POU *)

(* Other external declarations *)

END_VAR

VAR_ENTRÉE

InVar : StructType; (* Non autorisé car StructType n'est pas connu de POU *)

(* Autre declarations dentrée *)

END_VAR

(* Code *)

END_FUNCTION_BLOCK


S5037

Trop d'indices à l'intérieur des crochets [.... ] d'un accès de tableau.

Cette erreur se produit, si un accès à un élément de tableau est tenté avec plus d'index que de dimensions fourni dans la définition du type de type de données d'éléments.

Exemple:

PROGRAM main

TYPE

ArrayType : Array[1..5, 1..20] of INT;

(* Autre definitions de type *)

END_TYPE

VAR

ArrayVar : ArrayType;

IntVar : INT;

(* Autre definitions de variables *)

END_VAR

LD ArrayVar[1, 2, 3] (* Erreur: la variable de type tableau a seulement 2 dimensions *)

ST IntVar

(* Code *)

END_PROGRAM


S5038

Les variables directement représentées ne sont pas autorisées comme paramètres dans les prototypes.

Une variable directement représentée a été déclarée dans la section VAR_ENTRÉE, VAR_OUTPUT ou VAR_IN_OUT d'une unité de gestion de programme. Ceci n'est pas autorisé. Les variables directement représentées ne sont pas autorisées dans les fonctions et les blocs de fonction. Les variables de VAR_ENTRÉE , VAR_OUTPUT et VAR_IN_OUT ne sont pas supportées dans les programmes.

Si vous voulez accéder à une variable directement représentée d'un bloc de fonction, déclarer la variable avec un nom symbolique dans la section de VAR_GLOBAL d'un programme et employer ce nom symbolique dans une déclaration dans la section de VAR_EXTERNAL du bloc de fonction.

Les fonctions ne peuvent pas accéder à des variables directement représentées.

Exemple:

FUNCTION_BLOCK SetOutput

VAR_EXTERNAL

OutputLocation : BOOL;

END_VAR

VAR_ENTRÉE

Value : BOOL;

END_VAR

LD Value

ST OutputLocation

END_FUNCTION_BLOCK

PROGRAM main

VAR_GLOBAL

OutputLocation AT%Q0.0 : BOOL;

END_VAR

VAR

Switch : SetOutput;

CurrentValue : BOOL;

END_VAR

LD CurrentValue

NOT

CAL Switch(Value := CurrentValue)

END_PROGRAM.


S5039

"&x" est seulement autorisé si x est une variable directe.

L'identifiant précédée par l'opérateur & n'est pas un nom d'une variable directement représentée.

Conseils

Assurez-vous que le nom est orthographié correctement.

Assurez-vous que la variable est une variable directement représentée


S5040

Trop peu d'indices à l'intérieur des crochets [.... ] d'un accès de tableau

Cette erreur se produit, si un accès à un élément de tableau est tenté avec moins d'indice que de dimensions fourni dans la définition du type données d'éléments.

Exemple:

PROGRAM main

TYPE

ArrayType : Array[1..5, 1..10, 1..20] of INT;

(* Other type definitions *)

END_TYPE

VAR

ArrayVar : ArrayType;

IntVar : INT;

(* Autres definitions de variable *)

END_VAR

LD ArrayVar[1, 2] (* Erreur: Les variables du type tableau ont 3 dimensions *)

ST IntVar

(* Code *)

END_PROGRAM


S5041

Les valeurs du type INT24 ou REAL48 sont non valides dans ce contexte.

Opération non supporté par ce type.


S5042

Les instances de bloc de fonctions ne doivent pas être 'RETAIN'.

Une instance d'un bloc de fonction a été défini dans une section variable avec l'attribut RETAIN. Ceci n'est pas supporté. Veuillez enlever l'attribut ou déplacez la déclaration de l'instance dans une autre section de variable, qui a aucun POUR MAINTENIR l'attribut.


S6002

Pas de prototype.

Un type inconnu nom a été employé dans une déclaration variable ou un appel de fonction.

Conseils

Assurez-vous qu'un type, une fonction ou un bloc de fonction avec ce nom soit déclaré dans le contexte du projet actif.

Assurez-vous que le nom du type, de la fonction ou du bloc de fonction est orthographié correctement.

Re-compilez entièrement le projet.

Veuillez consulter votre documentation matériel si aucune des actions ci-dessus n'élimine le problème.


S6004

Récursion (c.-à-d., autoréférencement direct ou indirect) détectée

Récursion détectée. Une fonction ne peut s'appeler périodiquement, ni directement ni indirectement (c.-à-d. en appelant une autre fonction, qui appelle une des fonctions dans la hiérarchie appelante). Les blocs de fonction et les programmes ne peuvent déclarer des instances d'eux-mêmes, ni directement ni indirectement (c.-à-d. en appelant une instance d'un autre bloc de fonction qui déclare une instance d'un type de bloc de fonction déjà utilisé dans la hiérarchie appelante).


S6005

Trop de types et de blocs de fonction. Pour le nombre maximum de définitions de type, veuillez consulter votre documentation matériel.

Cette erreur se produit, si trop de types, de fonction ou des blocs de fonction ont été employées dans la hiérarchie appelante d'une unité de gestion de programme. Pour le nombre maximum des types, les fonctions et les blocs de fonction soutenus voir le Tableau D.1 : Implementation-dépendance des paramètres.


Les erreurs du MPC

Les numéros des erreurs détectées sont affichés sur l'afficheur 7 segments du MPC par ordre croissant avec rebouclage sur la première erreur.

Un défaut commence toujours d'un triple E suivi du code d'erreur puis un tirait et enfin un code d'information.

Ex : Pour une erreur de température moteur E07 et une erreur de poursuite E12 sur un variateur ayant le numéro de noeud 3, on aura :

Erreur provenant d'un variateur IMD:

Code | Détail | Description
01 | N° de variateur | Sur tension
02 | N° de variateur | Sous tension
03 | N° de variateur | I2t
04 | N° de variateur | Sur courant
05 | N° de variateur | Court circuit
06 | N° de variateur | Temp IGBT
07 | N° de variateur | Temp Moteur
08 | N° de variateur | Retour de position
09 | N° de variateur | Paramètres
10 | N° de variateur | Modèle de drive
11 | N° de variateur | DPL(n'existe pas)
12 | N° de variateur | Erreur de poursuite
13 | N° de variateur | Flash
14 | N° de variateur | FPGA
15 | N° de variateur | Sur vitesse
16 | N° de variateur | Saturation résolveur
17 | N° de variateur | Alimentation 24V
18 | N° de variateur | Ecriture Memory stick
19 | N° de variateur | Memory Stick corrompue
20 | N° de variateur | Memory Stick corrompue
21 | N° de variateur | Erreur "externe"

Erreur de configuration Ethercat:

Code | Détail | Description
33 | N° de noeud | Peripherique inconnu sur le bus ethercat
34 | N° de noeud | Erreur de Version d'OS IMD [Le flashage peut avoir échoué à cause d'un boot trop ancien sur l'IMD]
35 | N° de noeud | Erreur paramètre Motion IMD
36 | N° de noeud | Erreur Axe non trouvé sur le réseau
37 | N° de noeud | Erreur une adresse est utilisée 2 fois dans la configuration
38 | N° de noeud | Erreur 2 IMD ont la même adresse sur leurs DIPs
39 | N° de noeud | Erreur paramètre Motion Virtual (dédoublage de cette erreur motion pour pouvoir différence une erreur sur un périph physique et une erreur sur un periph virtuel)

Erreur interne MPC:

Code | Détail | Description
50 | 0 | Erreur tâches IEC
51 |  | Erreur allocation segment BBM
 | 0 | Un segment contenant des variables sauvegardées n'est pas global
 | 1 | Un segment contenant des variables sauvegardées n'est pas global
52 |  | Erreur Out of BBM memory
 | 0 | Plus de place lors de la réservation des segments en BBM (indépendant des données envoyées dans le programme) Indique que config+ nb de segment en BBM*taille des segments en BBM dans la config > taille totale BBM
 | 1 | Un des segments à mettre en BBM reçu contient un N° de segment (premier octet) >= au nombre de segments déclarés dans la configuration
 | 2 | 2 (ou +) segments re§us veulent se loger dans le même segment de BBM
 | 3 | Trop de segments à mettre en BBM trouvés dans le programme reçu
 | 4 | Impossible d'allouer les buffer pour les masques des segments BBM
 | 5 | Segment d'echange plus grand que la définition
 | 6 | Impossible d'allouer la zone de donnée pour le segment d'échange
 | 7 | Impossible d'allouer les buffer pour les masques des segments BBM
53 |  | Erreur grave lors de l'initialisation système (démarrage) N° d'erreur d'init : voir en haut
54 |  | Erreur interne
 | 0 | Dépassement de taille max de trame cyclique. Trop d'axes !
 | 1 | Synchro FIFO trap
 | 2 | Ajout d'un élément motion NULL
 | 3 | Erreur lors de la gestion d'une instruction VEL=
 | 4 | Commande High Level Kernel Ethercat inconnue
 | 5 | Trap 1 ethercat
 | 6 | Trap 2 ethercat
 | 7 | Trap 3 ethercat
 | 8 | Trap 4 ethercat
 | 9 | Fuite mémoire dans une liste
 | 10 | Erreur sur routine de calcul de modulo (trop d'itération)
 | 11 | Erreur sur routine de calcul de came (trop d'itération)
 | 12 | Surcharge, impossible d'executer le timer user
 | 13 | Surcharge, impossible d'executer le timer user lent
 | 14 | Erreur allocation segments en BBM (trop de segments ???)
 | 15 | La tache de communication est crashée ...
 | 16 | La tache de motion est crashée ...
 | 17 | Pour les tests internes
 | 18 | La routine d'ajout de profil a retourné n'importe quoi (modif)
 | 19 | La routine d'ajout de profil a retourné n'importe quoi (set)
 | 20 | plus de fifo dispo ...
 | 21 | trop d'éléments à ajouter en une période
 | 22 | Erreur sur routine de calcul de came (temps de calcul dépassé)
 | 23 | Trap 1 Motion
 | 24 | Trap 2 Motion
 | 25 | Erreur d'allocation dans une liste kernel
 | 26 | Erreur d'allocation dans une liste user
 | 27 | Erreur d'allocation dans une liste ethercat
 | 28 | Erreur d'appel de sem_wait
 | 29 | Erreur canhost
 | 30 | Trap 5 ethercat
 | 31 | Erreur plus assez de Ram disponible
 | 32 | Thread timerU crashé
 | 33 | Thread timerUS crashé
 | 34 | Thread schedule crashé
 | 35 | Thread commandes lzs
 | 36 | Trap LXRT
 | 37 | Not implemented dans LZS
 | 38 | Dépassement de la taille d'un fichier fixe
 | 39 | Incoherence lors de la suavegarde des données IEC (masques) en flash
 | 40 | Out of memory pour masque IEC
 | 41 | Malloc under realtime
 | 42 | Flash trap
 | 43 | Garbage collector plein
 | 44 | Garbage collector corrompu
 | 45 | Garbage trap
 | 46 | overload ordres LZS
 | 47 | un trigger refuse de s'arrêter
 | 48 | Erreur sur l'initialisation des segfments d'échange
 | 49 | Trop de notif de breakpoint en cours
 | 50 | I/O définie incorrectement
 | 51 | N° d'evenemtn incorrect dans kevent
 | 52 | Trop d'evenements système en attente
 | 53 | Action inconnuedans un événement
 | 54 | Trops d'événements imbriqués
 | 55 | Erreur physique à l'ouverture
 | 56 | Gestion modbus serial TRAP1
 | 57 | Requetes CANHost mixées !!
 | 58 | Pb modbus<=>CAN
 | 59 | Pb notif CAN => User
 | 60 | Pb notif CAN => User
 | 61 | Plus de canaux dispo
 | 62 | Pb notif CAN => User
 | 63 | Pb notif CAN => User
 | 64 | Manque de CANREQUEST dispo
 | 65 | Problème dans la liste de PDO à envoyer lors d'un SYNC
 | 66 | Problème dans la liste de PDO in à raffraichir lors d'un SYNC
 | 67 | Trop de noeuds à mettre en nodeguarding
 | 68 | Can Host Motion trap 1
 | 69 | Plus d'élément de motion (requete kernel)
 | 70 | Un fichier est déjà ouvert !
 | 71 | Rapatriement des données live des cames
 | 72 | Trop de trigger en attente sur ce moteur
 | 73 | plus de trigger pour un PDO
 | 74 | plus de trigger pour lancer un mouvement
 | 75 | Plus possible d'ajouter d'élémentts en kernel
 | 76 | Plus de mémoire LZS dispo
 | 77 | Réentrence sur IEC MALLOC
 | 78 | Erreur sur le user stub
 | 79 | Trame scope non re§ue !
 | 80 | Trame scope non attendue
 | 81 | Requete canhost à partir de la pile => interdit
 | 82 | Erreur init smeaphore motion tool
 | 83 | Mode d'init ethercat inconnu
55 |  | Erreur init bus Ethercat
 | 0 | Erreur un périphérique n'a pu être initialisé
 | 1 | Erreur à l'init d'un paramètre d'un IMD
 | 2 | (sur le réseau) Adresse d'un périphérique ethercat hors des limites (<=0 || >=AXE_MAX)
 | 3 | 2 MPC trouvés dans la config
 | 4 | Une entrée indispensable d'un périphérique n'a pas été trouvée dans la config
 | 5 | (dans la config)Adresse d'un périphérique ethercat hors des limites (<=0 || >=AXE_MAX)
 | 6 | Erreur lors d'une allocation mémoire
 | 7 | Erreur lors de l'init des paramètres du MPC
56 |  | Erreur communication Ethercat
 | 1 | Une trame cyclique n'est pas passée
 | 2 | Un esclave n'a pas répondu
 | 3 | La dernière trame n'est pas partie (pb hard/surcharge)
 | 4 | Une trame cyclique a été tronquée
 | 5 | Crash volontaire du bus ethercat
 | 6 | Breakpoint halt on error (debug uniquement)
57 |  | Erreur interne "Host"
 | 1 | Pas de callback CANHOST
 | 2 | Variable IMD inconnue
 | 3 | Accès download large (>4 octets) non implémenté
 | 4 | Accès upload non implémenté
 | 5 | TRAP interne
 | 6 | Escalve non valide
 | 7 | Plus de handle canhost dispo
 | 8 | Accès COE large (>4 octets) non implémenté
 | 9 | TRAP coe
 | 10 | Accès CAN, slave inavlide
 | 11 | Accès large SDO non implémenté
 | 12 | TRAP coe answer
 | 13 | TRAP requete interne
 | 14 | TRAP interne pour test
 | 15 | N° de COBID trop élevé
 | 16 | Pas assez de messages CAN dispo
 | 17 | Pas assez de canaux CAN dispo
58 |  | Problème sur la BBM
 | 0 | La mémoire BBM a été effacée à cause d'une inchoérence soft
 | 1 | La mémoire BBM a été effacée 2 fois (pb hard ?)
 | 2 | La mémoire BBM n'a pu être restaurée à partir de la flash (données en flash invalides)
 | 3 | La mémoire BBM n'a pu être restaurée à partir de la flash (DIP4 non enclenché)
 | 4 | La mémoire BBM n'a pu être restaurée à partir de la flash (erreur lors de la restauration)
59 |  | Erreur IEC [Arrête les taches LZS !!!]
 | 1 | FB firmware inconnu
 | 2 | Division par 0
 | 3 | N° d'in dex d'un tableau incorrect
 | 4 | erreur inconnue
 | 5 | erreur ouverture flash
 | 6 | erreur lecture flash
 | 7 | erreur écriture flash
 | 8 | eur fermeture flash
 | 9 | erreur interne à LZS
 | 10 | Impossible de débloquer une tâche user(système) par le sequenceur
 | 11 | Trop de programme dans LZS
 | 12 | Trop de programme dans un groupe
 | 13 | N° de programme invalide dans une groupe
 | 14 | Programme non trouvé dans LZS
 | 15 | Priorité invalide dans un groupe de programme
 | 16 | Type de groupe inconnu
 | 17 | Type d'évenement de déclenchement inconnu
 | 18 | Trop de requetes en entrées sur la VM
 | 19 | Type de démarrage inconnu
 | 20 | Aucune structure de programme LZS !
 | 21 | Out of memory pour démarrer les tâches.
 | 22 | Incohérnece structure de données LZS
 | 24 | Une tâche a délcenché son WD
 | 25 | Trop de WD a gérer
 | 26 | Aucun programme dans un groupe
 | 27 | Erreur sur une référence d'I/O
 | 28 | N° de tâche incorrecte
 | 29 | Requete incorrecte
 | 30 | Trop de segments globaux dans LZS
 | 31 | OOM LZS internal
 | 32 | Plus d'une seule tâche evenement système
 | 33 | La tâche erreur système a déclenché son watchdog
 | 34 | Evenement utilisateur invalide
 | 35 | Evenement user incorrect
 | 36 | Trops d'action pour un événement utilisateur
 | 37 | Liste des éléments présents sur le CAN (Modbus=>can) TRAP !
 | 38 | Mapping d'un PDO aboutit à un PDO trop grand (>8 octets)
 | 39 | Requette NMT invalide
 | 40 | Trop de tâches preinit
 | 41 | N° de registre de capture incorrect
 | 42 | N° d'axe incorrect
 | 43 | Plus de capture disponible
 | 44 | Erreur à l'ajout d'une capture
 | 45 | Type de home inconnu
 | 46 | Source de capture/trigger inconnue
 | 47 | Type de source maitre incorrecte
 | 48 | Dénominateur de GEARBOX/GEARBOXRATIO null
 | 49 | Trap GEARBOX
 | 50 | Erreur sur lecture/écriture d'une came en flash
 | 51 | N° de came invalide
 | 52 | Erreur d'allocation mémoire sur une came
 | 53 | les gains d'une came sont invalides
 | 54 | pas assez de points pour la came
 | 55 | direction invalide
 | 56 | Erreur au démarrage d'une came
 | 57 | la came n'est pas monotonique croissante sur le maitre
 | 58 | N° de bit incorrect dans une fonction GET/SET BIT x
 | 59 | Une came n'a pas été chargée !
 | 60 | Source de capture/trigger incorrecte !
 | 61 | Type d'info pour breakcampos inconnu
 | 62 | Aucune tâche ! pas possible de démarrer
 | 63 | Plus de trigger dispo
 | 64 | Chargement d'une came en cours d'execution !
 | 65 | LoadCamI, erreur à la description d'une came IEC
 | 66 | Ecriture interdite, flash non reconnue
 | 67 | Mode invalid pour SetMode
 | 68 | Erreur lors de l'initialisation des tâches
60 |  | Erreur init paramètres MPC | Sub
61 |  | Erreur grave lors de la pré initialisation système (démarrage)!!! Defini de façon externe : NE PAS MODIFIER
 | 0 | Erreur avant l'insertion du kernel/RTAI
 | 1 | IMS_START n'a pas démarré correctement ou s'est arrêté
 | 2 | IMS_PROXY n'a pas démarré correctement ou s'est arrêté
 | 3 | Le checksum des fichiers OS n'est pas correct lors du démarrage
 | 5 | La mise à jour est corrompue
 | 6 | Cette mise à jour ne peut être mise sur l'image en cours
 | 7 | DIP3 activé - demande de rechargement
 | 8 | Plantage pendant l'init step 0
 | 9 | Plantage pendant l'init step 1 (module kernel non trouvé !)
62 |  | Crash d'un thread | sub : N° d'index du thread
63 |  | Erreur IEC [N'arrête pas les taches LZS !!!]
 | 5 | pas de tâche
 | 6 | Une tâche a délcenché son WD (non fatal)
 | 7 | Cmd à la VM LZS invalide
 | 8 | Opcode invalide
 | 9 | Opcode non supporté
 | 10 | Extension invalide
 | 11 | Powerflow non disponible
 | 12 | Bit ref invalide
 | 13 | Erreur à la restauration des données
 | 14 | Référence invalide sur un champ de bit
 | 15 | Une assertion a échouée
64 |  | La tâche d'initialisation LZS a retournée une erreur (donnée en Sub)
 | 1 | Pas de retour de la tâche d'initialisation, voir la fonction INITSETRESULT
65 |  | Warning système MPC
 | 1 | Attention, creux détectés dans l'alimentation 24V.
 | 2 | Attention, battery backup BBM H.S.
 | 3 | Attention, la config BBM a été restaurée depuis la flash
 | 4 | Attention, surcharge sur les I/O
67 |  | Erreur MPC
 | 1 | Sur température CPU
 | 2 | La batterie est H.S.


Adresses IP

Il existe deux versions d'adresse IP dans l'utilisation aujourd'hui. Presque tous les réseaux emploient l'adresse IP version 4 (IPv4), mais un nombre croissant d'éducatif et les réseaux de recherches ont adopté l'adresse IP version 6 (IPv6). Nous allons présenter le détail de l'IPv4 dans ce chapitre.

  • L'adresse IP d'une machine est appelée une adresse logique
  • Elle est codée sur 32 bits soit 4 octets. La notation consiste à indiquer chaque octet en décimal et à les séparer par des points.
  • L’adresse IP d’un ordinateur est composée de deux parties :
    • La première partie est appelée NetID, correspond à l’adresse du réseau, aussi appelé identifiant réseau. L'identifiant réseau identifie les systèmes qui sont situés sur le même réseau physique. NetID doit être unique au segment local.
    • La deuxième partie est appelée HostID, correspond à l’adresse de la machine sur le réseau, aussi appelé identifiant machine. L'identifiant machine identifie un poste de travail, le serveur, le routeur, ou tout autre dispositif de TCP/IP dans un réseau. Le HostID pour chaque dispositif doit être unique à l'identifiant de réseau. Un ordinateur relié à un réseau de TCP/IP emploie le NetID et le HostID pour déterminer quels paquets il devrait recevoir ou ignorer et déterminer quels dispositifs doivent recevoir ses transmissions.

Voici un exemple:
11000100 | 11101001 | 11111101 | 01111011
196 | 233 | 253 | 123
196.233.253. | 123
NetID | HostID

Chaque octet dans des chaînes d'une adresse IP est en valeur d'un minimum de 0 au maximum de 255. Le champ complet des adresses IP est de 0.0.0.0 à 255.255.255.255. Cela représente un total de 4.294.967.296 adresses IP possibles.

Voir aussi :

Classes d'adresses

Masque sous réseau

Les réseaux interdits

Distribution des adresses et connectivité


Classes d'adresses

Il y a 5 classes d'adresse IP, les trois premières classes (A, B et C) sont utilisées dans les réseaux standards.

    ▪ Classe A :

      . 1er octets : pour le réseau (NetID)
      . 2,3, 4ème octets : pour les ordinateurs (HostID)
      . 0XXXXXX1 -----> 01111110
      L'adressage est de 1.0.0.1 à 126.255.255.254

      L'adresse IP de classe A autorise près de 127 réseaux de plus de 16 millions de machines par réseau

    ▪ Classe B :

      . 1, 2ème octet : pour le réseau
      . 3, 4ème octet : pour les ordinateurs
      . 10XXXXXX -----> 10111111
      L'adressage est de 128.0.0.1 à 191.255.255.254
      127.0.0.1 : l'adresse pour localhost ( La machine locale )

      L'adresse IP de classe B autorise près de 16575 réseaux de plus de 6500 de machines par réseau

    ▪ Classe C :

      . 1, 2, 3ème octet : pour le réseau
      . 4ème octet : pour les machines
      . 110XXXXX -----> 11011111
      L'adressage est de 192.0.0.1 à 223.255.255.254

      L'adresse IP de classe C autorise près de 2 millions de réseaux de 254 de machines par réseau

    ▪ Classe D :

      Cette classe d'adresse est réservée pour le multicast : la diffusion vers des machines d'un même groupe.
        L'adressage est de 224.0.0.0 à 239.255.255.255
      Le multicast est plutôt utilisé dans les réseaux de recherche. Il n'est pas utilisé dans le réseau normal.

    ▪ Classe E :

      . Réservée pour le futur.
      Elles ne devraient pas être employées sur des réseaux IP. Quelques organisations de recherche utilisent les adresses de la classe E pour des buts expérimentaux.

Voir aussi :

Adresses IP

Masque sous réseau

Les réseaux interdits

Distribution des adresses et connectivité


Masque sous-réseau

▪ Le masque de réseau

      Pour connaître la partie réseau (NetID) et la partie machine (HostID) de l'adresse IP, il suffit d'utiliser le "NetMask" ou masque de réseau. Pour obtenir NetID, il faut effectuer un ET (AND) bit à bit entre l'adresse IP et le NetMask. Pour obtenir l'identifiant machine, il faut effectuer un ET bit à bit entre l'adresse IP et le masque de réseau complémenté à 1.

      Exemple:
          Une adresse IP de classe C : 192.168.4.211 avec le masque de réseau 255.255.255.0

          11000000101010000000010011010011
        Et
          11111111111111111111111100000000
          __________________________________

          11000000101010000000010000000000
          192 . 168 . 4 . 0
        L'identifiant réseau est : 192.168.4, on peut également écrire NetID : 192.168.4.0
        L'identifiant machine est : 211
    ▪ Netmask par défaut:

          Classe d'adresse | Adresse IP | Masque par défaut
A | 1.X.Y.Z à 126.X.Y.Z | 255.0.0.0
B | 128.X.Y.Z à 191.X.Y.Z | 255.255.0.0
C | 192.X.Y.Z à 223.X.Y.Z | 255.255.255.0

    ▪ Autre notation:

      192.168.67.0 est le NetID avec le masque 255.255.255.0 (24 bits).
      On peut noter 192.168.67.0/24
    ▪ Adresse de diffusion (broadcast):

      Cette adresse permet à une machine d'envoyer un datagramme à toutes les machines d'un réseau. Cette adresse est obtenue en mettant tous les bits de HostID à 1.
      Exemple:
          200.140.29.255 est une adresse de diffusion sur tout le réseau de 200.140.29.0
          150.70.255.255 est une adresse de diffusion sur tout le réseau de 150.70.0.0

Voir aussi :

Adresses IP

Classes d'adresses

Les réseaux interdits

Distribution des adresses et connectivité


Les réseaux interdits

    Il est également interdit d'utiliser les adresses IP de 127.0.0.0 à 127.255.255.255. Ces adresses sont réservées pour le Loopback. Le message envoyé à cet adresse ne sera pas envoyé au réseau, il sera retourné à l'application par le logiciel de pilote de la carte. L'adresse IP 127.0.0.1 est utilisée pour la machine locale et pour tester si la carte de réseau est bien installée ainsi quelle fonctionne bien.

    Un certain nombre de ces adresses IP sont réservées pour des réseaux locaux connectés à l'Internet. Elles ne doivent pas être utilisées sur l'Internet car ces adresses sont "non routées", les paquets d'un ordinateur possédant une adresse privée ne seront pas transmis aux autres ordinateurs.
          Adresses Interdites
De | 10.0.0.0 | à | 10.255.255.255
De | 172.16.0.0 | à | 172.16.255.255
De | 192.168.0.0 | à | 192.168.255.255
    Il est également interdit d'attribuer à une machine d'un réseau IP, l'adresse du réseau (ex : X.Y.Z.0) et l'adresse de diffusion (broadcast) (ex : X.Y.Z.255).

Voir aussi :

Adresses IP

Classes d'adresses

Masque sous réseau

Distribution des adresses et connectivité


Distribution des adresses et connectivité

    . Distribution des adresses IP :
  • Sur l'Internet, l'organisme IANA (Internet Assigned Numbers/Naming Authority) est chargé de la distribution des adresses IP. Cet organisme distribue les adresses IP aux fournisseurs d'accès à Internet.
  • Lorsque vous ne reliez pas votre réseau interne directement à l'Internet, vous pourrez employer n'importe quelle adresse valide de la classe A, B, ou C. Cependant, n'importe quel dispositif qui est relié directement à l'Internet, doit être assigné une identifiant réseau par la communauté d'Internet. L'organisation responsable d'administrer l'attribution des parties d'identifiant réseau pour des dispositifs de réseau directement reliés à l'Internet est "Internet Network Information Center (InterNIC)".
  • Pour la distribution des adresses IP sur le réseau IP :
    • Statique : L'administrateur doit assigner manuellement une adresse IP unique pour chaque poste de travail sur le réseau
    • Dynamique : L'adresse est délivrée par le serveur DHCP (Décrit dans le chapitre suivant)
    . Connectivité :

  • L'adresse IP n'est pas toujours nécessaire pour la connexion entre deux ordinateurs.
  • Le réseau multipoint utilise des adresses IP pour la connexion, le partage de données, ressource, etc.
  • En général, un ordinateur dispose d'une seule interface, mais il peut avoir aussi deux ou plusieurs interfaces permettent l'interconnexion de plusieurs réseaux.
  • Un ordinateur uniquement connecté à l'Internet par un modem RTC (Réseau téléphonique commuté) aura une seule adresse IP, cette adresse est donnée par l'ISP (Internet Service Provider) ou FAI (Fournisseur d'Accès à l'Internet)
  • Un ordinateur connecté à un réseau local et à l'Internet par un modem aura deux adresses IP.
  • En général, un ordinateur dispose d'une seule interface, mais il peut avoir aussi deux ou plusieurs interfaces permettent l'interconnexion de plusieurs réseaux.

Voir aussi :

Adresses IP

Classes d'adresses

Masque sous réseau

Les réseaux interdits


Introduction aux communications séries

Introduction aux communication série

Le protocole série libre utilise les fonction COMOPEN et COMCLOSE comme pour le modbus. Ce protocole utilise :

  • Un buffer de 1024 octets en émission + 16 octets de FIFO

  • Un buffer de 1024 octets en réception

Selon la configuration du port série, les mots émis ont :

  • 1 Bit de start

  • 6, 7 ou 8 bits de données

  • 1 ou 2 bits de stop

Un mot représente donc de 8 à 11 bits.

En réception la FIFO fonctionne comme une FIFO à part entière, on assure un début allant jusqu’à 16 mots reçus par interruption (150µs), ce qui permet de tenir sans aucun problème le débit maximal possible par les ports série : 115200 bauds.

En émission, la FIFO fonctionne comme un buffer de stockage supplémentaire de 16 mots. On ne la remplit que lorsqu’elle est vide. On assure donc un débit constant de 66666 bauds maximal (en 8N1). Au-delà de cette valeur, on aura des espacements possibles entre les groupes de 16 caractères

Si un des buffers d’émission (lors de l’appel à COMWRITE) ou de réception (lors de la réception de caractères), est plein les bits correspondant dans MODBUSERROR sont positionnés

Pour les fonctions d’accès série, un handle est invalide déclenche une erreur système.

En ouvrant une connexion TCP par COMOPENTCP, on peut utiliser un protocole TCP libre, avec les fonctions COMREAD, COMWRITE, COMCARIN et COMOUTEMPTY. Le protocole TCP libre permet d’effectuer une connexion en sortie sur n’importe quel port/adresse, y compris les services de l'Internet. Il n’est pas possible de mettre un port en écoute autrement qu’avec le modbus TCP, donc il pas possible d’utiliser le TCP libre sur un port en écoute.


COMCARIN

COMCARIN  Retourne le nombre d'octets dans le buffer de réception

Syntaxe

<NbCar> := COMCARIN (<Com>)

Types acceptés

<Com> : tHandle
<NbCar>:UDINT

Description

Cette fonction retourne le nombre de caractères dans le buffer de réception


COMCLEARIN

COMCLEARIN  Efface le buffer de réception

Syntaxe

COMCLEARIN (<Com>)

Types acceptés

<Com> : tHandle

Description

Cette fonction vide le buffer de réception.


COMCLEAROUT

COMCLEAROUT  Efface le buffer d'émission

Syntaxe

COMCLEAROUT (<Com>)

Types acceptés

<Com> : tHandle

Description

Cette fonction vide le buffer d'émission.


COMCLOSE

COMCLOSE  Ferme le port de communication série

Syntaxe

COMCLOSE (<Com>)

Type accepté

<Com> : tHandle

Description

Cette instruction permet de fermer le port de communication série.
<Com> variable du type port communication.


COMGETCTS

COMGETCTS  Lit CTS

Syntaxe

COMGETCTS (<Com>)

Types acceptés

<Com> : tHandle

Description

Cette fonction retourne l'état du signal CTS

Remarque

La fonction s'utilise uniquement avec le port SERIAL1 sinon elle provoque une erreur système.


COMMODBUSCRC

COMMODBUSCRC  Calcule le CRC

Syntaxe

<CRC> := COMMODBUSCRC (<Adresse>, < Taille >)

Types acceptés

< Adresse > : UINT
< Taille > : UINT
< CRC > : UINT

Description

Cette fonction calcule le CRC (16 bits pour Modbus) d'un bloc de données
<Adresse> : adresse dans le segment d'échange
<Taille> : nombre d'octets sur lequel le calcul s'applique


COMOPEN

COMOPEN - Ouvre un port de communication

Syntaxe

<ComSerie> := COMOPEN (<NumPortSerie>)

Type accepté

<NumPortSerie> : USINT

<ComSerie> : tHandle

Description

Cette instruction permet d'ouvrir le port de communication série.
<NumPortSerie> mettre 1 pour la COM1 ou 2 pour la COM2
<ComSerie> variable du type port communication.


COMOPENTCP

COMOPENTCP - Ouvre un port de communication TCP

Syntaxe

<ComTCP> := COMOPENTCP (<Adresse> <Port>)

Type accepté

<Adresse> : UDINT

<Port> : UINT

<ComTCP> : tHandle

Description

Cette instruction permet d'ouvrir le port de communication Modbus sur bus ETHERNET TCP/IP.
<Adresse> adresse IP du périphérique esclave.
<Port> port IP à contacter, mettre 0 par le port par défaut (port 502)

<ComTCP> variable du type port communication.


COMOUTEMPTY

COMOUTEMPTY  Retourne TRUE si le buffer d'émission est vide

Syntaxe

<Empty> := COMMOUTEMPTY (<Com>)

Types acceptés

<Com> : tHandle

Description

Cette fonction retourne TRUE si aucun caractère en attente d'émission sinon elle retourne FALSE.


COMSETRTS

COMSETRTS  Positionne RTS

Syntaxe

COMSETRTS (<Com>,<Actif>)

Types acceptés

<Com> : tHandle
<Actif> : BOOL

Description

Cette fonction force le signal RTS à 0 ou 1.


COMREAD

COMREAD  Lit des données sur une liaison

Syntaxe

<TailleRecue> := COMREAD (<Com>, <Adresse>, < Taille >)

Types acceptés

<Com> : tHandle
< Adresse > : UINT
< Taille > : UINT
< TailleRecue > : UDINT

Description

Cette fonction lit des données sur une liaison, et est non bloquante.
La fonction dépile le buffer de réception et retourne tout ce qui est disponible sans forcément que le nombre d'octets demandé soit forcément atteint.
<Adresse> : adresse dans le segment d'échange des données à recevoir (correspond à la colonne Adresse dans l'éditeur de variables d'échanges).
<Taille> : nombre d'octets max à lire
<TailleRecue> : nombre d'octets réellement reçus.

Remarque

Si le protocole configuré pour le port série est modbus esclave, alors l'appel à cette fonction déclenche une erreur système
On peut lire au maximum la taille du buffer du port série (1024 octets), au-delà déclenche une erreur système


COMWRITE

COMWRITE  Envoie des données sur une liaison, non bloquant

Syntaxe

<TailleEnvoie> := COMWRITE (<Com>, <Adresse>, < Taille >)

Types acceptés

<Com> : tHandle

< Adresse > : UINT
< Taille > : UINT
< TailleEnvoie > : UDINT

Description

Cette fonction envoie des données sur une liaison, et est non bloquante.
<Adresse> : adresse dans le segment d'échange des données à recevoir (correspond à la colonne Adresse dans l'éditeur de variables d'échanges).
<Taille> : nombre d'octets à envoyer
<TailleEnvoie> : nombre d'octets réellement envoyés.

Remarque

Si le protocole configuré pour le port série est modbus esclave, alors l'appel à cette fonction déclenche une erreur système
Si tous les octets ne peuvent pas être pris en compte, MODBUSERROR positionne à 1 le bit «overflow buffer sortie»
Lors de la copie des données dans le buffer d'envoi du port série concerné, cette fonction prend le sémaphore système «zone d'échange»
Dans le cas du 485, effectue l'envoi en prenant la ligne en permanence tant que le buffer d'émission n'est pas vide. Voir restrictions plus haut concernant la vitesse maximale que l'on peut atteindre


ROUTEIMDADD

Syntaxe

ROUTEIMDADD (<Add>)

Type accepté

<Add> : UDINT

Description

Cette fonction change le N° de noeud de base dans le routage Modbus/CAN=>IMD sur Ethercat


Introduction

Introduction Modbus RTU/ASCII

Le protocole ModBus (constructeur Modicon est un protocole de dialogue créant une structure hiérarchisée avec un maître et un ou plusieurs esclaves.

Modèle OSI :

Principe Maître / Esclave :

Ce type de protocole permet d'interroger depuis le maître, un ou plusieurs esclaves intelligents

Deux types de dialogue sont possibles entre le maître et l'esclave :

Le maître parle à un esclave et attend sa réponse.

Le maître parle à l'ensemble des esclaves sans attente de réponse.

Le maître gère les échanges et lui seul en a l'initiative.

Ce maître réitère la question lors d'un échange erroné et décrète l'esclave absent après une non-réponse dans un temps donné (time out). Il ne peut y avoir sur la ligne qu'un seul équipement en train d'émettre.

Aucun esclave ne peut lui-même envoyer un message sans y avoir été invité. Toutes communications d'esclave à esclave ne peuvent exister que si le logiciel du maître a été conçu pour recevoir des données et les renvoyer d'un esclave à l'autre .

Le maître peut adresser 127 équipements repérés de l'équipement n°1 à l'équipement n°126, l'équipement 0 étant prédéfini.

Si le maître utilise le numéro d'équipement 0, une diffusion vers tous les esclaves sera effectués.
L'utilisation de l'équipement 0 n'est autorisé qu'en écriture.

Tableau des requêtes pour Maître MODBUS :

Liste des fonctions MODBUS supportées

03 : Lecture de n mots **

04 : Lecture de n mots d'entrées

06 : Ecriture d'un mot

16 : Ecriture de n mots**

** : Ce code fonction est utilisé également pour l'accès au format "mot double" et au format "mot flottant".

Tableau des requêtes pour Esclave MODBUS :

Liste des fonctions MODBUS supportées

03 : Lecture de n mots **

04 : Lecture de n mots d'entrées

06 : Ecriture d'un mot

16 : Ecriture de n mots**

ModBus RTU / ASCII :

Définition d'une trame au format RTU :

N° d'esclave | : 0 à 255
Code fonction | : Indique le type d'échange
Zone de données | : Champ d'informations contenant les paramètres liés à la fonction : adresse mot, valeur de mot, nombre de mots...etc.
CRC16 | : Mot utilisé pour détecter les erreurs de transmission (Cyclic Redundary Check).

LECTURE DE N MOTS : Code fonction 03 ou 04 (03 ou 04 en Héxa)

Commande :

Adresse du périphérique | Code fonction 03 ou 04 | Adresse du premier mot |  | Nombre de mots à lire |  | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

Réponse :

Adresse du périphérique | Code fonction 03 ou 04 | Nombre d'octets lus | Valeur du premier mot |  | ... | Valeur du dernier mot |  | CRC
1 octet | 1 octet | 1 octet | MSB | LSB | ... | MSB | LSB | LSB | MSB

ECRITURE D'UN MOT : Code fonction 06 (06 en Héxa)

Demande :

Adresse du périphérique | Code fonction 06 | Adresse du mot |  | Valeur du mot |  | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

Réponse :

Adresse du périphérique | Code fonction 06 | Adresse du mot |  | Valeur du mot |  | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

ECRITURE DE N MOTS : Code fonction 16 (10 en Héxa)

Demande :

Adresse du périphérique | Code fonction 10 | Adresse du premier mot |  | Nombre de mots à écrire |  | Nombre d'octets de données(n) | Données | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | 1 octet | n octets | LSB | MSB

Réponse :

Adresse du périphérique | Code fonction 10 | Adresse du premier mot |  | Nombre de mots écrits |  | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

REPONSE ERRONEE

Adresse du périphérique | Code fonction | Code de réponse erronée | CRC
1 octet | 1 octet | 1 octet | LSB | MSB

Le codage des données s'effectue toujours dans l'ordre poids fort-poids faible sauf pour le CRC où l'ordre est inversé !


Introduction Modbus TCP

Le protocole MODBUS sur TCP/IP utilise la messagerie MODBUS pour la couche application et TCP/IP pour la communication Ethernet.

Modèle OSI :

On peut représenter l'ensemble des couches réalisées pour MODBUS sur TCP selon le modèle suivant :

Le Numéro de port utilisé pour les échanges est le 502.

L'ensemble des protocoles TCP/IP est réalisé selon les spécifications Modicon :

Couche 4 : | TCP -> RFC 793 UDP -> RFC 768
Couche 3 : | ICMP :-> RFC 792 IP -> RFC 791 ARP -> RFC 826
Couche 2b : | Ethernet V2
Couche 2a : | IEEE 802.3 CSMA/CD

Les couches 5 et 6 ne sont pas utilisées.

La solution TCP/IP fournit la fonctionnalité suivante :

Définition d'une trame de données ModBus standard :

ADU | : Application Data Unit
PDU | : Protocol Data Unit

Définition d'une trame de données ModBus sur TCP/IP :

Il existe donc quelques différences entre le protocole Modbus RTU et le TCP/IP :

Le champ d'adresse de l'esclave utilisé par le protocole Modbus standard est remplacé par un bit identifiant dans l'en-tête HBAP. Ce bit est appelé "Unit Identifier".

Toutes les requêtes et réponses de modbus sont conçues de telle manière que le destinataire puisse vérifier qu'un message est fini.

L'information de longueur est diffusée dans l'en-tête de MBAP pour permettre au destinataire d'identifier les frontières des messages même si le message a été coupé en plusieurs paquets pour la transmission.

L'en tête MBAP est composé de 7 octets.

Description de l'en-tête MBAP :

Champs | longueur | description | client | serveur
Identifiant de la transaction | 2 Octets | Identification des requêtes ou réponses ModBus | Initialisé par le client | reproduit par le serveur dés réception de la requête
Identifiant du protocole | 2 Octets | 0 = Protocole ModBus | Initialisé par le client | reproduit par le serveur dés réception de la requête
Longueur | 2 Octets | Nombre d'octets du PDU | Initialisé par le client (requête) | Initialisé par le serveur (réponse)
Identifiant | 1 Octet | N° d'esclave (en général 1) | Initialisé par le client | reproduit par le serveur dés réception de la requête


Modbus Esclave

Introduction

Le protocole MODBUS est un protocole maître/esclave utilisé principalement dans le milieu industriel. Il permet à des équipements de supervision (Human Machine Interface, Supervisory Control And Data Acquisition), de communiquer avec un ou plusieurs équipements industriels (Programmable Logic Controllers, automates, sondes, etc..).

Ce protocole fonctionne sous forme de requête. Ces messages transitent sur un support physique qui peut être une liaison asynchrone RS232, RS422 ou RS485.

Pour distinguer un équipement esclave d'un autre, on attribue un numéro d'identification (Unit ID) à chaque équipement. Grâce à ce numéro et dans le cas d'une liaison à plusieurs (cas du RS485) seul l'équipement esclave concerné répondra à une requête d'un équipement maître.

Le MPC gère le protocole MODBUS RTU Esclave.

La vitesse de transmission peut aller jusqu'à 128000 bauds

Les fonctions de lecture de mots (fonction n°3 ou 4) et écriture des mots (fonction n°6 ou 16) sont reconnues par le MPC.

Dictionnaire

Le dictionnaire du MPC à directement accessible dans le soft Motion Studio à partir du menu Aide \ Table Modbus classé par ...


Modbus Maître

Introduction

Le protocole MODBUS est un protocole maître/esclave utilisé principalement dans le milieu industriel. Il permet à des équipements de supervision (Human Machine Interface, Supervisory Control And Data Acquisition), de communiquer avec un ou plusieurs équipements industriels (Programmable Logic Controllers, automates, sondes, etc..).

Ce protocole fonctionne sous forme de requête. Ces messages transitent sur un support physique qui peut être une liaison asynchrone RS232, RS422 ou RS485.

Pour distinguer un équipement esclave d'un autre, on attribue un numéro d'identification (Unit ID) à chaque équipement. Grâce à ce numéro et dans le cas d'une liaison à plusieurs (cas du RS485) seul l'équipement esclave concerné répondra à une requête d'un équipement maître.

Le MPC gère le protocole MODBUS RTU Maître.

La vitesse de transmission peut aller jusqu'à 128000 bauds

Les fonctions de lecture de mots (fonction n°3 ou 4) et écriture des mots (fonction n°6 ou 16) sont utilisées par le MPC.

Instructions

Le protocole modbus maître utilise les instruction COMOPEN et COMCLOSE pour gérer le port.

Le descripteur de port retourné par COMPEN est alors utilisé dans les fonctions de lecture MODBUSREAD et d'écriture MODBUSWRITE.

En utilisant COMOPENTCP, on peut utiliser les fonctions du modbus TCP. Il faut alors utiliser la fonction STRINGIP_TO_UDINT pour fournir l'adresse IP de destination sous la forme condensée d'un UDINT à la fonction COMOPENTCP.

Un mode étendu est également accessible grâce à la fonction MODBUSSETEXTENDED. En mode étendu modbus TCP, dans le protocole modbus, la taille du buffer indiquée sur 8 bits ne contient que les 8 bits de poids faible de la taille réelle du buffer. De même cette taille n’est vérifiée que par rapport aux 8 bits de poids faible de la taille que le buffer devrait avoir. En mode étendu, le buffer interne contient 8192 octets. Ceci permet des échanges de plus de 256 octets.


MODBUSREAD

MODBUSREAD  Lecture de n mots en Modbus

Syntaxe

<Retour> := MODBUSREAD (<Com>, <Destination>, <Adresse>, <Segment>, <Taille>)

Type accepté

<Com> : tHandle
<Destination> : USINT
<Adresse> : UINT
<Segment> : UINT
<Taille> : UINT
<Etat> : BYTE

Description

Cette instruction permet de lire n mots en Modbus (envoie d'une commande Modbus de type 3 et attente de la réponse).
<Com> variable du type port communication.
<Destination> : N° noeud Modbus de destination

  • En Modbus série, il désigne le numéro de noeud Modbus sur le réseau.

  • En Modbus TCP, il désigne le numéro de noeud Modbus de l'élément adressé par la passerelle.

<Adresse> : adresse dans la table Modbus de destination (correspond à la colonne Adresse dans l'éditeur de variables d'échanges).
<Segment> : adresse dans le segment d'échange
<Taille> : nombre de mots de 16 bits à lire
<Retour> retour de l'instruction :

  • 0 si le port n'est pas ouvert ou invalide

  • 1 si pas de défaut

Remarques

En cas d'erreur, cette instruction déclenche un événement système.
La taille est limitée à :

  • 125 mots en mode normal (série ou modbus TCP)

  • 4096 mots en mode étendu (modbus TCP)


MODBUSWRITE

MODBUSWRITE  Ecriture de n mots en Modbus

Syntaxe

<Retour> := MODBUSWRITE (<Com>, <Destination>, <Adresse>, <Segment>, <Taille>)

Type accepté

<Com> : tHandle
<Destination> : USINT
<Adresse> : UINT
<Segment> : UINT
<Taille> : UINT
<Etat> : BYTE

Description

Cette instruction permet d'écrite n mots en Modbus (envoie d'une commande Modbus de type 16 -write multiuple registers et attente de la réponse).
<Com> variable du type port communication.
<Destination> : N° noeud Modbus de destination

  • En Modbus série, il désigne le numéro de noeud Modbus sur le réseau.

  • En Modbus TCP, il désigne le numéro de noeud Modbus de l'élément adressé par la passerelle.

<Adresse> : adresse dans la table Modbus de destination (correspond à la colonne Adresse dans l'éditeur de variables d'échanges).
<Segment> : adresse dans le segment d'échange
<Taille> : nombre de mots de 16 bits à lire
<Retour> retour de l'instruction :

  • 0 si le port n'est pas ouvert ou invalide

  • 1 si pas de défaut

Remarques

En cas d'erreur, cette instruction déclenche un événement système.
La taille est limitée à :

  • 123 mots en mode normal (série ou modbus TCP)

  • 4096 mots en mode étendu (modbus TCP)


MODBUSCOUNTER

MODBUSCOUNTER - Retourne le nombre de message du Modbus

Syntaxe

<Q> = MODBUSCOUNTER (<NumCompteur>)

Type accepté

<NumCompteur> : USINT

<Q> : UDINT

Description

Cette fonction retourne le nombre de message d'un des compteurs Modbus

<NumCompteur>

10 : nombre total d'accès port COM1

11 : nombre d'accès en lecture port COM1

12 : nombre d'accès en écriture port COM1

20 : nombre total d'accès port COM1

21 : nombre d'accès en lecture port COM1

22 : nombre d'accès en écriture port COM1


MODBUSERROR

MODBUSERROR  Retourne l'état des défauts du port

Syntaxe

<EtatCOM> := MODBUSERROR (<Com>)

Type accepté

<Com> : tHandle
<EtatCOM> : DWORD

Description

Cette instruction retourne l'état des défauts d'un port de communication.
<Com> variable du type port communication.
< EtatCOM > :

  • Bit 0 à 1 si erreur UART

  • Bit 1 à 1 si timeout

  • Bit 2 à 1 si erreur de protocole (modbus TCP)

  • Bit 3 à 1 si erreur d'identifiant (modbus TCP)

Remarque

Si <Com> n'est pas ouvert ou invalide alors <EtatCOM> = 0, mais cela ne déclenche pas d'erreur système.


MODBUSERRORCOUNTER

MODBUSERRORCOUNTER - Retourne le nombre d'erreur du Modbus

Syntaxe

<Q> = MODBUSERRORCOUNTER (<NumCOM>)

Type accepté

<NumCompteur> : USINT

<Q> : UDINT

Description

Cette fonction retourne le nombre de message d'un des compteurs Modbus

<NumCOMt>

10 : nombre d'erreurs sur le port COM1

20 : nombre d'erreurs sur le port COM2


MODBUSERRORRESET

MODBUSERRORRESET - Reset les bits de défauts

Syntaxe

MODBUSERRORRESET (<Com>)

Type accepté

<Com> : tHandle

Description

Cette instruction remet à zéro les bits de défauts de MODBUSERROR.
<Com> variable du type port communication.

Remarque

Si <Com> n'est pas ouvert ou invalide aucune erreur système n'est déclenché.


MODBUSSETEXTENDED

Syntaxe

MODBUSEXTENDED (<Acces>, <Etat>)

Type accepté

<Acces> : USINT

<Etat> : BOOL

Description

Cette fonction permet de passer le Modbus TCP en mode étendue.
<Acces> : 0 pour le Modbus TCP
<Etat> : 0 pour désactiver le mode étendue et 1 pour l'activer

En mode étendu on ne tient pas compte de la taille du buffer indiqué sur un octet. Ceci permet de s'affranchir de la limite de 256 octets par trame et permet d'utiliser pleinement le buffer de 8192 octets.


STRINGIP_TO_UDINT

Syntaxe

<Adr_UDINT> := STRINGIP_TO_UDINT (<Adr_STRING>)

Type accepté

<Adr_STRING> : STRING
<Adr_UDINT> : UDINT

Description

Cette instruction transforme une chaîne avec une IP en UDINT.


Introduction CANopen

  • CAN et CANOpen

Le bus CAN (Controller Area Network) est apparu au milieu des années 80 pour répondre aux besoins de la transmission de données dans le secteur automobile. Ce type de bus permet d'obtenir des taux de transfert élevés.

Les spécifications du CAN définissent 3 couches parmi le modèle OSI : la couche physique, la couche liaison des données et la couche application. La couche physique définit le mode de transmission des données en fonction du support de transmission. La couche liaisons des données représente le noyau du protocole CAN puisque cette couche est responsable de la trame à envoyer, de l'arbitrage, de la détection des erreurs, etc ... La dernière couche est la couche application appelée aussi CAL (CAN Application Layer). Celle-ci est donc une description générale du langage pour les réseaux CAN qui offre de nombreux services de communication.

Le bus CAN est un bus multi-maître. Contrairement aux autre bus de terrain, ce sont les messages qui sont identifiés et non les modules connectés. Les éléments du réseau sont autorisés à envoyer leurs messages à chaque fois que le bus est libre. Les conflits sur le bus sont résolus par un niveau de priorité donné aux messages. Le bus CAN émet des messages qui sont divisés en 2032 niveaux de priorités. Tous les éléments du réseau ont les mêmes droits et donc cette communication n'est seulement possible que sans bus maître.

Chaque élément décide lui-même lorsqu'il veut envoyer des données. Il est cependant possible de faire envoyer des données par un autre élément. Cette demande est effectuée par la trame distante.

CANOpen est une couche applicative CAL (couche 7 du modèle OSI). CANOpen est une reprise de la couche applicative CAL développée par Philips Medical Systems.

Il reprend les services et protocoles de gestion de bus et de messages de la couche CAL tout en définissant le contenu des messages et en intégrant la notion de système distribué. Un élément maître du réseau coordonne les éléments esclaves.

Le CANopen est, par conséquent, une couche application standardisée par les spécifications du CIA (CAN In Automation) : DS-201DS-207.

Le gestionnaire du réseau permet une initialisation simplifiée du réseau. Le réseau peut être étendu avec tous les composants que l'utilisateur désire.

Les spécifications du CANopen (DS-201DS-207) définissent les caractéristiques techniques et fonctionnelles que nécessitent un appareil individuel pour être associé sur le réseau. Le bus CANopen fait une distinction entre les appareils serveurs et les appareils clients.

Le CAN Protocol Layer Interaction décrit la communication sur les différentes couches. Sur la couche application les nœuds échangent des objets de communication et d’application. Ces objets sont accessibles via un index sur 16 bits et un sous-index sur 8 bits. Ces objets de communication (COB) sont mappés.

  • Le dictionnaire d'objet

Un dictionnaire d'objet définit, pour chacune des entrées/sorties d'un périphérique CANOpen (appelé nœud), l'information sur le format de la donnée ainsi que sur le moyen d'y accéder. Chaque entrée du dictionnaire possède un index unique ainsi qu'une liste de sous-index. On accède à un objet grâce au couple [index, sub-index].

Une des principales nouveautés de CANOpen est la notion de dictionnaire d'objets (Object Dictionary ou OD) déjà présente dans d'autres bus de terrain comme Profibus. Pour chaque nœud CANOpen présent sur le bus il existe un OD généralement sous forme de fichier texte au format EDS (Electronic Data Sheet) permettant de connaître l'ensemble des entrées/sorties d'un nœud. Il est possible de créer à partir d'un fichier au format EDS un autre fichier représentant une configuration donnée d'un nœud pour un bus. Ce fichier, très similaire à l' EDS, est alors appelé DCF (Device Configuration File). En faisant une analogie avec la programmation orientée objet (POO) on peut dire que l' EDS est la classe tandis que le DCF représente une instance de cette classe.

Les OD sont divisés en profiles. Les plus utilisés sont les suivants :

    • Communication Profile Area

    • Manufacturer Specific Profile Area

    • Standardised Device Profile Area

Toutes les entrées de ces profiles sont définies par la CIA (Can In Automation) excepté pour le Manufacturer Specific Profile Area qui est libre d'utilisation.


La communication CANopen

Les objets de communication qui transitent sur le bus sont décrits par des services et des protocoles.

  • Les transferts de données en temps réel sont réalisés à l’aide de PDO (Process Data Object).
  • La lecture ou l’écriture d’entrées dans l’Object Dictionnary d’un élément sont réalisés à l’aide de SDO (Service Data Object).
  • Les applications telles que la Synchronisation, le Time Stamp, l’Emergency ont des protocoles spéciaux.
  • Le protocole du Network Management (NMT) donne des services pour l’Initialisation, le Contrôle d’Erreurs, et l’Etat d’un Nœud.

COB-ID

Les caractéristiques diffusées par le CAN sont reçues et évalués par tous les appareils connectés. Chaque service d'un appareil CAN est paramétré par un COBID (Communication Object Identifier). Le COBID est un identifiant qui caractérise le message. C'est ce paramètre qui permet d'indiquer à un appareil si le message doit être traiter. Pour chaque service (PDO ou SDO), il est nécessaire de spécifier un COBID à l'émission (envoi d'un message) et un COBID à la réception (récupération de message). Pour le premier SDO serveur, le COBID est fixe est ne peut pas être modifié à distance. De plus, il est calculé à partir du NODE-ID. Le NODE-ID est le paramètre qui caractérise l'appareil et qui permet d'accéder de façon unique à l'appareil.

Client/Server, Producer/Consumer, Master/Slave

Le modèle Client/Server

Dans ce modèle, le client transmet un message auquel le serveur répond. Le client obtient ainsi une confirmation.

Ce modèle est utilisé pour transmettre des données dont la longueur est supérieure à 8 octets. En fait la donnée originale est segmentée et transmise segment par segment. L’élément recevant les segments peut renvoyer une confirmation après avoir reçu un ou plusieurs segments. Cette communication est donc du type peer-to-peer.

Le modèle Master/Slave

Dans ce modèle, seul le maître peut commencer une communication et l’esclave est toujours en train d’attendre une requête de communication du maître.

Dans les réseaux CAN, ce modèle peut être implanté en allouant des identifiants appropriés aux différents éléments.

Le modèle Producer/Consumer

Ce modèle décrit parfaitement les possibilités de broadcast du réseau CAN. En effet, chaque élément du réseau peut écouter les messages qui transitent sur le bus. C’est après avoir reçu le message que l’élément décide si il l’accepte ou non.

Le modèle Producer/Consumer permet :

  • De transmettre des messages (modèle Push)

  • De demander des messages (modèle Pull)

PDO (Process Data Object) et PDO Mapping

Les messages PDO sont utilisés pour manipuler des objets de l’Object Dictionnary sans se référencer explicitement à leurs identifiants, les types des données et la liste des objets à transmettre étant définis dans une structure appelée PDO mapping.

Dans le schéma ci-dessus, le PDO mapping PDO_1 va provoquer la réalisation successives des applications décrites par les objets yyyyh, puis zzzzh et enfin xxxxh.

Une communication par PDO ressemble au modèle Producer/Consumer. La donnée est transmise sans demande de confirmation et est émise d’un nœud (Producer) vers un, plusieurs ou tous les nœuds (Consumers).

Le nœud Producer envoie un Transmit-PDO qui correspond, pour le nœud consommateur, à un Receive-PDO.

Les messages PDO correspondent aux entrées de l’Object Dictionnary et fourniront à l’application concernée les données nécessaires à son fonctionnement.

Il existe principalement deux types de message PDO:

Ecrire un PDO

Ce service est contenue dans une seule Data Frame.

Lire un PDO

Ce service est contenu dans une Remote Frame. La réponse à cette dernière est la Data Frame correspondante.

Dans les deux cas, le champ de données de la trame contient la donnée du process sur 8 octets.

Deux paramètres permettent de décrire un PDO :

  • Le PDO communication parameter qui décrit les possibilités de communication d’un PDO.

Transmit PDO Communication Parameter

DATA TYPE | PDO CommPar
OBJECT CODE | RECORD
SUB INDEX 0 | Largest sub-index supported
SUB INDEX 1 | COBID used by PDO
SUB INDEX 2 | Transmission Type
SUB INDEX 3 | Inhibit time
SUB INDEX 4 | Reserved
SUB INDEX 5 | Event timer

Receive PDO Communication Parameter

DATA TYPE | PDO CommPar
OBJECT CODE | RECORD
SUB INDEX 0 | Largest sub-index supported
SUB INDEX 1 | COBID used by PDO
SUB INDEX 2 | Transmission Type

  • Le PDO mapping parameter qui contient les informations relatives aux contenus des PDO.

Transmit PDO Mapping

DATA TYPE | PDO Mapping
OBJECT CODE | RECORD
SUB INDEX 0 | Number of mapped applications objects in PDO
SUB INDEX 1-40h | PDO Mapping for the nth application object to be mapped

Receive PDO Mapping

DATA TYPE | PDO Mapping
OBJECT CODE | RECORD
SUB INDEX 0 | Number of mapped applications objects in PDO
SUB INDEX 1-40h | PDO Mapping for the nth application object to be mapped

Nota 1 : avant d’effectuer une transmission de type PDO, le numéro des PDO ainsi que la cartographie des objets (mapping) doivent être transmis aux éléments du réseau intéressés pendant la phase de configuration (Device Configuration) c’est à dire pendant l’initialisation. Ceci s’effectue d’ailleurs à travers un message de type SDO.

Nota 2 : la relation Producer-Consumer implique l’existence d’un Producer et de zéro ou plus Consumers. Du Producer vers le Consumer c’est le Push model qui est un service dit unconfirmed. Du Consumer vers les Producer c’est le Pull model qui est un service dit confirmed.

Il existe des PDO synchrones et asynchrones (les PDO synchrones sont exécutés à chaque transmission du SYNC &endash;voir plus loin- tandis que les asynchrones peuvent être exécutés à n’importe quel moment du moment que la priorité est respectée).

SDO (Service Data Object)

Le système de message SDO suit l’architecture Client-Server. Les SDO permettent d’avoir accès aux entrées de l’Object Dictionnary. Et comme ces entrées peuvent être de grande taille les SDO sont amenés à transférer plusieurs données appelées data sets, elles mêmes contenant de nombreux blocs de données ; le Client contrôle quelle data set doit être transmise via un multiplexer (index et sub-index de l’Object Dictionnary).

C’est le Client qui prendra l’initiative d’un tel transfert et le Server aura accès aux données de l’Object Dictionnary.

Le Client comme le Server pourra mettre fin à la transmission.

Il existe deux types de message SDO : Le SSDO (Server-SDO) qui est le SDO par défaut, et le CSDO (Client-SDO).

Dans le cas d’un message SDO on se positionne par rapport au Server. Ainsi un SDO Download est la transmission de données du Client vers le Server et un SDO Upload consiste à transmettre des données d’un Server vers le Client.

Nous avons écrit précédemment que le SDO permet de transférer des données de n’importe quelle taille. Dans ce cas, on dit que le transfert est segmenté.

Le détail des objets est:

Server SDO Parameter

DATA TYPE | SDO Parameter
OBJECT CODE | RECORD
SUB INDEX 0 | Number of entries
SUB INDEX 1 | COBID RX
SUB INDEX 2 | COBID TX
SUB INDEX 3 | Node ID of the SDO client

Client SDO Parameter

DATA TYPE | SDO Parameter
OBJECT CODE | RECORD
SUB INDEX 0 | Number of entries
SUB INDEX 1 | COBID RX
SUB INDEX 2 | COBID TX
SUB INDEX 3 | Node ID of the SDO server

La synchronisation

Le SYNC est broadcasté périodiquement sur le réseau par le SYNC Producer. C’est l’horloge de base du réseau. Le temps d’une période est défini par le paramètre standard Communication Cycle Period (1006h) qui peut être configuré par un outil de configuration et envoyé à l’application pendant le boot-up. La fréquence de cette horloge peut être temporairement accélérée lorsque certains messages doivent parcourir le réseau avant même que le signal SYNC ne soit transmis. Pour garantir l’accès de SYNC au réseau ce message est doté d’un haut niveau de priorité (1005h).

Le premier intérêt de la synchronisation est que lorsque chaque nœud reçoit le signal SYNC, il exécute automatiquement son PDO mapping et envoie donc des données au contrôleur ou exécute une action. Cela permet donc de paramétrer les nœuds pour qu’ils effectuent périodiquement telle ou telle action.

Le second intérêt de la synchronisation est qu’elle permet de synchroniser l’horloge du nœud avec celle du contrôleur : c’est le rôle du Time Stamp (décrit dans le paragraphe suivant) qui contient la valeur de l’horloge maître codée sur 32 bits.

Le time stamp

Dans la pratique, l’objet Time Stamp représente en ms le temps écoulé depuis le 1er janvier 1984.C’est une séquence de 48 bits (6 octets). Le producteur de Time Stamp reçoit une demande et envoie une Data Frame vers les Consommateurs.

L'implémentation de l'objet Time Stamp n'est pas obligatoire. Il n'est pas implémenté dans le MPC.

L'emergency

L’emergency permet à un nœud d’envoyer avec une priorité élevée un message contenant le code d’erreur correspondant au problème auquel il est confronté. La table des codes d’erreurs est donnée dans la norme DS-301 page 9-38.

Les 8 bits de data dans la trame sont répartis de la manière suivante :

  • Les deux premiers octets contiennent le code d’erreur cité ci dessus.

  • Le second contient le registre d’erreur qui rend compte d’une erreur interne. Il correspond à l’objet 1001h.

  • Les 5 derniers constituent le champ d’erreur spécifique au constructeur.

Le network management (NMT)

Le NMT est un nœud dit orienté et suit la structure maître esclave.

A travers les services du NMT il est possible d’initialiser un nœud, de le démarrer, de faire un reset, de le stopper, de l’activer, de le contrôler. Tous les nœuds sont considérés comme des esclaves du NMT et un tel esclave est uniquement identifié sur le réseau par son Node-Id, qui est une valeur comprise entre 1 et 127. Le principe du NMT demande à ce que un élément du réseau remplisse les fonctions de maître NMT.

Les services NMT sont le MCS (Module Control Services) et l’ECS (Error Control Service).

Module Control Service (MCS)

C’est grâce au MCS que le maître NMT contrôle les différents états des esclaves NMT. Le rôle de MCS peut être appliqué à un nœud particulier ou à tous les nœuds simultanément. On remarquera que le maître NMT contrôle son propre état via un service local et que le MCS peut être activé par l’application locale (sauf dans le cas du Start Remote Mode)

Error Control Service (ECS)

A travers ce service le NMT détecte les erreurs du réseau CAN.

Les ECS interviennent principalement lors de défaut dans la périodicité de transmission de message d’un élément du réseau. Il existe deux cas où l’ECS va jouer son rôle :

  • Le maître NMT établit une surveillance des nœuds du réseau (node guarding protocol) : si un esclave NMT n’a pas répondu dans un laps de temps imparti (node life time) ou encore si ce même esclave change sa politique de communication, le maître en informe sa propre application.

Principe de la surveillance de l’esclave par le maître: si le Life Time est supporté, l’esclave utilise le Life Time précisé dans son Object Dictionnary pour déterminer le Life Time du nœud sur lequel il est connecté, et dans le cas d’une erreur relative à ce temps il en informe sa propre application. Cette surveillance est généralement activée lors de la phase du boot-up.

  • Le mécanisme de heartbeat consiste pour un élément de transmettre de façon cyclique un message de présence généré par un Heartbeat Producer. Un ou plusieurs éléments connectés au réseau reçoivent ce message et si sa périodicité change par rapport à celle du Heartbeat Producer alors l’application locale en est informée.

nota : l’implémentation du Heartbeat OU du Node Guarding est obligatoire.

Détaillons maintenant plus précisément les mécanismes de Heartbeat et de node guarding. Seul le node guarding est implémenté dans le MPC.

Le node guarding

Le Node Guarding est la surveillance des nœuds du réseau. Le maître du NMT (Network Management) envoie une RTR (Remote Transmission Request) à intervalles réguliers (cette période est appelée le Guard Time) et le nœud concerné doit répondre dans un laps de temps imparti (c’est le Node Life Time égal au Guard Time multiplié par le Life Time Factor).

La valeur du Life Time est 0 par défaut (c’est a dire qu’il n’est pas utilisé).

Le bit de poids fort (7) est appelé Toggle bit. Sa valeur doit changer entre deux réponses consécutives. Lors de la première réponse il est à 0, puis 1, puis 0, ... Si sa valeur est constante sur deux réponses consécutives, le maître du NMT considérera qu’il n’a pas reçu de réponse.

Nota : Il est interdit d’utiliser en même temps le Node Guarding et le Heartbeat. Si le Heartbeat producer time n’est pas égal à 0, alors le mécanisme du Heartbeat est utilisé.

Le Heartbeat

Le Heartbeat est généré périodiquement (la période est le Heartbeat Producer Time) par un nœud sans qu’il ait reçu au préalable une RTR (Remote Transmission Request). Il permet au nœud d’indiquer aux autres son état.

La data est contenue dans un seul octet :

  • 0 : Boot-up

  • 4 : Stopped

  • 4 : Stopped

  • 127 : Pre-Operational

Si un nœud n’a pas reçu de message de Heartbeat pendant un certain temps (appelé Heartbeat Consumer Time), un événement Heartbeat sera généré.

Le réseau

Le gestionnaire de réseau comporte un mode simplifié de démarrage du réseau. La configuration du réseau n'est pas nécessaire dans tous les cas. La configuration par défaut des paramètres est donc parfois suffisante. Si l'utilisateur désire optimiser le réseau CANopen ou augmenter ses fonctionnalités, il peut alors modifier lui-même ces paramètres. Dans les réseaux CANopen, tous les appareils ont les mêmes droits et l'échange des données est directement régulé entre chaque appareils participants.

Le profil d'un appareil définit les paramètres nécessaires pour une communication. Le contenu de ce profil est spécifié par le constructeur. Les appareils ayant le même profil sont directement interchangeables. La plupart des paramètres sont décrits par le constructeur. Le profil possède aussi des emplacements vides qui correspondent aux futures extensions de fonctionnalités des constructeurs.

Dans la plupart des bus maître/esclave, l'efficacité du maître détermine le comportement de tout le réseau. De plus, les esclaves ne peuvent pas directement communiquer entre eux. Toutes ces caractéristiques augmentent, donc, le nombre d'erreurs de transmission. CANopen élimine tous ces désavantages. Le comportement temporel peut être spécifié individuellement pour chaque tâche respective des appareils participants. Ainsi, le système entier de communication n'a pas besoin de plus d'efficacité si seulement certains appareils participants nécessitent plus de performance. De plus, une tâche automatique peut être séparée pour chacun des appareils participants. Ainsi, les performances disponibles du contrôleur du réseau peuvent être utilisées de manière optimales et peuvent être augmentées à tout instant par adjonction de nouveaux appareils participants.

Le mapping des variables utilisées lors des échanges de type PDO permet d'utiliser de manière optimale la bande passante actuelle du bus. CANopen détermine les valeurs en défaut de tous les paramètres.

La machine d'état

Quatre états sont possibles pour un nœud :

    • initialisation: utilisation du message Boot-up pour communiquer avec l'élément maître du réseau ;
    • pré-opérationnel : seuls les messages SDO sont permis ;
    • opérationnel : les messages SDO et PDO sont permis ;
    • stoppé : seule la communication à l'élément maître est permise.

Structure d'une trame CAN

Start Of Frame

Le bit Start Of Frame (SOF) indique le début d'une Data Frame ou d'une Remote Frame. C'est un unique bit dominant.

Un nœud ne peut bien sûr débuter une transmission que si le bus est libre (cf. technique d’arbitrage dans le chapitre suivant). Ensuite, tous les autres nœuds se synchronisent sur le SOF du nœud ayant commencé une transmission.

Arbitration Field

L'Arbitration Field est constitué du COB, de l'identifier (ID) et du bit RTR.

Le COB-ID permet d'identifier le message et est utilisé lors de l’arbitrage. L’ID comporte ici 7 bits puisque nous utilisons la version 2.0A du protocole de communication sur le bus CAN. Le bit RTR (Remote Transmission Request) caractérise les Remote Frames. Il est dominant dans les Data Frames et récessif dans les Remote Frames (ces dernières seront détaillées dans le chapitre suivant).

Control Field

Le Control Field est composé de 6 bits :

  • Les 2 premiers sont des bits réservés.

  • Les 4 suivants constituent le Data Length Code (DLC) qui indique le nombre d'octets du Data Field. 4 bits dominants (0000) correspondent à la valeur 0 pour le DLC, tandis que 1 bit récessif et 3 bits dominant (1000) correspondent à la valeur 8.Il y a donc 9 valeurs possibles pour le DLC

Data Field

Ce sont les données transmises par une Data Frame. Il peut contenir de 0 à 8 octets, et chaque octet est transmis avec le bit de poids fort en premier.

CRC field

CRC Field est composé de la séquence de CRC sur 15 bits suivi du CRC Delimiter (1 bit récessif).

La séquence de CRC (Cyclic Redundancy Code) permet de vérifier l'intégrité des données transmises. Les bits utilisés dans le calcul du CRC sont ceux du SOF, de l'Arbitration Field, du Control Field et du Data Field.

Le CRC est en fait un polynôme calculé de la même manière par l’émetteur et par le récepteur de la trame : le message est vu par l’algorithme comme un polynôme qui est divisé par X15+X14+X10+X8+X7+X4+X3+1 et le reste de cette division modulo[2] est la séquence CRC transmise avec le message.

Une erreur CRC est détectée si le résultat envoyé est différent du résultat reçu, dans ce cas le récepteur du message transmet un message d’erreur sous forme de Request Frame.

ACK Field

L’ACK Field est composé de 2 bits, l'ACK Slot et le ACK Delimiter (1 bit récessif).

  • Un nœud en train de transmettre envoie un bit récessif pour le ACK Slot.

  • Un nœud ayant reçu correctement un message en informe le transmetteur en envoyant un bit dominant pendant le ACK Slot : il acquitte le message.

End Of Frame

Chaque Data Frame et Remote Frame est terminée par une séquence de 7 bits récessifs.

L'arbitrage

Le concept de communication du bus CAN est celui de la diffusion d’information (broadcast) : chaque station connectée au réseau écoute les trames transmises par les stations émettrices. Ensuite chaque nœud décide quoi faire du message, s’il doit y répondre ou non, s’il doit agir ou non. Ce concept peut être schématisé par celui de la radio diffusion d’information routière: une fois l’état du trafic connu, un conducteur peut décider de changer son trajet, d’arrêter son véhicule, d’alerter un autre conducteur, ou de ne rien faire.

Le protocole CAN autorise différents nœuds à accéder simultanément au bus. C’est un procédé rapide et fiable d’arbitrage qui détermine le nœud qui émet en premier.

L’accès au bus est donc aléatoire car un nœud peut émettre à n’importe quel moment. Mais cet accès se fait par priorité ; cette méthode est appelée CSMA CD/AMP (Carrier Sense Multiple Acces with Collision Detection and Arbitration Message Priority).

Afin d'être traitées en temps réel, les données doivent être transmises rapidement. Cela suppose non seulement une voie physique de transmission pouvant atteindre jusqu'à 1 Mbit/s, mais exige également une assignation rapide du bus dans les cas de conflits, lorsque plusieurs stations souhaitent transmettre simultanément des messages.

Lors de l’échange de données sur le bus, une hiérarchie est établie selon le type d’information. Par exemple une valeur variant rapidement, comme l'état d'un capteur ou l'asservissement d'un moteur, doit être transmise plus souvent avec un retard moindre que d'autres valeurs comme la température du moteur, qui évolue lentement. Sur le réseau CAN, l'identificateur de chaque message, qui est un mot de 11 bits (version 2.0 A) dans le cadre de notre application, détermine sa priorité.

Can Open va donc attribuer à chaque échange de données une priorité définie par le COB-ID qui se positionne en début de trame.

Le niveau de priorité est donné par l’ID sur 7 bits pour la version 2.0 A, ce qui donne 127 niveaux le 128ième étant le niveau 0000000, celui du NMT (Network Management) qui sera détaillé plus loin.

Les 4 bits du champ COB définiront le type de l’objet de communication de la trame.

Le procédé d'attribution du bus est basé sur le principe de l' «arbitrage bit à bit », selon lequel les nœuds en compétition, émettant simultanément sur le bus, comparent bit à bit l'identificateur de leur message avec celui des messages concurrents. Les stations de priorité moins élevée perdront la compétition face à celle qui a la priorité la plus élevé.

La couche physique

Le faisceau de bits transitant sur le bus est codé avec la méthode du NRZ (Non Return To Zero). Pendant la durée totale du bit, le niveau de tension de la ligne est maintenu, c’est à dire que pendant toute la durée durant laquelle un bit est généré, sa valeur reste constante qu’elle soit dominante ou récessive.

Le fait que CAN utilise un protocole de non retour à zéro (Non-Return-Zero ou NRZ) implique l'utilisation de bits de remplissage (stuff bit). Ces bits de remplissage sont rajoutés dans les messages CAN afin qu'il n'y ait jamais plus de 5 bits ayant la même valeur.

Les champs pouvant être modifiés par le bit stuffing sont les suivants :

    1. Arbitration Field

    2. Control Field

    3. Data Field

    4. CRC Field

Il est important de prendre en compte ces bits de remplissage pour pouvoir déterminer combien de nœuds peuvent être utilisés sur un même bus en fonction de la fréquence des échanges de données.


Configuration du réseau CANopen

Le réseau CAN OPEN est constitué de différents éléments, tous pouvant être maître et esclaves. Ils sont identifiés dans le réseau par un numéro arbitraire, que l'on appelle le Node-ID. Ce paramètre doit être unique : 2 éléments distincts du réseau ne peuvent pas avoir le même Node-ID. Ce Node-ID est très important, c'est la véritable carte d'identité du périphérique sur le réseau CAN Open.

Le principe de câblage est le suivant :

Principe de câblage d'un réseau Can Open

Important : Pensez aux résistances de terminaison à chaque extrémité du réseau.
Pour le MPC, la résistance est validée si le DIP 1 est mis à On. Dans le cas contraire, la résistance est dévalidée.
Sur les autres produits, se reporter à la notice du constructeur.


Présentation

La liaison CANopen du MPC procure à ce dernier un accès directe et automatisé aux périphériques spécifiques à ce bus de terrain. Pour ce faire des mécanismes ont été mis en place dans le MPC afin de satisfaire aux exigence de ce moyen de communication. Ainsi, il est possible d'utiliser tout les protocoles décrit dans la rubrique "La communication CANopen" et ce de façon transparente.

Un mécanisme permet, en effet de relier directement l'image de process contenant les entrées / sorties avec les modules d'entrées / sorties, codeur, automate, robot ou tout autre périphérique CANopen utilisant PDO. Les informations sont alors échanger sans intervention dans le programme. Les données sont accessibles comme des entrées / sorties locales.

Il est également possible d'interroger à tout moment par SDO, un périphérique, afin de lui communiquer sa nouvelle configuration, par exemple.

Le CANopen est une la couche de protocole ultime, mais il est également possible d'utiliser des trames génériques du CANbus afin de recréer, de façon ponctuelle des fonctions spécifiques.


Caractéristiques

Le MPC possède :

  • Un serveur SDO par défaut pour le paramétrage de la MPC à distance par un superviseur.

  • Un client SDO pour accéder aux variables et aux paramètres des périphériques CANopen tels que des pupitres, automates et cartes PC.

  • 128 PDOs en émission pour piloter les sorties des modules I/O ou des périphériques CANopen.

  • 128 PDOs en réception pour recevoir les entrées des modules I/O ou des périphériques CANopen.

  • Des fonctions d’accès direct au bus CAN pour envoyer et recevoir des messages spécifiques tels que les fonctions NMT et DBT.

  • Des fonctions de Node Guarding maître pour surveiller les liaisons avec les périphériques et les périphériques eux même.


Raccordement

  • Les deux connecteurs X1a et X1b sont identiques et contiennent les mêmes signaux. Ils facilitent la mise en réseau de plusieurs périphériques.

  • Les distances maximales à utiliser suivant la vitesse sont les suivantes :

Vitesse de transmission | Longueur maximale du bus
10KBauds | 5000m
20KBauds | 2500m
50KBauds | 1000m
125KBauds | 500m
250KBauds | 125m
500KBauds | 100m
800KBauds | 50m
1MBauds | 25m


Diagnostic du bus

  • LED CAN R et T :

Elles clignotent proportionnellement au débit sur le bus CAN (son intensité peut donc être très faible ou très forte)

  • Outils Message :

L'outils message est capable de capturer les trames CANopen échangées entre le MPC et ses périphérique, pour cela il faut sélectionner CANopen dans la liste des message à capturer :

  • Outils Hyper-Terminal

Cet outil peut également être utile pour analyser le bus CANopen. En effet, parmi les sources disponible sur le MPC, il est possible d'obtenir des informations statistiques issues du bus CANopen :


Dictionnaire CANopen

Le dictionnaire du MPC à directement accessible dans le soft Motion Studio à partir du menu Aide \ Table CANopen classé par ...

Ce dictionnaire récapitules les paramètres du MPC et ses périphériques accessible via CANopen.

Par ce bus il est également possible d'accéder aux zones d'entrée / sorties de l'image de process, à la zone d'échange et à la BBM :

Index | Désignation
0x6100-0x6101 | Image interne CANopen des entrées (image de process) 0x6100/0x00 : Accès 8 bits à l'octet 0 de l'image de process 0x6100/0x01 : Accès 8 bits à l'octet 1 de l'image de process 0x6100/0x02 : Accès 8 bits à l'octet 2 de l'image de process 0x6100/0x03 : Accès 8 bits à l'octet 3 de l'image de process ... 0x6100/0x00 : Accès 16 bits aux octets 0 et 1 de l'image de process 0x6100/0x00 : Accès 16 bits aux octets 1 et 2 de l'image de process ... 0x6100/0x00 : Accès 32 bits aux octets 0,1,2 et 3 de l'image de process
0x6110-0x6111 | Image interne CANopen des sorties (image de process) 0x6100/0x00 : Accès 8 bits à l'octet 0 de l'image de process 0x6100/0x01 : Accès 8 bits à l'octet 1 de l'image de process 0x6100/0x02 : Accès 8 bits à l'octet 2 de l'image de process 0x6100/0x03 : Accès 8 bits à l'octet 3 de l'image de process ... 0x6100/0x00 : Accès 16 bits aux octets 0 et 1 de l'image de process 0x6100/0x00 : Accès 16 bits aux octets 1 et 2 de l'image de process ... 0x6100/0x00 : Accès 32 bits aux octets 0,1,2 et 3 de l'image de process
0x7000 | BBM Bloc 0 / 8bits / Accès standard 0x7000/0x00 : Octet 0 0x7000/0x01 : Octet 1 .. 0x7001/0x00 : Octet 256 ...
0x7100 | BBM Bloc 1 / 8bits / Accès standard
0x7200 | BBM Bloc 2 / 8bits / Accès standard
... |
0x7E00 | BBM Bloc 14 / 8bits / Accès standard
0x7F00 | BBM Bloc 15 / 8bits / Accès standard
0x8000 | BBM Bloc 0 / 16bits / Accès standard
0x8100 | BBM Bloc 1 / 16bits / Accès standard
0x8200 | BBM Bloc 2 / 16bits / Accès standard
... |
0x8E00 | BBM Bloc 14 / 16bits / Accès standard
0x8F00 | BBM Bloc 15 / 16bits / Accès standard
0x9000 | BBM Bloc 0 / 32bits / Accès standard
0x9100 | BBM Bloc 1 / 32bits / Accès standard
0x9200 | BBM Bloc 2 / 32bits / Accès standard
... |
0x9D00 | BBM Bloc 13 / 32bits / Accès standard
0x9E00 | BBM Bloc 0 / 32bits / Accès selon le paramètre "Inversion"
0x9F00 | BBM Bloc 0 / 32bits / Accès selon les paramètres "Inversion" et "conversion"
0xA000 | Segment d'échange / 8 Bits / Accès standard
0xA100 | Segment d'échange / 16 Bits / Accès standard
0xA200 | Segment d'échange / 32 Bits / Accès standard
0xA300 | Segment d'échange / 32 Bits / Accès selon le paramètre "Inversion"
0xA400 | Segment d'échange / 32 Bits / Accès selon les paramètres "Inversion" et "conversion"

La zone d'entrées / sorties de l'image de process est généralement mappée par PDO avec les modules d'entrées sorties.


CANCOUNTER

CANCOUNTER Compteur du serveur SDO du MPC

Syntaxe

<Variable> = CANCOUNTER (<N° de compteur>)

Types acceptés

<Variable> : UDINT
<N° de compteur> : BYTE

Description

CANCOUNTER permet de connaître le nombre message échangé par le serveur SDO du MPC.

<N° de compteur> :

  • 0 : total

  • 1 : lecture

  • 2 : écriture

Remarques

<N° de compteur> 0 pour le nombre de message total, 1 pour le nombre de lecture, 2 pour le nombre d'écriture.

Exemple ST

NbMessageSDO := CANCOUNTER(0);


CANERROR

CANERROR  Détection des erreurs

Syntaxe

<Variable> = CANERROR (0)

Unité

<Variable> : DWORD

Description

Cette fonction permet de détecter si une erreur s'est produite :

  • Bit 0 à 1 si erreur du bus (déclenche la tâche événement système, si l'erreur n'était pas encore positionnée)

  • Bit 1 à 1 si le temps de réponse du SDO est écoulé

  • Bit 2 à 1 si erreur de Node Guarding


CANERRORCOUNTER

CANERRORCOUNTER  Retourne le nombre d'erreurs de communication sur le bus CAN

Syntaxe

<Variable> = CANERRORCOUNTER (0)

Unité

<Variable> : UDINT

Limites

<Variable> : de 0 à 65535

Description

CANERRORCOUNTER permet de connaître le nombre d'erreur qui se sont produites depuis la dernière initialisation du compteur.

Remarque

D'autre compteurs de défauts CAN sont disponibles à partir de l'hyperterminal.


CANERRORRESET

CANERRORRESET Remet à zéro les bits d'erreurs de communication du bus CAN

Syntaxe

CANERRORCOUNTER (0)

Description

CANERRORRESET permet réinitialiser les flags de défauts de communication CAN.


CANEVENT

CANEVENT  Indique si une trame CAN a été reçu sur le COBID de réception

Syntaxe

<TrameRecue> := CANEVENT ( 0 )

Types acceptés

< TrameRecue > : BOOL

Description

Cette fonction retourne TRUE si on a reçu une trame sur le COBID RX et qu'elle est disponible à la lecture.
Ce flag est remis à zéro lorsque la trame est lue.


CANGETNMT

CANGETNMT  Retourne l'état du NMT local

Syntaxe

< NMTLocal > = CANGETNMT (0)

Unité

< NMTLocal > : USINT

Description

Cette instruction renvoie l'état du NMT local :

  • 1 pour PREPARED

  • 2 pour OPERATIONNAL


CANGUARDADD

CANGUARDADD  Ajoute un périphérique au Node Guarding

Syntaxe

CANGUARDADD(<CANperiph>)

Unité

< CANperiph > : tPeripheral

Description

CANGUARDADD permet d'ajouter un périphérique à surveiller au Node Guarding.

Exemple

CANGUARDADD(RIO1) ;


CANGUARDPARAM

CANGUARDPARAM  Paramètre le Node Guarding maître

Syntaxe

CANGUARDPARAM (<Time>, <Retry>,<COBID>, <State>)

Unité

<Time> : UNIT

<Retry> : USINT

<COBID> : UDINT

<State> : BOOL

Description

CANGUARDPARMAT permet de paramétrer le Node Guarding maître du bus CAN :

  • <Time> : période du Node Guarding en ms

  • <Retry> : nombre d'essais

  • <COBID> : COBID de base d'interrogation (par défaut : 0x700)

  • <State> : A "1" force à vérifier que l'état du noeud est "démarré" (par défaut : TRUE)

Exemple

CANGUARDPARAM(100,1,16#700,FALSE);


CANGUARDDEL

CANGUARDDEL  Retire un périphérique au Node Guarding

Syntaxe

CANGUARDDEL(<CANperiph>)

Unité

< CANperiph > : tPeripheral

Description

CANGUARDDEL permet de retirer un périphérique de la liste Node Guarding.

Exemple

CANGUARDDEL(RIO1) ;


CANGUARDRESET

CANGUARDRESET  Retire tous les périphériques du Node Guarding

Syntaxe

CANGUARDRESET (0)

Description

CANGUARDDEL permet de retirer tous les périphériques de la liste Node Guarding maître du bus CAN.


CANREAD

CANREAD  reçoit une trame CAN sur le COBID en réception

Syntaxe

<TailleRecue> := CANREAD (<Adresse>, < Taille >)

Types acceptés

< Adresse > : UINT
< Taille > : UINT
< TailleRecue > : UINT

Description

Cette fonction lit une trame CAN sur le COBID RX.
Seule la dernière trame reçue sur ce COBID est disponible, il n'existe pas de buffer de réception et toute nouvelle trame reçue efface la précédente qu'elle ait été lue ou non.
<Adresse> : adresse dans le segment d'échange des données à recevoir
<Taille> : taille des données à envoyer, si cette taille est supérieure à 8 une erreur est générée
<TailleRecue> : taille des données réellement reçues.

Remarque

Le sémaphore «zone d'échange» est pris pendant la lecture des données nécessaires à l'envoi dans le segment d'échange


CANSENDNMT

CANSENDNMT  Envoie une commande NMT

Syntaxe

CANSENDNMT( <Periph>, <Commande>)

Unité

<Periph> : tPeripheral

<Commande> : USINT

Description

Cette instruction permet de commander le démarrage d'un périphérique en CAN (envoi des PDO) :

<Periph> : Périphérique déclaré dans le projet

  • MPC : auto démarre le NMT en local

  • IMD : aucune action

  • Module CAN déclaré dans la configuration, envoie un NMT vers ce périphérique

Remarque

Il est possible d'utilisé un numéro de noeud direct avec la fonction NODECAN(x)


CANSENDSYNCHRO

CANSENDSYNCHRO  Envoie un message de synchro

Syntaxe

CANSENDSYNCHRO (<COBID>)

Types acceptés

< COBID > : UDINT

Description

Cette fonction envoie un message de synchro sur le COBID concerné.


CANSETUP

CANSETUP  Définit les COBID d'émission et de réception pour le CAN libre

Syntaxe

CANSETUP (<COBID_TX>, < COBID_RX >)

Types acceptés

< COBID_TX > : UDINT
< COBID_RX > : UDINT

Description

Cette fonction permet de définir les COBID à utiliser pour le protocole CAN libre.
Lors de ce paramétrage, si un message reçu était présent, il est perdu.
Si le COBID_RX est égal à 0, la réception est désactivée, par contre il est toujours possible d'émettre.
Si le COBID de réception est identique à un COBID déjà utilisé par le système, alors le comportement est indéfini (dépend de l'ordre dans lequel ont été enregistrés les différents récepteurs de ce COBID), aucune erreur n'est générée dans ce cas.


CANSETUPSYNCHRO

CANSETUPSYNCHRO  Paramètre l'envoi périodique d'un message de synchro

Syntaxe

CANSENDSYNCHRO (<COBID>, <Periode>)

Types acceptés

< COBID > : UDINT
< Periode > : UDINT

Description

Cette fonction envoie périodiquement (<Periode> en ms) un message de synchro sur le COBID concerné (par défaut COBID : 0x80). Si <Periode> ou <COBID> vaut 0, la fonction est désactivée.
Si la fonction est appelée alors qu'un message de synchro était déjà paramétré, les paramètres sont mis à jour et le message de synchro suivant en tient compte


CANWRITE

CANWRITE  envoie une trame CAN sur le COBID en émission

Syntaxe

CANWRITE (<Adresse>, < Taille >)

Types acceptés

< Adresse > : UINT
< Taille > : UINT

Description

Cette fonction envoie une trame CAN sur le COBID TX.
Cette fonction n'attend pas que la transmission soit réellement effectuée, la transmission peut prendre plus ou moins de temps en fonction de la charge interne du MPC et surtout l'état de charge du bus CANopen.
La transmission peut même échouer dans le cas où le bus est déconnecté par exemple, cette fonction ne fournira pas l'information.
<Adresse> : adresse dans le segment d'échange des données à envoyer
<Taille> : taille des données à envoyer, si cette taille est supérieure à 8 une erreur est générée

Remarque

Le sémaphore «zone d'échange» est pris pendant la lecture des données nécessaires à l'envoi dans le segment d'échange


NODECAN

Syntaxe

<Q> := PDOEVENT (<Noeud>)

Unité

<Noeud> : USINT
<Q> : tPeripheral

Description

Cette fonction permet d'utiliser READxxx et WRITExxx sur un périphérique en CAN ayant un N° de noeud quelconque et non déclaré dans la configuration.


PDOEVENT

Syntaxe

<Q> := PDOEVENT (<NumPDO>)

Unité

<NumPDO> : UINT
<Q> : BOOL

Description

Cette fonction indique si un PDO a été reçu sur le PDO passé en paramètre, il est remis à 0 à chaque lecture.


READ

READ  Lecture de la table CANopen d'un périphérique

Syntaxe

<Q> = READ (<Peripherique>, <Index>, <SousIndex>, <Taille>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD ...)
<Index> : UINT
<SousIndex> : USINT
<Taille> : USINT
<Q> : UDINT

Description

Cette fonction retourne une valeur de type UDINT de la table CANopen d'un périphérique

Remarque

Cette fonction est aussi utilisable pour lire un index de la table CANopen du MPC

Voir aussi

READR

WRITE

READPARAM

WRITEPARAM


READPARAM

READPARAM  Lecture de la table CANopen d'un périphérique

Syntaxe

<Q> = READPARAM (<Peripherique>, <Parametre>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD ...)
<Parametre> : Nom du paramètre du périphérique
<Q> : UDINT

Description

Cette fonction retourne la valeur de type UDINT d'un paramètre du périphérique

Remarque

Cette fonction est aussi utilisable pour lire un index de la table CANopen du MPC

Voir aussi

READ

WRITE

READPARAMR

WRITEPARAM


READPARAMR

READPARAMR  Lecture de la table CANopen d'un périphérique

Syntaxe

<Q> = READPARAMR (<Peripherique>, <Parametre>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD ...)
<Parametre> : Nom du paramètre du périphérique

<Q> : REAL

Description

Cette fonction retourne la valeur de type REAL d'un paramètre du périphérique

Remarque

Cette fonction est aussi utilisable pour lire un index de la table CANopen du MPC

Voir aussi

READR

WRITER

READPARAM

WRITEPARAMR


READR

READR  Lecture de la table CANopen d'un périphérique

Syntaxe

<Q> = READR (<Peripherique>, <Index>, <SousIndex>, <Taille>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD ...)
<Index> : UINT
<SousIndex> : USINT
<Taille> : USINT
<Q> : REAL

Description

Cette fonction retourne une valeur de type REAL de la table CANopen d'un périphérique

Remarque

Cette fonction est aussi utilisable pour lire un index de la table CANopen du MPC

Voir aussi

READ

WRITER

READPARAMR

WRITEPARAMR


PDOTX

Syntaxe

PDOTX (<NumPDO>)

Unité

<NumPDO> : UINT

Description

Cette fonction force la construction et l'émission d'un PDO.


WRITE

WRITE  Ecriture dans la table CANopen d'un périphérique

Syntaxe

WRITE (<Peripherique>, <Index>, <SousIndex>, <Taille>, <Data>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD )
<Index> : UINT
<SousIndex> : USINT
<Taille> : USINT
<Data> : UDINT

Description

Cette fonction permet d'écrire une valeur de type UDINT dans la table CANOpen d'un périphérique

Remarque

Cette fonction est aussi utilisable pour écrire dans un index de la table CANOpen du MPC

Voir aussi

WRITER

READ

WRITEPARAM

WRITEPARAM


WRITEPARAM

WRITEPARAM  Ecriture dans la table CANopen d'un périphérique

Syntaxe

WRITEPARAM (<Peripherique>, <Parametre>, <Data>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD )
<Parametre> : Nom du paramètre du périphérique
<Data> : UDINT

Description

Cette fonction permet d'écrire une valeur de type UDINT dans un paramètre du périphérique

Remarque

Cette fonction est aussi utilisable pour écrire dans un index de la table CANOpen du MPC

Voir aussi

WRITE

WRITER

WRITEPARAMR

READPARAM


WRITEPARAMR

WRITEPARAMR  Ecriture dans la table CANopen d'un périphérique

Syntaxe

WRITEPARAMR (<Peripherique>, <Parametre>, <Data>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD )
<Parametre> : Nom du paramètre du périphérique
<Data> : REAL

Description

Cette fonction permet d'écrire une valeur de type REAL dans un paramètre du périphérique

Remarque

Cette fonction est aussi utilisable pour écrie dans un index de la table CANOpen du MPC

Voir aussi

WRITE

WRITER

WRITEPARAM

READPARAMR


WRITER

WRITER  Ecriture de la table CANopen d'un périphérique

Syntaxe

WRITER (<Peripherique>, <Index>, <SousIndex>, <Taille>, <Data>)

Types acceptés

<Peripherique> : Nom de périphérique (MPC, IMD )
<Index> : UINT
<SousIndex> : USINT
<Taille> : USINT
<Data> : REAL

Description

Cette fonction permet d'écrire une valeur de type REAL dans la table CANOpen d'un périphérique

Remarque

Cette fonction est aussi utilisable pour écrie dans un index de la table CANOpen du MPC

Voir aussi

WRITE

READR

WRITEPARAM

WRITEPARAMR


Initialisation de module RIO

Tache d'initialisation du MPC

Cette tâche initialise les différents périphériques et bus du MPC.

Pour initialiser les modules RIO, cette tâche fait appelle à la fonction InitRio().

PROGRAM P_INIT

VAR_EXTERNAL

 Fault     :Word;

 ErrCanIO    :Bool;

 ErrEthercat    :Bool;

 Inhibit     :udint;

END_VAR

VAR_GLOBAL

END_VAR

VAR

IntParam : tIntParam;

RioModule:tPeripheral;

END_VAR

 If (InitGetContext(0)=0) Then

  ErrEthercat:=1;      (* Forcage de l'initialisation EtherCAT *)

  ErrCanIO:=1;       (* Forcage de l'initialisation CANOPEN IO *)

 End_If;

 (* Initialisation Ethercat *)

 If (ErrEtherCAT=1) Then

  ErrEtherCAT:=0;

 End_If;

;

 (* Initialisation CAN*)

 If (ErrCanIO=1) Then

  (* ---------------- Init sur le MPC -------------------- *)

  InitRio(RIO1);

  InitRio(RIO2);

  InitRio(RIO3);

  InitRio(RIO4);

  ;

  (* ---------------- Démarrage des serveurs -------------------- *)

  ErrCanIO:=0;

  CANGUARDPARAM(100,1,16#700,FALSE); (* Temps de garde en ms, Nombre d'essais, COBID d'interrogation et PAS de vérification de l'état NMT *)

  CANGUARDADD(RIO1);

  CANGUARDADD(RIO2);

  (*CANGUARDADD(RIO3);

  CANGUARDADD(RIO4);*)

  CANSENDNMT(RIO1,1);     (*NMT start sur IMD*)

  CANSENDNMT(RIO2,1);     (*NMT start sur IMD*)

  CANSENDNMT(RIO3,1);     (*NMT start sur IMD*)

  CANSENDNMT(RIO4,1);     (*NMT start sur IMD*)

  CANSENDNMT(MPC,1);      (*NMT start en local*)

 End_If;

 (*Autorisation du démarrage des autres tâches *)

 Fault:=0;

 INITSETRESULT(0);

Fonction d'initialisation du RIO

FUNCTION INITRIO : BOOL

VAR_INPUT

RioModule:tPeripheral;

END_VAR

VAR

ModuleNodeID:udint; (* Node ID du module *)

TxPdoParamIndex:uint; (* Index des parametres du PDO d'emission *)

TxPDOCOBID:udint; (* COBID du TxPDO *)

TxPdoMappingIndex:uint; (* Index du mapping du PDO d'emission *)

OutRefreshTime:uint := 50; (* Frequence de rafraichissement des sorties : 10 ms *)

Adr:udint; (* Adresse CANopen de zone correspondante en image de process *)

RxPdoParamIndex:uint; (* Index des parametres du PDO de reception *)

RxPDOCOBID:udint; (* COBID du RxPDO *)

RxPdoMappingIndex:uint; (* Index du mapping du PDO de reception *)

GuardTime:uint := 100; (* Periode du node guarding *)

LifeTimeFactor:uint := 3; (* Nombre d'essais *)

InRefreshTime:uint := 50; (* Frequence de rafraichissement des entrées : 10 ms *)

InputInvert:Dword; (* Inversion des entrées *)

Invert:Byte; (* Inversion d'un bloc de 8 entrées *)

Filter1Period:usint; (* Filter 1 *)

Filter2Period:usint; (* Filter 2 *)

FilterEnable:DWord; (* Activation des filtres *)

Enable:Byte;

FilterNum:DWord; (* Numéro du filtre *)

Num:Byte;

OutputInvert:Dword; (* Inversion des sorties *)

OutputRetreat:Dword; (* Repli des sorties *)

Retreat:Byte; (* Repli d'un bloc de 8 sorties *)

END_VAR

(***************************************************************************************)

(* *)

(* Initialisation du module RIO 40 *)

(* *)

(***************************************************************************************)

(* *)

(* Attention, ce programme utilise le TxPDO 64+NodeID et le RxPDO 64+NodeID *)

(* *)

(***************************************************************************************)

(* Init paramétrage PDO en emission sur MPC *)

ModuleNodeID:=READPARAM(RioModule,_CANIO_NODE_ID);

TxPdoParamIndex:=UDINT_TO_UINT(16#1800+64+ModuleNodeID);

TxPDOCOBID:=16#200+ModuleNodeID;

WRITE(MPC,TxPdoParamIndex,1,32,TxPDOCOBID); (* COBID sur lequel sont envoyées les sorties *)

WRITE(MPC,TxPdoParamIndex,2,08,254); (* Tx periodique *)

WRITE(MPC,TxPdoParamIndex,3,16,0); (* Pas d'inhibit *)

WRITE(MPC,TxPdoParamIndex,5,16,UINT_TO_UDINT(OutRefreshTime)); (* Periode d'émission en ms *)

;

(* Init mapping PDO en emission sur MPC *)

TxPdoMappingIndex:=UDINT_TO_UINT(16#1A00+64+ModuleNodeID);

WRITE(MPC,TxPdoMappingIndex,0,32,1); (* 1 element *)

Adr:=READPARAM(RioModule,_CANIO_OUTPUT_ADDRESS); (* Lecture de l'adresse en image de process *)

Adr:=((Adr-512)+16#611000)*256+16#10; (* Conversion de l'adresse en Index/Sub CANopen *)

WRITE(MPC,TxPdoMappingIndex,1,32,Adr); (* Ecriture du mapping du TxPDO *)

;

(* Init paramétrage PDO en reception sur MPC *)

RxPdoParamIndex:=UDINT_TO_UINT(16#1400+64+ModuleNodeID);

RxPDOCOBID:=16#180+ModuleNodeID;

WRITE(MPC,RxPdoParamIndex,1,32,RxPDOCOBID); (* COBID sur lequel sont reçues les entrées *)

WRITE(MPC,RxPdoParamIndex,2,08,254); (* Periodique immediat *)

;

(* Init mapping PDO en reception sur MPC *)

RxPdoMappingIndex:=UDINT_TO_UINT(16#1600+64+ModuleNodeID);

WRITE(MPC,RxPdoMappingIndex,0,32,1); (* 1 element *)

Adr:=READPARAM(RioModule,_CANIO_INPUT_ADDRESS); (* Lecture de l'adresse en image de process *)

Adr:=((Adr-512)+16#610000)*256+16#20; (* Conversion de l'adresse en Index/Sub CANopen *)

WRITE(MPC,RxPdoMappingIndex,1,32,Adr); (* Ecriture du mapping du RxPDO *)

;

(* Initialisation du Node Guarding du RIO *)

WRITE(RioModule,16#100C,0,16,UINT_TO_UDINT(GuardTime)); (* Temps de garde en ms *)

WRITE(RioModule,16#100D,0,8,UINT_TO_UDINT(LifeTimeFactor)); (* Nombre d'essais *)

;

(* Initialisation du TxPDO du RIO *)

WRITE(RioModule,16#1800,2,8,254); (* Transmission type 254 *)

WRITE(RioModule,16#1800,3,16,UINT_TO_UDINT(InRefreshTime)); (* Inhibit time des entrées *)

;

(* Initialisation des inversions du RIO *)

InputInvert:=UDINT_TO_DWORD(READPARAM(RioModule,_CANIO_INPUTS_INVERT_1));

Invert:=DWORD_TO_BYTE(InputInvert);

WRITE(RioModule,16#6002,1,8,BYTE_TO_UDINT(Invert)); (* Inversion entrées 1 à 8 *)

InputInvert:=SHR(InputInvert,8);

Invert:=DWORD_TO_BYTE(InputInvert);

WRITE(RioModule,16#6002,2,8,BYTE_TO_UDINT(Invert)); (* Inversion entrées 9 à 16 *)

InputInvert:=SHR(InputInvert,8);

Invert:=DWORD_TO_BYTE(InputInvert);

WRITE(RioModule,16#6002,3,8,BYTE_TO_UDINT(Invert)); (* Inversion entrées 17 à 24 *)

;

(* Initialisation des filtres du RIO *)

Filter1Period:=UDINT_TO_USINT(READPARAM(RioModule,_CANIO_FILTER_PERIOD));

Filter2Period:=UDINT_TO_USINT(READPARAM(RioModule,_CANIO_FILTER_2_PERIOD));

WRITE(RioModule,16#2000,1,8,USINT_TO_UDINT(Filter1Period)); (* Filtre 1 *)

WRITE(RioModule,16#2000,2,8,USINT_TO_UDINT(Filter2Period)); (* Filtre 2 *)

;

(* Initialisation du filtrage du RIO *)

FilterEnable:=UDINT_TO_DWORD(READPARAM(RioModule,_CANIO_FILTER_ENABLE_1));

Enable:=DWORD_TO_BYTE(FilterEnable);

WRITE(RioModule,16#6003,1,8,BYTE_TO_UDINT(Enable)); (* Filtres entrées 1 à 8 *)

FilterEnable:=SHR(FilterEnable,8);

Enable:=DWORD_TO_BYTE(FilterEnable);

WRITE(RioModule,16#6003,2,8,BYTE_TO_UDINT(Enable)); (* Filtres entrées 9 à 16 *)

FilterEnable:=SHR(FilterEnable,8);

Enable:=DWORD_TO_BYTE(FilterEnable);

WRITE(RioModule,16#6003,3,8,BYTE_TO_UDINT(Enable)); (* Filtres entrées 17 à 24 *)

;

(* Initialisation des numéro de filtres du RIO *)

FilterNum:=UDINT_TO_DWORD(READPARAM(RioModule,_CANIO_FILTER_NUM_1));

Num:=DWORD_TO_BYTE(FilterNum);

WRITE(RioModule,16#2100,1,8,BYTE_TO_UDINT(Num)); (* Numéro du filtre des entrées 1 à 8 *)

FilterNum:=SHR(FilterNum,8);

Num:=DWORD_TO_BYTE(FilterNum);

WRITE(RioModule,16#2100,2,8,BYTE_TO_UDINT(Num)); (* Numéro du filtre des entrées 9 à 16 *)

FilterNum:=SHR(FilterNum,8);

Num:=DWORD_TO_BYTE(FilterNum);

WRITE(RioModule,16#2100,3,8,BYTE_TO_UDINT(Num)); (* Numéro du filtre des entrées 17 à 24 *)

;

(* Initialisation des inversions du RIO sorties *)

OutputInvert:=UDINT_TO_DWORD(READPARAM(RioModule,_CANIO_OUTPUTS_INVERT_1));

Invert:=DWORD_TO_BYTE(OutputInvert);

WRITE(RioModule,16#6202,1,8,BYTE_TO_UDINT(Invert)); (* Inversion sorties 1 à 8 *)

WRITE(RioModule,16#6200,1,8,BYTE_TO_UDINT(Invert)); (* Valeur sorties 1 à 8 *)

OutputInvert:=SHR(OutputInvert,8);

Invert:=DWORD_TO_BYTE(OutputInvert);

WRITE(RioModule,16#6202,2,8,BYTE_TO_UDINT(Invert)); (* Inversion sorties 9 à 16 *)

WRITE(RioModule,16#6200,2,8,BYTE_TO_UDINT(Invert)); (* Valeur sorties 9 à 16 *)

;

(* Initialisation des valeurs de replis des sorties *)

OutputRetreat:=UDINT_TO_DWORD(READPARAM(RioModule,_CANIO_OUTPUTS_RETREAT_1));

Retreat:=DWORD_TO_BYTE(OutputRetreat);

WRITE(RioModule,16#6206,1,8,16#FFFFFFFF); (* Activation replis sorties 1 à 8 *)

WRITE(RioModule,16#6207,1,8,BYTE_TO_UDINT(Retreat)); (* Replis sorties 1 à 8 *)

OutputRetreat:=SHR(OutputRetreat,8);

Retreat:=DWORD_TO_BYTE(OutputRetreat);

WRITE(RioModule,16#6206,2,8,16#FFFFFFFF); (* Activation replis sorties 9 à 16 *)

WRITE(RioModule,16#6207,2,8,BYTE_TO_UDINT(Retreat)); (* Replis sorties 9 à 16 *)

InitRIO:=True;

;

END_FUNCTION


Ethercat

EtherCat est le nom d’une technologie de bus de terrain basée sur Ethernet. Soutenue par une organisation internationale baptisée EtherCat Technology Group, composée de plus de 140 sociétés membres utilisateurs et constructeurs, EtherCat est en cours de standardisation par l’IEC (International Electrotechnical Commission).

Au cours des dix dernières années, les technologies réseau de type «bus de terrain» se sont largement imposées dans le monde des automatismes industriels en tant qu’alternative au câblage traditionnel des entrées/sorties d’automates programmables. Ces technologies ont permis l’apparition de systèmes de contrôle-commande étendus. Mais avec l’amélioration constante des performances CPU des automates &endash; et surtout des PC industriels &endash; les bus de terrain deviennent de véritables goulets d’étranglement qui limitent finalement les performances des systèmes automatisés. Le fait que les architectures de contrôle soient souvent constituées d’un empilement de différents sous-systèmes hardware et software, généralement cycliques, constitue un facteur aggravant : les temps de réponse peuvent être entre trois et cinq fois supérieurs au temps de traitement effectif des automates !

Un cran au-dessus des bus de terrain, c’est-à-dire pour l’interconnexion de plusieurs automates entre eux, Ethernet constitue depuis longtemps déjà un choix intéressant. La nouveauté est l’introduction d’Ethernet au niveau des entrées/sorties déportées et pour les systèmes de commande, domaines jusque là réservés aux bus de terrain traditionnels. Les principales conditions à remplir par un bus de communication pour être utilisable dans ce type d’applications sont de posséder des capacités temps-réel, l’aptitude à manipuler des paquets de données de tailles faibles, et un coût peu élevé.

Ethernet et le temps réel

De nombreuses propositions ont été faites pour améliorer les capacités temps-réel des réseaux Ethernet. Certaines solutions sont basées sur la désactivation du protocole d’accès au support CSMA/CD (responsable du non-déterminisme de la norme IEEE 802.3) et sur la mise en oeuvre d’autres mécanismes permettant de faire circuler les données sur le réseau dans des tranches de temps prédéterminés (time slots).

D’autres solutions préconisent l’introduction de switches, permettant de segmenter les réseaux en domaines exempts de collision, et chargés de distribuer les paquets de données de façon très contrôlée et précise dans le temps. Mais si ces solutions s’avèrent efficaces pour le transfert des données, les temps de redirection vers les sorties ou vers les contrôleurs, ainsi que les temps de lecture des entrées dépendent en général fortement de l’implémentation.

Si les trames Ethernet sont utilisées de façon individuelle pour chacun des équipements, le taux de données utiles est en principe très faible. Les trames Ethernet les plus courtes comptent 84 octets (en comptant le délai inter-trame).

Si par exemple un contrôleur envoie cycliquement 4 octets de données et d’informations de statut, et reçoit 4 octets de commandes et de requêtes de contrôle, à 100 % de charge réseau (c’est-à-dire avec des temps de réponse infiniment courts), le taux de données utiles sera de 4/84 = 4.7 %. Avec un temps de réponse moyen de l’ordre de la dizaine de microsecondes, ce taux chute à 1.9 %. Ces limitations touchent tous les systèmes utilisant des trames Ethernet dédiées pour chacun des équipements.

Principes de fonctionnement

La technologie EtherCat apporte des réponses à ces limitations. Avec elle, les paquets Ethernet ne sont désormais plus reçus, interprétés et stockés au niveau de chaque équipement. les esclaves EtherCat lisent et écrivent les données durant le passage de la trame à l’intérieur du noeud. Et ils ne lisent que celles qui leur sont spécifiquement adressées. Les trames subissent ainsi des délais de l’ordre de quelques nanosecondes seulement.

Etant données que les trames Ethernet contiennent des données en provenance et en direction de nombreux équipements, le taux de données utiles peut grimper jusqu’à 90 % ! Les capacités full-duplex du 100BaseTX peuvent ainsi être pleinement exploitées pour atteindre des débits effectifs supérieurs à 100Mbps (supérieurs à 90 % de 2x100 Mbps).

Le protocole Ethernet tel que défini dans IEEE 802.3 reste intact jusqu’au niveau des terminaux individuels ; aucun sous-bus n’est nécessaire. Afin de satisfaire les spécifications des équipements terminaux électroniques, seule la couche physique doit être modifiée au niveau du coupleur : la paire torsadée ou la fibre optique doit être remplacée par une couche physique de type E-bus, qui délivre un signal LVDS (Low Voltage Differential Signal). Ce type de signal se prêtant par ailleurs bien à des transferts sur des distances courtes (jusqu’à 10m) sur paire torsadée ou sur fibre optique, le block terminal peut ainsi être étendu de façon relativement économique.

Le Protocole

Le protocole EtherCat est encapsulé dans les trames Ethernet grâce à un champ Ethertype spécifique. Celui-ci consiste en une série de sous-télégrammes, adressant des zones mémoire particulières de l’image logique du process, pouvant atteindre une taille de 4 GigaOctets. La séquence des données est indépendante de l’ordre dans lequel sont reliés physiquement les terminaux ; l’adressage peut ainsi être effectué dans n’importe quel ordre. Le transfert direct de trames Ethernet est utilisé dans les cas où de très hautes performances sont requises et lorsque les composants EtherCat opèrent à l’intérieur d’un même sous-réseau.

Quoi qu’il en soit, l’utilisation d’EtherCat n’est pas limitée aux sous-réseaux. EtherCat UDP permet d’encapsuler le protocole EtherCat à l’intérieur de datagrammes UDP/IP. La communication au travers de plusieurs sous-réseaux devient alors possible, par exemple par l’intermédiaire de routeurs. Dans cette configuration, les performances dépendent des capacités temps réel du réseau et de l’implémentation qui est faite d’Ethernet.

EtherCat supporte tout type de topologie : en ligne, arborescente ou en étoile. La structure en ligne bien connue des architectures de bus de terrain devient ainsi envisageable avec Ethernet. La combinaison de structures linéaires et de branches s’avère particulièrement pratique pour le câblage des installations : les interfaces nécessaires sont disponibles sur les coupleurs et aucun switch supplémentaire n’est requis. Néanmoins, il est toujours possible de mettre en oeuvre une architecture Ethernet commutée classique.

Les câbles patch Ethernet standard peuvent transmettre les signaux au choix en mode Ethernet (100Base-TX) ou en mode E-bus. L’architecture Fast-Ethernet autorise une longueur de câble de 100 mètres entre deux éléments du réseau. Le câble E-bus est quant à lui prévu pour des distances allant jusqu’à 10 mètres.

Pour ce qui est de l’extension du réseau, il est possible de connecter jusqu’à 65535 éléments.

Horloges distribuées.

La synchronisation précise des équipements s’avère très importante, notamment dans le cas de systèmes distribués, lorsque plusieurs entités distantes doivent agir de façon simultanée. La méthode de synchronisation la plus performante connue à ce jour pour les réseaux distribués consiste en un « alignement » des horloges du système, tel que décrit dans IEEE 1588. Contrairement aux systèmes de communication dits « synchrones », pour lesquels la qualité de la synchronisation des équipements souffre en cas de défaut, les systèmes synchronisés avec la méthode d’alignement des horloges présentent une certaine tolérance vis-à-vis des délais engendrés par d’éventuelles erreurs de communication.

Avec EtherCat, l’échange des données repose sur un mécanisme purement hardware. Etant donné que la communication se base, à la fois logiquement et physiquement sur une structure en anneau, l’horloge maître peut déterminer les délais de propagation ainsi que l’offset des horloges esclaves de façon très simple et précise &endash; et vice versa. Les horloges distribuées sont ajustées en fonction de ces valeurs. Il est ainsi possible d’atteindre une précision de synchronisme inférieure à une microseconde. La synchronisation externe au réseaux EtherCat, par exemple au travers d’une usine, est, quant à elle, basée sur le protocole IEEE 1558.

La synchronisation des horloges permet également d’obtenir des informations précises concernant les instants d’acquisition ou de transfert des données. Par exemple, pour calculer une vitesse, un contrôleur de mouvement se base généralement sur une série de mesures de position effectuées séquentiellement. Plus la fréquence d’échantillonnage est importante, plus les jitters ont un impact important sur la précision de la valeur de vitesse calculée. Grâce à la synchronisation des horloges, la même notion de temps est partagée par tous les équipements. Les données sont horodatées avec précision et la vitesse calculée ne dépend plus des jitters du système.

Quelques chiffres

Grâce à l’intégration hardware au niveau esclave et à un accès direct à la mémoire de la carte réseau du maître, le traitement complet du protocole est réalisé au niveau hardware. Il est par conséquent totalement indépendant des temps de traitement des piles protocolaires de niveaux supérieurs, ainsi que des performances CPU ou encore de l’implémentation software. EtherCat permet de balayer 1000 E/S digitales en 30 microsecondes, à la fois en lecture et en écriture, grâce au mode full duplex intégral. 200 valeurs analogiques nécessitent 50 microsecondes, tandis que 100 axes sont contrôlés en 100 microsecondes. Durant ce laps de temps, tous les axes reçoivent des valeurs de commande et de contrôle, et renvoient leur position ainsi que des informations concernant leur état de fonctionnement. La technique des horloges distribuées permet de synchroniser les axes avec une précision sensiblement inférieure à la microseconde.

L’expérience des bus de terrain montre clairement que la disponibilité des installations ainsi que les temps de recouvrement en cas de panne dépendent fortement des capacités de diagnostic des systèmes. Seuls les défauts détectés rapidement et précisément, puis localisés sans ambiguïté peuvent être corrigés dans les meilleurs délais. EtherCat possède des fonctionnalités permettant de reconnaître automatiquement la topologie du réseau et de vérifier la configuration des noeuds. Les erreurs de bit sont détectées de façon très fiable grâce à des contrôles de redondance cycliques (CRC). Le polynôme CRC à 32bits assure une distance de hamming de 4. Le protocole, la couche physique ainsi que la topologie du système EtherCat permettent outre la détection et la localisation des canaux défectueux, la supervision individuelle de chacun des segments. L’évaluation des compteurs d’erreurs associés permet la localisation des portions critiques du réseau. Les sources d’erreurs changeantes ou progressives telles que les interférences électromagnétiques (IEM), les connecteurs défectueux ou les câbles endommagés sont détectés et localisés, et ce, même lorsqu’ils ne remettent pas encore en cause les capacités de cicatrisation du réseau.

Avec la miniaturisation progressive des composants PC, la taille des PC industriels est de plus en plus déterminée par le nombre de slots utilisés. Grâce à la bande passante de Fast Ethernet, les interfaces habituellement situées dans les PC Industriels peuvent être transférées au niveau de terminaux EtherCat intelligents. Outre les entrées/sorties décentralisées, drives et unités de contrôle, d’autres systèmes plus complexes tels que des bus de terrain, passerelles et autres interfaces de communication peuvent être adressées.

Même d’autres équipements Ethernet (sans restriction sur les variantes du protocole) peuvent être connectés via des terminaux hub décentralisés. Le PC Industriel central devient ainsi plus petit et par conséquent plus économique. Une seule interface Ethernet est suffisante pour communiquer avec l’ensemble des périphériques.

Profils et ouverture

Le profil d’un équipement décrit les paramètres de l’application ainsi que le comportement fonctionnel de l’équipement, incluant la machine d’état caractéristique de la classe à laquelle il appartient. Pour de nombreuses classes, les technologies de bus de terrain fournissent déjà des profils largement utilisés, par exemple pour les entrées/sorties,les systèmes d’entraînement ou encore les valves. Les utilisateurs se sont familiarisés avec ces profils, et connaissent bien les paramètres ainsi que les outils associés. C’est la raison pour laquelle aucun profil EtherCat n’a été développé pour ces classes d’équipements. A la place, de simples interfaces pour les profils existants sont proposées, de quoi faciliter la tâche des utilisateurs et des constructeurs lors des migrations des bus de terrain existants vers EtherCat.

EtherCat et CanOpen

Des profils matériels et applicatifs CanOpen existent déjà pour les équipements, allant des modules d’entrées/sorties, systèmes d’entraînement, encodeurs, valves proportionnelles, jusqu’aux profils d’applications pour le traitement plastique ou les machines textiles par exemple. EtherCat peut fournir les mêmes mécanismes de communication que CanOpen : dictionnaire d’objet (Object Dictionary), PDO (Process Data Objects) et SDO (Service Data Objects). EtherCat peut ainsi être implémenté avec un minimum d’efforts sur des équipements CanOpen. Une grande partie des firmware CanOpen peuvent être ré-utilisés.

Servo-entraînement avec EtherCat

L’interface Sercos est reconnue en tant qu’interface de communication temps-réel hautes performances, particulièrement dans des applications de contrôle de mouvement. Les profils Sercos pour servo-entraînements ainsi que la technologie de communication sont couverts par le standard IEC 61491. Ces profils peuvent très facilement être mappés sur EtherCat. Le canal de service, et par conséquent l’ensemble des paramètres et fonctions du système d’entraînement dépendent de la mailbox EtherCat. Ici aussi, une attention particulière a été portée sur la compatibilité avec les protocoles existants. Les données le process, sous forme de données AT (Amplifi er Telegram) et MDT (Master Data Telegram), sont transférées par le biais des mécanismes EtherCat du contrôleur esclave. Le mapping est similaire à celui de Sercos. La machine d’état esclave d’EtherCat peut également être mappée sur les phases du protocole Sercos.

La technologie Ethernet temps réel est par conséquent disponible pour ce type de profil matériel, répandu dans les applications CNC. En option, il est également possible de transférer la commande de position, de vitesse ou de couple. En fonction de l’implémentation, il est même possible de continuer à utiliser les mêmes outils de configuration des systèmes d’entraînement.

EtherCat et Ethernet

La technologie EtherCat n’est pas seulement compatible avec Ethernet, elle est également ouverte : le protocole tolère sur le même support physique les autres services et protocoles basés sur Ethernet. Il n’existe aucune restriction concernant le type d’équipement Ethernet pouvant être connecté par le biais d’un port switch à l’intérieur d’un segment EtherCat. Le réseau EtherCat est transparent pour l’équipement Ethernet, et les caractéristiques temps-réel ne sont pas affectées.

Les équipements EtherCat peuvent par ailleurs se comporter comme des éléments Ethernet standard. Le maître agit comme un switch de niveau 2 qui redirige les trames vers les équipements correspondants. Toutes les technologies Ethernet peuvent par conséquent être utilisées dans l’environnement EtherCat : serveur web intégré, e-mail, transferts FTP, etc.

L’accès aux données

Un protocole similaire à TFTP permet d’accéder à n’importe quelle structure de données au niveau de l’équipement. Le chargement de firmware standardisés est par conséquent possible, sans tenir compte du fait que l’équipement supporte ou non TCP/IP.

Implémentation

EtherCat utilise des contrôleurs Ethernet standard là où des économies peuvent être réalisées, c’est-à-dire au niveau du contrôleur maître. Etant donné qu’une seule trame Ethernet doit être envoyée par cycle, aucun coprocesseur n’est nécessaire pour la communication. Cette caractéristique fait d’EtherCat une solution Ethernet temps réel ne nécessitant pas l’ajout d’un plug-in au niveau du contrôleur maître. Le contrôleur Ethernet embarqué ou une simple carte NIC sont suffi sants. Le maître est en général implémenté de façon purement logicielle.

L’implémentation d’un maître EtherCat reste simple, surtout dans le cas d’applications petites ou moyennes parfaitement défi nies. Par exemple pour un API avec une seule image process : si celle-ci ne dépasse pas 1488 octets, l’envoi cyclique d’une seule trame Ethernet avec le temps de cycle de l’API est suffisant. Etant donné que le Header ne change pas, il suffi t d’ajouter un Header constant à l’image du process et transférer le résultat au contrôleur Ethernet.

Des contrôleurs EtherCat de type ASIC ou FPGA sont utilisés au niveau des équipements esclaves. Ils sont d’ores et déjà disponibles ou en cours de préparation chez un certain nombre de constructeurs. Par exemple, les contrôleurs esclaves développés par Beckhoff possèdent une DPRAM interne et offrent une série d’interfaces permettant d’accéder à la mémoire de l’application. L’interface série SPI (Serial Peripheral Interface) est destinée aux équipements manipulant de faibles quantités de données de process, tels que les modules d’entrées/sorties analogiques, les capteurs, les encodeurs ou les drives simples. L’interface d’entrées/sorties parallèles 32 bits peut-être utilisée pour connecter jusqu’à 32 entrées/sorties digitales, ou pour de simples capteurs ou actionneurs manipulant des données 32 bits. L’interface microcontrôleur 8/16 bits parallèle est souhaitable quant à elle dans le cas d’équipements plus complexes manipulant de plus grandes quantités de données.


Raccordement

La télémaintenance permet via une liaison Internet de contrôler à distance un MPC à l'aide du logiciel Motion Studio.

Architecture

Les différents éléments sont connectés de la façon suivante :

Le MPC se connecte au PC distant via le port 6100

Liaison entre le MPC et son accès Internet

Type : Ethernet TCP/IP

Liaison entre le PC distant et son accès Internet

Type : Accès Internet local (Modem RTC, ADSL ...)

Accès Internet par réseau local (Routeur)

  • Pour les 2 types d'accès, il faut que le port 6100 soit ouvert sur le PC distant (arrêt ou modification des paramètres du firewall).

  • Dans le cas d'un accès par réseau local, il faut rediriger le port 6100 du routeur vers le PC distant (voir avec votre administrateur réseau).


Configuration de la liaison

Configuration de l'Ethernet TCP

CONFIGURATION \ MPC \ ETHERNET TCP \ ETHERNET TCP

  • Nom : nom donné au MPC (facultatif)

  • Adresse IP : adresse IP du MPC (à remplir pour accéder au MPC en connexion direct)

  • Masque : masque de sous-réseau (à remplir pour utiliser la télémaintenance)

  • Passerelle : adresse IP de la passerelle du réseau sur lequel est connecté le MPC (à remplir pour utiliser la télémaintenance)

  • DNS : adresse du serveur DNS (à remplir pour utiliser la télémaintenance via un serveur DNS)

Configuration de la Télémaintenance

CONFIGURATION \ MPC \ ETHERNET TCP \ TELEMAINTENANCE

  • IP Télémaintenance : adresse IP du PC distant ou routeur (obligatoire, cette adresse devra être fourni ou rempli par l'utilisateur final via un pupitre).

  • Utilise l'entrée 32 : activation de la télémaintenance par l'entrée 32

Le port 6100 doit être ouvert en TCP sur le PC distant (arrêt ou modification des paramètres du firewall si besoin). De plus dans le cas d'une connexion Internet par réseau local, le port 6100 du routeur doit être redirigé vers le PC distant (voir votre administrateur réseau).

Il est possible de visualiser l'adresse IP du PC distant en démarrant l'assistant de télémaintenance do logiciel Motion Studio


Etablissement de la liaison

Le démarrage de la télémaintenance nécessite 2 personnes : La 1ère personne sur le site du MPC doit pouvoir modifier la configuration de la télémaintenance (adresse IP de télémaintenance) et démarrer la connexion via un pupitre, la seconde personne sur le site du PC distant devra être capable de fournir l'adresse de télémaintenance.

Une fois la connexion établie, la personne sur le site du MPC n'est plus nécessaire.

Activation de la Télémaintenance coté MPC

  • Demande de télémaintenance sur le MPC :

Soit par l'exécution de l'instruction Remote (1)

Soir par la modification du paramètre _MPC_REMOTE_CONTROL via le bus CANopen ou Modbus.

Soit par un front montant sur l'entrée 32 du MPC (si le paramètre «Utilise l'entrée 32» est activé)

Affichage cyclique des lettres H L P sur l'afficheur 7 segment de MPC.

Si au bout de 10 mn, il n'y a pas eu de connexion avec le PC distant, la demande de télémaintenance s'arrête et l'affichage de HLP disparaît.

Activation de la Télémaintenance coté PC distant

  • Démarrer l'assistance de télémaintenance en cliquant sur télémaintenance dans le menu Options (à partir de la version 0.59) ou l'icône [image] du logiciel Motion Studio.

  • Sélectionner l'interface (carte réseau, modem) utilisé pour la connexion avec le MPC :

  • Démarrer la connexion de PC distant en cliquant sur START

  • Le PC distant attend la connexion du MPC

  • Le MPC se connecte au PC distant

  • Démarrer la communication entre le Motion Studio et le MPC en cliquant sur Connecter dans le menu Communication ou sur l'icône [image] du logiciel Motion Studio.

Affichage permanent d'un H sur l'afficheur 7 segment de MPC.

En mode télémaintenance, il est possible de recharger le système d'exploitation, redémarrer le MPC, sans perte de connexion.

Arrêt de la Télémaintenance

  • Arrêt de la télémaintenance :

Soit par l'exécution de l'instruction Remote (0).

Soir par la modification du paramètre _MPC_REMOTE_CONTROL via le bus CANopen ou Modbus.

Soit par un front descendant sur l'entrée 32 du MPC (si le paramètre «Utilise l'entrée 32» est activé)


Exemple d'écran de paramétrage

Ecran de commande de la télémaintenance :

A partir de cet écran, on peut accéder à l'écran de configuration de la télémaintenance.

Le bouton démarrer (_MPC_REMOTE_CONTROL) permet de démarrer ou arrêter la télémaintenance, il correspond à l'instruction REMOTE (x).

L'état de la connexion est renvoyé par le paramètre _MPC_REMOTE_STATUS, il correspond à l'état de l'instruction REMOTE_S (0).

Nom du paramètre | Adr. Modbus - taille | Rôle
_MPC_REMOTE_CONTROL | 430203 (1) | Télémaintenance
_MPC_REMOTE_STATUS | 430204 (1) | Etat

Ecran de configuration de la télémaintenance :

Cet écran permet de modifier tous les paramètres nécessaires à la télémaintenance.

Nom du paramètre | Adr. Modbus - taille | Rôle
_MPC_IP_ADDRESS | 430101 (2) | Adresse IP
_MPC_IP_MASK | 430103 (2) | Masque
_MPC_IP_GATEWAY | 430105 (2) | Passerelle
_MPC_IP_DNS | 430107 (2) | DNS
_MPC_REMOTE_IP | 430201 (2) | IP Télémaintenance


REMOTE

Syntaxe

REMOTE (<Cmd>)

Types acceptés

<Cmd> : USINT

Description

Cette fonction permet de démarre/arrêter la télémaintenance :

  • Forcer <Cmd> à 0 pour arrêter la télémaintenance

  • Forcer <Cmd> à 1 pour démarrer la télémaintenance.


REMOTE_HOST

Syntaxe

REMOTE_HOST (<HostName>)

Types acceptés

<HostName> : STRING

Description

Cette fonction permet de forcer le nom d'hôte de la télémaintenance


REMOTE_S

Syntaxe

<Q> := REMOTE_S (0)

Types acceptés

<Q> : USINT

Description

Cette fonction retourne l'état de la télémaintenance :

  • 0 : pas de télémaintenance en cours

  • 1 : en attente de connexion

  • 2 : en connecté au PC distant


Type de messages envoyés

Il y a deux grandes familles de messages envoyés par la liaison Can Open :

Ä Les SDO (Service Data Object) transportent des données

Ä Les PDO (Process Data Object) transmettent des événements.


DATE

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.

Attention

Ce type de données n'est pas actuellement mis en application dans Motion Studio.


DATE_AND_TIME

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.

Attention

Ce type de données n'est pas actuellement mis en application dans Motion Studio.


ELSIF

Voir IF


STRING

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


TIME

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.


TIME_OF_DAY

Voir les types de base

Notes

Ce type de base est défini par l'IEC61131-3.

Attention

Ce type de données n'est pas actuellement mis en application dans Motion Studio.


Editeur SFC : introduction

Langage SFC

Description

Le langage SFC ( sequential function chart), ou GRAFCET, est un langage graphique utilisé pour décrire les opérations séquentielles. Le procédé est représenté comme une suite connue détapes (états stables), reliées entre elles par des transitions. Une condition booléenne est attachée à chaque transition. Les actions dans les étapes sont décrites avec les langages ST, IL.

Eléments d'un SFC

Un programme SFC est un réseau graphique détapes et de transitions, reliées par des liaisons orientées. Les liens de connexion multiples sont représentés par des divergences. Une partie du graphique, nommée macro étape peut être isolée, et représentée dans le graphique principal par un seul symbole.

Les principales règles graphiques sont :

Äune étape ne peut être suivie dune autre étape

Äune transition ne peut être suivie dune autre transition

Le diagramme séquentiel de fonction offre les éléments de langue suivants :

Étape :

Une étape contient beaucoup d'actions. Les actions contiennent des fragments de code. Une étape, qui s'exécute, est appelée `active '. Si une étape est activée, les actions contenues s'exécuteront. Une étape peut être activée par : commutation d'une transition précédente, un élément de saut, configuration dun flag initial (c.f étape initiale).

Etape initiale :

La situation initiale dun programme SFC est représentée par ses étapes initiales. Elle se différencie des autres étapes grâce au carré double. Un programme SFC doit contenir au moins une étape initiale.

Transition :

L'écoulement de programme est commandé temporellement et structurellement par la commutation des transitions. Une transition commutera si l'état de transition est vrai et si toutes les étapes précédentes sont en activité. Une fois que la transition commute, toutes les étapes précédentes deviennent inactives et toutes les étapes suivantes deviennent actives.

Divergence en ET :

Une transition peut activer plusieurs étapes en même temps en passant par une divergence en ET. Si toutes les étapes précédant la transition T1 sont actives et que la transition est VRAI, toutes les étapes (par exemple, S1, S2) qui suivent la divergence en ET sactiveront.

Convergence en ET :

Une transition peut désactiver plusieurs étapes en même temps si elle est précédée dune convergence en ET. Si toutes les étapes précédentes (par exemple, S1, S2) sont activées et que la condition de la transition (T1) est VRAIE, toutes les étapes précédentes seront désactivées et les étapes suivant la transition T1 seront activées.

Divergence en OU :

Si l'étape précédant la divergence en OU est activée, toutes les transitions (par exemple, T1, T2) sont vérifiées de gauche à droite. La première transition qui est VRAI est basculée, cette transition désactive létape (S1) et active létape suivante.

Convergence en OU :

La convergence en OU vient fermer une divergence en OU. Si une des transitions (T1 ou T2) commute, les étapes précédant la transition seront désactivées, et le étapes suivantes seront activées.

Saut :

L'écoulement du programme se poursuit à un autre emplacement. Le nom du saut est le nom de l'étape qui sera active si la transition précédente (T1) commute.


Etapes et étapes initiales

Le code d'une étape est exécutée cycliquement si et seulement si c'est un état actif. En principe, on peut indiquer que le code est entouré par une boucle qui est écrite si une transition précédente commute, et est laissée si une transition suivante commute. Si une étape était activée, son code est exécuté au moins une fois. Les étapes initiales sont toujours activées en début de programme qui signifie que la transition NON précédente est nécessaire. Chaque étape peut être convertie en étape initiale en activant le contrôle ActiveX étape initiale dans la fenêtre de propriétés. Enlever cette option redéfinira létape en une étape normale.

Le nom d'une étape doit correspondre à la syntaxe suivante :

Le premier caractère du nom d'étape est une lettre ("a`-"z`, "A`-"z`)

chaque autre caractère est une lettre ou un nombre (,0` - "9`) ou le caractère souligné ("_`).

`Step1' et 'S_1 sont des noms valides, _Step1 et 1Step ne sont pas autorisés

Les noms des étapes ont une longueur maximum de 31 caractères. Pour avoir plus d'information, voir Sauts.


Sauts vers des étapes

Le prédécesseur d'un élément de saut est toujours une transition. La cible d'un saut est toujours une étape. La cible du saut est fixée en donnant au saut le même que létape cible choisie. Si une étape est indiquée comme cible d'un saut, son nom doit être unique. Si un saut n'est pas ou plus d'une fois disponible, des messages d'erreur correspondants sont créés pendant la vérification de la syntaxe.

Pour garantir l'uniformité d'un plan SFC, l'insertion d'un saut est possible seulement comme dernier élément d'une divergence de choix d'ordre.


Transitions

La transition est responsable du changement de l'état actif de létape(s) précédente(s) à létape(s) suivante(s). Les transitions montrent un changement détat FAUX à VRAI (booléen).

Le code de la transition doit être écrit de sorte que le résultat actuel à la fin du code soit du type BOOL. La transition commute si et seulement si la valeur de l'accumulateur est VRAI. La communication avec d'autres éléments SFC se produit par des variables locales

Exemple:

(*La transition commute si la température est supérieur à 70° C *)

LD variable de température

GT 70


Editeur de type de donnée

Création d'un type de données

  1. Dans le navigateur de projet, sélectionner l'onglet Programmation.

  2. Afficher l'arborescence des types de fonction en cliquant sur le + devant « TypeDefs ».

  3. Double cliquer sur « Usertype.TYP » ou au autre fichier de type que vous avez créer, pour ouvrir l'éditeur de type de données.


Editeur SFC

Léditeur SFC

En construction