Les Automates Programmables Industriels ont un grand avantage, c’est leur simplicité de programmation qui permet une multitude de traitements des informations reçues sans toucher à la configuration matérielle, ou avec l’ajout de module.
Les programmes des API sont régis par la norme industrielle CEI 61131-3 (IEC 61131-3) définissant un ensemble de règles, d’architecture, et de langages de programmation qui seront donc communs à tous les fabricants. La norme a été mise à jour en 2013 en ajoutant beaucoup de possibilités à ceci, ouvrant le système vers des applications nouvelles incluant le multitraitement et les programmes pilotés par événement. La norme CEI 61131-3 convient à une large étendue des applications.
Cet article présente les différentes règles d’architecture d’un projet d’automatisme et présente les notions de programmation, et la syntaxe des cinq langages (LD, IL, FBD, ST, SFC) de programmation utilisée.
Architecture de projet Automatisme
La norme CEI 61131-3 définit une norme sur l’architecture qui est reprise par l’ensemble des programmes automate, une fois que vous aurez compris la logique, vous pourrez plus facilement passer d’un logiciel d’automate à un autre.
Vue structurelle de Ecostruxure ControlExpert
(Unity PRO)
Une configuration est spécifique à un type particulier de système de commande, y compris l’arrangement du matériel, c’est-à-dire les ressources processeurs, les adresses de mémoire pour les canaux d’I/O et les possibilités spécifiques du système. Une configuration est une plate-forme matérielle comprenant une ou plusieurs ressources.
Une ressource représente une machine virtuelle. Une ressource est divisée en plusieurs unités de programmation appelées POU. (La ressource est appelée Programme sur l’image)
Les Taches : les ressources sont organisées en taches, il peut avoir une ou plusieurs taches. Les tâches commandent l’exécution d’un ensemble de programmes et/ou de blocs fonctionnels. Sur l’image il existe deux taches : Mast (tâche principale) et FAST (Tache rapide).
Les POU (program organization unit) d’une ressource sont organisés en une architecture hiérarchisée de taches (task) et programme. Ceux-ci peuvent être exécutés périodiquement ou à l’occurrence d’un événement spécifique. Les POU peuvent être des programmes, des fonctions ou des blocs fonctionnels.
Les programmes peuvent être décrits avec les langages graphiques ou textuels SFC, FC, ST, IL, FBD, ou LD. Typiquement, un programme se compose d’un réseau de fonctions et de blocs fonctionnels, qui peuvent échanger des données. Les fonctions et les blocs fonctionnels sont les éléments de base, contenant une structure de données et un algorithme.
Déroulement du programme Automate
Le déroulement du programme automate se déroule en trois taches :
- Lecture des variables d’entrées ;
- exécution des programmes (Taches àPOU àPROGRAMME) ;
- Mise à jour des sorties.
Dans la majorité des cas le système est synchrone par rapport aux entrées et aux sorties, ce qui signifie que tous les changements se font en même temps ; pendant l’exécution des programmes, les E/S conservent la même valeur. Dans les autres cas, une variable peut prendre différentes valeurs en différents points du programme.
L’exécution des programmes se fait dans l’ordre de leur rangement dans la mémoire programme ; sauf s’il y a une interruption.
Le temps de cycle sépare deux lancements successifs de la même portion du programme d’application, comprend non seulement le temps de traitement, mais aussi le temps de mise à jour de la mémoire des E/S. Si un temps de cycle est programmé, la machine attend l’écoulement de ce temps avant de commencer l’exécution d’un nouveau cycle. En dehors du temps de cycle, il existe une possibilité de ne faire exécuter une portion de programme que dans certaines circonstances : c’est l’interruption (INT.). On a alors une exécution événementielle. Elle permet d’accélérer la réponse à une information jugée majeure.
Le temps d’acquisition du système d’entrée est le temps qui sépare l’apparition de l’information d’entrée (front montant sur le signal fourni par le détecteur) aux bornes d’entrée et son enregistrement dans la mémoire de l’automate. Il comprend le temps de passage par les filtres d’entrée et le temps de conversion.
Le temps d’exécution dépend de la taille du programme, la plupart des machines pouvant ne lire que la partie de la mémoire Programme utilisée par le programme en cours, mais change par exemple en cas de présence d’un saut avant ; il peut s’apprécier à partir d’une vitesse de référence exprimée en millisecondes par kilomots de la mémoire programme.
Le temps d’activation de sortie, séparant l’apparition des sorties dans la mémoire image de l’API de celle du signal sur les actionneurs, dépend notamment du type de sortie. Il est plus long pour les sorties à relais électromagnétiques.
Les langages de programmation d’automates
La description d’un programme peut être réalisée à l’aide des langages graphiques ou textuels suivants :
LD (Ladder Diagram) : Le langage à contacts se base sur une approche visuelle évoquant des schémas électriques (avec symbole US). Dans le cas de traitement booléen, les éléments fondamentaux sont des contacts normalement fermés (NF) ou normalement ouverts (NO), et des bobines. Ce langage est très efficace pour des systèmes combinatoires. Mais le Ladder n’est pas adapté aux programmes complexes impliquent un grand nombre de séquences ni adapté aux calculs complexes.
IL (Instruction List) : Les listes d’instructions est très proche du langage informatique dit assembleur. Une instruction débute sur une ligne, comporte un opérateur, un ou plusieurs opérandes. On peut introduire des étiquettes et des commentaires. Ce langage n’est pas celui jugé le plus pratique par la plupart des utilisateurs, car le passage d’une analyse souvent semi-graphique à la programmation n’est pas toujours aisé, pas plus que la mise au point du programme.
FBD (Function Block Diagram) : Les diagrammes de schémas fonctionnels sont un langage graphique qui permet de programmer à l’aide de blocs fonctionnels reliés les uns aux autres.
Les blocs fonctionnels peuvent être fournis par une bibliothèque ou personnalisés par l’utilisateur. Un des intérêts de ce langage réside dans la réduction du nombre d’erreurs, par l’utilisation de blocs validés. LE FBD est le langage le plus utilisé.
ST (Structured Text) : Le texte structuré est un langage textuel de haut niveau qui est utilisé pour décrire des procédures complexes. Il est très proche du langage Pascal. Il utilise des expressions, assemblage ordonné d’opérateurs , avec des priorités. Ce langage facilite donc la mise en œuvre d’algorithmes complexes comportant beaucoup de traitement numérique. En contrepartie, il est moins commode pour la mise au point de fonctions booléennes.
SFC (Sequential Function Charts) : Les graphes de fonction séquentielle sont issus du langage GRAFCET. Ce langage, de haut niveau, permet la programmation aisée de tous les procédés séquentiels, il est semblable Diagramme états-transitions. Ils sont particulièrement adaptés à la commande de cycles opératoires. Graphiquement, on se trouve devant une alternance étape(s) — transition-étape(s), etc., avec des liaisons dirigées. À chaque transition est associée une condition de franchissement de cette transition ; à chaque étape peuvent être définies des actions à entreprendre. Conditions de franchissement et actions s’expriment dans un des langages décrits ci-devant.
Type de variables
Les principaux types de variables :
Type | Nom | Taille | Étendue | Valeur |
---|---|---|---|---|
BOOL | Boolean | 1 | [0 (false),1 (true)] | Logique |
INT | Integer | 16 | [-32,768.32767] | Entière continue |
DINT | Double integer | 32 | [-231 231] | Continue entière double |
UINT | Unsigned integer | 16 | [0.65 535] | Entière continue non signée |
REAL | Real numbers | 32 | [-2128, 2128] | Continue réelle (flottante) |
BYTE | Bit string | 8 | [0.255] | demi-mot |
WORD | Bit string | 16 | [0.65535] | Mot |
DWORD | Bit string | 32 | [0,232] | double mot |
TIME | [0 ms, 10* 231ms] | Temps | ||
DATE | date | |||
STRING | 1 à 255 ASCII | Chaîne de caractères |
D’autres combinaisons existent, mais sont peu utilisées : SINT, USINT, UDINT, LINT, ULINT, LWORD, LREAL.
Les variables peuvent être locales à un programme, ou globales à une ressource. Les variables locales ne peuvent être utilisées que par un seul programme. Les variables globales peuvent être utilisées par tous les programmes de la ressource. L’information « locale » ou « globale » s’appelle la portée d’une variable.
Il existe des fonctions, pour réaliser des conversions de types. La fonction INT_TO_REAL permet de passer d’un INTeger en un réal.
Adressage
Les variables sont déclarées en utilisant un nom symbolique et une adresse logique.
% | Attribut | Type | i.j.k |
% | I : Entrée Q : Sortie M : mémoire
K : constante |
X : boolean B : 8 bits W : 16 bits D : 32 bits F : flottant R : 32 bits T : TEMPS
S : STRING |
i: numéro de voie j : numéro de carte
k : numéro de rack |
% IX0.1.5 Entrée, Boolean, voie n° 5, de la carte n° 1, du rack n° 0
Peut s’écrire aussi % I1.5, quand le type n’est pas défini il est par défaut Boolean, quand le rack n’est pas défini il est par défaut 0