Vous êtes sur la page 1sur 49
Fev.-11 Automatismes ST Table des matières 1 D ESCRIPTION 2 1.1 Présentation des fenêtres de

Fev.-11

Automatismes ST

Table des matières

1 DESCRIPTION

2

1.1 Présentation des fenêtres de l’atelier

2

1.2 Cycles de l’automatisme

6

1.3 Syntaxe du langage ST

6

1.4 Fonctionnalités avancées

12

2 CONCEPTION DUN PROGRAMME

15

2.1 Organisation

15

2.2 Analyse du besoin fonctionnel

15

2.3 Édition et déclaration des variables

16

2.4 Construction

17

2.5 Simulation

18

2.6 Chargement du programme

18

2.7 Mise au point sur le poste local (Debugger en ligne)

18

3 OPÉRATEURS

19

3.1 Arithmétique

19

3.2 Opérateurs booléens

19

3.3 Opérateurs de comparaisons

20

4 FONCTIONS

21

4.1 Définition

21

4.2 Utilisation d’une fonction

21

4.3 Fonctions standard ST

21

4.4 Fonctions spécifiques SOFREL

34

5 BLOCS FONCTIONNELS

36

5.1 Définition

36

5.2 Principe d’utilisation

36

5.3 Exemple d’utilisation d’un bloc fonctionnel

37

5.4 Blocs fonctionnels standard ST

39

Tous droits réservés Il est interdit de reproduire tout ou partie de cet ouvrage ou de le transmettre sous quelque forme que ce soit, sans l’accord préalable de SOFREL. Les informations décrites dans ce manuel ont été vérifiées avec soin et sont supposées exactes. Toutefois, SOFREL ne peut être tenu responsable des erreurs ou des imprécisions qui pourraient exister dans ce manuel, ni des dommages directs ou indirects qui en résulteraient même s’il a été avisé de la possibilité de tels dommages. Suite au développement continuel de ses produits, SOFREL se réserve le droit d’apporter des modifications à ce manuel et aux produits qui y sont mentionnés à tout moment, sans avoir à prévenir les personnes concernées.

Marques SOFREL, PCWin, SOFBUS, S500, S50, S50 THERMIX, TELBOX, LINEBOX, CELLBOX, PC500, CS100, S10, S15, sont des marques déposées par la société SOFREL. Microsoft Windows, Microsoft Excel, Microsoft Word sont des marques ou des marques déposées par Microsoft Corporation. Tous les autres noms de produits ou de sociétés mentionnés dans cet ouvrage ne servent qu’à des fins d’identification et peuvent être des marques déposées par leurs propriétaires respectifs.

Légende

CG

: cliquez 1 fois sur le bouton gauche de la souris

CD

: cliquez 1 fois sur le bouton droit de la souris

DCG

: double-cliquez sur le bouton gauche de la souris

Automatismes ST

1

Description

L’application « Automatismes ST » S500 permet d’automatiser des tâches propres à chacun des sites surveillés. Pour cela, les programmes interagissent sur les informations de télégestion de S500.

Les programmes sont décrits en langage ST conformément à la norme IEC1131-3.

1.1 Présentation des fenêtres de l’atelier

Après avoir démarré SOFTOOLS, modifiez la configuration du poste local S500,

CG

sur le dossier « Automatismes » et DCG

sur le dossier

« Automatismes ST » pour activer l’atelier d’automatisme.

1.1.1 Fenêtre principale

La fenêtre principale permet de naviguer dans les différentes fenêtres de l’automatisme (liste des

programmes, édition, variables, construction, simulation,

).

1 9 2 3 5 6 7 8 4
1
9
2
3
5
6
7
8
4

1

Maintien de la « fenêtre principale » toujours en avant-plan.

2

Accès à la fenêtre « Liste des programmes » pour l’édition d’un programme.

3

Accès à la fenêtre « Liste des variables ».

4

Navigation dans les différentes fenêtres liées à l’automatisme.

5

Construction des programmes.

6

Affichage du journal pour visualiser les messages du suivi (messages système et suivi applicatif).

7

Passage en mode « Simulation » pour contrôler l’exécution du programme sur le PC.

8

Passage en mode « Mise au point » (Debugger) pour contrôler l’exécution du programme sur le poste local.

9

Affichage de la « fenêtre Espion » pour visualiser les variables lors de l’exécution.

Automatismes ST

1.1.2 Liste des programmes

Cette fenêtre regroupe les programmes de l’automatisme.

Cette fenêtre regroupe les programmes de l’automatisme. Un programme est une suite d’instructions destiné à

Un programme est une suite d’instructions destiné à résoudre un problème fonctionnel. Il est donc vivement conseiller d’utiliser un programme par problème fonctionnel ; cela permet de simplifier l’approche (par exemple : un programme pour automatiser la permutation de pompes, et un autre programme pour gérer l’identification des personnes qui ont accès à la station de pompage).

1.1.3 Édition du programme

C’est dans cette fenêtre que l’utilisateur écrit son programme (suite d’instructions).

Exemple : Remplissage d’une cuve selon 2 seuils (information « Bornier DI »)

L’éditeur est doté d’une coloration syntaxique, c'est-à-dire que les composantes du langage prennent une couleur spécifique :

composantes du langage prennent une couleur spécifique : les mots clé en « bleu », les

les mots clé en « bleu »,

les valeurs numériques en « gris »,

les commentaires sont en « vert »

et tout le reste est en « noir ».

en « vert » et tout le reste est en « noir ». Cuve n° 1
Cuve n° 1 1 data1 : Seuil Niveau haut 0 0 1 data3 : Commande
Cuve n° 1
1
data1 : Seuil Niveau haut
0
0
1
data3 : Commande pompage

data2 : Seuil Niveau bas

Automatismes ST

1.1.4 Liste des variables

CG sur le

+
+

pour

développer chaque liste.

variables C G sur le + pour développer chaque liste. Les variables sont : soit des

Les variables sont :

soit des informations du poste local S500.

Les informations S500 correspondant à des variables d’automatisme prédéfinies nommées <dataxxxx> (xxxx correspondant au numéro de l’information 1 à 1000).

soit des variables internes à l’automatisme.

1.1.5 Construction

L’action « Construire » (ou compiler) sert à convertir les programmes ST dans un langage compréhensible par S500. Elle génère un code qui sera ensuite chargé en même temps que la configuration dans le S500.

Elle génère un code qui sera ensuite chargé en même temps que la configuration dans le

Automatismes ST

1.1.6 Simulation de l’exécution d’un programme

Un programme peut être simulé avant d’être transféré dans S500.

peut être simulé avant d’être transféré dans S500. La fenêtre ‘variable’ permet de visualiser l’état

La fenêtre ‘variable’ permet de visualiser l’état des variables en temps réel. Il est également possible de modifier la valeur d’une variable en cours de simulation ; pour ce faire, il suffit de double cliquer sur la variable, et la fenêtre suivante apparaît :

sur la variable, et la fenêtre suivante apparaît : 1.1.7 Fenêtre « Espion » ou Elle

1.1.7 Fenêtre « Espion »

ou

suivante apparaît : 1.1.7 Fenêtre « Espion » ou Elle permet de visualiser en simulation l’état

Elle permet de visualiser en simulation l’état de variables regroupées dans une même fenêtre.

l’état de variables regroupées dans une même fenêtre. Pour visualiser les variables du programme, il suffit

Pour visualiser les variables du programme, il suffit d’effectuer un glisser-déplacer de la variable, de la fenêtre « Liste des variables » vers la fenêtre « Espion ».

Automatismes ST

1.2 Cycles de l’automatisme

DEBUT CYCLE Acquisition des Entrées / Sorties de l’automatisme ( Informations S500 ) Programme 1

DEBUT CYCLE

Acquisition des Entrées / Sorties de l’automatisme (Informations S500)

Programme 1 Programme 2 : : Programme n

Programme 1

Programme 2

:

:

Programme n

Programme 1 Programme 2 : : Programme n
Programme 1 Programme 2 : : Programme n
Programme 1 Programme 2 : : Programme n
) Programme 1 Programme 2 : : Programme n Restitution des sorties de l’automatisme

Restitution des sorties de l’automatisme (sortie/consigne et information d’automatisme S500)

FIN CYCLE

n Restitution des sorties de l’automatisme (sortie/consigne et information d’automatisme S500) FIN CYCLE
n Restitution des sorties de l’automatisme (sortie/consigne et information d’automatisme S500) FIN CYCLE
n Restitution des sorties de l’automatisme (sortie/consigne et information d’automatisme S500) FIN CYCLE

1.3 Syntaxe du langage ST

Temps de cycle = 200 ms (exécution des automatismes toutes les 200 millisecondes).

Les entrées-sorties de l’automatisme S500 correspondent à des variables pré-définies nommées <dataxxxx> (xxxx allant de 1 à 1000).

La création d’un programme d’automatisme nécessite de connaître la syntaxe du langage ST.

Un programme ST est une suite d’instructions. Les instructions d’un programme sont exécutées dans l’ordre d’apparition. Des structures de contrôle permettent de modifier dynamiquement l’ordre d’exécution de ces instructions en fonction de conditions.

DÉBUT PROGRAMME

instructi ons en fonction de conditions. DÉBUT PROGRAMME Instruction 1 Instruction 2 : : : :

Instruction 1

Instruction 2

:

:

:

:

Instruction n

PROGRAMME Instruction 1 Instruction 2 : : : : Instruction n FIN PROGRAMME S500-doc_09-AUTO - 6

FIN PROGRAMME

Automatismes ST

1.3.1

Instructions

Une instruction se termine obligatoirement par un point-virgule : « ; »

Les instructions sont construites à partir de variables, de constantes, de fonctions et d’opérateurs.

En règle générale, il n’y a pas de distinction entre les lettres minuscules et majuscules.

1.3.1.1 Affectation

L’affectation d’une valeur à une variable se fait à l’aide de l’opérateur « := ».

Variable := Expression ;

Exemple :

data3 := data1 + data2 ;

La variable et l’expression doivent avoir le même type : logique/booléen, numérique/réel, entier (Cf § 1.3.4 pour la définition des types de variables). Si nécessaire, il est possible d’utiliser des fonctions de conversion de type (cf § 4.3.3).

1.3.1.2 Parenthèses

Il est vivement conseillé d’utiliser les parenthèses pour simplifier la lecture d’une expression complexe.

Sans parenthèse, l’ordre d’évaluation par défaut pour les opérateurs du langage ST est le suivant :

1

Négation

NOT

2

Multiplication, Division

* /

3

Addition, Soustraction

+ -

4

Comparaisons

< >

<= >=

=

<>

5

ET booléen

AND

6

OU booléen

OR

7

OU exclusif

XOR

Exemple :

data4 := (data1 + data2) data3 ;

1.3.1.3 Commentaires

Des commentaires de longueur variable peuvent être insérés n’importe où dans un programme ST.

Un commentaire débute par les caractères « (» et se termine par « ∗) ».

Toute ligne commençant par « // » est considérée comme une ligne de commentaires.

Dans l’éditeur, les commentaires sont affichés en vert.

Exemples :

(* Exemple de commentaire sur plusieurs lignes*)

// Autre exemple de commentaires saisis sur une seule ligne.

Automatismes ST

1.3.1.4 Appel de fonction

Les fonctions permettent de réaliser des traitements simples. Chaque fonction retourne une valeur de sortie unique qui dépend uniquement des valeurs de ses paramètres d’entrée.

Les constantes ou les variables utilisées lors de l’appel de la fonction doivent être du type autorisé par la fonction (cf. §1.3.4 pour la définition des types de variables et, si nécessaire, le § 4.3.3 pour l’utilisation des fonctions de conversion).

Il existe des fonctions définies dans la norme IEC1131-3 et d’autres, développées par SOFREL, spécifiques au métier de la Télégestion. Les fonctions disponibles sont décrites dans le § 4 de ce chapitre.

Exemple :

data3 := SIN (data1);

1.3.1.5 Appel de bloc fonctionnel

Les blocs fonctionnels permettent de réaliser des traitements nécessitant la mémorisation d’informations. Un bloc fonctionnel peut posséder plusieurs paramètres d’entrée et plusieurs paramètres de sortie.

Les constantes ou les variables utilisées lors de l’appel d’un bloc fonctionnel doivent être du type autorisé par le bloc fonctionnel (cf. §1.3.4 pour la définition des types de variables et, si nécessaire, le § 4.2 pour l’utilisation des fonctions de conversion).

Il existe des blocs fonctionnels standard définis dans la norme IEC1131-3 et d’autres, développés par SOFREL, spécifiques au métier de la Télégestion. Les différents blocs fonctionnels standard sont décrits dans le § 5 de ce chapitre.

1.3.2 Structures de contrôle d’un programme

Instruction de test

Première forme :

Deuxième forme :

Troisième forme :

IF (condition booléenne) THEN liste d'instructions ; END_IF ;

IF (condition booléenne) THEN liste d'instructions 1 ; ELSE liste d'instructions 2 ; END_IF ;

IF (condition booléenne 1) THEN liste d'instructions 1 ; ELSIF (condition booléenne 2) THEN liste d'instructions 2 ;

ELSIF (condition booléenne k) THEN liste d'instructions k ; ELSE liste d'instructions k+1 ; END_IF ;

Automatismes ST

Instruction de sélection :

CASE (expression entière) OF constante 1 , constante 2 , liste d'instructions 1 ; constante a , constante b , liste d'instructions 2 ;

:

:

Constante x , constante y , liste d'instructions k ;

:

ELSE

liste d'instructions k+1 ; END_CASE ;

Exemple : (* contrôle les nombres premiers dans une liste de 0 à 6*)

CASE iNumber OF 0 :

Alarm := TRUE; AlarmText := '0 gives no result'; 1, 3, 5 :

bPrime := TRUE; 4, 6 :

bPrime := FALSE;

ELSE Alarm := TRUE; AlarmText := 'I don't know after 6 !'; END_CASE;

Itérations (exécution d’une boucle)

Boucle <Tant que> :

WHILE (condition booléenne) DO liste d'instructions ; END_WHILE ;

On commence par évaluer la condition. Si elle est vraie, on effectue la liste d’instructions. Puis on recommence. Lorsque la condition devient fausse, on sort de la boucle.

Boucle <Répéter> :

REPEAT liste d'instructions ; UNTIL (condition booléenne) END_REPEAT ;

On commence par effectuer la liste d’instructions. Puis on évalue la condition. Si elle est vraie, on sort de la boucle, sinon on recommence.

Boucle <Pour> :

FOR variable entière := MIN TO MAX BY PAS DO liste d'instructions ; END_FOR ;

La liste d’instructions s’exécute : « de la variable MIN à la variable MAX ». A chaque exécution de la liste d’instructions, la variable s’incrémente du « P AS » ; MIN, MAX et PAS sont des expressions entières (constantes, variables, …).

Automatismes ST

1.3.3

Variables

1.3.3.1 Définition des variables

Les variables sont :

soit des informations du poste local S500 :

Entrées logiques,

Entrées numériques

Sorties logiques : toutes les sorties logiques et les variables logiques de type « Automatismes »,

Sorties numériques : toutes les sorties numériques, les entrées numériques de type « Compteurs » et les variables numériques de type « Automatismes ».

Les informations S500 correspondent à des variables d’automatisme prédéfinies nommées <dataxxxx> (xxxx correspondant au numéro d’information de 1 à 1000).

soit des variables internes à l’automatisme,

1.3.3.2 Liste des variables Groupe de variables Contenu Variables globales Variables internes connues de tous
1.3.3.2 Liste des variables
Groupe de variables
Contenu
Variables globales
Variables internes connues de tous les programmes
Variables mémorisées
Variables internes connues de tous les programmes et qui
conservent leurs valeurs lors d’une réinitialisation simple de
S500
Programme n°x
Variables locales au programme : ces variables sont
connues uniquement par le programme dans lequel elles
ont été déclarées.
Blocs fonctionnels
Variables locales et paramètres d’entrées-sorties d’un bloc
fonctionnel
Entrées logiques
Sorties logiques
Informations d’entrées-sorties de S500
Entrées numériques
Sorties numériques

Les variables utilisées dans les programmes doivent être d’abord déclarées dans l’éditeur de variables sauf celles correspondant aux informations S500 qui sont automatiquement créées lors du lancement de l’atelier d’automatismes.

1.3.3.3 Fenêtre variable

Exemple : pour créer une variable globale à partir de la fenêtre « Liste des variables » :

CD sur « Variable globale » et choisissez « Ajouter une variable »

globale » et choisissez « Ajouter une variable » Valeur que prendra la variable à chaque

Valeur que prendra la variable à chaque démarrage de l’application « Automatismes ST »

Valeur que prendra la variable à chaque démarrage de l’application « Automatismes ST » S500-doc_09-AUTO -

Automatismes ST

1.3.4 Types de variables ou de constantes

Les informations S500 sont de type :

BOOL pour les informations logiques,

 

REAL

pour

les informations numériques.

Type

Description

Taille

Remarques

 

(b

its)

BOOL

Booléen

1

TRUE pour une information/variable active

FALSE pour une information/variable inactive

REAL

Réel

32

Les constantes réelles doivent inclure un point comme séparateur décimal : 3.0 par exemple (ceci afin de les différencier des entiers ).

Le caractère « E » pe ut être utilisés pour spécifier un exposant :

3.0 E 10 par exemple.

DINT

Entier signé

32

-2147483648 à +2147483647

Exemple de notation : 125 en décimal peut s’écrire :

16#7D en hexadécimal, 2#01111101 en binaire.

 

TIME

Durée

 

Une constante de te mps doit être préfixée par « T# ».

Elles s’expriment :

par un nombre d’heures suivi de « h », un nombre de minutes suivi de « m », un nombre de secondes suivi de « s », et un nombre de millisecondes suivi de « ms ».

 

L’ordre des unités (heures, minutes, secondes, millisecondes) doit être

respecté. La

valeur maximale de cette variable est 23h59m59s.

Exemples :

T#1h4m10s pour 1 heure, 4 min utes et 10 secondes. T#15m pour 15 minutes. T#25ms pour 25 millisecondes.

STRING

Chaîne de

 

Taille inférieure à 255 caractères

caractères

Ces constantes doivent être écrites entre apostrophes (‘

’).

Les séquences suivantes peuvent être utilisées pour rep résenter un caractère spécial ou non impr imable dans une chaîne :

$$

$’

$T

$R

$L

$N

un caractère $ une apostrophe une tabulation un retour chariot un saut de ligne un retour chariot s

uivi d’un saut de ligne

 

$P

$xx

un saut de page code ASCII de tout caractè re exprimé sous forme de 2 digits hexadécimaux

Bloc

   

Déclaration des blocs fonctionnels utilisés (cf. § 5 de ce chapitre)

fonctionnel

Les capacités de l’automatisme ne sont réel lement limitées que par la taille mémoire que peut gérer le po ste local :

65535 variables,

255 programmes d’automatisme.

Automatismes ST

1.4 Fonctionnalités avancées

1.4.1 Gestion des temporisations

En langage ST, il est possible de gérer simplement des temporisations en déclarant une variable de type TIME.

Dans un programme :

l’instruction TSTART (nom de variable) permet de démarrer la temporisation,

une instruction de test (IF, THEN, ELSE, END_IF) permet de vérifier l’échéance de la temporisation,

l’instruction TSTOP (nom de variable) permet d’arrêter la temporisation.

Exemple : Automatisation de la marche d’une pompe pendant 20 minutes et de l’arrêt pendant 10 minutes.

Information

Description

Origine

Correspondance variable d’automatisme

N° 1

Commande pompage

Bornier DO

Sortie logique : data3

Déclaration d’une variable type TIME. Nom de la variable : timer

TSTART (timer)

: data3 Déclaration d’une variable type TIME. Nom de la variable : timer TSTART (timer) S500-doc_09-AUTO

Automatismes ST

1.4.2 Utilisation des définitions globales ou locales

1.4.2.1

Principe

Une définition est un identificateur unique qui peut être utilisé dans les programmes pour remplacer un autre texte. Les définitions sont typiquement utilisées pour remplacer une expression constante et faciliter la lecture et la maintenance des programmes.

Il y a 2 niveaux de définitions :

Globales à tous les programmes ; elles peuvent être éditées à partir du menu « Outils » de la fenêtre « Liste des programmes ».

Locales à un programme ; elles peuvent être éditées à partir du menu « Outils » de la fenêtre « Édition du programme ».

Chaque définition doit être entrée sur une ligne de texte selon la syntaxe suivante :

Définition = Texte à remplacer (* commentaire *)

Exemple :

PI = 3.14 NOMBRE_DE_POMPES = 4

(* constante numérique *) (* nombre de pompes gérées *)

Il est possible d’utiliser une définition dans le contenu d’une autre définition. La définition utilisée dans l’autre doit être déclarée en premier.

Exemple :

PI = 3.14 2PI = (PI * 2.0)

(* constante numérique *) (* 2 fois la constante numérique PI *)

Les définitions sont aussi très pratiques pour rendre un programme indépendant des variables d’entrées-so rties « dataxxxx » de l’automatisme S500.

E

xemple :

Volume_cuve = data45 Niveau_bache = data9 COMMANDE_POMPAGE = data5

1.4.3 Importation / Exportation de programmes et de blocs fonctionnels spécifiques

L’atelier d’automatismes ST permet d’importer de s blocs fonctionnels spécifiques, développés par SOFREL et répondant à des besoins particuliers.

Exemples :

Permutations d’actionneurs,

Calcul d’un débit moyen,

etc.

Un utilisateur peut également éc rire ses propres blocs fonctionnels et les exporter pour les mettre à disposition d’autres utilisateurs.

Automatismes ST

De même, l’atelier d’automatismes ST permet d’importer des programmes complets réalisés par SOFREL.

Exemples :

Détection d’intrusion, Commande d’éclairage via l’horloge astronomique, etc.

Un utilisateur peut, de la même façon, exporter les programmes qu’il a créé pour les mettre à disposition d’autres utilisateurs.

Différence entre un bloc fonctionnel et un programme :

un bloc fonctionnel dispose de paramètres d’entrées et de sorties, et son utilisation nécessite l’écriture d’un programme ST dans lequel il sera utilisé.

un programme est directement utilisable sans connaissance particulière du langage ST ; il suffit de modifier les définitions locales du programme pour les associer aux informations d’entrées-sorties du poste local S500.

1.4.4 Suivi de fonctionnement

L’utilisateur peut ajouter, dans les programmes d’automatisme, des appels de fonctions permettant d’afficher des messages textes et numériques dans une fenêtre de journal de fonctionnement des automatismes ST. Ce suivi est accessible par l’intermédiaire du Navigateur (en connexion locale ou distante via SOFTOOLS).

Cette fonction permet le suivi visuel du bon déroulement du programme. Attention, toutefois, à l’utilisation excessive de messages dans un programme qui peut augmenter de manière significative son temps de cycle.

Pour plus d’informations, reportez-vous au § 4.4.2 où les fonctions de suivi

SFMONSUI

sont décrites.

SFMONMSG

En mode simulation, les messages de suivi sont affichés dans la fenêtre « Journal ».

1.4.5 Particularités de fonctionnement

et

1.4.5.1 Détection de l’exécution d’un automatisme en boucle

Dans le cas où l’ensemble des programmes d’automatisme ne s’exécute pas correctement, le logiciel S500 redémarre automatiquement sans l’application « Automatismes ST ».

Un message signalant ce dysfonctionnement est alors archivé dans le journal de diagnostic et S500 active alors automatiquement les informations internes « Défaut système » et « Chien de garde ». Dans ce cas, il est nécessaire de modifier la configuration du poste local et de recharger l’automatisme S500 avec SOFTOOLS.

1.4.5.2 Durée des temps de cycles dépassée

En cas de dépassement de tous les temps de cycle consécutifs pendant une minute, deux messages « Apparition Défaut système » et « Temps de cycle automatisme trop long » signalant ce dysfonctionnement sont alors archivés dans le journal de diagnostic et S500 active alors automatiquement l’information « Défaut système ».

La présence d’une carte DO-Wdg permet de sécuriser les installations en activant un automatisme dégradé sur détection d’un défaut (cf. § Utilisation des informations).

Automatismes ST

2 Conception d’un programme

2.1 Organisation

La conception d’un programme d’automatisme nécessite de respecter les étapes suivantes :

1. Analyse du besoin fonctionnel (algorithme),

2. Édition des programmes et déclaration des variables,

3. Construction (Compilation),

4. Simulation sur le PC,

5. Mise au point (Debugger) au niveau du poste local,

6. Chargement des programmes dans S550.

2.2 Analyse du besoin fonctionnel

Cette phase consiste à élaborer « sur papier » une solution automatisée pour répondre au problème posé.

Exemple : Remplissage automatique d’un réservoir suivant 2 seuils (Min. et Max. ) sur une mesure de niveau.

La pompe est démarrée dès que le niveau descend en dessous de 1 mètre. Elle est arrêtée dès que le niveau d’eau atteint 5 mètres.

Information

Description

Origine

Correspondance variable d’automatisme

N° 4

Niveau réservoir 1

Bornier AI

Entrées numériques : data4

N° 3

Commande pompage

Bornier DO

Sortie logique : data3

data4 : Niveau réservoir 1 data3 : Commande pompage
data4 : Niveau réservoir 1
data3 : Commande pompage

Algorithme de remplissage :

5 m

1 m

SI niveau inférieur à 1 mètre, ALORS Marche de la pompe,

SI niveau supérieur ou égal à 5 mètres, ALORS Arrêt de la pompe.

Automatismes ST

2.3 Édition et déclaration des variables

2.3.1 Déclaration des variables

Dans l’exemple précédent, seules les variables data4 et data3 sont nécessaires. Ces variables correspondant directement à des informations de S500, elles sont automatiquement déclarées.

de S500, elles sont automatiquement déclarées. 2.3.2 Édition du programme A partir de la fenêtre «

2.3.2 Édition du programme

A partir de la fenêtre « Liste des programmes », CG sur le menu « Fichier - Nouveau » ou « Fichier – Ouvrir » pour éditer le programme souhaité.

Fichier – Ouvrir » pour éditer le programme souhaité. 2.3.3 Protection du programme Il est possible

2.3.3 Protection du programme

Il est possible de protéger un programme en CD sur son nom et en modifiant ses « Propriétés » :

Cochez la case « Protection » pour éviter qu’un

autre utilisateur ne puisse modifier le programme. La saisie d’un mot de passe de 1 à 6 caractères sera alors systématiquement demandée à chaque modification du programme Lorsque la case « Validation » n’est pas cochée, le programme d’automatisme ne peut être exécuté.

CD sur la clé du programme.

C D sur la clé du programme. pour « ôter la protection »

pour « ôter la protection »

être exécuté. C D sur la clé du programme. pour « ôter la protection » S500-doc_09-AUTO

Automatismes ST

CG

sur ce bouton pour vérifier la syntaxe du programme

t o n p o u r vérifier la syntaxe du programme Édition du programme Il
t o n p o u r vérifier la syntaxe du programme Édition du programme Il

Édition du

programme

Il est possible de redimensionner cet espace pour afficher le résultat de la vérification de la syntaxe.

Résultat

le résultat de la vérification de la syntaxe. Résultat Pour faciliter la saisie des noms de

Pour faciliter la saisie des noms de variables, il est possible de procéder à un « Glisser Déplacer » de la variable choisie, de la fenêtre « variables » vers la fenêtre « Édition du programme ».

2.4

Construction

Lors de la construction, les erreurs de syntaxe sont automatiquement détectées.

DCG sur l’erreur positionne automatiquement le curseur sur l’erreur dans la fenêtre d’édition du programme.

sur l’erreur dans la fenêtre d’édition du programme. Une erreur pouvant en entraîner une autre, il

Une erreur pouvant en entraîner une autre, il est conseillé de corriger les erreurs une à une, à partir de la première.

Il est également recommandé de vérifier la syntaxe du programme au fur et à mesure de son édition.

Automatismes ST

2.5 Simulation

La simulation permet de tester le programme directement dans l’atelier. Il est possible à partir de la fenêtre « variables » ou « espion » de modifier n’importe quelle variable de manière à vérifier le comportement du programme.

Pour simuler le fonctionnement d’un programme, il existe un mode « cycle à cycle » qui permet d’exécuter le ou les programmes une seule fois, et de détecter plus facilement les éventuelles erreurs.

et de détecter plus facilement les éventuelles erreurs. Exemple de fenêtre ESPION : Simulez le programme

Exemple de fenêtre ESPION :

les éventuelles erreurs. Exemple de fenêtre ESPION : Simulez le programme soit en mode classique, soit

Simulez le programme soit en mode classique, soit en mode « cycle à cycle » (arrêt toutes les 200 millisecondes).

Simulez la variation d’un niveau pour détection automatique des seuils.

d’un niveau pour détection automatique des seuils. Effectuez un « Glisser-Déplacer » pour mettre à jour

Effectuez un « Glisser-Déplacer » pour mettre à jour la fenêtre « Espion ».

Espionnez que la commande pompage s’active automatiquement sur variation du Niveau.

s’active automatiquement sur variation du Niveau. 2.6 Chargement du programme Lorsque le programme a été

2.6 Chargement du programme

Lorsque le programme a été mis au point en simulation, il suffit de le charger dans le S500 en effectuant une écriture de configuration.

2.7 Mise au point sur le poste local (Debugger en ligne)

Pour une vérification finale, l’outil « Debugger » peut être utilisé en connexion locale ou distante avec le poste local, simplement en cliquant sur le bouton de la fenêtre principale (cf. § 1.1.1. ).

Il permet ainsi de contrôler l’exécution des programmes ST en gérant directement les entrées-sorties du poste local avec tous les traitements qui y sont effectués (temporisations, seuils, …).

du poste local avec tous les traitements qui y sont effectués (temporisations, seuils, …). S500-doc_09-AUTO -

Automatismes ST

3

Opérateurs

3.1 Arithmétique

+
+

3.1.1 Addition de variables

 

Ex. :

data5

:= (data51 + data52) + data53;

−

3.1.2 Soustraction de variables

Ex. :

data10 := data101 data102;

∗

3.1.3 Multiplication de variables

Ex. :

data10 := data101 * data102;

/
/

3.1.4 Division de variables

 

Ex. :

data10 := data101 / data102;

∗∗
∗∗

3.1.5 Élévation à la puissance d’une variable

Ex. :

data100:= data10**2.0;

3.2 Opérateurs booléens

AND
AND

3.2.1 ET booléen entre variables booléennes

Ex. :

data10 := data101 AND data102;

OR
OR

3.2.2 OU booléen entre variables booléennes

Ex. :

data5 := data51 OR data52;

XOR
XOR

3.2.3 OU exclusif booléen entre variables booléennes

Ex. :

data10 := data101 XOR data102;

NOT
NOT

3.2.4 NON booléen : inversion d’une variable booléenne

Ex. :

data22 := NOT data101;

Automatismes ST

3.3 Opérateurs de comparaisons

Ces opérateurs permettent de comparer des variables ou des constantes entre elles. Le résultat de cette comparaison est une valeur booléenne :

TRUE si la comparaison est vraie,

FALSE si la comparaison est fausse.

<
<

3.3.1 Inférieur à : teste si une valeur est plus petite qu’une autre

(valeurs réelles, valeurs entières, temporisations)

Ex. :

data1 := (data2 < 5.0); (* data1 is TRUE if data2 < 5 *)

<=
<=

3.3.2 Inférieur ou égal à : teste si une valeur est plus petite ou égale à une autre

(valeurs réelles, valeurs entière, temporisations)

Ex. :

data1 := (data2 <= 5.0); (* data1 is TRUE if data2 < 5 *)

=
=

3.3.3 Égal à : teste si une valeur est égale à une autre

(valeurs réelles, valeurs entière, chaînes de caractères)

Ex. :

data1 := (data2 = 5.0); (* data1 is TRUE if data2 = 5 *)

<>
<>

3.3.4 Différent de : teste si une valeur est différente par rapport à une autre

(valeurs réelles, valeurs entière, temporisations ou chaînes de caractères)

Ex. :

data1 := (data2 <> data3); (* data1 is TRUE if data2 data3 *)

>
>

3.3.5 Supérieur à : teste si une valeur est plus grande qu’une autre

(valeurs réelles, valeurs entière, temporisations)

Ex. :

data1 := (data2 > 5.0); (* data1 is TRUE if data2 > 5 *)

>=
>=

3.3.6 Supérieur ou égal à : teste si une valeur est plus grande ou égale à une autre

(valeurs réelles, valeurs entière, temporisations)

Ex. :

data1 := (data2 >= 5.0); (* data1 is TRUE if data2 > 5 *)

Automatismes ST

4

Fonctions

4.1 Définition

Les fonctions permettent de réaliser des traitements simples. Chaque fonction retourne une valeur de sortie unique qui dépend uniquement des valeurs courantes de ses paramètres d’entrée.

Les constantes ou les variables utilisées lors de l’appel de la fonction doivent être du type autorisé par la fonction, sinon il est nécessaire d’utiliser les fonctions de conversion de type. Il existe des fonctions définies dans la norme IEC1131-3 et d’autres, développées spécifiquement par SOFREL pour le métier de la Télégestion.

4.2 Utilisation d’une fonction

Syntaxe: <retour> := <nom de la fonction> (<parametre1>, …, <parametreN>);

Ex. : data3 := SIN (data1);

4.3 Fonctions standard ST

4.3.1 Fonctions mathématiques

ABS
ABS

4.3.1.1 Calcul de la valeur absolue d’un réel

Entrée

IN

REAL

Sortie

Q

REAL

valeur absolue

Ex. :

IN REAL Sortie Q REAL valeur absolue Ex. : 4.3.1.2 ACOS value := ABS (delta); Calcul

4.3.1.2 ACOS

value := ABS (delta);

Calcul de l’arc cosinus d’un réel

Entrée

IN

REAL

(toute valeur dans l’intervalle [-1.0 à +1.0])

Sortie

Q

REAL

arc cosinus de la valeur d’entrée dans l’intervalle [0.0 à PI] = 0.0 po ur une entrée invalide

Ex. :

result := ACOS (data1);

ASIN
ASIN

4.3.1.3 Calcul de l’arc sinus d’une valeur réelle

Entrée

IN

REAL

(toute valeur dans l’intervalle [-1.0 à +1.0])

Sortie

Q

REAL

arc sinus de la valeur d’entrée dans l’intervalle [-PI/2 à +PI/2] = 0.0 pour une entrée invalide

Ex. :

result := ASIN (data1);

Automatismes ST

ATAN
ATAN

4.3.1.4 Calcul de l’arc tangente d’une valeur réelle

Entrée

IN

REAL

Sortie

Q

REAL

arc sinus de la valeur d’entrée dans l’intervalle [-PI/2 à +PI/2] = 0.0 pour une entrée invalide

Ex. :

result := ATAN (data1);

COS
COS

4.3.1.5 Calcul du cosinus d’une valeur réelle

Entrée

IN

REAL

(toute valeur réelle)

Sortie

Q

REAL

cosinus de la valeur d’entrée dans l’intervalle [-1.0 à +1.0]

Ex. :

result := COS (angle);

EXPT
EXPT

4.3.1.6 Élévation à une puissance (exposant entier)

Entrée

IN

REAL

nombre réel à élever à la puissance

EXP

DINT

puissance (exposant entier)

Sortie

Q

REAL

IN puissance EXP

1.0

si IN est différent de 0.0 et EXP est égal à 0.0

0.0

si IN est égal à 0.0 et EXP est négatif

1.0

si IN e t EXP sont égaux à 0.0

Ex. :

result := EXPT (value, 3);

LOG
LOG

4.3.1.7 Calcul logarithmique base 10 d’une valeur réelle

Entrée

IN

REAL

toute valeur supérieure à 0

Sortie

Q

REAL

logarithme (base 10) de la valeur d’entrée

Ex. :

result := LOG (data5);

POW
POW

4.3.1.8 Élévation à une puissance (exposant réel)

Entrée

IN

REAL

nombre analogique réel à élever

EXP

REAL

puissance (exposant réel)

Sortie

Q

REAL

IN puissance EXP

1.0

si IN est différent de 0.0 et EXP est égal à 0.0

0.0

si IN es t égal à 0.0 et EXP est négatif

1.0

si IN et EXP sont égaux à 0.0

Ex. :

result := POW (value, 3.0);

Automatismes ST

Automatismes ST 4.3.1.9 RAND Valeur aléatoire dans un intervalle donné Entrée IN DINT définit

4.3.1.9 RAND

Valeur aléatoire dans un intervalle donné

Entrée

IN

DINT

définit l’intervalle de valeurs autorisées

Sortie

Q

DINT

valeur aléatoire dans l’intervalle [0 à base-1]

Ex. :

variable := RAND (4);

(* sélection aléatoire d’une valeur parmi 4 valeurs prédéfinies. La valeur issue de l’appel à RAND est un nombre entier dans l’intervalle [0 à 3] *)

SIN
SIN

4.3.1.10 Calcul du sinus d’une valeur réelle

Entrée

IN

REAL

toute valeur réelle

Sortie

Q

REAL

sinus de la valeur d’entrée dans l’intervalle [-1.0 à +1.0]

Ex. :

result := SIN (angle);

SQRT
SQRT

4.3.1.11 Calcul de la racine carrée d’une valeur réelle

Entrée

IN

REAL

toute valeur supérieure ou égale à 0 (si IN est inférieur à 0, Q = 0)

Sortie

Q

REAL

racine carrée de la valeur d’entrée

Ex. :

result := SQRT (32400.00);

TAN
TAN

4.3.1.12 Calcul de la tangente d’une valeur réelle

Entrée

IN

REAL

différent de PI/2 modulo PI

Sortie

Q

REAL

tangente de la valeur d’entrée

Ex. :

Q REAL tangente de la valeur d’entrée Ex. : 4.3.1.13 TRUNC result := TAN (angle); Tronque

4.3.1.13 TRUNC

result := TAN (angle);

Tronque une valeur réelle pour obtenir sa par tie entière

Entrée

IN

REAL

toute valeur réelle signée

Sortie

Q

REAL

si IN>0, plus grand entier inférieur ou égal à IN si IN<0, plus petit e ntier supérieur ou égal à IN

Ex. :

result := TRUNC (+2.67) + TRUNC (-2.0891);

(* result := 2.0 + (-2.0) := 0.0; *)

Automatismes ST

LIMIT
LIMIT

4.3.1.14 Limite une valeur entière à un intervalle donné

La variable conserve sa valeur si elle est entre le minimum et le maximum. La variable est forcée à la valeur maximale (si elle est au dessus), ou forcée au mi nimum (si elle est en dessous).

Entrée

MIN DINT

valeur minimum autorisée

IN

DINT

valeur entière à contrôler

MAX DINT

valeur maximale autorisée

Sortie

Q

DINT

valeur limitée à la plage autorisée

Ex. :

new_value := LIMIT (mini, value, maxi);

(* limite la valeur à l’intervalle [mini - maxi] *)

MIN
MIN

4.3.1.15 Fonction « Minimum » : donne la valeur minimum entre deux variables entières

Entrée

IN1

DINT

toute valeur entière

IN2

DINT

Sortie

Q

DINT

valeur minimale entre les 2 variables d’entrée

Ex. :

new_value := MIN (value 1, value 2);

MAX
MAX

4.3.1.16 Fonction « Maximum » : donne la valeur maximale entre deux variables entières

Entrée

IN1

DINT

toute valeur entière

IN2

DINT

Sortie

Q

DINT

valeur maximale entre les 2 variables d’entrée

Ex. :

new_value := MAX (value 1, value 2);

MOD
MOD

4.3.1.17 Fonction « Modulo » : calcule le reste de la division d’une valeur entière

Entrée

IN

DINT

toute valeur entière

Base

DINT

(Base est le diviseur > 0)

Sortie

Q

DINT

résultat du modulo (rend -1 si Base inférieur ou égal à 0)

Ex. :

new_value := MOD (value, divisor);

(* rest of division *)

ODD
ODD

4.3.1.18 Fonction « Test d’imparité d’un entier »

Entrée

IN

DINT

toute valeur entière

Sortie

Q

BOOL

TRUE si la valeur est impaire FALSE si la valeur est paire

Ex. :

(* if value = odd *) IF (ODD (value)) THEN value := value + 1; END_IF;

S500-doc_09-AUTO

- 24 -

Automatismes ST

4.3.2 Fonctions de manipulation de caractères

ASCII
ASCII

4.3.2.1 Code ASCII d’un caractère dans une chaîne

Entrée

IN

STRING

chaîne de caractères non vide

Pos

DINT

position du caractère sélectionné dans [1 à long] « long » étant la longueur de la chaîne de caractères IN.

Sortie

Code

DINT

code du caractère sélectionné dans l’intervalle [0 à 255] retourne 0 si Pos n’est pas dans la chaîne

Ex. :

First_character := ASCII (string, 1);

(* First_character is code ASCII of the first character of the string *)

is code ASCII of the first character of the string *) 4.3.2.2 CHAR Élaboration d’un caractère

4.3.2.2 CHAR

Élaboration d’un caractère à partir de son code ASCII

Entrée

Code

DINT

code ASCII dans l’intervalle [0 à 255]

Sortie

Q

STRING

chaîne d’un caractère le caractère a le code ASCII spécifié dans Code : le code ASCII est pris modulo 256.

Ex. :

Result := CHAR ( value + 48 );

(* value is in interval [0 to 9] 48 is code ASCII of ‘0’ the result is a string of one character [0 to 9] *)

‘0’ the result is a string of one character [0 to 9] *) 4.3.2.3 DELETE Suppression

4.3.2.3 DELETE

Suppression d’une partie d’une chaîne de car ctères

a

Entrée

IN

STRING

chaîne de caractères

NbC

DINT

nombre de caractères à supprimer

Pos

DINT

position du premier caractère à supprimer

Sortie

Q

STRING

chaîne modifiée chaîne vide si position < 1 chaîne initiale s i Pos > longueur de la chaîne IN chaîne initiale si NbC <= 0

Ex. :

complete_string := ‘ABCD’ + ‘EFGH’; (* = ‘ABCDEFGH’ *) new_string := DELETE (complete_string, 4, 3 ); new_string := ABGH;

(* delete 4 characters from third position *)

Automatismes ST

FIND
FIND

4.3.2.4 Recherche des caractères dans une chaîne

Entrée

IN

STRING

chaîne de caractères

Pat

STRING

toute chaîne non vide

Sortie

Pos

DINT

= 0 si sous chaîne Pat non trouvée = position du premier caractère de la première occurrence de la chaîne Pat (cette fonction différencie les majuscules des minuscules)

Ex. :

fonction différencie les majuscules des minuscules) Ex. : 4.3.2.5 INSERT complete_string := ‘ABCD’ + ‘EFGH’;

4.3.2.5 INSERT

complete_string := ‘ABCD’ + ‘EFGH’; (* = ‘ABCDEFGH’ *) dataposition := FIND (complete_string, ‘CDEF’); (*dataposition := 3 *)

Insertion de caractères dans une chaîne

Entrée

IN

STRING

chaîne initiale

Str

STRING

chaîne de caractères à insérer

Pos

DINT

position de l’insertion (avant la position donnée)

Sortie

Q

STRING

chaîne vide si Pos <= 0 concaténation des 2 chaînes si P os est plus grand que la longueur de la chaîne I N

Ex.

: My_name := INSERT (‘Mr D (* = ‘Mr Frank DUPONT’ *)

UPONT’, ‘Frank ‘, 4);

LEFT
LEFT

4.3.2.6 Extraction de la partie gauche d’une chaîne

Entrée

IN

STRING

chaîne de caractères non vide

NbC

DINT

nombre à extraire (inférieur à la longu

eu

r de la ch

aîne)

Sortie

Q

STRING

partie gauche de la chaîne IN chaîne vide si Nbc <= 0 chaîne IN initiale si Nb C >= longueur de la chaîne IN

Ex. :

complete_string (* = ‘1234’ *)

:= LEFT (‘12345678’, 4);

MID
MID

4.3.2.7 Extraction de la partie centrale d’une chaîne

Entrée

In

STRING

chaîne de caractères

NbC

DINT

nombre à extraire (inférieur à la longueur de la chaîne)

Pos

DINT

position du premier caractère à extraire

Sortie

Q

STRING

partie centrale de la chaîne (sa longueur = NbC) chaîne vide si Nbc <= 0 chaîne IN initiale si NbC >= longueur de la chaîne IN

Ex. :

new_string := MID (‘abcdefgh’, 2, 4); (* = ‘de’ *)

Automatismes ST

Automatismes ST 4.3.2.8 MLEN Calcul de la longueur d’une chaîne Entrée IN STRING chaîne de caractères

4.3.2.8 MLEN

Calcul de la longueur d’une chaîne

Entrée

IN

STRING

chaîne de caractères

Sortie

NbC

DINT

nombre de caractères dans la chaîne IN

Ex. :

number_characters := MLEN (complete_string); IF (number_characters >= 3) THEN prefix := LEFT (complete_string, 3); END_IF;

(* this program extract the 3 characters at the left of the string and put the result in the variable ‘prefix’ *)

string and put the result in the variable ‘prefix’ *) 4.3.2.9 REPLACE Remplacement des caractères dans

4.3.2.9 REPLACE

Remplacement des caractères dans une chaîne

Entrée

IN

STRING

chaîne de caractères

STR

STRING

chaîne contenant les caractères à insérer

NbC

DINT

nombre de caractères à détruire

Pos

DINT

position du premier caractère remp

lacé

Sortie

Q

STRING

chaîne modifiée : (NbC caractères sont détruits à partir de Pos et la chaîne STR est insérée à cette position )

- rend une chaîne vide si Pos <= 0

- rend la concaténation des chaînes (IN+STRING ) si Pos est supérieur à la longueur de c haîne IN

- rend la chaîne initiale IN si NbC <= 0

Ex.

: My_name := REPLACE (‘Mr X DUPONT’, ‘Di (* ‘Mr Didier DUPONT’ *)

dier’, 1, 4);

‘Di (* ‘Mr Didier DUPONT’ *) dier’, 1, 4); 4.3.2.10 RIGHT Extraction de la partie droite

4.3.2.10 RIGHT

Extraction de la partie droite d’une chaîne

Entrée

IN

STRING

chaîne de caractères

NbC

DINT

nombre de caractères à extraire

Sortie

Q

STRING

partie droite de la chaîne IN (sa longueur = NbC)

- chaîne vide si NbC <= 0

- chaîne IN initiale si NbC >= longueur de la chaîne IN

Ex. :

complete_str (* ‘5678’ *)

ing := RIGHT (‘12345678’, 4);

Automatismes ST

4.3.3 Fonctions de conversion

BOO
BOO

4.3.3.1 Conversion en variable booléenne

Entrée

IN

Sortie

Q

BOOL

TRUE pour une valeur entière ou réelle non nulle FALSE pour une valeur nulle

Ex. :

result := BOO (10); (* result = TRUE *)

ANA
ANA

4.3.3.2 Conversion en valeur entière

Entrée

IN

Sortie

Q

DINT

Pour un booléen : 0 pour FALSE / 1 pour TRUE Pour une temporisation : nombre de mill isecondes Pou r un réel : partie entière

Ex. :

result := ANA (‘T (* result = 1 *)

RUE’);

Ex. :

result := ANA (‘0198’) (* result = 198 *)

;

REAL
REAL

4.3.3.3 Conversion en variable réelle

Entrée

IN

Sortie

Q

REAL

Pour un booléen : 0.0 pour FALSE / 1.0 pour TRUE Pour un entier XXX : ajout de la partie décimale XXX.00 Po ur une temporisation : nombre de millisecondes

Ex. :

result := REAL (tru (* result = 1.0 *)

e);

Ex. :

result := REAL (‘198’) (* result = 198.00 *)

;

Automatismes ST

MSG
MSG

4.3.3.4 Conversion en variable de type STRING

Entrée

IN

Sortie

Q

STRING

Pour un booléen : ‘FALSE’ ou ‘TRUE’

Ex. :

result := MSG (true); (* result = ‘TRUE’ *)

Ex. :

result := MSG (125); (* result = ‘125’ *)

Ex. :

result := MSG (125.851); (* result = ‘125.85’ *)

TMR
TMR

4.3.3.5 Conversion en variable de type TIME

Entrée

IN

Sortie

Q

TIME

nombre de millisecondes (temps représenté par IN)

Ex. :

result := TMR (‘1256.3’); (* result = t#1s256ms *)

Automatismes ST

4.3.4 Fonctions de registres

Automatismes ST 4.3.4 Fonctions de registres 4.3.4.1 AND_MASK Masque ET bit à bit entre deux entiers

4.3.4.1 AND_MASK

Masque ET bit à bit entre deux entiers

Entrée

IN

DINT

(format entier)

MSK

DINT

(format entier)

Sortie

Q

DINT

ET logique bit à bit entre IN et MSK

Ex. :result := AND_MASK (16#abc, 16#f0f);

(* result = 16#a0c *)

:= AND_MASK (16#abc, 16#f0f); (* result = 16#a0c *) 4.3.4.2 NOT_MASK Masque inversion logique bit à

4.3.4.2 NOT_MASK

Masque inversion logique bit à bit d’un entier

Entrée

IN

DINT

(format entier)

Sortie

Q

DINT

inversion logique bit à bit de IN (sur 32 bits)

Ex. :

result := NOT_MASK (16#1234);

(* result hexa = 16#FFFF_EDCB *)

:= NOT_MASK (16#1234); (* result hexa = 16#FFFF_EDCB *) 4.3.4.3 OR_MASK Masque OU bit à bit

4.3.4.3 OR_MASK

Masque OU bit à bit entre deux entiers

Entrée

IN

DINT

(format entier)

MSK

DINT

(format entier)

Sortie

Q

DINT

OU logique bit à bit entre IN et MSK

Ex. :

is_odd := OR_MA

SK (value, 1);

(* always odd *)

Ex. :

result := OR_MASK (16#abc, 16#f0f);

(*result hexadecimal = 16#fbf *)

ROL
ROL

4.3.4.4 Rotation à gauche des bits d’un entier

*) ROL 4.3.4.4 Rotation à gauche des bits d’un entier Entrée IN DINT (toute valeur entière)

Entrée

IN

DINT

(toute valeur entière)

NBR

DINT

(nombre de rotations de 1 bit dans l’intervalle [1 à 31])

Sortie

Q

DINT

valeur décalée à gauche (sans effet si NBR <= 0)

Ex. :

regist = 2#0100_1101_0011_0101 result := ROL (regist, 1);

(* result

= 2#1001_1010_0110_1010*)

Automatismes ST

ROR
ROR

4.3.4.5 Rotation à droite des bits d’un entier

ST ROR 4.3.4.5 Rotation à droite des bits d’un entier Entrée IN DINT (toute valeur entière)

Entrée

IN

DINT

(toute valeur entière)

NBR

DINT

(nombre de rotations de 1 bit dans l’intervalle [1 à 31])

Sortie

Q

DINT

valeur décalée à droite (sans effet si NBR <= 0)

Ex. :

regist = 2#0100_1101_0011_0101 result := ROR (regist, 1);

(* result = 2#1010_0110_1001_1010 *)

SHL
SHL

4.3.4.6 Décalage à gauche des bits d’un entier

*) SHL 4.3.4.6 Décalage à gauche des bits d’un entier Entrée IN DINT (toute valeur entière)

Entrée

IN

DINT

(toute valeur entière)

NBS

DINT

(nombre de décalages de 1 bit dans l’intervalle [1 à 31])

Sortie

Q

DINT

valeur décalée à gauche (sans effet si NBS la valeur 0 remplac e le bit de poids faible

<= 0)

Ex.

: regist = 2#0100_1101_001 result := SHL (regist, 1);

1_0101

(* result = 2#1001_1010_0110_1010 *)

SHR
SHR

4.3.4.7 Décalage à droite des bits d’un entier

Entrée

IN

DINT

(toute valeur entière)

NBS

DINT

(nombre de décalages de 1 bit dans l’intervalle [1

à 31])

Sortie

Q

DINT

valeur décalée à droite (sans effet si NBS <= 0) le bit de poids fort est recopié à chaque décalage

Ex. :

regist = 2#0100_1101_0011_0101 result := SHR (regist, 1);

(* result = 2#0010_0110_1001_1010 *)

:= SHR (regist, 1); (* result = 2#0010_0110_1001_1010 *) 4.3.4.8 XOR_MASK Masque OU exclusif bit à

4.3.4.8 XOR_MASK

Masque OU exclusif bit à bit entre deux entiers

Entrée

IN

DINT

MSK

DINT

Sortie

Q

DINT

(OU exclusif logique bit à bit entre IN et MSK)

Ex. :

result := XOR_MASK (16#012, 16#011);

(* result hexa = 16#003 *)

Automatismes ST

4.3.5 Fonctions de sélecteurs

MUX4
MUX4

4.3.5.1 Sélection d’une valeur parmi 4 valeurs entières

Entrée

SEL

DINT

valeur entière de sélection dans l’intervalle [0 à 3]

IN1 à IN4

DINT

valeurs entières à sélectionner

Sortie

Q

DINT

= IN1 si SEL = 0

 

=

IN2 si SEL = 1

=

IN3 si SEL = 2

=

IN4 si SEL = 3

=

0 pour toutes les autres valeurs de SEL

Ex. :

selection := MUX4 (choice, 1, 10, 100, 1000); (* select 1 value among 4 : if choice = 1, select = 10 *)

MUX8
MUX8

4.3.5.2 Sélection d’une valeur parmi 8 valeurs entières

Entrée

SEL

DINT

valeur entière de sélection dans l’intervalle [0 à 7]

IN1 à

IN8

DINT

valeurs entières à sélectionner

Sortie

Q

DINT

= IN1 si SEL = 0