40
Manuel de programmation (Références 1756 ControlLogix, 1769 CompactLogix, 1789 SoftLogix, 1794 FlexLogix, PowerFlex 700S avec DriveLogix) Texte structuré des automates Logix5000

1756-PM007-FR, Texte structuré des automates Logix5000€¦ · l’entrée doit avoir le même état à chaque référencement, mettez la valeur d’entrée en mémoire tampon et

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • Manuel de programmation

    (Références 1756 ControlLogix, 1769 CompactLogix, 1789 SoftLogix,

    1794 FlexLogix, PowerFlex 700S avec DriveLogix)

    Texte structuré des automates Logix5000

  • Informations importantes destinées à l’utilisateurLes équipements électroniques possèdent des caractéristiques de fonctionnement différentes de celles des équipements électromécaniques. La publication SGI-1.1, « Safety Guidelines for the Application, Installation and Maintenance of Solid State Controls » (disponible auprès de votre agence commerciale Rockwell Automation ou en ligne sur le site http://www.literature.rockwellautomation.com) décrit certaines de ces différences. En raison de ces différences et de la diversité des utilisations des équipements électroniques, les personnes qui en sont responsables doivent s’assurer de l’acceptabilité de chaque application.

    La société Rockwell Automation, Inc. ne saurait en aucun cas être tenue pour responsable ni être redevable des dommages indirects ou résultant de l’utilisation ou de l’application de cet équipement.

    Les exemples et schémas contenus dans ce manuel sont présentés à titre indicatif seulement. En raison du nombre important de variables et d’impératifs associés à chaque installation, la société Rockwell Automation, Inc. ne saurait être tenue pour responsable ni être redevable des suites d’utilisation réelle basée sur les exemples et schémas présentés dans ce manuel.

    La société Rockwell Automation, Inc. décline également toute responsabilité en matière de propriété intellectuelle et industrielle concernant l’utilisation des informations, circuits, équipements ou logiciels décrits dans ce manuel.

    Toute reproduction totale ou partielle du présent manuel sans autorisation écrite de la société Rockwell Automation, Inc. est interdite.

    Des remarques sont utilisées tout au long du manuel pour attirer votre attention sur les mesures de sécurité à prendre en compte :

    Allen-Bradley, Rockwell Automation et TechConnect sont des marques commerciales de Rockwell Automation, Inc.

    Les marques commerciales n’appartenant pas à Rockwell Automation sont la propriété de leurs sociétés respectives.

    AVERTISSEMENTActions ou situations risquant de provoquer une explosion dans un environnement dangereux et d’entraîner des blessures pouvant être mortelles, des dégâts matériels ou des pertes financières.

    IMPORTANT Informations particulièrement importantes dans le cadre de l’utilisation du produit.

    ATTENTION Actions ou situations risquant d’entraîner des blessures pouvant être mortelles, des dégâts matériels ou des pertes financières. Ces mises en garde vous aident à identifier un danger, à éviter un danger et à en discerner les conséquences.

    DANGER D’ELECTROCUTION

    Les étiquettes ci-contre, placées sur l’équipement ou à l’intérieur (un variateur ou un moteur, par ex.), signalent la présence éventuelle de tensions électriques dangereuses.

    RISQUE DE BRULURE

    Les étiquettes ci-contre, placées sur l’équipement ou à l’intérieur (un variateur ou un moteur, par ex.) indiquent au personnel que certaines surfaces peuvent atteindre des températures particulièrement élevées.

    http://literature.rockwellautomation.com

  • Table des matièresPréface Objet de ce manuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    Conventions utilisées dans ce manuel . . . . . . . . . . . . . . . . . . 5

    Chapter 1Programmation en texte structuré Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    Affectations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Spécification d’une affectation non rémanente. . . . . . . . . 10Attribution d’un caractère ASCII à une chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Utilisation des opérateurs et des fonctions arithmétiques . 13Utilisation des opérateurs relationnels. . . . . . . . . . . . . . . 14Utilisation des opérateurs logiques . . . . . . . . . . . . . . . . . 16Utilisation des opérateurs sur bits . . . . . . . . . . . . . . . . . . 17Détermination de l’ordre d’exécution . . . . . . . . . . . . . . . 17

    Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Instructions de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    Certains mots clés sont réservés pour une utilisation future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    IF...THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20CASE...OF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23FOR…DO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26WHILE…DO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29REPEAT…UNTIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Commentaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    Publication 1756-PM007B-FR-P – Juillet 2008 3

  • Table des matières

    4 Publication 1756-PM007B-FR-P – Juillet 2008

  • Préface

    Objet de ce manuel Ce manuel indique comment programmer les automates Logix5000 à l’aide du langage de programmation en texte structuré. Il fait partie d’un ensemble de manuels relatifs aux procédures communes de programmation et d’exploitation des automates Logix5000. Pour connaître la liste complète des manuels de procédures communes, reportez-vous à la publication 1756-PM001, « Logix 5000 Controllers Common Procedures Programming Manual ».

    Le terme « automate Logix5000 » désigne tout automate basé sur le système d’exploitation Logix5000, tels que les automates :

    • CompactLogix ;• ControlLogix ;• DriveLogix ;• FlexLogix ;• SoftLogix5800.

    Conventions utilisées dans ce manuel

    La typographie de certains textes est différente de celle utilisée pour le reste du texte.

    Un texte en Identifie Par exemple : Signifie :

    Italique le nom réel d’un élément que vous voyez sur votre écran ou dans un exemple

    clic-droit Défini par l’utilisateur …

    Cliquez avec la touche droite de la souris sur l’élément dénommé « Défini par l’utilisateur ».

    courier information que vous devez fournir en fonction de votre application (une variable)

    clic-droit nom_du_programme …

    Vous devez identifier le programme spécifique dans votre application. Habituellement, c’est un nom ou une variable que vous avez défini(e).

    entre crochets une touche du clavier Appuyez sur [Entrée]. Appuyez sur la touche Entrée.

    Publication 1756-PM007B-FR-P – Juillet 2008 5

  • Préface

    Notes :

    6 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapter 1

    Programmation en texte structuré

    Introduction Le texte structuré est un langage de programmation textuel qui utilise des déclarations pour définir ce qui doit être exécuté.

    • Le texte structuré n’est pas sensible à la casse.• Utilisez des tabulations et des retours chariot (lignes séparées)

    pour faciliter la lecture de votre texte structuré. Ils n’ont pas d’effet sur l’exécution du texte structuré.

    Le texte structuré n’est pas sensible à la casse. Le texte structuré peut contenir les éléments suivants :

    Terme Définition Exemples

    Affectation

    (voir page 9)

    Utilisez une instruction d’affectation pour attribuer des valeurs à des points.

    L’opérateur := est l’opérateur d’affectation.

    Terminez l’affectation par un point virgule « ; ».

    point := expression;

    Expression

    (voir page 11)

    Une expression est une partie d’une instruction complète d’affectation ou de test. Une expression génère un nombre (expression numérique) ou un état vrai ou faux (expression booléenne).

    Une expression comporte :

    Des points Une zone de mémoire dénommée dans laquelle sont stockées des données (BOOL, SINT,INT,DINT, REAL, chaîne).

    valeur1

    Des immédiats Une valeur constante 4

    Des opérateurs Un symbole ou une mnémonique qui définit une opération dans une expression.

    point1 + point2

    point1 >= valeur1

    Des fonctions Quand elle est exécutée, une fonction génère une valeur. Utilisez des parenthèses pour contenir l’opérande d’une fonction.

    Bien que leur syntaxe soit similaire, les fonctions se différencient des instructions car les fonctions ne peuvent être utilisées que dans des expressions. Les instructions ne peuvent pas être utilisées dans des expressions.

    fonction(point1)

    Publication 1756-PM007B-FR-P – Juillet 2008 7

  • Programmation en texte structuré Chapitre1

    Instruction

    (voir page 18)

    Une instruction est une déclaration autonome.

    Une instruction utilise des parenthèses pour contenir ses opérandes.

    Selon l’instruction, il peut y avoir zéro, une ou plusieurs opérandes.

    Lorsqu’elle est exécutée, une instruction peut générer une ou plusieurs valeurs appartenant à une structure de données.

    Terminez l’instruction par un point virgule « ; ».

    Bien que leur syntaxe soit similaire, les instructions se différencient des fonctions car les instructions ne peuvent pas être utilisées que dans des expressions. Les fonctions ne sont utilisables que dans des expressions.

    instruction();

    instruction(opérande);

    instruction(opérande1, opérande2, opérande3);

    Instruction de test

    (voir page 19)

    Une instruction conditionnelle utilisée pour déclencher un code de texte structuré (c.-à-d. d’autres déclarations).

    Terminez l’instruction de test par un point virgule « ; ».

    IF...THEN

    CASE

    FOR...DO

    WHILE...DO

    REPEAT...UNTIL

    EXIT

    Commentaire

    (voir page 35)

    Texte expliquant ou clarifiant la finalité d’une section de texte structuré.

    • Utilisez les commentaires pour faciliter l’interprétation du texte structuré.• Les commentaires n’affectent pas l’exécution du texte structuré.• Les commentaires peuvent apparaître n’importe où dans le texte structuré.

    //commentaire

    (*début du commentaire. . . fin du commentaire*)

    /*début du commentaire. . . fin du commentaire*/

    Terme Définition Exemples

    8 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Affectations Utilisez une affectation pour modifier la valeur stockée dans un point. La syntaxe d’une affectation est la suivante :

    point := expression;

    où :

    Le point conserve la valeur attribuée jusqu’à ce qu’une autre affectation modifie la valeur.

    L’expression peut être simple, par ex. une constante ou un autre nom de point ; ou l’expression peut être complexe et comprendre plusieurs opérateurs et/ou fonctions.

    Elément Description

    point Représente le point qui reçoit la nouvelle valeur.

    Le point doit être de type BOOL, SINT, INT, DINT ou REAL.

    := C’est le symbole de l’affectation.

    expression Représente la nouvelle valeur attribuée au point.

    Si le type de donnée du point est

    Utilisez ce type d’expression

    BOOL Expression booléenne

    SINT

    INT

    DINT

    REAL

    Expression numérique

    ; Termine l’affectation.

    CONSEIL La mise à jour des données de module d’E/S est asynchrone par rapport à l’exécution de la logique. Si vous référencez une entrée de nombreuse fois dans votre logique, l’entrée pourrait changer d’état entre des références séparées. Si l’entrée doit avoir le même état à chaque référencement, mettez la valeur d’entrée en mémoire tampon et prenez comme référence ce point tampon.

    Publication 1756-PM007B-FR-P – Juillet 2008 9

  • Programmation en texte structuré Chapitre1

    Spécification d’une affectation non rémanente

    L’affectation non rémanente est différente de l’affectation standard décrite précédemment car le point d’une affectation non rémanente est remis à zéro chaque fois que l’automate :

    • passe en mode d’exécution ;• quitte une étape de graphe de fonctionnement séquentiel si

    vous configurez ce dernier pour une remise à zéro automatique. (Ceci s’applique uniquement si vous imbriquez l’affectation dans l’action de l’étape ou utilisez l’action pour appeler un sous-programme de texte structuré à l’aide d’une instruction JSR).

    La syntaxe d’une affectation non rémanente est la suivante :

    point [:=] expression;

    où :

    Elément Description

    point Représente le point qui reçoit la nouvelle valeur.

    Le point doit être de type BOOL, SINT, INT, DINT ou REAL.

    [:=] C’est le symbole de l’affectation non rémanente.

    expression Représente la nouvelle valeur attribuée au point.

    Si le type de donnée du point est

    Utilisez ce type d’expression

    BOOL Expression booléenne

    SINT

    INT

    DINT

    REAL

    Expression numérique

    ; Termine l’affectation.

    10 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Attribution d’un caractère ASCII à une chaîne de caractères

    Utilisez l’opérateur d’affectation pour attribuer un caractère ASCII à un élément du membre de données d’un point de chaîne. Pour attribuer un caractère, spécifiez la valeur du caractère ou spécifiez le nom du point, le membre de données et l’élément du caractère.

    Pour ajouter ou insérer une chaîne de caractères à un point de chaîne, utilisez une de ces instructions de chaîne ASCII.

    Expressions Une expression peut être un nom de point, une équation ou une comparaison. Pour écrire une expression, utilisez l’un de ces éléments :

    • nom de point stockant la valeur (variable) ;• nombre que vous entrez directement dans l’expression (valeur

    immédiate) ;

    • fonctions, telles que : ABS, TRUNC ;• opérateurs, tels que : +, –, , Et, Ou.

    Lorsque vous écrivez des expressions, suivez ces règles générales :

    • utilisez n’importe quelle combinaison de lettres majuscules et minuscules. Par exemple, ces trois variantes de « AND » sont acceptables : AND, And, and ;

    • pour des critères plus complexes, utilisez des parenthèses pour regrouper des expressions à l’intérieur d’expressions. Ceci facilite la lecture de l’expression globale et garantit que l’expression s’exécute selon la séquence désirée.

    Ceci est valable Ceci n’est pas valable

    chaîne1.DATA[0]:= 65; chaîne1.DATA[0]:= A;

    chaîne1.DATA[0]:= chaîne2.DATA[0]; chaîne1 := chaîne2;

    Pour : Utilisez cette instruction

    ajouter des caractères à la fin d’une chaîne CONCAT

    insérer des caractères dans une chaîne INSERT

    IMPORTANT Vous pouvez ajouter des commentaires utilisateur en ligne. Par conséquent, la commutation de langue locale ne s’applique pas à votre langage de programmation.

    Publication 1756-PM007B-FR-P – Juillet 2008 11

  • Programmation en texte structuré Chapitre1

    En texte structuré, vous utilisez deux types d’expression :

    Expression booléenne : une expression qui produit la valeur booléenne 1 (vrai) ou 0 (faux).

    • Une expression booléenne utilise des points booléens, des opérateurs relationnels et logiques pour comparer des valeurs ou vérifier si des conditions sont vraies ou fausses. Par exemple, point1>65.

    • Une expression booléenne simple peut être constituée d’un seul point BOOL.

    • Habituellement, vous utiliserez des expressions booléennes pour conditionner l’exécution d’autres logiques.

    Expression numérique : une expression permettant de calculer une valeur entière ou en virgule flottante.

    • Une expression numérique utilise des opérateurs arithmétiques, des fonctions arithmétiques et des opérateurs sur bit. Par exemple, point1+5.

    • Souvent, vous inclurez une expression numérique dans une expression booléenne. Par exemple, (point1+5)>65.

    Utilisez le tableau suivant pour choisir les opérateurs de vos expressions.

    Si vous voulez Alors

    calculer une valeur arithmétique Utilisation des opérateurs et des fonctions arithmétiques en page 13.

    comparer deux valeurs ou chaînes Utilisation des opérateurs relationnels en page 14.

    contrôler si des conditions sont vraies ou fausses

    Utilisation des opérateurs logiques en page 16.

    comparer des bits à l’intérieur de valeurs Utilisation des opérateurs sur bits en page 17.

    12 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Utilisation des opérateurs et des fonctions arithmétiques

    Vous pouvez combiner de nombreux opérateurs et fonctions dans des expressions arithmétiques.

    Les opérateurs arithmétiques calculent de nouvelles valeurs.

    Les fonctions arithmétiques exécutent des opérations mathématiques spécifiant ainsi une constante, un point non booléen ou une expression pour la fonction.

    Pour : Utilisez cet opérateur Type de données optimal

    additionner + DINT, REAL

    soustraire/inverser – DINT, REAL

    multiplier * DINT, REAL

    élever à une puissance (x à la puissance y)

    ** DINT, REAL

    diviser / DINT, REAL

    diviser modulo MOD DINT, REAL

    Pour Utilisez cette fonction Type de données optimal

    Valeur absolue ABS (expression_numérique) DINT, REAL

    Cosinus d’arc ACOS (expression_numérique) REAL

    Sinus d’arc ASIN (expression_numérique) REAL

    Tangente d’arc ATAN (expression_numérique) REAL

    Cosinus COS (expression_numérique) REAL

    Radians en degrés DEG (expression_numérique) DINT, REAL

    Logarithme naturel LN (expression_numérique) REAL

    Logarithme décimal LOG (expression_numérique) REAL

    Degrés en radians RAD (expression_numérique) DINT, REAL

    Sinus SIN (expression_numérique) REAL

    Racine carrée SQRT (expression_numérique) DINT, REAL

    Tangente TAN (expression_numérique) REAL

    Tronquer TRUNC (expression_numérique) DINT, REAL

    Publication 1756-PM007B-FR-P – Juillet 2008 13

  • Programmation en texte structuré Chapitre1

    Par exemple :

    Utilisation des opérateurs relationnels

    Les opérateurs relationnels comparent deux valeurs ou chaînes pour fournir un résultat vrai ou faux. Le résultat d’une opération relationnelle est une valeur booléenne.

    Utilisez ces opérateurs opérationnels.

    Utilisez ce format Exemple

    Dans cette situation Vous écririez

    valeur1 opérateur valeur2 Si gain_4 et gain_4_adj sont des points DINT et que votre spécification indique : « Ajouter 15 à gain_4 et stocker le résultat dans gain_4_adj ».

    gain_4_adj := gain_4+15;

    opérateur valeur1 Si alarme et alarme_haute sont des points DINT et que votre spécification indique :« Inverser alarme_haute et stocker le résultat dans alarme ».

    alarme:= -alarme_haute;

    fonction(expression_numérique) Si surcourse et surcourse_POS sont des points DINT et que votre spécification indique : « Calculer la valeur absolue de surcourse et stocker le résultat dans surcourse_POS ».

    surcourse_POS := ABS(surcourse);

    valeur1 opérateur (fonction((valeur2+valeur3)/2) Si réglage et position sont des points DINT, si capteur1 et capteur2 sont des points REAL et que votre spécification indique : « Trouver la valeur absolue de la moyenne de capteur1 et capteur2, ajouter la valeur de réglage et stocker le résultat dans position ».

    position := réglage + ABS((capteur1 + capteur2)/2);

    Si la comparaison est Le résultat est

    Vraie 1

    Fausse 0

    Pour cette comparaison : Utilisez cet opérateur : Type de données optimal :

    Egal à = DINT, REAL, chaîne

    Inférieur à < DINT, REAL, chaîne

    Inférieur ou égal à DINT, REAL, chaîne

    Supérieur ou égal à >= DINT, REAL, chaîne

    Négation DINT, REAL, chaîne

    14 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Par exemple :

    Comment les chaînes sont-elles évaluées

    Les valeurs hexadécimales des caractères ASCII déterminent si une chaîne est inférieure ou supérieure à une autre chaîne.

    • Quand deux chaînes sont triées comme dans un annuaire téléphonique, l’ordre des chaînes détermine laquelle est supérieure.

    • Des chaînes sont égales si leurs caractères correspondent.• Les caractères sont sensibles à la casse. « A » majuscule ($41)

    n’est pas égal à « a » minuscule ($61).

    Utilisez ce format EXEMPLE

    Dans cette situation Vous écririez

    valeur1 opérateur valeur2 Si temp est un point DINT et que votre spécification dit : « Si temp est inférieur à 100° alors…»

    IF temp= longueur);

    Caractères ASCII Codes Hexa

    1ab $31$61$62

    1b $31$62

    A $41

    AB $41$42

    B $42

    a $61

    AB $61$62

    supérieur

    inféri eur

    AB < B

    a > B

    Publication 1756-PM007B-FR-P – Juillet 2008 15

  • Programmation en texte structuré Chapitre1

    Utilisation des opérateurs logiques

    Les opérateurs logiques vous permettent de contrôler si de multiples conditions sont vraies ou fausses. Le résultat d’une opération logique est une valeur booléenne.

    Utilisez ces opérateurs logiques :

    Par exemple :

    Si la comparaison est Le résultat est

    Vraie 1

    Fausse 0

    Pour Utilisez cet opérateur Type de données

    ET logique &, AND BOOL

    OU logique OR BOOL

    OU exclusif logique XOR BOOL

    Complément logique NOT BOOL

    Utilisez ce format EXEMPLE

    Dans cette situation Vous écririez

    pointBOOL Si cellule-photo est un point BOOL et que votre spécification indique : « Si cellule-photo_1 est vraie alors…»

    IF cellule-photo THEN...

    NOT pointBOOL Si cellule-photo est un point BOOL et que votre spécification indique : « Si cellule-photo est fausse alors…»

    IF NOT cellulephoto THEN...

    expression1 & expression2 Si cellule-photo est un point booléen, temp est un point DINT et que votre spécification indique : « Si cellule-photo est vraie et que temp est inférieur à 100° alors…»

    IF cellulephoto & (temp

  • Chapitre1 Programmation en texte structuré

    Utilisation des opérateurs sur bits

    Les opérateurs sur bits manipulent les bits inclus dans une valeur en fonction de deux valeurs.

    Par exemple :

    Détermination de l’ordre d’exécution

    Les opérations que vous écrivez dans une expression sont exécutées dans un ordre prescrit, pas nécessairement de gauche à droite.

    • Des opérations de même ordre sont exécutées de gauche à droite.

    • Si une expression contient plusieurs opérateurs ou fonctions, groupez les conditions entre parenthèses « ( ) ». Ceci garantit l’ordre d’exécution correct et facilite la lecture de l’expression.

    Pour Utilisez cet opérateur Type de données optimal

    ET sur bits &, AND DINT

    OU sur bits OR DINT

    Ou exclusif sur bits XOR DINT

    Complément de bits NOT DINT

    Utilisez ce format Exemple

    Dans cette situation Vous écririez

    valeur1 opérateur valeur2 Si entrée1, entrée2 et résultat1 sont des points DINT et que votre spécification indique : « Calculer le résultat au niveau du bit d’entrée1 et d’entrée2. Stocker le résultat dans résultat1. »

    résultat1 := entrée1 AND entrée2;

    Ordre Fonctionnement

    1. ()

    2. fonction (…)

    3. **

    4. – (négation)

    5. NOT

    6. *, /, MOD

    7. +, – (soustraction)

    8. =

    9. =,

    10. &, AND

    11. XOR

    12. OR

    Publication 1756-PM007B-FR-P – Juillet 2008 17

  • Programmation en texte structuré Chapitre1

    Instructions Les déclarations de texte structuré peuvent aussi être des instructions. Une instruction de texte structuré s’exécute chaque fois qu’elle est scrutée. Une instruction de texte structuré incluse dans une instruction de test s’exécute chaque fois que les conditions de l’instruction de test sont vraies. Si les conditions de l’instruction de test sont fausses, les déclarations incluses dans l’instruction de test ne sont pas scrutées. Il n’y a pas de condition de ligne ou de transition d’état pouvant déclencher l’exécution.

    Ceci est différent des instructions de bloc fonctionnel qui utilisent « EnableIn » pour déclencher l’exécution. Les instructions de texte structuré s’exécutent comme si « EnableIn » était toujours vrai.

    Ceci est différent aussi des instructions de logique à relais qui utilisent la condition d’entrée de ligne pour déclencher l’exécution. Certaines instructions de logique à relais s’exécutent seulement quand la condition d’entrée de ligne bascule de fausse à vraie. Ce sont des instructions de logique à relais transitoires. En texte structuré, les instructions seront exécutées à chaque scrutation sauf si vous en pré-conditionnez l’exécution.

    Par exemple, l’instruction ABL est une instruction transitoire en logique à relais. Dans cet exemple, l’instruction ABL est exécutée uniquement pendant une scrutation lorsque point_xic passe de zéro à un. L’instruction ABL ne s’exécute pas lorsque point_xic reste à un ou à zéro.

    En texte structuré, si vous écrivez cet exemple ainsi :

    IF point_xic THEN ABL(0,contrôle_série);

    END_IF;

    l’instruction ABL sera exécutée à chaque scrutation pour laquelle point_xic est vrai, et non pas uniquement lorsque point_xic passe de zéro à un.

    Si vous souhaitez que l’instruction ABL soit exécutée seulement lorsque point_xic passe de zéro à un, vous devez conditionner

    18 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    l’instruction en texte structuré. Utilisez un monostable pour déclencher l’exécution.

    Instructions de test Les instructions de test peuvent être programmées isolément ou imbriqués à l’intérieur d’autres instructions de test.

    Certains mots clés sont réservés pour une utilisation future

    Ces instructions de test ne sont pas disponibles :

    • GOTO• REPEAT

    Le logiciel RSLogix 5000 ne vous permettra pas de les utiliser.

    osri_1.InputBit := point_xic;

    OSRI(osri_1);

    IF (osri_1.OutputBit) THEN

    ABL(0,contrôle_série);

    END_IF;

    Si vous voulez Utilisez cette instruction de test

    Effectuer une action si ou quand des conditions spécifiques se produisent

    IF...THEN

    Sélectionner une action en fonction d’une valeur numérique

    CASE...OF

    Effectuer une action un nombre de fois spécifique avant d’effectuer une autre action

    FOR...DO

    Poursuivre les actions tant que certaines conditions sont vraies

    WHILE...DO

    Poursuivre les actions jusqu’à ce qu’une condition soit vraie

    REPEAT...UNTIL

    Publication 1756-PM007B-FR-P – Juillet 2008 19

  • Programmation en texte structuré Chapitre1

    IF...THEN Utilisez IF…THEN pour effectuer des actions si ou quand des conditions spécifiques se produisent.

    Opérandes :

    Texte structuré

    Description : La syntaxe est :

    Pour utiliser ELSIF ou ELSE, suivez ces recommandations

    1. Pour choisir parmi plusieurs groupes de déclarations possibles, ajoutez une ou plusieurs déclarations ELSIF.

    • Chaque ELSIF représente un chemin alternatif.• Spécifiez autant de chemins ELSIF que nécessaire.• L’automate exécute le premier IF ou ELSIF vrai et saute le

    reste des ELSIF et l’ELSE.

    2. Pour effectuer des actions quand toutes les conditions IF ou ELSIF sont fausses, ajoutez une déclaration ELSE.

    Opérande Type Format Entrer

    Expression_booléenne

    BOOL Point

    Expression

    point ou expression boléen(ne) qui génère une valeur booléenne (expression booléenne)

    IF expression_booléenne THEN

    ;

    END_IF;

    IF expression_booléenne1 THEN

    ; Déclarations à exécuter quand expression_booléenne1 est vraie.

    .

    .

    FacultatifELSIF expression_booléenne2 THEN

    ; Déclarations à exécuter quand expression_booléenne2 est vraie.

    .

    .

    FacultatifELSE

    ; Déclarations à exécuter quand les deux expressions sont fausses.

    .

    .

    END_IF;

    20 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Ce tableau résume les combinaisons de IF, THEN, ELSIF et ELSE.

    Drapeaux d’état arithmétiques : pas affectés

    Conditions de défaut : Aucune

    Exemple 1 : IF…THEN

    Exemple 2 : IF…THEN…ELSE

    Le symbole [:=] indique à l’automate d’éteindre le voyant lorsqu’il :

    • passe en mode d’exécution ;• quitte une étape de graphe de fonctionnement séquentiel si

    vous configurez ce dernier pour une remise à zéro automatique. (Ceci s’applique uniquement si vous imbriquez l’affectation dans l’action de l’étape ou utilisez l’action pour appeler un sous-programme de texte structuré à l’aide d’une instruction JSR).

    Si vous voulez Et Alors utilisez cette instruction de test

    effectuer une action si ou quand des conditions sont vraies

    ne pas effectuer d’action quand les conditions sont fausses

    IF…THEN

    effectuer une autre action si les conditions sont fausses

    IF…THEN…ELSE

    choisir parmi des déclarations alternatives (ou des groupes de déclarations) en fonction des conditions d’entrée

    ne pas effectuer d’action quand les conditions sont fausses

    IF…THEN…ELSE

    exécuter des déclarations par défaut si toutes les conditions sont fausses

    IF…THEN…ELSIF…ELSE

    Si vous voulez ceci Saisissez ce texte structuré

    IF rebuts > 3 alors IF rebuts > 3 THEN

    convoyeur = off (0) convoyeur := 0;

    alarme = on (1) alarme:= 1;

    END_IF;

    Si vous voulez ceci Saisissez ce texte structuré

    Si le contact de sens du convoyeur = avant (1) alors IF sens_convoyeur THEN

    voyant = off voyant := 0;

    Sinon voyant = on ELSE

    voyant [:=] 1;

    END_IF;

    Publication 1756-PM007B-FR-P – Juillet 2008 21

  • Programmation en texte structuré Chapitre1

    Exemple 3 : IF…THEN…ELSE

    Le symbole [:=] indique à l’automate de remettre à zéro Domino. Entrée lorsqu’il :

    • passe en mode d’exécution ;• quitte une étape de graphe de fonctionnement séquentiel si

    vous configurez ce dernier pour une remise à zéro automatique. (Ceci s’applique uniquement si vous imbriquez l’affectation dans l’action de l’étape ou utilisez l’action pour appeler un sous-programme de texte structuré à l’aide d’une instruction JSR).

    Exemple 4 : IF…THEN…ELSIF…ELSE

    Si vous voulez ceci Saisissez ce texte structuré

    Si le détecteur domino bas = bas (On) et que le détecteur domino haut = non haut (On) alors

    IF Domino.Bas & Domino.Haut THEN

    vanne entrée = ouvert (On) Domino.Entrée [:=] 1;

    Jusqu’à ce que le détecteur domino haut = haut (Off) ELSIF NOT(Sucre.Haut) THEN

    Domino.Entrée := 0;

    END_IF;

    Si vous souhaitez ceci Saisissez ce texte structuré

    Si la température du réservoir > 100 IF temp.réservoir > 200 THEN

    alors pompe = lente pompe.rapide :=1; pompe.lente :=0; pompe.off :=0;

    Si la température du réservoir > 200 ELSIF temp.réservoir > 100 THEN

    alors pompe = rapide pompe.rapide :=0; pompe.lente :=1; pompe.off :=0;

    sinon pompe = off ELSE

    pompe.rapide :=0; pompe.lente :=0; pompe.off :=1;

    END_IF;

    22 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    CASE...OF Utilisez CASE pour choisir l’action à effectuer en fonction d’une valeur numérique.

    Opérandes :

    texte structuré

    Description : La syntaxe est :

    Opérande Type Format Entrer

    expression_

    numérique

    SINT

    INT

    DINT

    REAL

    Point

    Expression

    point ou expression qui génère un nombre (expression numérique)

    sélecteur SINT

    INT

    DINT

    REAL

    Immédiat Même type qu’expression_numérique

    IMPORTANT Si vous utilisez des valeurs REAL, choisissez une plage de valeurs pour un sélecteur, car une valeur réelle est plus probablement comprise entre les limites d’une plage de valeurs qu’exactement égale à une valeur spécifique.

    CASE expression_numérique OF

    sélecteur1: déclaration;

    sélecteurN: déclaration;

    ELSE

    déclaration;

    END_CASE;

    CASE expression_numérique OF

    Définissez autant de valeurs alternatives de

    sélection (chemins) que nécessaire

    sélecteur1 : ;...

    Déclarations à exécuter quand expression_numérique = sélecteur1

    sélecteur2 : ;...

    Déclarations à exécuter quand expression_numérique = sélecteur2

    sélecteur3 : ;...

    Déclarations à exécuter quand expression_numérique = sélecteur3

    Facultatif

    ELSE

    ;...

    Déclarations à exécuter quand expression_numérique ne correspond à aucun sélecteur

    END_CASE;

    Publication 1756-PM007B-FR-P – Juillet 2008 23

  • Programmation en texte structuré Chapitre1

    La syntaxe de saisie des valeurs de sélection est :

    La structure CASE est similaire à la déclaration de commutation des langages de programmation C ou C++. Toutefois, avec la structure CASE l’automate exécute uniquement les déclarations qui sont associées avec la première valeur de sélection correspondante. L’exécution s’interrompt toujours après les déclarations associées à ce sélecteur et se dirige vers la déclaration END_CASE.

    Drapeaux d’état arithmétiques : pas affectés

    Conditions de défaut : Aucune

    Exemple

    Quand le sélecteur est Entrer

    une valeur valeur : déclaration

    plusieurs valeurs distinctes valeur1, valeur2, valeurN : ;

    Utilisez une virgule (,) pour séparer chaque valeur.

    une plage de valeurs valeur1...valeurN : ;

    Utilisez deux points (..) pour identifier la plage.

    des valeurs distinctes plus une plage de valeurs

    valeura, valeurb, valeur1...valeurN : ;

    24 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Exemple

    Le symbole [:=] indique à l’automate d’effacer aussi les points des sorties lorsqu’il :

    • passe en mode d’exécution ;• quitte une étape de graphe de fonctionnement séquentiel si

    vous configurez ce dernier pour une remise à zéro automatique. (Ceci s’applique uniquement si vous imbriquez l’affectation dans l’action de l’étape ou utilisez l’action pour appeler un sous-programme de texte structuré à l’aide d’une instruction JSR).

    Si vous souhaitez ceci Saisissez ce texte structuré

    Si numéro de recette = 1 alors CASE numéro_recette OF

    Ingrédient A sortie 1 = ouverte (1) 1: Ingrédient_A.Sortie_1 :=1;

    Ingrédient B sortie 4 = ouverte (1) Ingrédient_B.Sortie_4 :=1;

    Si numéro de recette = 2 ou 3 alors 2,3: Ingrédient_A.Sortie_4 :=1;

    Ingrédient A sortie 4 = ouverte (1) Ingrédient_B.Sortie_2 :=1;

    Ingrédient B sortie 2 = ouverte (1)

    Si numéro de recette = 4, 5, 6, ou 7 alors 4..7: Ingrédient_A.Sortie_4 :=1;

    Ingrédient A sortie 4 = ouverte (1) Ingrédient_B.Sortie_2 :=1;

    Ingrédient B sortie 2 = ouverte (1)

    Si numéro de recette = 8, 11, 12, ou 13 alors 8,11..13 Ingrédient_A.Sortie_1 :=1;

    Ingrédient A sortie 1 = ouverte (1) Ingrédient_B.Sortie_4 :=1;

    Ingrédient B sortie 4 = ouverte (1)

    Sinon toutes les sorties = fermées (0) ELSE

    Ingrédient_A.Sortie_1 [:=]0;

    Ingrédient_A.Sortie_4 [:=]0;

    Ingrédient_A.Sortie_2 [:=]0;

    Ingrédient_A.Sortie_4 [:=]0;

    END_CASE;

    Publication 1756-PM007B-FR-P – Juillet 2008 25

  • Programmation en texte structuré Chapitre1

    FOR…DO Utilisez la boucle FOR…DO pour exécuter quelque chose un nombre de fois spécifique avant de faire autre chose.

    Opérandes :

    texte structuré

    Opérande Type Format Description

    comptage SINT

    INT

    DINT

    Point Point de stockage de la position de comptage pendant l’exécution de FOR…DO

    valeur_initiale SINT

    INT

    DINT

    Point

    Expression

    Immédiat

    Doit générer un nombre

    Définit la valeur initiale de comptage

    valeur_finale SINT

    INT

    DINT

    Point

    Expression

    Immédiat

    Définit la valeur finale de comptage et détermine quand quitter la boucle

    incrément SINT

    INT

    DINT

    Point

    Expression

    Immédiat

    (facultatif) Quantité d’augmentation de comptage à chaque passage dans la boucle.

    Si vous n’indiquez pas d’incrément, le comptage s’incrémente de 1.

    FOR comptage:= valeur_initiale TO valeur_finale BY incrément DO

    ;

    END_FOR;

    IMPORTANT Assurez-vous que vous n’itérez pas la boucle un trop grand nombre de fois pendant une scrutation.

    • L’automate n’exécute aucune autre déclaration du sous-programme tant que la boucle n’est pas terminée.

    • Si le temps mis pour terminer la boucle est supérieur à la temporisation du chien de garde, un défaut majeur se produit.

    • Envisagez d’utiliser une autre structure, telle qu’IF...THEN.

    26 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Description : La syntaxe est :

    Ces schémas montrent comment une boucle FOR...DO s’exécute et comment une déclaration EXIT permet de quitter la boucle prématurément.

    Drapeaux d’état arithmétiques : pas affectés

    Conditions de défaut :

    FOR comptage := valeur_initiale

    TO valeur_finale

    Facultatif { BY incrément Si vous n’indiquez pas d’incrément, la boucle s’incrémente de 1.

    DO

    ;

    Facultatif

    IF expression_booléenne THEN

    EXIT; Si vous voulez quitter la boucle prématurément sous certaines conditions, utilisez d’autres déclarations, tel qu’une structure IF...THEN, pour conditionner une déclaration EXIT.

    END_IF;

    END_FOR;

    déclaration 1

    déclaration 2

    déclaration 3

    Exécutée x nombre de fois ?

    non

    Oui

    Reste du sous-programme

    déclaration 1

    déclaration 2

    déclaration 3

    Exécutée x nombre de fois ?

    non

    Oui

    Reste du sous-programme

    Oui

    non

    La boucle FOR…DO s’exécute un nombre de fois spécifique.

    Pour arrêter la boucle avant que le comptage atteigne la dernière valeur, utilisez une déclaration EXIT.

    Un défaut majeur se produira si Type de défaut Code de défaut

    La structure se reboucle trop longtemps 6 1

    Publication 1756-PM007B-FR-P – Juillet 2008 27

  • Programmation en texte structuré Chapitre1

    Exemple 1 :

    Exemple 2 :

    Si vous voulez ceci Saisissez ce texte structuré

    effacer les bits 0 – 31 dans un tableau de booléens :

    1. Initialiser le point d’indexage à 0.

    2. Effacer tableau[indexage]. Par exemple, quand indexage = 5, effacer tableau[5].

    3. Ajouter 1 à l’indexage.

    4. Si l’indexage va £ à 31, répéter les étapes 2 et 3.

    Sinon, arrêter.

    FOR indexage:=0 TO 31 BY 1 DO

    tableau[indexage] := 0;

    END_FOR;

    Si vous voulez ceci Saisissez ce texte structuré

    Un type de données utilisateur (structure) stocke cette information à propos d’un article de votre inventaire.

    • ID Code_Barres de l’article (type de données chaîne)• Quantité en stock de cet article (type de données DINT)

    Un tableau de la structure ci-dessus contient un élément pour chacun des articles différents de votre inventaire. Vous souhaitez rechercher un produit spécifique dans le tableau (en utilisant son code à barres) et déterminer la quantité en stock.

    1. Obtenez la taille (nombre d’articles) du tableau d’inventaire et stockez le résultat dans Articles_Inventaire (point DINT).

    2. Initialiser le point de position à 0.

    3. Si Code_Barres correspond à l’ID d’un article dans le tableau, alors :

    a. Réglez le point Quantité = Inventaire[position].Qté. Ceci produit la quantité en stock pour cet article.

    b. Arrêt.

    Code_Barre est un point de chaîne qui stocke le code à barres de l’article que vous recherchez. Par exemple, quand position = 5, comparez Code_Barre à Inventaire[5].ID.

    4. Ajouter 1 à la position.

    5. Si position va de £ à (Articles_Inventaire – 1), répétez les étapes 3 et 4. Comme les numéros d’élément commence à 0, le dernier élément est inférieur de 1 au nombre d’éléments du tableau.

    Sinon, arrêter.

    SIZE(Inventaire,0,Articles_Inventaire);

    FOR position:=0 TO Articles_Inventaire – 1 DO

    Si Code_Barre = Inventaire[position].ID alors

    Quantité := Inventaire[position].Qté;

    EXIT;

    END_IF;

    END_FOR;

    28 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    WHILE…DO Utilisez la boucle WHILE…DO pour continuer de faire quelque chose tant que certaines conditions sont vraies.

    Opérandes :

    Texte structuré

    Description : La syntaxe est :

    Opérande Type Format Entrer

    Expression_booléenne

    BOOL Point

    Expression

    Point ou expression booléen qui génère une valeur booléenne

    WHILE expression_booléenne DO

    ;

    END_WHILE;

    IMPORTANT Assurez-vous que vous n’itérez pas la boucle un trop grand nombre de fois pendant une scrutation.

    • L’automate n’exécute aucune autre déclaration du sous-programme tant que la boucle n’est pas terminée.

    • Si le temps mis pour terminer la boucle est supérieur à la temporisation du chien de garde, un défaut majeur se produit.

    • Envisagez d’utiliser une autre structure, telle qu’IF...THEN.

    WHILE expression_booléenne1 DO

    ; Déclarations à exécuter tant qu’expression_booléenne1 est vraie

    Facultatif

    IF expression_booléenne2 THEN

    EXIT; Si vous voulez quitter la boucle prématurément sous certaines conditions, utilisez d’autres déclarations, tel qu’une structure IF...THEN, pour conditionner une déclaration EXIT.

    END_IF;

    END_WHILE;

    Publication 1756-PM007B-FR-P – Juillet 2008 29

  • Programmation en texte structuré Chapitre1

    Ces schémas montrent comment une boucle WHILE...DO s’exécute et comment une déclaration EXIT permet de quitter la boucle prématurément.

    Drapeaux d’état arithmétiques : pas affectés

    Conditions de défaut :

    Exemple 1 :

    Tant que expression_booléenne est vraie, l’automate exécute seulement les déclarations comprises dans la boucle WHILE…DO.

    Pour arrêter la boucle avant que les conditions soient vraies, utilisez une déclaration EXIT.

    déclaration 1

    déclaration 2

    déclaration 3

    Expression booléenne

    Vraie

    Fausse

    Reste du sous-programme

    Oui

    non

    déclaration 1

    déclaration 2

    déclaration 3

    Expression booléenne

    Vraie

    Fausse

    Reste du sous-programme

    Un défaut majeur se produira si Type de défaut Code de défaut

    La structure se reboucle trop longtemps 6 1

    Si vous voulez ceci Saisissez ce texte structuré

    La boucle WHILE...DO évalue d’abord ses conditions. Si les conditions sont vraies, l’automate exécute ensuite les déclarations incluses dans la boucle.

    Ceci diffère de la boucle REPEAT...UNTIL car cette dernière exécute les déclarations de la structure et détermine ensuite si les conditions sont vraies avant d’exécuter à nouveau les déclarations. Les déclarations d’une boucle REPEAT...UNTIL sont toujours exécutées au moins une fois. Les déclarations d’une boucle WHILE...DO peuvent ne jamais être exécutées.

    pos := 0;

    WHILE ((pos

  • Chapitre1 Programmation en texte structuré

    Exemple 2 :

    Si vous voulez ceci Saisissez ce texte structuré

    Déplacer des caractères ASCII depuis un tableau SINT vers un point de chaîne. (Dans un tableau SINT, chaque élément contient un caractère). Arrêtez quand vous atteignez le retour chariot.

    1. Initialisez numéro_élément à 0.

    2. Comptez le nombre d’éléments dans tableau_SINT (le tableau qui contient les caractères ASCII) et stockez le résultat dans taille_tableau_SINT (point DINT).

    3. Si le caractère dans tableau_SINT[numéro_élément] = 13 (valeur décimale du retour chariot), alors arrêtez.

    4. Réglez Point_chaîne[numéro_élément] = le caractère contenu dans tableau_SINT[numéro_élément].

    5. Ajoutez 1 à numéro_élément. Ceci permet à l’automate contrôler le caractère suivant dans le tableau_SINT.

    6. Réglez le membre longueur du point_chaîne = numéro_élément. (Ceci enregistre le nombre de caractères dans point_chaîne jusqu’à présent).

    7. Si numéro_élément = taille_tableau_SINT, alors arrêtez. (Vous êtes à la fin du tableau et il ne contient pas de retour chariot).

    8. Allez à 3.

    numéro_élément := 0;

    SIZE(tableau_SINT, 0, taille_tableau_SINT);

    WHILE tableau_SINT[numéro_élément] 13 DO

    Point_chaîne.DATA[numéro_élément] := tableau_SINT[numéro_élément];

    numéro_élément := numéro_élément + 1;

    Point_chaîne.LEN := numéro_élément;

    Si numéro_élément = taille_tableau_SINT, alors

    EXIT;

    END_IF;

    END_WHILE;

    Publication 1756-PM007B-FR-P – Juillet 2008 31

  • Programmation en texte structuré Chapitre1

    REPEAT…UNTIL Utilisez la boucle REPEAT…UNTIL pour continuer à effectuer une action jusqu’à ce que les conditions soient vraies.

    Opérandes :

    texte structuré

    Description : La syntaxe est :

    Opérande Type Format Entrer

    Expression_booléenne

    BOOL Point

    Expression

    point ou expression booléen qui génère une valeur booléenne (expression booléenne)

    REPEAT

    ;

    UNTIL expression_booléenne

    END_REPEAT;

    IMPORTANT Assurez-vous que vous n’itérez pas la boucle un trop grand nombre de fois pendant une scrutation.

    • L’automate n’exécute aucune autre déclaration du sous-programme tant que la boucle n’est pas terminée.

    • Si le temps mis pour terminer la boucle est supérieur à la temporisation du chien de garde, un défaut majeur se produit.

    • Envisagez d’utiliser une autre structure, telle qu’IF...THEN.

    REPEAT

    ; Déclarations à exécuter tant que expression_booléenne1 est fausse

    Facultatif

    IF expression_booléenne2 THEN

    EXIT; Si vous voulez quitter la boucle prématurément sous certaines conditions, utilisez d’autres déclarations, tel qu’une structure IF...THEN, pour conditionner une déclaration EXIT.

    END_IF;

    UNTIL expression_booléenne1

    END_REPEAT;

    32 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Ces schémas montrent comment une boucle REPEAT...UNTIL s’exécute et comment une déclaration EXIT permet de quitter la boucle prématurément.

    Drapeaux d’état arithmétiques : pas affectés

    Conditions de défaut :

    Exemple 1 :

    Tant qu’expression_booléenne est fausse, l’automate exécute seulement les déclarations comprises dans la boucle REPEAT…UNTIL.

    Pour arrêter la boucle avant que les conditions soient fausses, utilisez une déclaration EXIT.

    déclaration 1

    déclaration 2

    déclaration 3Expression booléenne

    Fausse

    Vraie

    Reste du sous-programmeExpression booléenne

    Fausse

    Vraie

    Reste du sous-programme

    déclaration 1

    déclaration 2

    déclaration 3 Oui

    non

    Un défaut majeur se produira si Type de défaut Code de défaut

    La structure se reboucle trop longtemps 6 1

    Si vous voulez ceci Saisissez ce texte structuré

    La boucle REPEAT...UNTIL exécute les déclarations de la structure puis détermine si les conditions sont vraies avant de recommencer l’exécution des déclarations.

    Ceci est différent de la boucle WHILE...DO car cette dernière commence par évaluer ses conditions. Si les conditions sont vraies, l’automate exécute ensuite les déclarations incluses dans la boucle. Les déclarations d’une boucle REPEAT...UNTIL sont toujours exécutées au moins une fois. Les déclarations d’une boucle WHILE...DO peuvent ne jamais être exécutées.

    pos := -1;

    REPEAT

    pos := pos + 2;

    UNTIL ((pos

  • Programmation en texte structuré Chapitre1

    Exemple 2 :

    Si vous voulez ceci Saisissez ce texte structuré

    Déplacer des caractères ASCII depuis un tableau SINT vers un point de chaîne. (Dans un tableau SINT, chaque élément contient un caractère). Arrêtez quand vous atteignez le retour chariot.

    1. Initialisez numéro_élément à 0.

    2. Comptez le nombre d’éléments dans tableau_SINT (le tableau qui contient les caractères ASCII) et stockez le résultat dans taille_tableau_SINT (point DINT).

    3. Réglez Point_chaîne[numéro_élément] = le caractère contenu dans tableau_SINT[numéro_élément].

    4. Ajoutez 1 à numéro_élément. Ceci permet à l’automate contrôler le caractère suivant dans le tableau_SINT.

    5. Réglez le membre longueur du point_chaîne = numéro_élément. (Ceci enregistre le nombre de caractères dans point_chaîne jusqu’à présent).

    6. Si numéro_élément = taille_tableau_SINT, alors arrêtez. (Vous êtes à la fin du tableau et il ne contient pas de retour chariot).

    7. Si le caractère dans tableau_SINT[numéro_élément] = 13 (valeur décimale du retour chariot), alors arrêtez.

    Sinon, aller à 3.

    numéro_élément := 0;

    SIZE(tableau_SINT, 0, taille_tableau_SINT);

    REPEAT

    Point_chaîne.DATA[numéro_élément] := tableau_SINT[numéro_élément];

    numéro_élément := numéro_élément + 1;

    Point_chaîne.LEN := numéro_élément;

    Si numéro_élément = taille_tableau_SINT, alors

    EXIT;

    END_IF;

    UNTIL tableau_SINT[numéro_élément] 13

    END_REPEAT;

    34 Publication 1756-PM007B-FR-P – Juillet 2008

  • Chapitre1 Programmation en texte structuré

    Commentaires Pour faciliter l’interprétation de votre texte structuré, ajoutez-y des commentaires.

    • Les commentaires vous permettent d’utiliser un langage clair pour décrire le fonctionnement de votre texte structuré.

    • Les commentaires n’affectent pas l’exécution du texte structuré.

    Les commentaires de texte structuré sont chargés dans la mémoire de l’automate et sont accessibles pour le transfert. Pour ajouter des commentaires à votre texte structuré :

    Pour ajouter un commentaire Utilisez un des ces formats

    Sur une seule ligne //commentaire

    (*commentaire*)

    /*commentaire*/

    A la fin d’une ligne de texte structuré

    A l’intérieur d’une ligne de texte structuré

    (*commentaire*)

    /*commentaire*/

    Qui s’étend sur plusieurs lignes (*début du commentaire. . . fin du commentaire*)

    /*début du commentaire. . . fin du commentaire*/

    Publication 1756-PM007B-FR-P – Juillet 2008 35

  • Programmation en texte structuré Chapitre1

    Par exemple :

    Format EXEMPLE

    //commentaire Au début d’une ligne

    //Contrôler le sens de déplacement du convoyeur

    IF sens_convoyeur THEN...

    A la fin d’une ligne

    ELSE //Si le convoyeur ne se déplace pas, activer le voyant d’alarme

    voyant := 1;

    END_IF;

    (*commentaire*) Entrée_Domino[:=]1;(*ouvrir l’entrée*)

    IF Domino.bas (*détecteur de niveau bas*)& Sucre.haut (*détecteur de niveau haut*) THEN...

    (*Commande la vitesse de la pompe de recirculation. La vitesse dépend de la température dans le réservoir.*)

    IF temp.réservoir > 200 THEN...

    /*commentaire*/ Entrée.Domino:=0;/*fermer l’entrée*/

    IF Code_barre=65 /*A*/ THEN...

    /*Obtient le nombre d’articles dans le tableau d’inventaire et stocke la valeur dans le point Articles_Inventaire*/

    SIZE(Inventaire,0,Articles_Inventaire);

    36 Publication 1756-PM007B-FR-P – Juillet 2008

  • Publication 1756-PM007B-FR-P – Juillet 2008 40Remplace la publication 1756-PM007A-FR-P – Juillet 2007 Copyright © 2008 Rockwell Automation, Inc. Tous droits réservés. Imprimé aux Etats-Unis.

    Assistance Rockwell Automation

    Rockwell Automation fournit des informations techniques sur Internet pour vous aider à utiliser ses produits. Sur le site http://support.rockwellautomation.com, vous trouverez des manuels techniques, une foire aux questions, des notes techniques et des profils d’application, des exemples de code et des liens vers des mises à jour de logiciels (service pack). Vous y trouverez également la rubrique « MySupport », que vous pouvez personnaliser pour utiliser au mieux ces outils.

    Si vous souhaitez une assistance technique supplémentaire par téléphone pour l’installation, la configuration et le dépannage de vos produits, nous proposons les programmes d’assistance TechConnect. Pour de plus amples informations, contactez votre distributeur ou votre représentant Rockwell Automation, ou allez sur le site http://support.rockwellautomation.com.

    Aide à l’installation

    En cas de problème sur un module matériel dans les 24 heures suivant son installation, consultez les informations fournies dans le présent manuel. Vous pouvez également appeler l’Assistance Rockwell Automation à un numéro spécial, afin d’obtenir de l’aide pour la mise en service de votre module :

    Procédure de retour d’un nouveau produit

    Rockwell Automation teste tous ses produits pour en garantir le parfait fonctionnement à leur sortie d’usine. Cependant, si votre produit ne fonctionne pas et doit faire l’objet d’un retour :

    Pour les Etats-Unis

    1.440.646.3434du lundi au vendredi, de 8h00 à 17h00 (heure de la côte est)

    Pour les autres pays

    Contactez votre représentant Rockwell Automation pour tout problème technique.

    Pour les Etats-Unis

    Contactez votre distributeur. Vous devrez lui fournir le numéro de dossier que le Centre d’assistance vous aura communiqué (appelez le numéro de téléphone ci-dessus), afin de procéder au retour.

    Pour les autres pays

    Contactez votre représentant Rockwell Automation pour savoir comment procéder.

    http://support.rockwellautomation.comhttp://support.rockwellautomation.com

    1756-PM007-FR, Texte structuré des automatesLogix5000Table des matièresPréfaceObjet de ce manuelConventions utilisées dans ce manuel

    Programmation en texte structuréIntroductionAffectationsExpressionsInstructionsInstructions de testIF...THENCASE...OFFOR…DOWHILE…DOREPEAT…UNTILCommentaires

    4ème de couverture

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 150 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth 8 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.00000 /EncodeGrayImages true /GrayImageFilter /FlateEncode /AutoFilterGrayImages false /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.00000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects true /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile (None) /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName (http://www.color.org) /PDFXTrapped /False

    /CreateJDFFile false /SyntheticBoldness 1.000000 /Description >>> setdistillerparams> setpagedevice