TwinCAT 3 & IO-Link IFM

Projet TwinCAT 3 IO-Link

IO-Link est un système de communication pour la connexion de capteurs et d’actionneurs intelligents normalisé IEC 61131-9. Le système se compose d’un maître IO-Link et de périphériques IO-Link : un capteur, un actionneur ou une combinaison des deux. Le maître IO-Link peut être une passerelle vers un bus de plus haut niveau tel que PROFINET, EtherCAT …

Le matériel mis en oeuvre dans cet article :

  • Un PC avec l’environnement TwinCAT 3
  • Master IO-Link Profinet d’IFM AL1100
  • Bouton Capacitif KT6101 d’IFM : communique en IO-Link
  • Détecteur Laser O5D150 d’IFM : communique en IO-Link

Le Runtime TwinCAT constituera notre PLC et va gérer la communication avec le Master IO-Link Profinet. Le schéma suivant résume le montage :

Schéma de connexion TwinCAT Master IO-Link Profinet IFM, détecteur de distance O5D150 BP et bouton capacitif

Les appareillages Profinet s’intègrent “naturellement” dans l’éco-système Siemens mais il est également possible d’associer ce matériel à TwinCAT 3, où classiquement, on utilise la communication EtherCAT. La procédure sera très proche de la mise en oeuve d’un coupleur Ethercat vu dans l’article précédent, mais nécessitera de configurer manuellement le matériel.

Configuration du Master IO-Link

Le logiciel Moneo d’IFM

On utilisera le logiciel Moneo dont une licence est fournie avec le Kit IO-Link d’IFM.

Il permet de configurer :

  • le Master IO-Link (AL1100)
  • les capteurs IO-Link associés
    • le bouton capacitif KT6101
    • le détecteur de distance O5D150

La configuration réseau choisie pour le Master est :

  • @IP : 192.168.1.198
  • Netmask : 255.255.255.0
  • Gateway : 192.168.1.1

Il est nécessaire que la carte réseau de votre PC soit sur la même plage d’adresse que le Master IO-Link. Dans cet exemple, l’@IP du PC est réglée à 192.168.1.44.

Moneo configuration Master IO-Link

Le détecteur de distance O5D150

Pour le détecteur de distance O5D150, il n’y pas grand chose à vérifier, la distance de détection est réglée à 100 cm, quand la distance mesurée est inférieure à 100 cm, la sortie SwitchState vaut ‘True’ et passe à ‘False’ quand la distance dépasse 100 cm. La plage de mesure du détecteur est comprise entre 5 cm et 200 cm.

Moneo configuration Détecteur de distance O5D150 IO-Link

Le bouton capacitif KT6101

Pour le bouton capacitif, il y a plusieurs modes de fonctionnement possible

  • dynamique,
  • static,
  • bistable.

plusieurs choix de couleurs de fonctionnement, de réglage de sensibilité, etc. Dans ce contexte, le mode Bistable avec deux couleurs prédéfinies est choisi:

  • bistable: un appui, la sortie s’active, un second appui la sortie s’éteint.
  • couleurs: bleu à l’état de repos, vert en marche.
Moneo configuration bouton capacitf KT6101 IO-Link

Avant de se déconnecter du logiciel Moneo, on n’oublie pas de faire un write des modifications effectuées.

Association du Master IO-Link à TwinCAT

Mise en place de la liaison Profinet

Après avoir crée un projet TwinCat, développer l’arborescence, et faire un clic droit sur :

  • I/O -> Devices -> Add New Item
TwinCAT IO Add New Item

On sélectionne un Profinet I/O Controller (RT)

  • on peut laisser le nom de base : Device 1
TwinCAT Insert Device Profinet I/O Controller

Sur Device 1, on va faire un clic droit :

  • Add New Item
TwinCAT Devices Add New Item

Et choisir dans Miscellaneous

  • un Profinet I/O Device
TwinCAT Device 1 Miscellaneous PROFINET IO Device

A ce Profinet I/O Device, on associe le fichier GSDML du MAster IO-Link Profinet AL1100. Le fichier GSDML est disponible sur le site d’IFM.

IFM AL1100 Master IO-Link Profinet GSDML

Configuration IP du Master IO-Link

Il faut modifier l’adresse IP en fonction de celle associée au Master IO-Link. Avec Moneo nous l’avions configuré à :

  • @IP = 192.168.1.198

C’est cette valeur que nous allons saisir

Configuration IP GSDML IO-Link Master

Ajout des capteurs IO-Link

En développant l’arborescence, dans API -> Term2 (4 ports), faire :

  • Add New Item
Term2 Add New Item

Au départ, les SubModules associés aux SubSlot 2,3,4,5 sont vides. Nous allons les configurer de la manière suivante :

  • Pour le SubSlot 2 (Port 1), nous allons brancher la bouton capacitif qui nécessite 4 bytes en Input et 1 byte en output. Comme cette configuration n’existe pas, nous mettrons 4 bytes en Input, 4 bytes en Output + PQI.
  • Pour le SubSlot 3 (Port 2), nous allons brancher le détecteur de distance qui nécessite 2 bytes en Input. Cette configuration existe et nous placerons 2 bytes en Input + PQI.
  • Pour le SubSlot 4 (Port 3), comme aucun capteur n’est branché, nous placerons Disabled
  • Pour le SubSlot 5 (Port 4), comme aucun capteur n’est branché, nous placerons Disabled
Device Configuration

Configuration de la PLC

Programme Main et Fonctions

Faire un clic droit sur PLC et faire :

  • Add New Item

Choisir un Standard PLC Project que nous nommerons PLC1.

TwinCAT PLC Add New Item

Fonction pour le capteur de distance

Nous allons dans un premier temps créer une fonction permettant de récupérer et mettre en forme des données du capteur de distance O5D150. Après avoir développé l’arborescence de PLC1, sur POUs, faire un clic droit et faire un Add POU :

  • donner le nom FB_O5D150
  • dans type, choisir Function Block
  • pour le langage, Structured Text (ST)

puis faire Open.

Add POU FB_O5D150 Function Block

Avant de commencer à coder la fonction, il est nécessaire de comprendre le formatage des données du capteur O5D150.

IO-Link Process Data Input O5D150

La documentation IFM montre que deux octets (Bytes) sont utilisés pour former un mot (Word 0) de 16 bits.

Il faut faire attention à la lecture des données, dans ce cas précis :

  • le premier octet contient
    • 8 bits de distance, il s’agit de l’octet de poids fort pour le calcul de la distance que l’on peut noter [x7x6x5x4_x3x2x1x0]
  • le second octet que l’on peut noter [y7y6y5y4_y3y2y1y0]
    • 4 bits de poids fort [y7y6y5y4] qui constituent l’information de poids faible de la distance
    • 4 bits de poids faible
      • le bit de poids le plus faible [y0] correspond au Switch state

La distance est codée sur 12 bits et correspond au regroupement suivant :

  • [x7x6x5x4_x3x2x1x0_y7y6y5y4]

Différentes opérations seront à effectuer :

  • récupérer les deux octets depuis le Master IO-Link
  • l’information du détecteur de distance est codé sur un bit, le Switch State [Out1]
  • former à partir des deux octets le mot Word 0 sur 16 bits
  • réaliser un décalage de 4 bits vers la droite pour récupérer les 12 bits de distance

Fonction O5D150 : variables

Deux variables de sortie seront crées:

  • nCurrentDistance de type INT pour afficher la distance mesurée entre 5 et 200 cm. Le petit n devant la variable précise qu’il s’agit d’une variable de type number (nombre).
  • bSwitchState de type BOOL pour afficher l’état TRUE ou FALSE de la valeur de mesure de distance (TRUE quand la distance mesurée est inférieure à 100 cm). Le petit b indique qu’il s’agit d’une variabele de type booléenne.

Variables d’affectation

aInputBytes AT %I* : ARRAY[0..1] OF BYTE;

c’est les variables que nous allons utiliser pour associer les deux octets d’Input contenus dans la trame IO-Link du O5D150.

  • AT %I* va permettre l’affection
  • ARRAY[0..1] OF BYTE signifie que nous avons un tableau de 2 octets
  • aInputBytes[0] constituera dans cet exemple l’octet de poids fort
  • aInputBytes[1] constituera l’octet de poids faible
  • nWord0 de type Word permettra de créer le mot de 16 bits contenant les informations de distance
  • nWord_temp0 et nWord_temp1 de type Word sont des variables tampon pour exécuter les opérations
    FB_O5D150 VAR

Fonction O5D150 : instanciation et appel de fonction

Pour que le fonction O5D150 puisse être utilisée par le main, il est nécessaire

  • qu’elle soit instanciée
  VAR
      fbO5D150  :   FB_O5D150;
  END_VAR
  • qu’elle soit appelée dans le main
  fbO5D150();

La capture d’écran ci-dessous synthétise ces actions :

TwinCAT instanciation et appel de fonction

Fonction O5D150 : liaisons variables et I/O

Avant de démarrer le développement du code de la fonction, il est nécessaire de créer les liaisons entre les variables physiques du Master IO-Link et les variables crées dans la fonction. Commencer par faire un activate de votre projet, suivi d’une sauvegarde et d’un build. Un onglet PLC1 Instance devrait apparaître avec les deux octets de variables d’affectation (d’instanciation) que nous venons de créer. Nous pouvons maintenant faire le Link de ces variables avec les Input du Master IO-Link.

TwinCAT liaisons variables PLC et IO

Sur la variable MAIN.fbO5D150.aInputBytes[0], faire Change Link et associer la variable Input data 2 Bytes[0] associé à la trame IO-Link du capteur O5D150.

TwinCAT liaisons InputBytes

Sur la variable MAIN.fbO5D150.aInputBytes[1], faire Change Link et associer la variable Input data 2 Bytes[1] associé à la trame IO-Link du capteur O5D150.

TwinCAT liaisons OutputBytes

on vérifie dans l’arberescnce du al1100 que des petites apparaisent dans Input data 2 Bytes [0] [1], preuve que les liens sont pris en compte.

TwinCAT vérification des Liaisons

Fonction O5D150 : le programme

Ci-dessous, un exemple de programme permettant de construire le mot de 16 bits avec des décalages. TO-WORD correspond à une opération de conversion de type, ici, la variable BYTE est convertie en WORD.

TwinCAT code pour la fonction O5D150

Il reste à faire le build, puis cliquer sur le Mode Run (case verte avec la roue). Un message d’erreur de ce type peut apparaître. J’ai éliminé ce message en mettant un temps de cycle à 16 ms sur le cycle PLC.

TwinCAT Cycle Time power of 2!
TwinCAT change Cycle Time

En configuration d’essai, la distance mesurée est de 20 cm

Test avec le détecteur de distance, mesure = 20 cm

Le programme nous renvoit bien 20 cm pour nCurrentDistance et bSwitchState est bien à TRUE car l’on est inférieur à 100 cm.

TwinCAT affichage des résultats de distance

Ajout du bouton Capacitif KT6101

Configuration et programme

Le mapping mémoire donné par IFM pour le KT6101 est le suivant :

  • 2 octets (Bytes) sont utilisés pour créer la variable PDV1.
  • 1 octet pour la variable device Status, mais comme les transmissions IO-Link se font par nombre d’octets pairs, un octet supplémentaire est présent et réservé pour des développements futurs.
PLC input mapping pour le bouton KT6101

Les étapes sont identiques à celles présentées précédemment et ci-dessous, une proposition de code fonction pour gérer le bouton. La valeur PDV1 correspond à une valeur d’appui, avec la valeur 3000, le doigt touche complètement le bouton, en dessous de 1000, on effleure à peine.

TwinCAT, exemple de programme fonction pour le bouton

Tests et essais

La fonction réagit correctement à l’appui du bouton.

  • bSSC1 passe de False à True quand on appui sur le bouton
  • nPDV1 passe de 0 à 3000 car l’appui s’est fait avec l’intégralité de la pulpe du pouce.
    TwinCAT, bouton KT6101 non appuyé
    TwinCAT, bouton KT6101 appuyé

Bilan

TwinCAT offre la possibilité d’associer “facilement” du matériel Profinet au Runtime. Il reste à vérifier :

  • l’histoire du temps de cycle en puissance de 2, j’ai mis 16 ms, il faudrait faire des essais avec 8ms et 4ms. La documentation du Master IO-Link laisserait penser que c’est possible avec 4ms…
  • le programme du bloc fonction est du type Quick and Dirty, il faudrait vérifier si il n’existe pas des fonctions dans TwinCAT qui permettrait d’obtenir un code plus “propre”?

TwinCAT est normalement prévu pour fonctionner avec le bus de terrain EtherCAT qui aurait permis de simplifier encore la procédure ( Master IO-Link EtherCAT AL1333 d’IFM), mais il reste étonnament convivial concernant l’intégration de protocoles tiers.