Beruflich Dokumente
Kultur Dokumente
Avant-propos, Sommaire
Présentation du produit 1
SIMATIC Installation 2
Développement d'un
programme S7-SCL 3
S7-SCL V5.3 pour S7-300/400
Utilisation de S7-SCL 4
Notions fondamentales dans
S7-SCL 5
Manuel
Structure de programme
S7-SCL 6
Types de données 7
Déclaration de variables
locales et de paramètres 8
Déclaration de constantes
et repères de saut 9
Données globales 10
Expressions, opérations
et opérandes 11
Instructions 12
Compteurs et temporisation 13
Fonctions standard de
S7-SCL 14
Description du langage 15
Conseils et astuces 16
Glossaire, Index
Edition 01/2005
A5E00324651-01
Consignes de sécurité
Ce manuel donne des consignes que vous devez respecter pour votre propre sécurité et pour éviter des
dommages matériels. Les avertissements servant à votre sécurité personnelle sont accompagnés d'un
triangle de danger, les avertissements concernant uniquement des dommages matériels sont
dépourvus de ce triangle. Les avertissements sont représentés ci-après par ordre décroissant de niveau
de risque.
Danger
! signifie que la non-application des mesures de sécurité appropriées entraîne la mort ou des blessures
graves.
Attention
! signifie que la non-application des mesures de sécurité appropriées peut entraîner la mort ou des
blessures graves.
Prudence
! signifie que la non-application des mesures de sécurité appropriées peut entraîner des blessures
légères.
Prudence
signifie que la non-application des mesures de sécurité appropriées peut entraîner un dommage
matériel.
Important
signifie que le non-respect de l'avertissement correspondant peut entraîner l'apparition d'un
événement ou d'un état indésirable.
En présence de plusieurs niveaux de risque, c'est toujours l'avertissement correspondant au niveau le
plus élevé qui est reproduit. Si un avertissement avec triangle de danger prévient des risques de
dommages corporels, le même avertissement peut aussi contenir un avis de mise en garde contre des
dommages matériels.
Personnel qualifié
L'installation et l'exploitation de l'appareil/du système concerné ne sont autorisées qu'en liaison avec la
présente documentation. La mise en service et l'exploitation d'un appareil/système ne doivent être
effectuées que par des personnes qualifiées. Au sens des consignes de sécurité figurant dans cette
documentation, les personnes qualifiées sont des personnes qui sont habilitées à mettre en service, à
mettre à la terre et à identifier des appareils, systèmes et circuits en conformité avec les normes de
sécurité.
Utilisation conforme à la destination
Tenez compte des points suivants :
! Attention
L'appareil/le système ne doit être utilisé que pour les applications spécifiées dans le catalogue ou
dans la description technique, et uniquement en liaison avec des appareils et composants
recommandés ou agréés par Siemens s'ils ne sont pas de Siemens.
Le transport, le stockage, le montage, la mise en service ainsi que l'utilisation et la maintenance Le
fonctionnement correct et sûr du produit implique son transport, stockage, montage et mise en service
selon les règles de l'art ainsi qu'une utilisation et maintenance soigneuses.
Marque de fabrique
Toutes les désignations repérées par ® sont des marques déposées de Siemens AG. Les autres
désignations dans ce document peuvent être des marques dont l'utilisation par des tiers à leurs propres
fins peut enfreindre les droits de leurs propriétaires respectifs.
Siemens AG
Automation and Drives Siemens AG 2005
Postfach 4848, 90327 Nürnberg, Allemagne Sous réserve de modifications techniques
Siemens Aktiengesellschaft A5E00324651-01
Avant-propos
But du manuel
Ce manuel donne une description exhaustive de la programmation avec S7-SCL. Il vous
guidera pour installer le logiciel et le mettre en service. Il explique comment écrire des
programmes utilisateur et présente les différents éléments de langage.
Il s'adresse aux programmeurs en langage S7-SCL et à tous ceux qui travaillent à la
configuration, la mise en service et la maintenance des systèmes d'automatisation.
Nous recommandons de se familiariser avec l'exemple du chapitre 2 "Conception d'un
programme S7-SCL". Il facilite l'apprentissage de la programmation avec S7-SCL.
Validité du manuel
Ce manuel s'applique au logiciel S7-SCL V5.3.
Aide en ligne
L'aide en ligne vous donne les informations qui vous manquent à l'endroit où vous en avez
besoin. De cette manière, vous obtenez très vite les renseignements pertinents, sans avoir à
chercher dans des manuels. Vous disposez des commandes suivantes :
• Rubriques d'aide propose la liste des sujets traités dans l'aide ;
• Aide contextuelle (touche F1) affiche des informations sur l'objet sélectionné ou sur la
boîte de dialogue ou la fenêtre active ;
• Introduction donne un aperçu de l'application, de ses caractéristiques et de sa
fonctionnalité ;
• Mise en route résume les opérations à effectuer pour obtenir un premier résultat ;
• Utiliser l'aide décrit les moyens dont vous disposez pour trouver certaines informations
dans l'aide ;
• A propos de renseigne sur la version actuelle de l'application.
Assistance supplémentaire
Si des questions sont restées sans réponse dans ce manuel, veuillez vous adresser à votre
interlocuteur Siemens dans la filiale ou l'agence de votre région.
Vous trouvez votre interloculeur sous :
http://www.siemens.com/automation/partner
Vous trouvez un fil rouge pour la recherche de documentations techniques sur les produits
et systèmes SIMATIC à l’adresse suivante sur Internet :
http://www.siemens.com/simatic-tech-doku-portal
Le catalogue en ligne et le système de commande en ligne se trouvent à l'adresse :
http://mall.automation.siemens.com/
Technical Support
Vous pouvez joindre le support technique pour tous les produits A&D
• Via le formulaire Web de demande d’assistance (Support Request)
http://www.siemens.com/automation/support-request
• Téléphone : + 49 180 5050 222
• Télécopie : + 49 180 5050 223
Vous trouvez plus d’informations concernant notre Technical Support sur Internet à l’adresse
suivante :
http://www.siemens.com/automation/service
Glossaire
Index
Certificat PLCopen
S7-SCL correspond au langage évolué textuel ST (Structured Text) défini dans la norme
CEI 61131-3 et a été conçu en vue de la certification pour Reusability Level.
Domaine d'application
S7-SCL est optimisé pour la programmation d'automates programmables et contient, outre
des éléments du langage de programmation PASCAL, également des éléments
d'automatisation typiques, tels que p. ex. des entrées/sorties, temporisations et compteurs.
S7-SCL convient tout particulièrement aux tâches suivantes :
• programmation d'algorithmes complexes,
• programmation de fonctions mathématiques,
• gestion de données ou de recettes,
• optimisation de processus.
Intégration à STEP 7
S7-SCL prend en charge le concept de blocs STEP 7.
Blocs STEP 7
Environnement de développement
Pour une utilisation facile, S7-SCL met à votre disposition un environnement de
développement efficace convenant aussi bien aux propriétés spécifiques de S7-SCL qu'à
STEP 7. Cet environnement de développement comprend :
• un éditeur pour écrire des programmes composés de fonctions (FC), blocs fonctionnels
(FB), blocs d'organisation (OB), blocs de données (DB) et types de données utilisateur
(UDT) ; des fonctions puissantes assistent le programmeur dans sa tâche ;
• un compilateur séquentiel pour traduire en code machine MC7 le programme
préalablement édité ; le code MC7 généré est exécutable sur toutes les CPU des
systèmes d'automatisation SIMATIC S7-300/400 à partir de la CPU 314 ;
• un débogueur pour rechercher les erreurs de programmation logiques dans le résultat
d'une compilation exempte d'erreurs ; la recherche d'erreurs est effectuée dans le
langage source.
Compilateur
Editeur séquentiel Débogueur
Bibliothèques de blocs
Des blocs prédéfinis sont fournis dans des bibliothèques, p. ex. :
• fonctions système
• fonctions CEI
• fonctions de conversion
La navigation dans la bibliothèque s'effectue dans une boîte de dialogue. Lorsque vous
sélectionnez un bloc, le modèle des paramètres de la fonction est automatiquement copié
dans le fichier édité. Vous n'avez alors plus qu'à entrer les paramètres souhaités.
Modèles de programmes
L'éditeur S7-SCL met à votre disposition ces modèles qu'il vous suffit de compléter :
• modèles de blocs (p. ex. blocs fonctionnels, blocs de données) et leurs appels
• modèles pour commentaires de blocs, paramètres de blocs et constantes
• modèles pour structures de contrôle (IF, CASE, FOR, WHILE, REPEAT)
Impression en couleurs
Il est possible d'imprimer les sources S7-SCL en couleurs.
Licences
Des licences sont nécessaires pour l'utilisation des progiciels de STEP 7 protégés par des
droits de licence. Une licence est accordée comme droit d'utilisation de produits. Les
représentants de ce droit sont :
• CoL (Certificate of License) et
• License Key
License Keys
La "License Key" est le représentant technique d'une licence (marque de licence
électronique).
SIEMENS AG attribue une "License Key" pour tout logiciel protégé par des droits de licence.
Le logiciel correspondant peut exclusivement être utilisé conformément aux conditions de
licence et d'utilisation liées à la "Licence Key" correspondante si la présence de la
"License Key" valide est constatée sur un ordinateur, après démarrage du logiciel.
Nota
• Vous avez également la possibilité d'utiliser le logiciel de base de S7-SCL sans
"License Key" pour en découvrir l'interface utilisateur et les fonctionnalités.
• L'utilisation sans restrictions, conforme aux déclarations de droits de licence, n'est
cependant autorisée et possible que lorsque la "License Key" est installée.
• Si vous n'avez pas installé de "License Key", vous êtes sollicité à intervalles réguliers de
réaliser l'installation.
Les "License Keys" sont disponibles sur les supports de données suivants et peuvent être
transférées d'un support à l'autre :
• disquettes "License Key",
• disques durs locaux et
• disques durs d'ordinateurs dans le réseau.
Des informations supplémentaires sur l'utilisation des "License Keys" sont fournies dans
l'aide en ligne de Automation License Manager.
Types de licences
Pour les produits logiciels de Siemens AG, il existe les types suivants de licences orientées
application. Le comportement du logiciel est déterminé par les diverses "License Keys"
correspondant à ces types de licences. Le type d'utilisation est défini par le "Certificate of
License" respectif.
Nota
Des informations détaillées sur la procédure d'installation de Automation License Manager
sont données dans son fichier Lisezmoi.wri actuel.
Tous les informations relatives à la fonctionnalité et à l'utilisation des "License Keys" de
Automation License Manager sont données dans l'aide en ligne.
Nota
• Vous avez également la possibilité d'utiliser le logiciel de base sans "License Key" pour
en découvrir l'interface utilisateur et les fonctionnalités.
• L'utilisation sans restrictions, conforme aux déclarations de droits de licence, n'est
cependant autorisée et possible que lorsque la "License Key" est installée.
• Si vous n'avez pas installé de "License Key", vous êtes sollicité à intervalles réguliers de
réaliser l'installation.
Pour installer les "License Keys" ultérieurement, vous avez les possibilités suivantes :
• installez les "License Keys" depuis les disquettes,
• installez les "License Keys" en les téléchargeant depuis Internet (une commande
préalable est requise),
• utilisez des "Floating License Keys" disponibles sur Internet.
Vous trouverez des informations détaillées sur la procédure dans l'aide en ligne contextuelle
de Automation License Manager, que vous pouvez appeler après l'installation en appuyant
sur la touche F1 ou en choisissant la commande de menu ? > Aide de License Manager.
Nota
• Les "License Keys" sont uniquement fonctionnelles sous Windows 2000/XP si elles se
trouvent sur un disque dur possédant des droits d'accès en écriture.
• Les "Floating Licenses" peuvent également être utilisées via un réseau, c'est-à-dire "à
distance".
Avertissement
! Tenez compte des indications d'utilisation des "License Keys" décrites dans l'aide en ligne et
dans le fichier Lisezmoi.wri de Automation License Manager. Le non-respect de ces règles
risque d'entraîner la perte irrémédiable des "License Keys".
2.2 Installation
Objectifs
L'exemple proposé veut vous apprendre à utiliser au mieux les possibilités offertes par
S7-SCL. Les questions les plus fréquentes au début sont par exemple :
• Comment faire pour concevoir mon programme avec S7-SCL ?
• Quels sont les éléments de langage de S7-SCL adéquats pour résoudre ce problème ?
• Quelles sont les fonctions de test mises à ma disposition ?
Ce chapitre entend répondre à ces questions et à quelques autres.
Matériel requis
Vous pouvez exécuter le programme-exemple dans un automate SIMATIC S7-300 ou
SIMATIC S7-400 doté de la périphérie suivante :
• Un module d'entrée à 16 voies,
• Un module de sortie à 16 voies.
Présentation
Il s'agit de saisir des valeurs de mesure au moyen d'un module d'entrée, pour les trier et
traiter ensuite à l'aide d'un programme S7-SCL. Les résultats seront indiqués par un module
de sortie.
Commutateur de
saisie Valeur de mesure Commutateur de tri
X 1 1 1 1 1 1 1 1 X
255
255 1 1 1
127 3 2 9
63 7 3 49
31 15 Calculs 4 225
15 31 6 961
7 63 8 3969
3 127 11 16129
Débordement
1 255 16 haut
1 1 1
3 2 9
Adressage
7 de la sortie 3 49
15 4 225
31 6 961
63 Inverseur 8 3969
Sélection
127 de la sortie 11 16129
Débordement
255 16 haut
Types de bloc
Un programme S7-SCL structuré permet de résoudre au mieux le problème posé. Un tel
programme est de construction modulaire, c'est-à-dire divisé en blocs chargés chacun d'une
tâche partielle bien déterminée. Comme dans les langages de programmation de STEP 7,
vous disposez dans S7-SCL des types de bloc suivants.
Les fonctions sont des blocs de code sans mémoire. De ce fait, il faut que les
Blocs FC valeurs calculées soient traitées aussitôt après l'appel de la fonction.
STEP 7
Les blocs de données sont des zones servant à mémoriser les données
DB utilisateur. On distingue les DB globaux auxquels tous les blocs de code
ont accès et les DB d'instance qui sont associés à un appel de FB
déterminé.
Les types de donné es utilisateur sont des types complexes que vous
UDT définissez vous-même au besoin et qui sont réutilisables. Ainsi, un type
de données utilisateur peut servir à générer plusieurs blocs de données de
même structure. Les UDT s'emploient comme des blocs.
Tâches partielles
Dans la figure ci-après, les tâches partielles sont représentées par des blocs. Les zones
rectangulaires grises représentent les blocs. La disposition des blocs de code de la gauche
vers la droite correspond à leur ordre d'appel.
Enregistre-
SAISIE_DONNEES Sens de dé- Sens de dé-
ment des
Bloc de données (DB) placement du Placement
données
programme des données
Présentation
L'interface d'un bloc est formée de paramètres auxquels il est possible d'accéder depuis
d'autres blocs.
Les paramètres déclarés dans le bloc sont des marques de réservation dont les valeurs ne
sont fixées qu'au moment de l'utilisation concrète (appel). On les nomme paramètres
formels, tandis que les valeurs qui leur sont affectées à l'appel du bloc sont désignées par
paramètres effectifs. Lorsqu'un bloc est appelé, des données d'entrée lui sont transmises en
tant que paramètres effectifs. Après le retour au bloc appelant, les données de sortie sont
mises à disposition pour être prises en charge. Une fonction (FC) peut transmettre son
résultat sous forme de valeur de la fonction.
On peut classer les paramètres de bloc dans les catégories suivantes :
OB CYCLE
L'OB CYCLE n'a pas de paramètres formels. Il appelle le FB SAISIE et lui transmet pour
ses paramètres formels la valeur de mesure et les données de commande.
FB SAISIE
FB CALCUL
Le FB SAISIE appelle le FB CALCUL. Les deux FB ont comme données communes le
tableau de valeurs de mesure à trier. Il faut donc déclarer ce tableau comme paramètre
d'entrée/sortie. Un tableau de structures est créé en tant que paramètre d'entrée pour les
résultats du calcul que sont la racine carrée et le carré. Voici les paramètres formels :
SQRT et CARRE
Ces fonctions sont appelées par CALCUL. Elles nécessitent une valeur d'entrée et
fournissent le résultat en tant que valeur de la fonction.
Octet 0 Octet 4
Système d'automatisation
Octet 1 Octet 5
Module
d'entrée Octet 0
E 0.3
0 Validation de la valeur de mesure
E 0.4 1 Déclenchement du tri et du calcul
2 Choix du résultat : racine carrée ou carré
3 Sélection sortie : valeur de mesure ou résultat
4 Codage, bit 0
5 Codage, bit 1
6 Codage, bit 2
7 Validation du codage
Octet 1
Module de
sortie Octet 4 0
0à7 Octet de poids fort du mot de sortie
1
(bits 8 à 15), requis seulement pour
2 l'élévation au carré, sinon 0.
3
4
5
6
7
0
1
2
0à7 Octet de poids faible du mot de sortie
3 (bits 0 à 7), valeur de mesure ou résultat :
4 racine carrée ou carré.
5
6
Octet 5 7
FC CARRE
appelle
FB CALCUL
appelle
FB SAISIE
appelle
OB CYCLE
Début de l’instruction
REPEAT échanger := FALSE
I := LIMITE
I signifie index
Début de l’instruction
FOR non
I >= 1 ?
oui
oui
mémoire_tri [I-1] >
mémoire_tri [I]
? Echanger les valeurs
de la mémoire de tri [I-1]
non et de la mémoire de tri [I]
ECHANGER = TRUE
Fin de l’instruction
REPEAT échanger ?
TRUE
FALSE
I := 0
Début de l’instruction
FOR non
I <= LIMITE ?
oui
Entrer les résultats dans le ta-
SQRT bleau structuré des résultats.
Fin
CONST
LIMITE := 7;
END_CONST
VAR_IN_OUT
memoire_tri : ARRAY[0..LIMITE] OF INT;
END_VAR
VAR_OUTPUT
memoire_calcul : ARRAY[0..LIMITE] OF
STRUCT
racine_carree : INT;
carre : INT;
END_STRUCT;
END_VAR
VAR_TEMP
echanger : BOOL;
indice, aux : INT;
valeur_r, resultat_r: REAL;
END_VAR
Déroulement du programme
Le paramètre d'entrée/sortie "memoire_tri" est combiné avec la mémoire circulante
"valeurs_mesure", c'est-à-dire que le contenu original de la mémoire est écrasé par les
valeurs de mesure triées.
Le nouveau tableau "memoire_calcul" est créé comme paramètre de sortie pour les résultats
du calcul. Ses éléments sont structurés de telle façon qu'ils contiennent la racine carrée et le
carré de chaque valeur de mesure.
La figure ci-après montre le lien entre les tableaux décrits.
mémoire_tri
valeurs_mesure
mémoire_calcul
CALCUL
BEGIN
(******************************************************************
1ère partie : tri par échange de paires. Les valeurs sont échangées
par paires jusqu'à ce que la mémoire des valeurs de mesure soit
triée.
*******************************************************************)
REPEAT
echanger := FALSE;
FOR indice := LIMITE TO 1 BY -1 DO
IF memoire_tri[indice-1] > memoire_tri[indice]
THEN aux :=
memoire_tri[indice];
memoire_tri[indice] := memoire_tri[indice-1];
memoire_tri[indice-1] := aux;
echanger := TRUE;
END_IF;
END_FOR;
UNTIL NOT echanger
END_REPEAT;
(******************************************************************
2ème partie : calcul de la racine carrée avec la fonction standard
SQRT et élévation au carré avec la fonction CARRE.
*******************************************************************)
FOR indice := 0 TO LIMITE BY 1 DO
valeur_r := INT_TO_REAL(memoire_tri[indice]);
resultat_r := SQRT(valeur_r);
memoire_calcul[indice].racine_carree := REAL_TO_INT(resultat_r);
memoire_calcul[indice].carre :=
CARRE(memoire_tri[indice]);
END_FOR;
END_FUNCTION_BLOCK
Début
Modifier oui
nouvelle
valeur ? La mémoire circulante est réalisée
Inscrire valeur de mesure
avec l’opération MOD : lorsque la limite
non dans mémoire circulante,
est atteinte, elle recommence au
recalculer l’index
début.
Modifier oui
nouveau
tri ?
Trier la mémoire circulante et effectuer
non CALCUL les calculs (créer à cet
effet le tableau des résultats).
Modifier oui
nouveau
code ? D’abord décaler les bits non
Evaluation du codage et
significatifs vers le bord droit,
non détermination de l’adresse
puis masquer les places inutiles
de sortie
à l’aide de AND
Choix TRUE
fonction ?
FALSE
Charger résultat du calcul Charger résultat du calcul
de la racine carrée du cadre
Charger :
Charger valeur de mesure inscrire les éléments de la liste
avec les adresses de sortie dans
les paramètres de sortie pour ensuite
afficher leurs valeurs.
Fin
CONST
LIMITE := 7;
NOMBRE := LIMITE + 1;
END_CONST
VAR_INPUT
entree_val_mesure : INT ; // Nouvelle valeur de mesure
nouv_val : BOOL; // Prendre en charge la valeur
// de mesure dans la mémoire
// circulante "valeurs_mesure"
nouv_tri : BOOL; // Trier les valeurs de mesure
choix_fonction : BOOL; // Choix de la fonction de calcul
Racine carrée ou Carré
nouv_selection : BOOL; // Valider l'adresse de sortie
selection : WORD; // Adresse de sortie
END_VAR
VAR_OUTPUT
sortie_resultat : INT; // Valeur calculée
sortie_val_mesure : INT; // Valeur de mesure correspondante
END_VAR
VAR
valeurs_mesure : ARRAY[0..LIMITE] OF INT := 8(0);
memoire_resultats : ARRAY[0..LIMITE] OF
STRUCT
racine_carree : INT;
carre : INT;
END_STRUCT;
pointeur : INT := 0;
anc_val : BOOL := TRUE;
anc_tri : BOOL := TRUE;
anc_selection : BOOL := TRUE;
adresse : INT := 0; //Adresse de sortie
convertie
instance_calcul : CALCUL, //Définition de l'instance
//locale
END_VAR
Variables statiques
Nous avons choisi le type de bloc FB parce qu'il y a des données à enregistrer d'un cycle de
programme au suivant. Il s'agit des variables statiques qui sont déclarées dans la section de
déclaration "VAR, END_VAR".
On appelle variables statiques les variables locales dont les valeurs sont conservées durant
toutes les exécutions du bloc concerné. Elles servent à stocker les valeurs d'un bloc
fonctionnel et sont conservées dans le bloc de données d'instance.
Initialisation de variables
Notez les valeurs initiales qui sont écrites dans les variables lors de l'initialisation du bloc
(après son chargement dans la CPU). L'instance locale du FB CALCUL est également
déclarée dans la section de déclaration "VAR, END_VAR". Ce nom sera utilisé plus tard
pour l'appel et l'accès aux paramètres de sortie. L'instance globale SAISIE_DONNEES sert
de mémoire de données.
Calcul de l'adresse
La figure ci-après montre le calcul de l'adresse. Le mot d'entrée EW0 contient dans ses bits
12 à 14 le codage qui est validé lorsqu'un front est détecté au commutateur de codage
(bit 15). La valeur "adresse" est déterminée par décalage vers la droite au moyen de la
fonction standard SHR et masquage des bits significatifs avec un masque AND.
C'est avec cette adresse que les éléments du tableau (résultat du calcul et valeur de mesure
correspondante) sont écrits dans les paramètres de sortie. Le paramètre "choix_fonction"
détermine si le résultat est la racine carrée ou le carré.
Un front du commutateur de codage est signalé par le changement de "nouv_selection" par
rapport à "anc_selection".
0 0 0 0
1 1 1 1 « adresse »
2 2 2 2
3 3 3 3
Commutateur
4 4 4 4
pour valeur 5 5 5 5
de codage 6 6 6 6
Commutateur 7 7 7 7
de codage Octet 0
0 8 8 8
1 9 9 9
2 10 10 10
3 11 11 11
4 12 12 12
5 13 13 13
6 14 14 14
7 15 15 15
Octet 1 EW0
BEGIN
(*****************************************************************
1ère partie : saisie des valeurs de mesure.
La modification de "nouv_val" provoque la saisie de la valeur de
mesure. L'opération MOD permet de réaliser une mémoire circulante
pour valeurs de mesure.
******************************************************************)
IF nouv_val <> anc_val THEN
pointeur := pointeur MOD NOMBRE;
valeurs_mesure[pointeur] := entree_val_mesure;
pointeur := pointeur + 1;
END_IF;
anc_val := nouv_val;
(******************************************************************
2ème partie : déclenchement du tri et du calcul
La modification de "nouv_tri" déclenche le tri de la mémoire
circulante et l'exécution de calculs avec les valeurs de mesure. Les
résultats sont enregistrés dans un nouveau tableau "memoire_calcul".
******************************************************************)
IF nouv_tri <> anc_tri THEN
pointeur := 0; //Remise à 0 du pointeur de la mémoire circulante
instance_calcul(memoire_tri := valeurs_mesure);//Appel du FB
CALCUL
END_IF;
anc_tri := nouv_tri;
memoire_resultats := instance_calcul.memoire_calcul; //Carré et
racine carrée
(******************************************************************
3ème partie : évaluation du codage et préparation de la sortie
Si modification de "nouv_selection", le codage pour adressage de
l'élément de tableau pour la sortie est déterminé de nouveau : les
bits significatifs de "selection" sont masqués et convertis en
entiers. Selon la position de l'inverseur de "choix_fonction", c'est
"racine_carree" ou "carre" qui est mis à disposition pour la sortie.
*******************************************************************)
IF nouv_selection <> anc_selection THEN
adresse := WORD_TO_INT(SHR(IN := selection, N := 12) AND
16#0007);
END_IF;
anc_selection := nouv_selection;
IF choix_fonction THEN
sortie_resultat:= memoire_resultats[adresse].carre;
ELSE
sortie_resultat:= memoire_resultats[adresse].racine_carree;
END_IF;
sortie_val_mesure := valeurs_mesure[adresse]; //Indication de la
valeur de mesure
END_FUNCTION_BLOCK
ORGANIZATION_BLOCK CYCLE
(*******************************************************************
CYCLE est identique à un OB1, à savoir qu'il est appelé cycliquement
par le système S7.
1ère partie : appel du bloc fonctionnel et transmission des valeurs
d'entrée
2ème partie : prise en charge des valeurs de sortie et sortie avec
sélection
*******************************************************************)
VAR_TEMP
donnees_systeme : ARRAY[0..20] OF BYTE; //Zone pour l'OB1
END_VAR
BEGIN
(* 1ère partie :
***************************************************)
SAISIE.SAISIE_DONNEES(
entree_val_mesure := WORD_TO_INT(entree),
nouv_val := "entree 0.0", //Commutateur de saisie
//sous forme de mnémonique
nouv_tri := commutateur_de_tri,
choix_fonction := commutateur_de_fonction,
nouv_selection := commutateur_de_codage,
selection := codage);
Conditions requises
Vous avez besoin pour le test d'un module d'entrée avec l'adresse 0 et d'un module de sortie
avec l'adresse 4.
Avant le test, poussez vers la gauche ("0") les 8 commutateurs supérieurs du module
d'entrée et vers la droite ("1") les 8 commutateurs inférieurs.
Chargez à nouveau les blocs dans la CPU, puisque les valeurs initiales des variables sont
également testées.
Etapes du test
Effectuez maintenant le test en vous conformant aux étapes décrites dans le tableau ci-
après.
Test complémentaire
Les tableaux ci-après expliquent les commutateurs du module d'entrée et proposent des
modèles de test pour la racine carrée et le carré qui vous aideront à définir vos propres
étapes de test.
• L'entrée est effectuée au moyen des commutateurs : les 8 du haut permettent de
commander le programme, les 8 du bas de fournir une valeur de mesure.
• La sortie est effectuée au moyen d'indicateurs : le groupe du haut indique l'octet de sortie
de poids fort, celui du bas l'octet de poids faible.
1. Barre de titre :
elle contient le titre de la fenêtre et les boutons permettant de la commander.
2. Barre des menus :
elle contient tous les menus disponibles dans cette fenêtre.
3. Barre d'outils :
elle contient des icônes permettant de déclencher rapidement les commandes les plus
fréquentes.
4. Zone de travail :
elle contient les différentes fenêtres dans lesquelles vous éditez le texte du programme
ou consultez les informations du compilateur ou du test.
5. Barre d'état :
elle affiche l'état et d'autres informations sur l'objet sélectionné.
Personalisation de l'éditeur
Pour adapter l'éditeur à vos besoins, choisissez la commande Outils > Paramètres et
cliquez sur l'onglet "Editeur" dans la boîte de dialogue "Paramètres". Vous pouvez y faire les
choix suivants :
Les choix faits dans cet onglet ne sont efficaces que si vous avez activé l'option "Utiliser les
formats suivants" en tête de l'onglet.
Avant de pouvoir écrire un nouveau programme S7-SCL, il vous faut d'abord créer une
nouvelle source S7-SCL. Ce que vous allez faire dans le dossier "Sources" sous un
programme S7.
Programme S7
Blocs Bloc
(par exemple, FB1, OB1)
Sources Source
(par exemple, source SCL)
Mnémoniques
Nota
Vous pouvez aussi créer une source S7-SCL avec SIMATIC Manager en sélectionnant un
dossier Sources, puis en choisissant la commande Insertion > Logiciel S7 > Source
S7-SCL.
Vous pouvez ouvrir une source S7-SCL pour la compiler ou pour l'éditer.
Procédez de la manière suivante :
Nota
Vous pouvez aussi ouvrir des sources S7-SCL dans SIMATIC Manager en cliquant deux
fois sur leur icône ou en choisissant la commande Edition > Ouvrir l'objet après avoir
sélectionné la source qui vous intéresse.
Nota
Si vous avez modifié la source, un message vous proposera d'enregistrer ces modifications
avant la fermeture. Si vous ne les enregistrez pas, elles seront perdues.
Ouvrir des blocs n'est pas possible avec l'application S7-SCL. Vous pouvez uniquement
ouvrir la source correspondante. Les blocs créés avec S7-SCL peuvent cependant être
ouverts avec l'éditeur CONT/LOG/LIST qui les affiche en langage de programmation LIST et
en permet l'édition dans ce langage. N'effectuez aucune modification en représentation
LIST, car
• les instructions MC7 affichées ne représentent pas nécessairement un bloc LIST correct,
• une compilation sans erreur avec le compilateur LIST implique des modifications qui
exigent des connaissances approfondies en LIST comme en S7-SCL,
• le bloc compilé avec LIST affiche le code du langage LIST et non plus celui de S7-SCL,
• la source S7-SCL et le code MC7 ne seraient plus cohérents.
Pour plus d'informations, veuillez consulter l'aide en ligne de STEP 7.
Nota
La maintenance de vos programmes de CPU sera plus facile si vous effectuez les
modifications éventuelles dans les sources S7-SCL et les compilez à nouveau.
Vous définissez les propriétés de l'objet en donnant des attributs aux blocs. Quant aux
propriétés de la source S7-SCL (ex. : Auteur), vous les déterminez dans la boîte de dialogue
"Propriétés".
Vous pouvez aussi utiliser un éditeur standard ASCII pour éditer votre source S7-SCL. Mais
dans ce cas, vous ne disposerez pas des fonctions d'édition si pratiques ni de l'aide en ligne
intégrée de S7-SCL.
Une fois la source créée et enregistrée, vous devez l'importer dans le dossier "Sources" d'un
programme S7 au moyen de SIMATIC Manager (voir la documentation de STEP 7). Après
quoi vous pouvez ouvrir la source dans S7-SCL pour en poursuivre l'édition ou pour la
compiler.
Vous pouvez instaurer pour vos blocs une protection de bloc, en indiquant dans la source
l'attribut KNOW_HOW_PROTECT lors de la programmation.
En écrivant la source S7-SCL, vous devez tenir compte des principes suivants en ce qui
concerne l'ordre des blocs :
• Un bloc appelé doit précéder le bloc appelant.
• Un type de données utilisateur (UDT) doit précéder les blocs dans lesquels il est utilisé.
• Un bloc de données auquel un type de données utilisateur (UDT) est associé vient après
cet UDT.
• Un bloc de données est placé avant tous les blocs qui y ont accès.
Dans un programme S7-SCL, vous travaillez avec des opérandes tels que signaux d'E/S,
mémentos, compteurs, temporisations et blocs. Vous pouvez les adresser de manière
absolue (ex. : E1.1, M2.0, FB11), mais vos sources S7-SCL seront beaucoup plus lisibles si
vous employez à cet effet des mnémoniques (ex. : Moteur_marche). C'est alors par son
mnémonique que vous accéderez à un opérande dans votre programme utilisateur.
Nota
Veillez à ce que les mnémoniques soient univoques et qu'ils ne soient pas identiques à un
mot-clé.
Après avoir annulé une ou plusieurs actions, vous pouvez les restaurer avec la commande
Edition > Rétablir.
Lorsque vous souhaitez retoucher ou modifier une source S7-SCL, vous pouvez souvent
gagner un temps précieux en recherchant des parties de texte et en les remplaçant par
d'autres au besoin. La recherche peut porter par exemple sur des mots-clés, des
identificateurs absolus, des identificateurs symboliques, etc.
Procédez de la manière suivante :
1. Choisissez la commande Edition > Rechercher/Remplacer....
2. Sélectionnez les options dans la boîte de dialogue "Rechercher/Remplacer".
3. Lancez la recherche
- en cliquant sur le bouton "Rechercher" pour rechercher une partie de texte et la
sélectionner ou
- en cliquant sur le bouton "Remplacer" ou "Remplacer tout" pour rechercher le texte et
le remplacer par celui qui est indiqué dans la zone de texte "Remplacer par".
Vous pouvez sélectionner des parties de texte en maintenant le bouton de la souris enfoncé
et en faisant glisser le pointeur sur la partie du texte en question.
Vous pouvez en outre :
• Sélectionner tout le texte d'une source en choisissant la commande Edition >
Sélectionner tout.
• Sélectionner un mot en cliquant deux fois dessus.
• Sélectionner toute une ligne en cliquant au bord à gauche de la ligne.
La commande Edition > Annuler la sélection permet de supprimer la sélection.
Cette fonction permet de copier des parties de programme ou des programmes entiers. Le
texte copié est mémorisé dans le presse-papiers à partir duquel vous pouvez l'insérer à un
autre endroit autant de fois que vous le voulez.
Procédez de la manière suivante :
1. Sélectionnez la partie de texte à copier.
2. Copiez-la
- en cliquant sur l'icône "Copier" dans la barre d'outils ou
- en choisissant la commande Edition > Copier.
3. Amenez le curseur à l'endroit (dans la même application ou dans une autre) où vous
voulez insérer (coller) la partie de texte.
4. Collez-la
- en cliquant sur l'icône "Coller" de la barre d'outils ou
- en choisissant la commande Edition > Coller.
Nota
• Il n'est pas possible de couper la partie de texte sélectionnée si la commande Edition >
Couper n'est pas disponible (affichée sur fond gris).
• La commande Edition > Coller permet d'insérer la partie de texte coupée à un autre
endroit (du même programme ou d'un autre).
• Le contenu du presse-papiers est conservé jusqu'à ce que vous exécutiez à nouveau
l'une des commandes Edition > Couper ou Edition > Copier.
Les fonctions suivantes vous permettent de structurer les sources S7-SCL en décalant la
marge des lignes.
• Indentation automatique
Décale automatiquement la nouvelle ligne de la même valeur que la ligne précédente
après un changement de ligne.
• Indentation après mots-clés
Décale les lignes des différentes sections de déclaration et celles des structures de
contrôle IF, CASE, FOR, WHILE et REPEAT.
Employez des couleurs et des styles différents pour distinguer les éléments de langage dans
votre source S7-SCL. Elle en sera plus lisible et aura un aspect plus professionnel. Vous
disposez des fonctions suivantes pour influencer la présentation du texte source :
• Mots-clés en majuscules
Si vous activez cette fonction, les mots-clés définis tels que FOR, WHILE,
FUNCTION_BLOCK, VAR ou END_VAR seront écrits en majuscules.
• Choix du style et de la couleur
Il y a déjà des styles et des couleurs par défaut pour les différents éléments de langage
tels qu'opérations, commentaires ou constantes. Vous pouvez les modifier à votre
convenance.
Voici les couleurs par défaut :
L'utilisation de signets vous permet de naviguer rapidement dans une source. Les signets
s'avèrent utiles, p. ex. pour effectuer des modifications ayant des effets en divers endroits
d'une source. Vous pouvez les insérer à des endroits quelconques dans une source. S'il en
existe plusieurs, vous pouvez naviguer de l'un à l'autre vers le bas ou vers le haut.
Validité
Les signets sont valides tant que la source est ouverte. Ils ne sont pas enregistrés avec
cette dernière.
Insertion de signets
1. Positionnez le curseur dans la ligne que vous souhaitez sélectionner.
2. Choisissez la commande de menu Edition > Afficher/Masquer les signets.
Suppression de signets
Choisissez la commande de menu Edition > Supprimer tous les signets.
Nota
Les fonctions nécessaires à l'utilisation de signets sont rapidement disponibles dans la barre
des signets. Vous affichez la barre des signets en sélectionnant la commande de menu
Affichage > Barre des signets.
Avant de pouvoir exécuter votre programme ou de le tester, il faut d'abord le compiler. Vous
activerez le compilateur en lançant la compilation. Il a les propriétés suivantes :
• Vous pouvez compiler une source S7-SCL dans son entier ou seulement certains blocs
que vous aurez sélectionnés dans la source.
• Toutes les erreurs de syntaxe détectées au cours de la compilation s'affichent ensuite
dans une fenêtre.
• Pour chaque appel de bloc fonctionnel, un bloc de données d'instance correspondant est
généré s'il n'existe pas encore.
• Vous pouvez aussi compiler plusieurs sources S7-SCL en une seule opération de
compilation ; créez pour cela un fichier d'informations compilation.
• La commande Outils > Paramètres permet de choisir les options de compilation.
Quand vous aurez créé et compilé un programme utilisateur sans erreur, vous pouvez
supposer qu'il est correct. Des problèmes peuvent pourtant survenir lors de l'exécution du
programme dans l'automate programmable. Servez-vous des fonctions de test de S7-SCL
pour détecter ce type d'erreurs.
Générer code objet Cette option vous permet d'indiquer si vous voulez générer ou pas un code
exécutable. Une compilation sans cette option sert simplement à vérifier la
syntaxe.
Optimiser code objet Si vous cochez cette option, les blocs générés seront optimisés en ce qui
concerne la place mémoire requise et le temps d'exécution dans l'automate
programmable. Il est conseillé de toujours la cocher, puisqu'il n'en résulte
aucun inconvénient qui limiterait les fonctionnalités du bloc.
Surveiller limites tableaux Si vous cochez cette option, les indices des tableaux seront contrôlés durant
l'exécution du programme S7 afin de garantir qu'ils se trouvent bien dans la
plage autorisée par la déclaration du tableau (ARRAY). Lorsqu'un indice
dépasse la plage autorisée, le drapeau OK est positionné sur FALSE.
Générer infos débogage Cette option vous permet d'effectuer une mise au point avec le débogueur
après que vous avez compilé le programme et l'avez chargé dans la CPU.
Elle augmente toutefois la place mémoire requise par le programme et les
temps d'exécution dans l'AS.
Activer drapeau OK Cette option vous permet d'interroger le drapeau OK dans vos textes sources
S7-SCL.
Imbrication de commentaires Cochez cette option pour pouvoir écrire des commentaires imbriqués dans
possible votre source S7-SCL.
Long. de chaîne max. Vous pouvez réduire ici la longueur standard du type de données STRING.
Par défaut, elle est de 254 caractères. La longueur choisie ici concerne tous
les paramètres de sortie et d'entrée/sortie ainsi que les valeurs de retour des
FC. Notez bien qu'elle ne doit pas être inférieure à celle des variables
STRING employées dans le programme.
Ecrasement des blocs Ecrase les blocs existant déjà dans le dossier Blocs d'un programme S7 si des
blocs de même nom sont générés au cours de la compilation.
De même lors d'un chargement, les blocs de même nom se trouvant déjà dans le
système cible seront écrasés.
Si vous ne cochez pas cette option, vous devrez confirmer un message avant que
le bloc soit écrasé.
Affichage des Les avertissements seront affichés en plus des erreurs après une compilation.
avertissements
Erreurs avant Les erreurs sont affichées avant les avertissements dans la fenêtre des
avertissements avertissements et erreurs
Génération des données Cochez cette option pour que des données de référence soient générées
de référence automatiquement lorsqu'un bloc est généré.
La commande Outils > Données de référence vous permet toutefois de générer
les données de référence ou de les mettre à jour ultérieurement.
Prise en compte de Cochez cette option pour que l'attribut système pour paramètre "S7_server" soit
l'attribut système pris en compte lors de la génération d'un bloc. Cet attribut est requis lorsque le
"S7_server" paramètre pour la configuration des liaisons ou des messages est significatif. Il
contient le numéro de liaison ou de message. Notez que cette option prolonge la
compilation.
Un fichier d'informations compilation vous permet de compiler en une fois plusieurs sources
S7-SCL d'un dossier Sources. Vous y écrivez les noms des sources S7-SCL dans l'ordre
dans lequel vous voulez qu'elles soient compilées.
Toutes les erreurs et tous les avertissements relatifs à la syntaxe, émis lors de la
compilation, s'affichent après l'opération dans la fenêtre "Erreurs et avertissements".
L'apparition d'une erreur empêche la génération du bloc concerné, tandis que celle d'un
avertissement n'empêche pas la génération d'un bloc exécutable. L'exécution dans l'AS peut
toutefois se révéler erronée.
Procédez de la manière suivante pour éliminer une erreur :
1. Sélectionnez l'erreur et appuyez sur la touche F1 pour appeler une description de l'erreur
et une solution pour l'éliminer.
2. Si le message indique un numéro de ligne (Lxx) et de colonne (Cxx), vous pouvez
localiser la position erronée du texte source
- en cliquant sur le message d'erreur dans la fenêtre "Erreurs et avertissements", puis
en appelant le menu contextuel avec le bouton droit de la souris et en y choisissant la
commande Afficher l'erreur ;
- en cliquant deux fois sur le message d'erreur pour faire sauter le curseur à la position
signalée (ligne, colonne).
3. Renseignez-vous sur la syntaxe correcte dans la description du langage S7-SCL.
4. Rectifiez le texte source en conséquence.
5. Enregistrez la source.
6. Compilez-la de nouveau.
Dans S7-SCL, le terme "Enregistrer" s'applique toujours aux fichiers sources. Les blocs sont
générés lors de la compilation du fichier source et automatiquement stockés dans le
répertoire de programme correspondant. Vous pouvez enregistrer une source S7-SCL à tout
moment dans son état actuel. L'enregistrement n'est pas accompagné d'une compilation.
Les erreurs de syntaxe sont également enregistrées.
Procédez de la manière suivante :
• Choisissez la commande Fichier > Enregistrer ou cliquez sur l'icône "Enregistrer" dans
la barre d'outils.
La source S7-SCL est mise à jour.
• Pour créer une copie de la source S7-SCL actuelle, choisissez la commande Fichier >
Enregistrer sous. Vous voyez s'afficher la boîte de dialogue "Enregistrer sous" dans
laquelle vous pouvez indiquer le nom et le chemin de la copie.
Important
Les indications sur l'orientation du papier doivent être faites dans la boîte de dialogue "Mise
en page". Celles effectuées dans la boîte de dialogue "Configuration de l'imprimante" ne
sont pas significatives pour l'impression de sources S7-SCL.
• La commande Fichier > Aperçu avant impression permet de vérifier l'effet obtenu par
les choix effectués avant d'envoyer le document à l'imprimante.
C'est toujours la source S7-SCL figurant dans la fenêtre de travail active qui est imprimée.
Pour pouvoir imprimer une source, il faut donc qu'elle soit ouverte.
Vous disposez des fonctions suivantes pour influencer la présentation du texte source à
l'impression :
• Pagination à chaque début de bloc/fin de bloc
Lorsque cette fonction est activée, chaque bloc commence sur une nouvelle page ou se
termine par une nouvelle page à l'impression.
• Numéros de ligne
Lorsque cette fonction est activée, le numéro est imprimé au début de chaque ligne.
• Impression en couleur
Lorsque cette fonction est activée, les couleurs utilisées dans la source sont imprimées.
• Police d'impression
La police Courier New de taille 8 est prévue par défaut pour l'ensemble du texte. Elle
fournit des résultats d'impression optimums.
• Style
Vous pouvez choisir des styles de caractères différents pour les divers éléments de
langage. Il s'agit des éléments individuels suivants :
Attention
! • La CPU est remise à zéro.
• Toutes les données utilisateur sont effacées.
• La CPU suspend toutes les liaisons existantes.
• Lorsqu'une carte mémoire est enfichée, la CPU copie son contenu après l'effacement
général dans la mémoire de chargement interne.
Conditions requises
Lors de la compilation d'une source S7-SCL , les blocs sont générés à partir de la source et
enregistrés dans le dossier Blocs du programme S7.
Les blocs qui sont appelés au premier niveau depuis les blocs S7-SCL sont recherchés,
puis copiés automatiquement avec les autres dans le répertoire "Blocs" et adoptés dans la
liste de chargement.
Vous devez charger les autres blocs du programme utilisateur de la console de
programmation dans la CPU à l'aide du SIMATIC Manager.
Pour que le chargement soit effectué, il faut qu'une liaison existe entre la PG et la CPU. Il
faut aussi qu'un programme utilisateur en ligne soit affecté au module de CPU dans
SIMATIC Manager.
Marche à suivre
Une fois que vous avez compilé la source, vous avez le choix entre deux types de
chargement :
• La commande Fichier > Charger charge tous les blocs contenus dans la source ainsi
que tous les blocs appelés au premier niveau.
• La commande Fichier > Chargement partiel ouvre une boîte de dialogue permettant de
sélectionner certains blocs pour les charger.
Les blocs sont alors transférés dans la CPU. Si l'un d'eux se trouve déjà dans la mémoire
vive (RAM) de la CPU, un message vous demandera d'en confirmer l'écrasement.
Nota
Il est préférable de charger le programme utilisateur à l'état de fonctionnement ARRET, car
l'écrasement d'un ancien programme à l'état MARCHE risque de provoquer des erreurs.
Attention
! Un test effectué sur une installation en fonctionnement peut causer des lésions corporelles
graves ou un dommage matériel important en cas de mauvais fonctionnement ou d'erreurs
de programmation.
Avant d'utiliser les fonctions de test, assurez-vous que des états dangereux ne risquent pas
de se produire !
Zone de visualisation
Le volume d'instructions à visualiser est limité par les performances de la CPU connectée.
Les instructions S7-SCL du code source étant représentées par un nombre différent
d'instructions en code machine, la longueur de la zone de visualisation est variable ; le
débogueur S7-SCL la détermine et l'affiche lorsque vous sélectionnez la première instruction
de la zone qui vous intéresse.
Vous avez en outre la possibilité de définir une zone de visualisation précise. Sélectionnez à
cet effet les instructions à visualiser dans la source.
Modes de test
L'interrogation des informations de test provoque le plus souvent un allongement des temps
de cycle. S7-SCL propose deux modes différents qui permettent d'influencer cet
allongement.
Restrictions
Avec la fonction "Visualiser", vous devez tenir compte des restrictions suivantes.
• Il n'est pas possible d'afficher dans leur entier les variables de type de données
complexe. Mais il est possible de visualiser les éléments de telles variables s'ils sont d'un
type de données simple.
• Les variables de type DATE_AND_TIME et STRING ainsi que les paramètres de type
BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB, TIMER et COUNTER ne s'affichent
pas.
• Les accès à des blocs de données qui ont la forme < mnémonique >.< adresse absolue >
ne s'affichent pas (ex. : donnees.DW4).
Le test avec points d'arrêt est effectué en pas à pas. Vous pouvez exécuter l'algorithme du
programme instruction par instruction et observer le changement des valeurs des variables
traitées.
Après avoir défini des points d'arrêt, vous pouvez d'abord exécuter le programme jusqu'à un
point d'arrêt, puis commencer à partir de là la visualisation pas à pas.
Points d'arrêt
Vous pouvez définir des points d'arrêt à n'importe quel endroit de la section des instructions
du texte source.
Ils ne sont transférés dans le système d'automatisation et activés que lorsque vous
choisissez la commande Test > Activer les points d'arrêt. Le programme est alors exécuté
jusqu'à ce que la CPU atteigne le premier point d'arrêt.
Le nombre maximal de points d'arrêt activés dépend de la CPU.
Condition requise
La source ouverte ne doit pas avoir été modifiée dans l'éditeur.
Nota
La quantité d'instructions à tester (zone de visualisation la plus grande possible) dépend de
la performance de la CPU connectée.
Résultat
La zone de visualisation est déterminée et indiquée par une barre grise sur le côté gauche
de la fenêtre. La fenêtre se fractionne et le volet droit affiche les noms et les valeurs en
cours des variables se trouvant dans la zone de visualisation.
Environnement d'appel
Afin de définir l'environnement d'appel de manière encore plus précise, vous avez la
possibilité de définir un environnement d'appel des blocs à visualiser. Vous spécifiez ainsi
qu'un bloc est uniquement visualisé dans l'une des conditions suivantes :
Nota
Lorsque vous avez défini un environnement d’appel, procédez comme suit pour démarrer la
visualisation :
1. Positionnez le curseur sur le bloc à visualiser pour lequel vous avez défini
l’environnement d’appel.
2. Sélectionnez la commande de menu Test > Visualiser.
La fonction de visualisation est lancée. Le bloc est visualisé si toutes les conditions
d’appel que vous avez définies sont remplies.
Pour effacer tous les points d'arrêt, choisissez la commande Test > Supprimer tous les
points d'arrêt.
Environnement d'appel
En définissant un environnement d'appel, vous spécifiez qu'un point d'arrêt est uniquement
valable dans l'une des conditions suivantes :
Nota
Cette fonction est disponible à partir de STEP 7 V5.3 SP2.
Lorsque vous modifiez une source S7-SCL, vous devez, le cas échéant, également adapter
les blocs qui y sont référencés. Sinon, des incohérences risquent de se produire dans le
programme. Ces dernières risquent également de survenir lorsque les horodatages des
sources et des blocs ne correspondent pas.
Grâce à la fonction "Vérifier la cohérence des blocs" de STEP 7, vous pouvez détecter de
telles incohérences et corriger plus rapidement les erreurs.
Après avoir effectué des modifications dans le programme, lancez une vérification de
cohérence de toutes les sources S7-SCL dans le projet. S'il existe des incohérences ne
pouvant pas être corrigées automatiquement, la fonction saute aux positions à modifier dans
la source. Vous y effectuez les modifications requises. Vous corrigez ainsi toutes les
incohérences, les unes après les autres.
Conditions
• STEP 7 V5.3 SP2 ou une version supérieure est installé sur votre appareil.
• Une source concernée par la fonction "Vérifier la cohérence des blocs" doit avoir été
compilée une fois avec S7-SCL V5.3 SP1 ou une version supérieure.
• S7-SCL doit être installé sur l'appareil sur lequel vous réalisez la vérification de
cohérence.
Résultat
STEP 7 vérifie les horodatages et interfaces de tous les blocs et de toutes les sources
correspondantes dans le dossier actuel et signale les conflits suivants :
• conflits d'horodatage entre sources S7-SCL et blocs,
• références entre différents blocs et conflits d'interface qui en résultent.
Lorsqu'une incohérence est détectée, une nouvelle compilation de la source correspondante
est lancée. Si la source contient plusieurs sources de blocs, tous les blocs résultant de cette
source sont de nouveau générés. Lors de la compilation, les options actuelles paramétrées
sont valables.
Nota
Vous trouverez de plus amples informations sur cette fonction dans l'aide de STEP 7.
Vous pouvez interroger l'état de fonctionnement actuel d'une CPU et le modifier, à condition
qu'une liaison existe à cette CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat de fonctionnement.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'un des états suivants :
- Démarrage à chaud
- Démarrage à froid
- Redémarrage
- Arrêt
Attention
! Modifier l'état de fonctionnement d'une installation en marche peut causer des lésions
corporelles graves ou un dommage matériel important en cas de mauvais fonctionnement
ou d'erreurs de programmation.
Avant d'utiliser cette fonction, assurez-vous que des situations dangereuses ne risquent pas
de se produire !
Vous pouvez interroger l'heure momentanée d'une CPU et la modifier, à condition qu'une
liaison existe à cette CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Mettre à l'heure.
2. Dans la boîte de dialogue qui s'affiche, tapez la date et l'heure pour l'horloge temps réel
de la CPU.
Si la CPU n'est pas équipée d'une horloge temps réel, le dialogue indique "00:00:00" pour
l'heure et "00.00.00" pour la date. Dans ce cas, vous ne pouvez rien changer.
Cette fonction vous permet de vous renseigner sur l'utilisation de la mémoire de la CPU et
de réorganiser la mémoire au besoin. Ceci devient nécessaire lorsque la taille de la plus
grande zone de mémoire libre continue ne suffit plus à charger un nouvel objet de la PG
dans la CPU.
Pour cela, il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Mémoire".
Les temps suivants sont représentés, dans le cadre des deux valeurs limites paramétrées :
• Durée du cycle le plus long depuis le dernier passage d'ARRET à MARCHE
• Durée du cycle le plus court depuis le dernier passage d'ARRET à MARCHE
• Durée du dernier cycle
Quand la durée du dernier cycle se rapproche du temps de surveillance, il est possible que
celui-ci soit dépassé et que la CPU passe à l'état de fonctionnement ARRET. Le temps de
cycle peut se prolonger lorsque vous testez des blocs dans la visualisation d'état du
programme, par exemple. Pour que les temps de cycle de votre programme soient affichés,
il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Temps de cycle".
L'horodatage de l'unité centrale (CPU) comprend des informations sur l'horloge interne et sur
la synchronisation entre plusieurs CPU.
Pour cela, il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Horodatage".
Vous pouvez demander l'affichage des blocs disponibles en ligne pour la CPU.
Pour cela, il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Performances/Blocs".
Pour chaque CPU en ligne, vous pouvez demander l'affichage des informations concernant
les vitesses de transmission choisies et maximales, les liaisons et la charge de
communication.
Pour cela, il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Communication".
Cet onglet vous permet d'afficher, pour chaque unité centrale (CPU) en ligne, les
informations concernant le contenu des piles. Pour cela, la CPU doit se trouver à l'état de
fonctionnement ARRET ou avoir atteint un point d'arrêt.
Afficher les piles est très utile pour trouver les erreurs, par exemple lorsque vous testez vos
blocs. Si la CPU est passée à l'état d'arrêt, vous pouvez afficher, dans la pile des
interruptions, le point d'interruption avec les indications et les contenus d'accumulateurs qui
y sont actuels, afin d'en découvrir la cause (une erreur de programmation, par exemple).
Pour cela, il faut qu'une liaison existe à la CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat du module.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Piles".
Nom de la règle
Séquence
Bloc 3
Bloc 1 Bloc 2
Bloc 4
Option
Bloc 5
Itération
Alternative
Elément de base qui ne nécessite Elément composé qui est décrit par
pas de description supplémentaire. d'autres diagrammes syntaxiques.
Il s'agit de caractères imprimables et
de caractères spéciaux, de mots-clés
et d'identificateurs prédéfinis.
Les données relatives à ces blocs
doivent être reprises telles quelles.
Règle lexicale
Lettre
_ Lettre _ Lettre
Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre
R_REGULATEUR3
_A_TABLEAU
_100_3_3_10
Exemples incorrects pour les raisons nommées ci-dessus :
1_1AB
RR__20
*#AB
Règle syntaxique
Les règles syntaxiques vous laissent la liberté de format.
Lettres et chiffres
Dans le jeu de caractères ASCII, S7-SCL utilise :
• Les lettres (majuscules et minuscules) de A à Z
• Les chiffres arabes 0 à 9
• Le caractère d'espacement (valeur ASCII 32) et tous les caractères de commande
(ASCII 0- 31), y compris le caractère de fin de ligne (ASCII 13)
Autres caractères
Les caractères suivants ont une signification bien précise dans S7-SCL :
+ - * / = < > [ ] ( )
: ; $ # " ' { } % . ,
Nota
Le chapitre "Description du langage" offre une liste détaillée de tous les caractères
utilisables en précisant comment ils sont interprétés dans S7-SCL.
5.4 Identificateur
Définition
Un identificateur est un nom que vous pouvez attribuer à un objet du langage S7-SCL, à
savoir à une constante, à une variable ou à un bloc.
Règles
Il peut s'agit d'une combinaison quelconque de 24 lettres (non accentuées) et chiffres au
maximum, le premier caractère devant être une lettre ou le caractère de soulignement. Vous
pouvez employer aussi bien des majuscules que des minuscules, sachant qu'aucune
distinction n'est faite entre elles (par exemple, AnNa et AnnA sont équivalents).
Lettre
_ Lettre _ Lettre
Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre
Exemples
Voici des exemples d'identificateurs autorisés :
X y12
Somme Température
Noms Surface
Régulateur Tableau
Nota
• Assurez-vous que le nom n'a pas encore été attribué à un mot-clé ou à un identificateur standard.
• Nous vous recommandons de choisir des noms univoques et évocateurs qui contribuent à
l'intelligibilité du texte source.
Définition
Ces identificateurs standard sont utilisés pour l'adressage absolu de blocs.
Règles
Le tableau suivant donne la liste des mots-clés de bloc classés d'après les abréviations
allemandes, avec les abréviations anglaises correspondantes. La lettre x correspond à un
nombre compris entre 0 et 65533 (ou entre 0 et 65535 pour les compteurs et
temporisations).
Il y a plusieurs manières de désigner un bloc dans S7-SCL. Le numéro du bloc peut être un
nombre décimal entier.
Mot-clé
de bloc Numéro
IDENTIFICATEUR
Mnémonique
Exemple
Voici des désignations autorisées :
FB10
DB100
T141
Définition
Un identificateur d'opérande permet d'adresser une zone de mémoire de la CPU, à partir
d'un endroit quelconque du programme.
Règles
Le tableau suivant donne la liste des identificateurs d'opérande classés d'après les
abréviations allemandes, avec les abréviations anglaises correspondantes. Les
identificateurs d'opérande pour blocs de données doivent être indiqués avec le bloc de
données correspondant.
Exemple
E1.0 MW10 PAW5 DB20.DW3
Règles
Il y a plusieurs manières de désigner une temporisation dans S7-SCL. Le numéro de la
temporisation peut être un nombre décimal entier.
T Numéro
Abréviation allemande
et anglaise
IDENTIFICATEUR
Mnémonique
Règles
Il y a plusieurs manières de désigner un compteur dans S7-SCL. Le numéro du compteur
peut être un nombre décimal entier.
Z Numéro
IDENTIFICATEUR
Mnémonique
5.10 Nombres
Il y a plusieurs façons d'écrire un nombre dans S7-SCL. Les règles suivantes s'appliquent à
tous les nombres.
• Il peut comporter un signe, une virgule décimale (représentée par un point dans S7-SCL)
ou un exposant.
• Un nombre ne doit comporter ni virgule, ni caractère d'espacement.
• Le caractère de soulignement (_) peut être utilisé comme séparateur optique.
• Un nombre peut être précédé soit d'un plus (+), soit d'un moins(-). En l'absence de signe,
le nombre est considéré comme étant positif.
• Un nombre doit être compris entre des valeurs minimales et maximales données.
Nombre entier
Un nombre entier ne comporte ni virgule décimale, ni exposant. Il s'agit simplement d'une
simple suite de chiffres, pouvant être signée. Dans S7-SCL, il existe deux types d'entier avec
des plages de valeurs différentes, INT et DINT.
Voici des nombres entiers autorisés :
0 1 +1 -1
743 -5280 600_00 -32_211
Les nombres suivants ne sont pas autorisés pour les raisons indiquées :
Dans S7-SCL, vous pouvez représenter un nombre entier dans différents systèmes de
numération. Il faut alors le faire précéder d'un mot-clé désignant le système employé. 2#
désigne le système binaire, 8# désigne le système octal et 16# désigne le système
hexadécimal.
Voici le nombre décimal 15 correctement représenté dans d'autres systèmes de
numération :
2#1111 8#17 16#F
Nombre réel
Un nombre réel doit comporter une virgule décimale ou un exposant (ou les deux). La virgule
décimale doit figurer entre deux chiffres. Un nombre réel ne peut donc ni commencer, ni se
terminer par une virgule décimale.
Voici des nombres réels autorisés :
Les nombres réels suivants ne sont pas corrects pour les raisons indiquées :
Les nombres réels suivants ne sont pas corrects pour les raisons indiquées :
Définition
Une chaîne de caractères est une suite de caractères (lettres, chiffres et caractères
spéciaux) placée entre apostrophes.
Voici des chaînes de caractères autorisées :
'ROUGE' '75 000 Paris' '270-32-3456'
'Fr19.95' 'Le résultat correct est :'
Règles
Pour saisir un caractère de mise en forme spécial, une apostrophe ( ' ) ou le caractère $,
faites-le précéder du caractère $.
5.12 Mnémonique
Dans S7-SCL, vous pouvez indiquer un mnémonique selon la syntaxe suivante. Il n'est
nécessaire de le placer entre guillemets que s'il n'est pas conforme à la règle
IDENTIFICATEUR.
Syntaxe :
Caractère
" imprimable "
Règles
• Commentaire pouvant s'étendre sur plusieurs lignes, introduit par "(*" et clos par "*)".
• L'imbrication de blocs de commentaire est autorisée par défaut. Mais vous pouvez
modifier cette option et interdire l'imbrication de blocs de commentaire.
• Un commentaire ne doit interrompre ni un mnémonique, ni une constante. L'interruption
de chaînes de caractère est cependant permise.
Syntaxe
Le bloc de commentaire est représenté par le diagramme syntaxique suivant :
Bloc de commentaire
(* Caractère *)
Exemple
(* Ceci est un exemple de bloc de commentaire
pouvant s'étendre sur plusieurs lignes.*)
COMMUTATEUR := 3 ;
END_FUNCTION_BLOCK
Règles
• Une ligne de commentaire est introduite par "//" et s'étend jusqu'à la fin de la ligne.
• La longueur du commentaire est limitée à 254 caractères, y compris les caractères
d'introduction //.
• Un commentaire ne doit interrompre ni un mnémonique, ni une constante. L'interruption
des chaînes de caractère est cependant permise.
Syntaxe
La ligne de commentaire est représentée par le diagramme syntaxique suivant :
Ligne de commentaire
Caractère
// CR
imprimable
Exemple
VAR
COMMUTATEUR : INT ; // Ligne de commentaire
END_VAR
Nota
• Les commentaires commençant par // dans la section de déclaration sont adoptés dans l'interface
du bloc et peuvent donc s'afficher également dans l'éditeur CONT/LOG/LIST.
• La liste des caractères imprimables est donnée au chapitre "Description du langage".
• Dans une ligne de commentaire, le couple de caractères "(*" et "*)" n'a pas de signification.
5.15 Variables
On appelle variable un identificateur dont la valeur peut être modifiée durant l'exécution du
programme. Toute variable doit être déclarée individuellement avant de pouvoir être utilisée
dans un bloc de code ou de données. La déclaration de la variable permet de définir un
identificateur comme variable (et non pas comme constante, etc.) et d'en spécifier le type en
l'affectant au type de données.
On distingue les variables suivantes :
• Données locales ;
• Données utilisateur globales ;
• Variables prédéfinies autorisées (zones de mémoire d'une CPU).
Données locales
Il s'agit de données qui sont déclarées dans un bloc de code (FC, FB, OB) et qui ne sont
valables que pour celui-ci.
Variables Signification
Variables statiques Une variable statique est une variable locale dont la valeur reste inchangée
durant toutes les exécutions du bloc (mémoire du bloc). Elle sert à
enregistrer les valeurs d'un bloc fonctionnel.
Variables temporaires Une variable temporaire appartient localement à un bloc de code et
n'occupe aucune zone de mémoire statique. Sa valeur n'est conservée que
durant une exécution du bloc. Il n'est pas possible d'accéder aux variables
temporaires en dehors du bloc dans lequel elles ont été déclarées.
Paramètres de bloc Il s'agit d'un paramètre formel de bloc fonctionnel ou de fonction. C'est une
variable locale qui sert à transmettre les paramètres effectifs indiqués à
l'appel du bloc.
Types de bloc
Les blocs suivants sont disponibles :
OB FC FB DB UDT
Blocs STEP 7
Blocs préprogrammés
Vous ne devez pas programmer vous-même chaque fonction. Vous pouvez aussi avoir
recours à des blocs préprogrammés. Ils se trouvent dans le système d'exploitation de l'unité
centrale ou dans des bibliothèques (S7lib) du logiciel de base STEP 7. Vous pouvez les
utiliser pour programmer des fonctions de communication, par exemple.
affecté
UDT
appelle
DB
appelle
DB avec UDT
Ordre dans le fichier source
affecté
appelle
FB 3
DB d'instance du FB 3
appelle
FC 5
OB 1
Désignation de bloc
Dans le tableau , nom_xx représente la désignation de bloc conformément à la syntaxe
suivante :
Mot-clé
de bloc Numéro
IDENTIFICATEUR
Mnémonique
Le numéro de bloc peut aller de 0 à 65533, mais l'identificateur de bloc DB0 est réservé.
N'oubliez pas que vous devez définir un identificateur ou un mnémonique dans la table des
mnémoniques de STEP 7.
Exemples
FUNCTION_BLOCK FB10
FUNCTION_BLOCK Bloc régulateur
FUNCTION_BLOCK "Régulateur.B1&U2"
Définition
Un attribut de bloc est une propriété de bloc que vous pouvez par exemple utiliser pour
indiquer le titre du bloc, la version, la protection du bloc ou encore l'auteur. Lorsque vous
choisissez des blocs pour votre application, vous pouvez afficher leurs propriétés dans une
fenêtre de STEP 7.
Vous pouvez donner les attributs suivants :
Règles
• Vous déclarez les attributs de bloc à l'aide de mots-clés directement après l'instruction de
début de bloc.
• Les identificateurs peuvent comporter au plus 8 caractères.
La saisie d'attributs de bloc doit respecter la syntaxe suivante :
7LWUH
&DUDFWÙUH
7,7/(
LPSULPDEOH
9HUVLRQ
120%5( 120%5(
9HUVLRQ
'(&,0$/ '(&,0$/
3URWHFWLRQGHEORF
.12:B+2:B3527(&7
FDUDFWÙUHVPD[
$XWHXU
$87+25 ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
1RP FDUDFWÙUHVPD[
1$0( ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
LPSULPDEOH
)DPLOOHGHEORFV FDUDFWÙUHVPD[
)$0,/< ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
LPSULPDEOH
Exemples
FUNCTION_BLOCK FB10
TITLE = 'Moyenne'
VERSION : '2.1'
KNOW_HOW_PROTECT
AUTHOR : AUT_1
Exemple
FUNCTION_BLOCK FB15
TITLE=MON_BLOC
//Ceci est un commentaire de bloc.
//Il est saisi sous la forme d'une suite de lignes de commentaire
//et peut être affiché dans SIMATIC Manager, par exemple.
AUTHOR...
FAMILY...
Définition
Les attributs système sont en vigueur dans le système de conduite au-delà des limites d'une
application particulière. Les attributs système pour bloc s'appliquent à l'ensemble d'un bloc.
Règles
• Vous déclarez les attributs système directement après l'instruction de début de bloc.
• La saisie doit respecter la syntaxe suivante :
24 caractères au maximum
IDENTIFICATEUR caractère
{ := ' ' }
imprimable
Exemples
FUNCTION_BLOCK FB10
{S7_m_c := 'true' ;
S7_blockview := 'big'}
Définition
La section de déclaration sert à déclarer les variables locales, les paramètres, les
constantes et les repères de saut.
• Définissez dans la section de déclaration du bloc de code les variables locales, les
paramètres, les constantes et les repères de saut qui ne doivent être valables que dans
un bloc.
• Définissez dans la section de déclaration de blocs de données les zones de données qui
doivent être adressables par tout bloc de code.
• Dans la section de déclaration d'un UDT, vous définissez un type de données utilisateur.
Composition
Une section de déclaration se divise elle-même en plusieurs sections, respectivement
caractérisées par un couple de mots-clés. Chacune d'entre elles contient une liste de
déclaration pour des données de même type. L'ordre de ces sections est libre. Le tableau
suivant énumère les sections de déclaration possibles :
Définition
Les attributs système sont en vigueur dans le système de conduite au-delà des limites d'une
application particulière. Ils servent par exemple à la configuration de messages ou de
liaisons. Les attributs système pour paramètre ne s'appliquent chaque fois qu'au seul
paramètre configuré. Vous pouvez affecter des attributs système aux paramètres d'entrée,
de sortie ou d'entrée/sortie.
Règles
• Vous affectez les attributs système pour paramètre dans les sections de déclaration des
paramètres d'entrée, de sortie ou d'entrée/sortie.
• Un identificateur doit comporter au plus 24 caractères.
• La saisie doit respecter la syntaxe suivante :
24 caractères au maximum
IDENTIFICATEUR caractère
{ := ' ' }
imprimable
Exemple
VAR_INPUT
in1 {S7_server:='alarm_archiv';
S7_a_type:='ar_send'}: DWORD ;
END_VAR
Vous pouvez appeler l'aide sur les attributs système depuis la documentation en ligne de
S7-SCL. Choisissez pour cela la rubrique "Appel des aides de référence".
Définition
La section des instructions contient les instructions qui doivent être exécutées après l'appel
d'un bloc de code. Elles servent à traiter des données ou des adresses.
La section des instructions d'un bloc de données contient des instructions pour donner une
valeur par défaut à ses variables.
Règles
• La section des instructions peut être introduite facultativement par le mot-clé BEGIN.
Dans les blocs de données, BEGIN est impérativement nécessaire. La section des
instructions se termine par le mot-clé de fin de bloc.
• Chaque instruction se termine par un point-virgule.
• Tous les identificateurs employés dans la section des instructions doivent être au
préalable déclarés.
• Chaque instruction peut être précédée facultativement de repères de saut.
La saisie doit respecter la syntaxe suivante :
IDENTIFICATEUR : Instruction ;
Repère de saut
Exemple
BEGIN
VALEUR_DEBUT :=0;
VALEUR_FIN :=200;
.
.
ENREGISTRER: RESULTAT :=CONSIGNE;
.
.
END_FUNCTION_BLOCK
6.11 Instructions
Définition
Une instruction est la plus petite unité autonome du programme utilisateur. Elle représente
une tâche que doit exécuter le processeur.
S7-SCL connaît les types d'instruction suivants :
• Affectations de valeur permettant d'attribuer à une variable soit une valeur, soit le résultat
d'une expression ou encore la valeur d'une autre variable ;
• Instructions de contrôle (de branchement) servant à répéter des instructions ou des
groupes d'instructions ou à orienter la suite du déroulement d'un programme ;
• Exécutions de sous-programmes destinés à appeler des fonctions et des blocs
fonctionnels.
Règles
La saisie doit respecter la syntaxe suivante :
Instruction
Affectation de valeur
Exécution de
sous-programme
Instruction de contrôle
Exemples
Les exemples suivants montrent les divers types d'instructions.
// Exemple d'affectation de valeur
VALEUR_MESURE:= 0 ;
Définition
Un bloc fonctionnel (FB) est un bloc de code contenant une partie d'un programme et
disposant d'une zone de mémoire qui lui est affectée. Chaque fois qu'un bloc fonctionnel est
appelé, il faut lui associer un DB d'instance. Vous déterminez la composition de ce DB
d'instance en définissant la section de déclaration du FB.
Syntaxe
Bloc fonctionnel
PROGRAM
DESIGNATION Section de dé-
DU FB claration du FB
FUNCTION_BLOCK
END_PROGRAM
BEGIN Section des instructions
END_FUNCTION_BLOCK
Désignation de FB
Indiquez comme désignation de FB à la suite du mot-clé FUNCTION_BLOCK ou
PROGRAM le mot-clé FB suivi du numéro de bloc ou du nom symbolique du FB. Le numéro
de bloc peut aller de 0 à 65533.
Exemples :
FUNCTION_BLOCK FB10
FUNCTION_BLOCK MOTEUR1
Section de déclaration du FB
La section de déclaration du FB sert à déclarer les données spécifiques au bloc. Les
sections de déclaration autorisées sont indiquées à la rubrique "Section de déclaration".
N'oubliez pas que la section de déclaration détermine aussi la composition du DB d'instance
associé au FB.
Exemple
FUNCTION_BLOCK FB11
VAR_INPUT
V1 : INT := 7 ;
END_VAR
VAR_OUTPUT
V2 : REAL ;
END_VAR
VAR
FX1, FX2, FY1, FY2 : REAL ;
END_VAR
BEGIN
IF V1 = 7 THEN
FX1 := 1.5 ;
FX2 := 2.3 ;
FY1 := 3.1 ;
FY2 := 5.4 ;
//Appel de la fonction FC11 avec affectation
//de valeurs
//aux paramètres par les variables statiques.
V2 := FC11 (X1:= FX1, X2 := FX2, Y1 := FY1,
Y2 := FY2) ;
END_IF ;
END_FUNCTION_BLOCK
Définition
Une fonction (FC) est un bloc de code auquel aucune zone de mémoire n'est affectée en
propre. Elle n'a pas besoin de DB d'instance. Contrairement à un FB, une fonction peut
fournir un résultat (valeur de retour) au point d'appel. Elle peut être utilisée de ce fait comme
une variable dans une expression. Les fonctions de type VOID ne fournissent pas de valeur
de retour.
Syntaxe
Fonction
VOID
DESIGNATION Spécification du
FUNCTION DE LA FC : type de données
Section de décla-
BEGIN Section des instructions END_FUNCTION
ration de la FC
Désignation de FC
Indiquez comme désignation de FC à la suite du mot-clé "FUNCTION" le mot-clé FC suivi du
numéro de bloc ou du nom symbolique de la FC. Le numéro de bloc peut aller de 0 à 65533.
Exemple :
FUNCTION FC17 : REAL
FUNCTION FC17 : VOID
Section de déclaration de la FC
La section de déclaration de la FC sert à déclarer les données locales (variables
temporaires, paramètres d'entrée, de sortie, d'entrée/sortie, constantes, repères de saut).
Exemple
FUNCTION FC11: REAL
VAR_INPUT
x1: REAL ;
x2: REAL ;
x3: REAL ;
x4: REAL ;
END_VAR
VAR_OUTPUT
Q2: REAL ;
END_VAR
BEGIN
// Retour de la valeur de la fonction
FC11:= SQRT( (x2 - x1)**2 + (x4 - x3) **2 ) ;
Q2:= x1 ;
END_FUNCTION
Définition
Comme un FB ou une FC, un bloc d'organisation est une partie du programme utilisateur,
que le système d'exploitation appelle cycliquement ou lors d'événements précis. Il constitue
l'interface entre le programme utilisateur et le système d'exploitation.
Syntaxe
Bloc d'organisation
Désignation d'OB
Indiquez comme désignation à la suite du mot-clé "ORGANIZATION_BLOCK" le mot-clé OB
suivi du numéro de bloc ou du nom symbolique de l'OB. Le numéro de bloc peut aller de
1 à 65533.
Exemples :
ORGANIZATION_BLOCK OB1
ORGANIZATION_BLOCK ALARM
Exemple
ORGANIZATION_BLOCK OB1
VAR_TEMP
EN_TETE : ARRAY [1..20] OF BYTE ; //20 octets pour le
système d'exploitation
END_VAR
BEGIN
FB17.DB10 (V1 := 7) ;
END_ORGANIZATION_BLOCK
Définition
Les données globales spécifiques à l'utilisateur qui doivent être accessibles à tous les blocs
d'un programme sont stockées dans des blocs de données. Chaque FB, FC ou OB peut lire
ou écrire dans ces blocs de données.
Il y a deux types de blocs de données.
• Blocs de données
Il s'agit de blocs de données auxquels tout bloc de code du programme CPU peut
accéder. Tout bloc fonctionnel (FB), toute fonction (FC) ou tout bloc d'organisation (OB) a
accès en lecture et en écriture aux données contenues dans ces blocs de données.
• Blocs de données d'instance
Les blocs de données d'instance sont associés à un bloc fonctionnel (FB) précis. Ils
contiennent les données locales pour ce bloc fonctionnel associé. Ils sont générés
automatiquement par le compilateur S7-SCL dès que vous appelez le FB dans le
programme utilisateur.
Syntaxe
Bloc de données
DESIGNATION
DATA_BLOCK DU DB Section de déclaration du DB
Désignation de DB
Indiquez comme désignation de DB à la suite du mot-clé "DATA_BLOCK" le mot-clé DB
suivi du numéro de bloc ou du nom symbolique du DB. Le numéro de bloc peut aller de 1 à
65533.
Exemples :
DATA_BLOCK DB20
DATA_BLOCK PLAGE_MESURE
Section de déclaration du DB
Dans la section de déclaration du DB, vous définissez la structure des données du DB. Ceci
peut être réalisé de deux manières différentes :
• En affectant un type de données utilisateur
Vous pouvez indiquer ici la désignation d'un type de données utilisateur défini
précédemment dans le programme. Le bloc de données prend alors la structure de cet
UDT. Vous pouvez attribuer les valeurs initiales des variables dans la section
d'affectation du DB.
• En définissant un type de données STRUCT
Dans la spécification du type de données STRUCT, vous déterminez le type de données
de chaque variable à enregistrer dans le DB et les valeurs initiales au besoin.
Section de déclaration du DB
DESIGNATION
DE L'UDT
Spécification du type
de données STRUCT
Exemple :
DATA_BLOCK DB20
STRUCT // Section de déclaration
VALEUR:ARRAY [1..100] OF INT;
END_STRUCT
Section d'affectation du DB
La section d'affectation vous sert à affecter des valeurs spécifiques de votre application
particulière aux données que vous avez déclarées dans la section de déclaration.
La section d'affectation est introduite par le mot-clé BEGIN et se compose d'une suite
d'affectations de valeurs.
Section d'affectation du DB
* en notation LIST
Exemple
// Bloc de données auquel on a affecté un type de données STRUCT
DATA_BLOCK DB10
STRUCT // Déclaration de données avec valeurs par défaut
VALEUR : ARRAY [1..100] OF INT := 100 (1) ;
COMMUT : BOOL := TRUE ;
S_MOT : WORD := W#16#FFAA ;
S_OCTET : BYTE := B#16#FF ;
S_DUREE : S5TIME := S5T#1h30m10s ;
END_STRUCT
END_DATA_BLOCK
Spécification
DESIGNATION du type de données
TYPE END_TYPE
DE L`UDT STRUCT
Désignation d'UDT
Indiquez à la suite du mot-clé TYPE le mot-clé UDT suivi d'un numéro ou simplement du
nom symbolique de l'UDT. Le numéro de bloc peut aller de 0 à 65533.
Exemples :
TYPE UDT10
TYPE SECTION_AFFECTATION
TYPE VALEURS_MESURE
STRUCT
// Définition d'UDT avec désignation symbolique
BIPOL_1 : INT := 5;
BIPOL_2 : WORD := W#16#FFAA ;
BIPOL_3 : BYTE := B#16#F1 ;
BIPOL_4 : WORD := B#(25,25) ;
MESURE : STRUCT
BIPOLAIRE_10V : REAL ;
UNIPOLAIRE_4_20MA : REAL ;
END_STRUCT ;
END_STRUCT ;
END_TYPE
Définition
Outre des blocs, les sources S7-SCL peuvent également contenir des indications sur les
paramètres du compilateur avec lesquels les différents blocs doivent être compilés.
Les options du compilateur définissent le processus de compilation des blocs individuels ou
de la source globale, quels que soient les paramètres figurant dans l'onglet "Compiler
(paramètres)".
Vous pouvez utiliser les options du compilateur dans les sources S7-SCL ou dans les
fichiers d'information de compilation.
Validité
Les options sont uniquement valables pour la compilation de la source pour laquelle elles
ont été définies. L'application d'une option du compilateur commence par sa désignation et
se termine à la fin de la source ou du fichier d'information de compilation. En présence
d'options identiques du compilateur, c'est la dernière en date qui s'applique.
Si des options du compilateur ont été définies pour un bloc, leur priorité est plus élevée que
les paramétrages de l'onglet "Compiler (paramètres)". Les paramétrages dans l'onglet
restent cependant valables.
Règles
Les règles suivantes s'appliquent aux options du compilateur :
• Dans la source, les options se trouvent en dehors des limites des blocs.
• Les options figurent dans une ligne distincte.
• Aucune distinction n'est faite entre les minuscules et les majuscules.
Options disponibles
Le tableau indique les options disponibles :
Exemple
{SCL_OverwriteBlocks := 'y' ; SCL_CreateDebugInfo := 'y'}
{SetOKFlag := 'y' ; OptimizeObjectCode := 'y'}
Types de paramètre
Les types de paramètre sont des types de données spéciaux pour les temporisations, les
compteurs et les blocs ; vous pouvez les utiliser comme paramètres formels.
Les données de ce type sont des combinaisons binaires occupant 1 bit (type de données
BOOL), 8 bits, 16 bits ou 32 bits. Pour les types de données octet, mot et double mot, la
plage de valeurs ne peut pas être indiquée. Il s'agit ici de combinaisons binaires permettant
uniquement la formation d'expressions booléennes.
Les types de données numériques servent à traiter les valeurs numériques (par exemple à
calculer des expressions arithmétiques).
Les données de ce type représentent les diverses valeurs de durée et de date dans STEP 7
(par exemple pour régler la date ou saisir la durée d'une temporisation).
Pour les variables du type de données S5TIME, la résolution est limitée, c'est-à-dire que
seules les bases de temps 0,01 s, 0,1 s, 1s et 10 s sont disponibles. Le compilateur arrondit
les valeurs en conséquence. Si la valeur choisie dépasse la limite supérieure de la plage des
valeurs autorisées, c'est la valeur limite supérieure qui est utilisée.
Définition
Ce type de données définit une zone de 64 bits (8 octets) pour l'indication de la date et de
l'heure. Cette zone de données enregistre les informations suivantes :
année, mois, jour, heures, minutes, secondes, millisecondes.
Syntaxe
DATE_AND_TIME
DATE_AND_TIME#
DT#
La syntaxe exacte pour indiquer la date et l'heure du jour est donnée dans la rubrique
"Déclaration de constantes".
Plage de valeurs
Exemple
Voici la définition correcte du 20.10.1995 12 heures 20 min. 30 s et 10 ms :
DATE_AND_TIME#1995-10-20-12:20:30.10
DT#1995-10-20-12:20:30.10
Nota
Des fonctions standard sont à votre disposition (dans la bibliothèque de STEP 7) pour vous
permettre d'accéder avec précision aux composants DATE ou TIME.
Définition
Le type de données STRING définit une chaîne de 254 caractères au plus. La zone de
mémoire standard réservée à une chaîne de caractères est de 256 octets. Cette zone de
mémoire est requise pour enregistrer les 254 caractères ainsi qu'un en-tête de 2 octets.
Vous pouvez réduire la place mémoire requise par une chaîne de caractères en indiquant
dans sa définition le nombre maximal de caractères à enregistrer dans la chaîne. Une
chaîne de longueur nulle, c'est-à-dire sans contenu, représente la plus petite valeur possible.
Syntaxe
Expression
STRING [ ]
simple
Longueur de la chaîne
L'expression simple représente le nombre maximal de caractères dans la chaîne. Tous les
caractères du code ASCII sont autorisés. Une chaîne peut contenir aussi des caractères
spéciaux, comme par exemple des caractères de commande, et des caractères non
imprimables. Vous les entrez au moyen de la syntaxe $hh, hh représentant la valeur
hexadécimale du caractère ASCII (ex. : '$0D$0AText' ).
Quand vous déclarez la place mémoire requise par une chaîne de caractères, vous pouvez
fixer le nombre maximal de caractères à enregistrer dans cette chaîne. Si vous n'indiquez
pas ici de longueur maximale, c'est une chaîne de longueur 254 qui sera créée.
Exemple :
VAR
Text1 : String [123];
Text2 : String;
END_VAR
Dans la déclaration de la variable "Text1", la constante "123" représente le nombre maximal
de caractères dans la chaîne. Pour la variable "Text2" , c'est une longueur de 254 caractères
qui sera réservée.
Nota
Pour les paramètres de sortie et d'entrée/sortie ainsi que pour les valeurs de retour de
fonctions, vous pouvez réduire la zone de 254 caractères réservée de manière standard afin
de mieux utiliser les ressources de votre CPU. Choisissez à cet effet la commande Outils >
Paramètres, puis l'onglet "Compilateur" dans la boîte de dialogue qui s'affiche.
L'option "Long. chaîne max." vous permet d'indiquer le nombre de caractères souhaité.
Notez que cette valeur s'appliquera à toutes les variables STRING de la source. Elle ne doit
donc pas être inférieure à celle des variables STRING employées dans le programme.
Nota
Quand une fonction provenant d'une bibliothèque standard fournit une valeur de retour qui est du type
de données STRING et que cette valeur doit être affectée à une variable temporaire, il faut d'abord
initialiser la variable.
Exemple :
FUNCTION Test : STRING[45]
VAR_TEMP
x : STRING[45];
END_VAR
x := 'a';
x := concat (in1 := x, in2 := x);
Test := x;
END_FUNCTION
Sans l'initialisation x := 'a'; la fonction fournirait un résultat faux.
Cadrage
Les variables de type STRING commencent et finissent à une limite de mot.
Définition
Un type de données ARRAY possède un nombre déterminé de composants d'un seul et
même type de données. S7-SCL distingue :
• le type de données ARRAY unidimensionnel : c'est une liste d'éléments de données
disposés selon un ordre croissant ;
• le type de données ARRAY bidimensionnel : c'est un tableau de données comportant des
lignes et des colonnes ; la première dimension se rapporte au numéro de ligne, la
seconde au numéro de colonne ;
• le type de données ARRAY de dimension supérieure : c'est l'extension du type ARRAY
bidimensionnel à des dimensions supplémentaires ; le nombre maximal de dimensions
autorisées est de 6.
Syntaxe
6 dimensions au plus
Spécification du
OF type de données
Exemple
VAR
REGULATEUR1 :
ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,
Cadrage
Les variables de type ARRAY sont créées ligne par ligne. Chaque dimension d'une variable
de type BOOL, BYTE ou CHAR se termine à une limite d'octet, toutes les autres à une limite
de mot.
Définition
Un type de données STRUCT décrit une zone comportant un nombre fixe de composants
dont les types de données peuvent être différents. Ces éléments de données sont indiqués
dans la déclaration des composants, immédiatement après le mot-clé STRUCT.
Un élément de données de type STRUCT peut être lui-même complexe, ce qui autorise
l'imbrication des types de données STRUCT.
Syntaxe
Spécification du Initialisation du
IDENTIFICATEUR : type de données type de données ;
Nom du composant
Exemple
VAR
MOTEUR : STRUCT
DONNEES : STRUCT
COURANT_CHARGE : REAL ;
TENSION : INT := 5 ;
END_STRUCT ;
END_STRUCT ;
END_VAR
Cadrage
Les variables de type STRUCT commencent et finissent à une limite de mot.
Important
Si vous définissez une structure qui ne se termine pas à une limite WORD, S7-SCL
complète automatiquement les octets manquants et adapte ainsi la taille de la structure.
L'adaptation de la taille de la structure risque d'entraîner des conflits d'accès aux types de
données possédant une longueur d'octets impaire.
Définition
Vous définissez un type de données utilisateur (UDT) en tant que bloc. Une fois défini, il
peut être utilisé dans l'ensemble du programme utilisateur. Il s'agit donc d'un type de
données global. Vous pouvez l'utiliser dans la section de déclaration d'un bloc ou d'un bloc
de données en indiquant sa désignation UDTx (x représente un numéro) ou le mnémonique
qui lui est affecté.
Le type de données utilisateur peut servir à déclarer des variables, des paramètres, des
blocs de données et d'autres types de données utilisateur. Il permet également de déclarer
des composants de structures ou de tableaux.
Syntaxe
Type de données utilisateur
Spécification
DESIGNATION du type de données
TYPE END_TYPE
DE L`UDT STRUCT
Désignation d'UDT
La déclaration d'un type de données utilisateur est introduite par le mot-clé TYPE, suivi du
nom du type de données utilisateur (identificateur de l'UDT). Ce nom peut être indiqué de
manière absolue comme nom standard de forme UDTx (x représente un numéro) ou de
manière symbolique avec un mnémonique.
Exemples :
TYPE UDT10
TYPE VALEURS_MESURE
Nota
Dans un type de données utilisateur, il faut employer la syntaxe de LIST. Ceci concerne par
exemple la manière d'écrire les constantes et l'attribution de valeurs initiales (initialisation).
L'aide en ligne relative à LIST fournit des informations sur l'écriture des constantes.
Exemple
// Définition d'UDT avec désignation symbolique
TYPE
VALEURS_MESURE: STRUCT
BIPOL_1 : INT := 5;
BIPOL_2 : WORD := W#16#FFAA ;
BIPOL_3 : BYTE := B#16#F1 ;
BIPOL_4 : WORD := W#16#1919 ;
MESURE : STRUCT
BIPOLAIRE_10V : REAL ;
UNIPOLAIRE_4_20MA : REAL ;
END_STRUCT;
END_STRUCT;
END_TYPE
Vous déterminez une temporisation ou un compteur à utiliser lors de l'exécution d'un bloc.
Les types de données TIMER et COUNTER ne sont autorisés que pour les paramètres
d'entrée (VAR_INPUT).
Vous pouvez affecter au type de données POINTER des variables que vous déclarez en tant
que paramètres formels d'un bloc. A l'appel d'un tel bloc, ces paramètres peuvent être
définis avec des opérandes de type de données quelconque (sauf ANY).
S7-SCL n'offre toutefois qu'une seule instruction pour le traitement du type de données
POINTER : la transmission à des blocs de niveau hiérarchique inférieur.
Vous pouvez affecter les types d'opérande suivants comme paramètres effectifs :
• Adresses absolues
• Mnémoniques
• Opérandes du type de données POINTER
(seulement si l'opérande est un paramètre formel compatible)
• Constante NIL :
vous indiquez un pointeur zéro.
Restrictions
• Le type de données POINTER est autorisé pour les paramètres formels d'entrée,
d'entrée/sortie de FB et de FC de même que pour les paramètres de sortie de FC. Les
constantes ne sont pas autorisées comme paramètres effectifs (à l'exception de la
constante NIL).
• Lorsque vous affectez une variable temporaire à un paramètre formel de type POINTER
à l'appel d'un FB ou d'une FC, vous ne pouvez pas transmettre ce paramètre à un autre
bloc. Les variables temporaires perdent leur validité lors de la transmission.
• A l'appel d'une FC ou d'un FB, vous pouvez uniquement affecter des paramètres formels
du type Pointer à des entrées du processus (%PEW), si le paramètre formel a été déclaré
comme paramètre d'entrée.
• A l'appel d'un FB, vous pouvez uniquement affecter des paramètres formels du type
Pointer à des sorties du processus (%PEW), si le paramètre formel a été déclaré comme
paramètre de sortie.
Exemple
FUNCTION_BLOCK FB100
VAR
ii : INT;
aa : ARRAY[1..1000] OF REAL;
END_VAR
BEGIN
// ...
FC100( N_out := ii, out := aa);
// ...
END_FUNCTION_BLOCK
Restrictions
• Le type de données ANY est autorisé pour les paramètres formels d'entrée,
d'entrée/sortie de FB et de FC de même que pour les paramètres de sortie de FC. Les
constantes ne sont pas autorisées comme paramètres effectifs ou à droite d'une
affectation (à l'exception de la constante NIL).
• Lorsque vous affectez une variable temporaire à un paramètre formel de type ANY lors
de l'appel d'un FB ou d'une FC, vous ne pouvez pas transmettre ce paramètre à un autre
bloc. Les variables temporaires perdent leur validité lors de la transmission.
• Il n'est pas permis d'utiliser les variables de ce type comme composant d'une structure ou
élément d'un tableau.
• A l'appel d'une FC ou d'un FB, vous pouvez uniquement affecter des paramètres formels
du type ANY à des entrées du processus (%PEW), si le paramètre formel a été déclaré
comme paramètre d'entrée.
• A l'appel d'un FB, vous pouvez uniquement affecter des paramètres formels du type ANY
à des sorties du processus (%PEW), si le paramètre formel a été déclaré comme
paramètre de sortie.
VAR_TEMP
pANY : ANY;
END_VAR
CASE ii OF
1:
pANY := MW4; // pANY contient l'adresse de MW4
3..5:
pANY:= aINT[ii]; // pANY contient l'adresse du ii-ème
// élément du tableau aINT;
100:
pANY := iANY; // pANY contient la valeur
// de la variable d'entrée iANY ELSE
pANY := NIL; // pANY contient la valeur du pointeur NIL
END_CASE;
SFCxxx(IN := pANY);
Catégories de variables
Le tableau suivant décrit les catégories servant à classer les variables locales :
Variable Signification
Variables statiques Les variables statiques sont des variables locales dont la valeur reste la même
durant toutes les exécutions du bloc (mémoire du bloc). Elles servent à stocker les
valeurs d'un bloc fonctionnel et sont stockées dans le bloc de données d'instance.
Variables temporaires Les variables temporaires appartiennent localement à un bloc de code et
n'occupent aucune zone de mémoire statique, puisqu'elles sont rangées dans la
pile de la CPU. Leur valeur ne reste la même que le temps d'une exécution du
bloc. Il n'est pas possible d'adresser les variables temporaires en dehors du bloc
dans lequel elles ont été déclarées.
Drapeau OK
Le compilateur de S7-SCL offre un drapeau servant à déceler les erreurs durant l'exécution
de programmes dans la CPU. Il s'agit d'une variable locale de type BOOL dont le nom
prédéfini est "OK".
Déclaration de variable 1)
Spécification du 2)
IDENTIFICATEUR AT Variable : Initialisation du ;
simple type de données type de données
Nom de variable,
de paramètre
ou
de composant
Exemples
VALEUR1 : REAL;
S'il y a plusieurs variables du même type :
Nota
Pour utiliser des mots réservés comme identificateurs, vous devez les faire précéder du
signe # (par exemple, #FOR).
8.3 Initialisation
Lorsque vous déclarez des variables statiques, des paramètres d'entrée et des paramètres
de sortie d'un FB, vous pouvez leur affecter une valeur par défaut. De même pour les
paramètres d'entrée/sortie, mais seulement quand ils sont d'un type de données simple.
Pour les variables simples, vous devez affecter (:=) une constante après avoir indiqué le
type de données.
Syntaxe
INITIALISATION
CONSTANTE
LISTE D’INITIAL.
D’UN TABLEAU
Exemple
VALEUR :REAL := 20.25;
Nota
Il n'est pas possible d'initialiser une liste de variables (A1, A2, A3,...: INT:=...). Dans ce cas,
il faut initialiser les variables séparément.
Initialisation de tableaux
Pour initialiser un type de données ARRAY, vous pouvez soit indiquer une valeur séparée
par une virgule pour chaque composant du tableau, soit affecter une même valeur à
plusieurs composants en plaçant devant un facteur de répétition (nombre entier).
Les valeurs d'initialisation peuvent être mises entre parenthèses, en option. Même dans le
cas de tableaux multi-dimensionnels, une seule paire de parenthèses est indiquée.
LISTE DE REPET.
DE CONSTANTES
Exemples
Exemple
Dans l'exemple ci-après, plusieurs accès à un paramètre d'entrée sont rendus possibles :
VAR_INPUT
Tampon : ARRAY[0..255] OF BYTE;
Telegramme1 AT Tampon : UDT100 ;
Telegramme2 AT Tampon : UDT200 ;
END_VAR
Le bloc appelant définit le paramètre Tampon, il ne voit pas les noms Telegramme1 et
Telegramme2. Le bloc appelé dispose alors de 3 façons d'interpréter les données, à savoir
comme tableau de nom Tampon ou organisées autrement sous Telegramme1 ou
Telegramme2.
Règles
• La déclaration d'un accès supplémentaire à une variable doit être effectuée dans le
même bloc de déclaration et à la suite de la déclaration de la variable sur laquelle il doit
pointer.
• L'initialisation n'est pas possible.
• Le type de données de l'accès doit être compatible avec celui de la variable. C'est la
variable qui impose la taille de la zone de mémoire. La place mémoire requise par l'accès
peut être inférieure ou égale à cette taille. Il faut respecter en outre les règles de
combinaison suivantes :
simple = BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME, S5TIME, CHAR
complexe = ARRAY, STRUCT, DATE_AND_TIME, STRING
Syntaxe
Le FB et le SFB doivent
Déclaration d'instances déjà exister !
DESIGNATION
DU FB
IDENTIFICATEUR : ;
Exemple
Définition1 : FB10;
Définition2,Définition3,Définition4 : FB100;
Moteur1 : Moteur ;
8.7 Drapeau OK
Le drapeau OK sert à noter l'exécution correcte ou incorrecte d'un bloc. Il s'agit d'une
variable locale de type BOOL dont le nom prédéfini est "OK".
Au début de l'exécution d'un programme, le drapeau OK a la valeur TRUE. Des instructions
S7-SCL permettent de l'interroger à un endroit quelconque du bloc ou de lui donner la valeur
TRUE / FALSE. Si une erreur se produit durant l'exécution d'une opération (par exemple une
division par zéro), le drapeau OK prend la valeur FALSE. Lorsque vous quittez le bloc, la
valeur du drapeau OK est enregistrée dans le paramètre de sortie ENO où elle peut être
exploitée par le bloc appelant.
Déclaration
Le drapeau OK est une variable déclarée dans le système. Il n'est donc pas nécessaire de la
déclarer. Si vous souhaitez vous en servir dans votre programme utilisateur, vous devez
cocher l'option de compilation "Activer drapeau OK" avant d'effectuer la compilation.
Exemple
// :
// :
// :
END_IF;
Données Syntaxe FB FC OB
Variable comme : VAR
variable statique ... X X *)
END_VAR
VAR_TEMP
variable temporaire ... X X X
END_VAR
VAR_OUTPUT
paramètre de sortie ... X X
END_VAR
VAR_IN_OUT
paramètre d'entrée/sortie ... X X
END_VAR
Les variables statiques sont des variables locales dont la valeur reste la même durant toutes
les exécutions d'un bloc (mémoire du bloc). Elles servent à stocker les valeurs d'un bloc
fonctionnel et sont enregistrées dans un bloc de données d'instance associé.
Syntaxe
Les variables statiques sont déclarées dans la section de déclaration VAR / END_VAR.
Cette section fait partie de la section de déclaration du FB. Après la compilation, c'est cette
section qui, avec les sections pour les paramètres de bloc, déterminera la composition du
bloc de données d'instance associé.
Vous pouvez :
• Y créer des variables, affecter aux variables des types de données ainsi que des valeurs
initiales
• ou déclarer en tant que variable statique un FB à appeler si vous souhaitez l'appeler
comme instance locale dans le FB actif.
Déclaration
de la variable
VAR END_VAR
Déclaration
de l'instance
Exemple
VAR
PASSAGE :INT;
TABLEAU_MESURE :ARRAY [1..10] OF REAL;
COMMUTATEUR :BOOL;
MOTEUR_1,MOTEUR_2 :FB100; //Déclaration d'instance
END_VAR
Adressage
L'adressage des variables s'effectue dans la section des instructions.
• Adressage au sein du bloc : vous pouvez adresser une variable dans la section des
instructions du bloc fonctionnel dont la section de déclaration contient la déclaration de
cette variable. La marche à suivre est expliquée avec précision dans la rubrique
"Affectation de valeur".
• Adressage depuis l'extérieur par le DB d'instance : vous pouvez adresser une
variable depuis d'autres blocs au moyen d'un adressage indexé, par ex. DBx.variable.
Syntaxe
La déclaration des variables temporaires s'effectue dans la section de déclaration
VAR_TEMP / END_VAR. Cette section fait partie d'un FB, d'une FC ou d'un OB. Le nom de
la variable et son type de données sont indiqués dans la déclaration de la variable.
VAR_TEMP Déclaration
de la variable END_VAR
Exemple
VAR_TEMP
TAMPON 1 : ARRAY [1..10] OF INT ;
AIDE1, AIDE2 : REAL;
END_VAR
Adressage
L'adressage de ces variables s'effectue toujours dans la section des instructions du bloc de
code dont la section de déclaration contient la déclaration de la variable (adressage interne),
voir la rubrique "Affectation de valeur".
Les paramètres de bloc servent à réserver de la place et ne sont déterminés que lors de
l'utilisation concrète du bloc (appel). Ceux qui sont déclarés dans le bloc sont appelés
paramètres formels, les valeurs qui leur sont affectées à l'appel du bloc sont appelées
paramètres effectifs. Ainsi, les paramètres constituent un mécanisme d'échange
d'informations entre les blocs.
Syntaxe
Les paramètres formels doivent être déclarés dans la section de déclaration d'un bloc
fonctionnel ou d'une fonction. Suivant le type de paramètre, ils sont déclarés dans l'une des
trois sections de déclaration des paramètres. Vous déterminez leur nom et leur type de
données dans la déclaration des variables. Seuls les paramètres d'entrée et les paramètres
de sortie d'un FB peuvent être initialisés.
Pour la déclaration des paramètres formels, vous pouvez non seulement utiliser des types
de données simples, complexes et utilisateur, mais également des types de données pour
paramètre.
VAR_INPUT
VAR_OUTPUT Déclaration
de la variable END_VAR
VAR_IN_OUT
Exemple
Adressage
L'adressage des paramètres de bloc s'effectue dans la section des instructions d'un bloc de
code.
• Adressage interne : c'est-à-dire dans la section des instructions du bloc dont la section
de déclaration contient la déclaration des paramètres. Ceci est expliqué à la rubrique
"Affectations de valeur" et à la rubrique " "Expressions, opérations et opérandes".
• Adressage depuis l'extérieur par DB d'instance : vous pouvez adresser les
paramètres d'un bloc fonctionnel par l'intermédiaire du DB d'instance associé.
9.1 Constantes
Les constantes sont des données possédant une valeur fixe qui ne varie pas durant
l'exécution du programme.
S7-SCL connaît les catégories suivantes de constantes.
• Constantes binaires
• Constantes numériques :
- Constantes entières
- Constantes réelles
• Constantes sur caractères :
- Constantes sur caractère
- Constantes sur chaîne
• Constantes temporelles :
- Constantes de date
- Constantes de durée
- Constantes d'heure du jour
- Constantes de date et heure
Il n'est pas nécessaire de déclarer les constantes. Vous pouvez toutefois leur attribuer des
mnémoniques dans la section de déclaration.
La déclaration des mnémoniques de constantes s'effectue avec l'instruction CONST dans la
section de déclaration de votre bloc de code. Elle est recommandée pour toutes les
constantes du bloc, car elle contribue à une meilleure lisibilité et facilite le traitement du bloc
lorsque vous modifiez les valeurs constantes.
Syntaxe
Dans les expressions simples, seules les opérations arithmétiques de base sont autorisées
(*, /, +, -, DIV, MOD).
Exemple
CONST
Nombre := 10 ;
HEURE1 := TIME#1D_1H_10M_22S_2MS ;
NOM := 'SIEMENS' ;
NOMBRE2 := 2 * 5 + 10 * 4 ;
NOMBRE3 := 3 + ZAHL2 ;
END_CONST
Les types de données ne sont pas affectés aux constantes comme dans LIST.
Une constante ne reçoit son type de données qu'avec la combinaison arithmétique ou
logique dans laquelle elle est employée, par ex. :
Int1:=Int2 + 12345 //"12345" reçoit le type de données INT
Real1:=Real2 + 12345 //"12345" reçoit le type de données REAL
Le type de données affecté à une constante est celui dont la plage de valeurs suffit juste
encore à prendre en charge la constante sans perte de valeur. Par exemple, la constante
"12345" n'est pas toujours du type INT comme dans LIST, mais elle fait partie de la classe
de types de données ANY_NUM, c'est-à-dire qu'elle sera INT, DINT ou REAL suivant
l'emploi.
Constantes typées
La notation typée des constantes vous permet d'indiquer aussi explicitement un type de
données pour les types numériques suivants.
Exemples :
Une notation précise (format) sert à indiquer la valeur d'une constante suivant le type et le
format de données choisis. Le type et la valeur de la constante résultant directement de la
notation, il n'est pas nécessaire de les déclarer.
Exemples :
15 VALEUR 15 en tant que constante entière en représentation décimale
2#1111 VALEUR 15 en tant que constante entière en représentation binaire
16#F VALEUR 15 en tant que constante entière en représentation
hexadécimale
Représentation exponentielle
real#2e4
+1.234567E+02
S5TIME 16 bits T#0ms S5T#0ms
Durée en format SIMATIC TIME#2h46m30s S5TIME#2h46m30s
T#0.0s
TIME#24.855134d
TIME 32 bits -T#24d20h31m23s647ms
Durée en format CEI TIME#24d20h31m23s647ms
T#0.0s
TIME#24.855134d
DATE 16 bits D#1990-01-01
Date DATE#2168-12-31
TIME_OF_DAY 32 bits TOD#00:00:00
Heure du jour TIME_OF_DAY#23:59:59.999
DATE_AND_TIME Date et heure DT#1995-01-01-12:12:12.2
Syntaxe
CONSTANTE BINAIRE
BOOL#
DWORD#
DW#2#1111_0000_1111_0000
dword#32768
8# Chiffre octal
_
Caractère de soulignement
Exemple
Les exemples suivants montrent des notations correctes de constantes binaires :
Bool#false
8#177777
DW#16#0000_0000
Syntaxe
CONSTANTE ENTIERE
SUITE DE CHIFFRES DECIMAUX
INT# + SUITE DE CHIFFRES OCTAUX
SUITE DE CHIFFRES HEXA
DINT# - SUITE DE CHIFFRES BINAIRES
CARACTERES (1)
Exemple
Les exemples suivants montrent des notations correctes de constantes entières :
Syntaxe
CONSTANTE REELLE
REAL#
- SUITE DE CHIFFRE SUITE DE CHIFFRE
DECIMAUX . DECIMAUX Exposant
L'indication du signe est facultative. En l'absence de signe, le nombre est interprété comme
nombre positif.
Dans une constante, une suite de chiffres décimaux peut être séparée par des caractères de
soulignement pour améliorer la lisibilité des grands nombres ; ceci est facultatif. Voici des
notations correctes de suites de chiffres décimaux dans les constantes :
1000
1_120_200
666_999_400_311
Exposants
En notation exponentielle, vous pouvez avoir recours à un exposant pour indiquer des
nombres à virgule flottante. L'exposant est indiqué par la lettre "E" ou "e", suivie du nombre
entier.
10
La grandeur 3x10 peut être représentée en S7-SCL par les nombres réels suivants :
Exemples
NOMBRE4:= -3.4 ;
NOMBRE5:= 4e2 ;
NOMBRE6:= real#1.5;
Syntaxe
CONSTANTE SUR CARACTERE
SUITE DE CHIFFRES
DECIMAUX
Exemple
Caractère_1 := 'B';
Caractère_2 := char#43;
Caractère_3 := char#'B';
Syntaxe du caractère
Il peut provenir du jeu étendu complet de caractères ASCII. Pour saisir un caractère de mise
en forme spécial, une apostrophe (') ou le caractère $, placez devant le caractère $.
Vous pouvez également utiliser des caractères non imprimables du jeu de caractères ASCII
étendu. Il vous suffit pour cela d'indiquer leur représentation en code hexadécimal.
&DUDFWÙUH
&DUDFWÙUH
LPSULPDEOH
&DUDFWÙUHGಫDOLJQHPHQW
&DUDFWGHUHPSODFHPHQW
RXಪ
&DUDFWGHFRPPDQGH
3RX/RX5RX7RX1
&KLIIUH &KLIIUH
KH[DGHFLPDO
KH[DGHFLPDO
5HSUÚVHQWDWLRQGHVXEVWLWXWLRQHQFRGHKH[DGÚFLPDOH
3 6DXWGHSDJH
QRQDXWRULVÚH
/ &KDQJHPHQWGHOLJQH
5 5HWRXUFKDULRW
7 7DEXODWLRQ
1 1RXYHOOHOLJQH
Syntaxe
Interruption '
' Caractère Caractère
de la chaîne
Syntaxe du caractère
Vous pouvez utiliser tous les caractères de tout le jeu de caractères ASCII étendu. Pour
saisir un caractère de mise en forme spécial, une apostrophe (') ou le caractère $, placez
devant le caractère $.
Vous pouvez aussi utiliser les caractères non imprimables du jeu de caractères ASCII
étendu complet. Il vous suffit pour cela d'indiquer leur représentation en code hexadécimal.
&DUDFWÙUH
&DUDFWÙUH
LPSULPDEOH
&DUDFWÙUHGಫDOLJQHPHQW
&DUDFWGHUHPSODFHPHQW
RXಪ
&DUDFWGHFRPPDQGH
3RX/RX5RX7RX1
&KLIIUH &KLIIUH
KH[DGHFLPDO
KH[DGHFLPDO
5HSUÚVHQWDWLRQGHVXEVWLWXWLRQHQFRGHKH[DGÚFLPDOH
3 6DXWGHSDJH
QRQDXWRULVÚH
/ &KDQJHPHQWGHOLJQH
5 5HWRXUFKDULRW
7 7DEXODWLRQ
1 1RXYHOOHOLJQH
$> $<
Commentaire
Exemples
Syntaxe
Indication de la date
Exemple
VARIABLE_TEMPS1:= DATE#1995-11-11 ;
VARIABLE_TEMPS2:= D#1995-05-05 ;
Syntaxe
Durée
-Chaque unité de temps (heures, minutes) ne doit être indiquée qu'une seule fois
-L'ordre - jours, heures, minutes, secondes, millisecondes - doit être respecté
Passer de la représentation par niveaux à la représentation décimale n'est possible que tant
que les unités horaires ne sont pas encore indiquées.
Après les préfixes introductifs T# ou TIME#, vous devez indiquer au moins une unité horaire.
Représentation décimale
Utilisez la représentation décimale si vous souhaitez indiquer sous forme de nombre décimal
un composant horaire, comme par exemple les heures ou les minutes.
Représentation décimale
Jours Heures
Minutes Secondes
SUITE DE CHIFFRES _
MS
DECIMAUX
Millisecondes
Exemple
// Représentation décimale
Intervalle1:= TIME#10.5S ;
Syntaxe
Heure du jour
TIME_OF_DAY#
TOD#
Pour indiquer l'heure du jour, vous entrez les heures, minutes et secondes séparées par
deux-points. L'indication des millisecondes est facultative. Elle est séparée des autres par un
point.
Exemple
HEURE1:= TIME_OF_DAY#12:12:12.2 ;
HEURE2:= TOD#11:11:11 ;
Syntaxe
Date et heure
DATE_AND_TIME#
DT#
Indication de la date
Indication de la date
Exemple
HEURE1:= DATE_AND_TIME#1995-01-01-12:12:12.2 ;
HEURE2:= DT#1995-02-02-11:11:11;
Syntaxe
Repère de saut
Exemple
LABEL
REPERE1, REPERE2, REPERE3;
END_LABEL
Les zones de mémoire d'une CPU sont déclarées dans le système. Vous n'avez donc pas
besoin de les déclarer dans votre bloc de code. Chaque CPU met à votre disposition les
zones de mémoire suivantes possédant leur propre espace d'adressage :
• Entrées/sorties dans la mémoire image (par exemple A1.0)
• Entrées/sorties de périphérie (par exemple PA1.0)
• Mémentos (par exemple M1.0)
• Temporisations, compteurs (C1)
Syntaxe de l'adressage
Vous adressez une zone de mémoire de la CPU dans une affectation de valeur réalisée
dans la section des instructions d'un bloc de code par :
• Adressage simple indiqué de manière absolue ou symbolique, ou
• adressage indexé.
IDENTIFICATEUR Adresse
D'OPERANDE
Adressage absolu
IDENTIFICATEUR
Adressage symbolique
Mnémonique
IDENTIFICATEUR Expression
[ de base ]
D'OPERANDE
L'adressage absolu d'une zone de mémoire de la CPU s'effectue, par exemple, au moyen de
l'affectation d'un identificateur absolu à une variable de même type.
ETAT_2:= EB10;
Adressage absolu
L'identificateur absolu renvoie à une zone de mémoire dans la CPU que vous spécifiez en
indiquant l'identificateur d'opérande (EB dans notre exemple) suivi de l'adresse (ici 10).
Identificateur d'opérande
Préfixe Préfixe
de mémoire de taille
Préfixe de mémoire
Le préfixe de mémoire vous permet de déterminer la nature des zones de mémoire à
adresser.
Préfixe de mémoire
I
E Entrée
Q
A Sortie
M M Mémento
Préfixe de taille
En indiquant le préfixe de taille, vous spécifiez la largeur de la zone de mémoire qui doit être
lue dans la périphérie. Vous pouvez par exemple lire un octet ou un mot. Si vous ne
souhaitez spécifier qu'un bit, l'indication du préfixe de taille est facultative.
Préfixe de taille
X Bit
B Octet
W Mot
D Double mot
Adresse
Pour préciser l'adresse, vous devez d'abord indiquer l'adresse d'octet absolue, puis séparée
par un point, l'adresse de bit de l'octet concerné. L'indication de l'adresse de bit est
facultative.
Adresse
Numéro . Numéro
Exemples
OCTET_ETAT :=EB10;
ETAT_3 :=E1.1;
VAL_MESURE :=EW20;
L'adressage symbolique vous permet d'utiliser des mnémoniques au lieu des identificateurs
absolus pour adresser les zones de mémoire de la CPU.
Vous associez les mnémoniques aux opérandes respectifs de votre programme utilisateur
dans la table de mnémoniques. La commande Outils > Table des mnémoniques vous
permet à tout moment d'ouvrir la table de mnémoniques depuis S7-SCL pour y ajouter
d'autres mnémoniques.
Tous les types de données simples sont autorisés, si tant est que leur longueur suffit à la
longueur d'adressage. Le tableau ci-après donne un exemple de table des mnémoniques.
Adressage
Pour réaliser l'adressage, vous affectez le mnémonique déclaré à une variable de même
type.
Exemple
VAL_MESURE_1 := Contact_moteur_1;
Etat_moteur1 := entree1 ;
Vous avez également la possibilité d'accéder aux zones de mémoire de la CPU de manière
indexée. Par rapport à l'adressage absolu, l'avantage réside dans le fait que vous pouvez
adresser les zones de mémoire de manière dynamique, en utilisant des indices variables.
Ainsi, vous pouvez par exemple utiliser la variable de contrôle d'une boucle FOR comme
adresse.
L'adressage indexé d'une zone de mémoire ressemble à l'adressage absolu. La seule
différence réside dans l'indication de l'adresse. A la place de l'adresse, vous spécifiez un
indice qui peut être une constante, une variable ou une expression arithmétique.
Pour l'adressage indexé, l'identificateur absolu est composé de l'identificateur d'opérande
(préfixe de mémoire et préfixe de taille) et d'une expression de base pour l'indexation.
Préfixe de taille
Préfixe de mémoire E X [i,j] Adresse
Expression de base
comme indice,
indiquée entre crochets
Identificateur d'opérande
Exemple
VAL_MESURE_1 :=EW[COMPTEUR];
REPERE :=E[NºOCTET, NºBIT];
Dans les blocs de données, vous pouvez enregistrer et traiter pour votre application toutes
les données valables pour l'ensemble du programme ou du projet. Tout bloc de code a
accès en écriture ou en lecture aux données utilisateur globales.
Adressage
Il y a plusieurs façons d'adresser les données d'un bloc de données global :
• Adressage absolu ou simple,
• Adressage structuré ,
• Adressage indexé.
. Variable
Identificateur d'opérande
simple
Variable
Mnémonique d'un DB .
simple
De même que pour les zones de mémoire de la CPU, l'adressage absolu d'un bloc de
données est réalisé par affectation d'une valeur à une variable de même type. Après la
désignation du DB, vous indiquez le mot-clé "D" avec le préfixe de taille (par exemple X pour
bit) et l'adresse d'octet (par exemple 13.1).
ETAT_5:= DB11.DX13.1;
Adresse
Préfixe de taille
Désignation du DB
Variable de
même type
Syntaxe
Vous spécifiez l'adressage en indiquant la désignation du DB, suivie du préfixe de taille et de
l'adresse.
Identificateur d'opérande
DESIGNATION Préfixe
DU DB . D Adresse
de taille
Préfixe de taille
Le préfixe de taille indique la longueur de la zone de mémoire qui doit être adressée dans le
bloc de données. Vous pouvez par exemple lire un octet ou un mot du DB. Si vous ne
souhaitez spécifier qu'un bit, l'indication du préfixe de taille est facultative.
Préfixe de taille
X Bit
B Octet
W Mot
D Double mot
Adresse
Pour préciser l'adresse, vous devez d'abord indiquer l'adresse d'octet absolue, puis séparée
par un point, l'adresse de bit de l'octet concerné (uniquement en cas d'adressage binaire).
Adresse
Numéro . Numéro
Exemple
Voici quelques exemples d'adressage absolu d'un bloc de données. Le bloc de données lui-
même est indiqué de manière absolue dans la première partie et de manière symbolique
dans la seconde :
OCTET_ETAT :=DB101.DB10;
ETAT_3 :=DB30.D1.1;
VAL_MESURE :=DB25.DW20;
OCTET_ETAT :=Donnees_etat.DB10;
ETAT_3 :="Nouvelles_donnees".D1.1;
VAL_MESURE :=Donnees_mesure.DW20.DW20;
Vous avez également la possibilité d'accéder aux blocs de données de manière indexée. Par
rapport à l'adressage absolu, l'avantage réside dans le fait que vous pouvez adresser des
opérandes dont l'adresse n'est connue qu'à l'exécution. Ainsi, vous pouvez par exemple
utiliser la variable de contrôle d'une boucle FOR comme adresse.
L'adressage indexé d'un bloc de données s'effectue de manière similaire à l'adressage
absolu. Seule l'indication de l'adresse est différente.
A la place de l'adresse, vous spécifiez un indice qui peut être une constante, une variable ou
une expression arithmétique.
L'adressage indexé est composé de la désignation du DB, de l'identificateur d'opérande
(mot-clé "D" et préfixe de taille) ainsi que d'une expression de base pour l'indexation.
Syntaxe
Identificateur d'opérande
Exemple
ETAT_1:= DB11.DW[COMPTEUR];
ETAT_2:= DB12.DX[NºMOT, NºBIT];
ETAT_1:= Base_de_donnees1.DW[COMPTEUR];
ETAT_2:= Base_de_donnees2.DX[NºMOT, NºBIT];
ETAT_1:= WORD_TO_BLOCK_DB(INDICE).DW[COMPTEUR];
Syntaxe
IDENTIFICATION Variable
.
DU DB simple
Ce faisant, la variable simple représente une variable à laquelle vous avez affecté un type
de données simple ou complexe lors de la déclaration du DB.
L'utilisation, pour introduire l'adressage d'un bloc de données, d'un paramètre de type
BLOCK_DB ou du résultat de la fonction de conversion WORD_TO_BLOCk_DB ne permet
pas l'adressage structuré, mais seulement l'adressage absolu ou indexé.
Exemple
Dans la section de déclaration du FB10 :
VAR
Résultat : STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT
END_VAR
11.1 Opérations
Une expression se compose d'opérations et d'opérandes. La plupart des opérations de
S7-SCL combinent deux opérandes et sont par suite qualifiées de binaires. Les autres
opérations n'utilisant qu'un opérande sont des opérations unaires.
Une opération binaire s'écrit entre les opérandes (par exemple A + B). Une opération
unaire précède immédiatement son opérande (par exemple -B).
C'est la priorité des opérations, indiquée dans le tableau suivant, qui détermine l'ordre de
calcul. Le chiffre "1" correspond à la priorité la plus élevée.
11.2 Opérandes
Les opérandes sont des objets avec lesquels vous pouvez former une expression. Voici les
éléments autorisés pour former des opérandes :
Opérande
Constante
Variable étendue
(Expression)
NOT Opérande
Constantes
Vous pouvez utiliser des constantes sous forme de valeur numérique, de mnémonique ou de
chaîne de caractères.
Constante
Valeur numérique
Chaîne de caractères
Mnémonique
Variable étendue
Variable étendue est un terme générique désignant une série de variables qui sont traitées
plus en détail au chapitre "Affectations de valeur".
Variable étendue
Variable simple
Variable absolue
pour les zones de mémoire
de la CPU
Variable dans un DB
Appel de FC
Nota
Dans un appel de fonction, le résultat du calcul, c'est-à-dire la valeur de retour, remplace le
nom de la fonction dans l'expression. Les fonctions VOID qui ne possèdent pas de valeur de
retour ne sont donc pas autorisées comme opérandes dans des expressions.
Syntaxe
Expression
Opérande
Opérations de
comparaison
Opérations
arithmétiques de base
Puissance
Expression ** Exposants
+ Expression
Plus unaire
- Moins unaire
NOT Négation
( Expression )
Ordre de calcul
L'ordre de calcul de l'expression est déterminé par :
• Lapriorité des opérations présentes ;
• Leur position de gauche à droite ;
• Les parenthèses utilisées dans le cas d'opérations de même priorité.
Règles
Les règles suivantes s'appliquent à la résolution des expressions :
• Un opérande placé entre deux opérations de priorités différentes est toujours lié à celle
qui a la plus haute priorité.
• Les opérations sont traitées dans l'ordre hiérarchique.
• Les opérations de même priorité sont traitées de gauche à droite.
• Faire précéder un identificateur d'un signe moins équivaut à le multiplier par -1.
• Les opérations arithmétiques ne peuvent pas venir immédiatement à la suite l'une de
l'autre. Ainsi l'expression a * - b n'est pas autorisée, par contre a*(-b) l'est.
• L'utilisation de parenthèses peut annuler la priorité entre des opérations, car les
parenthèses possèdent la priorité la plus élevée.
• Les expressions entre parenthèses sont considérées comme des opérandes uniques et
sont toujours traitées en premier.
• Le nombre de parenthèses d'ouverture doit être équivalent à celui des parenthèses de
fermeture.
• Les opérations arithmétiques ne peuvent s'appliquer à des caractères ou à des données
logiques. Ainsi des expressions telles 'A' + 'B' et (n<=0) + (m>0) sont incorrectes.
Exemples d'expressions
EB10 // opérande
A1 AND (A2) // expression logique
(A3) < (A4) // expression de comparaison
3+3*4/2 // expression arithmétique
+
Expression Multiplication
simple simple
-
*
Multiplication
simple
/
DIV
MOD
Constante
-
Expression
( )
simple
Exemple :
EXPRESSION_SIMPLE= A * B + D / C - 3 * VALEUR1;
Nota
Le type de données du résultat d'une division (/) est déterminé par le type de données de
l'opérande de poids le plus élevé.
Si p. ex. deux opérandes du type de données INT sont divisés, le résultat est également du
type de données INT (c'est-à-dire 10/3=3 correspond à 10.0/3=3.33).
Règles
L'ordre de traitement des opérations dans une expression arithmétique est fonction de leur
priorité.
• Pour une meilleure lisibilité, il est recommandé d'indiquer les nombres négatifs entre
parenthèses, même lorsque cela n'est pas indispensable.
• Pour les divisions avec deux opérandes entiers de type INT, les opérations "DIV" et "/"
fournissent le même résultat (voir l'exemple ci-après).
• Pour les opérations de division "/", "MOD" et "DIV", le second opérande doit être différent
de zéro.
• Lorsque l'un des opérandes est du type INT (entier) et le second du type REAL (nombre
à virgule flottante), le résultat est toujours du type REAL.
• Pour la soustraction de donnés du type DATE_AND_TIME et TIME, l'opérande avec le
type de données TIME doit toujours se trouver à droite de l'opérateur "-".
Exemples
// Le résultat (11) de l'expression arithmétique
// est affecté à la variable "VALEUR"
VALEUR1 := 3 + 3 * 4 / 2 - (7+3) / (-5) ;
// La VALEUR de l'expression suivante est 1
VALEUR2 := 9 MOD 2 ;
Opérations logiques
Le résultat de l'expression est soit TRUE ou FALSE lorsque vous combinez des opérandes
booléens, soit un profil binaire après combinaison binaire des deux opérandes.
Le tableau ci-après indique les expressions logiques disponibles ainsi que le type de
données du résultat et des opérandes. Nous employons l'abréviation suivante :
Résultat
Le résultat d'une expression logique sera :
• soit 1 (true) ou 0 (false) dans le cas d'une combinaison d'opérandes booléens,
• soit un profil binaire après la combinaison binaire des deux opérandes.
Exemples
Syntaxe
Opération de comparaison
Règles
Le tableau suivant indique les types de données comparables ainsi que les règles à
appliquer pour la comparaison :
DATE 9 9 9 9 9 9
TIME 9 9 9 9 9 9
TOD 9 9 9 9 9 9
Combinaison de comparaisons
Vous pouvez combiner des expressions de comparaison selon la logique booléenne. Vous
pouvez ainsi former des interrogations telles que "si a < b et b < c alors ...".
Les différentes opérations sont exécutées dans l'ordre de priorité. Vous pouvez modifier la
priorité à l'aide de parenthèses.
Exemples
// Comparaison 3 INFERIEUR OU EGAL A 4. Le résultat
// est "TRUE"
A := 3 <= 4
// Comparaison 7 DIFFERENT DE 7. Le résultat
// est "FALSE"
7 <> 7
// Résolution d'une expression de comparaison dans
// un aiguillage IF
IF COMPTEUR < 5 THEN ....
// Combinaison de deux expressions de comparaison
Valeur_A > 20 AND Valeur_B < 20
// Combinaison de deux expressions de comparaison avec
// des parenthèses
A<>(B AND C)
Affectation de valeur
Variable absolue
Le type d'une expression d'affectation est celui de l'opérande de gauche. La variable simple
peut être d'un type de données simple ou complexe.
Toute expression et toute variable de type de données simple peuvent être affectées à une
autre variable de même type.
Identificateur := expression ;
Identificateur := variable ;
Exemple
FUNCTION_BLOCK FB12
VAR
COMMUTATEUR_1 : INT ;
COMMUTATEUR_2 : INT ;
CONSIGNE_1 : REAL ;
CONSIGNE_2 : REAL ;
INTERROG_1 : BOOL ;
DUREE_1 : S5TIME ;
DUREE_2 : TIME ;
DATE_1 : DATE ;
HEURE_DU_JOUR_1 : TIME_OF_DAY ;
END_VAR
BEGIN
Les variables de type STRUCT et UDT sont des variables complexes qui représentent soit
une structure complète, soit un composant de cette structure.
Voici des indications correctes de variables complexes :
nomstruct_1 := nomstruct_2;
nomstruct_1.element1 := valeur ;
nomstruct_1.element1 := 20.0 ;
nomstruct_1.element1 := nomstruct_2.element1 ;
nomstruct_1.nomtableau1 := nomstruct_2.nomtableau2 ;
nomstruct_1.nomtableau[10] := 100 ;
Exemple
FUNCTION_BLOCK FB3
VAR
VAR_AUX : REAL ;
VALEUR_MESURE : STRUCT //Structure cible
TENSION : REAL ;
RESISTANCE : REAL ;
TABLEAU_SIMPLE : ARRAY
[1..2, 1..2] OF INT ;
END_STRUCT ;
VALEUR_EFFECTIVE : STRUCT //Structure source
TENSION : REAL ;
RESISTANCE : REAL ;
TABLEAU_SIMPLE : ARRAY
[1..2, 1..2] OF INT ;
END_STRUCT ;
END_VAR
BEGIN
//Affectation d'une structure complète à une autre structure
//complète
VALEUR_MESURE := VALEUR_EFFECTIVE ;
//Affectation d'un composant de structure à un autre composant de
//structure
VALEUR_MESURE.TENSION := VALEUR_EFFECTIVE.TENSION ;
//Affectation d'un composant de structure à une variable de type
//identique
VAR_AUX := VALEUR_EFFECTIVE.RESISTANCE ;
//Affectation d'une constante à un composant de structure
VALEUR_MESURE.RESISTANCE := 4.5;
//Affectation d'une constante à un élément de tableau simple
VALEUR_MESURE.TABLEAU_SIMPLE[1,2] := 4;
END_FUNCTION_BLOCK
nomtableau_1:=nomtableau_2;
Nota
Vous ne devez pas affecter de constantes à des tableaux complets.
nomtableau_1[ i ] := nomtableau_2[ j ] ;
nomtableau_1[ i ] := expression ;
identificateur_1 := nomtableau_1[ i ] ;
Exemple
FUNCTION_BLOCK FB3
VAR
CONSIGNES : ARRAY [0..127] OF INT ;
VALEURS_EFFECTIVES : ARRAY [0..127] OF INT ;
//Déclaration d'une matrice (=tableau bidimensionnel)
//comportant 3 lignes et 4 colonnes
REGULATEUR : ARRAY [1..3, 1..4] OF INT ;
//Déclaration d'un vecteur (=tableau unidimensionnel)
//à 4 composants
REGULATEUR_1 : ARRAY [1..4] OF INT ;
END_VAR
BEGIN
//Affectation d'un tableau complet à un autre tableau
CONSIGNES := VALEURS_EFFECTIVES ;
//Affectation d'un vecteur à la deuxième ligne
//du tableau REGULATEUR
REGULATEUR[2] := REGULATEUR_1 ;
//Affectation d'un composant de tableau à un composant
//du tableau REGULATEUR
REGULATEUR[1,4] := REGULATEUR_1 [4] ;
END_FUNCTION_BLOCK
Une variable de type STRING contient une chaîne de 254 caractères au maximum. Vous
pouvez lui affecter une autre variable de même type. Voici des affectations correctes :
variable_string_1 := constante_chaine;
variable_string_1 := variable_string_2 ;
Exemple
FUNCTION_BLOCK FB3
VAR
AFFICHAGE_1 : STRING[50] ;
STRUCTURE1 : STRUCT
AFFICHAGE_2 : STRING[100] ;
AFFICHAGE_3 : STRING[50] ;
END_STRUCT ;
END_VAR
BEGIN
// Affectation d'une constante à une variable de type STRING
AFFICHAGE_1 := 'Erreur dans le module 1' ;
// Affectation d'un composant de structure à une variable
// de type STRING.
AFFICHAGE_1 := STRUCTURE1.AFFICHAGE_3 ;
// Affectation d'une variable STRING à une autre variable
// de type STRING
If AFFICHAGE_1 <> STRUCTURE1.AFFICHAGE_3 THEN
AFFICHAGE_1 := STRUCTURE1.AFFICHAGE_3 ;
END_IF;
END_FUNCTION_BLOCK
Le type de données DATE_AND_TIME définit une zone de 64 bits (8 octets) pour indiquer la
date et l'heure. A toute variable de type DATE_AND_TIME, vous pouvez affecter une autre
variable de même type ou une constante. Voici des affectations correctes :
variable_dt_1 := constante_date_heure;
variable_dt_1 := variable_dt_2 ;
Exemple
FUNCTION_BLOCK FB3
VAR
DUREE_1 : DATE_AND_TIME ;
STRUCTURE1 : STRUCT
DUREE_2 : DATE_AND_TIME ;
DUREE_3 : DATE_AND_TIME ;
END_STRUCT ;
END_VAR
BEGIN
// Affectation d'une constante à une variable de type DATE_AND_TIME
DUREE_1 := DATE_AND_TIME#1995-01-01-12:12:12.2 ;
STRUCTURE1.DUREE_3 := DT#1995-02-02-11:11:11 ;
// Affectation d'un composant de structure à une variable
// de type DATE_AND_TIME
DUREE_1 := STRUCTURE1.DUREE_2 ;
// Affectation d'une variable DATE_AND_TIME à une
// autre variable DATE_AND_TIME
If DUREE_1 < STRUCTURE1.DUREE_3 THEN
DUREE_1 := STRUCTURE1.DUREE_3 ;
END_IF ;
END_FUNCTION_BLOCK
12.1.6 Affecter une valeur à une variable absolue pour zones de mémoire
Une variable absolue désigne les zones de mémoire d'une CPU valables globalement. Trois
possibilités s'offrent à vous pour adresser ces zones de mémoire :
• Adressage absolu
• Adressage indexé
• Adressage symbolique
Variable absolue
Identificateur d'opérande
Préfixe Préfixe Adresse
de mémoire de taille
Exemple
FUNCTION_BLOCK FB3
VAR
MOT_ETAT1 : WORD ;
MOT_ETAT2 : BOOL ;
MOT_ETAT3 : BYTE ;
MOT_ETAT4 : BOOL ;
ADRESSE : INT ;
END_VAR
BEGIN
ADRESSE := 10 ;
// Affectation d'un mot d'entrée à une variable (adressage simple)
MOT_ETAT1 := EW4 ;
// Affectation d'une variable à un bit de sortie (adressage simple)
a1.1 := MOT_ETAT2 ;
// Affectation d'un octet d'entrée à une variable (adressage indexé)
MOT_ETAT3 := EB[ADRESSE] ;
// Affectation d'un bit d'entrée à une variable (adressage indexé)
FOR ADRESSE := 0 TO 7 BY 1 DO
MOT_ETAT4 := e[1, ADRESSE] ;
END_FOR ;
END_FUNCTION_BLOCK
L'accès aux données dans des blocs de données s'effectue également en affectant une
valeur à une variable de même type et inversement. Vous pouvez affecter à toute variable
globale une variable ou une expression de type identique. Vous pouvez adresser ces
données de diverses manières :
• Adressage structuré
• Adressage absolu
• Adressage indexé
Syntaxe de la variable de DB
Variable de DB
Identificateur d'opérande
DESIGNATION Préfixe
DU DB . D Adresse
de taille
Exemple
FUNCTION_BLOCK FB3
VAR
REGULATEUR_1 : ARRAY [1..4] OF INT ;
MOT_ETAT1 : WORD ;
MOT_ETAT2 : ARRAY [0..10] OF WORD ;
MOT_ETAT3 : INT ;
MOT_ETAT4 : WORD ;
ADRESSE : INT ;
END_VAR
VAR_INPUT
MOT_ADRESSE : WORD ;
END_VAR
BEGIN
// Affectation du mot 1 du DB11
// à une variable (adressage simple)
MOT_ETAT1 := DB11.DW1 ;
// La valeur de la variable "NOMBRE" est affectée à
// le composant de la 1ère ligne et de la 1ère
// colonne de la matrice (adressage structuré) :
REGULATEUR_1[1] := DB11.CHIFFRE;
// Affectation du composant "NOMBRE2"
// de la structure "NOMBRE1" à la variable MOT_ETAT3
MOT_ETAT3 := DB11.NOMBRE1.NOMBRE2 ;
// Affectation d'un mot du DB11 avec adresse indexée
// à une variable (adressage indexé)
FOR
ADRESSE := 1 TO 10 BY 1 DO
MOT_ETAT2[ADRESSE] := DB11.DW[ADRESSE] ;
// Le paramètre d'entrée MOT_ADRESSE est utilisé ici
// comme numéro du DB et l'indice ADRESSE
// pour indiquer l'adresse du mot dans le DB
MOT_ETAT4 := WORD_TO_BLOCK_DB(MOT_ADRESSE).DW[ADRESSE] ;
END_FOR ;
END_FUNCTION_BLOCK
Instructions de sélection
Une instruction de sélection vous permet d'aiguiller le déroulement du programme vers
différentes séquences d'instructions en fonction de conditions.
Traitement de boucles
Vous pouvez programmer l'exécution de boucles en utilisant des instructions d'itération. Une
instruction d'itération indique quelles parties d'un programme doivent être répétées en
fonction de certaines conditions.
12.2.2 Conditions
Une condition peut être une expression de comparaison, une expression logique ou une
expression arithmétique. Elle est du type de données BOOL et peut prendre les valeurs
TRUE (VRAI) ou FALSE (FAUX). Une expression arithmétique est TRUE si elle prend une
valeur différente de zéro et FALSE si le résultat est égal à zéro. Le tableau suivant présente
des exemples de conditions :
Type Exemple
Expression de comparaison TEMPO > 50
COMPTEUR <= 100
CAR1 < 'S'
Expression de comparaison et expression logique (ALPHA <> 12) AND NOT BETA
Opérande booléen E1.1
Expression arithmétique ALPHA = (5 + BETA)
12.2.3 Instruction IF
Il s'agit d'une instruction conditionnelle. Elle propose une ou plusieurs options et sélectionne
l'une (ou aucune) des sections d'instructions pour l'exécuter.
L'exécution de l'instruction conditionnelle provoque l'évaluation des expressions logiques
spécifiées. Si la valeur d'une expression est vraie, la condition est considérée comme
remplie ; elle ne l'est pas si la valeur est fausse.
Syntaxe
Instruction IF
Section
IF Expression THEN des instructions
Condition
Section
ELSIF Expression THEN des instructions
Condition
Section
ELSE END_IF
des instructions
Nota
L'avantage d'utiliser une ou plusieurs branches ELSIF plutôt qu'une séquence d'instructions
IF réside dans le fait qu'après la première expression logique vraie, les suivantes ne sont
plus évaluées ce qui permet de diminuer la durée d'exécution d'un programme.
Exemple
IF E1.1 THEN
N := 0 ;
SOMME := 0 ;
OK := FALSE ; // Attribuer la valeur FALSE au drapeau OK
ELSIF START = TRUE THEN
N := N + 1 ;
SOMME := SOMME + N ;
ELSE
OK := FALSE ;
END_IF ;
Syntaxe
Instruction CASE
Expression de sélection (entier)
CASE Expression OF
Valeur
Section
Liste de valeurs :
des instructions
Section
ELSE : des instructions END_CASE
Liste de valeurs
Elle contient les valeurs autorisées pour l'expression de sélection.
Liste de valeurs
Nombre entier
Valeur
Valeur .. Valeur
Règles en vigueur :
• Toute liste de valeurs commence par une constante, une liste de constantes ou une
plage de constantes.
• Les valeurs contenues dans la liste doivent être du type de données entier (INTEGER).
• Chaque valeur doit n'y figurer qu'une seule fois.
Valeur
La syntaxe de la valeur est la suivante :
Constante numérique
IDENTIFICATEUR
Nom de la constante
Exemple
CASE TW OF
1 : AFFICHAGE:= TEMP_FOUR;
2 : AFFICHAGE:= VITESSE_MOTEUR;
3 : AFFICHAGE:= TARE_BRUTE;
AW4:= 16#0003;
4..10: AFFICHAGE:= INT_TO_DINT (TW);
AW4:= 16#0004;
11,13,19: AFFICHAGE:= 99;
AW4:= 16#0005;
ELSE:
AFFICHAGE:= 0;
TW_ERREUR:= 1;
END_CASE ;
Une instruction FOR sert à répéter une suite d'instructions aussi longtemps qu'une variable
de contrôle se trouve dans la plage de valeurs spécifiée. La variable de contrôle doit être
l'identificateur d'une variable locale de type INT ou DINT. En définissant une boucle,
l'instruction FOR fixe aussi une valeur initiale et une valeur finale. Toutes deux doivent être
du même type que la variable de contrôle.
Syntaxe
Instruction FOR
Affectation Expression
FOR initiale TO de base
Expression Section
BY de base DO des instructions
pour l'incrément
END_FOR
Règles
Règles dont il faut tenir compte pour formuler une instruction FOR :
• La variable de contrôle doit être exclusivement du type de données INT ou DINT.
• L'indication de BY [incrément] est facultative. En son absence, la valeur utilisée est +1.
Affectation initiale
Pour la valeur initiale de la variable de contrôle, la syntaxe doit être la suivante. La variable
simple se trouvant à gauche de l'affectation doit être du type INT ou DINT.
Instruction initiale
Variable Expression
:= de base
étendue
FOR I := 1 TO 20
FOR I := 1 TO (INITIALE + J)
Opérande
Expression
( )
de base
Exemple
FUNCTION_BLOCK FOR_BSP
VAR
INDICE: INT ;
MOT_CLE: ARRAY [1..50] OF STRING;
END_VAR
BEGIN
FOR INDICE := 1 TO 50 BY 2 DO
IF MOT_CLE [INDICE] = 'CLE' THEN
EXIT;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
L'instruction WHILE permet de reprendre l'exécution d'une suite d'instructions tant qu'une
condition d'exécution est remplie. Cette condition est formée conformément aux règles d'une
expression logique.
Syntaxe
Instruction WHILE
Section
WHILE Expression DO END_WHILE
des instructions
Condition d'exécution
Exemple
FUNCTION_BLOCK WHILE_BSP
VAR
INDICE: INT ;
MOT_CLE: ARRAY [1..50] OF STRING ;
END_VAR
BEGIN
INDICE := 1 ;
WHILE INDICE <= 50 AND MOT_CLE[INDICE] <> 'CLE' DO
INDICE := INDICE + 2;
END_WHILE ;
END_FUNCTION_BLOCK
Syntaxe
Instruction REPEAT
Section
REPEAT UNTIL Expression END_REPEAT
des instructions
Condition d'abandon
La condition est vérifiée à chaque parcours après l'exécution du tronc. Cela signifie que le
tronc est exécuté au moins une fois, même si la condition d'abandon est remplie dès le
début.
Exemple
FUNCTION_BLOCK REPEAT_BSP
VAR
INDICE: INT ;
MOT_CLE: ARRAY [1..50] OF STRING ;
END_VAR
BEGIN
INDICE := 0 ;
REPEAT
INDICE := INDICE + 2 ;
UNTIL INDICE > 50 OR MOT_CLE[INDICE] = 'CLE'
END_REPEAT ;
END_FUNCTION_BLOCK
Syntaxe
Instruction CONTINUE
CONTINUE
Exemple
FUNCTION_BLOCK CONTINUE_EX
VAR
INDICE :INT ;
TABLEAU :ARRAY[1..100] OF INT ;
END_VAR
BEGIN
INDICE := 0 ;
WHILE INDICE <= 100 DO
INDICE := INDICE + 1 ;
// Si TABLEAU[INDICE] est égal à INDICE,
// alors TABLEAU [INDICE] n'est pas modifié :
IF TABLEAU[INDICE] = INDICE THEN
CONTINUE ;
END_IF ;
TABLEAU[INDICE] := 0 ;
// Autres instructions
END_WHILE ;
END_FUNCTION_BLOCK
L'instruction EXIT sert à quitter une boucle (FOR, WHILE ou REPEAT) à un endroit
quelconque, que la condition d'abandon soit remplie ou pas.
Syntaxe
Instruction EXIT
EXIT
Exemple
FUNCTION_BLOCK EXIT_EX
VAR
INDICE_1 : INT ;
INDICE_2 : INT ;
INDICE_CHERCHE : INT ;
MOT_CLE : ARRAY[1..51] OF STRING ;
END_VAR
BEGIN
INDICE_2 := 0 ;
FOR INDICE_1 := 1 TO 51 BY 2 DO
// Quitter la boucle FOR si
// MOT_CLE[INDICE_1] est égal à 'CLE'
IF MOT_CLE[INDICE_1] = 'CLE' THEN
INDICE_2 := INDICE_1 ;
EXIT ;
END_IF ;
END_FOR ;
// L'affectation de valeur suivante est exécutée
// après l'exécution de l'instruction EXIT ou
// après la fin normale de la boucle FOR :
INDICE_CHERCHE := INDICE_2 ;
END_FUNCTION_BLOCK
Syntaxe
Branchement de
programme
GOTO IDENTIFICATEUR
Repère de saut
Exemple
FUNCTION_BLOCK GOTO_EX
VAR
INDICE : INT ;
A : INT ;
B : INT ;
C : INT ;
MOT_CLE : ARRAY[1..51] OF STRING ;
END_VAR
LABEL
REPERE1, REPERE2, REPERE3 ;
END_LABEL
BEGIN
IF A > B THEN
GOTO REPERE1 ;
ELSIF A > C THEN
GOTO REPERE2 ;
END_IF ;
// . . .
REPERE1: INDICE := 1 ;
GOTO REPERE3
REPERE2: INDICE := 2 ;
// . . .
REPERE3:
// . . .
L'instruction RETURN permet de quitter le bloc actif (OB, FB, FC) et de revenir au bloc
appelant ou au système d'exploitation, si c'est un OB qui est quitté.
Syntaxe
Instruction RETURN
RETURN
Nota
A la fin de la section d'exécution d'un bloc de code ou de la section de déclaration d'un bloc
de données, l'instruction RETURN serait redondante puisqu'elle est exécutée
automatiquement.
Appel de FC et FB
Afin d'assurer une meilleure lisibilité et une maintenance plus aisée des programmes
utilisateur, il est usuel de diviser l'ensemble des fonctions d'un programme en tâches
partielles, réalisées par des blocs fonctionnels (FB) et des fonctions (FC). Dans un bloc
S7-SCL, vous avez également la possibilité d'appeler d'autres FC ou FB, à savoir :
• les blocs fonctionnels et fonctions créés dans S7-SCL,
• les blocs fonctionnels et fonctions créés dans d'autres langages de programmation de
STEP 7 (CONT, LOG, LIST),
• des fonctions système (SFC) et blocs fonctionnels système (SFB), disponibles dans le
système d'exploitation de votre CPU.
L'indication des paramètres a la forme d'une affectation de valeur. Elle consiste en effet à
affecter des valeurs (paramètres effectifs) aux paramètres que vous avez définis dans la
section de déclaration du bloc appelé (paramètres formels).
Appel absolu :
FB10.DB20 (X1:=5,X2:=78,......);
Syntaxe
Appel d 'un FB
FB : bloc fonctionnel
SFB : bloc fonctionnel système
DESIGNATION
DU FB
Nom de l'instance globale
DESIGNATION DESIGNATION
. DU DB ( Paramètres du FB )
DU SFB
IDENTIFICATEUR
Appel absolu :
FB10.DB20 (X1:=5,X2:=78,......);
MOTEUR (X1:=5,X2:=78,......);
Paramètres du FB
Affectation
de l'entrée
Affectation de
l'entrée/sortie
Pour définir un paramètre, vous devez tenir compte des règles suivantes :
• L'ordre des affectations est quelconque.
• Les types de données paramètre formel et paramètre effectif doivent être identiques.
• Chaque affectation est séparée de la précédente par une virgule.
• Affecter des valeurs aux sorties n'est pas possible dans un appel de FB. La valeur d'un
paramètre de sortie que vous avez déclaré est enregistrée dans les données d'instance
où elle peut être adressée par tous les FB. Pour la lire, vous devez définir son adressage
à partir d'un FB.
• Tenez compte des particularités des paramètres de type de données ANY et de type de
données POINTER.
Exemple
Voici un exemple d'appel avec définition d'un paramètre d'entrée et d'un paramètre
d'entrée/sortie :
FB31.DB77(Par_E:=3, Par_ES:=LONGUEUR);
Désignation de bloc Vous déterminez un bloc qui doit être utilisé comme paramètre d'entrée. Le
type de bloc (FB, FC, DB) est fixé dans la déclaration du paramètre d'entrée.
Syntaxe
Expression
DESIGNATION DE
LA TEMPORISATION
IDENTIFICATEUR :=
DESIGNATION
Nom du paramètre DU COMPTEUR
d'entrée
Syntaxe
Affectation de l'entrée/sortie
Variable
IDENTIFICATEUR :=
étendue
Nom du paramètre
Paramètre effectif
d'entrée/sortie
(Paramètre formel)
Nota
• Pour les types de données ANY et POINTER, il faut tenir compte de règles spéciales
lors du paramétrage.
• Les paramètres effectifs suivants ne peuvent pas être affectés aux paramètres
d'entrée/sortie d'un type de données non simple :
- Paramètre d'entrée/sortie d'un FB
- Paramètre d'une FC
Exemple
RESULTAT := DB10.CONTROLE ;
Bloc fonctionnel
FUNCTION_BLOCK TEST
VAR_INPUT
VALEUR_FINALE: INT; // Paramètre d'entrée
END_VAR
VAR_IN_OUT
IQ1 : REAL; //Paramètre d'entrée/sortie
END_VAR
VAR_OUTPUT
CONTROLE: BOOL; //Paramètre de sortie
END_VAR
VAR
INDICE: INT;
END_VAR
BEGIN
CONTROLE :=FALSE;
FOR INDICE := 1 TO VALEUR_FINALE DO
IQ1 :=IQ1*2;
IF IQ1 > 10000 THEN
CONTROLE := TRUE;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
Appel
Vous pouvez appeler ce FB de l'une des façons suivantes. On suppose que VARIABLE1 a
été déclarée comme variable de type REAL dans le bloc appelant.
Résultat
Une fois le bloc exécuté, la valeur fournie pour le paramètre d'entrée/sortie IQ1 est
disponible dans la VARIABLE1.
Appel
FUNCTION_BLOCK CALL
VAR
// Déclaration d'instance locale
TEST_L : TEST ;
VARIABLE1 : REAL ;
RESULTAT : BOOL ;
END_VAR
BEGIN
. . .
Syntaxe
Appel de fonction
DESIGNATION
DE LA FC
DESIGNATION ( Paramètres )
DE LA SFC de la FC
FC : fonction
IDENTIFICATEUR
SFC : fonction système
Nom de la fonction standard Fonction standard réalisée dans le compilateur
ou mnémonique
Nota
L'appel dans S7-SCL d'une fonction dont la valeur de retour n'a pas été définie peut
entraîner une exécution erronée du programme utilisateur.
• Pour une fonction programmée dans S7-SCL, ce cas peut se produire quand la valeur
de retour a certes été définie, mais que l'instruction en question n'est pas parcourue.
• Pour une fonction programmée dans CONT/LOG/LIST, ce cas peut se produire quand la
fonction a été programmée sans définition de la valeur de retour ou quand l'instruction
en question n'est pas exécutée.
Nota
• Avec les fonctions dont la valeur de retour est du type ANY, il faut qu'un paramètre
d'entrée ou d'entrée/sortie au moins soit aussi du type ANY. Si vous avez défini
plusieurs paramètres ANY, vous devez leur affecter des paramètres effectifs de la
même classe (par exemple INT, DINT et REAL). La valeur de retour est alors
automatiquement du plus grand type de données utilisé dans cette classe.
• La longueur maximale du type de données STRING peut être réduite de 254 caractères
à un nombre de caractères quelconque.
12.3.3.3 Paramètres de FC
Contrairement aux blocs fonctionnels, les fonctions n'ont pas de mémoire où enregistrer les
valeurs des paramètres. Les données locales ne sont enregistrées que temporairement
durant l'exécution de la fonction. C'est la raison pour laquelle, lorsque vous appelez une
fonction, vous devez affecter un paramètre effectif à chaque paramètre formel d'entrée,
d'entrée/sortie et de sortie que vous avez déclaré dans la section de déclaration de la
fonction.
Syntaxe
Paramètres d'une FC
Expression
Affectation
de l'entrée
Affectation de
la sortie ou de
l'entrée/sortie
Règles
Pour définir un paramètre, vous devez tenir compte des règles suivantes :
• L'ordre des affectations est quelconque.
• Les types de données du paramètre formel et du paramètre effectif doivent être
identiques.
• Chaque affectation est séparée de la précédente par une virgule.
Exemple
Voici un exemple d'appel avec définition d'un paramètre d'entrée, d'un paramètre de sortie et
d'un paramètre d'entrée/sortie :
FC32 (Param_e1:=5,Param_es1:=LONGUEUR,
Param_s1:=total_horizontal)
Syntaxe
Affectation de l'entrée
Paramètre effectif
Expression
DESIGNATION DE
LA TEMPORISATION
IDENTIFICATEUR :=
DESIGNATION
Nom du paramètre DU COMPTEUR
d'entrée
DESIGNATION
DU BLOC
(Paramètre formel)
Nota
Pour les paramètres formels d'entrée qui ne sont pas d'un type de données simple, les
paramètres d'entrée/sortie de FB et les paramètres de FC ne sont pas autorisés comme
paramètres effectifs. Tenez compte aussi des particularités des types de données ANY et
POINTER.
Syntaxe
$IIHFWDWLRQGHOಫHQWUÚHVRUWLH
9DULDEOH
,'(17,),&$7(85 ÚWHQGXH
1RPGXSDUDPÙWUH ! 3DUDPÙWUHHIIHFWLI
GಫHQWUÚHVRUWLH
SDUDPÙWUHIRUPHO DSSHOGಫXQ)&
Variable
IDENTIFICATEUR :=
étendue
Nom du paramètre
de sortie ou Paramètre effectif
d'entrée/sortie
(Paramètre formel)
Nota
Les paramètres effectifs suivants ne sont pas autorisés pour les paramètres formels
d'entrée/sortie :
• Les paramètres d'entrée de FB/FC
• Les paramètres d'entrée/sortie de FB d'un type de données non simple
• Les paramètres de sortie et d'entrée/sortie de FC d'un type de données non simple
Tenez compte aussi des particularités des types de données ANY et POINTER.
La longueur maximale du type de données STRING peut être réduite de 254 caractères à un
nombre de caractères quelconque.
Fonction appelée
Soit la fonction ECART permettant de calculer l'écart entre deux points (X1,Y1) et (X2,Y2)
dans un plan à l'aide de leur coordonnées cartésiennes (il est supposé que le mnémonique
ECART a été déclaré pour la FC37 dans la table des mnémoniques) :
Bloc appelant
Nota
La valeur de retour d'une fonction n'est pas définie si la fonction n'a pas été appelée (EN :
FALSE).
Exemple
FUNCTION_BLOCK FB57
VAR
MON_ACTIVE: BOOL ;
Résultat : REAL;
END_VAR
// . . .
BEGIN
// . . .
MON_ACTIVE:= FALSE ;
END_FUNCTION_BLOCK
Exemple
// Appel d'un bloc fonctionnel :
FB30.DB30 ([définition des paramètres]);
13.1 Compteurs
STEP 7 vous propose diverses fonctions standard de comptage que vous pouvez utiliser
dans votre programme S7-SCL sans devoir les déclarer au préalable. Il vous suffit de leur
affecter les paramètres requis. Voici les fonctions de comptage disponibles :
Les fonctions de comptage sont appelées comme des fonctions. La désignation de fonction
peut être employée partout à la place d'un opérande dans une expression, à condition que la
valeur de la fonction soit d'un type compatible avec celui de l'opérande remplacé.
La valeur de la fonction (valeur de retour), fournie à la position appelante, est la valeur de
comptage actuelle (format DCB) dans le type de données WORD.
Exemples
//Exemple d'appel absolu :
S_CUD (C_NO:=Z12,
CD:=E0.0,
CU:=E0.1,
S:=E0.2 & E0.3,
PV:=120,
R:=FALSE,
CV:=binVal,
Q:=actFlag);
Nota
Les noms des fonctions et des paramètres sont les mêmes dans les jeux d'abréviations
allemand et anglais. Seule la désignation du compteur dépend du jeu d'abréviations utilisé
(allemand : Z, anglais : C).
Règles
Les valeurs des paramètres (par ex. CD:=E0.0) étant enregistrées globalement, leur
indication est facultative dans certains cas. Tenez compte des règles générales suivantes
pour la définition des paramètres.
• A l'appel, vous devez affecter une valeur au paramètre C_NO désignant le compteur. Au
lieu du numéro absolu du compteur (par ex. Z12), vous pouvez aussi indiquer une
variable ou une constante du type de données INT ou un paramètre d'entrée du type de
données COUNTER.
• Vous devez affecter une valeur soit au paramètre CU (compteur incrémental), soit au
paramètre CD (compteur décrémental).
• L'indication du couple de paramètres PV (valeur d'initialisation) et S (initialiser) est
facultative.
• La valeur de résultat en format DCB est toujours la valeur de la fonction.
Exemple
FUNCTION_BLOCK FB1
VAR
CurrVal, binVal: word;
actFlag: bool;
END_VAR
BEGIN
CurrVal :=S_CD (C_NO:= Z10, CD:=TRUE, S:=TRUE, PV:=100, R:=FALSE,
CV:=binVal,Q:=actFlag);
CurrVal :=S_CU (C_NO:= Z11, CU:=M0.0, S:=M0.1, PV:=16#110,
R:=M0.2,
CV:=binVal,Q:=actFlag);
CurrVal :=S_CUD(C_NO:= Z12, CD:=E0.0, CU:=E0.1,
S:=E0.2 &E0.3, PV:=120,
R:=FALSE, CV:=binVal,Q:=actFlag);
CurrVal :=S_CD (C_NO:= Z10, CD:=FALSE, S:=FALSE,
PV:=100, R:=TRUE,
CV:=binVal,Q:=actFlag);
END_FUNCTION_BLOCK
Pour saisir la valeur d'initialisation ou exploiter le résultat de la fonction, vous avez besoin de
la représentation interne de la valeur de comptage. Il s'agit du type de données WORD, les
bits 0-11 indiquant la valeur de comptage dans le format DCB. Les bits 12-15 ne sont pas
utilisés.
Lorsque vous initialisez le compteur, la valeur que vous avez fixée s'y inscrit. La plage des
valeurs autorisées va de 0 à 999. Vous pouvez modifier la valeur de comptage dans cette
plage en utilisant les fonctions compteur incrémental/décrémental (S_CUD), compteur
incrémental (S_CU) ou compteur décrémental (S_CD).
Format
La figure suivante donne la représentation de la valeur de comptage en bits :
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
X I X I X I X 0 I 0 I 0 I 1 0 I 0 I 1 I 0 0 I 1 I 1 I 1
1 2 7
Ces bits sont insignifiants et ne sont donc pas pris en compte lorsque le
compteur est mis à « 1 ».
Saisie :
• Décimale sous forme de valeur entière : par exemple 295, si cette valeur correspond à un
format DCB_ autorisé
• DCB (saisie sous forme de constante hexadécimale) : p. ex. 16#127
Exploitation :
• Comme résultat de la fonction (type WORD) : format DCB
• Comme paramètre de sortie CV (type WORD) : binaire
Opération Fonctionnement
Incrémenter La valeur du compteur est augmentée de 1 lorsque l'état logique de l'entrée
CU passe de "0" à "1" et si la valeur de comptage est inférieure à 999.
Initialiser le compteur Lorsque l'état logique de l'entrée S passe de "0" à "1", le compteur est
initialisé avec la valeur de l'entrée PV. Un tel changement d'état logique est
toujours requis pour initialiser un compteur.
Mettre le compteur à 0 Le compteur est mis à 0 lorsque l'entrée R = 1. A la mise à 0 du compteur,
la valeur de comptage prend la valeur 0.
Interroger le compteur L'interrogation de l'état logique de la sortie Q fournit la valeur "1" si la valeur
de comptage est supérieure à 0. Elle fournit la valeur "0" si la valeur de
comptage est égale à 0.
Opération Fonctionnement
Décrémenter La valeur du compteur est diminuée de 1 lorsque l'état logique de l'entrée CD
passe de "0" à "1" (front montant) et si la valeur de comptage est supérieure à
0.
Initialiser le compteur Lorsque l'état logique de l'entrée S passe de "0" à "1", le compteur est
initialisé avec la valeur de l'entrée PV. Un tel changement d'état logique est
toujours requis pour initialiser un compteur.
Mettre le compteur à 0 Le compteur est mis à 0 lorsque l'entrée R = 1. A la mise à 0 du compteur, la
valeur de comptage prend la valeur 0.
Interroger le compteur L'interrogation de l'état logique de la sortie Q fournit la valeur "1" si la valeur
de comptage est supérieure à 0. Il fournit la valeur "0" si la valeur de
comptage est égale à 0.
Opération Fonctionnement
Incrémenter La valeur du compteur est augmentée de 1 lorsque l'état logique de
l'entrée CU passe de "0" à "1" et si la valeur de comptage est inférieure à
999.
Décrémenter La valeur du compteur est diminuée de 1 lorsque l'état logique de l'entrée
CD passe de "0" à "1" et si la valeur de comptage est supérieure à 0.
Initialiser le compteur Lorsque l'état logique de l'entrée S passe de "0" à "1", le compteur est
initialisé avec la valeur de l'entrée PV. Un tel changement d'état logique
est toujours requis pour initialiser un compteur.
Mettre le compteur à 0 Le compteur est mis à 0 lorsque l'entrée R = 1. A la mise à 0 du
compteur, la valeur de comptage prend la valeur 0.
Interroger le compteur L'interrogation de l'état logique de la sortie Q fournit la valeur 1 si la
valeur de comptage est supérieure à 0. Il fournit la valeur 0 si la valeur de
comptage est égale à 0.
Paramètre Description
C_NO MONCOMPTEUR
CD ENTREE E0.0
S INITIALISER
PV VALEUR INITIALE 16#0089
R METTRE_0
Q A0.7
CV VAL_BIN
Exemple
FUNCTION_BLOCK COMPTEUR
VAR_INPUT
MONCOMPTEUR : COUNTER ;
END_VAR
VAR_OUTPUT
RESULTAT : INT ;
END_VAR
VAR
INITIALISER : BOOL ;
METTRE_0 : BOOL ;
VAL_DCB : WORD ; // Etat du compteur codé DCB
VAL_BIN : WORD ; // Etat du compteur binaire
VAL_INITIALE : WORD ;
END_VAR
BEGIN
A0.0 := 1 ;
INITIALISER := E0.2 ;
METTRE_0 := E0.3 ;
VAL_INITIALE := 16#0089 ;
//Décrémenter
VAL_DCB := S_CD (C_NO := MONCOMPTEUR,
CD:= E0.0 ,
S := INITIALISER ,
PV:= VAL_INITIALE,
R := METTRE_0 ,
CV:= VAL_BIN ,
Q := A0.7) ;
//Traitement ultérieur en tant que paramètre de sortie
RESULTAT := WORD_TO_INT (VAL_BIN) ;
AW4 := VAL_DCB ;
END_FUNCTION_BLOCK
13.2 Temporisations
Les temporisations sont des éléments fonctionnels de votre programme vous permettant
d'exécuter et de contrôler des séquences déclenchées par horloge. STEP 7 propose
diverses fonctions standard de temporisation que vous pouvez utiliser avec S7-SCL.
Les fonctions de temporisation sont appelées comme des fonctions. La désignation d'une
fonction peut remplacer un opérande dans une expression, à condition que le résultat de la
fonction soit d'un type compatible avec celui de l'opérande remplacé.
La valeur de la fonction (valeur de retour), fournie à la position appelante, est une durée du
type de données S5TIME.
Exemples
//Exemple d'appel absolu :
CurrTime:=S_ODT (T_NO:=T10,
S:=TRUE,
TV:=T#1s,
R:=FALSE,
BI:=biVal,
Q:=actFlag);
Nota
Les noms des fonctions sont les mêmes dans les jeux d'abréviations allemand et anglais.
Règles
Les valeurs des paramètres étant enregistrées globalement, leur indication est facultative
dans certains cas. Tenez compte des règles générales suivantes pour la définition des
paramètres.
• A l'appel, il faut affecter une valeur au paramètre T_NO qui désigne la temporisation. Au
lieu du numéro absolu de la temporisation (ex. T10), vous pouvez aussi indiquer une
variable du type de données INT ou un paramètre d'entrée du type TIMER.
• L'indication du couple de paramètres TV (valeur par défaut) et S (démarrer) est
facultative.
• La valeur de résultat en format S5TIME est toujours la valeur de la fonction.
Exemple
FUNCTION_BLOCK FB2
VAR
Duree_cour : S5time;
Val_bin : word;
Drapeau_act : bool;
END_VAR
BEGIN
Duree_cour :=S_ODT (T_NO:= T10, S:=TRUE, TV:=T#1s, R:=FALSE,
BI:=Val_bin,Q:=Drapeau_act);
Duree_cour :=S_ODTS (T_NO:= T11, S:=M0.0, TV:= T#1s, R:=M0.1,
BI:=Val_bin,Q:=Drapeau_act);
Duree_cour :=S_OFFDT(T_NO:= T12, S:=E0.1 & Drapeau_act, TV:= T#1s,
R:=FALSE,
BI:=Val_bin,Q:=Drapeau_act);
Duree_cour :=S_PEXT (T_NO:= T13, S:=TRUE, TV:= T#1s, R:=E0.0,
BI:=Val_bin,Q:=Drapeau_act);
Duree_cour :=S_PULSE(T_NO:= T14, S:=TRUE, TV:= T#1s, R:=FALSE,
BI:=Val_bin,Q:=Drapeau_act);
END_FUNCTION_BLOCK
Pour saisir la valeur par défaut ou exploiter le résultat de la fonction en code DCB, vous
avez besoin de la représentation interne de la valeur de temps. Il s'agit du type de données
WORD, les bits 0 à 11 indiquant la valeur de temps en format DCB, les bits 12 et 13 la base
de temps. Les bits 14 et 15 ne sont pas utilisés.
La mise à jour de la temporisation diminue la valeur de temps d'une unité par intervalle,
celui-ci ayant été déterminé à partir de la base de temps. La valeur de temps est diminuée
jusqu'à ce qu'elle soit égale à 0. La plage de valeurs de la temporisation est comprise entre
0 et 9990 secondes.
Format
La figure suivante donne la représentation de la valeur de temps en bits :
X I X I 1 I 0 0 I 0 I 0 I 1 0 I 0 I 1 I 0 0 I 1 I 1 I 1
1 2 7
Saisie
Vous pouvez charger une valeur de temps prédéfinie dans les formats suivants :
• En représentation par niveaux
• En représentation décimale
Dans les deux cas, la base de temps est adaptée automatiquement et la valeur est arrondie
au nombre inférieur le plus proche avec cette base de temps.
Exploitation
Vous pouvez exploiter le résultat dans deux formats différents :
• Comme résultat de la fonction (type S5TIME) en format DCB
• Comme paramètre de sortie (valeur de temps sans base de temps du type WORD) en
binaire
Nota
Les valeurs de temps n'étant enregistrées qu'à l'intervalle de temps donné, celles qui ne
sont pas un multiple exact de cet intervalle sont tronquées. Celles dont la résolution est trop
grande pour la plage souhaitée sont arrondies, de sorte que la plage souhaitée est obtenue,
mais pas la résolution souhaitée.
La durée maximale pendant laquelle le signal de sortie reste à "1" correspond à la valeur de
temps programmée. Si l'entrée prend l'état logique "0" durant l'exécution de la temporisation,
celle-ci est mise à "0". Ceci représente un arrêt prématuré de l'exécution.
Fonctionnement
Le tableau suivant explique comment procède la fonction "Démarrer une temporisation sous
forme d'impulsion".
Opération Fonctionnement
Démarrer la L'opération "Démarrer une temporisation sous forme d'impulsion" démarre la
temporisation temporisation indiquée lorsque l'état logique de l'entrée de démarrage (S) passe
de "0" à "1". Un changement d'état logique est toujours requis pour valider la
temporisation.
Fixer la durée La temporisation continue à courir avec la valeur indiquée à l'entrée TV, jusqu'à
d'exécution ce que la durée programmée soit écoulée et tant que l'entrée S = 1.
Arrêter la Si l'entrée S passe de "1" à "0" avant que la valeur de temps ne soit écoulée, la
temporisation avant temporisation est arrêtée.
la fin
Remettre la La temporisation est remise à 0 lorsque l'entrée de remise à zéro (R) passe de
temporisation à 0 "0" à "1" pendant que la temporisation court. La valeur de temps et la base de
temps sont alors également remises à zéro. L'état logique "1" de l'entrée R n'a
aucun effet lorsque la temporisation ne court pas.
Interroger l'état Tant que la temporisation court, l'interrogation à "1" de la sortie Q fournit le
logique résultat "1". Si l'exécution a été arrêtée avant la fin, l'interrogation de la sortie Q
fournit le résultat "0".
Interroger la valeur Vous pouvez interroger la valeur de temps actuelle à la sortie BI à l'aide de la
de temps actuelle valeur de la fonction S_PULSE.
Le signal de sortie reste à "1" durant le temps (t) programmé, quel que soit le temps pendant
lequel le signal d'entrée reste à "1". Si l'impulsion de démarrage est à nouveau déclenchée,
la valeur de temps s'écoule de nouveau, de sorte que l'impulsion de sortie est prolongée
dans le temps (redémarrage).
Fonctionnement
Le tableau suivant explique comment procède la fonction "Démarrer une temporisation sous
forme d'impulsion prolongée".
Opération Fonctionnement
Démarrer la temporisation L'opération "Démarrer une temporisation sous forme d'impulsion prolongée"
démarre la temporisation indiquée lorsque l'état logique de l'entrée de démarrage
(S) passe de "0" à "1". Un changement d'état logique est toujours requis pour
valider la temporisation.
Redémarrer la durée Si l'état logique de l'entrée S passe à nouveau à "1" durant l'exécution, la
d'exécution temporisation est redémarrée avec la valeur de temps indiquée.
Fixer la durée d'exécution La temporisation continue à courir avec la valeur indiquée à l'entrée TV jusqu'à ce
que la durée programmée soit écoulée.
Remettre la temporisation La temporisation est remise à 0 lorsque l'entrée de remise à zéro (R) passe de "0"
à0 à "1" pendant que la temporisation court. La valeur de temps et la base de temps
sont alors également remises à zéro. L'état logique "1" de l'entrée R n'a aucun effet
lorsque la temporisation ne court pas.
Interroger l'état logique Tant que la temporisation court, l'interrogation à "1" de la sortie Q fournit le résultat
"1", quelle que soit la longueur du signal d'entrée.
Interroger la valeur de Vous pouvez interroger la valeur de temps actuelle à la sortie BI à l'aide de la
temps actuelle valeur de la fonction S_PEXT.
Le signal de sortie ne passe de "0" à "1" que lorsque la temporisation programmée s'est
écoulée et que le signal d'entrée est toujours "1". Ceci signifie que la sortie est activée avec
un retard. Les signaux d'entrée dont la durée est plus courte que celle de la temporisation
programmée n'apparaissent pas à la sortie.
A 4.0 S_ODT
Signal de sortie t
(temporisation sous forme
de retard à la montée)
Fonctionnement
Le tableau suivant explique comment procède la fonction "Démarrer une temporisation sous
forme de retard à la montée".
Opération Fonctionnement
Démarrer la L'opération "Démarrer une temporisation sous forme de retard à la montée" démarre
temporisation la temporisation indiquée lorsque l'état logique de l'entrée de démarrage (S) passe de
"0" à "1". Un changement d'état logique est toujours requis pour valider la
temporisation.
Arrêter la temporisation Si l'état logique de l'entrée S passe de "1" à "0" pendant que la temporisation court,
celle-ci est arrêtée.
Fixer la durée La temporisation continue de courir avec la valeur indiquée à l'entrée TV tant que
d'exécution l'état logique de l'entrée S = 1.
Remettre la La temporisation est remise à 0 lorsque l'entrée de remise à zéro (R) passe de "0" à
temporisation à "0" "1" pendant que la temporisation court. La valeur de temps et la base de temps sont
alors également remises à zéro. La temporisation est aussi remise à zéro lorsque R =
1 pendant qu'elle ne court pas.
Interroger l'état logique Une interrogation à "1" de la sortie Q fournit le résultat "1" lorsque la temporisation
s'est écoulée correctement et que l'entrée S est toujours à "1".
Si la temporisation a été arrêtée, l'interrogation à "1" donne toujours "0".
Une interrogation à "1" de la sortie Q fournit également le résultat "0" lorsque la
temporisation ne court pas et que l'état logique de l'entrée S est toujours "1".
Interroger la valeur de Vous pouvez interroger la valeur de temps actuelle à la sortie BI à l'aide de la valeur
temps actuelle de la fonction S_ODT.
Le signal de sortie ne passe de "0" à "1" que lorsque la temporisation programmée s'est
écoulée, quel que soit le temps pendant lequel le signal d'entrée reste à "1".
A 4.0 S_ODTS
Signal de sortie t
(temporisation sous forme de
retard à la montée mémorisé)
Fonctionnement
Le tableau suivant explique comment procède la fonction "Démarrer une temporisation sous
forme de retard à la montée mémorisé".
Opération Fonctionnement
Démarrer la temporisation L'opération "Démarrer une temporisation sous forme de retard à la montée
mémorisé" démarre la temporisation indiquée lorsque l'état logique de l'entrée de
démarrage (S) passe de "0" à "1". Un changement d'état logique est toujours requis
pour valider la temporisation.
Redémarrer la La temporisation est redémarrée avec la valeur indiquée lorsque l'entrée S passe
temporisation de "0" à "1" pendant que la temporisation court.
Fixer la durée d'exécution La temporisation continue de courir avec la valeur indiquée à l'entrée TV, même
lorsque l'état logique de l'entrée S passe à "0" avant que la temporisation ne soit
écoulée.
Remettre la temporisation La temporisation est remise à 0 lorsque l'entrée de remise à zéro (R) passe de "0"
à "0" à "1", quel que soit l'état logique de l'entrée S.
Interroger l'état logique Une interrogation à "1" de la sortie Q fournit le résultat "1" lorsque la temporisation
s'est écoulée, quel que soit l'état logique de l'entrée S.
Interroger la valeur de Vous pouvez interroger la valeur de temps actuelle à la sortie BI à l'aide de la
temps actuelle valeur de la fonction S_ODTS.
Lorsque l'état logique de l'entrée S passe de "0" à "1", la sortie Q prend l'état logique "1".
Lorsque l'état logique de l'entrée de démarrage passe de "1" à "0", la temporisation est
démarrée. Ce n'est qu'une fois la durée écoulée que la sortie prend l'état logique "0". La
sortie est donc désactivée avec un retard.
A 4.0 S_OFFDT
Signal de sortie t
(temporisation sous forme
de retard à la retombée)
Fonctionnement
Le tableau suivant explique comment procède la fonction "Démarrer une temporisation sous
forme de retard à la retombée".
Opération Fonctionnement
Démarrer la temporisation L'opération "Démarrer une temporisation sous forme de retard à la retombée"
démarre la temporisation indiquée lorsque l'état logique de l'entrée de démarrage
(S) passe de "1" à "0". Un changement d'état logique est toujours requis pour
valider la temporisation.
Redémarrer la La temporisation est redémarrée lorsque l'état logique de l'entrée S passe à
temporisation nouveau de "1" à "0" (par exemple après la remise à 0).
Fixer la durée d'exécution La temporisation court avec la valeur indiquée à l'entrée TV.
Remettre la temporisation La temporisation est remise à 0 lorsque l'entrée de remise à zéro (R) passe de "0"
à0 à "1" pendant que la temporisation court.
Interroger l'état logique Une interrogation à "1" de la sortie Q fournit le résultat "1" lorsque l'état logique de
l'entrée S = 1 ou lorsque la temporisation court.
Interroger la valeur de Vous pouvez interroger la valeur de temps actuelle à la sortie BI à l'aide de la
temps actuelle valeur de la fonction S_OFFDT.
FUNCTION_BLOCK TEMPORISATION
VAR_INPUT
maTempo : TIMER ;
END_VAR
VAR_OUTPUT
resultat : S5TIME ;
END_VAR
VAR
initialiser : BOOL ;
remettre_zero : BOOL ;
val_dcb : S5TIME ;//Base de temps et valeur restante
//codées DCB
val_bin : WORD ; //Valeur de temps binaire
val_defaut : S5TIME ;
END_VAR
BEGIN
A0.0 := 1;
initialiser := E0.0 ;
remettre_zero := E0.1;
val_defaut := T#25S ;
val_dcb := S_PEXT (T_NO := maTempo ,
S := initialiser ,
TV := val_defaut ,
R := remettre_zero ,
BI := val_bin ,
Q := A0.7) ;
//Traitement ultérieur en tant que paramètre de sortie
resultat := valeur_dcb ;
//A la sortie pour affichage
AW4 := val_bin ;
END_FUNCTION_BLOCK
La figure suivante présente les cinq temporisations qui ont été décrites dans ce chapitre
pour vous aider à choisir celle qui correspond à vos besoins.
Lorsque vous combinez deux opérandes dans une opération, vous devez vous assurer de la
compatibilité de leurs types de données. S'ils ne sont pas du même type, il faut effectuer une
conversion. S7-SCL connaît plusieurs sortes de conversion du type de données.
• Conversion automatique du type de données
Les types de données sont répartis en classes. S7-SCL effectue une conversion
automatique au sein de ces classes. Les fonctions que le compilateur utilise à cet effet
sont regroupées en "Fonctions de conversion de classe A".
• Conversion explicite du type de données
Quand les opérandes ne font pas partie de la même classe, c'est à vous d'appeler une
fonction de conversion. Pour cette conversion explicite du type de données, S7-SCL met
à votre disposition de nombreuses fonctions standard que l'on peut répartir dans les
classes suivantes :
- Fonctions de conversion de classe B
- Fonctions d'arrondi et de troncature.
Au sein des classes définies dans le tableau suivant, le compilateur effectue une conversion
automatique des types de données conformément à l'ordre indiqué. Le type commun de
deux opérandes est toujours le plus grand des deux types de données. Ainsi, INTEGER est
le type commun de BYTE et WORD - WORD, par exemple.
Sachez que la conversion d'un type de données dans la classe ANY_BIT met à 0 les bits à
gauche.
Vous trouverez la description générale d'un appel de fonction dans la rubrique "Appel d'une
fonction".
Particularités dont vous devez tenir compte pour l'appel d'une fonction de conversion :
• Paramètre d'entrée
Toute fonction de conversion d'un type de données possède un paramètre d'entrée et un
seul, appelé IN. Puisqu'il s'agit d'un paramètre unique, il n'est pas nécessaire de
l'indiquer.
• Valeur de la fonction
Le résultat est toujours la valeur de la fonction.
• Nom de la fonction
Les types de données du paramètre d'entrée et de la valeur de la fonction résultant du
nom de la fonction, ils ne sont pas mentionnés dans la liste des fonctions de classe A ou
B. Dans le cas de la fonction BOOL_TO_BYTE, par exemple, le type du paramètre
d'entrée est BOOL, celui de la valeur de la fonction étant BYTE.
Attention
Si une constante est convertie d’un type de données d’un niveau élevé en un type de
données moins élevé, un message d’erreur s’affichera à la compilation si la constante se
trouve en dehors de la plage du type de données de niveau bas
Exemples :
M0.0 :=WORD_TO_BOOL(W#16#FFFF);
MW0 :=DINT_TO_INT(35000);
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la conversion des types
de données. Vous trouverez des informations détaillées sur chacune de ces fonctions dans le manuel
de référence STEP 7 "Fonctions standard et fonctions système pour S7-300/400".
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la conversion
du type de données. Vous trouverez des informations détaillées sur chacune de ces
fonctions dans le manuel de référence STEP 7 "Fonctions standard et fonctions système
pour S7-300/400".
Exemple
// Arrondi à la valeur inférieure (résultat : 3)
ROUND (3.14) ;
// Troncature (résultat : 3)
TRUNC (3.14) ;
// Troncature (résultat : 3)
TRUNC (3.56) ;
FUNCTION_BLOCK FB10
VAR
COMMUTATEUR : INT;
REGULATEUR : DINT;
END_VAR
Dans l'exemple suivant, une conversion explicite est nécessaire, car le type de données
REAL n'est pas autorisé dans une expression arithmétique comportant l'opération MOD.
FUNCTION_BLOCK FB20
VAR
COMMUTATEUR : REAL
VAL_ENT : INT := 17;
CONV2 : INT ;
END_VAR
Dans l'exemple suivant, la conversion est indispensable car le type de données n'est pas
autorisé pour une opération logique. NOT ne peut être appliquée qu'à des données de type
BOOL, BYTE, WORD ou DWORD.
FUNCTION_BLOCK FB30
VAR
VAL_ENT : INT := 17;
CONV1 : WORD ;
END_VAR
FUNCTION_BLOCK FB40
VAR
Rayon_ent : WORD ;
Rayon : INT;
END_VAR
Rayon_ent := %EB0;
Rayon := WORD_TO_INT (rayon_ent);
(* Conversion en cas de passage dans une autre classe de types de
données. La valeur provient du module d'entrées, elle est convertie
pour la suite du calcul.*)
Il s'agit des fonctions permettant de calculer la valeur absolue, le carré ou la racine carrée
d'une grandeur.
Le type de données ANY_NUM représente INT, DINT ou REAL. Sachez que les paramètres
d'entrée du type INT ou DINT sont convertis de manière interne en variables REAL quand la
valeur de la fonction est de type REAL.
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la conversion du type
de données. Vous trouverez des informations détaillées sur chacune de ces fonctions dans le manuel
de référence STEP 7 "Fonctions standard et fonctions système pour S7-300/400".
Il s'agit des fonctions permettant de calculer une valeur exponentielle ou le logarithme d'une
grandeur.
Le type de données ANY_NUM représente INT, DINT ou REAL. Sachez que les paramètres
d'entrée de type ANY_NUM sont convertis de manière interne en variables de type REAL.
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la conversion
des types de données. Vous trouverez des informations détaillées sur chacune de ces
fonctions dans le manuel de référence STEP 7 "Fonctions standard et fonctions système
pour S7-300/400".
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la conversion
des types de données. Vous trouverez des informations détaillées sur chacune de ces
fonctions dans le manuel de référence STEP 7 "Fonctions standard et fonctions système
pour S7-300/400".
Appel Résultat
RESULTAT := ABS (-5) ; // 5
RESULTAT := SQRT (81.0); // 9
RESULTAT := SQR (23); // 529
RESULTAT := EXP (4.1); // 60.340 ...
RESULTAT := EXPD (3); // 1_000
RESULTAT := LN (2.718 281) ; // 1
RESULTAT := LOG (245); // 2.389_166 ...
PI := 3.141592 ;
RESULTAT := SIN (PI / 6) ; // 0.5
RESULTAT := ACOS (0.5); // 1.047_197 (=PI / 3)
Le tableau suivant décrit toutes les fonctions standard sur chaîne binaire disponibles.
Nota
Vous avez en outre la possibilité d'utiliser d'autres fonctions CEI pour effectuer la
conversion des types de données. Vous trouverez des informations détaillées sur chacune
de ces fonctions dans le manuel de référence STEP 7 "Fonctions standard et fonctions
système pour S7-300/400".
Appel Résultat
RESULTAT := ROL (IN:=BYTE#2#1101_0011, N:=5); // 2#0111_1010
// (= 122 décimal)
RESULTAT := ROR (IN:=BYTE#2#1101_0011, N:=2); // 2#1111_0100
// (= 244 décimal)
RESULTAT := SHL (IN:=BYTE#2#1101_0011, N:=3); // 2#1001_1000
// (= 152 décimal)
RESULTAT := SHR (IN:=BYTE#2#1101_0011, N:=2); // 2#0011_0100
// (= 52 décimal)
LEN
La fonction LEN (FC21) fournit comme valeur de retour la longueur en cours d'une chaîne de
caractères (nombre de caractères valables). Une chaîne vide ('') a la longueur zéro. La
fonction ne signale pas d'erreur.
CONCAT
La fonction CONCAT regroupe 32 variables STRING au maximum en une seule chaîne de
caractères. Si la chaîne en résultant est plus longue que la variable définie pour le
paramètre de sortie, elle est réduite à la longueur maximale définie. En cas d’utilisation de la
fonction S7-SCL CONCAT, le FC2 de la bibliothèque "Fonctions CEI" est implicitement
appelé.
LEFT ou RIGHT
Les fonctions LEFT et RIGHT (FC20 et FC32) fournissent les L premiers ou derniers
caractères d'une chaîne de caractères. Si L est supérieur à la longueur en cours de la
variable STRING, c'est la chaîne complète qui est fournie comme valeur de retour. Si L = 0,
la valeur de retour est une chaîne vide. Si L est une valeur négative, la valeur de retour est
une chaîne vide.
MID
La fonction MID (FC26) fournit une partie d'une chaîne de caractères. L est la longueur de la
chaîne à lire, P est la position du premier caractère à lire.
Si la somme de L et de (P-1) dépasse la longueur en cours de la variable STRING, le
résultat de la fonction sera une chaîne démarrant à P et allant jusqu'à la fin de la valeur
d'entrée. Dans tous les autres cas (P hors de la longueur en cours, P et/ou L égalent zéro ou
négatifs), la valeur de retour est une chaîne vide.
INSERT
La fonction INSERT (FC17) insère la chaîne de caractères du paramètre IN2 dans celle du
paramètre IN1 après le Pème caractère. Si P égale zéro, la seconde chaîne sera insérée
avant la première. Si P est supérieur à la longueur en cours de la première chaîne de
caractères, la seconde chaîne sera accolée à la première. Si P est négatif, la valeur de
retour sera une chaîne vide. Si la chaîne de résultat est plus longue que la variable affectée
au paramètre de sortie, la chaîne de résultat sera limitée à la longueur maximale définie.
DELETE
La fonction DELETE (FC4) efface, dans une chaîne de caractères, L caractères à partir du
Pème caractère compris. Si L et/ou P égalent zéro ou si P est supérieur à la longueur en
cours de la chaîne d'entrée, c'est cette chaîne d'entrée qui sera fournie comme valeur de
retour. Si la somme de L et de P est supérieure à la chaîne d'entrée, les caractères seront
effacés jusqu'à la fin de la chaîne. Si L et/ou P sont négatifs, la valeur de retour sera une
chaîne vide.
REPLACE
La fonction REPLACE (FC31) remplace, à partir du caractère P compris, L caractères de la
première chaîne (IN1) par la seconde chaîne (IN2). Si L égale zéro, c'est la première chaîne
de caractères qui sera indiquée comme valeur de retour. Si P égale 0 ou 1, les caractères
seront remplacés en partant du premier (y compris celui-ci). Si P se trouve hors de la
première chaîne, la seconde chaîne sera accolée à la première. Si L et/ou P sont négatifs, la
valeur de retour sera une chaîne vide. Si la chaîne résultant de l'opération est plus longue
que la variable affectée comme paramètre de sortie, la chaîne sera limitée à la longueur
maximale définie.
FIND
La fonction FIND (FC11) fournit la position de la seconde chaîne de caractères (IN2) dans la
première (IN1). La recherche part de la gauche ; c'est la première occurrence de la chaîne
qui est signalée. Si la seconde chaîne n'est pas contenue dans la première, la valeur de
retour est 0. La fonction ne signale pas d'erreur.
Les opérations de comparaison de S7-SCL =, <>, <, >, <= et >= acceptent les chaînes de
caractères comme opérandes. Le compilateur intègre automatiquement l'appel de fonction
nécessaire. Les fonctions qui suivent ne sont mentionnées ici qu'à titre complémentaire.
EQ_STRNG et NE_STRNG
Les fonctions EQ_STRNG (FC10) et NE_STRNG (FC29) comparent les contenus de deux
variables en format STRING pour en constater l'égalité (FC10) ou la différence (FC29). Elles
donnent le résultat comme valeur de retour. Cette valeur de retour est à "1" quand la chaîne
de caractères du paramètre S1 est égale à (différente de) celle du paramètre S2. La fonction
ne signale pas d'erreur.
GE_STRNG et LE_STRNG
Les fonctions GE_STRNG (FC13) et LE_STRNG (FC19) comparent les contenus de deux
variables en format STRING dans le rapport "supérieur (inférieur) ou égal à" et elles donnent
le résultat de la comparaison comme valeur de retour. Cette valeur de retour est à "1" quand
la chaîne de caractères du paramètre S1 est supérieure (inférieure) ou égale à celle du
paramètre S2. La fonction compare les caractères en partant de la gauche et au moyen de
leur codage ASCII (par ex. 'a' est supérieur à 'A'). Le premier caractère différent décide du
résultat de la comparaison. Quand la partie gauche de la chaîne la plus longue est identique
à la chaîne la plus courte, c'est la chaîne la plus longue qui est supérieure. La fonction ne
signale pas d'erreur.
GT_STRNG et LT_STRNG
Les fonctions GT_STRNG (FC15) et LT_STRNG (FC24) comparent les contenus de deux
variables en format STRING dans le rapport "supérieur (inférieur) à" et donnent le résultat de
la comparaison comme valeur de retour. Cette valeur de retour est à "1" quand la chaîne de
caractères du paramètre S1 est supérieure (inférieure) à celle du paramètre S2. La fonction
compare les caractères en partant de la gauche et au moyen de leur codage ASCII (par ex.
'a' est supérieure à 'A'). Le premier caractère différent décide du résultat de la comparaison.
Quand la partie gauche de la chaîne la plus longue est identique à la chaîne la plus courte,
c'est la chaîne la plus longue qui est supérieure. La fonction ne signale pas d'erreur.
INT_TO_STRING et STRING_TO_INT
Les fonctions INT_TO_STRING et STRING_TO_INT convertissent une variable de format
INT en une chaîne de caractères ou une chaîne de caractères en une variable INT. Les
fonctions I_TRNG (FC16) ou STRNG_I (FC38) de la bibliothèque "Fonctions CEI" sont alors
utilisées de manière implicite. La chaîne sera précédée d'un signe. Si la variable affectée
comme valeur de retour est trop courte, la conversion n'a pas lieu.
DINT_TO_STRING et STRING_TO_DINT
Les fonctions DINT_TO_STRING et STRING_TO_DINT convertissent une variable de
format DINT en une chaîne de caractères ou une chaîne de caractères en une variable
DINT. Les fonctions DI_STRNG (FC5) ou STRNG_I (FC37) de la bibliothèque "Fonctions
CEI" sont alors utilisées de manière implicite. La chaîne sera précédée d'un signe. Si la
variable affectée comme valeur de retour est trop courte, la conversion n'a pas lieu.
////////////////////////////////////////////////////////////////////
//Le bloc contient les textes de signalisation requis et les //
//20 derniers messages générés //
////////////////////////////////////////////////////////////////////
DATA_BLOCK Textes_signalisation
STRUCT
indice : int;
memoire_textes : array [0..19] of string[34];
materiel : array [1..5] of string[16];
// 5 appareils différents
etats : array [1..5] of string[12];
// 5 états différents
END_STRUCT
BEGIN
indice :=0;
materiel[1] := 'moteur ';
materiel[2] := 'soupape ';
materiel[3] := 'presse ';
materiel[4] := 'station_soudage ';
materiel[5] := 'bruleur ';
etats[1] := ' defecteux';
etats[2] := ' demarre';
etats[3] := ' temperature';
etats[4] := ' repare';
etats[5] := ' revise';
END_DATA_BLOCK
////////////////////////////////////////////////////////////////////
//La fonction assemble des textes de signalisation et les écrit //
//dans le DB Textes_signalisation. Les textes de signalisation //
//sont stockés dans une mémoire circulaire. Le dernier indice //
//libre de la mémoire e textes figure aussi dans le DB //
//textes_signalisation où il est actualisé par la fonction. //
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//La fonction est appelée dans le programme cyclique en cas //
//de front dans le %M10.0 et elle provoque l'écriture unique d'un //
//message si un paramètre change. //
////////////////////////////////////////////////////////////////////
Organization_block zyklus
Var_temp
Besy_ifx : array [0..20] of byte;
erreur: BOOL;
End_var;
////////////////////////////////////////////////////////////////////
//L'appel suivant provoque l'entrée "Moteur 12 demarre" dans la //
//mémoire de textes du DB Textes_signalisation, sachant qu'il faut//
//transférer un 1 par %MW0, le 12 par %EW2 et un 2 par %MW2. *) //
////////////////////////////////////////////////////////////////////
Les fonctions suivantes de sélection de valeurs sont disponibles sous forme de fonctions
S7-SCL internes. Elles sont conformes à CEI 61131-3.
Nota
Certaines des fonctions sont également contenues dans la bibliothèque standard de
STEP 7. Les fonctions de la bibliothèque ne correspondent cependant pas en tous points
aux exigences CEI.
SEL
La fonction SEL sélectionne une valeur d'entrée parmi deux.
Comme valeurs d'entrée, tous les types de données sont autorisés, à l'exception des types
de données ARRAY et STRUCT ainsi que des types de données Paramètre. Toutes les
variables paramétrées doivent appartenir au type de données de la même classe.
Exemple :
A:= SEL (G:= SELECT, IN0:= X, IN1:= Y);
MAX
La fonction MAX sélectionne la plus grande valeur de variable parmi un certain nombre de
valeurs de variables. Comme valeurs d'entrée, les types de données numériques et les
types de données de temporisation sont autorisés. Toutes les variables paramétrées doivent
appartenir au type de données de la même classe. L'expression prend le type de données
de poids le plus fort.
Exemple : A:= MAX (IN1:=a, IN2:=b, IN3:=c, IN4:=d);
MIN
La fonction MIN sélectionne la plus petite valeur de variable parmi un certain nombre de
valeurs de variables. Comme valeurs d'entrée, les types de données numériques et les
types de données de temporisation sont autorisés. Toutes les variables paramétrées doivent
appartenir au type de données de la même classe. L'expression prend le type de données
de poids le plus fort.
Exemple : A:= MIN (IN1:=a, IN2:=b, IN3:=c, IN4:=d);
LIMIT
La fonction LIMIT limite la valeur d'une variable à des valeurs limite paramétrables. Comme
valeurs d'entrée, tous les types de données numériques et les types de données de
temporisation sont autorisés. Tous les paramètres doivent appartenir au même type de
données. L'expression prend le type de données de poids le plus fort. La valeur limite
inférieure (MN) ne doit pas être plus grande que la valeur limite supérieure (MX).
Exemple : A:= LIMIT (MN:=5, IN:= Bearbeitungsschritte, MX:= 10);
MUX
La fonction MUX sélectionne une valeur d'entrée parmi un certain nombre de valeurs
d'entrée. La sélection s'effectue avec le paramètre d'entrée K. Comme valeurs d'entrée, tous
les types de données sont autorisés. L'expression prend le type de données de poids le plus
fort.
Exemple :
A:= MUX (K:=SELECT, IN0:= Steps, IN1:=Number, IN2:=Total);
Le système d'exploitation des CPU S7 contient des fonctions système et des fonctions
standard que vous pouvez utiliser lorsque vous programmez dans S7-SCL. Il s'agit de :
• Blocs d'organisation (OB)
• Fonctions système (SFC)
• Blocs fonctionnels système (SFB)
Nota
Lorsque vous utilisez les opérations suivantes pour les types de données TIME,
DATE_AND_TIME et STRING dans votre programme, S7-SCL appelle automatiquement les
blocs standard correspondants.
C'est ce qui explique que les mnémoniques et les numéros de ces blocs standard soient
réservés et que leur emploi pour d'autres blocs soit interdit. Un manquement à cette règle
n'est pas toujours contrôlé par S7-SCL et peut provoquer une erreur de compilateur.
Le tableau ci-après énumère les fonctions standard CEI utilisées automatiquement par
S7-SCL.
Pour des informations complémentaires sur les SFB, SFC et OB disponibles ainsi que pour
une description détaillée de chaque interface, reportez-vous au manuel de référence STEP 7
"Fonctions standard et fonctions système pour S7-300/400".
Blocs d'organisation
Les blocs d'organisation constituent l'interface entre le système d'exploitation de la CPU et le
programme utilisateur. Ils permettent de cibler les parties de programme à exécuter :
• à la mise en route de la CPU,
• de manière cyclique ou à une cadence donnée,
• à des instants ou jours donnés,
• après écoulement d'une durée donnée,
• à l'apparition d'erreurs,
• lors du déclenchement d'alarmes de processus ou de communication.
Les blocs d'organisation sont traités dans l'ordre de la priorité qui leur est affectée.
OB disponibles
Les CPU ne sont pas toutes en mesure de traiter l'ensemble des OB disponibles dans S7.
Vérifiez dans les caractéristiques techniques de votre CPU de quels OB vous diposez.
La description du langage faite dans les différentes rubriques se base sur des diagrammes
syntaxiques. Ils vous montrent bien la structure syntaxique de S7-SCL. Ils sont regroupés au
complet avec les éléments de langage correspondants dans les chapitres "Règles lexicales"
et "Règles syntaxiques".
Nom de la règle
Séquence
Bloc 3
Bloc 1 Bloc 2
Bloc 4
Option
Bloc 5
Itération
Alternative
15.1.2 Règles
Les règles que vous pouvez utiliser pour construire votre programme S7-SCL comportent
deux niveaux : il y a les règles lexicales et les règles syntaxiques.
Règles lexicales
Les règles lexicales décrivent la structure des éléments (symboles) sur lesquels porte
l'analyse lexicale réalisée par le compilateur. Le format de la notation n'est pas libre et les
règles sont à appliquer rigoureusement. Cela signifie en particulier que :
• L'insertion de caractères de mise en forme n'est pas autorisée ;
• L'insertion de blocs et de lignes de commentaire n'est pas possible ;
• L'insertion d'attributs pour les identificateurs n'est pas possible.
TABLEAU_MES_12
CONSIGNE_B_1
Lettre
_ Lettre _ Lettre
Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre
Règles syntaxiques
Les règles syntaxiques décrivent la structure de S7-SCL en s'appuyant sur les règles
lexicales. En respectant ces règles, vous pouvez créer votre programme S7-SCL en toute
liberté de format.
Programme SCL
Conventions
Chaque règle est précédée de son nom. Si elle est utilisée dans une règle de niveau
hiérarchique supérieur, son nom figure dans un rectangle.
Si le nom de la règle est écrit en majuscules, il s'agit d'un symbole qui est décrit dans les
règles lexicales.
Sémantique
Les règles permettent uniquement de représenter la structure formelle du langage, sans
toujours en livrer la signification. Des informations complémentaires sont donc écrites à côté
des règles pour les points importants. Voici des exemples :
• Un nom supplémentaire est indiqué en cas d'éléments semblables mais de signification
différente : par ex. dans la règle d'indication de la date, Année, Mois ou Jour pour SUITE
DE CHIFFRES DECIMAUX. Le nom indique l'utilisation.
• Les restrictions importantes sont signalées à côté des règles : par ex. la règle
Mnémonique est accompagnée du rappel qu'un mnémonique doit être défini dans la table
des mnémoniques.
Définition
Un bloc terminal est un élément de base dont la description ne nécessite pas de règle
supplémentaire, mais une simple explication. Il est représenté par la figure suivante dans les
diagrammes syntaxiques :
Les tableaux suivants énumèrent les différents blocs terminaux en indiquant pour chacun
l'ensemble correspondant des éléments du jeu de caractères ASCII.
Lettres et chiffres
Il s'agit des caractères les plus utilisés. L'IDENTIFICATEUR, par exemple, se compose de
lettres, de chiffres et du caractère de soulignement.
Caractère Description
: Séparateur entre heures, minutes et secondes
Attributs
. Séparateur pour l'adressage absolu et dans la représentation des nombres
réels et des intervalles de temps
'' Caractère et chaîne de caractères
"" Caractère introduisant le mnémonique suivant les règles de la table des
mnémoniques
_ caractère de Séparateur pour les valeurs numériques dans les constantes, peut figurer
soulignement dans les IDENTIFICATEURS
$ Caractère d'alignement pour indiquer des caractères de commande ou des
caractères de remplacement
$> $< Interruption d'une chaîne si sa longueur dépasse une ligne ou pour insérer
des commentaires
Opérations
Le tableau suivant énumère toutes les opérations de S7-SCL, les mots-clés tels que AND et
les opérations courantes représentées par un seul caractère. Il s'applique aux jeux
d'abréviations allemand et anglais.
Le tableau suivant dresse la liste par ordre alphabétique des mots-clés de S7-SCL et des
identificateurs prédéfinis. Ils sont accompagnés d'une description et de la règle syntaxique
dans laquelle ils sont utilisés comme blocs terminaux. De façon générale, les mots-clés ne
dépendent pas du jeu d'abréviations.
Mots-clés de bloc
Ils servent à l'adressage absolu de blocs. Le tableau donne la liste des mots-clés de bloc
classés d'après les abréviations allemandes, avec les abréviations anglaises
correspondantes.
Un bloc non terminal est un élément complexe, décrit par une règle supplémentaire. Il est
représenté par une boîte. Le nom figurant dans cette boîte est celui de la règle plus
détaillée.
Cet élément se rencontre dans les règles lexicales et dans les règles syntaxiques.
Un symbole est un élément complexe qui est employé comme élément de base dans les
règles syntaxiques et expliqué dans les règles lexicales. Il est représenté par un rectangle.
Le NOM en majuscules est celui de la règle lexicale plus détaillée (sans rectangle).
Symbole
<Nom de la règle>
Les symboles définis représentent des identificateurs qui découlent des règles lexicales. Ils
décrivent :
• Les identificateurs
• L'attribution de noms dans S7-SCL
• Les constantes prédéfinies et les drapeaux
15.1.9 Identificateurs
Identificateurs
Les identificateurs servent à adresser des objets du langage S7-SCL. Le tableau suivant
vous renseigne sur les classes d'identificateurs.
Majuscules et minuscules
La distinction entre majuscules et minuscules n'est pas faite pour les mots-clés. Depuis la
version 4.0 de S7-SCL, elle n'est plus faite non plus pour les noms prédéfinis, pour les noms
que vous choisissez vous-même, par ex. pour les variables, ainsi que pour les
mnémoniques de la table des mnémoniques (voir le tableau ci-après).
Vous pouvez donc écrire aussi en minuscules les noms des fonctions standard, comme par
ex. BYTE_TO_WORD et ABS. Il en est de même pour les paramètres des fonctions de
temporisation et de comptage, par ex. SV, se ou ZV.
IDENTIFICATEUR
Lettre
_ Lettre _ Lettre
Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre
MNEMONIQUE
Caractère
" imprimable "
Restrictions
En attribuant un nom, tenez compte des quelques restrictions suivantes.
Les noms doivent être univoques dans leur zone de validité, c'est-à-dire qu'il n'est pas
permis d'utiliser encore une fois dans le même bloc un nom qui y a déjà été attribué. En
outre, il ne faut pas employer les noms suivants qui sont utilisés par le système :
• Noms de mots-clés, par ex. CONST, END_CONST, BEGIN ;
• Noms des opérations, par ex. AND, XOR ;
• Noms des identificateurs prédéfinis, par ex. noms de types de données tels que BOOL,
STRING, INT ;
• Noms des constantes prédéfinies TRUE et FALSE ;
• Noms des fonctions standard, par ex. ABS, ACOS, ASIN, COS, LN ;
• Noms des identificateurs d'opérande pour données système globales, par ex. EB, EW,
ED, AB, AW, AD MB, MD.
DESIGNATION DE BLOC
Dans la règle DESIGNATION DE BLOC, vous pouvez employer au choix les règles
IDENTIFICATEUR et Mnémonique.
DESIGNATION DE BLOC
Mot-clé
Numéro
de bloc
IDENTIFICATEUR
Mnémonique
Les deux tableaux s'appliquent aux jeux d'abréviations allemand comme anglais.
Constantes
Abréviation Description
FALSE Constante booléenne prédéfinie (constante standard) de valeur 0. Sa signification
logique est qu'une condition n'est pas remplie.
TRUE Constante booléenne prédéfinie (constante standard) de valeur 1. Sa signification
logique est qu'une condition est remplie.
Drapeaux
Abréviation Description
EN Drapeau validant le bloc
ENO Drapeau d'erreur du bloc
OK Drapeau qui est mis à FALSE quand une erreur s'est produite dans l'exécution
d'une instruction.
Les règles lexicales décrivent la structure des éléments (symboles) sur lesquels porte
l'analyse lexicale réalisée par le compilateur. Le format de la notation n'est pas libre et les
règles sont à appliquer rigoureusement. Cela signifie en particulier que :
• L'insertion de caractères de mise en forme n'est pas autorisée.
• L'insertion de blocs et de lignes de commentaire n'est pas possible.
• L'insertion d'attributs pour les identificateurs n'est pas possible.
15.2.2 Désignations
Règle Diagramme syntaxique
Identificateur
IDENTIFICATEUR
Lettre
_ _ Lettre
Lettre
Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre
Désignation de bloc
DESIGNATION DE BLOC
Mot-clé
Numéro
de bloc
IDENTIFICATEUR
Mnémonique
Abréviation allemande
et anglaise
IDENTIFICATEUR
Mnémonique
Désignation de compteur
Z Numéro
IDENTIFICATEUR
Mnémonique
Mot-clé de bloc
OB Bloc d'organisation
FC Fonction
Bloc fonctionnel
FB
DB Bloc de données
Mnémonique
Caractère
" imprimable "
Numéro
Chiffre
15.2.3 Constantes
DWORD#
Constante entière
CONSTANTE ENTIERE
SUITE DE CHIFFRES DECIMAUX
INT# + SUITE DE CHIFFRES OCTAUX
SUITE DE CHIFFRES HEXA
DINT# - SUITE DE CHIFFRES BINAIRES
CARACTERES (1)
Constante réelle
CONSTANTE REELLE
REAL#
- SUITE DE CHIFFRE SUITE DE CHIFFRE
DECIMAUX . DECIMAUX Exposant
Suite de chiffres
décimaux Suite de chiffres décimaux
Chiffre
Caractère de soulignement
Chiffres décimaux : 0-9
2# Chiffre binaire
8# Chiffre octal
_
Caractère de soulignement
Suite de chiffres
hexadécimaux
CHIFFRE HEXADECIMAL
_
Chiffre hexadécimal : 0-9
A-F Caractère de soulignement
Exposant
Exposant
E +
SUITE DE CHIFFRES
DECIMAUX
e -
SUITE DE CHIFFRES
DECIMAUX
Interruption '
' Caractère Caractère
de la chaîne
Caractère
&DUDFWÙUH
&DUDFWÙUH
LPSULPDEOH
&DUDFWÙUHGಫDOLJQHPHQW
&DUDFWGHUHPSODFHPHQW
RXಪ
&DUDFWGHFRPPDQGH
3RX/RX5RX7RX1
&KLIIUH &KLIIUH
KH[DGHFLPDO
KH[DGHFLPDO
5HSUÚVHQWDWLRQGHVXEVWLWXWLRQHQFRGHKH[DGÚFLPDOH
3 6DXWGHSDJH
QRQDXWRULVÚH
/ &KDQJHPHQWGHOLJQH
5 5HWRXUFKDULRW
7 7DEXODWLRQ
1 1RXYHOOHOLJQH
Interruption d'une
chaîne de caractères Interruption d'une chaîne de caractères Caractère d'espacement (blank)
de changement de ligne (linefeed)
de retour chariot (carriage return)
de saut de page (formfeed, page)
Caractère de de tabulation horizontale (tabulator)
mise en forme
$> $<
Commentaire
Date
Date
DATE#
Indication de la date
D#
-Chaque unité de temps (heures, minutes) ne doit être indiquée qu'une seule fois
-L'ordre - jours, heures, minutes, secondes, millisecondes - doit être respecté
Heure du jour
Heure du jour
TIME_OF_DAY#
TOD#
Date et heure
Date et heure
DATE_AND_TIME#
DT#
Indication de date
Indication de la date
Représentation
décimale Représentation décimale
Jours Heures
Minutes Secondes
SUITE DE CHIFFRES _
MS
DECIMAUX
Millisecondes
Adressage absolu
IDENTIFICATEUR
Adressage symbolique
MNEMONIQUE
Adessage indexé de la
mémoire
Identificateur d'opérande
pour mémoire
Identificateur d'opérande
Préfixe Préfixe
de mémoire de taille
Adressage absolu
Adressage indexé
d'un DB Index
DESIGNATION Préfixe
DU DB . D
de taille
Préfixe de mémoire
Préfixe de mémoire
I
E Entrée
Q
A Sortie
M M Mémento
X Bit
B Octet
W Mot
D Double mot
Numéro . Numéro
Adressage de l'instance
locale
Variable
IDENTIFICATEUR .
simple
15.2.5 Commentaires
Voici les restrictions dont vous devez tenir compte lorsque vous insérez des commentaires :
• L'imbrication de commentaires est autorisée quand l'option "Imbrication de commentaires
possible" est activée.
• L'insertion de commentaires est possible n'importe où dans les règles syntaxiques, mais
il ne l'est pas dans les règles lexicales.
Bloc de commentaire
Ligne de commentaire
Ligne de commentaire
Caractère
// CR
imprimable
Bloc de commentaire
%ORFGHFRPPHQWDLUH
&DUDFWÙUH
Les attributs de blocs peuvent se trouver avec la syntaxe suivante après la DESIGNATION
DU BLOC et avant la déclaration de la première section de variables ou de paramètres.
Version
NOMBRE NOMBRE
Version :
DECIMAL .
DECIMAL
Protection de bloc
KNOW_HOW_PROTECT
Auteur
FDUDFWÙUHVPD[
$87+25 ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
Nom
FDUDFWÙUHVPD[
1$0( ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
Famille de blocs
FDUDFWÙUHVPD[
)$0,/< ,'(17,),&$7(85
&DUDFWÙUH
LPSULPDEOH
24 caractères au maximum
IDENTIFICATEUR caractère
{ := ' ' }
imprimable
Les options du compilateur se trouvent dans une ligne distincte en dehors des limites de
blocs dans la source. Aucune distinction n'est faite entre les majuscules et les minuscules.
Les règles syntaxiques décrivent la structure de S7-SCL en s'appuyant sur les règles
lexicales. En respectant ces règles, vous pouvez créer votre programme S7-SCL en toute
liberté de format.
Chacune des règles est précédée de son nom. Si elle est appliquée dans une règle de
niveau hiérarchique supérieur, son nom figure dans un rectangle.
Si le nom est écrit en majuscules dans le rectangle, il s'agit d'un symbole qui est décrit dans
les règles lexicales.
Pour les noms de règle figurant dans un rectangle aux coins arrondis ou dans un cercle,
vous trouverez des informations au chapitre "Description formelle du langage".
Liberté de format
La liberté de format implique que :
• L'insertion de caractères de mise en forme est partout possible ;
• L'insertion de lignes et de blocs de commentaire est possible.
Elément de programme
S7-SCL Bloc d'organisation
Fonction
Bloc fonctionnel
Bloc de données
Bloc d'organisation
Bloc d'organisation
Fonction
N'oubliez pas que pour les Fonction
fonctions sans VOID dans la
VOID
section des instructions, la
valeur de retour doit être DESIGNATION Spécification du
affectée au nom de la FUNCTION DE LA FC : type de données
fonction !
Section de décla-
BEGIN Section des instructions END_FUNCTION
ration de la FC
Bloc fonctionnel
PROGRAM
DESIGNATION Section de dé-
DU FB claration du FB
FUNCTION_BLOCK
END_PROGRAM
BEGIN Section des instructions
END_FUNCTION_BLOCK
Bloc de données
Bloc de données
DESIGNATION
DATA_BLOCK DU DB Section de déclaration du DB
Type de données
utilisateur Type de données utilisateur
Spécification
DESIGNATION du type de données
TYPE END_TYPE
DE L`UDT STRUCT
Section des
variables temporaires
Section de déclaration de
la FC
Section des
variables temporaires
Section de déclaration du
FB
Section des
variables temporaires
Section des
variables statiques
DESIGNATION
DE L'UDT
Structure de la
spécification du
type de données
Section d'affectation du
DB Section d'affectation du DB
* en notation LIST
Repère de saut
Déclaration
des variables
VAR END_VAR
Déclaration
d'instance*
* pour FB seulement
Déclaration de variables
Spécification du Initialisation du
IDENTIFICATEUR 1) : ;
type de données type de données
Nom de la variable,
du paramètre
ou du composant
Nom du composant dans la structure
,
Pas à l'initialisation
24 caractères au maximum
:= caractère
{ IDENTIFICATEUR ' ' }
imprimable
Initialisation du type de
données INITIALISATION
CONSTANTE
LISTE D’INITIAL.
D’UN TABLEAU
LISTE DE REPET.
DE CONSTANTES
LISTE DE REPETIT.
[ ]
DE CONSTANTES
Déclaration d'instance
(possible seulement dans
Le FB et le SFB doivent
la section VAR d'un FB) Déclaration d'instances déjà exister !
DESIGNATION
DU FB
IDENTIFICATEUR : ;
Section de variables
temporaires
Section de variables temporaires
VAR_TEMP Déclaration
de la variable END_VAR
VAR_INPUT
VAR_OUTPUT Déclaration
de la variable END_VAR
VAR_IN_OUT
Spécification du type de
données
Type de données
élémentaire
DATE_AND_TIME
Spécification du
type de données
chaîne de caractères
Spécification du
type de données
ARRAY
Spécification du
type de données
STRUCT
DESIGNATION
DE L'UDT
Spécification du
type de données
paramètre
Type de données
caractère
Type de données
numérique
Type de données
temporel
BYTE Octet
WORD Mot
Type de données
caractère CHAR
Spécification du type de
données STRING Spécification du type de données STRING
Expression
STRING [ ]
simple
Longueur de la chaîne
Type de données
numérique INT Entier
TIME Temps
TIME_OF_DAY
Heure du jour
TOD
DATE Date
DATE_AND_TIME
DATE_AND_TIME
DATE_AND_TIME#
DT#
Spécification du type de
données ARRAY
Spécification du type de données ARRAY Spécification des indices
6 dimensions au plus
Spécification du
OF type de données
Spécification du type de
données STRUCT
N'oubliez pas de terminer le Spécification du type de données STRUCT
mot-clé END_STRUCT par
un point-virgule ! Déclaration des
STRUCT END_STRUCT
composants
Déclaration des
composants
Spécification du Initialisation
IDENTIFICATEUR : ;
type de données des données
Nom du composant
COUNTER Compteur
POINTER Adresse
BLOCK_FC Fonction
IDENTIFICATEUR : Instruction ;
Repère de saut
Instruction
Instruction
Affectation de valeur
Exécution de
sous-programme
Instruction de contrôle
Affectation de valeur
Affectation de valeur
Variable absolue
Variable absolue
pour les zones de mémoire
de la CPU
Variable dans un DB
Appel de FC
Variable simple
IDENTIFICATEUR
Nom de la variable
ou du paramètre
Variable
structurée
Tableau
simple
Variable composée
Opérande
Opérations de
comparaison
Opérations
arithmétiques de base
Puissance
Expression ** Exposants
+ Expression
Plus unaire
- Moins unaire
NOT Négation
( Expression )
Expression simple
+
Expression Multiplication
simple simple
-
*
Multiplication
simple
/
DIV
MOD
Constante
-
Expression
( )
simple
Opérande
Constante
Variable étendue
( Expression)
NOT Opérande
Variable étendue
Variable étendue
Variable simple
Variable absolue
pour les zones de mémoire
de la CPU
Variable dans un DB
Appel de FC
Constante
Valeur numérique
Chaîne de caractères
Nom de constante
Exposant
Exposant
E +
SUITE DE CHIFFRES
DECIMAUX
e -
Opération logique de
base
Opération arithmétique
de base Opérations arithmétiques de base
* / MOD DIV + -
Opération de
comparaison Opération de comparaison
Appel d 'un FB
FB : bloc fonctionnel
SFB : bloc fonctionnel système
DESIGNATION
DU FB
Nom de l'instance globale
DESIGNATION DESIGNATION
. DU DB ( Paramètres du FB )
DU SFB
IDENTIFICATEUR
Appel de fonction
Appel de fonction
DESIGNATION
DE LA FC
DESIGNATION ( Paramètres )
DE LA SFC de la FC
FC : fonction
IDENTIFICATEUR
SFC : fonction système
Nom de la fonction standard Fonction standard réalisée dans le compilateur
ou mnémonique
Paramètres de FB
Paramètres du FB
Affectation
de l'entrée
Affectation de
l'entrée/sortie
Affectation
de l'entrée
Affectation de
la sortie ou de
l'entrée/sortie
Affectation de l'entrée
Affectation de l'entrée Paramètre effectif
Expression
DESIGNATION DE
LA TEMPORISATION
IDENTIFICATEUR :=
DESIGNATION
Nom du paramètre DU COMPTEUR
d'entrée
Affectation de
l'entrée/sortie
Affectation de l'entrée/sortie
Variable
IDENTIFICATEUR :=
étendue
Nom du paramètre
Paramètre effectif
d'entrée/sortie
(Paramètre formel)
Affectation de la sortie
$IIHFWDWLRQGHOಫHQWUÚHVRUWLH
9DULDEOH
,'(17,),&$7(85 ÚWHQGXH
1RPGXSDUDPÙWUH ! 3DUDPÙWUHHIIHFWLI
GಫHQWUÚHVRUWLH
SDUDPÙWUHIRUPHO DSSHOGಫXQ)&
Section
ELSIF Expression THEN des instructions
Condition
Section
ELSE END_IF
des instructions
Instruction CASE
Instruction CASE
Expression de sélection (entier)
N'oubliez pas de terminer
le mot-clé END_CASE par CASE Expression OF
un point-virgule !
Valeur
Section
Liste de valeurs :
des instructions
Section
ELSE : des instructions END_CASE
Valeur
Valeur .. Valeur
Valeur
Constante numérique
IDENTIFICATEUR
Nom de la constante
Instructions d'itération
et de saut Instruction
FOR
Instruction
WHILE
Instruction
REPEAT
Instruction
CONTINUE
Instruction
EXIT
Instruction
RETURN
Instruction
GOTO
Expression Section
BY de base DO des instructions
pour l'incrément
END_FOR
Instruction initiale
Instruction initiale
Variable Expression
:= de base
étendue
Instruction WHILE
Instruction WHILE
N'oubliez pas de terminer
le mot-clé END_WHILE Section
WHILE Expression DO END_WHILE
par un point-virgule. des instructions
Condition d'exécution
Instruction REPEAT
Instruction REPEAT
N'oubliez pas de terminer
le mot-clé END_REPEAT Section
par un point-virgule. REPEAT UNTIL Expression END_REPEAT
des instructions
Condition d'abandon
CONTINUE
Instruction RETURN
Instruction RETURN
RETURN
Instruction EXIT
Instruction EXIT
EXIT
Saut dans le
programme Branchement de
programme
GOTO IDENTIFICATEUR
Repère de saut
Nota
Avec VAR_TEMP, vous rangez des variables dans la pile de la CPU. Cela peut conduire à un
dépassement de capacité de la pile pour les petites CPU. Evitez d'utiliser trop de variables temporaires
dans votre programme !
Valeur Représentation
+ infinity 1.#INFrandom-digits
- infinity -1.#INFrandom-digits
Indefinite digit.#INDrandom-digits
NaN digit. #NANrandom-digits
Réassignation de blocs
Vous ne pouvez pas utiliser la commande Outils > Réassignation de SIMATIC Manager
pour réassigner les appels de bloc figurant dans les blocs S7-SCL. Vous devez éditer
manuellement les appels des blocs concernés dans la source S7-SCL.
Conseils :
• Définissez des noms symboliques pour les blocs dans la table des mnémoniques et
appelez les blocs sous forme symbolique.
• Définissez des mnémoniques pour les adresses absolues (E, M, A, etc.) dans la table
des mnémoniques et utilisez-les dans votre programme.
Si vous souhaitez ensuite réassigner un bloc, il vous suffira de modifier l'affectation dans la
table des mnémoniques et vous n'aurez aucune modification à faire dans la source S7-SCL.
Exemple :
VAR
theStruct : STRUCT
twoBytes : ARRAY [0..1] OF BYTE;
oneInt : INT
oneByte : BYTE;
END_STRUCT;
fiveBytes AT theStruct : ARRAY[0..4] OF BYTE;
END_VAR
Valeurs limite
Les deux types de données possibles possèdent différentes valeurs limite :
Abréviations
Les abréviations représentent les opérandes et les opérations de programmation de manière
abrégée (E, par exemple, désigne l'entrée). STEP 7 reconnaît les abréviations CEI
(exprimées en anglais) et les abréviations SIMATIC (exprimées d'après les opérations et
conventions d'adressage SIMATIC allemandes).
Adressage
Affectation d'une adresse dans le programme utilisateur. On peut affecter des adresses à
des opérandes ou à des zones d'opérandes données (exemples : entrée E 12.1, mot de
mémento MW25)
Adressage absolu
L'adressage absolu consiste à indiquer l'adresse de l'opérande à traiter. Exemple : l'adresse
A 4.0 désigne le bit 0 dans l'octet 4 de la mémoire image des sorties.
Adressage symbolique
L'adressage symbolique consiste à indiquer de manière symbolique l'opérande à traiter, son
mnémonique. Les mnémoniques sont associés aux adresses au moyen de la table des
mnémoniques ou d'un fichier symbolique.
Affectation
Mécanisme servant à donner une valeur à une variable.
Aide en ligne
STEP 7 vous offre la possibilité d'afficher à l'écran des textes d'aide contextuels pendant
votre travail avec le logiciel de programmation.
Appel de bloc
Démarrage d'un bloc dans le programme utilisateur STEP 7 : les blocs d'organisation sont
toujours appelés par le système d'exploitation, tous les autres blocs le sont par le
programme utilisateur STEP 7.
Attente
L'état d'attente peut être obtenu à partir de l'état de marche sur sollicitation depuis la console
de programmation. Cet état de fonctionnement permet de réaliser des fonctions de test
particulières.
Attribut
Un attribut est une propriété qui caractérise par exemple une désignation de bloc ou un nom
de variable. Dans S7-SCL, il existe des attributs pour les indications suivantes : titre du bloc,
version, protection du bloc, auteur, nom du bloc, famille de bloc.
Bloc
Les blocs constituent des parties délimitées d'un programme utilisateur par leur fonction, leur
structure et leur objet. Dans STEP 7, il existe des blocs de code (FB, FC, OB, SFC, SFB),
des blocs de données (DB, SDB) et des types de données utilisateur (UDT).
Bloc de code
Dans SIMATIC S7, un bloc de code est un bloc contenant une partie du programme
utilisateur STEP 7, contrairement aux blocs de données qui ne contiennent que des
données. Parmi les blocs de code, on distingue les blocs d'organisation (OB), les blocs
fonctionnels (FB), les fonctions (FC), les blocs fonctionnels système (SFB) et les fonctions
système (SFC).
Bloc terminal
Un bloc terminal est un élément de base d'une règle lexicale ou syntaxique dont la
description ne nécessite pas de règle supplémentaire, mais une simple explication. Il peut
s'agir par exemple d'un mot-clé ou d'un caractère unique.
Classe de bloc
En fonction de leur contenu, les blocs sont subdivisés en deux classes, les blocs de code et
les blocs de données.
Commentaire
Structure permettant d'intégrer dans un programme un texte explicatif qui n'aura pas
d'influence sur l'exécution du programme.
Commentaire de bloc
Les commentaires de bloc sont des informations supplémentaires sur un bloc (par exemple
des explications sur le processus d'automatisation) qui ne sont pas chargées dans la
mémoire de travail des automates programmables SIMATIC S7.
Compilateur de S7-SCL
Le compilateur de S7-SCL est un compilateur séquentiel qui permet de traduire le
programme préalablement édité (source SCL) en code machine MC7. Les blocs ainsi créés
sont rangés dans le programme S7 qui se trouve dans le dossier Blocs.
Compilation
Traduction d'une source en programme utilisateur exécutable.
Compilation source
Dans le mode de saisie source, la compilation en programme utilisateur exécutable n'est
effectuée qu'une fois toutes les instructions saisies. Cette compilation est accompagnée
d'une vérification détectant les erreurs de saisie éventuelles.
Compteur
Les compteurs sont partie constituante de la mémoire système de la CPU. Leur contenu est
actualisé par le système d'exploitation de façon asynchrone au programme utilisateur. Des
instructions en STEP 7 permettent de définir la fonction exacte de la cellule de comptage
(par ex. incrémentation) et d'en lancer l'exécution.
Constante
Les constantes réservent la place pour des valeurs constantes dans les blocs de code. Elles
servent à améliorer la lisibilité d'un programme. Exemple : au lieu d'indiquer une valeur
directement (ex. : 10 ), on indique "Nbmax_repetitions_boucle". A l'appel de la constante,
elle est remplacée par sa valeur (10).
Constante littérale
Notation formelle déterminant la valeur et le type d'une constante.
Constante symbolique
Les constantes aux noms symboliques réservent la place pour des valeurs constantes dans
les blocs de code. Elles permettent d'améliorer la lisibilité d'un programme.
DCB
Nombre décimal codé binaire. Dans STEP 7, les temporisations et les compteurs sont
indiqués exclusivement dans le format DCB à l'intérieur de la CPU.
Débogueur de S7-SCL
Le débogueur de S7-SCL est un débogueur de langage évolué permettant de trouver les
erreurs de programmation logiques dans le programme utilisateur créé avec S7-SCL.
Déclaration
Mécanisme servant à définir un élément de langage. Une déclaration établit le lien entre un
identificateur et l'élément de langage et lui affecte des attributs et des types de données.
Déclaration de variable
La déclaration d'une variable consiste à indiquer son mnémonique, son type de données et
éventuellement une valeur par défaut, une adresse et un commentaire.
Données globales
Les données globales sont des données accessibles à chaque bloc de code (FB, FC, OB), à
savoir des mémentos (M), des entrées (E), des sorties (A), des temporisations, des
compteurs et des éléments de blocs de données. Il est possible d'y accéder par adressage
absolu ou symbolique.
Données locales
Les données locales sont les données associées à un bloc de code qui sont déclarées dans
la section de déclaration ou dans la déclaration des variables de ce bloc. Elles comprennent
- selon le bloc - les paramètres formels, les données statiques, les données temporaires.
Données statiques
Les données statiques sont des données locales d'un bloc fonctionnel qui sont mémorisées
dans le bloc de données d'instance et donc conservées jusqu'au traitement suivant du bloc
fonctionnel.
Données temporaires
Les données temporaires sont des données locales d'un bloc qui sont sauvegardées dans la
pile des données locales (pile L) durant l'exécution de ce bloc et ne sont plus disponibles
une fois l'exécution terminée.
Données utiles
Les données utiles sont échangées par l'intermédiaire de la mémoire image ou par
adressage direct entre une unité centrale et un module de signaux, un module fonctionnel et
des modules de communication. Il peut s'agir des signaux d'entrée/sortie TOR et
analogiques de modules de signaux, d'informations de forçage et d'état de modules de
fonctions.
Drapeau OK
Le drapeau OK signale l'exécution correcte ou incorrecte d'une séquence d'instructions d'un
bloc. Il a généralement le type de données BOOL.
Editeur de S7-SCL
L'éditeur de S7-SCL s'adapte tout particulièrement aux exigences de S7-SCL pour créer la
source S7-SCL.
EN (Enable)
Dans STEP 7, tout bloc fonctionnel et toute fonction dispose du paramètre d'entrée "Enable"
(EN) défini automatiquement et qui peut être mis à 1 à l'appel du bloc. Si EN est vrai, le bloc
appelé est exécuté, autrement il ne l'est pas.
En ligne
Il s'agit de l'état de fonctionnement dans lequel une liaison (physique, logique) est établie
entre la console de programmation et l'automate programmable.
Entier (INT)
L'entier (INT) est l'un des types de données simples. On le représente comme nombre entier
à 16 bits.
Expression
Une expression permet de traiter des données dans S7-SCL. Il existe des expressions
arithmétiques, logiques et de comparaison.
Fonction (FC)
Selon la norme CEI 1131-3, une fonction (FC) est un bloc de code sans données statiques.
Elle permet la transmission de paramètres dans le programme utilisateur. Aussi les fonctions
se prêtent-elles à la programmation de fonctions complexes se répétant souvent, comme les
calculs.
Hiérarchie d'appel
Pour pouvoir être exécutés, tous les blocs doivent préalablement être appelés. On appelle
hiérarchie d'appel, l'ordre et l'imbrication de ces appels.
Hors ligne
Il s'agit de l'état de fonctionnement dans lequel aucune liaison (physique, logique) n'est
établie entre la console de programmation et l'automate programmable.
Identificateur
Combinaison de lettres, de chiffres et de caractères de soulignement qui identifie un élément
de langage.
Identificateur d'opérande
L'identificateur d'opérande est la partie de l'opérande d'une opération qui contient des
informations. La zone de mémoire dans laquelle l'opération trouve une valeur qu'elle va
combiner ou la grandeur d'une valeur qu'elle va combiner en sont des exemples. Dans
l'instruction "Valeur := EB10", "EB" est l'identificateur d'opérande ("E" signifie la zone
d'entrée de la mémoire, "B" signifie un octet dans cette zone).
Instance
On désigne par instance l'appel d'un bloc fonctionnel. Un bloc de données d'instance ou une
instance locale lui sont associés. Si, par exemple, un bloc fonctionnel est appelé n fois avec
des paramètres et ds noms de blocs de données différents dans le programme utilisateur
STEP 7, il existe n instances de ce bloc.
Instruction
Une instruction est la plus petite unité autonome d'un programme utilisateur écrit dans un
langage textuel. Il s'agit d'une tâche que doit exécuter le processeur.
Instruction CASE
L'instruction CASE permet de réaliser un branchement. Elle sert à sélectionner 1 parmi n
parties de programme en fonction de la valeur d'une expression de sélection.
Instruction CONTINUE
Dans S7-SCL, l'instruction CONTINUE permet d'abandonner le parcours momentané de la
boucle d'une instruction d'itération (FOR, WHILE ou REPEAT).
Instruction EXIT
Structure dans un programme qui sert à mettre fin à une boucle à un endroit quelconque et
indépendamment de conditions.
Instruction FOR
Structure dans un programme. L'instruction FOR exécute une séquence d'instructions dans
une boucle et des valeurs successives sont alors affectées à une variable (variable de
contrôle).
Instruction GOTO
Structure dans un programme. Une instruction GOTO réalise le saut immédiat à un repère
donné et par conséquent à une autre instruction dans le même bloc.
Instruction REPEAT
Structure dans un programme qui sert à répéter une séquence d'instructions jusqu'à la
réalisation d'une condition d'abandon.
Instruction RETURN
Structure dans un programme ordonnant à l'ordinateur de quitter le bloc actif.
Interface d'appel
L'interface d'appel est définie par les paramètres d'entrée, de sortie et d'entrée/sortie
(paramètres formels) d'un bloc dans le programme utilisateur STEP7. Ces paramètres sont
remplacés par les paramètres effectifs lors de l'appel du bloc.
Mémento (M)
Un mémento est une zone de mémoire dans la mémoire système d'une CPU SIMATIC S7
qui peut être adressée en écriture et en lecture (par bit, octet, mot et double mot).
L'utilisateur peut employer la zone de mémento pour y enregistrer des résultats
intermédiaires.
Mémoire image
Les états de signaux des modules d'entrées et de sorties TOR sont sauvegardés dans une
mémoire image dans la CPU. On distingue la mémoire image des entrées (MIE) et la
mémoire image des sorties (MIS).
Mnémonique
Un mnémonique est un nom que l'utilisateur définit en respectant les règles de syntaxe
imposées. Une fois son affectation déterminée (par ex. variable, type de données, repère de
saut, bloc), ce nom peut être utilisé en programmation et en contrôle-commande. Exemple :
opérande : E 5.0, type de données : Bool, mnémonique : Bouton_arret_urg.
Mot-clé
Unité lexicale caractérisant un élément de langage, par exemple "IF".
Dans S7-SCL, les mots-clés servent à identifier le début d'un bloc, les sections de
déclaration, les instructions. Ils sont utilisés en outre pour les commentaires et les attributs.
Mot d'état
Le mot d'état fait partie des registres de la CPU. Il contient des informations d'état et des
informations d'erreur susceptibles de survenir dans le traitement d'instructions STEP 7. Les
bits d'état peuvent être lus et écrits par l'utilisateur, les bits d'erreur peuvent uniquement être
lus.
Multi-instance
Lorsque vous utilisez des multi-instances, le bloc de données d'instance contient les
données pour plusieurs blocs fonctionnels d'une hiérarchie d'appel.
Nombre réel
Un nombre réel est un nombre positif ou négatif représentant une valeur décimale comme
par exemple 0.339 ou –11.1.
Opérande
Un opérande est la partie d'une instruction indiquant l'objet que le processeur doit traiter. On
peut y accéder par une adresse absolue ou symbolique.
Opération
Une opération est la partie d'une instruction indiquant ce que le processeur doit faire.
Paramètre effectif
Les paramètres effectifs remplacent les paramètres formels lors de l'appel d'un bloc
fonctionnel (FB) ou d'une fonction (FC).
Exemple : le paramètre formel "Démarrer" est remplacé par le paramètre effectif "E.3.6".
Paramètre formel
Un paramètre formel "réserve la place" pour le paramètre effectif dans les blocs de code
paramétrables. Pour les FB et les FC, c'est l'utilisateur qui déclare les paramètres formels ;
ils existent déjà pour les SFB et les SFC. A l'appel du bloc, un paramètre effectif est affecté
au paramètre formel afin que le bloc appelé utilise les valeurs en cours. Les paramètres
formels font partie des données locales du bloc et se répartissent en paramètres d'entrée, de
sortie et d'entrée/sortie.
Paramètres d'entrée
Seuls les fonctions et les blocs fonctionnels possèdent des paramètres d'entrée. Ils
permettent de transmettre des données à traiter au bloc appelé.
Paramètres d'entrée/sortie
Les fonctions et les blocs fonctionnels possèdent des paramètres d'entrée/sortie. Ils
permettent de transmettre des données au bloc appelé ; elles y sont alors traitées et les
résultats sont ensuite stockés dans la même variable.
Paramètres de sortie
Les paramètres de sortie d'un bloc permettent de transmettre des résultats au bloc appelant
dans le programme utilisateur.
Pas à pas
C'est un mode de test utilisé à des fins de mise au point par le débogueur de S7-SCL. Il
permet d'exécuter le programme instruction par instruction tout en le visualisant dans la
fenêtre de résultat.
Programmation structurée
La résolution de tâches d'automatisation complexes appelle la subdivision du programme
utilisateur en parties délimitées de programmes (blocs). La structure du programme
utilisateur peut être fonctionnelle ou conforme à la structure technologique de l'installation.
Programmation symbolique
Le langage de programmation S7-SCL permet de remplacer les opérandes par des chaînes
de caractères symboliques, les mnémoniques : l'opérande A1.1 peut par exemple être
remplacé par "Vanne_17". Le lien entre l'opérande et la chaîne de caractères qui lui est
associée est établi par la table des mnémoniques.
Programme utilisateur
Le programme utilisateur contient toutes les instructions et déclarations ainsi que toutes les
données nécessaires au traitement des signaux qui permettent de commander une
installation ou un processus. Il est associé à un module programmable (par exemple CPU,
FM) et peut être structuré en unités plus petites, les blocs.
Programme utilisateur S7
Dossier pour les blocs qui vont être chargés dans un module programmable S7 (par
exemple CPU, FM) pour y être exécutés afin de commander une installation ou un
processus.
Projet
Un projet est un dossier contenant tous les objets d'une solution d'automatisation,
indépendamment du nombre de stations, de modules et de leur mise en réseau.
Protection de bloc
On entend par protection de bloc la possibilité de protéger des blocs individuels contre la
décompilation en effectuant la compilation de la source avec le mot-clé
"KNOW_HOW_PROTECTED".
Règle lexicale
Les règles lexicales constituent le niveau inférieur de la description formelle du langage
S7-SCL. Elles m'autorisent pas l'utilisation d'un format libre, c'est-à-dire que vous ne pouvez
ajouter aux blocs ni espaces ni caractères de commande.
Règle syntaxique
Les règles syntaxiques constituent le niveau supérieur de la description formelle du langage
S7-SCL. Elles autorisent l'utilisation d'un format libre, c'est-à-dire que vous pouvez par
exemple ajouter aux blocs des espaces et des caractères de commande.
RUN
A l'état de fonctionnement RUN (marche), le programme utilisateur est traité, la mémoire
image est actualisée cycliquement et toutes les entrées TOR sont validées.
RUN-P
L'état de fonctionnement RUN-P se distingue de l'état de fonctionnement RUN en ce qu'il
autorise l'application sans restrictions de nombreuses fonctions de la console de
programmation.
S7-SCL
Langage évolué proche du PASCAL, conforme à la norme DIN EN 61131-3 (CEI 1131-3),
adapté à la programmation de tâches complexes d'automatisation, comme par exemple des
algorithmes ou du traitement de données. S7-SCL est l'abréviation de "Structured Control
Language".
Section de déclaration
C'est dans la section de déclaration que vous déclarez les données locales d'un bloc de
code quand vous écrivez le programme avec un éditeur de texte.
La déclaration des variables d'un bloc se décompose en plusieurs sections servant à
déclarer les différents paramètres du bloc. La section de déclaration IN, par exemple,
contient la déclaration des paramètres d'entrée, la section OUT celle des paramètres de
sortie.
Sémantique
Relation entre les éléments symboliques d'un langage de programmation et leur
signification, leur interprétation et leur utilisation.
Signet
Les signets sont des marques de texte temporaires qui repèrent un emplacement
quelconque au sein d’une source. Elles facilitent la navigation dans la source.
Source
Partie de programme élaborée avec un éditeur graphique ou textuel et donnant par
compilation un programme utilisateur exécutable.
Source S7-SCL
La source S7-SCL est le fichier S7-SCL dans lequel vous créez le programme qui va ensuite
être compilé avec le compilateur de S7-SCL.
Structure (STRUCT)
Type de données complexe composé d'éléments de données quelconques de types de
données différents. Les types de données composant une structure peuvent être eux-
mêmes simples ou complexes.
Tableau
Un tableau (ARRAY) est un type de données complexe formé d'éléments de données de
même type, pouvant eux-mêmes être des types de données simples ou complexes.
Temporisation
Les temporisations sont partie constituante de la mémoire système de la CPU. Leur contenu
est actualisé par le système d'exploitation de façon asynchrone au programme utilisateur.
Des instructions en STEP 7 permettent de définir la fonction exacte de la cellule de
temporisation (par ex. retard à la montée) et d'en lancer l'exécution.
Temps de cycle
Le temps de cycle est le temps que met la CPU à traiter une fois le programme utilisateur.
Type de bloc
L'architecture des blocs de STEP 7 distingue les types de blocs suivants : bloc
d'organisation, bloc fonctionnel, fonction, bloc de données de même que bloc fonctionnel
système, fonction système, bloc de données système et type de données utilisateur.
Type de paramètre
Un type de paramètre est un type de données spécial réservé aux temporisations, aux
compteurs et aux blocs. Vous pouvez l'utiliser pour les paramètres d'entrée de blocs
fonctionnels et de fonctions ainsi que pour les paramètres d'entrée/sortie des blocs
fonctionnels seulement, afin de transmettre des temporisations, des compteurs et des blocs
au bloc appelé.
Types de données
Les types de données déterminent
• la nature et la signification des éléments de données,
• les zones de mémoire et les plages de valeurs autorisées pour les éléments de données,
• le nombre d'opérations que vous pouvez réaliser avec un opérande de ce type de
données et
• la manière dont les éléments de données sont écrits.
UDT
Voir : Type de données utilisateur
Valeur initiale
Valeur attribuée à une variable à la mise en route du système.
Variable
Une variable définit une donnée de contenu variable pouvant être utilisée dans le
programme utilisateur STEP 7. Elle comprend un opérande (par ex. M3.1) et un type de
données (par ex. BOOL) et peut être identifiée par un mnémonique (par ex. B.
BANDE_MARCHE). Vous la déclarez dans la section de déclaration.
Visualisation
Visualiser un programme vous permet d'en contrôler le déroulement dans la CPU. Pour cela,
des noms de variables et de paramètres par exemple sont affichés par ordre chronologique
avec leurs valeurs en cours qui sont mises à jour cycliquement.
Zone de mémoire
Une unité centrale dans SIMATIC S7 possède trois zones de mémoire, à savoir la mémoire
de chargement, la mémoire de travail et la zone système.
DATE 7-4
E
DATE_AND_TIME 7-5
DATE_TO_DINT 14-3 Editer une source SCL 4-10 - 4-18
Débogueur 1-2 Editeur 1-2
Début de bloc 6-3 Effacement général de la mémoire
Débutants de la CPU 4-27
exemple 3-1 Effacer des parties de texte 4-12
Déclaration 6-9 Egalité 11-1
Déclaration de variables statiques 8-2 Eliminer les erreurs après la compilation 4-23
Déclaration d'une instance 8-7 EN 12-45
Définir les propriétés de l'objet 4-6 ENO 12-46
Définition des entrées/sorties 12-42 Enregistrer une source S7-SCL 4-24
Définition des entrées/sorties (FB/SFB) 12-34 Entrées/sorties de périphérie 10-2
Définition des paramètres 12-27 Environnement d'appel 4-33
Définition des paramètres d'une fonction de Environnement de développement 1-2
comptage 13-3 Environnement requis 2-6
Définition des paramètres d'une fonction de EQ_STRNG 14-17
temporisation 13-11 Erreurs de compilation 4-23
Définition d'un environnement d'appel des ET 11-1
blocs 4-33 Etat de fonctionnement 4-38
Définition d'un environnement d'appel des Exécution de sous-programme 6-12
points d'arrêt 4-35 Exemple "Saisie de valeurs de mesure" 3-1
DELETE 14-15 Exemples 7-20, 12-35, 12-37, 12-44, 13-7,
Démarrer SCL 4-1 14-7, 14-10, 14-12
Description du langage 5-1, 15-1 temporisations 13-20
Désignation de bloc 5-7, 6-3, 6-4 EXP 14-9
Désignations EXPD 14-9
règles lexicales 15-21 Expression booléenne 11-11
Désinstallation Expression simple 11-6
de la licence d'utilisation 2-5 Expressions 11-1 - 11-10
DI_STRNG 14-19 Expressions arithmétiques 11-7
Diagrammes syntaxiques 5-1, 15-1 Expressions de comparaison 11-12, 11-13
Différence 11-1
DINT 7-3 F
DINT_TO_DATE 14-3
DINT_TO_DWORD 14-3 FC 6-15, 6-16, 12-27, 12-38
DINT_TO_INT 14-3, 14-4 Fermer une source S7-SCL 4-5
DINT_TO_TIME 14-3 Fichier d'information de compilation 6-23
DINT_TO_TOD 14-4 Fichier d'informations compilation 4-22
Disquette d'autorisation 2-6 Fin de bloc 6-3
DIV 11-7 FIND 14-16
H J
Horodatage de la CPU 4-40 Jeu de caractères 5-4
I L
I_STRNG 14-19 Label (repère de saut) 9-18
Identificateur d'opérande 5-9 Language de programmation
Identificateur standard 5-7 évolué 1-1, 1-4, 1-5
Identificateurs LE_STRNG 14-17
définition 5-6 Lecture des valeurs de sortie
description formelle du langage 15-17, définition des sorties à l'appel
15-18 de la FC 12-42
exemple 5-6 définition des sorties à l'appel du FB 12-35
règles 5-6 LEFT 14-14
Imprimer une source SCL 4-25 LEN 14-13
Indentation des lignes 4-14 Liberté de format 5-2, 5-3
Initialisation 8-3 Licence 2-2, 2-3
Insérer des appels de bloc 4-17 Licence d'utilisation 2-6
Insérer des modèles de bloc 4-17 Licence d'utilisation avec Automation License
Insérer des modèles de commentaire 4-17 Manager 2-1
Insérer des modèles de paramètre 4-18 License Key 2-1, 2-5
Insérer des structures de contrôle 4-18 License Manager 2-1, 2-2
INSERT 14-15 Lieu de stockage de variables 8-5
Installation 2-6 Ligne de commentaire 5-16
Règles d'utilisation des License Keys 2-5 STRING 7-7 - 7-9, 9-11, 14-13 - 14-20
Règles lexicales 15-21 STRING_TO_CHAR 14-4
Règles pour les sources SCL 4-8 STRNG_DI 14-19
Règles syntaxiques 15-34 STRNG_I 14-19
Remplacer des parties de texte 4-10 STRNG_R 14-19
Repères de saut 9-18 STRUCT 7-12, 7-13
REPLACE 14-16 Structures 7-12
Rétablir une action d'édition 4-10 Style et couleur des caractères 4-15, 4-25
RIGHT 14-14
ROL 14-11 T
ROR 14-11
ROUND 14-6 Tableau (ARRAY)
Affectation de valeur
à une variable du type de données
S
ARRAY 12-5
S_CD 13-6 initialisation 8-3
S_CU 13-6 Tableaux 7-10
S_CUD 13-7 Taille de papier 4-24
S_ODT 13-17 TAN 14-10
S_ODTS 13-18 Temporisations 13-9
S_OFFDT 13-19 appel d'une fonction de temporisation 13-9
S_PEXT 13-16 définition des paramètres d'une fonction
S_PULSE 13-15 de temporisation 13-11
S5Time 13-13 démarrer une temporisation sous forme
S5TIME 7-4 de retard à la montée (S_ODT) 13-17
S7-SCL 1-2, 1-4 démarrer une temporisation sous forme de
S7-SCL retard à la montée mémorisé (S_ODTS)
fonctionnement 1-2 13-18
fonctions 1-4 démarrer une temporisation sous forme de
Saut dans le programme 12-12 retard à la retombée (S_OFFDT) 13-19
Saut de page 4-25 démarrer une temporisation sous forme
SCL d'impulsion (S_PULSE) 13-15
interface utilisateur 4-2 démarrer une temporisation sous forme
Section de déclaration 8-3, 8-11 d'impulsion prolongée (S_PEXT) 13-16
composition 6-9 exemples 13-20
définition 6-9 saisie et exploitation de la valeur de temps
initialisation 8-3 13-13
paramètres de bloc 8-12, 8-13 Temps de cycle 4-40
règles syntaxiques 15-37 Test avec points d'arrêt 4-31
variables statiques 8-10 Test en pas à pas 4-31
variables temporaires 8-11 TIME 7-4
Section des instructions TIME_OF_DAY 7-4
composition 6-11 TIME_TO_DINT 14-4
règles syntaxiques 15-45 TIMER 7-16
Sections de déclaration TOD_TO_DINT 14-4
présentation 8-9 TRUNC 14-6
Sélectionner des parties de texte 4-11 Type de données ANY 7-19
SFC/SFB 14-31 Type de données ARRAY 7-10
SHL 14-11 Type de données COUNTER 7-16
SHR 14-11 Type de données DATE_AND_TIME 7-5
Signet 4-16 Type de données POINTER 7-17
SIN 14-10 Type de données STRING 7-7
Source 4-4 - 4-25, 6-11, 6-21 Type de données STRUCT 7-12
Soustraction 11-1 Type de données TIMER 7-16
SQR 14-9 Types de données
SQRT 14-9 description 7-1
STEP 7 Types de données binaires 7-3
fonctions de test 4-36 Types de données BLOCK 7-17
Types de données complexes 7-2, 7-5, 7-7