Vous êtes sur la page 1sur 406

s

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.

Copyright Siemens AG 2005 Tous droits réservés Exclusion de responsabilité


Toute communication et reproduction de ce document, toute Nous avons vérifié la conformité du contenu du présent document
exploitation ou communication de son contenu sont interdites, sauf avec le matériel et le logiciel qui y sont décrits. Ne pouvant
autorisation expresse. Tout manquement à cette règle est illicite et toutefois exclure toute divergence, nous ne pouvons pas nous
expose son auteur au versement de dommages et intérêts. Tous porter garants de la conformité intégrale. Si l'usage de ce manuel
nos droits sont réservés, notamment pour le cas de la délivrance devait révéler des erreurs, nous en tiendrons compte et
d'un brevet ou de l'enregistrement d'un modèle d'utilité apporterons les corrections nécessaires dès la prochaine édition.

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.

Connaissances de base requises


Ce manuel demande à l'utilisateur des connaissances générales dans le domaine des
techniques d'automatisation. .
Nous supposerons en outre que l'emploi d'ordinateurs ou de machines analogues (telles que
les consoles de programmation) ainsi que l'environnement Microsoft Windows 2000/XP lui
sont familiers et qu'il connaît le logiciel de base STEP 7 ainsi que le manuel
"Programmer avec STEP 7 V5.3".

Validité du manuel
Ce manuel s'applique au logiciel S7-SCL V5.3.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 iii
Avant-propos

Documentation de S7-SCL et du logiciel de base STEP 7


Le tableau ci-dessous indique la documentation existante sur STEP 7 et sur S7-SCL :

Manuels Contenu Numéro de référence


S7-SCL Connaissances fondamentales Notions de base et références à Le manuel ne peut pas être
et références consulter, expliquant l'élaboration commandé séparément. Il se
• S7-SCL pour SIMATIC S7-300/400 : d'un programme, la structure des trouve sur le CD livré avec le
Programmation de blocs programmes utilisateur et les logiciel, sur le CD "Manual
différents éléments de langage. Collection" et est disponible
sur Internet.
STEP 7 Connaissances Notions de base à l'adresse du 6ES7810-4CA07-8CW0
fondamentales personnel technique, marche à
suivre pour réaliser des tâches
• STEP 7 V5.3 - Getting Started d'automatisation avec STEP 7 et
• Programmer avec STEP 7 V5.3 SIMATIC S7-300/400.
• Configuration matérielle et
communication avec STEP 7 V5.3
• Pour une transition facile de STEP 5
à STEP 7
STEP 7 Manuels de référence Références à consulter, complétant 6ES7810-4CA07-8CW1
• Langages CONT/LOG/LIST pour les bases de STEP 7 par une
SIMATIC S7-300/400 description des langages de
programmation CONT, LOG et LIST
• Fonctions standard et fonctions
ainsi que des fonctions standard et
système pour SIMATIC S7-300/400
des fonctions système.

Aides en ligne Contenu Numéro de référence


Aide de S7-SCL Notions de base et références de Fait partie du logiciel SCL
SCL sous forme d'aide en ligne
Aide de STEP 7 Notions de base permettant de Fait partie du logiciel STEP 7
programmer et de configurer le
matériel avec STEP 7, sous forme
d'aide en ligne.
Aides de référence de CONT/LOG/LIST Références contextuelles Font partie du logiciel STEP 7
Aide de référence des SFB/SFC
Aide de référence des blocs
d'organisation
Aide de référence des fonctions CEI
Aide de référence des attributs système

S7-SCL V5.3 pour S7-300/400


iv A5E00324651-01
Avant-propos

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 v
Avant-propos

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/

Centre de formation SIMATIC


Nous proposons des cours de formation pour vous faciliter l'apprentissage des automates
programmables SIMATIC S7. Veuillez vous adresser à votre centre de formation régional ou
au centre principal à D 90327 Nuremberg.
Téléphone : +49 (911) 895-3200.
Internet: http://www.sitrain.com

S7-SCL V5.3 pour S7-300/400


vi A5E00324651-01
Avant-propos

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

Service & Support sur Internet


En plus de la documentation offerte, vous trouvez la totalité de notre savoir-faire en ligne sur
Internet à l'adresse suivante :
http://www.siemens.com/automation/service&support
Vous y trouvez :
• le bulletin d'informations qui vous fournit constamment les dernières informations sur le
produit,
• les documents dont vous avez besoin à l'aide de la fonction de recherche du Service &
Support,
• le forum où utilisateurs et spécialistes peuvent échanger informations,
• votre interlocuteur Automation & Drives sur place,
• des informations sur le service après-vente, les réparations, les pièces de rechange à la
rubrique "Service".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 vii
Avant-propos

S7-SCL V5.3 pour S7-300/400


viii A5E00324651-01
Sommaire

1 Présentation du produit ...........................................................................................................1-1


1.1 Domaine d'application de S7-SCL ..............................................................................1-1
1.2 Fonctionnement de S7-SCL ........................................................................................1-2
1.3 Fonctions offertes par S7-SCL ....................................................................................1-4
1.4 Nouveautés dans la version V5.3 SP1........................................................................1-6
2 Installation .................................................................................................................................2-1
2.1 Automation License Manager .....................................................................................2-1
2.1.1 Licence d'utilisation avec Automation License Manager ............................................2-1
2.1.2 Installation de Automation License Manager ..............................................................2-4
2.1.3 Règles d'utilisation des License Keys .........................................................................2-5
2.2 Installation ................................................................................................................... 2-6
2.2.1 Environnement requis .................................................................................................2-6
2.2.2 Installation de S7-SCL.................................................................................................2-6
3 Développement d'un programme S7-SCL..............................................................................3-1
3.1 Bienvenue dans l'exemple pour débutants "Saisie de valeurs de mesure" ................3-1
3.2 Enoncé du problème ...................................................................................................3-2
3.3 Composition d'un programme structuré avec S7-SCL................................................3-4
3.4 Définition des tâches partielles ...................................................................................3-6
3.5 Définition des interfaces entre blocs ...........................................................................3-8
3.6 Définition de l'interface d'entrée/sortie ......................................................................3-10
3.7 Définition de l'ordre des blocs dans la source...........................................................3-11
3.8 Définition des mnémoniques .....................................................................................3-11
3.9 Création de la fontion CARRE ..................................................................................3-12
3.9.1 Section des instructions de la fonction CARRE ........................................................3-12
3.10 Création du FB CALCUL ...........................................................................................3-13
3.10.1 Organigramme de EXPLOITER ................................................................................3-13
3.10.2 Section de déclaration du FB CALCUL.....................................................................3-14
3.10.3 Section des instructions du FB CALCUL ..................................................................3-15
3.11 Création du FB SAISIE..............................................................................................3-17
3.11.1 Organigramme de SAISIR.........................................................................................3-17
3.11.2 Section de déclaration du FB SAISIE .......................................................................3-18
3.11.3 Section des instructions du FB SAISIE .....................................................................3-20
3.12 Création du bloc d'organisation CYCLE....................................................................3-23
3.13 Données de test ........................................................................................................3-25
4 Utilisation de S7-SCL ...............................................................................................................4-1
4.1 Démarrer le logiciel S7-SCL........................................................................................4-1
4.2 Interface utilisateur ......................................................................................................4-2
4.3 Personnalisation de l'interface utilisateur ....................................................................4-3
4.4 Création et manipulation d'une source S7-SCL ..........................................................4-4
4.4.1 Créer une nouvelle source S7-SCL ............................................................................4-4
4.4.2 Ouvrir une source S7-SCL ..........................................................................................4-5
4.4.3 Fermer une source S7-SCL ........................................................................................4-5
4.4.4 Ouvrir des blocs ..........................................................................................................4-6
4.4.5 Définir les propriétés de l'objet ....................................................................................4-6
4.4.6 Générer des sources S7-SCL avec un éditeur standard ............................................4-6
4.4.7 Protection de bloc........................................................................................................4-7

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 ix
Sommaire

4.5 Règles pour les sources S7-SCL ................................................................................4-8


4.5.1 Règles générales pour les sources S7-SCL ...............................................................4-8
4.5.2 Ordre des blocs ...........................................................................................................4-8
4.5.3 Utilisation de mnémoniques ........................................................................................4-9
4.6 Editer dans des sources S7-SCL ..............................................................................4-10
4.6.1 Annuler la dernière action d'édition ...........................................................................4-10
4.6.2 Rétablir une action d'édition ......................................................................................4-10
4.6.3 Rechercher et remplacer des parties de texte ..........................................................4-10
4.6.4 Sélectionner des parties de texte..............................................................................4-11
4.6.5 Copier des parties de texte .......................................................................................4-11
4.6.6 Couper des parties de texte ......................................................................................4-12
4.6.7 Effacer des parties de texte ......................................................................................4-12
4.6.8 Positionner le curseur dans une ligne donnée ..........................................................4-13
4.6.9 Indentation des lignes selon la syntaxe ....................................................................4-14
4.6.10 Choisir le style et la couleur des caractères..............................................................4-15
4.6.11 Positionnement de signets dans le textes source.....................................................4-16
4.6.12 Insérer des modèles..................................................................................................4-17
4.6.12.1 Insérer des modèles de bloc .....................................................................................4-17
4.6.12.2 Insérer des appels de bloc ........................................................................................4-17
4.6.12.3 Insérer des modèles de commentaire.......................................................................4-17
4.6.12.4 Insérer des modèles de paramètre ...........................................................................4-18
4.6.12.5 Insérer des structures de contrôle.............................................................................4-18
4.7 Compiler und programme S7-SCL............................................................................4-19
4.7.1 Informations sur la compilation .................................................................................4-19
4.7.2 Choisir les options de compilation.............................................................................4-20
4.7.3 Compiler le programme.............................................................................................4-22
4.7.4 Créer un fichier d'informations compilation ...............................................................4-22
4.7.5 Eliminer les erreurs après la compilation ..................................................................4-23
4.8 Enregistrer et imprimer une source S7-SCL .............................................................4-24
4.8.1 Enregistrer une source S7-SCL ................................................................................4-24
4.8.2 Choisir la taille de papier ...........................................................................................4-24
4.8.3 Imprimer une source S7-SCL....................................................................................4-25
4.8.4 Choisir les options d'impression................................................................................4-25
4.9 Chargement de programmes ....................................................................................4-27
4.9.1 Effacement général de la mémoire de la CPU..........................................................4-27
4.9.2 Charger des programmes utilisateur dans la CPU ...................................................4-27
4.10 Test des programmes ...............................................................................................4-29
4.10.1 Fonctions de test de S7-SCL ....................................................................................4-29
4.10.2 Informations sur la fonction de test "Visualiser" ........................................................4-30
4.10.3 Informations sur le test avec points d'arrêt / en pas à pas........................................4-31
4.10.4 Marche à suivre pour la visualisation ........................................................................4-32
4.10.4.1 Marche à suivre pour la visualisation ........................................................................4-32
4.10.4.2 Définition d'un environnement d'appel des blocs ......................................................4-33
4.10.5 Marche à suivre pour le test avec points d'arrêt .......................................................4-34
4.10.5.1 Définir des points d'arrêt ...........................................................................................4-34
4.10.5.2 Mettre fin au test avec points d'arrêt .........................................................................4-34
4.10.5.3 Activer, désactiver et effacer des points d'arrêt ........................................................4-34
4.10.5.4 Définition d'un environnement d'appel des points d'arrêt .........................................4-35
4.10.5.5 Test en pas à pas......................................................................................................4-36
4.10.6 Utilisation des fonctions de test de STEP 7 ..............................................................4-36
4.10.6.1 Générer et afficher les données de référence ..........................................................4-36
4.10.6.2 Vérification de la cohérence des blocs......................................................................4-37

S7-SCL V5.3 pour S7-300/400


x A5E00324651-01
Sommaire

4.11 Afficher et modifier les propriétés de la CPU ............................................................4-38


4.11.1 Afficher et modifier l'état de fonctionnement de la CPU............................................4-38
4.11.2 Afficher et régler la date et l'heure de la CPU...........................................................4-38
4.11.3 Afficher les données de la CPU ................................................................................4-39
4.11.4 Lire la mémoire de diagnostic de la CPU..................................................................4-39
4.11.5 Afficher/comprimer la mémoire utilisateur de la CPU ...............................................4-39
4.11.6 Afficher le temps de cycle de la CPU........................................................................4-40
4.11.7 Afficher l'horodatage de la CPU ................................................................................4-40
4.11.8 Afficher les blocs dans la CPU ..................................................................................4-40
4.11.9 Affichage des informations sur la communication de la CPU ...................................4-41
4.11.10 Affichage des piles de la CPU...................................................................................4-41
5 Notions fondamentales dans S7-SCL.....................................................................................5-1
5.1 Interprétation des diagrammes syntaxiques ...............................................................5-1
5.2 Jeu de caractères........................................................................................................5-4
5.3 Mots réservés ..............................................................................................................5-5
5.4 Identificateur ................................................................................................................5-6
5.5 Identificateur standard.................................................................................................5-7
5.6 Désignation de bloc.....................................................................................................5-7
5.7 Identificateur d'opérande.............................................................................................5-9
5.8 Désignation de temporisation....................................................................................5-10
5.9 Désignation de compteur ..........................................................................................5-10
5.10 Nombres ....................................................................................................................5-11
5.11 Chaîne de caractères ................................................................................................5-13
5.12 Mnémonique..............................................................................................................5-14
5.13 Bloc de commentaire.................................................................................................5-15
5.14 Ligne de commentaire...............................................................................................5-16
5.15 Variables....................................................................................................................5-17
6 Structure de programme S7-SCL ............................................................................................6-1
6.1 Blocs dans les sources S7-SCL ..................................................................................6-1
6.2 Ordre des blocs ...........................................................................................................6-2
6.3 Composition générale d'un bloc ..................................................................................6-3
6.4 Début et fin de bloc .....................................................................................................6-3
6.5 Attributs de bloc...........................................................................................................6-5
6.6 Commentaire de bloc ..................................................................................................6-7
6.7 Attributs système pour bloc .........................................................................................6-8
6.8 Section de déclaration.................................................................................................6-9
6.9 Attributs système pour paramètre .............................................................................6-10
6.10 Section des instructions ............................................................................................6-11
6.11 Instructions ................................................................................................................6-12
6.12 Composition d'un bloc fonctionnel (FB) ....................................................................6-13
6.13 Composition d'une fonction (FC)...............................................................................6-15
6.14 Composition d'un bloc d'organisation (OB) ...............................................................6-17
6.15 Composition d'un bloc de données (DB)...................................................................6-18
6.16 Composition d'un type de données utilisateur ..........................................................6-21
6.17 Options du compilateur dans les sources S7-SCL ...................................................6-23

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 xi
Sommaire

7 Types de données ....................................................................................................................7-1


7.1 Présentation des types de données dans S7-SCL .....................................................7-1
7.2 Types de données simples..........................................................................................7-3
7.2.1 Types de données binaires .........................................................................................7-3
7.2.2 Types de données sur caractère.................................................................................7-3
7.2.3 Types de données numériques ...................................................................................7-3
7.2.4 Types de données temporels ......................................................................................7-4
7.3 Types de données complexes ....................................................................................7-5
7.3.1 Type de données DATE_AND_TIME..........................................................................7-5
7.3.2 Type de données STRING ..........................................................................................7-7
7.3.3 Type de données ARRAY .........................................................................................7-10
7.3.4 Type de données STRUCT .......................................................................................7-12
7.4 Type de données utilisateur ......................................................................................7-14
7.4.1 Types de données utilisateur (UDT) .........................................................................7-14
7.5 Types de données pour paramètre ...........................................................................7-16
7.5.1 Types de données TIMER et COUNTER..................................................................7-16
7.5.2 Types de données BLOCK........................................................................................7-17
7.5.3 Type de données POINTER......................................................................................7-17
7.6 Type de données ANY ..............................................................................................7-19
7.6.1 Exemple de type de données ANY ...........................................................................7-20
8 Déclaration de variables locales et de paramètres ...............................................................8-1
8.1 Variables locales et paramètres de bloc .....................................................................8-1
8.2 Syntaxe générale d'une déclaration de variable ou de paramètre..............................8-2
8.3 Initialisation..................................................................................................................8-3
8.4 Déclaration d'accès à des zones de variable..............................................................8-5
8.5 Utilisation de multi-instances.......................................................................................8-7
8.6 Déclaration d'une instance ..........................................................................................8-7
8.7 Drapeau OK ................................................................................................................8-8
8.8 Sections de déclaration ...............................................................................................8-9
8.8.1 Présentation des sections de déclaration ...................................................................8-9
8.8.2 Variables statiques ....................................................................................................8-10
8.8.3 Variables temporaires ...............................................................................................8-11
8.8.4 Paramètres de bloc ...................................................................................................8-12
9 Déclaration de constantes et repères de saut .......................................................................9-1
9.1 Constantes ..................................................................................................................9-1
9.1.1 Déclaration de mnémoniques pour les constantes .....................................................9-2
9.1.2 Types de données des constantes .............................................................................9-3
9.1.3 Notation des constantes..............................................................................................9-4
9.1.3.1 Constante binaire........................................................................................................9-6
9.1.3.2 Constante entière........................................................................................................9-7
9.1.3.3 Constante réelle..........................................................................................................9-8
9.1.3.4 Constante sur caractère (caractère unique) ...............................................................9-9
9.1.3.5 Constante sur chaîne................................................................................................9-11
9.1.3.6 Constante de date.....................................................................................................9-13
9.1.3.7 Constante de durée ..................................................................................................9-13
9.1.3.8 Constante d'heure du jour.........................................................................................9-16
9.1.3.9 Constante de date et d'heure....................................................................................9-17
9.2 Déclaration de repères de saut .................................................................................9-18

S7-SCL V5.3 pour S7-300/400


xii A5E00324651-01
Sommaire

10 Données globales ...................................................................................................................10-1


10.1 Présentation des données globales ..........................................................................10-1
10.2 Zones de mémoire de la CPU ...................................................................................10-2
10.2.1 Présentation des zones de mémoire de la CPU .......................................................10-2
10.2.2 Adressage absolu des zones de mémoire de la CPU ..............................................10-3
10.2.3 Adressage symbolique des zones de mémoire de la CPU.......................................10-5
10.2.4 Adressage indexé des zones de mémoire de la CPU ..............................................10-6
10.3 Blocs de données......................................................................................................10-7
10.3.1 Présentation des blocs de données ..........................................................................10-7
10.3.2 Adressage absolu des blocs de données .................................................................10-8
10.3.3 Adressage indexé des blocs de données ...............................................................10-10
10.3.4 Adressage structuré des blocs de données ............................................................10-11
11 Expressions, opérations et opérandes ................................................................................11-1
11.1 Opérations .................................................................................................................11-1
11.2 Opérandes.................................................................................................................11-2
11.3 Syntaxe d'une expression .........................................................................................11-4
11.4 Expression simple .....................................................................................................11-6
11.5 Expressions arithmétiques ........................................................................................11-7
11.6 Expressions logiques ................................................................................................11-9
11.7 Expressions de comparaison ..................................................................................11-11
12 Instructions .............................................................................................................................12-1
12.1 Affectations de valeur................................................................................................12-1
12.1.1 Affecter une valeur à une variable de type de données simple ...............................12-2
12.1.2 Affecter une valeur à des variables de type STRUCT et UDT..................................12-3
12.1.3 Affecter une valeur à une variable de type ARRAY ..................................................12-5
12.1.4 Affecter une valeur à une variable de type STRING .................................................12-7
12.1.5 Affecter une valeur à une variable de type DATE_AND_TIME.................................12-8
12.1.6 Affecter une valeur à une variable absolue pour zones de mémoire........................12-9
12.1.7 Affecter une valeur à une variable globale..............................................................12-10
12.2 Instructions de contrôle ...........................................................................................12-12
12.2.1 Présentation des instructions de contrôle ...............................................................12-12
12.2.2 Conditions ...............................................................................................................12-13
12.2.3 Instruction IF............................................................................................................12-14
12.2.4 Instruction CASE .....................................................................................................12-16
12.2.5 Instruction FOR .......................................................................................................12-18
12.2.6 Instruction WHILE ...................................................................................................12-21
12.2.7 Instruction REPEAT ................................................................................................12-22
12.2.8 Instruction CONTINUE ............................................................................................12-23
12.2.9 Instruction EXIT.......................................................................................................12-24
12.2.10 Instruction GOTO ....................................................................................................12-25
12.2.11 Instruction RETURN................................................................................................12-26
12.3 Appel de fonctions et de blocs fonctionnels ............................................................12-27
12.3.1 Appel et transmission de paramètres......................................................................12-27
12.3.2 Appel de blocs fonctionnels ....................................................................................12-29
12.3.2.1 Appel d'un bloc fonctionnel (FB ou SFB) ................................................................12-29
12.3.2.2 Définition des paramètres du FB.............................................................................12-31
12.3.2.3 Définition des entrées (FB)......................................................................................12-33
12.3.2.4 Définition des entrées/sorties (FB)..........................................................................12-34
12.3.2.5 Lecture des valeurs de sortie (appel de FB) ...........................................................12-35
12.3.2.6 Exemple d'appel d'une instance globale .................................................................12-35
12.3.2.7 Exemple d'appel d'une instance locale ...................................................................12-37

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 xiii
Sommaire

12.3.3 Appel de fonctions...................................................................................................12-38


12.3.3.1 Appel d'une fonction (FC)........................................................................................12-38
12.3.3.2 Valeur de retour (FC) ..............................................................................................12-39
12.3.3.3 Paramètres de FC ...................................................................................................12-40
12.3.3.4 Définition des entrées (FC) .....................................................................................12-41
12.3.3.5 Définition des sorties et des entrées/sorties (FC) ...................................................12-42
12.3.3.6 Exemple d'appel de fonction ...................................................................................12-44
12.3.4 Paramètres définis automatiquement .....................................................................12-45
12.3.4.1 Paramètre d'entrée EN............................................................................................12-45
12.3.4.2 Paramètre de sortie ENO ........................................................................................12-46
13 Compteurs et temporisation..................................................................................................13-1
13.1 Compteurs .................................................................................................................13-1
13.1.1 Fonctions de comptage .............................................................................................13-1
13.1.2 Appel d'une fonction de comptage ............................................................................13-1
13.1.3 Définition des paramètres d'une fonction de comptage ............................................13-3
13.1.4 Saisie et exploitation de la valeur de comptage........................................................13-5
13.1.5 Compteur incrémental (S_CU) ..................................................................................13-6
13.1.6 Compteur décrémental (S_CD).................................................................................13-6
13.1.7 Compteur incrémental/décrémental (S_CUD) ..........................................................13-7
13.1.8 Exemple de fonction de comptage............................................................................13-7
13.2 Temporisations ..........................................................................................................13-9
13.2.1 Fonctions de temporisation .......................................................................................13-9
13.2.2 Appel d'une fonction de temporisation ......................................................................13-9
13.2.3 Définition des paramètres d'une fonction de temporisation ....................................13-11
13.2.4 Saisie et exploitation de la valeur de temps............................................................13-13
13.2.5 Démarrer une temporisation sous forme d'impulsion (S_PULSE) ..........................13-15
13.2.6 Démarrer une temporisation sous forme d'impulsion prolongée (S_PEXT) ...........13-16
13.2.7 Démarrer une temporisation sous forme de retard à la montée (S_ODT)..............13-17
13.2.8 Démarrer une temporisation sous forme de retard
à la montée mémorisé (S_ODTS)...........................................................................13-18
13.2.9 Démarrer une temporisation sous forme de retard
à la retombée (S_OFFDT).......................................................................................13-19
13.2.10 Exemple de fonction de temporisation ....................................................................13-20
13.2.11 Choix de la temporisation appropriée .....................................................................13-21
14 Fonctions standard de S7-SCL .............................................................................................14-1
14.1 Conversion de types de données..............................................................................14-1
14.1.1 Conversion de types de données..............................................................................14-1
14.1.2 Conversion automatique du type de données...........................................................14-2
14.1.2.1 Fonctions de conversion de classe A........................................................................14-2
14.1.3 Fonctions standard pour la conversion explicite du type de données ......................14-3
14.1.3.1 Fonctions de conversion de classe B........................................................................14-3
14.1.3.2 Fonctions d'arrondi et de troncature..........................................................................14-6
14.1.3.3 Exemples de conversion avec des fonctions standard .............................................14-7
14.2 Fonctions standard numériques ................................................................................14-9
14.2.1 Fonctions standard arithmétiques générales ............................................................14-9
14.2.2 Fonctions logarithmiques ..........................................................................................14-9
14.2.3 Fonctions trigonométriques .....................................................................................14-10
14.2.4 Exemples de fonctions standard numériques .........................................................14-10
14.3 Fonctions standard sur chaîne binaire ....................................................................14-11
14.3.1 Exemple de fonctions standard sur chaîne binaire .................................................14-12
14.4 Fonctions de traitement de chaîne de caractères ...................................................14-13
14.4.1 Fonctions de manipulation de chaîne de caractères ..............................................14-13
14.4.2 Fonctions de comparaison de chaînes de caractères ............................................14-17
14.4.3 Fonctions de conversion du type de données.........................................................14-19
14.4.4 Exemple de traitement de chaînes de caractères...................................................14-21

S7-SCL V5.3 pour S7-300/400


xiv A5E00324651-01
Sommaire

14.5 Fonctions de sélection de valeurs...........................................................................14-26


14.5.1 Fonctions de sélection de valeurs...........................................................................14-26
14.6 Fonctions système, blocs fonctionnels système et bibliothèque standard .............14-31
14.6.1 Fonctions système, blocs fonctionnels système et bibliothèque standard .............14-31
14.6.2 Interface d'échange avec les OB ............................................................................14-33
15 Description du langage ..........................................................................................................15-1
15.1 Description formelle du langage................................................................................15-1
15.1.1 Présentation des diagrammes syntaxiques ..............................................................15-1
15.1.2 Règles .......................................................................................................................15-2
15.1.3 Blocs terminaux des règles lexicales ........................................................................15-5
15.1.4 Caractères de mise en forme, séparateurs et opérations.........................................15-7
15.1.5 Mots-clés et identificateurs prédéfinis ..................................................................... 15-10
15.1.6 Identificateurs d'opérande et mots-clés de bloc......................................................15-14
15.1.7 Présentation des blocs non terminaux ....................................................................15-16
15.1.8 Présentation des symboles .....................................................................................15-16
15.1.9 Identificateurs ..........................................................................................................15-17
15.1.10 Attribution de noms dans S7-SCL...........................................................................15-18
15.1.11 Constantes et drapeaux prédéfinis .........................................................................15-20
15.2 Règles lexicales ......................................................................................................15-21
15.2.1 Présentation des règles lexicales............................................................................15-21
15.2.2 Désignations............................................................................................................15-21
15.2.3 Constantes ..............................................................................................................15-23
15.2.4 Adressage absolu....................................................................................................15-29
15.2.5 Commentaires .........................................................................................................15-31
15.2.6 Attributs de bloc.......................................................................................................15-32
15.2.7 Options du compilateur ...........................................................................................15-33
15.3 Règles syntaxiques .................................................................................................15-34
15.3.1 Présentation des règles syntaxiques ......................................................................15-34
15.3.2 Organisation des sources S7-SCL..........................................................................15-35
15.3.3 Composition des sections de déclaration................................................................15-37
15.3.4 Types de données dans S7-SCL ............................................................................15-42
15.3.5 Section des instructions ..........................................................................................15-45
15.3.6 Affectations de valeur..............................................................................................15-47
15.3.7 Appel de fonctions et de blocs fonctionnels ............................................................15-50
15.3.8 Instructions de contrôle ...........................................................................................15-52
16 Conseils et astuces ................................................................................................................16-1

Glossaire

Index

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 xv
Sommaire

S7-SCL V5.3 pour S7-300/400


xvi A5E00324651-01
1 Présentation du produit

1.1 Domaine d'application de S7-SCL


S7-SCL (Structured Control Language) est un langage de programmation évolué proche du
PASCAL, utilisé pour programmer des automates programmables avec SIMATIC S7.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 1-1
Présentation du produit

1.2 Fonctionnement de S7-SCL

Intégration à STEP 7
S7-SCL prend en charge le concept de blocs STEP 7.

OB FC FB DB UDT SFC SFB

Blocs STEP 7

Avec S7-SCL, vous pouvez créer les blocs STEP 7 suivants :


• OB
• FC
• FB
• DB
• UDT
Dans un programme S7, vous pouvez également combiner des blocs S7-SCL avec des
blocs issus d'autres langages de programmation STEP 7. Ces blocs sont en mesure de
s'appeler mutuellement. Les blocs S7-SCL peuvent également être enregistrés dans des
bibliothèques pour être insérés dans d'autres langues.
Puisque les programmes S7-SCL sont programmés sous forme de sources ASCII, ils
peuvent aisément être importés et exportés.
Il est possible de décompiler les blocs S7-SCL dans le langage de programmation LIST de
STEP 7 (liste d'instructions). Notez cependant qu'après un enregistrement dans LIST, il n'est
plus possible de les éditer dans S7-SCL.

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.

S7-SCL V5.3 pour S7-300/400


1-2 A5E00324651-01
Présentation du produit

La figure suivante fournit un aperçu des composants de l'environnement de développement :

SCL pour S7-300/400

Compilateur
Editeur séquentiel Débogueur

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 1-3
Présentation du produit

1.3 Fonctions offertes par S7-SCL


S7-SCL offre non seulement tous les avantages d'un langage de programmation évolué,
mais également des caractéristiques conçues spécialement pour permettre une
programmation structurée.

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)

Eléments de langage issus de la programmation de langages évolués


Création de programmes simple, rapide et pratiquement sans erreurs grâce à l'utilisation
d'éléments de langage performants, comme p. ex. :
• boucles d'exécution
• branchements alternatifs (IF ... THEN ... ELSE)
• sauts

Grande lisibilité du programme


Les caractéristiques suivantes augmentent la lisibilité du programme :
• programmation entièrement symbolique
• commentaires
• types de données élémentaires et types de données définis par l'utilisateur
• affichage de références croisées
• formatage automatique de l'entrée par indentation
• mise en couleur des éléments de langage en fonction de la syntaxe

S7-SCL V5.3 pour S7-300/400


1-4 A5E00324651-01
Présentation du produit

Débogueur du niveau de langage évolué


Le débogueur permet de tester le niveau de langage évolué du programme. Il offre les
fonctionnalités suivantes :
• visualisation continue de l'exécution du programme
• visualisation pas à pas grâce à des points d'arrêt qu'il est possible de définir
individuellement
• fonctionnalité Step-in (possibilité de sauter dans des blocs appelés durant le test)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 1-5
Présentation du produit

1.4 Nouveautés dans la version V5.3 SP1

Extension des langages


Une extension de S7-SCL V5.3 SP1 a été réalisée avec de nouveaux utilitaires de langage
définis par CEI 61131-3 :
• fonctions de traitement de valeurs en tant que fonctions S7-SCL internes (SEL, MAX,
MIN, LIMIT, MUX)
• prise en charge de la représentation BCD de nombres entiers par des fonctions de
conversion (BCD_TO_INT, INT_TO_BCD, etc.)
• opérateur d'affectation => pour paramètres de sortie de fonctions
• initialisation de champs avec des parenthèses
• nouvelles fonctions de conversion (BYTE_TO_INT, INT_TO_BYTE, etc.)

Paramètres du compilateur dans la source


Les paramètres du compilateur peuvent être enregistrés dans des sources S7-SCL ou dans
des fichiers d'information de compilation. Vous avez ainsi la possibilité de sauvegarder les
propriétés d'une compilation spécifique à une source.

Fonctions de test étendues


• Les incohérences de blocs et les conflits d'horodatage dans les blocs S7-SCL peuvent
être déterminés et corrigés avec la fonction de test "Vérifier la cohérence des blocs" de
STEP 7. Cette fonction de test est disponible à partir de STEP 7 Version 5.3 SP2.
• La fonction de test "Visualiser" peut être mise en œuvre de manière plus précise par la
définition d'environnements d'appel.
• La zone de visualisation de la fonction de test "Visualiser" peut être restreinte de manière
précise par sélection d'une partie dans la source.

Impression en couleurs
Il est possible d'imprimer les sources S7-SCL en couleurs.

Fonction de recherche étendue


S7-SCL permet à présent également la recherche à partir de la position du curseur vers le
haut ainsi que la recherche dans une sélection.

Positionnement de signets dans le texte source


L'utilisation de signets vous permet de naviguer rapidement dans une source.

S7-SCL V5.3 pour S7-300/400


1-6 A5E00324651-01
Présentation du produit

Création de blocs S7-SCL en utilisant des jeux de caractères de langues étrangères


Les sources S7-SCL peuvent contenir des textes dans des jeux de caractères de langues
étrangères. Vous pouvez ainsi créer des blocs destinés au marché mondial, dans lesquels
les principales parties visibles pour l'utilisateur apparaissent dans des jeux de caractères de
langues étrangères (p. ex. les mnémoniques de blocs, les attributs et les commentaires).
Vous trouverez de plus amples informations sur les jeux de caractères de langues
étrangères dans le fichier Lisezmoi.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 1-7
Présentation du produit

S7-SCL V5.3 pour S7-300/400


1-8 A5E00324651-01
2 Installation

2.1 Automation License Manager

2.1.1 Licence d'utilisation avec Automation License Manager

Automation License Manager


Pour pouvoir utiliser le logiciel de programmation, une "License Key" spécifique au produit
(licence d'utilisation) est nécessaire. A partir de la version V5.3 de S7-SCL, celle-ci est
installée par Automation License Manager.
Automation License Manager est un produit logiciel de Siemens AG. Il permet de gérer des
"License Keys" (représentants techniques de licences) dans l'ensemble du système.
Automation License Manager est disponible :
• sur le support d'installation de STEP 7
• sur les pages Internet de A&D Customer Support de Siemens AG, sous forme de produit
à télécharger.
Automation License Manager dispose d'une aide en ligne contextuelle intégrée, 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. Vous y trouverez des informations
détaillées sur la fonctionnalité et l'utilisation de Automation License Manager.

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

Certificate of License (CoL)


Le "Certificate of License" contenu dans la livraison des produits respectifs constitue la
preuve juridique du droit d'utilisation. Seul le propriétaire du CoL ou les personnes
mandatées sont autorisées à utiliser le produit respectif.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 2-1
Installation

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.

S7-SCL V5.3 pour S7-300/400


2-2 A5E00324651-01
Installation

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.

Type de licence Description


Single License L'utilisation du logiciel est autorisée pour une durée illimitée sur un ordinateur
quelconque.
Floating License L'utilisation du logiciel est autorisée pour une durée illimitée sur un réseau
(utilisation "à distance").
Trial License L'utilisation du logiciel est restreinte :
• à une validité de 14 jours au maximum,
• à un nombre de jours défini à partir de la première utilisation,
• à l'utilisation pour test et validation (à l'exclusion de toute responsabilité).
Rental License L'utilisation du logiciel est restreinte :
• à une validité de 50 jours au maximum
• à un nombre donné d'heures d'utilisation
Upgrade License Une mise à niveau peut être nécessaire en raison d'exigences spécifiques de l'état
du système :
• Une licence de mise à niveau permet de transformer une licence d'une
"ancienne" version x en une licence de version >x+....
• Une mise à niveau peut p. ex. être requise en raison d'extension des
capacités.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 2-3
Installation

2.1.2 Installation de Automation License Manager

L'installation de Automation License Manager est réalisée par un Setup. Le logiciel


d'installation de Automation License Manager se trouve sur le CD du produit STEP 7.
Vous pouvez installer Automation License Manager avec S7-SCL ou ultérieurement.

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.

Installation ultérieure de "License Keys" (clés de licence)


Si vous démarrez le logiciel et qu'aucune "License Key" (clé de licence) n'est présente, vous
obtenez un message correspondant.

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".

S7-SCL V5.3 pour S7-300/400


2-4 A5E00324651-01
Installation

2.1.3 Règles d'utilisation des License Keys

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".

Vous pouvez appeler l'aide en ligne contextuelle de Automation License Manager en


appuyant sur la touche F1 ou en choisissant la commande de menu ? > Aide de License
Manager.
Cette aide en ligne contient toutes les informations relatives à la fonctionnalité et à
l'utilisation des "License Keys".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 2-5
Installation

2.2 Installation

2.2.1 Environnement requis

Environnement logiciel requis


Le logiciel S7-SCL V5.3 SP1 est exécutable sur une PG ou un PC sur lesquels le logiciel de
base STEP 7 V5.3 ou supérieur est installé.
Vous trouverez les conditions relatives au système d'exploitation dans le fichier Lisezmoi.wri.

Environnement matériel requis


S7-SCL demande le même environnement que le logiciel de base STEP 7. La place
mémoire nécessaire à S7-SCL V5.3 SP1 est indiquée dans le fichier Lisezmoi.wri.

2.2.2 Installation de S7-SCL

Démarrage du programme d'installation


S7-SCL contient un programme "Setup" qui effectue automatiquement l'installation. Il vous
donne toutes les indications nécessaires au cours de son exécution.
Procédez de la manière suivante :
1. Dans le Panneau de configuration de Windows, cliquez deux fois sur l'icône
"Ajout/Suppression de programmes" pour ouvrir la boîte de dialogue permettant d'installer
un logiciel.
2. Cliquez sur "Installer".
3. Insérez le support de données dans le lecteur et cliquez sur "Suite". Windows cherche
alors le programme d'installation "Setup.exe".
4. Suivez pas à pas les instructions affichées par ce programme.

Installation de "License Keys"


Lors de l'installation, le programme vérifie si une "License Key" correspondante existe sur le
disque dur. Si aucune "License Key" valide n'est reconnue, un message vous avertit que
vous ne pouvez utiliser le logiciel qu'en présence d'une "License Key". Vous pouvez, si vous
le désirez, installer immédiatement les "License Keys" ou bien poursuivre l'installation de
STEP 7 et installer les "License Keys" ultérieurement. Dans le premier cas, insérez la
disquette "License Key" fournie lorsque le message correspondant vous y invite.

S7-SCL V5.3 pour S7-300/400


2-6 A5E00324651-01
3 Développement d'un programme S7-SCL

3.1 Bienvenue dans l'exemple pour débutants "Saisie de valeurs


de mesure"

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.

Eléments de langage S7-SCL employés


Notre exemple présente entre autres les éléments de langage suivants :
• Composition et utilisation des différents types de bloc de S7-SCL,
• Appel des blocs avec transmission et exploitation des paramètres,
• Divers formats d'entrée et de sortie,
• Programmation à l'aide de types de données simples et de tableaux,
• Initialisation de variables,
• Structures de programme avec utilisation d'aiguillages et de boucles.

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.

Fonctions de test disponibles


Le programme est conçu pour être testé rapidement à l'aide des commutateurs de l'entrée et
des indicateurs de la sortie. Pour un test plus détaillé, utilisez les fonctions de test de
S7-SCL.
De plus, toutes les possibilités offertes par le logiciel de base STEP 7 sont à votre
disposition, indépendamment du langage utilisé.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-1
Développement d'un programme S7-SCL

3.2 Enoncé du problème

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.

Saisie des valeurs de mesure


Vous indiquez une valeur de mesure au moyen des 8 commutateurs d'entrée. Il s'agit de
l'enregistrer en mémoire dans le tableau des valeurs de mesure à l'instant exact d'un front
au commutateur de saisie (voir la figure ci-dessous).
La plage exigée pour les valeurs de mesure étant de 0 à 255, 1 octet est nécessaire à
l'entrée.

Traitement des valeurs de mesure


Le tableau de valeurs de mesure sera organisé sous forme de mémoire circulante contenant
8 enregistrements au plus.
Lorsqu'un front est détecté à un commutateur de tri, il faut trier par ordre croissant les
valeurs enregistrées dans le tableau des valeurs de mesure. Ensuite, il faut calculer la racine
carrée et le carré de chaque valeur. Les fonctions de traitement nécessitent 1 mot.

Saisie des données : x=Evaluation du front

Commutateur de
saisie Valeur de mesure Commutateur de tri
X 1 1 1 1 1 1 1 1 X

255

Racine carrée Carré

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

Saisie des valeurs Tri des valeurs Calcul des résultats


de mesure de mesure

S7-SCL V5.3 pour S7-300/400


3-2 A5E00324651-01
Développement d'un programme S7-SCL

Sélection pour les sorties


Le module de sortie ne pouvant indiquer qu'une seule valeur à la fois, il faudra disposer des
possibilités suivantes :
• Sélection d'un élément dans une liste,
• Choix entre valeur de mesure, racine carrée et carré.
La valeur à indiquer est sélectionnée de la manière suivante :
• Trois commutateurs forment un codage qui est validé en cas de front à un quatrième
commutateur, le commutateur de codage. Ceci permet de calculer l'adresse de la sortie.
• Trois valeurs sont mises à disposition pour la sortie à la même adresse, la valeur de
mesure, la racine carrée et le carré. Deux inverseurs sont à prévoir pour choisir une
valeur parmi les trois.

Saisie des données : x=Evaluation du front


Commutateur sur module d'entrée 1
Deux inverseurs Codage 1 Commutateur de codage
0 1 0 X

Racine carrée Valeur de mesure


ou carré ou 3
résultat

Valeur de mesure Racine carrée Carré

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

Valeurs triées Résultats

Sortie des données :


Affichage sur le module 4
de sortie
Sortie

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-3
Développement d'un programme S7-SCL

3.3 Composition d'un programme structuré avec S7-SCL

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 blocs d'organisation constituent l'interface entre le système d'exploitation


de la CPU S7 et le programme utilisateur. C'est ici qu'est défini l'ordre
OB d'exécution des blocs du programme utilisateur.

Les blocs fonctionnels sont des blocs de code à données statiques. Le FB


FB disposant d'une mémoire, il est possible d'accéder à ses paramètres (par ex.
des sorties) depuis n'importe quelle position du programme utilisateur.

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.

S7-SCL V5.3 pour S7-300/400


3-4 A5E00324651-01
Développement d'un programme S7-SCL

Rangement des blocs dans des sources S7-SCL


Un programme S7-SCL se compose d'une ou de plusieurs sources S7-SCL. Une source
peut contenir un seul bloc ou un programme complet constitué de différents blocs.

Une source pour Plusieurs sources pour


un programme un programme

Source Source Source


SCL SCL SCL
pour pour pour
. OB1 FC2 FB22
FB22
.
.
.
FC2
. FB22
. FC2
. DB
OB1 D'instance
OB1
.

Source SCL Dossier Blocs


Hors ligne

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-5
Développement d'un programme S7-SCL

3.4 Définition des tâches partielles

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.

CYCLE SAISIE CALCUL


Bloc d'organisation (OB) Bloc fonctionnel (FB) Bloc fonctionnel (FB)

Saisie des Tri des SQRT


Entrée des valeurs de valeurs de
données mesure (racine carrée)
mesure
et CARRE
Appel Fonctions (FC)
Cycli-
que
Adressage et
Sortie des sélection de Calcul des Racine carrée,
données la sortie résultats carré

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

S7-SCL V5.3 pour S7-300/400


3-6 A5E00324651-01
Développement d'un programme S7-SCL

Choix et affectation des types de bloc possibles


Les différents blocs ont été choisis d'après les critères suivants :

Fonction Nom de bloc


Un programme utilisateur ne peut être déclenché que dans un OB. Les valeurs de ⇒ OB "CYCLE"
mesure devant être saisies cycliquement, il nous faut un OB d'appel cyclique (OB1).
Une partie du traitement - Entrée des données et Sortie des données - sera
programmée dans l'OB.
Pour la tâche partielle Saisie des valeurs de mesure, il nous faut un bloc à mémoire, ⇒ FB "SAISIE"
donc un FB, puisque certaines données locales (la mémoire circulante, par exemple)
doivent être conservées d'un cycle de programme au suivant. Le lieu propre à
l'Enregistrement des données (mémoire) est le bloc de données d'instance
SAISIE_DONNEES. Le même FB peut encore se charger de la tâche partielle
Adressage et sélection de la sortie, puisqu'il dispose des données requises.
Dans le choix du type de bloc qui assumera les tâches partielles Tri des valeurs de ⇒ FB "CALCUL"
mesure et Calcul des résultats, il faut tenir compte du fait qu'une mémoire tampon de
sortie doit être créée qui contiendra, pour chaque valeur de mesure, la racine carrée
et le carré résultant des calculs. Seul un FB entre en ligne de compte. Comme il est
appelé par un FB de rang supérieur, il n'a pas besoin de DB en propre. Ses données
d'instance peuvent être stockées dans le bloc de données d'instance du bloc
appelant.
Pour assumer la tâche partielle Calcul de la racine carrée ou du carré, c'est une FC ⇒ FC "SQRT" (racine
qui convient le mieux, parce que le résultat peut être retourné en tant que valeur de la carrée) et
fonction. En outre, le calcul ne nécessite pas de données devant être conservées au- ⇒ FC "CARRE"
delà d'un cycle d'exécution du programme. La fonction standard de S7-SCL SQRT
peut servir à calculer la racine carrée. Pour calculer le carré, il faut créer une fonction
CARRE qui vérifie aussi les limites de la plage de valeurs.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-7
Développement d'un programme S7-SCL

3.5 Définition des interfaces entre blocs

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 :

Paramètres de bloc Signification Déclaration avec


Paramètres d'entrée A l'appel du bloc, les paramètres d'entrée prennent VAR_INPUT
les valeurs d'entrée actuelles. Vous pouvez y
accéder uniquement en lecture.
Paramètres de sortie Les paramètres de sortie transmettent les valeurs VAR_OUTPUT
de sortie actuelles au bloc appelant. Vous pouvez y
accéder en écriture comme en lecture.
Paramètres Les paramètres d'entrée/sortie prennent en charge VAR_IN_OUT
d'entrée/sortie la valeur actuelle d'une variable lors de l'appel, la
traitent et rangent ensuite les résultats dans la
même variable.

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

Nom de paramètre Type de Type de Description


données déclaration
Entree_val_mesure INT VAR_INPUT Valeur de mesure
nouv_val BOOL VAR_INPUT Commutateur pour prendre en charge la valeur
de mesure dans la mémoire circulante
nouv_tri BOOL VAR_INPUT Commutateur pour trier et exploiter les valeurs
de mesure
choix_fonction BOOL VAR_INPUT Inverseur pour choisir la racine carrée ou le
carré
Selection WORD VAR_INPUT Codage pour sélectionner la valeur de sortie
nouv_selection BOOL VAR_INPUT Commutateur pour valider le codage
Sortie_resultat DWORD VAR_OUTPUT Sortie du résultat calculé
Sortie_val_mesure DWORD VAR_OUTPUT Sortie de la valeur de mesure correspondante

S7-SCL V5.3 pour S7-300/400


3-8 A5E00324651-01
Développement d'un programme S7-SCL

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 :

Nom Type de Type de Description


données déclaration
Memoire_tri ARRAY[..] OF VAR_IN_OUT Tableau des valeurs de mesure, correspond à
REAL la mémoire circulante
Memoire_calcul ARRAY[..] OF VAR_OUTPUT Tableau pour les résultats :
STRUCT stucture avec les composants "racine_carree"
et "carre" de type INT

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.

Nom Type de Type de Description


données déclaration
Valeur REAL VAR_INPUT Entrée pour SQRT
SQRT REAL valeur de la Racine carrée de la valeur d'entrée
fonction
Valeur INT VAR_INPUT Entrée pour CARRE
CARRE INT Valeur de la Carré de la valeur d'entrée
fonction

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-9
Développement d'un programme S7-SCL

3.6 Définition de l'interface d'entrée/sortie


La figure ci-après montre l'interface d'entrée/sortie. Notez que pour l'entrée/sortie sous forme
d'octet, l'octet de poids faible se trouve en haut et l'octet de poids fort en bas. C'est l'inverse
pour l'entrée/sortie sous forme de mot.

Octet 0 Octet 4

Système d'automatisation

Octet 1 Octet 5

Module TOR Module TOR


d'entrée de sortie

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

0à7 Octet d'entrée : valeur de mesure

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

S7-SCL V5.3 pour S7-300/400


3-10 A5E00324651-01
Développement d'un programme S7-SCL

3.7 Définition de l'ordre des blocs dans la source


En ce qui concerne l'ordre des blocs dans la source S7-SCL, tenez compte du fait qu'un bloc
doit s'y trouver avant que vous l'utilisiez, c'est-à-dire l'appeliez depuis un autre bloc. La
source doit donc contenir les blocs dans l'ordre suivant :

FC CARRE

appelle

FB CALCUL
appelle

FB SAISIE
appelle
OB CYCLE

3.8 Définition des mnémoniques


Le programme sera plus facile à lire si vous attribuez des noms symboliques aux adresses
des module et aux blocs. Pour cela, il faut définir des mnémoniques dans une table de
mnémoniques.
La figure ci-après montre la table des mnémoniques de notre exemple. Elle présente les
noms symboliques que vous devez y déclarer pour pouvoir compiler la source sans erreurs.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-11
Développement d'un programme S7-SCL

3.9 Création de la fontion CARRE

3.9.1 Section des instructions de la fonction CARRE

Section des instructions


Il faut d'abord vérifier si la valeur d'entrée ne dépasse pas la limite pour laquelle le résultat
ne serait plus dans la plage de valeurs des entiers. Si c'est le cas, c'est la valeur maximale
pour entier qui est inscrite. Sinon, l'élévation au carré est effectuée. Le résultat est transmis
comme valeur de la fonction.

FUNCTION CARRE : INT


(*******************************************************************
Cette fonction fournit comme valeur le carré de la valeur d'entrée
ou en cas de débordement, la valeur maximale pouvant être
représentée par un entier.
*******************************************************************)
VAR_INPUT
valeur : INT;
END_VAR
BEGIN
IF valeur <= 181 THEN
CARRE := valeur * valeur; //Calcul de la valeur de la fonction
ELSE
CARRE := 32_767; // Fournir la valeur maximale en cas de
débordement
END_IF;
END_FUNCTION

S7-SCL V5.3 pour S7-300/400


3-12 A5E00324651-01
Développement d'un programme S7-SCL

3.10 Création du FB CALCUL

3.10.1 Organigramme de EXPLOITER

Cette figure représente l'algorithme sous forme d'organigramme.


CALCUL
Bloc fonctionnel Début

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 I := I-1


FOR

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.

Entrer les résultats dans le


CARRE tableau structuré des résultats.

Fin de l’instruction I := I+1


FOR

Fin

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-13
Développement d'un programme S7-SCL

3.10.2 Section de déclaration du FB CALCUL

Composition de la section de déclaration


La section de déclaration de ce bloc se compose des blocs de déclaration suivants :
• Déclaration des constantes entre CONST et END_CONST,
• Paramètres d'entrée/sortie entre VAR_IN_OUT et END_VAR,
• Paramètres de sortie entre VAR_OUTPUT et END_VAR,
• Déclaration des variables temporaires entre VAR_TEMP et END_VAR.

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

S7-SCL V5.3 pour S7-300/400


3-14 A5E00324651-01
Développement d'un programme S7-SCL

3.10.3 Section des instructions du FB CALCUL

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

Cette interface représente le noyau de l'échange de données servant au traitement des


valeurs de mesure. Les valeurs sont enregistrées dans le bloc de données d'instance
SAISIE_DONNEES, puisqu'une instance locale a été créée pour le FB CALCUL dans le FB
SAISIE appelant.

Section des instructions


Les valeurs de mesure sont d'abord triées dans la mémoire circulante, puis les calculs sont
effectués.
• Méthode de l'algorithme de tri
C'est la méthode de permutation permanente des valeurs qui est utilisée pour trier la
mémoire circulante ; en d'autres termes, deux valeurs consécutives sont comparées l'une
à l'autre et permutées jusqu'à obtention de l'ordre de tri souhaité. La mémoire utilisée est
le paramètre d'entrée/sortie "memoire_tri".
• Déclenchement du calcul
Une fois le tri terminé, une boucle de calcul est parcourue qui contient l'appel des
fonctions CARRE pour l'élévation au carré et SQRT pour l'extraction de la racine carrée.
Les résultats sont enregistrés dans le tableau de structures "memoire_calcul".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-15
Développement d'un programme S7-SCL

Section des instructions du FB CALCUL


La section des instructions du bloc de code se présente comme suit :

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

S7-SCL V5.3 pour S7-300/400


3-16 A5E00324651-01
Développement d'un programme S7-SCL

3.11 Création du FB SAISIE

3.11.1 Organigramme de SAISIR

Cette figure représente l'algorithme sous forme d'organigramme.


SAISIE
Bloc fonctionnel

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).

Reprise des résultats


des calculs dans le charger depuis le bloc
tableau des résultats de données d’instance

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-17
Développement d'un programme S7-SCL

3.11.2 Section de déclaration du FB SAISIE

Composition de la section de déclaration


La section de déclaration de ce bloc se compose des blocs de déclaration suivants :
• Déclaration des constantes entre CONST et END_CONST,
• Paramètres d'entrée entre VAR_INPUT et END_VAR,
• Paramètres de sortie entre VAR_OUTPUT et END_VAR,
• Variables statiques entre VAR et END_VAR ; c'est ici aussi qu'est effectuée la déclaration
de l'instance locale du bloc CALCUL.

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

S7-SCL V5.3 pour S7-300/400


3-18 A5E00324651-01
Développement d'un programme S7-SCL

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.

Nom Type de données Valeur initiale Description


Valeurs_mesure ARRAY [..] 8(0) Mémoire circulante pour les valeurs de
OF INT mesure
Memoire_resultats ARRAY [..] - Tableau de structures avec les
OF STRUCT composants "racine_carree" et "carre" de
type INT
Pointeur INT 0 Pointeur de la mémoire circulante
désignant l'endroit où la valeur de mesure
suivante est écrite
anc_val BOOL FALSE Valeur précédente pour la prise en charge
de valeur de mesure avec "nouv_val"
anc_tri BOOL FALSE Valeur précédente pour le tri avec
"nouv_tri"
anc_selection BOOL FALSE Valeur précédente pour la validation du
codage avec "nouv_selection"
Adresse INT 0 Adresse pour la sortie de valeur de mesure
ou de résultat
Instance_calcul Instance locale - Instance locale du FB CALCUL

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-19
Développement d'un programme S7-SCL

3.11.3 Section des instructions du FB SAISIE

Composition de la section des instructions


La section des instructions de SAISIE comporte 3 parties.
• Saisie des valeurs de mesure
Lorsque le paramètre d'entrée "nouv_val" a changé par rapport à "anc_val", une nouvelle
valeur de mesure est lue dans la mémoire circulante.
• Déclenchement du tri et du calcul
Tri et calcul sont déclenchés par l'appel du bloc fonctionnel CALCUL lorsque le paramètre
d'entrée "nouv_tri" a changé par rapport à "anc_tri".
• Evaluation du codage et préparation de la sortie
Le codage est lu sous forme de mot. Conformément à la convention SIMATIC, cela
signifie que le groupe de commutateurs du haut (octet 0) contient les 8 bits de poids fort
du mot d'entrée et que le groupe de commutateurs du bas (octet 1) contient ceux de
poids faible. La figure ci-après montre l'emplacement des commutateurs permettant
d'effectuer le codage.

S7-SCL V5.3 pour S7-300/400


3-20 A5E00324651-01
Développement d'un programme S7-SCL

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".

Commutateur Mot dans Vers SHR Vers AND,


sur module mémoire de 12 places Masque 0007

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-21
Développement d'un programme S7-SCL

Section des instructions


La section des instructions du bloc de code se présente comme suit.

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

S7-SCL V5.3 pour S7-300/400


3-22 A5E00324651-01
Développement d'un programme S7-SCL

3.12 Création du bloc d'organisation CYCLE

Tâches de l'OB CYCLE


Nous avons choisi un OB1, car il est appelé de manière cyclique. Il sert à réaliser les tâches
suivantes pour le programme :
• Appel et définition des paramètres du bloc fonctionnel SAISIE avec données d'entrée et
données de commande,
• Prise en charge des données de résultat du bloc fonctionnel SAISIE,
• Sortie des valeurs à indiquer.
La section de déclaration commence par la zone de données temporaire
"donnees_systeme" de 20 octets.

Code du programme de l'OB CYCLE

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);

(* 2ème partie : **************************************************)


IF commutateur_de_sortie THEN
//Commutation de la sortie
sortie := SAISIE_DONNEES.sortie_resultat; //Racine carrée
//ou carré
ELSE
sortie := SAISIE_DONNEES.sortie_val_mesure; //Valeur de mesure
END_IF;
END_ORGANIZATION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-23
Développement d'un programme S7-SCL

Conversion du type de données


La valeur de mesure fournie au module d'entrée est du type de données BYTE. Elle doit être
convertie en INT : vous devez donc la convertir de WORD en INT, la conversion précédente
de BYTE en WORD étant automatiquement effectuée par le compilateur. Par contre, il n'est
pas nécessaire de convertir la sortie, puisqu'elle est déclarée comme INT dans la table des
mnémoniques.

S7-SCL V5.3 pour S7-300/400


3-24 A5E00324651-01
Développement d'un programme S7-SCL

3.13 Données de test

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 Action Conséquence


1 Réglez le codage sur "111" (E0.4, E0.5 et E0.6) et Toutes les sorties du module de sortie (octet de poids
validez-le à l'aide du commutateur de codage faible) sont activées et les diodes s'allument.
(E0.7).
2 Faites indiquer la racine carrée correspondante en Les indications à la sortie équivalent à la valeur
positionnant le commutateur de sortie (E0.3) sur binaire "10000" (=16).
"1".
3 Faites indiquer le carré correspondant en 15 indicateurs s'allument à la sortie. Ceci signale un
positionnant le commutateur de fonction (E0.2) sur débordement, car 255 x 255 est une valeur trop
"1". élevée pour la plage des entiers.
4a Remettez le commutateur de sortie (E0.3) à "0". La valeur de mesure est à nouveau indiquée : tous les
indicateurs des sorties de l'octet de poids faible du
module de sortie sont à "1".
4b Donnez comme nouvelle valeur de mesure au Rien ne change encore sur le module de sortie.
module d'entrée la valeur 3, c'est-à-dire la valeur
binaire "11".
5a Observez la lecture de la valeur de mesure : réglez La sortie indique 0, c'est-à-dire qu'aucun des
le codage sur "000" et validez-le à l'aide du indicateurs ne s'allume.
commutateur de codage (E0.7) afin de pouvoir
observer plus tard la saisie de la valeur.
5b Inversez le commutateur de saisie "entree 0.0" La sortie indique la valeur de mesure 3 , valeur binaire
(E0.0). Ceci provoque la lecture de la valeur "11".
donnée à la 4e étape du test.
6 Déclenchez le tri et le calcul en inversant le La sortie indique à nouveau 0, puisque le tri a décalé
commutateur de tri (E0.1). la valeur de mesure vers le haut du tableau.
7 Indication de la valeur de mesure après le tri : La sortie indique à nouveau la valeur de mesure "11",
réglez le codage sur "110" (E0.6 = 1, E0.5 = 1, puisque c'est la seconde valeur la plus élevée dans le
E0.4 = 0 pour EB0, ce qui correspond aux bits 14, tableau.
13 et 12 de EW0) et validez-le en inversant le
commutateur de codage.
8a Indication des résultats correspondants : une La valeur de sortie 9, c'est-à-dire la valeur binaire
inversion du commutateur de sortie (E0.3) "1001" est indiquée.
provoque l'indication du carré de la valeur de
mesure de l'étape 7 du test.
8b Inversez le commutateur de fonction (E0.2) pour La valeur de sortie 2, c'est-à-dire la valeur binaire "10"
obtenir aussi la racine carrée. est indiquée.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 3-25
Développement d'un programme S7-SCL

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.

Commutateurs de Nom Explication


commande
Voie 0 Commutateur de saisie Inversion pour prise en charge de la valeur de
mesure
Voie 1 Commutateur de tri Inversion pour tri/exploitation
Voie 2 Commutateur de fonction A gauche ("0") : racine carrée,
A droite ("1") : carré
Voie 3 Commutateur de sortie A gauche ("0") : valeur de mesure,
A droite ("1") : résultat
Voie 4 Codage Adresse de sortie, bit 0
Voie 5 Codage Adresse de sortie, bit 1
Voie 6 Codage Adresse de sortie, bit 2
Voie 7 Commutateur de codage Inversion pour validation du codage

Le tableau suivant contient 8 valeurs de mesure déjà triées à titre d'exemple.


Entrez les valeurs dans n'importe quel ordre. Pour cela, réglez la combinaison binaire
respective et prenez la valeur en charge en inversant le commutateur de saisie. Une fois
toutes les valeurs saisies, déclenchez le tri et l'exploitation en inversant le commutateur de
tri. Après cela, vous pouvez prendre connaissance des valeurs de mesure triées ou des
résultats, racine carrée ou carré.

Valeur de mesure Racine carrée Carré


0000 0001 = 1 0, 0000 0001 = 1 0000 0000, 0000 0001 = 1
0000 0011 = 3 0, 0000 0010 = 2 0000 0000, 0000 1001 = 9
0000 0111 = 7 0, 0000 0011 = 3 0000 0000, 0011 0001 = 49
0000 1111 = 15 0, 0000 0100 = 4 0000 0000, 1110 0001 = 225
0001 1111 = 31 0, 0000 0110 = 6 0000 0011, 1100 0001 = 961
0011 1111 = 63 0, 0000 1000 = 8 0000 1111, 1000 0001 = 3969
0111 1111 = 127 0, 0000 1011 = 11 0011 1111, 0000 0001 = 16129
1111 1111 = 255 0, 0001 0000 = 16 0111 111, 1111 1111 = indication de débordement !

S7-SCL V5.3 pour S7-300/400


3-26 A5E00324651-01
4 Utilisation de S7-SCL

4.1 Démarrer le logiciel S7-SCL

Démarrage depuis l'interface de Windows


Une fois que vous avez installé le logiciel S7-SCL sur votre PG, vous pouvez le démarrer au
moyen du bouton "Démarrer" de la barre des tâches de Windows (mention sous
"SIMATIC/STEP 7").

Démarrage depuis SIMATIC Manager


La manière la plus rapide de démarrer S7-SCL est de positionner le pointeur sur une source
S7-SCL dans SIMATIC Manager et de cliquer deux fois.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-1
Utilisation de S7-SCL

4.2 Interface utilisateur


Les fenêtres de S7-SCL comportent les éléments standard suivants :

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é.

S7-SCL V5.3 pour S7-300/400


4-2 A5E00324651-01
Utilisation de S7-SCL

4.3 Personnalisation de l'interface utilisateur

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 :

Options de l'onglet "Editeur" Signification


Police Détermine la police pour tout le texte source.
Largeur tabulateurs Détermine la largeur de colonne des tabulations.
Numéros de ligne Affiche les numéros au début des lignes.
Enregistrer avant de compiler Propose d'enregistrer la source avant de la compiler.
Demande de confirmation Demande confirmation avant d'enregistrer.

Personnalisation de la police et de la couleur des caractères


Pour modifier la police et la couleur utilisées pour les différents éléments de langage,
choisissez la commande Outils > Paramètres et cliquez sur l'onglet "Format" dans la boîte
de dialogue "Paramètres". Vous pouvez y faire les choix suivants :

Options de l'onglet "Format" Signification


Mots-clés en majuscules Ecrit en majuscules à la saisie les mots-clés de S7-SCL tels que
FOR, WHILE, FUNCTION_BLOCK, VAR ou END_VAR.
Indentation après mots-clés Décale à la saisie les lignes des différentes sections de
déclaration et celles des instructions de contrôle IF, CASE, FOR,
WHILE et REPEAT.
Indentation automatique Après un changement de ligne, décale automatiquement la
nouvelle ligne de la même valeur que la ligne précédente. Cette
option ne s'applique qu'aux nouvelles lignes saisies.
Style/Couleur Détermine le style et la couleur utilisés pour les différents
éléments de langage.

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.

Barre d'outils, barre de points d'arrêt, barre d'état


Vous pouvez afficher et masquer ces trois barres indépendamment l'une de l'autre. Activez
ou désactivez pour cela la commande correspondante du menu Affichage. Une coche à
côté du nom de la commande indique si elle est activée ou pas.

Fenêtre "Erreurs et avertissements"


La fenêtre "Erreurs et avertissements" affiche les erreurs et avertissements qui se produisent
lors de la compilation d'une source. Vous pouvez l'activer et la désactiver en sélectionnant la
commande de menu Affichage > Erreurs et avertissements.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-3
Utilisation de S7-SCL

4.4 Création et manipulation d'une source S7-SCL

4.4.1 Créer une nouvelle source S7-SCL

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.

Structure d'un programme S7 dans SIMATIC Manager


Les sources que vous créez avec S7-SCL peuvent être rangées comme suit dans la
structure d'un programme S7 :

Programme S7

Blocs Bloc
(par exemple, FB1, OB1)

Sources Source
(par exemple, source SCL)

Mnémoniques

Procédez de la manière suivante :

1. Ouvrez la boîte de dialogue "Nouveau"


- en cliquant sur l'icône "Nouveau" dans la barre d'outils ou
- en choisissant la commande Fichier > Nouveau.
2. Dans la boîte de dialogue, choisissez
- un projet,
- le filtre "Source S7-SCL" et
- le dossier "Sources" dans le programme S7.
3. Tapez le nom de l'objet source dans la zone de texte appropriée. Il peut comporter
jusqu'à 24 caractères.
4. Confirmez par "OK".
L'objet source est alors créé sous le nom que vous lui avez donné et il s'affiche dans une
fenêtre de travail pour que vous puissiez l'éditer.

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.

S7-SCL V5.3 pour S7-300/400


4-4 A5E00324651-01
Utilisation de S7-SCL

4.4.2 Ouvrir une source S7-SCL

Vous pouvez ouvrir une source S7-SCL pour la compiler ou pour l'éditer.
Procédez de la manière suivante :

1. Ouvrez la boîte de dialogue "Ouvrir"


- en cliquant sur l'icône "Ouvrir" ou
- en choisissant la commande Fichier > Ouvrir.
2. Dans la boîte de dialogue, choisissez
- le projet souhaité,
- le programme S7 souhaité et
- le dossier Sources correspondant.
3. Sélectionnez la source S7-SCL.
4. Cliquez sur le bouton "OK".

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.

4.4.3 Fermer une source S7-SCL

Procédez de la manière suivante :


• Choisissez la commande Fichier > Fermer ou
• cliquez sur le bouton "Fermer" dans la barre de titre de la fenêtre.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-5
Utilisation de S7-SCL

4.4.4 Ouvrir des blocs

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.

4.4.5 Définir les propriétés de l'objet

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".

Procédez de la manière suivante :

1. Choisissez la commande Fichier > Propriétés.


2. Tapez les options dans la boîte de dialogue qui s'ouvre.
3. Confirmez par "OK".

4.4.6 Générer des sources S7-SCL avec un éditeur standard

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.

S7-SCL V5.3 pour S7-300/400


4-6 A5E00324651-01
Utilisation de S7-SCL

4.4.7 Protection de bloc

Vous pouvez instaurer pour vos blocs une protection de bloc, en indiquant dans la source
l'attribut KNOW_HOW_PROTECT lors de la programmation.

Protéger un bloc a les conséquences suivantes :


• Lorsque vous ouvrirez plus tard un bloc compilé avec l'éditeur incrémental LIST, vous ne
pourrez pas examiner la section des instructions du bloc.
• Dans la section de déclaration du bloc, seules les variables des types de déclaration
VAR_IN, VAR_OUT et VAR_IN_OUT s'afficheront. Les variables des sections VAR et
VAR_TEMP resteront cachées.

Pour saisir la protection de bloc il faut savoir que :


• Le mot-clé est KNOW_HOW_PROTECT ; il faut l'entrer avant tous les autres attributs de
bloc.
• C'est ainsi que vous pouvez protéger les OB, FB, FC et DB.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-7
Utilisation de S7-SCL

4.5 Règles pour les sources S7-SCL

4.5.1 Règles générales pour les sources S7-SCL

Les sources S7-SCL doivent suivre les règles suivantes.


• Dans une source S7-SCL, on peut éditer autant de blocs de code (FB, FC, OB), de blocs
de données (DB) et de types de données utilisateur (UDT) que l'on veut.
• Chaque sorte de bloc a une composition typique.
• Chaque instruction et chaque déclaration de variable se termine par un point-virgule (;).
• Il n'est pas fait de différence entre minuscules et majuscules.
• Les commentaires ne servent qu'à expliquer le programme. Ils n'ont pas d'influence sur
son déroulement.
• Des blocs de données d'instance sont automatiquement générés à l'appel d'un bloc
fonctionnel. Il n'est pas nécessaire de les éditer.
• Le DB0 est réservé au système. Vous ne pouvez donc pas générer de DB portant ce
nom.

4.5.2 Ordre des blocs

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.

S7-SCL V5.3 pour S7-300/400


4-8 A5E00324651-01
Utilisation de S7-SCL

4.5.3 Utilisation de mnémoniques

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.

Mnémoniques locaux et globaux


• Vous utiliserez des mnémoniques globaux pour les zones de mémoire de la CPU et les
désignations de bloc. Ils sont connus dans l'ensemble du programme utilisateur et leur
désignation doit donc être univoque. Vous pouvez créer la table des mnémoniques à
l'aide de STEP 7.
Les mnémoniques locaux sont connus seulement dans le bloc dont la section de déclaration
contient leur définition. Vous pouvez donner des noms symboliques aux variables,
paramètres, constantes et repères de saut, tout en employant le même nom à des fins
différentes dans des blocs différents.

Nota
Veillez à ce que les mnémoniques soient univoques et qu'ils ne soient pas identiques à un
mot-clé.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-9
Utilisation de S7-SCL

4.6 Editer dans des sources S7-SCL

4.6.1 Annuler la dernière action d'édition

La commande Edition > Annuler permet d'annuler une ou plusieurs actions.


Mais attention : toutes les opérations ne peuvent pas être annulées. La commande Fichier >
Enregistrer, par exemple, ne peut être annulée.

4.6.2 Rétablir une action d'édition

Après avoir annulé une ou plusieurs actions, vous pouvez les restaurer avec la commande
Edition > Rétablir.

4.6.3 Rechercher et remplacer des parties de texte

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".

S7-SCL V5.3 pour S7-300/400


4-10 A5E00324651-01
Utilisation de S7-SCL

4.6.4 Sélectionner des parties de texte

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.

4.6.5 Copier des parties de texte

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-11
Utilisation de S7-SCL

4.6.6 Couper des parties de texte

Cette fonction permet d'amener le texte sélectionné dans le presse-papiers. Habituellement,


elle est utilisée avec la commande Edition > Coller qui insère le contenu du presse-papiers
à la position du curseur.
Procédez de la manière suivante :
1. Sélectionnez la partie de texte à couper.
2. Coupez-la
- en cliquant sur l'icône "Couper" dans la barre d'outils ou
- en choisissant la commande Edition > Couper.

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.

4.6.7 Effacer des parties de texte

Vous pouvez supprimer du texte source une partie de texte sélectionnée.


Procédez de la manière suivante :
1. Sélectionnez le texte à effacer.
2. Choisissez la commande Edition > Effacer.
Le texte effacé n'est pas mémorisé dans le presse-papiers. Il peut être inséré de nouveau
grâce à l'une des commandes Edition > Annuler ou Edition > Rétablir.

S7-SCL V5.3 pour S7-300/400


4-12 A5E00324651-01
Utilisation de S7-SCL

4.6.8 Positionner le curseur dans une ligne donnée

Les fonctions suivantes vous permettent de positionner le curseur de manière précise.

Positionnement dans un numéro de ligne précis


Vous pouvez positionner le curseur au début d'une ligne précise :
1. Choisissez la commande de menu Edition > Aller à la ligne.
La boîte de dialogue "Aller à" s'ouvre.
2. Entrez le numéro de la ligne dans la boîte de dialogue "Aller à".
3. Confirmez par "OK".

Positionnement sur le signet suivant / précédent


Si vous avez défini des signets dans la source, vous pouvez naviguer de l'un à l'autre :
• Choisissez la commande de menu Edition > Aller à > Signet suivant / Signet
précédent.

Positionnement sur l'erreur suivante / précédente dans le code du programme


Après la compilation, la fenêtre "Erreurs et avertissements" affiche toutes les erreurs de
syntaxe en indiquant les numéros de ligne et de colonne.
S7-SCL offre la possibilité de naviguer entre les différents emplacements d'erreurs dans le
programme et ainsi de corriger consécutivement toutes les erreurs détectées lors du
processus de compilation précédent :
1. Positionnez le curseur à un emplacement quelconque dans le texte source.
2. Choisissez la commande de menu Edition > Aller à > Erreur précédente / Erreur
suivante.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-13
Utilisation de S7-SCL

4.6.9 Indentation des lignes selon la syntaxe

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.

Procédez de la manière suivante :


1. Choisissez la commande Outils > Paramètres.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Format".
3. Assurez-vous que l'option "Utiliser les formats suivants" est bien activée.
4. Cochez l'option "Indentation automatique" ou "Indentation après mots-clés".

S7-SCL V5.3 pour S7-300/400


4-14 A5E00324651-01
Utilisation de S7-SCL

4.6.10 Choisir le style et la couleur des caractères

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 :

Couleur Elément de langage Exemple


Bleu Mot-clé ORGANIZATION_BLOCK
Type de données prédéfini INT
Identificateur prédéfini ENO
Fonction standard BOOL_TO_WORD
Ocre Opération NOT
Rose Constante TRUE
Bleu-vert Commentaire //... ou (*...*)
Violet Mnémonique global (table des mnémoniques) écrit "Moteur"
entre guillemets
Noir Texte normal Variable

Procédez de la manière suivante :


1. Choisissez la commande Outils > Paramètres.
2. Dans la boîte de dialogue qui s'affiche, sélectionnez l'onglet "Format".
3. Assurez-vous que l'option "Utiliser les formats suivants" est activée.
4. Cochez les valeurs de votre choix. Si vous avez besoin d'instructions détaillées sur
l'emploi de la boîte de dialogue, cliquez sur le bouton "Aide" alors que la boîte est
ouverte.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-15
Utilisation de S7-SCL

4.6.11 Positionnement de signets dans le textes source

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.

Naviguation entre les différents signets


1. Choisissez la commande de menu Edition > Aller à > Signet précédent/suivant.

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.

S7-SCL V5.3 pour S7-300/400


4-16 A5E00324651-01
Utilisation de S7-SCL

4.6.12 Insérer des modèles

4.6.12.1 Insérer des modèles de bloc


L'une des fonctions d'édition de S7-SCL est l'insertion de modèles de bloc pour OB, FB, FC,
DB, DB d'instance, DB avec UDT et UDT. Ces modèles vous facilitent la saisie et le respect
de la syntaxe.
Procédez de la manière suivante :
1. Positionnez le curseur à l'endroit après lequel vous souhaitez insérer le modèle de bloc.
2. Choisissez la commande appropriée Insertion > Modèle de bloc > OB/FB/FC/DB/DB
d'instance/DB avec UDT/UDT.

4.6.12.2 Insérer des appels de bloc


S7-SCL vous aide à programmer des appels de bloc. Les blocs que vous pouvez appeler
sont :
• Les blocs fonctionnels système (SFB) et les fonctions système (SFC) des bibliothèques
SIMATIC.
• Les blocs fonctionnels et les fonctions créés dans S7-SCL.
• Les blocs fonctionnels et les fonctions créés dans d'autres langages de STEP 7.
Procédez de la manière suivante :
1. Choisissez la commande Insertion > Appel de bloc.
2. Dans la boîte de dialogue qui s'ouvre, choisissez le bloc SFC, SFB, FC ou FB souhaité et
confirmez par "OK".
S7-SCL copie automatiquement le bloc appelé dans le programme S7 et inscrit dans la
source, sous une forme syntaxique correcte, l'appel du bloc ainsi que ses paramètres
formels.
3. Si vous avez appelé un bloc fonctionnel, complétez le nom du bloc de données
d'instance.
4. Entrez les valeurs que devra recevoir le bloc (paramètres effectifs). Pour vous faciliter le
choix d'un paramètre effectif, S7-SCL indique le type de données requis sous forme de
commentaire.

4.6.12.3 Insérer des modèles de commentaire


L'une des fonctions d'édition de S7-SCL est l'insertion de modèles de commentaire. Ces
modèles vous facilitent la saisie et le respect de la syntaxe.
Procédez de la manière suivante :
1. Positionnez le curseur après l'en-tête du bloc qui vous intéresse.
2. Choisissez la commande appropriée Insertion > Modèle de bloc > Commentaire.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-17
Utilisation de S7-SCL

4.6.12.4 Insérer des modèles de paramètre


L'une des fonctions d'édition de S7-SCL est l'insertion de modèles de sections de
déclaration des paramètres. Ces modèles vous facilitent la saisie et le respect de la syntaxe.
Vous pouvez déclarer des paramètres dans les blocs fonctionnels et dans les fonctions.
Procédez de la manière suivante :
1. Positionnez le curseur dans la section de déclaration d'un FB ou d'une FC.
2. Choisissez la commande Insertion > Modèle de bloc > Paramètres.

4.6.12.5 Insérer des structures de contrôle


L'une des fonctions d'édition de S7-SCL est l'insertion de modèles de structure de contrôle
pour blocs de code. Ces modèles vous facilitent la saisie et le respect de la syntaxe.
Procédez de la manière suivante :
1. Positionnez le curseur à l'endroit après lequel vous souhaitez insérer le modèle.
2. Choisissez la commande appropriée Insertion > Structure de contrôle >
IF/CASE/FOR/WHILE/REPEAT.

S7-SCL V5.3 pour S7-300/400


4-18 A5E00324651-01
Utilisation de S7-SCL

4.7 Compiler und programme S7-SCL

4.7.1 Informations sur la compilation

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-19
Utilisation de S7-SCL

4.7.2 Choisir les options de compilation

Vous pouvez adapter la compilation à vos besoins personnels.


Procédez de la manière suivante :

1. Choisissez la commande Outils > Paramètres pour ouvrir la boîte de dialogue


"Paramètres".
2. Sélectionnez l'onglet "Compilateur" ou l'onglet "Création du bloc".
3. Cochez les options souhaitées.

Options de l'onglet "Compilateur"

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.

S7-SCL V5.3 pour S7-300/400


4-20 A5E00324651-01
Utilisation de S7-SCL

Options de l'onglet "Création du bloc"

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-21
Utilisation de S7-SCL

4.7.3 Compiler le programme

Avant de pouvoir exécuter un programme ou de le tester, il faut d'abord le compiler. Pour


être sûr(e) que vous compilez toujours la version la plus récente de votre source S7-SCL, il
est conseillé de choisir la commande Outils > Paramètres et de cocher l'option "Enregistrer
avant de compiler" dans l'onglet "Editeur". La commande Fichier > Compiler enregistre
alors automatiquement la source S7-SCL.

Procédez de la manière suivante :


1. Enregistrez la source S7-SCL à compiler.
2. Pour générer un programme exécutable, il est absolument nécessaire de cocher l'option
"Générer code objet" dans l'onglet "Compilateur" de la boîte de dialogue "Paramètres".
3. Modifiez éventuellement d'autres options de compilation.
4. Assurez-vous que la table de mnémoniques correspondante se trouve bien dans le
même répertoire de programme.
5. Il y a plusieurs façons de démarrer la compilation :
- La commande Fichier > Compiler compile la source dans sa totalité.
- La commande Fichier > Compilation partielle ouvre une boîte de dialogue
permettant de sélectionner certains blocs pour les compiler.
6. La boîte de dialogue "Erreurs et avertissements" affiche toutes les erreurs et tous les
avertissements concernant la syntaxe qui ont été émis lors de la compilation du
programme. Corrigez les éventuelles erreurs signalées, puis répétez les étapes décrites
ci-dessus.

4.7.4 Créer un fichier d'informations 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.

Procédez de la manière suivante :

1. Ouvrez la boîte de dialogue "Nouveau" en choisissant la commande Fichier > Nouveau.


2. Sélectionnez dans cette boîte de dialogue
- un dossier Sources dans un programme S7 et
- le type d'objet "Fichier d'informations compilation".
3. Tapez le nom du fichier dans la zone de texte appropriée (24 caractères au plus) et
confirmez par "OK".
4. Le fichier est créé et s'affiche dans une fenêtre de travail pour que vous puissiez l'éditer.
Tapez dans l'ordre souhaité les noms des sources S7-SCL à compiler et enregistrez le
fichier.
5. Démarrez ensuite la compilation en choisissant la commande Fichier > Compiler.

S7-SCL V5.3 pour S7-300/400


4-22 A5E00324651-01
Utilisation de S7-SCL

4.7.5 Eliminer les erreurs après la compilation

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-23
Utilisation de S7-SCL

4.8 Enregistrer et imprimer une source S7-SCL

4.8.1 Enregistrer une source S7-SCL

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.

4.8.2 Choisir la taille de papier

Voici comment influencer l'aspect d'un listage.


• La commande Fichier > Mise en page sert à choisir la taille et l'orientation du papier
pour l'impression.
• Vous pouvez définir les en-têtes et bas de page de vos documents à imprimer en
choisissant la commande de menu Fichier > Mise en page, puis en sélectionnant
l'onglet "En-têtes/bas page" dans la boîte de dialogue suivante.
• La commande de menu Fichier > Configuration de l'imprimante vous permet de définir
d'autres paramètres pour l'imprimante.

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.

S7-SCL V5.3 pour S7-300/400


4-24 A5E00324651-01
Utilisation de S7-SCL

4.8.3 Imprimer une source S7-SCL

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.

Procédez de la manière suivante :


1. Activez la fenêtre de travail de la source S7-SCL dont vous souhaitez imprimer le
contenu.
2. Ouvrez la boîte de dialogue "Imprimer"
- en cliquant sur l'icône "Imprimer" ou
- en choisissant la commande Fichier > Imprimer.
3. Choisissez les options d'impression dans la boîte de dialogue, comme par exemple
l'étendue d'impression ou le nombre de copies.
4. Confirmez par "OK".

4.8.4 Choisir les options d'impression

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 :

Elément de langage Exemple


Texte normal
Mot-clé ORGANIZATION_BLOCK
Identificateur d'un type de données prédéfini INT
Identificateur prédéfini ENO
Identificateur d'une fonction standard BOOL_TO_WORD
Opération NOT
Constante TRUE
Bloc de commentaire (* *)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-25
Utilisation de S7-SCL

Elément de langage Exemple


Ligne de commentaire //...
Mnémonique global (table des mnémoniques) écrit entre "Moteur"
guillemets

Procédez de la manière suivante :


1. Choisissez la commande Outils > Paramètres.
2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'onglet "Impression".
3. Assurez-vous que l'option "Utiliser les formats suivant à l'impression" est activée.
4. Cochez les valeurs de votre choix. Si vous avez besoin d'instructions détaillées sur
l'emploi de la boîte de dialogue, cliquez sur le bouton "Aide" alors que la boîte est
ouverte.

S7-SCL V5.3 pour S7-300/400


4-26 A5E00324651-01
Utilisation de S7-SCL

4.9 Chargement de programmes

4.9.1 Effacement général de la mémoire de la CPU

La fonction Effacement général permet d'effacer en ligne l'ensemble du programme


utilisateur dans une CPU.
Procédez de la manière suivante :
1. Choisissez la commande Système cible > Etat de fonctionnement et mettez la CPU à
l'ARRET.
2. Choisissez la commande Système cible > Effacement général.
3. Confirmez cette action dans la boîte de dialogue qui s'affiche.

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.

4.9.2 Charger des programmes utilisateur dans la CPU

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-27
Utilisation de S7-SCL

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.

S7-SCL V5.3 pour S7-300/400


4-28 A5E00324651-01
Utilisation de S7-SCL

4.10 Test des programmes

4.10.1 Fonctions de test de S7-SCL

Les fonctions de test de S7-SCL vous permettent de contrôler un programme en cours


d'exécution dans la CPU et donc de trouver les erreurs qu'il contient éventuellement. Les
erreurs de syntaxe sont signalées à la compilation. Les erreurs à l'exécution sont signalées
par des alarmes système. Les erreurs de programmation logiques peuvent être détectées à
l'aide des fonctions de test.

Fonctions de test de S7-SCL


Vous disposez dans S7-SCL des fonctions de test suivantes :
• Visualiser
Cette fonction permet de représenter les noms et les valeurs en cours des variables de la
source S7-SCL . Durant le test, les valeurs des variables et des paramètres de la zone
concernée sont affichées par ordre chronologique et actualisées cycliquement.
• Test avec points d'arrêt / en pas à pas
Cette fonction permet de définir des points d'arrêt, puis d'effectuer un test en pas à pas.
Vous pouvez par exemple exécuter l'algorithme du programme instruction par instruction
et observer le changement des valeurs des variables traitées.

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 !

Conditions requises pour le test


• Le programme a été compilé avec les options "Générer code objet" et "Générer infos
débogage" que vous pouvez cocher dans l'onglet "Compilateur" de la boîte de dialogue
"Paramètres" (commande Outils > Paramètres).
• Des données de référence actuelles sont disponibles.
Les données de référence sont générées automatiquement lors de la compilation si
l'option "Générer infos débogage" est activée.
• Il existe une liaison en ligne entre PG/PC et CPU.
• Le programme a été chargé dans la CPU.
Ceci peut être réalisé avec la commande de menu Système cible > Charger.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-29
Utilisation de S7-SCL

4.10.2 Informations sur la fonction de test "Visualiser"

La visualisation continue d'un programme permet de tester un groupe d'instructions qu'on


appelle zone de visualisation. Au cours du test, les valeurs des variables et des paramètres
de cette zone s'affichent par ordre chronologique et sont actualisées. Si la zone de
visualisation se trouve dans une partie du programme qui est parcourue à chaque cycle, il
n'est généralement pas possible de saisir les valeurs des variables dans des cycles
consécutifs.
Vous pouvez distinguer par la couleur les valeurs qui ont changé lors du passage actuel et
celles qui n'ont pas changé.

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.

Mode de test Explication


Test En mode test, la zone de visualisation n'est limitée que par les performances de la CPU
connectée. Toutes les fonctions de test sont utilisables sans restriction. Le temps de cycle de
la CPU peut s'en trouver considérablement allongé, étant donné que l'état des instructions
dans les boucles programmées, par exemple, est déterminé pour chaque passage.
Processus En mode processus, le débogueur de S7-SCL limite la zone de visualisation maximale de
façon que les temps de cycle réalisés au cours du test ne dépassent pas ou très peu les
temps d'exécution réels du processus.

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).

S7-SCL V5.3 pour S7-300/400


4-30 A5E00324651-01
Utilisation de S7-SCL

4.10.3 Informations sur le test avec points d'arrêt / en pas à pas

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.

Fonctions de pas à pas


Lorsque le test "Avec points d'arrêt" est démarré, vous pouvez utiliser les fonctions
suivantes :
• Instruction suivante
Exécution de l'instruction sélectionnée.
• Poursuivre
Poursuite jusqu'au prochain point d'arrêt activé.
• Jusqu'à la sélection
Poursuite jusqu'à une marque que vous définissez dans le texte source.
• Exécuter l'appel
Saut dans un bloc S7-SCL de niveau inférieur ou appel d'un bloc de niveau inférieur.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-31
Utilisation de S7-SCL

4.10.4 Marche à suivre pour la visualisation

4.10.4.1 Marche à suivre pour la visualisation


Une fois que vous avez chargé le programme compilé dans le système cible, vous pouvez le
tester avec la fonction "Visualiser".

Nota
La quantité d'instructions à tester (zone de visualisation la plus grande possible) dépend de
la performance de la CPU connectée.

Procédez de la manière suivante :


1. Assurez-vous que les conditions requises pour le test sont bien remplies et que la CPU
est à l'état de fonctionnement RUN ou RUN-P.
2. Sélectionnez la fenêtre contenant la source du programme à tester.
3. Si vous ne voulez pas rester dans le mode de test par défaut (Processus), choisissez la
commande Test > Mode > Test.
4. Définissez la zone de visualisation. Pour cela, vous avez deux possibilités :
- Positionnez le curseur dans la ligne du texte source qui contient la première
instruction de la zone à tester. S7-SCL sélectionne alors la zone de visualisation la
plus grande possible à partir de la position du curseur.
- Dans le texte source, sélectionnez exactement les instructions que vous souhaitez
visualiser.
5. Assurez-vous qu'aucun état dangereux ne risquent de se produire.
6. Choisissez la commande Test > Visualiser.
7. Désactivez la commande Test > Visualiser pour interrompre le test.
8. Choisissez la commande Test > Mettre fin au test pour mettre fin à ce dernier.

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.

Adaptation de la fonction de visualisation


Vous avez les possibilités suivantes pour adapter la fonction de visualisation à vos
exigences :
• Définissez un environnement d’appel pour le bloc à visualiser.
• Choisissez la commande de menu Affichage > Représentation symbolique pour
activer ou désactiver l'affichage des noms symboliques dans le programme.
• Choisissez la commande de menu Outils > Paramètres, puis l'onglet "Format" pour
effectuer les paramétrages souhaités concernant la couleur des valeurs à afficher.

S7-SCL V5.3 pour S7-300/400


4-32 A5E00324651-01
Utilisation de S7-SCL

4.10.4.2 Définition d'un environnement d'appel des blocs

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 :

Condition Possibilité de sélection


Le bloc est appelé par un certain bloc de niveau supérieur. Chemin d'appel
Le bloc est appelé avec un certain bloc de données. Bloc de données global
et / ou
bloc de données d'instance

Pour définir un chemin d'appel, procédez de la manière suivante :


1. Choisissez la commande de menu Test > Environnement d'appel des blocs.
La boîte de dialogue suivante affiche une liste des blocs existants.
2. Sélectionnez un bloc dans la liste.
3. Activez l'option "Activer le chemin d'appel".
4. Les chemins d'appel possibles sont alors représentés graphiquement dans la partie
inférieure de la fenêtre.
5. Sélectionnez le chemin d'appel souhaité.

Pour définir un bloc de données, procédez de la manière suivante :


1. Choisissez la commande de menu Test > Environnement d'appel des blocs.
La boîte de dialogue suivante affiche une liste des blocs existants.
2. Sélectionnez un bloc dans la liste.
3. Activez l'option "Blocs de données ouverts".
4. Entrez le numéro du DB souhaité.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-33
Utilisation de S7-SCL

4.10.5 Marche à suivre pour le test avec points d'arrêt

4.10.5.1 Définir des points d'arrêt


Procédez de la manière suivante pour définir des points d'arrêt.
1. Ouvrez la source à tester.
2. Affichez la barre de points d'arrêt au moyen de la commande Affichage > Barre de
points d'arrêt.
3. Positionnez le curseur à l'endroit qui vous convient et choisissez la commande
Test > Définir un point d'arrêt ou cliquez sur l'icône correspondante de la barre de
points d'arrêt. Les points d'arrêt sont représentés par un cercle rouge au bord gauche de
la fenêtre.
4. La commande Test > Editer les points d'arrêt permet de définir un contexte d'appel en
fonction duquel le point d'arrêt sera activé.
- si le bloc dans lequel il se trouve est appelé par un bloc de niveau supérieur donné et
(ou)
- s'il est appelé avec un bloc de données/bloc de données d'instance défini.

4.10.5.2 Mettre fin au test avec points d'arrêt


Pour revenir au déroulement normal du programme, procédez de la manière suivante :
• Désactivez la commande Test > Activer les points d'arrêt pour interrompre le test ou
• Choisissez la commande Test > Mettre fin au test pour y mettre fin.

4.10.5.3 Activer, désactiver et effacer des points d'arrêt


Vous pouvez activer, désactiver et effacer un par un les points d'arrêt définis.
1. Choisissez la commande Test > Editer les points d'arrêt.
2. La boîte de dialogue qui s'ouvre vous permet
- d'activer ou de désactiver des points d'arrêt particuliers en les cochant ou en retirant
la coche,
- d'effacer des points d'arrêt particuliers.

Pour effacer tous les points d'arrêt, choisissez la commande Test > Supprimer tous les
points d'arrêt.

S7-SCL V5.3 pour S7-300/400


4-34 A5E00324651-01
Utilisation de S7-SCL

4.10.5.4 Définition d'un environnement d'appel des 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 :

Condition Possibilité de sélection


Le bloc dans lequel se trouve le point d'arrêt est appelé par un certain bloc de Chemin d'appel
niveau supérieur.
Le bloc dans lequel se trouve le point d'arrêt est appelé avec un certain bloc de Bloc de données global
données. et / ou
bloc de données d'instance

Pour définir un chemin d'appel, procédez de la manière suivante :


1. Choisissez la commande de menu Test > Editer les points d'arrêt.
La boîte de dialogue suivante affiche une liste des points d'arrêt existants.
2. Sélectionnez un point d'arrêt dans la liste.
3. Activez l'option "Activer le chemin d'appel".
Les chemins d'appel possibles sont alors représentés graphiquement dans la partie
inférieure de la fenêtre.
4. Sélectionnez le chemin d'appel souhaité.

Pour définir un bloc de données, procédez de la manière suivante :


1. Choisissez la commande de menu Test > Editer les points d'arrêt.
La boîte de dialogue suivante affiche une liste des points d'arrêt existants.
2. Sélectionnez un point d'arrêt dans la liste.
3. Activez l'option "Blocs de données ouverts".
4. Entrez le numéro du DB souhaité.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-35
Utilisation de S7-SCL

4.10.5.5 Test en pas à pas


Procédez de la manière suivante :
1. Définissez un point d'arrêt avant la ligne d'instruction à partir de laquelle vous voulez
tester le programme en pas à pas.
2. Choisissez la commande Test > Activer les points d'arrêt.
3. Exécutez le programme jusqu'à ce point d'arrêt.
4. Pour exécuter l'instruction suivante, choisissez la commande Test > Instruction
suivante.
- S'il s'agit d'un appel de bloc, il est alors traité et il est suivi d'un saut à la première
instruction lui succédant.
- La commande Test > Exécuter l'appel permet de sauter dans le bloc. Vous pouvez
alors y poursuivre le test en pas à pas ou définir des points d'arrêt. A la fin du bloc, le
programme saute à l'instruction suivant l'appel de bloc.

4.10.6 Utilisation des fonctions de test de STEP 7

4.10.6.1 Générer et afficher les données de référence


Vous pouvez générer des données de référence et les évaluer pour faciliter le test et la
modification de votre programme utilisateur.

Il est possible d'afficher les données de référence suivantes :


• La structure du programme utilisateur
• La liste des références croisées
• Le tableau d'affectation
• La liste des opérandes libres
• La liste des mnémoniques manquants

Génération des données de référence


Il y a plusieurs manières de générer les données.
• Avec la commande Outils > Données de référence > Afficher, vous les générez ou les
actualisez et les affichez.
• L'utilisation de filtres permet de limiter la quantité de données à afficher et permet ainsi
d'accélérer la génération et l'affichage de celles-ci. Choisissez pour cela la commande
Outils > Données de référence > Filtrer.
• Si vous cochez l'option "Génération des données de référence" dans l'onglet "Création du
bloc" (commande Outils > Paramètres) les données de référence seront générées
automatiquement lors de la compilation d'une source.
Sachez toutefois que la génération automatique des données de référence allonge la
durée de la compilation.

S7-SCL V5.3 pour S7-300/400


4-36 A5E00324651-01
Utilisation de S7-SCL

4.10.6.2 Vérification de la cohérence des blocs

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.

Procédez de la manière suivante


1. Ouvrez SIMATIC Manager.
2. Sélectionnez le dossier "Blocs".
3. Choisissez la commande de menu Edition > Vérifier la cohérence des blocs.
4. Choisissez la commande de menu Affichage > Afficher les références source
S7-SCL.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-37
Utilisation de S7-SCL

Nota
Vous trouverez de plus amples informations sur cette fonction dans l'aide de STEP 7.

4.11 Afficher et modifier les propriétés de la CPU

4.11.1 Afficher et modifier l'état de fonctionnement de la CPU

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 !

4.11.2 Afficher et régler la date et l'heure de la CPU

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.

S7-SCL V5.3 pour S7-300/400


4-38 A5E00324651-01
Utilisation de S7-SCL

4.11.3 Afficher les données de la CPU

Vous pouvez obtenir les informations suivantes sur une CPU :


• Famille du système, type de CPU, numéro de référence et version de la CPU ;
• Taille de la mémoire de travail et de la mémoire de chargement et taille maximale
possible de la mémoire de chargement ;
• Nombre et plage d'adresse des entrées, sorties, temporisations, compteurs et
mémentos ;
• Nombre de données locales avec lesquelles la CPU peut travailler ;
• Indication si la CPU peut être employée en mode multiprocesseur.
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 "Général".

4.11.4 Lire la mémoire de diagnostic de la CPU

En lisant la mémoire tampon de diagnostic, vous pouvez déterminer la cause de l'état de


fonctionnement ARRET ou remonter à l'origine de certains événements de diagnostic.
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 tampon de
diagnostic".

4.11.5 Afficher/comprimer la mémoire utilisateur de la CPU

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-39
Utilisation de S7-SCL

4.11.6 Afficher le temps de cycle de la CPU

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".

4.11.7 Afficher l'horodatage de la CPU

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".

4.11.8 Afficher les blocs dans la CPU

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".

S7-SCL V5.3 pour S7-300/400


4-40 A5E00324651-01
Utilisation de S7-SCL

4.11.9 Affichage des informations sur la communication de la CPU

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".

4.11.10 Affichage des piles de la CPU

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 4-41
Utilisation de S7-SCL

S7-SCL V5.3 pour S7-300/400


4-42 A5E00324651-01
5 Notions fondamentales dans S7-SCL

5.1 Interprétation des diagrammes syntaxiques


La description du langage faite dans les différents chapitres 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 le chapitre "Description du
langage".

Qu'entend-on par diagramme syntaxique ?


Il s'agit d'une représentation graphique de la structure du langage. Cette structure est décrite
par une suite de règles, pouvant elles-mêmes se fonder sur des règles déjà énoncées.

Nom de la règle
Séquence
Bloc 3

Bloc 1 Bloc 2
Bloc 4

Option
Bloc 5
Itération
Alternative

Le diagramme syntaxique se lit de gauche à droite. Il peut comporter :


• Séquence : suite de blocs
• Option : branche facultative
• Itération : répétition de branches
• Alternative : aiguillage.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-1
Notions fondamentales dans S7-SCL

Quelles sont les différentes sortes de blocs ?


Un bloc est un élément de base ou un élément composé lui-même de blocs. La figure
suivante montre la représentation des différentes sortes de blocs :

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.

Qu'entend-on par liberté de format ?


Lorsque vous saisissez un texte source, vous devez tenir compte tant des règles
syntaxiques que des règles lexicales.
Ces deux types de règles sont décrits dans le chapitre "Description du langage". Liberté de
format signifie qu'il est permis d'insérer entre les blocs fournis par les règles des caractères
de mise en forme tels qu'espaces, tabulations et changements de page ainsi que des
commentaires.
Les règles lexicales ne vous laissent pas de liberté de format. Lorsque vous utilisez une
règle lexicale, vous devez reprendre les données telles quelles.

Règle lexicale

Lettre

_ Lettre _ Lettre

Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre

Exemples dans lesquels la règle représentée est correctement appliquée :

R_REGULATEUR3
_A_TABLEAU
_100_3_3_10
Exemples incorrects pour les raisons nommées ci-dessus :
1_1AB
RR__20
*#AB

S7-SCL V5.3 pour S7-300/400


5-2 A5E00324651-01
Notions fondamentales dans S7-SCL

Règle syntaxique
Les règles syntaxiques vous laissent la liberté de format.

Variable simple := Constante ;

Exemples dans lesquels la règle représentée est correctement appliquée :

VARIABLE_1 := 100; COMMUTATEUR:=FALSE;


VARIABLE_2 := 3.2;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-3
Notions fondamentales dans S7-SCL

5.2 Jeu de caractères

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.

S7-SCL V5.3 pour S7-300/400


5-4 A5E00324651-01
Notions fondamentales dans S7-SCL

5.3 Mots réservés


Il s'agit de mots-clés dont l'usage est prédéfini. La distinction entre les majuscules et les
minuscules n'est pas faite.

Mots-clés dans S7-SCL

AND END_CASE ORGANIZATION_BLOCK


ANY END_CONST POINTER
ARRAY END_DATA_BLOCK PROGRAM
AT END_FOR REAL
BEGIN END_FUNCTION REPEAT
BLOCK_DB END_FUNCTION_BLOCK RETURN
BLOCK_FB END_IF S5TIME
BLOCK_FC END_LABEL STRING
BLOCK_SDB END_TYPE STRUCT
BLOCK_SFB END_ORGANIZATION_BLOCK THEN
BLOCK_SFC END_REPEAT TIME
BOOL END_STRUCT TIMER
BY END_VAR TIME_OF_DAY
BYTE END_WHILE TO
CASE ENO TOD
CHAR EXIT TRUE
CONST FALSE TYPE
CONTINUE FOR VAR
COUNTER FUNCTION VAR_TEMP
DATA_BLOCK FUNCTION_BLOCK UNTIL
DATE GOTO VAR_INPUT
DATE_AND_TIME IF VAR_IN_OUT
DINT INT VAR_OUTPUT
DIV LABEL VOID
DO MOD WHILE
DT NIL WORD
DWORD NOT XOR
ELSE OF Noms des fonctions standard
ELSIF OK
EN OR

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-5
Notions fondamentales 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

Voici des identificateurs interdits pour les raisons indiquées :

4ème //Le premier caractère doit être une lettre ou


//le caractère de soulignement.
Array //ARRAY est un mot-clé.
S Valeur //Les espaces ne sont pas autorisés
//(n'oubliez pas qu'un espace est un caractère).

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.

S7-SCL V5.3 pour S7-300/400


5-6 A5E00324651-01
Notions fondamentales dans S7-SCL

5.5 Identificateur standard


S7-SCL propose une série d'identificateurs prédéfinis. Il s'agit des identificateurs standard
suivants :
• Les désignations de bloc ;
• Les identificateurs d'opérande permettant d'adresser les zones de mémoire de la CPU ;
• Les désignations de temporisation et
• Les désignations de compteur.

5.6 Désignation de bloc

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).

Abréviations Abréviations Pour désigner


allemandes anglaises
DBx DBx Bloc de données (Data Block). La désignation de bloc DB0 est réservée à
S7-SCL.
FBx FBx Bloc fonctionnel (Function Block)
FCx FCx Fonction (Function)
Obx OBx Bloc d'organisation (Organization Block)
SDBx SDBx Bloc de données système (System Data Block)
SFCx SFCx Fonction système (System Function)
SFBx SFBx Bloc fonctionnel système (System Function-Block)
Tx Tx Temporisation (Timer)
UDTx UDTx Type de données global ou utilisateur (User defined Data Type)
Zx Cx Compteur (Counter)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-7
Notions fondamentales dans S7-SCL

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

DB, FB, FC, OB, UDT

IDENTIFICATEUR

Mnémonique

Exemple
Voici des désignations autorisées :
FB10
DB100
T141

S7-SCL V5.3 pour S7-300/400


5-8 A5E00324651-01
Notions fondamentales dans S7-SCL

5.7 Identificateur d'opérande

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.

Abréviations Abréviations Pour adresser Type de données


allemandes anglaises
Ax.y Qx,y Sortie (par la mémoire image) Bit
Abx QBx Sortie (par la mémoire image) Octet
Adx QDx Sortie (par la mémoire image) Double mot
Awx QWx Sortie (par la mémoire image) Mot
AXx.y QXx.y Sortie (par la mémoire image) Bit
Dx.y Dx.y Bloc de données Bit
DBx DBx Bloc de données Octet
DDx DDx Bloc de données Double mot
DWx DWx Bloc de données Mot
DXx.y DXx.y Bloc de données Bit
Ex.y Ix.y Entrée (par la mémoire image) Bit
Ebx IBx Entrée (par la mémoire image) Octet
Edx IDx Entrée (par la mémoire image) Double mot
Ewx IWx Entrée (par la mémoire image) Mot
EXx.y IXx.y Entrée (par la mémoire image) Bit
Mx.y Mx.y Mémento Bit
MBx.y MBx.y Mémento Octet
MDx MDx Mémento Double mot
MWx.y MWx Mémento Mot
MXx MXx Mémento Bit
PABx PQBx Sortie (périphérie directe) Octet
PADx PQDx Sortie (périphérie directe) Double mot
PAWx PQWx Sortie (périphérie directe) Mot
PEBx PIBx Entrée (périphérie directe) Octet
PEDx PIDx Entrée (périphérie directe) Double mot
PEWx PIWx Entrée (périphérie directe) Mot

x = nombre compris entre 0 et 65535 (adresse absolue)

Exemple
E1.0 MW10 PAW5 DB20.DW3

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-9
Notions fondamentales dans S7-SCL

5.8 Désignation de temporisation

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

5.9 Désignation de compteur

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

Abréviation allemande 'Z'


Abréviation anglaise 'C'

IDENTIFICATEUR

Mnémonique

S7-SCL V5.3 pour S7-300/400


5-10 A5E00324651-01
Notions fondamentales dans S7-SCL

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 :

123,456 Les virgules sont interdites.


36. La virgule décimale (représentée par un point) est
interdite dans un nombre entier.
10 20 30 Les espaces ne sont pas autorisés.

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-11
Notions fondamentales dans S7-SCL

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 :

0.0 1.0 -0.2 827.602


50000.0 -0.000743 12.3 -315.0066

Les nombres réels suivants ne sont pas corrects pour les raisons indiquées :

1. La virgule décimale (point) doit figurer entre deux chiffres.


1,000.0 Les virgules sont interdites.
.3333 La virgule décimale (point) doit figurer entre deux chiffres.

Un exposant sert à indiquer la position de la virgule décimale. En l'absence de cette


dernière, on considère qu'elle se trouve à droite du chiffre. Quant à l'exposant, il doit s'agir
d'un nombre entier positif ou négatif. La base 10 est représentée par la lettre E.
Dans S7-SCL, la grandeur 3 x 10 exposant 10 équivaut aux nombres réels suivants :

3.0E+10 3.0E10 3e+10 3E10


0.3E+11 0.3e11 30.0E+9 30e9

Les nombres réels suivants ne sont pas corrects pour les raisons indiquées :

3.E+10 La virgule décimale doit figurer entre deux chiffres.


8e2.3 L'exposant doit être un nombre entier.
.333e-3 La virgule décimale doit figurer entre deux chiffres.
30 E10 Les espaces ne sont pas autorisés.

S7-SCL V5.3 pour S7-300/400


5-12 A5E00324651-01
Notions fondamentales dans S7-SCL

5.11 Chaîne de caractères

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 $.

Texte source Après compilation


'SIGNAL$'ROUGE$'' SIGNAL'ROUGE'
'50.0$$' 50.0$
'VALEUR$P' VALEUR nouvelle page
'REG-$L' REG-changement de ligne
'REGULATEUR$R REGULATEUR retour chariot
'ETAPE$T' ETAPE tabulation

Pour indiquer un caractère non imprimable, entrez sa représentation en code hexadécimal


$hh, où hh correspond à la valeur hexadécimale du caractère ASCII.
Pour interrompre une chaîne de caractères (pour des commentaires qui ne doivent être ni
imprimés, ni affichés), S7-SCL met à votre disposition les caractères $> et $< .

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-13
Notions fondamentales dans S7-SCL

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 "

S7-SCL V5.3 pour S7-300/400


5-14 A5E00324651-01
Notions fondamentales dans S7-SCL

5.13 Bloc de commentaire

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-15
Notions fondamentales dans S7-SCL

5.14 Ligne de commentaire

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

Retour chariot (carriage return)

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.

S7-SCL V5.3 pour S7-300/400


5-16 A5E00324651-01
Notions fondamentales dans S7-SCL

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.

Données utilisateur globales


Les données utilisateur globales sont des données ou zones de données que vous pouvez
utiliser à partir d'un endroit quelconque du programme. Vous devez pour cela créer des
blocs de données (DB).
Lorsque vous créez un DB, vous définissez sa structure en la déclarant. Vous pouvez
cependant également utiliser un type de données utilisateur (UDT) au lieu de déclarer la
structure du DB. L'ordre dans lequel vous indiquez le composant de la structure détermine
celui des données dans le DB.

Zones de mémoire d'une CPU


Vous pouvez adresser les zones de mémoire d'une CPU directement à partir d'un endroit
quelconque du programme en utilisant des identificateurs d'opérandes qu'il est inutile de
déclarer.
Vous avez en outre toujours la possibilité d'adresser ces zones de données de façon
symbolique. Dans ce cas, vous leur affectez des mnémoniques dans STEP 7, avec une
table des mnémoniques.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 5-17
Notions fondamentales dans S7-SCL

S7-SCL V5.3 pour S7-300/400


5-18 A5E00324651-01
6 Structure de programme S7-SCL

6.1 Blocs dans les sources S7-SCL


Dans une source S7-SCL, vous pouvez programmer de 1 à n blocs. De par leur fonction,
leur structure ou leur emploi prévu, les blocs STEP 7 sont des parties limitées d'un
programme utilisateur.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-1
Structure de programme S7-SCL

6.2 Ordre des blocs


La règle fondamentale est la suivante :
Un bloc appelé doit précéder le bloc appelant.
Ce qui signifie en détail :
• Un type de données utilisateur (UDT) doit précéder les blocs dans lesquels il est utilisé.
• Un bloc de données avec un type de données utilisateur associé suit cet UDT.
• Un bloc de données auquel tout bloc de code peut accéder précède les blocs dans
lesquels il est appelé.
• Un bloc de données avec un bloc fonctionnel associé suit ce bloc fonctionnel.
• Le bloc d'organisation OB1 qui appelle d'autres blocs doit être placé en dernier. Les blocs
appelés par ceux qui sont appelés dans l'OB1 doivent précéder ces derniers.
• Les blocs que vous appelez dans un fichier source sans pour autant les programmer
dans ce même fichier source doivent se trouver déjà dans le programme utilisateur
concerné au moment de la compilation du fichier.
• 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 de compilation se trouvent en dehors des limites des blocs.

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

S7-SCL V5.3 pour S7-300/400


6-2 A5E00324651-01
Structure de programme S7-SCL

6.3 Composition générale d'un bloc


Un bloc se compose des zones suivantes :
• L'en-tête du bloc, caractérisé par un mot-clé et un numéro de bloc ou un nom de bloc,
comme par exemple "ORGANISATION_BLOCK OB1", dans le cas d'un bloc
d'organisation.
S'il s'agit d'une fonction, le type de fonction est également précisé ; il détermine le type
de données de la valeur de retour ; si aucune valeur de retour n'est attendue, vous devez
indiquer le mot-clé VOID.
• Un titre de bloc facultatif introduit par le mot-clé "TITLE =".
• Un commentaire de bloc facultatif ; il peut s'étendre sur plusieurs lignes, chacune d'elles
commençant par "//".
• La mention des attributs de bloc (facultative).
• La mention des attributs système pour bloc (facultative).
• La section de déclaration (différente selon le type de bloc).
• La section des instructions dans les blocs de code ou
l'affectation de valeurs effectives dans les blocs de données (facultative).
• Dans les blocs de code : des instructions.
• La fin du bloc, caractérisée par END_ORGANIZATION_BLOCK,
END_FUNCTION_BLOCK ou END_FUNCTION.

6.4 Début et fin de bloc


Le texte source pour un bloc particulier est introduit, en fonction du type de bloc, par un
identificateur standard de début de bloc et par la désignation de bloc. Il est clôturé par un
identificateur standard de fin de bloc.
Le tableau suivant indique la syntaxe propre à chaque type de bloc :

Désignation Type de bloc Syntaxe


Bloc fonctionnel FB FUNCTION_BLOCK nom_fb
...
END_FUNCTION_BLOCK
Fonction FC FUNCTION nom_fc : type de fonction
...
END_FUNCTION
Bloc d'organisation OB ORGANIZATION_BLOCK nom_ob
...
END_ORGANIZATION_BLOCK
Bloc de données DB DATA_BLOCK nom_db
...
END_DATA_BLOCK
Type de données global (ou UDT TYPE nom_udt
utilisateur) ...
END_TYPE

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-3
Structure de programme S7-SCL

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

DB, FB, FC, OB, UDT

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"

S7-SCL V5.3 pour S7-300/400


6-4 A5E00324651-01
Structure de programme S7-SCL

6.5 Attributs de bloc

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 :

Mot-clé / attribut Signification Exemples


TITLE='caractère imprimable' Titre du bloc TITLE='TRIER'

VERSION : Numéro de version du bloc (0 à 15) VERSION : '3.1'


'suite de chiffres décimaux. Nota : pour les blocs de données (DB) //Pour les DB :
suite de chiffres décimaux' l'attribut VERSION ne doit pas être placé
VERSION : 3.1
entre apostrophes.
KNOW_HOW_PROTECT Protection du bloc ; un bloc compilé avec KNOW_HOW_PROTECT
cette option ne peut pas être ouvert avec
STEP 7.
AUTHOR : Nom de l'auteur : nom de la société, du AUTHOR : Siemens
département ou autres noms AUTHOR : 'A&D AS'
(IDENTIFICATEUR et ‘caractères
imprimables’)
NAME : Nom du bloc (IDENTIFICATEUR et NAME : PID
‘caractères imprimables’) NAME : 'A&D AS'
FAMILY : Nom de la famille du bloc : par exemple FAMILY : Exemple
Moteurs ; enregistre le bloc dans un groupe FAMILY : 'A&D AS'
de blocs, afin qu'il puisse être retrouvé plus
facilement (IDENTIFICATEUR et ‘caractères
imprimables’)).

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-5
Structure de programme S7-SCL

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

S7-SCL V5.3 pour S7-300/400


6-6 A5E00324651-01
Structure de programme S7-SCL

6.6 Commentaire de bloc


Les commentaires concernant l'ensemble du bloc sont à saisir dans l'en-tête à la suite de la
ligne "TITLE:". Utilisez pour cela la notation de la ligne de commentaire. Si le commentaire
s'étend sur plusieurs lignes, chacune d'elles commence par //.
Le commentaire de bloc s'affiche par exemple dans la fenêtre des propriétés du bloc dans
SIMATIC Manager ou dans l'éditeur CONT/LOG/LIST.

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...

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-7
Structure de programme S7-SCL

6.7 Attributs système pour bloc

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 :

Attributs système de blocs

24 caractères au maximum
IDENTIFICATEUR caractère
{ := ' ' }
imprimable

Exemples
FUNCTION_BLOCK FB10
{S7_m_c := 'true' ;
S7_blockview := 'big'}

S7-SCL V5.3 pour S7-300/400


6-8 A5E00324651-01
Structure de programme S7-SCL

6.8 Section de déclaration

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 :

Données Syntaxe FB FC OB DB UDT


Constantes CONST;
Liste de déclaration X X X
END_CONST
Repères de saut LABEL;
Liste de déclaration X X X
END_LABEL
Variable temporaire VAR_TEMP;
Liste de déclaration X X X
END_VAR
Variable statique VAR;
Liste de déclaration X X *) X **) X **)
END_VAR
Paramètre d'entrée VAR_INPUT;
Liste de déclaration X X
END_VAR
Paramètre de sortie VAR_OUTPUT;
Liste de déclaration X X
END_VAR
Paramètre VAR_IN_OUT;
d'entrée/sortie Liste de déclaration X X
END_VAR

*) La déclaration de variables entre le couple de mots-clés VAR et END_VAR est certes


autorisée pour les fonctions, cependant les déclarations sont déplacées dans la zone
temporaire lors de la compilation de la source.
**) Pour les DB et UDT, les mots-clés VAR et END_VAR sont remplacés par STRUCT et
END_STRUCT.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-9
Structure de programme S7-SCL

6.9 Attributs système pour paramètre

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 :

Attributs système de paramètres

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".

S7-SCL V5.3 pour S7-300/400


6-10 A5E00324651-01
Structure de programme S7-SCL

6.10 Section des instructions

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 :

Section des instructions

IDENTIFICATEUR : Instruction ;

Repère de saut

Exemple
BEGIN
VALEUR_DEBUT :=0;
VALEUR_FIN :=200;
.
.
ENREGISTRER: RESULTAT :=CONSIGNE;
.
.
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-11
Structure de programme S7-SCL

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 ;

// Exemple d'exécution de sous-programme


FB1.DB11 (TRANSFERT:= 10) ;

// Exemple d'instruction de contrôle


WHILE COMPTEUR < 10 DO..
.
.
END_WHILE;

S7-SCL V5.3 pour S7-300/400


6-12 A5E00324651-01
Structure de programme S7-SCL

6.12 Composition d'un bloc fonctionnel (FB)

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-13
Structure de programme S7-SCL

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

S7-SCL V5.3 pour S7-300/400


6-14 A5E00324651-01
Structure de programme S7-SCL

6.13 Composition d'une fonction (FC)

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

Spécification du type de données


La spécification du type de données détermine le type de données de la valeur de retour.
Tous les types de données sont autorisés, à l'exception de STRUCT et d'ARRAY. Cette
indication est inutile lorsque vous renoncez à la valeur de retour en utilisant 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).

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-15
Structure de programme S7-SCL

Section des instructions de la FC


Dans la section des instructions, il faut associer le résultat de la fonction au nom de la
fonction. Cette instruction est inutile pour les fonctions de type VOID. Voici un exemple
d'instruction correcte pour la fonction FC31 :
FC31:= VALEUR;

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

S7-SCL V5.3 pour S7-300/400


6-16 A5E00324651-01
Structure de programme S7-SCL

6.14 Composition d'un bloc d'organisation (OB)

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

DESIGNATION Section de déclaration de l'OB


ORGANIZATION_BLOCK
DE L'OB

BEGIN Section des instructions END_ORGANIZATION_BLOCK

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

Section de déclaration de l'OB


La section de déclaration de l'OB sert à déclarer les données locales (variables temporaires,
constantes, repères de saut).
Chaque OB requiert en principe pour son exécution 20 octets de données locales pour le
système d'exploitation. Pour cela, vous devez déclarer un tableau avec un identificateur
quelconque. Si vous insérez le modèle de bloc pour OB, cette déclaration s'y trouve déjà.

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-17
Structure de programme S7-SCL

6.15 Composition d'un bloc de données (DB)

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

BEGIN Section d'affectation du DB END_DATA_BLOCK

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

S7-SCL V5.3 pour S7-300/400


6-18 A5E00324651-01
Structure de programme S7-SCL

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

BEGIN // Début de la section d'affectation


:
END_DATA_BLOCK // Fin du bloc de données

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-19
Structure de programme S7-SCL

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

Variable simple := Constante* ;

* en notation LIST

Il convient de respecter la syntaxe de LIST lors de l'attribution des valeurs initiales


(initialisation) et de l'indication d'attributs et de commentaires au sein du DB. La notation des
constantes, des attributs et des commentaires est décrite dans l'aide en ligne de LIST et
dans la documentation de STEP 7.

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

BEGIN // Section d'affectation


// Affectation de valeur pour certains éléments de tableau
VALEUR [1] := 5;
VALEUR [5] := -1 ;

END_DATA_BLOCK

// Bloc de données auquel on a affecté un type de données


utilisateur
DATA_BLOCK DB11
UDT 51
BEGIN
END_DATA_BLOCK

S7-SCL V5.3 pour S7-300/400


6-20 A5E00324651-01
Structure de programme S7-SCL

6.16 Composition d'un type de données utilisateur


Un type de données utilisateur (UDT) est une structure de données spéciale que vous créez
vous-même. Puisqu'il possède un nom, il peut être utilisé plusieurs fois. Une fois défini, il
peut être utilisé dans l'ensemble du programme utilisateur et constitue donc un type de
données global. Vous pouvez ainsi l'utiliser :
• comme un type de données simple ou complexe dans un bloc ou
• comme modèle pour créer des blocs de données de structure identique.
Lorsque vous saisissez un type de données utilisateur, veillez à ce qu'il précède dans la
source S7-SCL le bloc dans lequel il est utilisé.

Type de données utilisateur

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

Spécification du type de données


Elle est toujours réalisée à l'aide d'une spécification de type de données STRUCT. Vous
pouvez utiliser le type de données UDT dans les sections de déclaration de blocs de code
ou de blocs de données, ou alors l'affecter à des DB.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-21
Structure de programme S7-SCL

Exemple de définition d'un UDT

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

//Utilisation de l'UDT dans un FB


FUNCTION_BLOCK FB10
VAR
PLAGE_MESURE : VALEURS_MESURE;
END_VAR
BEGIN
// . . .
PLAGE_MESURE.BIPOL_1 := -4 ;
PLAGE_MESURE.MESURE.UNIPOLAIRE_4_20MA := 2.7 ;
// . . .
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


6-22 A5E00324651-01
Structure de programme S7-SCL

6.17 Options du compilateur dans les sources S7-SCL

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-23
Structure de programme S7-SCL

Options disponibles
Le tableau indique les options disponibles :

Option Valeur Signification


[Scl_]ResetOptions Aucune indication de Réinitialiser les paramètres
valeur possible par défaut du compilateur
(paramètres de la boîte de
dialogue)
[Scl_]OverwriteBlocks 'y[es]' ou 'n[o]' Ecraser les blocs
[Scl_]GenerateReferenceData 'y[es]' ou 'n[o]' Créer des données de
référence
[Scl_]S7ServerActive 'y[es]' ou 'n[o]' Prendre en compte l'attribut
système "S7_server"
[Scl_]CreateObjectCode 'y[es]' ou 'n[o]' Créer le code de l'objet
[Scl_]OptimizeObjectCode 'y[es]' ou 'n[o]' Optimiser le code de l'objet
[Scl_]MonitorArrayLimits 'y[es]' ou 'n[o]' Surveiller les limites de
champs
[Scl_]CreateDebugInfo 'y[es]' ou 'n[o]' Créer les informations de
débogage
[Scl_]SetOKFlag 'y[es]' ou 'n[o]' Mettre le drapeau OK à 1
[Scl_]SetMaximumStringLength '1 .. 254' Longueur maximale d'une
chaîne de caractères

Exemple
{SCL_OverwriteBlocks := 'y' ; SCL_CreateDebugInfo := 'y'}
{SetOKFlag := 'y' ; OptimizeObjectCode := 'y'}

S7-SCL V5.3 pour S7-300/400


6-24 A5E00324651-01
Structure de programme S7-SCL

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 6-25
7 Types de données

7.1 Présentation des types de données dans S7-SCL

Les types de données déterminent :


• La nature et la signification des éléments de données
• Les plages autorisées pour les éléments de données
• Le nombre d'opérations exécutables avec un opérande d'un type de données
• La notation des constantes de ce type

Types de données simples


Un type de données simple définit la structure de données qui ne peuvent pas être divisées
en éléments plus petits. Il répond à la norme EN 1131-3. Un type de données simple décrit
une zone de mémoire de longueur fixe et correspond à une grandeur exprimée sous forme
binaire, entière, réelle, sous forme de durée, d'heure ou de caractère. Les types de données
suivants sont prédéfinis dans S7-SCL.

Groupe Types de données Signification


Types de données BOOL Les données de ce type occupent 1 bit , 8 bits, 16
binaires BYTE bits ou 32 bits.
WORD
DWORD

Types de données sur CHAR Les données de ce type occupent 1 caractère et un


caractère seul du jeu de caractères ASCII.
Types de données INT Les données de ce type permettent de traiter des
numériques DINT valeurs numériques.
REAL

Types de données TIME Les données de ce type représentent les diverses


temporels DATE valeurs de durée et de date dans STEP 7.
TIME_OF_DAY
S5TIME

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-1
Types de données

Types de données complexes


S7-SCL autorise les types de données complexes suivants :

Types de données Signification


DATE_AND_TIME Définit une zone de 64 bits (8 octets). Ce type de données, prédéfini dans
DT S7-SCL, enregistre la date et l'heure (en format décimal codé binaire).
STRING Définit une zone pour une chaîne de 254 caractères au maximum (type de
données CHAR).
ARRAY Définit un tableau formé de composants d'un même type de données (simples
ou complexes).
STRUCT Définit un groupe formé d'une combinaison quelconque de types de données.
Vous pouvez définir un tableau composé de structures ou une structure
composée d'autres structures et de tableaux.

Types de données utilisateur


Vous pouvez créer vous-même les types de données utilisateur avec la déclaration de type
de données. Ils ont leur propre nom et sont donc réutilisables. Un type de données
utilisateur peut, par exemple, servir à la création de plusieurs blocs de données de même
composition.

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.

Types de données Signification


TIMER Sert à déclarer des fonctions de temporisation comme paramètres.
COUNTER Sert à déclarer des fonctions de comptage comme paramètres.
BLOCK_xx Sert à déclarer des FC, FB, DB et SDB comme paramètres.
ANY Sert à autoriser un opérande d'un type de données quelconque comme
paramètre.
POINTER Sert à autoriser l'utilisation d'une zone de mémoire comme paramètre.

Type de données ANY


Dans S7-SCL, vous pouvez utiliser des variables du type de données ANY comme
paramètres formels d'un bloc. Vous pouvez en outre créer des variables temporaires de ce
type et les employer dans des affectations de valeur.

S7-SCL V5.3 pour S7-300/400


7-2 A5E00324651-01
Types de données

7.2 Types de données simples

7.2.1 Types de données binaires

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.

Type Mot-clé Longueur en bits Cadrage Plage de valeurs


Bit BOOL 1 bit Commence au bit de 0, 1 ou FALSE
poids faible de l'octet (FAUX), TRUE (VRAI)
Octet BYTE 8 bits commence à l'octet de -
poids faible du mot
Mot WORD 16 bits commence à une limite -
de mot
Double mot DWORD 32 commence à une limite -
de mot

7.2.2 Types de données sur caractère

Les données de ce type occupent 1 caractère et un seul du jeu de caractères ASCII.

Type Mot-clé Longueur en bits Plage de valeurs


Caractère unique CHAR 8 Jeu de caractères ASCII étendu

7.2.3 Types de données numériques

Les types de données numériques servent à traiter les valeurs numériques (par exemple à
calculer des expressions arithmétiques).

Type Mot-clé Longueur Cadrage Plage de valeurs


en bits
Entier INT 16 commence à une -32_768 à 32_767
(nombre entier) limite de mot
Entier double DINT 32 commence à une -2_147_483_648 à 2_147_483_647
limite de mot
Virgule flottante REAL 32 commence à une -3.402822E+38 à -1.175495E-38
(nombre à virgule limite de mot +/- 0
flottante IEEE) 1.175495E-38 à 3.402822E+38

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-3
Types de données

7.2.4 Types de données temporels

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).

Type Mot-clé Longueur en Cadrage Plage de valeurs


bits
Durée S5 S5TIME 16 commence à une T#0H_0M_0S_10MS à
S5T limite de mot T#2H_46M_30S_0MS
Durée : TIME 32 commence à une T#0D_0H_0M_0S_0MS à
durée CEI par pas T limite de mot T#24D_20H_31M_23S_647MS
de 1 ms.
Date : DATE 16 commence à une D#1990-01-01 à
date CEI par pas D limite de mot D#2168-12-31
de 1 jour.
Heure du jour : TIME_OF_DAY 32 commence à une TOD#0:0:0.0 à
heure par pas de TOD limite de mot TOD#23:59:59.999
1 ms.

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.

S7-SCL V5.3 pour S7-300/400


7-4 A5E00324651-01
Types de données

7.3 Types de données complexes

7.3.1 Type de données DATE_AND_TIME

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#

Indication de la date - Indication de l'heure du jour

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

Type Mot-clé Longueur en bits Cadrage Plage de valeurs


Date et heure DATE_AND_TIME 64 commence et finit à DT#1990-01-01-0:0:0.0
DT une limite de mot à
DT#2089-12-31-23:59:59.999

Le type de données DATE_AND_TIME est enregistré en format DCB.

Octets Contenu Plage


0 Année 1990 ... 2089
1 Mois 01 ... 12
2 Jour 1 ... 31
3 Heures 0 ... 23
4 Minutes 0 ... 59
5 Secondes 0 ... 59
6 2 DPS (décades les plus 00 ... 99
significatives) de ms
7 (4 BPS) DMS (décade la moins 0 ... 9
significative) de ms
7 (4 BMS) Jour de la semaine 1 ... 7 (1 = dimanche)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-5
Types de données

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.

S7-SCL V5.3 pour S7-300/400


7-6 A5E00324651-01
Types de données

7.3.2 Type de données STRING

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

Spécification du type de données STRING

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-7
Types de données

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.

Initialisation de chaînes de caractères


Dans la déclaration des paramètres de blocs fonctionnels (FB), il est possible d'initialiser les
variables STRING, tout comme les autres variables, avec des chaînes de caractères
constantes. Pour les paramètres des fonctions (FC), l'initialisation n'est pas possible.
Lorsque la chaîne de caractères initiale est plus courte que la longueur maximale déclarée,
les positions restantes demeurent libres. Le traitement ultérieur de la variable ne tient
compte que des positions réellement occupées.
Exemple :
x : STRING[7]:='Adresse';
Si vous avez besoin de variables temporaires de type STRING, par exemple pour la
sauvegarde temporaire de résultats, il faut entrer une valeur initiale (constante STRING) soit
dans la déclaration de la variable, soit dans une affectation de valeur avant de les utiliser.

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.

S7-SCL V5.3 pour S7-300/400


7-8 A5E00324651-01
Types de données

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-9
Types de données

7.3.3 Type de données ARRAY

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

Spécification du type de données ARRAY Spécification des indices

ARRAY [ Indice .. Indice ]


1 n

6 dimensions au plus

Spécification du
OF type de données

Spécification des indices


Elle décrit les dimensions du type de données ARRAY.
• Elle indique en effet le plus petit indice et le plus grand indice possibles (plage d'indices)
pour chaque dimension.
L'indice peut être une valeur entière quelconque (-32768 à 32767).
• Les limites doivent être séparées par deux points. Les différentes plages d'indices sont
séparées l'une de l'autre par des virgules.
• L'ensemble de la spécification des indices figure entre crochets.

Spécification du type de données


Elle consiste à déclarer le type de données des composants. Tous les types de données
sont autorisés. Le type de données des composants d'un tableau peut être aussi STRUCT.
Les types de paramètre ne sont pas autorisés comme type des éléments d'un tableau.

S7-SCL V5.3 pour S7-300/400


7-10 A5E00324651-01
Types de données

Exemple
VAR
REGULATEUR1 :
ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,

-1289, 10362, 385, 2,

60, -37, -7, 103 ;


REGULATEUR2 : ARRAY[1..10] OF REAL ;
END_VAR

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-11
Types de données

7.3.4 Type de données STRUCT

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 type de données STRUCT

STRUCT Déclaration des END_STRUCT


composants

Déclaration des composants


La déclaration des composants est une liste des diverses composants du type de données
STRUCT. Elle comporte :
• 1 à n identificateurs avec le type de données affecté et
• des valeurs initiales par défaut facultatives.

Déclaration des composants

Spécification du Initialisation du
IDENTIFICATEUR : type de données type de données ;

Nom du composant

Nom du composant dans les tableaux

L'identificateur est le nom d'un composant de la structure à laquelle s'applique la


spécification de type de données qui suit.
Tous les types de données sont autorisés dans la spécification, sauf les types de paramètre.
A la suite de la spécification du type, vous pouvez affecter une valeur initiale à un
composant de la structure ; ceci est facultatif. Pour cela, vous avez recours à une affectation
de valeur.

S7-SCL V5.3 pour S7-300/400


7-12 A5E00324651-01
Types de données

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-13
Types de données

7.4 Type de données utilisateur

7.4.1 Types de données utilisateur (UDT)

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

S7-SCL V5.3 pour S7-300/400


7-14 A5E00324651-01
Types de données

Spécification du type de données


La désignation d'UDT est suivie de la spécification du type de données. Seule la
spécification STRUCT est autorisée ici :
STRUCT
:
END_STRUCT

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

//Utilisation de l'UDT dans un FB


FUNCTION_BLOCK FB10
VAR
PLAGE_MESURE : VALEURS_MESURE;
END_VAR
BEGIN
// . . .
PLAGE_MESURE.BIPOL_1 := -4 ;
PLAGE_MESURE.MESURE.UNIPOLAIRE_4_20MA := 2.7 ;
// . . .
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-15
Types de données

7.5 Types de données pour paramètre


Pour déterminer les paramètres de bloc formels des FB et FC, vous pouvez utiliser non
seulement les types de données déjà présentés, mais également ce qu'on appelle des types
de paramètre.

Paramètre Longueur Description


TIMER 2 octets Caractérise une temporisation particulière qui doit être utilisée par
le programme dans le bloc de code appelé.
Paramètre effectif : p. ex. T1
COUNTER 2 octets Caractérise un compteur particulier qui doit être utilisé par le
programme dans le bloc de code appelé.
Paramètre effectif : p. ex. Z10
BLOCK_FB 2 octets Caractérise un bloc particulier qui doit être utilisé par un bloc de
BLOCK_FC code List appelé.
BLOCK_DB Paramètre effectif : p. ex. FC101, DB42
BLOCK_SDB DB42
Notas :
Il est impossible d’accéder au type de données BLOCK_DB
(myDB.dw10) Vous pouvez cependant continuer à l’éditer avec
BLOCK_DB_TO_WORD().
Le types de données BLOCK_SDB, BLOCK_FB et BLOCK_FC ne
peuvent pas être exploités par des programmes S7-SCL
Vous pouvez les utiliser pour attribuer des valeurs à des
paramètres de ce type à l’appel de blocs LIST.
ANY 10 octets S'utilise pour autoriser un type de paramètre quelconque pour le
paramètre effectif.
POINTER 6 octets Caractérise une zone de mémoire particulière qui doit être utilisée
par le programme.
Paramètre effectif : p. ex. M50.0

7.5.1 Types de données TIMER et COUNTER

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).

S7-SCL V5.3 pour S7-300/400


7-16 A5E00324651-01
Types de données

7.5.2 Types de données BLOCK

Vous déterminez un bloc à utiliser comme paramètre d'entrée. C'est la déclaration du


paramètre d'entrée qui décide du type de bloc (FB, FC, DB). Pour définir le paramètre, vous
indiquez l'identificateur du bloc, sous forme absolue ou symbolique.
L'adressage absolu du type de données BLOCK_DB est possible (myDB.dw10). Pour les
autres types de données BLOCK, S7-SCL ne fournit pas d'opération. Il n'est possible de
définir des paramètres de ce type que lors des appels de bloc. Pour les fonctions, la
transmission d'un paramètre d'entrée n'est pas possible.
Dans S7-SCL, vous pouvez affecter comme paramètres effectifs des opérandes des types
de données suivants :
• Blocs fonctionnels sans paramètres formels
• Fonctions sans paramètres formels ni valeur de retour (fonctions VOID)
• Blocs de données et blocs de données système

7.5.3 Type de données POINTER

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-17
Types de données

• 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 FC100 : VOID


VAR_IN_OUT
N_out : INT;
out : POINTER;
END_VAR
VAR_TEMP
ret : INT;
END_VAR
BEGIN
// ...
ret := SFC79(N := N_out, SA := out);
// ...
END_FUNCTION

FUNCTION_BLOCK FB100
VAR
ii : INT;
aa : ARRAY[1..1000] OF REAL;
END_VAR

BEGIN
// ...
FC100( N_out := ii, out := aa);
// ...
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


7-18 A5E00324651-01
Types de données

7.6 Type de données ANY


Dans S7-SCL, vous pouvez déclarer des variables du type de données ANY comme suit :
• En tant que paramètres formels d'un bloc, ces paramètres pouvant être remplacés à
l'appel du bloc par des paramètres effectifs d'un type de données quelconque ;
• En tant que variables temporaires pouvant recevoir des valeurs d'un type de données
quelconque.
Vous pouvez utiliser les données suivantes comme paramètres effectifs ou à droite d'une
affectation de valeur :
• Variables locales et globales
• Variables dans le DB (avec adressage absolu ou symbolique)
• Variables dans l'instance locale (avec adressage absolu ou symbolique)
• Constante NIL :
vous indiquez un pointeur zéro
• Type de données ANY
• Temporisations, compteurs et blocs :
vous indiquez leur identificateur (par exemple T1, Z20 ou FB6).

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 7-19
Types de données

7.6.1 Exemple de type de données ANY


VAR_INPUT
iANY : ANY;
END_VAR

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);

S7-SCL V5.3 pour S7-300/400


7-20 A5E00324651-01
8 Déclaration de variables locales et de
paramètres

8.1 Variables locales et paramètres de bloc

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.

Catégories de paramètres de bloc :


Les paramètres de bloc servent à réserver de la place et sont déterminés seulement quand
le bloc est utilisé concrètement (appel). Les paramètres déclarés dans le bloc sont les
paramètres formels, les valeurs qui leur sont affectées à l'appel du bloc sont les paramètres
effectifs. Les paramètres formels d'un bloc peuvent être considérés comme des variables
locales.
On peut classer les paramètres de bloc dans les catégories suivantes :

Paramètres de bloc Signification


Paramètres d'entrée A l'appel du bloc, les paramètres d'entrée prennent les valeurs d'entrée actuelles.
Vous pouvez y accéder uniquement en lecture.
Paramètres de sortie Les paramètres de sortie transmettent les valeurs de sortie actuelles au bloc
appelant. Vous pouvez y accéder en écriture comme en lecture.
Paramètres d'entrée/sortie A l'appel d'un bloc, les paramètres d'entrée/sortie prennent les valeurs d'entrée
actuelles. Une fois la valeur traitée, ils enregistrent le résultat et le retourne au
bloc appelant.

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-1
Déclaration de variables locales et de paramètres

8.2 Syntaxe générale d'une déclaration de variable ou de


paramètre
Il faut déclarer un par un les variables ou les paramètres de bloc avant de pouvoir les utiliser
dans un bloc de code ou dans un bloc de données. La déclaration établit qu'un identificateur
est utilisé comme paramètre de bloc ou comme variable et lui associe un type de données.
Une déclaration de variable ou de paramètre se compose d'un identificateur au choix et
d'une indication de type de données. Le diagramme syntaxique suivant en montre la forme
générale.

Syntaxe de la déclaration de variable ou de paramètre

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

, 1) Attributs système pour paramètre


2) sauf pour AT

Exemples

VALEUR1 : REAL;
S'il y a plusieurs variables du même type :

VALEUR2, VALEUR3,VALEUR4,....: INT;


TABLEAU : ARRAY[1..100, 1..10] OF REAL;
PHRASE : STRUCT
TABLEAU_MESURE:ARRAY[1..20] OF REAL;
COMMUTATEUR:BOOL;
END_STRUCT

Nota
Pour utiliser des mots réservés comme identificateurs, vous devez les faire précéder du
signe # (par exemple, #FOR).

S7-SCL V5.3 pour S7-300/400


8-2 A5E00324651-01
Déclaration de variables locales et de paramètres

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-3
Déclaration de variables locales et de paramètres

Syntaxe de l'initialisation de tableaux

LISTE DE REPETITION DE CONSTANTES

LISTE DE REPET.
DE CONSTANTES

CHAINE DE CHIFFRES ( CONSTANTE )


DECIMALES
FACTEUR DE REPETITION ,

Exemples

//Initialisation de variables statiques :


INDICE1 : INT := 3 ;
//Initialisation de tableaux :
EGULATEUR1 : ARRAY [1..2, 1..2] OF INT := -54, 736, -83, 77;
REGULATEUR2 : ARRAY[1..10] OF REAL := 10(2.5);
REGULATEUR1 : ARRAY [1..2, 1..2] OF INT := [-54, 736, -83, 77];
REGULATEUR2 : ARRAY[1..10] OF REAL := [10(2.5)];
//Initialisation de structures :
GENERATEUR: STRUCT
DAT1 : REAL := 100.5;
A1 : INT := 10 ;
A2 : STRING[6] := 'FACTEUR';
A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;
END_STRUCT ;
END_VAR

S7-SCL V5.3 pour S7-300/400


8-4 A5E00324651-01
Déclaration de variables locales et de paramètres

8.4 Déclaration d'accès à des zones de variable


Pour adresser avec un type de données supplémentaire une variable déclarée, vous pouvez
définir un accès à la variable ou à des zones au sein de la variable. Vous employez pour
cela le mot-clé "AT". Cet accès n'apparaîtra que localement dans le bloc, il ne sera pas
adopté dans l'interface. Il peut être utilisé dans le bloc comme toute autre variable. Il hérite
de tous les attributs de la variable qu'il désigne, seul le type de données est nouveau.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-5
Déclaration de variables locales et de paramètres

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 :

Type de données Type de données


de l'accès de la variable
simple Complexe ANY/POINTER

FB Déclaration d'un accès dans simple x X


VAR, VAR_TEMP, VAR_IN complexe x X x (1)
ou VAR_OUT
ANY/POINTER x (1)

Déclaration d'un accès dans simple x


VAR_IN_OUT complexe x
ANY/POINTER

FC Déclaration d'un accès dans simple x x


VAR ou VAR_TEMP complexe x x x
ANY/POINTER x

Déclaration d'un accès dans simple x


VAR_IN, VAR_OUT ou complexe x
VAR_IN_OUT
ANY/POINTER

(1) Any_Pointer n'est pas autorisé dans VAR_OUT.

simple = BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME, S5TIME, CHAR
complexe = ARRAY, STRUCT, DATE_AND_TIME, STRING

S7-SCL V5.3 pour S7-300/400


8-6 A5E00324651-01
Déclaration de variables locales et de paramètres

8.5 Utilisation de multi-instances


Il est possible qu'en raison des performances des CPU S7 utilisées (par exemple espace
mémoire), vous ne puissiez ou ne souhaitiez associer qu'un nombre limité de blocs de
données aux données d'instance. Si d'autres blocs fonctionnels déjà existants sont appelés
dans un FB de votre programme utilisateur (hiérarchie d'appel de FB), vous pouvez les
appeler sans DB d'instance en propre (c'est-à-dire sans DB d'instance supplémentaire).
Vous pouvez employer pour cela la solution suivante :
• Entrez les FB à appeler comme variables statiques dans la déclaration des variables du
FB appelant.
• Appelez dans ce bloc fonctionnel d'autres blocs fonctionnels sans DB d'instance en
propre.
• Vous pouvez ainsi regrouper les données d'instance dans un seul DB d'instance, et donc
mieux utiliser le nombre de DB disponibles.

8.6 Déclaration d'une instance


Dans la section de déclaration des variables statiques d'un bloc fonctionnel (VAR ;
END_VAR), vous pouvez non seulement déclarer des variables d'un type de données
simple, complexe ou utilisateur, mais également des variables de type FB ou SFB. On les
appelle instances locales du FB ou du SFB.
Les données d'instance locales sont enregistrées dans le bloc de données d'instance du
bloc fonctionnel appelant. Une initialisation locale, spécifique à l'instance n'est pas possible.
Pour un bloc appelé comme instance locale, la longueur 0 n'est pas autorisée. Il doit contenir
au moins la déclaration d'une variable statique ou d'un paramètre.

Syntaxe

Le FB et le SFB doivent
Déclaration d'instances déjà exister !

DESIGNATION
DU FB

IDENTIFICATEUR : ;

Nom de l'instance locale DESIGNATION


DU SFB
,

Exemple
Définition1 : FB10;
Définition2,Définition3,Définition4 : FB100;
Moteur1 : Moteur ;

Moteur étant un mnémonique enregistré pour un FB dans la table des mnémoniques.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-7
Déclaration de variables locales et de paramètres

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

// Mettre le drapeau OK sur TRUE,


// afin de pouvoir vérifier
// que l'action se déroule correctement.
OK:= TRUE;
Division:= 1 / IN;
IF OK THEN
// La division a été exécutée correctement.

// :
// :

ELSE // La division a été exécutée avec une erreur.

// :

END_IF;

S7-SCL V5.3 pour S7-300/400


8-8 A5E00324651-01
Déclaration de variables locales et de paramètres

8.8 Sections de déclaration

8.8.1 Présentation des sections de déclaration

A chaque catégorie de variable locale ou de paramètre est affecté une section de


déclaration propre, caractérisée par un couple de mots-clés. Chaque section contient les
déclarations qui y sont autorisées. L'ordre de ces sections est quelconque.
Le tableau suivant indique les types de variables ou de paramètres que vous pouvez
déclarer dans les divers blocs de code :

Données Syntaxe FB FC OB
Variable comme : VAR
variable statique ... X X *)
END_VAR

VAR_TEMP
variable temporaire ... X X X
END_VAR

Paramètre de bloc comme : VAR_INPUT


paramètre d'entrée ... 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

*) La déclaration de variables à l'intérieur du couple de mots-clés VAR et END_VAR est


certes autorisée pour les fonctions, mais les déclarations sont créées dans la zone
temporaire lors de la compilation de la source.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-9
Déclaration de variables locales et de paramètres

8.8.2 Variables statiques

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.

Section de variables statiques

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.

S7-SCL V5.3 pour S7-300/400


8-10 A5E00324651-01
Déclaration de variables locales et de paramètres

8.8.3 Variables temporaires

Les variables temporaires appartiennent localement à un bloc de code et n'occupent aucune


zone de mémoire statique. Elles sont stockées dans la pile de la CPU. Leur valeur ne reste
la même que durant 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. Au début de l'exécution
d'un OB, d'un FB ou d'une FC, la valeur des données temporaires n'est pas définie.
L'initialisation n'est pas possible.
Déclarez des données comme temporaires lorsque vous en avez besoin seulement pour y
enregistrer des résultats intermédiaires lors du traitement de votre OB, FB ou FC.

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.

Section de variables temporaires

VAR_TEMP Déclaration
de la variable END_VAR

L'initialisation n'est pas possible

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-11
Déclaration de variables locales et de paramètres

8.8.4 Paramètres de bloc

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.

Types de paramètres de bloc


• Les paramètres d'entrée formels prennent les valeurs d'entrée en cours
(flux de données de l'extérieur vers l'intérieur).
• Les paramètres de sortie formels servent à transférer des valeurs de sortie
(flux de données de l'intérieur vers l'extérieur).
• Les paramètres d'entrée/sortie formels ont à la fois la fonction d'un paramètre d'entrée et
celle d'un paramètre de sortie.

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.

Section des paramètres

VAR_INPUT

VAR_OUTPUT Déclaration
de la variable END_VAR

VAR_IN_OUT

L'initialisation est uniquement possible pour VAR_INPUT et VAR_OUTPUT

S7-SCL V5.3 pour S7-300/400


8-12 A5E00324651-01
Déclaration de variables locales et de paramètres

Exemple

VAR_INPUT // Paramètre d'entrée


MON_DB : BLOCK_DB ;
REGULATEUR : DWORD ;
HEURE_DU_JOUR : TIME_OF_DAY ;
END_VAR

VAR_OUTPUT // Paramètre de sortie


CONSIGNES: ARRAY [1..10] of INT ;
END_VAR

VAR_IN_OUT // Paramètre d'entrée/sortie


REGLAGE : INT ;
END_VAR

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é.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 8-13
Déclaration de variables locales et de paramètres

S7-SCL V5.3 pour S7-300/400


8-14 A5E00324651-01
9 Déclaration de constantes et repères de saut

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-1
Déclaration de constantes et repères de saut

9.1.1 Déclaration de mnémoniques pour les constantes

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

Section des constantes

CONST Expression END_CONST


IDENTIFICATEUR := ;
simple
Mnémonique de
la constante

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

S7-SCL V5.3 pour S7-300/400


9-2 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.2 Types de données des constantes

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 :

Type de données Notation typée


BOOL BOOL#1 bool#0
Bool#false BOOL#TRUE
BYTE BYTE#0 B#2#101
Byte#'ä' b#16#f
WORD WORD#32768 word#16#f
W#2#1001_0100 WORD#8#177777
DWORD DWORD#16#f000_0000 dword#32768
DW#2#1111_0000_1111_0000 DWord#8#37777777777
INT INT#16#3f_ff int#-32768
Int#2#1111_0000 inT#8#77777
DINT DINT#16#3fff_ffff dint#-65000
DInt#2#1111_0000 dinT#8#17777777777
REAL REAL#1 real#1.5
real#2e4 real#3.1
CHAR CHAR#A CHAR#49

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-3
Déclaration de constantes et repères de saut

9.1.3 Notation des constantes

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

Tableau des notations possibles

Type de données Description Exemples en S7-SCL Exemples en LIST, si


différents
BOOL 1 bit FALSE
TRUE
BOOL#0
BOOL#1
BOOL#FALSE
BOOL#TRUE
BYTE Nombre hexadécimal de 8 bits B#16#00
B#16#FF
BYTE#0
B#2#101
Byte#'ä'
b#16#f
CHAR 8 bits 'A'
(1 caractère ASCII) CHAR#49
STRING 254 caractères ASCII maximum 'adresse'
WORD Nombre hexadécimal de 16 bits W#16#0000
W#16#FFFF
word#16#f

Nombre octal de 16 bits WORD#8#177777


8#177777

Nombre binaire de 16 bits W#2#1001_0100


WORD#32768
DWORD Nombre hexadécimal de 32 bits DW#16#0000_0000
DW#16#FFFF_FFFF

Nombre octal de 32 bits Dword#8#37777777777


8#37777777777

Nombre binaire de 32 bits DW#2#1111_0000_1111_000


0
dword#32768

S7-SCL V5.3 pour S7-300/400


9-4 A5E00324651-01
Déclaration de constantes et repères de saut

Type de données Description Exemples en S7-SCL Exemples en LIST, si


différents
INT 16 bits -32768
Nombre à virgule fixe +32767
INT#16#3f_ff
int#-32768
Int#2#1111_0000
inT#8#77777
DINT 32 bits -2147483648 L#-2147483648
Nombre à virgule fixe +2147483647 L#+2147483647
DINT#16#3fff_ffff
dint#-65000
Dint#2#1111_0000
dinT#8#17777777777
REAL Nombre à virgule flottante de 32 Représentation décimale
bits 123.4567
REAL#1
real#1.5

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-5
Déclaration de constantes et repères de saut

9.1.3.1 Constante binaire


Les constantes binaires contiennent des valeurs de 1 bit, 8 bits, 16 bits ou 32 bits de
longueur. Vous pouvez les affecter dans le programme S7-SCL à des variables de types de
données BOOL, BYTE, WORD ou DWORD (selon la longueur).

Syntaxe
CONSTANTE BINAIRE
BOOL#

SUITE DE CHIFFRES DECIMAUX


BYTE# SUITE DE CHIFFRES OCTAUX
SUITE DE CHIFFRES HEXA
SUITE DE CHIFFRES BINAIRES
WORD# CARACTERES (1)

DWORD#

(1) pour le type BYTE seulement

Suite de chiffres décimaux


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 :

DW#2#1111_0000_1111_0000
dword#32768

Valeurs binaires, octales et hexadécimales


Pour indiquer une constante entière dans un autre système de numération que le système
décimal, il faut placer devant le préfixe 2#, 8# ou 16#, suivi du nombre dans la
représentation du système respectif. La figure suivante prend pour exemple une suite de
chiffres formant un nombre octal :

Suite de chiffres octaux

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

S7-SCL V5.3 pour S7-300/400


9-6 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.3.2 Constante entière


Les constantes entières contiennent des valeurs entières de 16 bits ou 32 bits de longueur.
Vous pouvez les affecter dans le programme S7-SCL à des variables du type de données
INT ou DINT (suivant la longueur).

Syntaxe

CONSTANTE ENTIERE
SUITE DE CHIFFRES DECIMAUX
INT# + SUITE DE CHIFFRES OCTAUX
SUITE DE CHIFFRES HEXA
DINT# - SUITE DE CHIFFRES BINAIRES
CARACTERES (1)

(1) pour le type INT seulement

Suite de chiffres décimaux


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

Valeurs binaires, octales et hexadécimales


Vous pouvez indiquer une constante entière dans un autre système de numération que le
système décimal, en plaçant devant le préfixe 2#, 8# ou 16#, suivi du nombre dans la
représentation du système respectif.

Exemple
Les exemples suivants montrent des notations correctes de constantes entières :

Valeur_2:=2#0101; // Nombre binaire, valeur décimale 5


Valeur_3:=8#17; // Nombre octal, valeur décimale 14
Valeur_4:=16#F; // Nombre hexadécimal, valeur décimale 15
Valeur_5:=INT#16#3f_ff // Nombre hexadécimal, notation typée

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-7
Déclaration de constantes et repères de saut

9.1.3.3 Constante réelle


Les constantes réelles sont des valeurs comportant des positions après la virgule. Vous
pouvez les affecter à des variables de type de données REAL.

Syntaxe

CONSTANTE REELLE

SUITE DE CHIFFRE SUITE DE CHIFFRE


DECIMAUX . DECIMAUX
+

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 :

3.0E+10 3.0E10 3e+10 3E10


0.3E+11 0.3e11 30.0E+9 30e9

Exemples

NOMBRE4:= -3.4 ;
NOMBRE5:= 4e2 ;
NOMBRE6:= real#1.5;

S7-SCL V5.3 pour S7-300/400


9-8 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.3.4 Constante sur caractère (caractère unique)


La constante sur caractère contient un caractère et un seul placé entre deux apostrophes (').
Elle ne peut pas être employée dans des expressions.

Syntaxe
CONSTANTE SUR CARACTERE

CHAR# ' Caractère '

SUITE DE CHIFFRES
DECIMAUX

Exemple

Caractère_1 := 'B';
Caractère_2 := char#43;
Caractère_3 := char#'B';

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-9
Déclaration de constantes et repères de saut

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

Exemple de caractère en code hexadécimal :

CARACTERE := '$41' ; //équivaut au caractère 'A'


Espace :='$20'; //équivaut au caractère _ | |

S7-SCL V5.3 pour S7-300/400


9-10 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.3.5 Constante sur chaîne


Une constante sur chaîne est une chaîne de 254 caractères au maximum. Les caractères
sont placés entre deux apostrophes ('). Les constantes sur chaîne ne peuvent pas être
employées dans les expressions.

Syntaxe

CONSTANTE SUR CHAINE

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-11
Déclaration de constantes et repères de saut

Interruption d'une chaîne de caractères


Vous pouvez interrompre plusieurs fois puis continuer une constante sur chaîne.
Une chaîne de caractères peut figurer sur une seule ligne d'un bloc S7-SCL ou être répartie
sur plusieurs lignes avec des codes spéciaux. Le code $> sert à interrompre une chaîne et le
code $< sert à la continuer à la ligne suivante. L'espace entre le code d'interruption et le
code de continuation peut s'étendre sur plusieurs lignes ; il ne doit pas contenir autre chose
que des caractères d'espacement et du commentaire.
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

Exemples

// Constante sur chaîne:


NOM:= 'SIEMENS';
//Interruption d'une constante sur chaîne
MESSAGE1:= 'MOTEUR- $>
$< Commande';
// Chaîne en représentation hexadécimale:
MESSAGE1:= '$41$4E' (*suite de caractères AN*);

S7-SCL V5.3 pour S7-300/400


9-12 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.3.6 Constante de date


Une date est introduite par les préfixes DATE# ou D#. Pour indiquer la date, vous utilisez
des nombres entiers pour l'année (4 positions), le mois et le jour, séparés par des tirets.

Syntaxe

Indication de la date

SUITE DE CHIFFRES SUITE DE CHIFFRES SUITE DE CHIFFRES


- -
DECIMAUX DECIMAUX DECIMAUX

Année Mois Jour

Exemple

VARIABLE_TEMPS1:= DATE#1995-11-11 ;
VARIABLE_TEMPS2:= D#1995-05-05 ;

9.1.3.7 Constante de durée


Une durée est introduite par les préfixes TIME# ou T#. Il y a deux façons d'indiquer la
durée :
• La représentation décimale
• La représentation par niveaux

Syntaxe

Durée

TIME# Représentation décimale

T# Représentation par niveau Représentation décimale

-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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-13
Déclaration de constantes et repères de saut

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

SUITE DE CHIFFRES . SUITE DE CHIFFRES Jours


D
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Heures


H
DECIMAUX DECIMAUX

SUITE DE CHIFFRES SUITE DE CHIFFRES Minutes


. M
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Secondes


S
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Millisecondes


MS
DECIMAUX DECIMAUX

Pour passer à la représentation décimale, il faut que les unités temporelles


n'aient pas encore été définies

S7-SCL V5.3 pour S7-300/400


9-14 A5E00324651-01
Déclaration de constantes et repères de saut

Représentation par niveaux


La représentation par niveaux est une suite de composants horaires individuels. Vous
indiquez d'abord les jours, puis les heures, etc., séparés par des caractères de
soulignement, l'omission de composants étant permise. Vous devez cependant en indiquer
une au moins.

Représentation par niveaux

SUITE DE CHIFFRES SUITE DE CHIFFRES _


D _ H
DECIMAUX DECIMAUX

Jours Heures

SUITE DE CHIFFRES _ SUITE DE CHIFFRES _


DECIMAUX M DECIMAUX S

Minutes Secondes

SUITE DE CHIFFRES _
MS
DECIMAUX

Millisecondes

Exemple

// Représentation décimale
Intervalle1:= TIME#10.5S ;

// Représentation par niveaux


Intervalle2:= T#3D_2S_3MS ;

// Représentation par niveaux et décimale


Intervalle3 := T#2D_2.3s ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-15
Déclaration de constantes et repères de saut

9.1.3.8 Constante d'heure du jour


L'heure du jour est introduite par les préfixes TIME_OF_DAY# ou TOD#.

Syntaxe

Heure du jour

TIME_OF_DAY#

Indication de l'heure du jour

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.

Indication de l'heure du jour


Indication de l'heure du jour

SUITE DE CHIFFRES SUITE DE CHIFFRES


DECIMAUX
: DECIMAUX
:

Indication des heures Indication des minutes

SUITE DE CHIFFRES SUITE DE CHIFFRES


.
DECIMAUX DECIMAUX

Indication des secondes Indication des millisecondes

Exemple

HEURE1:= TIME_OF_DAY#12:12:12.2 ;
HEURE2:= TOD#11:11:11 ;

S7-SCL V5.3 pour S7-300/400


9-16 A5E00324651-01
Déclaration de constantes et repères de saut

9.1.3.9 Constante de date et d'heure


L'indication de la date et de l'heure est introduite par les préfixes DATE_AND_TIME# ou
DT#. Il s'agit d'une constante composée de l'indication de la date et de celle de l'heure du
jour.

Syntaxe
Date et heure

DATE_AND_TIME#

Indication de la date - Indication de l'heure du jour

DT#

Indication de la date

Indication de la date

SUITE DE CHIFFRES SUITE DE CHIFFRES SUITE DE CHIFFRES


- -
DECIMAUX DECIMAUX DECIMAUX

Année Mois Jour

Indication de l'heure du jour

Indication de l'heure du jour

SUITE DE CHIFFRES SUITE DE CHIFFRES


DECIMAUX
: DECIMAUX
:

Indication des heures Indication des minutes

SUITE DE CHIFFRES SUITE DE CHIFFRES


.
DECIMAUX DECIMAUX

Indication des secondes Indication des millisecondes

Exemple

HEURE1:= DATE_AND_TIME#1995-01-01-12:12:12.2 ;
HEURE2:= DT#1995-02-02-11:11:11;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 9-17
Déclaration de constantes et repères de saut

9.2 Déclaration de repères de saut


Les repères de saut (labels) servent à définir la destination d'une instruction GOTO. Vous les
déclarez dans la section de déclaration d'un bloc de code en indiquant leur mnémonique.

Syntaxe

Section de déclaration des repères de saut

LABEL IDENTIFICATEUR ; END_LABEL

Repère de saut

Exemple

LABEL
REPERE1, REPERE2, REPERE3;
END_LABEL

S7-SCL V5.3 pour S7-300/400


9-18 A5E00324651-01
10 Données globales

10.1 Présentation des données globales


Dans S7-SCL, vous avez la possibilité d'adresser des données globales. Il en existe deux
sortes :
• Les zones de mémoire de la CPU
Il s'agit de données déclarées dans le système comme par exemple les entrées, les
sorties et les mémentos. Leur nombre dépend de votre CPU.
• Les données utilisateur globales, sous forme de blocs de données que vous
pouvez charger
Ces zones de données se trouvent dans des blocs de données. Pour pouvoir les utiliser,
vous devez préalablement créer les blocs et y déclarer les données. Dans le cas de blocs
de données d'instance, elles résultent de blocs fonctionnels et sont générées
automatiquement.

Adressage des données globales


L'adressage des données globales peut être :
• Absolu : par un identificateur d'opérande et une adresse absolue.
• Symbolique : par un mnémonique que vous avez préalablement défini dans la table des
mnémoniques.
• Indexé : par un identificateur d'opérande et un indice de tableau.
• Structuré : par une variable.

Mode d'adressage Zones de mémoire de la CPU Données utilisateur globales


Absolu oui oui
Symbolique oui oui
Indexé oui oui
Structuré non oui

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-1
Données globales

10.2 Zones de mémoire de la CPU

10.2.1 Présentation des zones de mémoire de la CPU

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é.

Adressage simple de la mémoire

IDENTIFICATEUR Adresse
D'OPERANDE
Adressage absolu

IDENTIFICATEUR

Adressage symbolique
Mnémonique

Adressage indexé de la mémoire


Indice

IDENTIFICATEUR Expression
[ de base ]
D'OPERANDE

S7-SCL V5.3 pour S7-300/400


10-2 A5E00324651-01
Données globales

10.2.2 Adressage absolu des zones de mémoire de la CPU

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

Variable de même type

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).

Syntaxe de l'identificateur absolu

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

PE PI Périphérie des entrées

PA PQ Périphérie des sorties

Abréviations allemandes Abréviations anglaises

Selon le jeu d'abréviations sélectionné, la signification des identificateurs d'opérandes


allemands ou anglais est réservée.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-3
Données globales

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

uniquement pour une adresse binaire

Exemples
OCTET_ETAT :=EB10;
ETAT_3 :=E1.1;
VAL_MESURE :=EW20;

S7-SCL V5.3 pour S7-300/400


10-4 A5E00324651-01
Données globales

10.2.3 Adressage symbolique des zones de mémoire de la CPU

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.

Mnémonique Opérande Type de données Commentaire


Contact_moteur_1 E 1.7 BOOL Commutateur de
contact 1 pour le moteur
A
Entrée1 EW 10 INT Mot d'état

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 ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-5
Données globales

10.2.4 Adressage indexé des zones de mémoire de la CPU

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

Syntaxe de l'identificateur absolu

Préfixe de Préfixe de Expression Expression


[ , ]
mémoire taille de base de base

Identificateur d'opérande Indice

Pour adressage binaire seulement

L'indexation (expression de base) doit être conforme aux règles suivantes :


• Chaque indice doit être une expression arithmétique du type de données INT.
• Dans le cas d'un adressage du type de données BYTE, WORD ou DWORD, vous devez
utiliser un indice et un seul. Il est interprété comme adresse d'octet. La longueur
d'adressage est déterminée par le préfixe de taille.
• Dans le cas d'un adressage du type de données BOOL, vous devez utiliser deux indices.
Le premier spécifie l'adresse d'octet, le second la position du bit dans cet octet.

Exemple
VAL_MESURE_1 :=EW[COMPTEUR];
REPERE :=E[NºOCTET, NºBIT];

S7-SCL V5.3 pour S7-300/400


10-6 A5E00324651-01
Données globales

10.3 Blocs de données

10.3.1 Présentation des blocs de données

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é.

Adressage absolu d'un DB

Identificateur d'opérande Adresse

Adressage indexé d'un DB Index

Identificateur d'opérande Expression


[ de base ]

Adressage structuré d'un DB

. Variable
Identificateur d'opérande
simple

Adressage symbolique d'un DB

Variable
Mnémonique d'un DB .
simple

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-7
Données globales

10.3.2 Adressage absolu des blocs de données

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.

Adressage absolu d'un DB

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

S7-SCL V5.3 pour S7-300/400


10-8 A5E00324651-01
Données globales

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

uniquement pour une adresse binaire

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;

ETAT_1 :=WORD_TO_BLOCK_DB (INDICE).DW10;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-9
Données globales

10.3.3 Adressage indexé des blocs de données

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.

Préfixe de taille Préfixe de mémoire

Désignation du DB. D X [i,j] Adresse


Expression de base comme indice,
indiquée entre crochets
Identificateur d'opérande

Syntaxe

Identificateur d'opérande

IDENTIFICATION Préfixe Expression , Expression


DU DB . D de taille
[ de base ]
de base

L'indexation doit être conforme aux règles suivantes :


• Dans le cas d'un adressage du type de données BYTE, WORD ou DWORD, vous devez
utiliser un indice et un seul. Il est interprété comme adresse d'octet. La longueur
d'adressage est déterminée par le préfixe de taille.
• Dans le cas d'un adressage du type de données BOOL, vous devez utiliser deux indices.
Le premier spécifie l'adresse d'octet, le second la position du bit dans cet octet.
• Chaque indice doit être une expression arithmétique du type de données INT.

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];

S7-SCL V5.3 pour S7-300/400


10-10 A5E00324651-01
Données globales

10.3.4 Adressage structuré des blocs de données


L'adressage structuré est réalisé au moyen de l'identificateur de la variable déclarée dans le
bloc de données. Vous pouvez affecter la variable à toute variable de même type.
Pour référencer la variable dans le bloc de données, vous indiquez le nom du DB, puis
séparé par un point, le nom de la variable simple.

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

Type de données utilisateur UDT1


TYPE UDT1 STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT

DB20 avec type de données utilisateur :


DB20
UDT1
BEGIN ...

DB30 sans type de données utilisateur :


DB30 STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT
BEGIN ...

Bloc fonctionnel avec les adressages :


..
FB10.DB10();
MOT_RES_A := DB10.resultat.RES2;
MOT_RES_B := DB20.RES2;
MOT_RES_C := DB30.RES2;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 10-11
Données globales

S7-SCL V5.3 pour S7-300/400


10-12 A5E00324651-01
11 Expressions, opérations et opérandes

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.

Classe Opération Représentation Priorité


Opération d'affectation : Affectation := 11
Opérations arithmétiques : Puissance ** 2
Opérations unaires
Plus unaire + 3
Moins unaire - 3
Opérations arithmétiques de
base
Multiplication * 4
Division / 4
Fonction modulo MOD 4
Division entière DIV 4
Addition + 5
Soustraction - 5
Opérations de comparaison : Infériorité < 6
Supériorité > 6
Infériorité ou égalité <= 6
Supériorité ou égalité >= 6
Egalité = 7
Différence <> 7
Opérations logiques : Négation NOT 3

Opérations logiques de base


Et
Ou exclusif AND ou & 8
Ou XOR 9
OR 10
Caractères de parenthèse : Parenthèses () 1

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-1
Expressions, opérations et opérandes

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

Voici des exemples de constantes autorisées :


4_711
4711
30.0
'CARACTERE'
FACTEUR

S7-SCL V5.3 pour S7-300/400


11-2 A5E00324651-01
Expressions, opérations et opérandes

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

Variable dans une


instance locale

Appel de FC

Exemples de variables correctes :


CONSIGNE variable simple
EW10 variable absolue
E100.5 variable absolue
DB100.DW [INDICE] variable dans le DB
MOTEUR.VITESSE variable dans l'instance locale
SQR (20) fonction standard
FC192 (CONSIGNE) appel de fonction

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-3
Expressions, opérations et opérandes

11.3 Syntaxe d'une expression

Syntaxe

Expression

Opérande

Expression Opérations logiques Expression


de base

Opérations de
comparaison

Opérations
arithmétiques de base

Puissance
Expression ** Exposants

+ Expression
Plus unaire

- Moins unaire

NOT Négation

( Expression )

Résultat d'une expression


Le résultat d'une expression peut être :
• Affecté à une variable
• Utilisé comme condition d'une instruction de contrôle,
• Utilisé comme paramètre pour l'appel d'une fonction ou d'un bloc fonctionnel.

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é.

S7-SCL V5.3 pour S7-300/400


11-4 A5E00324651-01
Expressions, opérations et opérandes

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-5
Expressions, opérations et opérandes

11.4 Expression simple


Dans S7-SCL, on entend par expression simple une expression arithmétique simple. Vous
pouvez multiplier ou diviser des valeurs constantes deux par deux, puis combiner ces
couples par addition ou soustraction.

Syntaxe d'une expression simple :

+
Expression Multiplication
simple simple
-

Syntaxe d'une multiplication simple :

*
Multiplication
simple
/

DIV

MOD

Constante

-
Expression
( )
simple

Exemple :
EXPRESSION_SIMPLE= A * B + D / C - 3 * VALEUR1;

S7-SCL V5.3 pour S7-300/400


11-6 A5E00324651-01
Expressions, opérations et opérandes

11.5 Expressions arithmétiques


Il s'agit d'expressions formées d'opérations arithmétiques. Elles permettent de traiter des
types de données numériques.
Le tableau ci-après regroupe les opérations possibles et indique à quel type il faut associer
le résultat, en fonction des opérandes utilisés. Nous employons les abréviations suivantes :

ANY_INT pour les types de données INT, DINT


ANY_NUM pour les types de données ANY_INT et REAL

Opération Identificateur 1er opérande 2nd opérande Résultat Priorité


Puissance ** ANY_NUM ANY_NUM REAL 2
Plus unaire + ANY_NUM - ANY_NUM 3
TIME - TIME 3
Moins unaire - ANY_NUM - ANY_NUM 3
TIME - TIME 3
Multiplication * ANY_NUM ANY_NUM ANY_NUM 4
TIME ANY_INT TIME 4
Division / ANY_NUM ANY_NUM ANY_NUM 4
TIME ANY_INT TIME 4
Division entière DIV ANY_INT ANY_INT ANY_INT 4
TIME ANY_INT TIME 4
Division modulo MOD ANY_INT ANY_INT ANY_INT 4
Addition + ANY_NUM ANY_NUM ANY_NUM 5
TIME TIME TIME 5
TOD TIME TOD 5
DT TIME DT 5
Soustraction - ANY_NUM ANY_NUM ANY_NUM 5
TIME TIME TIME 5
TOD TIME TOD 5
DATE DATE TIME 5
TOD TOD TIME 5
DT TIME DT 5
DT DT TIME 5

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).

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-7
Expressions, opérations et opérandes

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 ;

S7-SCL V5.3 pour S7-300/400


11-8 A5E00324651-01
Expressions, opérations et opérandes

11.6 Expressions logiques


Il s'agit d'une expression formée d'opérations logiques.

Opérations logiques de base


Vous pouvez combiner les opérations AND, &, XOR et OR avec des opérandes logiques (de
type BOOL) ou des variables du type de données BYTE, WORD ou DWORD pour former
des expressions logiques. L'opération NOT permet de former la négation d'un opérande
logique.

NOT n'est pas un opérateur logique de base !


Opérateurs logiques de base L'opérateur agit comme un signe.

AND & XOR OR

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 :

ANY_BIT pour les types de données BOOL, BYTE, WORD, DWORD

Opération Identificateur 1er opérande 2nd opérande Résultat Priorité


Négation NOT ANY_BIT - ANY_BIT 3
Intersection AND ANY_BIT ANY_BIT ANY_BIT 8
OU exclusif XOR ANY_BIT ANY_BIT ANY_BIT 9
OU inclusif OR ANY_BIT ANY_BIT ANY_BIT 10

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-9
Expressions, opérations et opérandes

Exemples

// Inversion du résultat de l'expression de comparaison


IF NOT (COMPTEUR > 5) THEN . . . ;
// Inversion du résultat de la première expression de comparaison et
// intersection avec le résultat de la seconde expression
A := NOT (COMPTEUR1 = 4) AND (COMPTEUR2 = 10) ;
// Réunion de deux expressions de comparaison
WHILE (A >= 9) OR (INTERROGATION <> "n") DO.... ;
// Masquage d'un octet d'entrée (combinaison binaire)
Résultat := EB10 AND 2#11110000 ;

S7-SCL V5.3 pour S7-300/400


11-10 A5E00324651-01
Expressions, opérations et opérandes

11.7 Expressions de comparaison


Les opérations de comparaison comparent les valeurs de deux opérandes et fournissent une
valeur booléenne. Si la comparaison s'avère juste, le résultat est TRUE, dans le cas
contraire il est FALSE.

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 :

Type de = <> >0 <0 > < Règles


données
INT 9 9 9 9 9 9 Au sein de la classe des types de données
numériques, tous les opérateurs de
comparaison sont autorisés.
L'opérateur avec le type le plus fort
détermine le type de l'opération.
DINT 9 9 9 9 9 9
REAL 9 9 9 9 9 9

BOOL 9 9 Au sein de la classe des types de données


binaires, seul EGAL et DIFFERENT sont
autorisés comme opérateurs de
comparaison.
L'opérateur avec le type le plus fort
détermine le type de l'opération.
BYTE 9 9
WORD 9 9
DWORD 9 9

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-11
Expressions, opérations et opérandes

Type de = <> >0 <0 > < Règles


données
CHAR 9 9 9 9 9 9 Dans le cas des caractères et des chaînes
de caractères, la longueur des variables
ainsi que la valeur numérique de chaque
caractère ASCII sont pris en compte pour la
comparaison.
Dans le cas de STRING, la comparaison est
réalisée en interne par les fonctions
EQ_STRNG, GE_STRNG, LE_STRNG,
GT_STRNG et LT_STRNG de la
bibliothèque CEI.
Les opérandes suivants ne sont pas
autorisés pour ces fonctions :
• paramètres d'une FC
• paramètre IN_OUT d'un FB du type
STRUCT ou ARRAY.
STRING 9 9 9 9 9 9

DATE 9 9 9 9 9 9

TIME 9 9 9 9 9 9

DT 9 9 9 9 9 9 Dans le cas de DT, la comparaison est


réalisée en interne par les fonctions
EQ_DT, GE_ DT, LE_ DT, GT_STRNG
et LT_ DT de la bibliothèque CEI.
Les opérandes suivants ne sont pas
autorisés pour ces fonctions :
• paramètres d'une FC
• paramètre IN_OUT d'un FB du type
STRUCT ou ARRAY.

TOD 9 9 9 9 9 9

S5-TIME Les variables S5-TIME ne sont pas


autorisées comme opérandes de
comparaison. Une conversion explicite de
S5TIME en TIME au moyen de fonctions
CEI s'avère nécessaire.

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.

S7-SCL V5.3 pour S7-300/400


11-12 A5E00324651-01
Expressions, opérations et opérandes

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)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 11-13
Expressions, opérations et opérandes

S7-SCL V5.3 pour S7-300/400


11-14 A5E00324651-01
12 Instructions

12.1 Affectations de valeur


Une affectation de valeur remplace la valeur momentanée d'une variable par une nouvelle
valeur, indiquée sous forme d'expression. Cette expression peut aussi contenir des
identificateurs de fonctions qui s'en trouvent activées et fournissent des valeurs
correspondantes (valeurs de retour).
Conformément à la figure ci-dessous, l'expression figurant dans la partie droite de
l'affectation de valeur est évaluée et le résultat est mémorisé dans la variable dont le nom
figure à gauche du signe d'affectation. Les variables autorisées sont indiquées dans la figure
suivante.

Syntaxe de l'affectation de valeur :

Affectation de valeur

Variable simple := Expression ;

Variable absolue

Dans zones de mémoire CPU


Variable dans DB

Variable instance locale

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-1
Instructions

12.1.1 Affecter une valeur à une variable de type de données simple

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

// Affectation d'une constante à une variable


COMMUTATEUR_1 := -17 ;
CONSIGNE_1 := 100.1 ;
INTERROG_1 := TRUE ;
DUREE_1 := T#1H_20M_10S_30MS ;
DUREE_2 := T#2D_1H_20M_10S_30MS ;
DATE_1 := D#1996-01-10 ;

// Affectation d'une variable à une autre variable


CONSIGNE_1 := CONSIGNE_2 ;
COMMUTATEUR_2 := COMMUTATEUR_1 ;

// Affectation d'une expression à une variable


COMMUTATEUR_2 := COMMUTATEUR_1 * 3 ;
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


12-2 A5E00324651-01
Instructions

12.1.2 Affecter une valeur à des variables de type STRUCT et UDT

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 :

Image //Identificateur d'une structure


Image.element //Identificateur d'un composant de structure
Image.tableau //Identificateur d'un tableau simple
//au sein d'une structure
Image.tableau[2,5] //Identificateur d'un composant de tableau
//au sein d'une structure

Affectation d'une structure complète


Une structure complète ne peut être affectée à une autre structure que si les types de
données et les noms des composants sont identiques. Voici une affectation correcte :

nomstruct_1 := nomstruct_2;

Affectation de composants de structure


Vous pouvez affecter à tout composant d'une structure une variable ou une expression de
type compatible ou encore un autre composant de structure.
Pour spécifier un composant de structure, vous indiquez l'identificateur de la structure suivi
d'un point et de l'identificateur du composant. Voici des affectations correctes :

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 ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-3
Instructions

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

S7-SCL V5.3 pour S7-300/400


12-4 A5E00324651-01
Instructions

12.1.3 Affecter une valeur à une variable de type ARRAY

Un tableau se compose de 1 à 6 dimensions au maximum et contient des éléments qui sont


tous du même type. Deux possibilités s'offrent à vous pour affecter un tableau à une
variable. Vous pouvez référencer des tableaux complets ou des tableaux partiels.

Affectation d'un tableau complet


Pour que vous puissiez affecter un tableau complet à un autre tableau, il faut que les types
de données des composants et les limites du tableau (plus petit et plus grand indice) soient
identiques. Si tel est le cas, indiquez l'identificateur du tableau à la suite du signe
d'affectation. Voici une affectation correcte :

nomtableau_1:=nomtableau_2;

Nota
Vous ne devez pas affecter de constantes à des tableaux complets.

Affectation d'un composant de tableau


Pour adresser un élément particulier du tableau, vous devez indiquer le nom du tableau suivi
des valeurs appropriées des indices entre crochets. A chaque dimension correspond un
indice. Ils sont séparés par des virgules et placés entre crochets. Un indice doit être une
expression arithmétique de type INT.
Pour affecter une valeur à un tableau partiel, supprimez des indices entre les crochets qui
suivent le nom du tableau, en commençant par la droite. Vous adressez ainsi un tableau
partiel dont le nombre de dimensions correspond au nombre d'indices omis. Voici des
affectations correctes :

nomtableau_1[ i ] := nomtableau_2[ j ] ;
nomtableau_1[ i ] := expression ;
identificateur_1 := nomtableau_1[ i ] ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-5
Instructions

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

S7-SCL V5.3 pour S7-300/400


12-6 A5E00324651-01
Instructions

12.1.4 Affecter une valeur à une variable de type STRING

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-7
Instructions

12.1.5 Affecter une valeur à une variable de type DATE_AND_TIME

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

S7-SCL V5.3 pour S7-300/400


12-8 A5E00324651-01
Instructions

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

Syntaxe de la variable absolue

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-9
Instructions

12.1.7 Affecter une valeur à une variable globale

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

S7-SCL V5.3 pour S7-300/400


12-10 A5E00324651-01
Instructions

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-11
Instructions

12.2 Instructions de contrôle

12.2.1 Présentation des instructions de contrôle

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.

Type de branchement Fonction


Instruction IF L'instruction IF vous permet d'aiguiller le déroulement du programme
vers l'une de deux alternatives, en fonction d'une condition qui est soit
vraie, soit fausse.
Instruction CASE L'instruction CASE vous permet d'orienter le déroulement du programme
vers l'une parmi n variantes, en faisant prendre à une variable une valeur
parmi n valeurs possibles.

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.

Type de branchement Fonction


Instruction FOR Elle sert à répéter une suite d'instructions tant que la variable de contrôle
reste dans la plage de valeurs indiquée.
Instruction WHILE Elle sert à répéter une suite d'instructions tant qu'une condition
d'exécution est réalisée.
Instruction REPEAT Elle sert à répéter une suite d'instructions jusqu'à ce qu'une condition
d'achèvement soit obtenue.

Saut dans le programme


Un saut dans le programme provoque le saut immédiat à un repère spécifié et donc à une
autre instruction dans le même bloc.

Type de branchement Fonction


Instruction CONTINUE Elle sert à abandonner l'exécution du parcours momentané de la
boucle.
Instruction EXIT Elle sert à quitter une boucle à un endroit quelconque, que la condition
d'abandon soit remplie ou pas.
Instruction GOTO Elle provoque le saut immédiat à un repère de saut spécifié.
Instruction RETURN Elle permet de quitter un bloc en cours d'exécution.

S7-SCL V5.3 pour S7-300/400


12-12 A5E00324651-01
Instructions

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)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-13
Instructions

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

Règles régissant l'exécution de l'instruction IF :


• La première suite d'instructions dont l'expression logique est vraie (TRUE) vient à
exécution, les autres suites d'instructions ne sont pas exécutées.
• Si aucune expression booléenne n'est vraie (TRUE), c'est la suite d'instructions indiquée
après ELSE qui est exécutée (ou aucune instruction s'il n'y a pas de branche ELSE).
• Le nombre d'instructions ELSIF possibles est illimité.

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.

S7-SCL V5.3 pour S7-300/400


12-14 A5E00324651-01
Instructions

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 ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-15
Instructions

12.2.4 Instruction CASE

L'instruction CASE sert à choisir entre 1 à n variantes de parties de programmes. Cette


sélection repose sur la valeur en cours d'une expression de sélection.

Syntaxe
Instruction CASE
Expression de sélection (entier)

CASE Expression OF

Valeur

Section
Liste de valeurs :
des instructions

Section
ELSE : des instructions END_CASE

Règles régissant l'exécution d'une instruction CASE :


• L'expression de sélection doit fournir une valeur de type INTEGER.
• Lors de l'exécution d'une instruction CASE, le programme vérifie si la valeur de
l'expression de sélection figure dans la liste de valeurs spécifiée. Si tel est le cas, la
section d'instructions affectée à la liste est exécutée.
• Si l'opération de comparaison ne trouve pas la valeur en question dans la liste, c'est la
section d'instructions indiquée après ELSE qui est exécutée, ou aucune instruction s'il n'y
a pas de branche ELSE.

S7-SCL V5.3 pour S7-300/400


12-16 A5E00324651-01
Instructions

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 ;

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-17
Instructions

12.2.5 Instruction FOR

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

pour la valeur initiale pour la valeur terminale

Expression Section
BY de base DO des instructions

pour l'incrément

END_FOR

Exécution d'une instruction FOR


• Au départ de la boucle, la valeur initiale est attribuée à la variable de contrôle (affectation
initiale) qui est ensuite augmentée (pas positif) ou diminuée (pas négatif) du pas indiqué
après chaque nouvelle itération, jusqu'à ce que la valeur finale soit atteinte.
• Après chaque parcours, le programme vérifie si la condition (variable de contrôle dans la
plage de valeurs) est remplie. Si c'est le cas, la suite d'instructions est exécutée, sinon la
boucle (c'est-à-dire la suite d'instructions) est sautée.

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.

S7-SCL V5.3 pour S7-300/400


12-18 A5E00324651-01
Instructions

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

Type de données pour la valeur initiale


INT/DINT

Voici des exemples d'affectations initiales correctes :

FOR I := 1 TO 20
FOR I := 1 TO (INITIALE + J)

Valeur finale et incrément


Pour former la valeur finale et l'incrément, vous pouvez respectivement créer une expression
de base. La syntaxe de l'expression de base doit être la suivante :

Opérande

Expression Opérateur arithmé- Expression


de base tique de base de base

exclusivement pour une instruction FOR


+
Expression
de base
-

Expression
( )
de base

• L'indication de BY [incrément] est facultative. En son absence, la valeur utilisée est


+1.
• Valeur initiale, valeur finale et incrément sont des expressions (voir au chapitre
"Expressions, opérations, opérandes") dont l'évaluation est réalisée une seule fois au
début de l'exécution de l'instruction FOR.
• Il n'est pas permis de modifier la valeur finale et l'incrément pendant l'exécution de la
boucle.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-19
Instructions

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

S7-SCL V5.3 pour S7-300/400


12-20 A5E00324651-01
Instructions

12.2.6 Instruction WHILE

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

Règles régissant l'exécution d'une instruction WHILE :


• Avant chaque exécution de la section d'instructions, la condition d'exécution est évaluée
(boucle de refus).
• La section d'instructions suivant DO est répétée tant que la condition d'exécution fournit
la valeur TRUE.
• Si la condition d'exécution fournit la valeur FALSE, la boucle est sautée et c'est
l'instruction suivante qui est exécutée.

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-21
Instructions

12.2.7 Instruction REPEAT

L'instruction REPEAT provoque l'exécution répétée de la suite d'instructions figurant entre


REPEAT et UNTIL, jusqu'à ce que la condition d'abandon soit remplie. Cette condition est
formée suivant les règles d'une expression logique.

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

S7-SCL V5.3 pour S7-300/400


12-22 A5E00324651-01
Instructions

12.2.8 Instruction CONTINUE

L'instruction CONTINUE sert à abandonner l'exécution du parcours momentané d'une


instruction d'itération (FOR, WHILE ou REPEAT).

Syntaxe

Instruction CONTINUE

CONTINUE

Règles régissant l'exécution d'une instruction CONTINUE :


• Cette instruction provoque l'abandon immédiat de l'exécution de la suite d'instructions.
• Selon que la condition de répétition de la boucle est remplie ou pas, le tronc est exécuté
encore une fois ou bien le programme quitte l'instruction d'itération pour exécuter
l'instruction immédiatement suivante.
• Dans une instruction FOR, la variable de contrôle est augmentée du pas indiqué, aussitôt
après une instruction 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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-23
Instructions

12.2.9 Instruction EXIT

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

Règles régissant l'exécution d'une instruction EXIT :


• Cette instruction provoque l'abandon instantané de l'instruction d'itération qui est dans
son entourage immédiat.
• L'exécution du programme se poursuit après la fin de la boucle d'itération (par exemple
après END_FOR).

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

S7-SCL V5.3 pour S7-300/400


12-24 A5E00324651-01
Instructions

12.2.10 Instruction GOTO


L'instruction GOTO vous permet de réaliser un saut (un branchement) dans le programme.
Elle provoque le saut immédiat à un repère de saut spécifié, c'est-à-dire à une autre
instruction dans le même bloc.
L'instruction GOTO ne doit être utilisée qu'à titre exceptionnel, par exemple pour le
traitement des erreurs. En effet, son utilisation est contraire aux règles de la programmation
structurée.

Syntaxe
Branchement de
programme
GOTO IDENTIFICATEUR

Repère de saut

"Repère de saut" désignant un repère dans la section de déclaration LABEL/END_LABEL. Il


est placé devant l'instruction qui doit être exécutée immédiatement après GOTO.
Règles dont il faut tenir compte pour utiliser une instruction GOTO :
• La cible d'une instruction de saut doit se trouver dans le même bloc.
• La cible doit être univoque.
• Un saut menant dans une boucle n'est pas autorisé. Un saut sortant d'une boucle est
possible.

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:
// . . .

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-25
Instructions

12.2.11 Instruction RETURN

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.

S7-SCL V5.3 pour S7-300/400


12-26 A5E00324651-01
Instructions

12.3 Appel de fonctions et de blocs fonctionnels

12.3.1 Appel et transmission de paramètres

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.

Principe de la transmission de paramètres


Lorsque vous appelez une fonction ou un bloc fonctionnel, un échange de données a lieu
entre le bloc appelant et le bloc appelé. Dans l'interface du bloc appelé sont définis des
paramètres avec lesquels le bloc travaille. Ce sont les paramètres formels. Leur unique
fonction est de réserver la place pour les paramètres qui seront transmis au bloc lors de son
appel. Ces derniers sont les paramètres effectifs.

Syntaxe de la transmission de paramètres


Les paramètres à transmettre doivent être indiqués sous forme de liste de paramètres lors
de l'appel. Ils doivent figurer entre parenthèses et être séparés par des virgules.
L'exemple suivant montre l'appel d'une fonction indiquant un paramètre d'entrée, un
paramètre d'entrée/sortie et un paramètre de sortie.

Paramètres effectifs Paramètres formels


3 Par_E
LONGUEUR Par_E/S
Somme_chif Par_S

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-27
Instructions

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,......);

Affectation des paramètres


Appel symbolique :
MOTEUR.MARCHE (X1:=5,X2:=78,......);

S7-SCL V5.3 pour S7-300/400


12-28 A5E00324651-01
Instructions

12.3.2 Appel de blocs fonctionnels

12.3.2.1 Appel d'un bloc fonctionnel (FB ou SFB)


Pour l'appel d'un bloc fonctionnel, vous pouvez utiliser aussi bien un bloc de données
d'instance global qu'une zone d'instance locale du bloc de données d'instance actif.
C'est l'endroit où les données sont enregistrées qui distingue l'appel d'un FB comme
instance locale de son appel comme instance globale. Dans le premier cas, les données ne
sont pas stockées dans un DB séparé, mais dans le bloc de données d'instance du FB
appelant.

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

Nom de l'instance locale

Appel comme instance globale


Vous indiquez dans l'instruction d'appel :
• Le nom du bloc fonctionnel ou du bloc fonctionnel système (désignation de FB ou de
SFB)
• Le bloc de données d'instance (désignation de DB)
• Les valeurs des paramètres (paramètres du FB)
L'appel d'une instance globale peut être absolu ou symbolique.

Appel absolu :
FB10.DB20 (X1:=5,X2:=78,......);

Affectation des paramètres


Appel symbolique :
MOTEUR.MARCHE (X1:=5,X2:=78,......);

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-29
Instructions

Appel comme instance locale


Vous indiquez dans l'instruction :
• Le nom de l'instance locale (identificateur)
• Les valeurs des paramètres (paramètres du FB)
L'appel d'une instance locale est toujours symbolique. Vous devez déclarer le mnémonique
correspondant dans la section de déclaration du bloc appelant.

MOTEUR (X1:=5,X2:=78,......);

Affectation des paramètres

S7-SCL V5.3 pour S7-300/400


12-30 A5E00324651-01
Instructions

12.3.2.2 Définition des paramètres du FB


A l'appel d'un bloc fonctionnel – comme instance globale ou locale – vous devez définir les
paramètres suivants dans la liste des paramètres :
• Les paramètres d'entrée
• Les paramètres d'entrée/sortie
Les paramètres de sortie ne sont pas spécifiés à l'appel d'un FB, mais reçoivent des valeurs
après l'appel de ce dernier.

Syntaxe d'une affectation de valeur aux paramètres du FB :


Elle est la même qu'il s'agisse d'appeler une instance globale ou une instance locale.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-31
Instructions

Résultat après l'exécution du bloc


Après l'exécution du bloc
• Les paramètres d'entrée actuels transmis n'ont pas changé ;
• Les valeurs des paramètres d'entrée/sortie transmises mais modifiées sont actualisées, à
l'exception des paramètres d'entrée/sortie de type de données simple ;
• Les paramètres de sortie du bloc appelant peuvent être lus dans le bloc de données
d'instance ou dans la zone d'instance locale.

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);

S7-SCL V5.3 pour S7-300/400


12-32 A5E00324651-01
Instructions

12.3.2.3 Définition des entrées (FB)


Des paramètres effectifs sont affectés aux paramètres formels d'entrée au moyen
d'affectations de valeur. Le FB ne peut pas modifier ces paramètres effectifs. L'affectation de
valeurs actuelles aux paramètres d'entrée est facultative. Si vous n'indiquez pas de
nouveaux paramètres effectifs, les valeurs du dernier appel restent en vigueur.
Paramètres effectifs possibles :

Paramètre effectif Explication


Expression • Expression arithmétique, logique ou de comparaison
• Constante
• Variable étendue
Désignation de temporisation/ Vous déterminez une temporisation ou un compteur qui doivent être utilisés
de compteur à l'exécution d'un bloc.

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.

Dans la définition du paramètre, vous indiquez l'adresse du bloc sous forme


absolue ou symbolique.

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

(Paramètre formel) DESIGNATION


DU BLOC

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-33
Instructions

12.3.2.4 Définition des entrées/sorties (FB)


Des paramètres effectifs sont affectés aux paramètres formels d'entrée/sortie du FB appelé
au moyen d'affectations de valeur. Les paramètres d'entrée/sortie peuvent être modifiés par
le FB appelé. La nouvelle valeur du paramètre qui résulte de l'exécution du FB s'inscrit dans
le paramètre effectif où elle écrase la valeur initiale.
Si vous avez déclaré des paramètres d'entrée/sortie dans le FB appelé, vous devez les
définir lors du premier appel. Pour les passages suivants, l'indication de paramètres effectifs
est facultative. Cependant, dans le cas de paramètres d'entrée/sortie d'un type de données
simple, les paramètres effectifs ne sont pas actualisés si les paramètres formels ne sont pas
définis lors de l'appel.
Puisque le paramètre effectif attribué peut être modifié durant l'exécution du FB, en sa
qualité de paramètre d'entrée/sortie, il doit s'agir d'une variable.

Paramètre effectif Explication


Variable étendue Vous pouvez utiliser les types de variables étendues suivants :
• Variable simple et paramètre
• Adressage de variable absolue
• Adressage de bloc de données
• Appel de fonction

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

S7-SCL V5.3 pour S7-300/400


12-34 A5E00324651-01
Instructions

12.3.2.5 Lecture des valeurs de sortie (appel de FB)


Une fois le bloc appelé exécuté, les paramètres de sortie peuvent être lus dans le bloc
d'instance globale ou dans la zone d'instance locale à l'aide d'une affectation de valeur.

Exemple
RESULTAT := DB10.CONTROLE ;

12.3.2.6 Exemple d'appel d'une instance globale


Un bloc fonctionnel comportant une boucle FOR pourrait se présenter comme dans les
exemples suivants. On y suppose que le mnémonique TEST a été déclaré pour le FB17
dans la table des mnémoniques.

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-35
Instructions

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.

//Appel absolu, instance globale :


FB17.DB10 (VALEUR_FINALE:=10, IQ1:=VARIABLE1);

//Appel symbolique, instance globale :


TEST.TEST_1 (VALEUR_FINALE:= 10, IQ1:= VARIABLE1) ;

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.

Lecture de la valeur de sortie


Il y a plusieurs façons de lire le paramètre de sortie CONTROLE :

// L'adressage du paramètre de sortie


// est réalisé par
RESULTAT:= DB10.CONTROLE;

//Vous avez également la possibilité d'affecter


//directement le paramètre de sortie à un
//paramètre d'entrée à l'appel d'un autre FB :
FB17.DB12 (ENTREE_1:= DB10.CONTROLE);

S7-SCL V5.3 pour S7-300/400


12-36 A5E00324651-01
Instructions

12.3.2.7 Exemple d'appel d'une instance locale


Un bloc fonctionnel avec une boucle FOR simple pourrait être programmé comme dans
l'exemple "Appel en tant qu'instance globale", le mnémonique TEST ayant été déclaré pour
le FB17 dans la table de mnémoniques.
En supposant que VARIABLE1 est déclarée comme variable de type REAL dans le bloc
appelant, vous pouvez appeler le FB comme suit.

Appel
FUNCTION_BLOCK CALL
VAR
// Déclaration d'instance locale
TEST_L : TEST ;
VARIABLE1 : REAL ;
RESULTAT : BOOL ;
END_VAR
BEGIN
. . .

// Appel, instance locale :


TEST_L (VALEUR_FINALE:= 10, IQ1:= VARIABLE1) ;

Lecture de la valeur de sortie


Le paramètre de sortie CONTROLE peut être lu de la manière suivante :
// L'adressage du paramètre de sortie
// est réalisé par
RESULTAT := TEST_L.CONTROLE ;
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-37
Instructions

12.3.3 Appel de fonctions

12.3.3.1 Appel d'une fonction (FC)


Pour appeler une fonction, vous indiquez son nom (DESIGNATION DE LA FC, DE LA SFC
ou IDENTIFICATEUR) ainsi que la liste des paramètres. Le nom de la fonction qui désigne
la valeur de retour peut être absolu ou symbolique :

FC31 (X1:=5, Q1:=total_horizontal) // sous forme absolue


ECART (X1:=5, Q1=:total_horizontal) // sous forme symbolique
Après l'appel, les résultats de la fonction sont disponibles comme valeurs de retour ou
comme paramètres de sortie et d'entrée/sortie (paramètres effectifs).

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.

S7-SCL V5.3 pour S7-300/400


12-38 A5E00324651-01
Instructions

12.3.3.2 Valeur de retour (FC)


Contrairement au blocs fonctionnels, les fonctions fournissent la valeur de retour comme
résultat. C'est la raison pour laquelle elles peuvent être traitées comme des opérandes (à
l'exception des fonctions du type VOID).
La fonction calcule la valeur de retour qui porte le même nom qu'elle et la retourne au bloc
appelant, où elle remplace l'appel de la fonction.
L'exemple suivant montre l'appel de la fonction ECART et l'affectation de son résultat à la
variable LONGUEUR.

LONGUEUR:= ECART (X1:=-3, Y1:=2);


La valeur de retour peut être utilisée dans les éléments suivants d'une FC ou d'un FB :
• Dans une affectation de valeur,
• Dans une expression logique, arithmétique ou de comparaison ou
• Comme paramètre pour un autre appel de bloc fonctionnel ou de fonction.

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-39
Instructions

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)

S7-SCL V5.3 pour S7-300/400


12-40 A5E00324651-01
Instructions

12.3.3.4 Définition des entrées (FC)


Des valeurs (paramètres effectifs) sont affectés aux paramètres formels d'entrée de la FC
appelée, au moyen d'affectations de valeur. La FC peut travailler avec ces paramètres, mais
pas les modifier. Contrairement à ce qui se passe pour l'appel d'un FB, ce paramétrage est
obligatoire dans l'appel d'une FC.
Les paramètres effectifs suivants peuvent être affectés à une entrée :

Paramètre effectif Explication


Expression Une expression représente une valeur et se compose d'opérandes et
d'opérations. Voici les types d'expressions disponibles :
• Expression arithmétique, logique ou de comparaison
• Constante
• Variable étendue
Désignation de temporisation/ Vous déterminez une temporisation ou un compteur qui doivent être utilisés
de compteur à l'exécution d'un bloc
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. En définissant le paramètre, vous indiquez l'adresse du bloc sous
forme absolue ou symbolique

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-41
Instructions

12.3.3.5 Définition des sorties et des entrées/sorties (FC)


Définir les sorties consiste à spécifier la variable du bloc appelant dans laquelle seront
écrites les valeurs de sortie résultant de l'exécution de la fonction. Définirr les entrées/sorties
consiste à affecter une valeur effective à chaque paramètre d'entrée/sortie.
Dans la définition des sorties et des entrées/sorties, les paramètres effectifs doivent être des
variables, puisque la FC doit écrire des valeurs dans les paramètres. C'est la raison pour
laquelle vous ne pouvez pas affecter un paramètre d'entrée à un paramètre d'entrée/sortie
(la nouvelle valeur ne pourrait pas y être écrite). Ainsi donc, seule une variable étendue peut
être affectée dans la définition des sorties et des entrées/sorties :

Paramètre effectif Explication


Variable étendue Vous pouvez utiliser les types de variables étendues suivants :
• Variable simple et paramètre
• Adressage de variable absolue
• Adressage de bloc de données
• Appel de fonction

Syntaxe

$IIHFWDWLRQGHOಫHQWUÚHVRUWLH 
9DULDEOH
,'(17,),&$7(85 ÚWHQGXH

1RPGXSDUDPÙWUH ! 3DUDPÙWUHHIIHFWLI
GಫHQWUÚHVRUWLH
SDUDPÙWUHIRUPHO DSSHOGಫXQ)&

Affectation de la sortie ou de l'entrée/sortie

Variable
IDENTIFICATEUR :=
étendue

Nom du paramètre
de sortie ou Paramètre effectif
d'entrée/sortie

(Paramètre formel)

S7-SCL V5.3 pour S7-300/400


12-42 A5E00324651-01
Instructions

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-43
Instructions

12.3.3.6 Exemple d'appel de fonction

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) :

FUNCTION ECART: REAL // sous forme symbolique


VAR_INPUT
X1: REAL;
X2: REAL;
Y1: REAL;
Y2: REAL;
END_VAR
VAR_OUTPUT
Q2: REAL;
END_VAR
BEGIN
ECART:= SQRT( (X2-X1)**2 + (Y2-Y1)**2 );
Q2:= X1+X2+Y1+Y2;
END_FUNCTION

Bloc appelant

Diverses possibilités s'offrent à vous pour utiliser ultérieurement la valeur de la fonction :


FUNCTION_BLOCK CALL
VAR
LONGUEUR : REAL ;
TOTAL_HORIZONTAL : REAL ;
RAYON : REAL;
Y : REAL;
END_VAR
BEGIN
. . .
// Appel dans une affectation de valeur
LONGUEUR := ECART (X1:=3, Y1:=2, X2:=8.9, Y2:= 7.4,
Q2:=TOTAL_HORIZONTAL) ;
//Appel dans une expression arithmétique ou logique, par exemple
Y := RAYON + ECART (X1:=-3, Y1:=2, X2:=8.9, Y2:=7.4,
Q2:=total_horizontal)
//Utilisation dans la définition des paramètres d'un autre bloc
appelé
FB32.DB32 (DISTANCE:= ECART (X1:=-3, Y1:=2, X2:=8.9,
Y2:=7.4), Q2:=total_horizontal)
. . .
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


12-44 A5E00324651-01
Instructions

12.3.4 Paramètres définis automatiquement

12.3.4.1 Paramètre d'entrée EN


Tout bloc fonctionnel et toute fonction possèdent un paramètre d'entrée défini
automatiquement, le paramètre EN, qui est du type de données BOOL. Il est stocké dans la
zone des données temporaires du bloc. Le bloc appelé est exécuté si EN est vrai, sinon il ne
l'est pas. L'affectation d'une valeur au paramètre EN est facultative. Il faut cependant veiller
à ne pas déclarer EN dans la section de déclaration d'un bloc ou d'une fonction.
EN étant un paramètre d'entrée, vous ne pouvez pas le modifier dans un bloc.

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 ;

// Appel d'une fonction avec définition du paramètre EN :


Résultat := FC85 (EN:= MON_ACTIVE, PAR_1:= 27) ;
// FC85 n'a pas été exécutée, car MON_ACTIVE a été mis à FALSE ci-
dessus....

END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 12-45
Instructions

12.3.4.2 Paramètre de sortie ENO


Tout bloc fonctionnel et toute fonction possèdent un paramètre de sortie défini
automatiquement, le paramètre ENO, qui est du type de données BOOL. Il est stocké dans
la zone des données temporaires du bloc. A la fin de l'exécution d'un bloc, la valeur actuelle
du drapeau OK est stockée dans ENO.
Immédiatement après l'appel d'un bloc, vous pouvez vérifier, à l'aide de la valeur de ENO, si
toutes les opérations dans le bloc se sont déroulées correctement ou si des erreurs sont
survenues.

Exemple
// Appel d'un bloc fonctionnel :
FB30.DB30 ([définition des paramètres]);

// Vérification du déroulement correct dans le bloc appelé :


IF ENO THEN
// tout s'est déroulé correctement
// . . .
ELSE
// une erreur est survenue et doit être corrigée
// . . .
END_IF;

S7-SCL V5.3 pour S7-300/400


12-46 A5E00324651-01
13 Compteurs et temporisation

13.1 Compteurs

13.1.1 Fonctions de comptage

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 :

Fonction de comptage Signification


S_CU Compteur incrémental (Counter Up)
S_CD Compteur décrémental (Counter Down)
S_CUD Compteur incrémental/décrémental (Counter Up Down)

13.1.2 Appel d'une fonction de comptage

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.

Appel absolu ou dynamique


Vous pouvez entrer une valeur absolue comme numéro de compteur dans l'appel (par ex.
C_NO:=Z10). Mais il faut savoir qu'une telle valeur n'est plus modifiable à l'exécution.
A la place du numéro de compteur absolu, vous pouvez aussi indiquer une variable ou une
constante du type de données INT. Ceci a l'avantage de permettre un appel dynamique de
la fonction de comptage, si vous affectez un autre numéro à la variable ou à la constante à
chaque appel.
Une autre possibilité pour l'appel dynamique est l'indication d'une variable du type de
données COUNTER.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-1
Compteurs et temporisation

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);

//Exemple d'appel dynamique : un autre compteur est appelé


//à chaque parcours d'une boucle FOR :
FUNCTION_BLOCK COMPT
VAR_INPUT
Compt: ARRAY [1..4] of STRUCT
C_NO: INT;
PV : WORD;
END_STRUCT;
.
.
END_VAR
.
.
FOR I:= 1 TO 4 DO
S_CD(C_NO:=compt[I].C_NO, S:=true, PV:= compt[I].PV);
END_FOR;

//Exemple d'appel dynamique grâce à l'emploi d'une variable


//du type de données COUNTER :
FUNCTION_BLOCK COMPTEUR
VAR_INPUT
MonCompteur:COUNTER;
END_VAR
.
.
Val_cour:=S_CD (C_NO:=MonCompteur,.....);

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).

S7-SCL V5.3 pour S7-300/400


13-2 A5E00324651-01
Compteurs et temporisation

13.1.3 Définition des paramètres d'une fonction de comptage

Le tableau suivant indique les paramètres des fonctions de comptage :

Paramètre Type de données Description


C_NO COUNTER Numéro du compteur (DESIGNATION DU COMPTEUR) ; la plage
INT dépend de la CPU.
CD BOOL Entrée CD : décrémenter
CU BOOL Entrée CU : incrémenter
S BOOL Entrée d'initialisation du compteur
PV WORD Valeur comprise entre 0 et 999 pour initialiser le compteur (saisie
sous la forme 16#<valeur>, la valeur étant en format DCB)
R BOOL Entrée de remise à "0" du compteur
Q BOOL Sortie : état du compteur
CV WORD Sortie : état du compteur en binaire
RET_VAL WORD Résultat en format BCD

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-3
Compteurs et temporisation

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

S7-SCL V5.3 pour S7-300/400


13-4 A5E00324651-01
Compteurs et temporisation

13.1.4 Saisie et exploitation de la valeur de comptage

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

Valeur de comptage dans le format DCB (0 à 999)

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-5
Compteurs et temporisation

13.1.5 Compteur incrémental (S_CU)

Le compteur incrémental (S_CU) vous permet uniquement d'exécuter des opérations de


comptage incrémental. Le tableau suivant indique comment le compteur fonctionne.

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.

13.1.6 Compteur décrémental (S_CD)

Le compteur décrémental (S_CD) vous permet uniquement d'exécuter des opérations de


comptage décrémental. Le tableau suivant indique comment le compteur fonctionne :

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.

S7-SCL V5.3 pour S7-300/400


13-6 A5E00324651-01
Compteurs et temporisation

13.1.7 Compteur incrémental/décrémental (S_CUD)

Le compteur incrémental et décrémental (S_CUD) vous permet d'exécuter des opérations de


comptage aussi bien incrémental que décrémental. Lorsque leurs impulsions sont
simultanées, les deux opérations sont traitées. La valeur de comptage ne change pas. Le
tableau suivant indique comment le compteur fonctionne.

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.

13.1.8 Exemple de fonction de comptage

Définition des paramètres


Le tableau montre la définition des paramètres de la fonction S_CD prise pour exemple.

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-7
Compteurs et temporisation

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

S7-SCL V5.3 pour S7-300/400


13-8 A5E00324651-01
Compteurs et temporisation

13.2 Temporisations

13.2.1 Fonctions de temporisation

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.

Fonction de temporisation Signification


S_PULSE Démarrer une temporisation sous forme d'impulsion
S_PEXT Démarrer une temporisation sous forme d'impulsion prolongée
S_ODT Démarrer une temporisation sous forme de retard à la montée
S_ODTS Démarrer une temporisation sous forme de retard à la montée
mémorisé
S_OFFDT Démarrer une temporisation sous forme de retard à la retombée

13.2.2 Appel d'une fonction de temporisation

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.

Appel absolu ou dynamique


Vous pouvez entrer dans l'appel une valeur absolue de type TIMER comme numéro de la
temporisation (par ex. T_NO:=T10). Mais il faut savoir qu'une telle valeur n'est plus
modifiable à l'exécution.
A la place du numéro absolu, vous pouvez aussi indiquer une variable ou une constante de
type de données INT. Ceci a l'avantage de permettre un appel dynamique de la fonction, si
vous affectez un autre numéro à la variable ou à la constante à chaque appel.
Une autre possibilité pour l'appel dynamique est l'indication d'une variable du type de
données TIMER.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-9
Compteurs et temporisation

Exemples
//Exemple d'appel absolu :
CurrTime:=S_ODT (T_NO:=T10,
S:=TRUE,
TV:=T#1s,
R:=FALSE,
BI:=biVal,
Q:=actFlag);

//Exemple d'appel dynamique : une autre temporisation est appelée


//à chaque parcours d'une boucle FOR :
FUNCTION_BLOCK TEMPO
VAR_INPUT
MA_TEMPO: ARRAY [1..4] of STRUCT
T_NO: INT;
TV : WORD;
END_STRUCT;
.
.
END_VAR
.
.
FOR I:= 1 TO 4 DO
CurrTime:= S_ODT(T_NO:=MA_TEMPO[I].T_NO, S:=true, TV:=
MA_TEMPO[I].TV);
END_FOR;

//Exemple d'appel dynamique grâce à l'emploi d'une variable


//du type de données TIMER :
FUNCTION_BLOCK TEMPORISATION
VAR_INPUT
maTempo:TIMER;
END_VAR
.
.
Tempo_cour:=S_ODT (T_NO:=maTempo,.....);

Nota
Les noms des fonctions sont les mêmes dans les jeux d'abréviations allemand et anglais.

S7-SCL V5.3 pour S7-300/400


13-10 A5E00324651-01
Compteurs et temporisation

13.2.3 Définition des paramètres d'une fonction de temporisation

Le tableau suivant indique les paramètres pour une fonction de temporisation.

Paramètre Type de données Description


T_NO TIMER Numéro d'identification de la temporisation ; la plage dépend de
INTEGER la CPU.
S BOOL Entrée de démarrage
TV S5TIME Valeur par défaut de la durée (format DCB)
R BOOL Entrée de remise à 0
Q BOOL Etat de la temporisation
BI WORD Durée restante (binaire)
RET_VAL S5TIME Valeur de la temporisation

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-11
Compteurs et temporisation

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

S7-SCL V5.3 pour S7-300/400


13-12 A5E00324651-01
Compteurs et temporisation

13.2.4 Saisie et exploitation de la valeur de temps

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 :

15... ...8 7... ...0

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

Base de temps Valeur de temps dans le format DCB (0 à 999)


1 seconde
Ces bits sont insignifiants à l'appel de la temporisation

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-13
Compteurs et temporisation

Base de temps des valeurs de temps


Vous avez besoin de la base de temps (bits 12 et 13 du mot de temporisation) pour saisir et
exploiter la valeur de temps. Elle détermine l'intervalle selon lequel la valeur de temps est
diminuée d'une unité (voir le tableau suivant). La plus petite base de temps est de 10 ms, la
plus grande de 10 s.

Base de temps Code binaire


10 ms 00
100 ms 01
1s 10
10 s 11

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.

S7-SCL V5.3 pour S7-300/400


13-14 A5E00324651-01
Compteurs et temporisation

13.2.5 Démarrer une temporisation sous forme d'impulsion (S_PULSE)

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.

Signal d'entrée E 2.1

Signal de sortie A 4.0 S_PULSE


(temporisation sous forme t
d'impulsion)

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-15
Compteurs et temporisation

13.2.6 Démarrer une temporisation sous forme d'impulsion prolongée


(S_PEXT)

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).

Signal d'entrée E 2.1

Signal de sortie A 4.0 S_PEXT


(temporisation sous forme t
d'impulsion prolongée)

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.

S7-SCL V5.3 pour S7-300/400


13-16 A5E00324651-01
Compteurs et temporisation

13.2.7 Démarrer une temporisation sous forme de retard à la montée (S_ODT)

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.

Signal d'entrée E 2.1

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-17
Compteurs et temporisation

13.2.8 Démarrer une temporisation sous forme de retard à la montée


mémorisé (S_ODTS)

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".

Signal d'entrée E 2.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.

S7-SCL V5.3 pour S7-300/400


13-18 A5E00324651-01
Compteurs et temporisation

13.2.9 Démarrer une temporisation sous forme de retard à la retombée


(S_OFFDT)

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.

Signal d'entrée E 2.1

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-19
Compteurs et temporisation

13.2.10 Exemple de fonction de temporisation

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

S7-SCL V5.3 pour S7-300/400


13-20 A5E00324651-01
Compteurs et temporisation

13.2.11 Choix de la temporisation appropriée

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.

Signal d'entrée E 2.1

Signal de sortie A 4.0 S_PULSE


(temporisation t
sous forme
d'impulsion) Le temps maximal durant lequel le signal de sortie reste à
« 1 » est égal à la valeur de temps t programmée. Il reste à
« 1 » pour une durée plus courte, si le signal d'entrée passe
à « 0 ».

Signal de sortie A 4.0 S_PEXT


(temporisation sous t
forme d'impulsion
prolongée) Le signal de sortie reste à « 1 » pendant la durée programmée,
quelle que soit la durée pendant laquelle le signal d'entrée
reste à « 1 ». L'impulsion est à nouveau lancée lorsque le
signal de déclenchement est activé durant la période « t ».

Signal de sortie A 4.0 S_ODT


(impulsion sous forme t
de retard à la montée
Le signal de sortie ne passe de « 0 » à « 1 » que lorsque le
temps programmé s'est écoulé et si le signal d'entrée est
toujours à « 1 ».

Signal de sortie A 4.0 S_ODTS


(temporisation sous t
forme de retard à la
montée mémorisé) Le signal de sortie ne passe de « 0 » à « 1
temps programmé s'est écoulé, quelle que soit la durée
pendant laquelle le signal d'entrée reste à « 1

Signal de sortie A 4.0 S_OFFDT


(temporisation sous t
forme de retard à la
retombée) Le signal de sortie ne passe de « 0 » à « 1 » que lorsque le
signal d'entrée passe de « 0 » à « 1 ». Il reste à « 1 » pendant
le temps programmé. Le temps est démarré lorsque le signal
d'entrée passe de « 1 » à « 0 ».

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 13-21
Compteurs et temporisation

S7-SCL V5.3 pour S7-300/400


13-22 A5E00324651-01
14 Fonctions standard de S7-SCL

14.1 Conversion de types de données

14.1.1 Conversion de types de données

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-1
Fonctions standard de S7-SCL

14.1.2 Conversion automatique du type de données

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.

Classes Ordre de conversion


ANY_BIT BOOL > BYTE > WORD > DWORD
ANY_NUM INT > DINT > REAL

Exemple de conversion automatique de types de données


VAR
REGULATEUR_PID_1 : BYTE ;
REGULATEUR_PID_2 : WORD ;
END_VAR
BEGIN
IF (REGULATEUR_PID_1 <> REGULATEUR_PID_2) THEN ...
(* Dans l'instruction IF ci-dessus, REGULATEUR_PID_1 est converti
automatiquement de BYTE en WORD. *)

14.1.2.1 Fonctions de conversion de classe A


Le tableau suivant énumère les fonctions de conversion du type de données appartenant à
la classe A. Quoique le compilateur les lance automatiquement, vous pouvez aussi les
indiquer de manière explicite. Leur résultat est toujours défini.

Nom de la fonction Règle de conversion


BOOL_TO_BYTE Complément par des zéros à gauche
BOOL_TO_DWORD Complément par des zéros à gauche
BOOL_TO_WORD Complément par des zéros à gauche
BYTE_TO_DWORD Complément par des zéros à gauche
BYTE_TO_WORD Complément par des zéros à gauche
CHAR_TO_STRING Transformation en chaîne (de longueur 1) contenant le même caractère.
DINT_TO_REAL Transformation en REAL conformément à la norme IEEE ; la valeur peut
être modifiée en raison de l'autre précision pour REAL.
INT_TO_DINT Pour un paramètre d'entrée négatif, le mot de poids fort de la valeur de la
fonction est complété par 16#FFFF, dans tous les autres cas par des zéros ;
la valeur reste la même.
INT_TO_REAL Transformation en REAL conformément à la norme IEEE ; la valeur reste la
même.
WORD_TO_DWORD Complément par des zéros à gauche

S7-SCL V5.3 pour S7-300/400


14-2 A5E00324651-01
Fonctions standard de S7-SCL

14.1.3 Fonctions standard pour la conversion explicite du type de données

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.

14.1.3.1 Fonctions de conversion de classe B


Le tableau suivant énumère les fonctions de conversion du type de données appartenant à
la classe B. Vous devez les spécifier explicitement. Leur résultat peut être indéfini si la taille
du type de données cible est insuffisante.
Vous pouvez soit contrôler vous-même cette éventualité en plaçant une vérification de
limites en amont, soit demander au système de le faire en sélectionnant l'option "Activer
drapeau OK" avant d'effectuer la compilation. Dans les cas où le résultat est indéfini, le
système affecte la valeur FALSE au drapeau OK.

Nom de la fonction Règle de conversion OK


BOOL_TO_INT WORD_TO_INT(BOOL_TO_WORD(x)) N
BOOL_TO_DINT DWORD_TO_DINT(BOOL_TO_DWORD(x)) N
BYTE_TO_BOOL Copie du bit de poids faible O
BYTE_TO_CHAR Prise en charge de la chaîne binaire N
BYTE_TO_INT WORD_TO_INT(BYTE_TO_WORD(x)) N
BYTE_TO_DINT DWORD_TO_DINT(BYTE_TO_DWORD(x)) N
CHAR_TO_BYTE Prise en charge de la chaîne binaire N
CHAR_TO_INT La chaîne binaire du paramètre d'entrée est inscrite dans l'octet de poids N
faible de la valeur de la fonction ; l'octet de poids fort est complété par
des zéros.
DATE_TO_DINT Prise en charge de la chaîne binaire N
DINT_TO_DATE Prise en charge de la chaîne binaire O
DINT_TO_DWORD Prise en charge de la chaîne binaire N
DINT_TO_INT Copie du bit de signe ; la valeur contenue dans le paramètre d'entrée est O
interprétée dans le type de données INT ; si elle est inférieure à - 32_768
ou supérieure à 32_767, la variable OK prend la valeur FALSE.
DINT_TO_TIME Prise en charge de la chaîne binaire N

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-3
Fonctions standard de S7-SCL

Nom de la fonction Règle de conversion OK


DINT_TO_TOD Prise en charge de la chaîne binaire O
DINT_TO_BOOL DWORD_TO_BOOL(DINT_TO_DWORD(x)) O
DINT_TO_BYTE DWORD_TO_BYTE(DINT_TO_DWORD(x)) O
DINT_TO_STRING DI_STRNG N
DINT_TO_WORD DWORD_TO_WORD(DINT_TO_DWORD(x)) O
DWORD_TO_BOOL Copie du bit de poids faible O
DWORD_TO_BYTE Copie des 8 bits de poids faible O
DWORD_TO_DINT Prise en charge de la chaîne binaire N
DWORD_TO_REAL Prise en charge de la chaîne binaire N
DWORD_TO_WORD Copie des 16 bits de poids faible O
DWORD_TO_INT DINT_TO_INT (DWORD_TO_ DINT(x)) O
INT_TO_CHAR Prise en charge de la chaîne binaire O
INT_TO_WORD Prise en charge de la chaîne binaire N
INT_TO_BOOL WORD_TO_BOOL(INT_TO_WORD(x)) O
INT_TO_BYTE WORD_TO_BYTE(INT_TO_WORD(x)) O
INT_TO_DWORD WORD_TO_DWORD(INT_TO_WORD(x)) N
INT_TO_STRING I_STRNG(x) N
REAL_TO_DINT Arrondi de la valeur REAL IEEE à DINT ; si la valeur est inférieure à - O
2_147_483_648 ou supérieure à 2_147_483_647, la variable OK prend
la valeur FALSE.
REAL_TO_DWORD Prise en charge de la chaîne binaire N
REAL_TO_INT Arrondi de la valeur REAL IEEE à INT ; si la valeur est inférieure à - O
32_768 ou supérieure à 32_767, la variable OK prend la valeur FALSE.
REAL_TO_STRING R_STRNG(x) O
STRING_TO_CHAR Copie du premier caractère de la chaîne ; si la longueur de STRING est O
différente de 1, la variable OK prend la valeur FALSE.
STRING_TO_INT STRNG_I(x) N
STRING_TO_DINT STRNG_DI(x) N
STRING_TO_REAL STRNG_R(x) N
TIME_TO_DINT Prise en charge de la chaîne binaire N
TOD_TO_DINT Prise en charge de la chaîne binaire N
WORD_TO_BOOL Copie du bit de poids faible O
WORD_TO_BYTE Copie des 8 bits de poids faible O
WORD_TO_INT Prise en charge de la chaîne binaire N
WORD_TO_DINT INT_TO_DINT(WORD_TO_INT(x)) N
WORD_TO_BLOCK_DB La configuration binaire de WORD est interprétée comme numéro de N
bloc de données.
BLOCK_DB_TO_WORD Le numéro de bloc de données est interprété comme configuration N
binaire de WORD.
BCD_TO_INT(x) L'expression x a le type WORD et est interprétée comme valeur codée N
WORD_BCD_TO_INT(x) BCD entre -999 et +999. Après la conversion, le résultat se présente
sous forme de nombre entier (représentation binaire) de type INT.
Si une erreur survient lors de la conversion, le système d'automatisation
se met en STOP. Une exploitation de la cause de l'arrêt est possible
dans l'OB121.

S7-SCL V5.3 pour S7-300/400


14-4 A5E00324651-01
Fonctions standard de S7-SCL

Nom de la fonction Règle de conversion OK


INT_TO_BCD(x) L'expression x a le type INT et est interprétée comme nombre entier J
INT_TO_BCD_WORD(x) avec une valeur comprise entre -999 et +999. Après la conversion, le
résultat se présente sous forme de nombre codé BCD de type WORD.
En dehors de la plage de valeurs, le résultat est indéfini. Lorsque l'option
"Mettre le drapeau OK à 1" est activée, la valeur false est affectée au
drapeau OK.
BCD_TO_DINT(x) L'expression x a le type DWORD et est interprétée comme valeur codée N
DWORD_BCD_TO_DINT(x) BCD comprise entre -9999999 et +9999999. Après la conversion, le
résultat se présente sous forme de nombre entier (représentation
binaire) de type DINT
Si une erreur se produit lors de la conversion, le système
d'automatisation se met en STOP. Une exploitation de la cause de l'arrêt
est possible dans l'OB121.
DINT_TO_BCD(x) L'expression x a le type DINT et est interprétée comme nombre entier J
DINT_TO_BCD_DWORD(x) avec une valeur comprise entre –9999999 et +9999999. Après la
conversion, le résultat se présente sous forme de nombre codé BCD de
type DWORD
En dehors de la plage de valeurs, le résultat est indéfini. Lorsque l'option
"Mettre le drapeau OK à 1" est activée, la valeur false est affectée au
drapeau OK.

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-5
Fonctions standard de S7-SCL

14.1.3.2 Fonctions d'arrondi et de troncature


Les fonctions d'arrondi et de troncature de nombres font également partie de la conversion
du type de données. Le tableau suivant indique le nom, le type de données (du paramètre
d'entrée et de la valeur de la fonction) et la tâche de ces fonctions.

Nom de la Type du paramètre Type de la valeur de Tâche


fonction d'entrée la fonction

ROUND REAL DINT Arrondir (former un nombre DINT)


Conformément à la norme DIN EN 61131-3,
l'arrondi se fait toujours à l'entier pair le plus
proche, c'est-à-dire que 1.5 est arrondi à 2 et
2.5 également à 2.
TRUNC REAL DINT Tronquer (former un nombre DINT)

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) ;

// Arrondi à la valeur supérieure (résultat : 4)


ROUND (3.56) ;

// Troncature (résultat : 3)
TRUNC (3.14) ;

// Troncature (résultat : 3)
TRUNC (3.56) ;

S7-SCL V5.3 pour S7-300/400


14-6 A5E00324651-01
Fonctions standard de S7-SCL

14.1.3.3 Exemples de conversion avec des fonctions standard


Dans l'exemple suivant, une conversion explicite s'avère indispensable, car le type de
données cible est moins puissant que le type de données source.

FUNCTION_BLOCK FB10
VAR
COMMUTATEUR : INT;
REGULATEUR : DINT;
END_VAR

(* INT est moins puissant que DINT *)


COMMUTATEUR := DINT_TO_INT (REGULATEUR) ;
// . . .
END_FUNCTION_BLOCK

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

(* L'utilisation de MOD n'est autorisée qu'avec des données de type


INT ou DINT *)
CONV2 := VAL_ENT MOD REAL_TO_INT (COMMUTATEUR);
// . . .
END_FUNCTION_BLOCK

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

(* L'utilisation de NOT n'est pas autorisée avec des données de type


INT *)
CONV1 := NOT INT_TO_WORD(VAL_ENT);
// . . .
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-7
Fonctions standard de S7-SCL

L'exemple suivant montre la conversion de valeurs d'entrée et de sortie de la périphérie :

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.*)

Rayon := Rayon (surface:= donnees_cercle.surface)


%AB0 :=WORD_TO_BYTE (INT_TO_WORD(RAYON));
(*Le rayon est obtenu à partir de la surface sous forme d'entier.
Pour la sortie, la valeur est d'abord convertie en une autre classe
de type (INT_TO_WORD), puis en un type moins puissant
(WORD_TO_BYTE).*)
// . . .
END_FUNCTION_BLOCK

S7-SCL V5.3 pour S7-300/400


14-8 A5E00324651-01
Fonctions standard de S7-SCL

14.2 Fonctions standard numériques

14.2.1 Fonctions standard arithmétiques générales

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.

Nom de la fonction Type du paramètre Type de la valeur de la Description


d'entrée fonction
ABS ANY_NUM ANY_NUM Valeur absolue
SQR ANY_NUM REAL Carré
SQRT ANY_NUM REAL Racine carrée

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".

14.2.2 Fonctions logarithmiques

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.

Nom de la fonction Type du paramètre Type de la valeur de la Description


d'entrée fonction
EXP ANY_NUM REAL e puissance IN
EXPD ANY_NUM REAL 10 puissance IN
LN ANY_NUM REAL Logarithme naturel
LOG ANY_NUM REAL Logarithme décimal

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-9
Fonctions standard de S7-SCL

14.2.3 Fonctions trigonométriques

Les fonctions trigonométriques suivantes calculent des angles en radians.


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.

Nom de la fonction Type du paramètre Type de la valeur de la Description


d'entrée fonction
ACOS ANY_NUM REAL Arccosinus
ASIN ANY_NUM REAL Arcsinus
ATAN ANY_NUM REAL Arctangente
COS ANY_NUM REAL Cosinus
SIN ANY_NUM REAL Sinus
TAN ANY_NUM REAL Tangente

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 des aides de référence sur les fonctions standard

14.2.4 Exemples de fonctions standard numériques

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)

S7-SCL V5.3 pour S7-300/400


14-10 A5E00324651-01
Fonctions standard de S7-SCL

14.3 Fonctions standard sur chaîne binaire


Chaque fonction standard sur chaîne binaire possède deux paramètres d'entrée désignés
par IN et N. Le résultat est toujours la valeur de la fonction. Le tableau suivant indique les
noms des fonctions ainsi que les types de données des deux paramètres d'entrée et de la
valeur de la fonction. La signification des paramètres d'entrée est la suivante :
• paramètre d'entrée IN : mémoire dans laquelle sont exécutées les opérations de
décalage de bits ; le type de données de ce paramètre détermine celui de la valeur de la
fonction ;
• paramètre d'entrée N : nombre de rotations pour les fonctions de rotation ROL et ROR ou
nombre de positions à décaler pour les fonctions SHL et SHR.

Le tableau suivant décrit toutes les fonctions standard sur chaîne binaire disponibles.

Nom de la Type du paramètre Type du paramètre Type de la valeur Tâche


fonction d'entrée IN d'entrée N de la fonction
ROL BOOL INT BOOL Une rotation vers la gauche
BYTE INT BYTE du nombre de positions
WORD INT WORD indiqué par le paramètre N va
DWORD INT DWORD être effectuée sur la valeur
donnée par le paramètre IN.
ROR BOOL INT BOOL Une rotation vers la droite du
BYTE INT BYTE nombre de positions indiqué
WORD INT WORD par le paramètre N va être
DWORD INT DWORD effectuée sur la valeur
donnée par le paramètre IN.
SHL BOOL INT BOOL Dans la valeur donnée par le
BYTE INT BYTE paramètre IN, le nombre de
WORD INT WORD positions indiqué par le
DWORD INT DWORD paramètre N va être décalé
vers la gauche et complété
par des 0 à droite.
SHR BOOL INT BOOL Dans la valeur donnée par le
BYTE INT BYTE paramètre IN, le nombre de
WORD INT WORD positions indiqué par le
DWORD INT DWORD paramètre N va être décalé
vers la droite et complété par
des 0 à gauche.

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".

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-11
Fonctions standard de S7-SCL

14.3.1 Exemple de fonctions standard sur chaîne binaire

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)

S7-SCL V5.3 pour S7-300/400


14-12 A5E00324651-01
Fonctions standard de S7-SCL

14.4 Fonctions de traitement de chaîne de caractères

14.4.1 Fonctions de manipulation de chaîne de caractères

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.

Exemple : LEN (S:= 'XYZ' )

Paramètre Déclaration Type de Zone de mémoire Description


données
S INPUT STRING D, L Variable d'entrée en format STRING
Valeur de INT E, A, M, D, L Nombre de caractères en cours
retour

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é.

Exemple : CONCAT (IN1:= 'soupape', IN2:= ' ouverte')

Paramètre Déclaration Type de Zone de mémoire Description


données
IN1 INPUT STRING D, L Variable d'entrée en format STRING ou
CHAR CHAR
IN2 INPUT STRING D, L Variable d'entrée en format STRING ou
CHAR CHAR
INn INPUT STRING D, L Variable d'entrée en format STRING ou
CHAR CHAR
Valeur de STRING D, L Chaîne de caractères formée par la réunion
retour CHAR des deux chaînes

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-13
Fonctions standard de S7-SCL

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.

Exemple : LEFT (IN:= 'soupape', L:= 4)

Paramètre Déclaration Type de Zone de mémoire Description


données
IN INPUT STRING D, L Variable d'entrée en format STRING
L INPUT INT E, A, M, D, L, const. Longueur de la partie gauche de la chaîne
Valeur de STRING D, L Variable de sortie en format STRING
retour

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.

Exemple : MID (IN:= 'temperature', L:= 2, P:= 3)

Paramètre Déclaration Type de Zone de mémoire Description


données
IN INPUT STRING D, L Variable d'entrée en format STRING
L INPUT INT E, A, M, D, L, const. Longueur de la partie centrale de la
chaîne
P INPUT INT E, A, M, D, L, const. Position du premier caractère
Valeur de STRING D, L Variable de sortie en format STRING
retour

S7-SCL V5.3 pour S7-300/400


14-14 A5E00324651-01
Fonctions standard de S7-SCL

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.

Exemple : INSERT (IN1:= 'Participant arrivé', IN2:='Durand':= 2,


P:= 12)

Paramètre Déclaration Type de Zone de mémoire Description


données
IN1 INPUT STRING D, L Variable STRING dans laquelle insérer
IN2 INPUT STRING D, L Variable STRING à insérer
P INPUT INT E, A, M, D, L, const. Position d'insertion
Valeur de STRING D, L Chaîne résultant de l'opération
retour

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.

Exemple : DELETE (IN:= 'temperature ok', L:= 6, P:= 5)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-15
Fonctions standard de S7-SCL

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.

Exemple : REPLACE (IN1:= 'temperature', IN2:= ' haute' L:= 7, P:= 5)

Paramètre Déclaration Type de Zone de mémoire Description


données
IN1 INPUT STRING D, L Variable STRING dans laquelle remplacer
IN2 INPUT STRING D, L Variable STRING de remplacement
L INPUT INT E, A, M, D, L, const. Nombre de caractères à remplacer
P INPUT INT E, A, M, D, L, const. Position du premier caractère remplacé
Valeur de STRING D, L Chaîne résultant de l'opération
retour

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.

Exemple : FIND (IN1:= 'station_de_traitement', IN2:='station')

Paramètre Déclaration Type de Zone de mémoire Description


données
IN1 INPUT STRING D, L Variable STRING dans laquelle chercher
IN2 INPUT STRING D, L Variable STRING à rechercher
Valeur de INT E, A, M, D, L Position de la chaîne trouvée
retour

S7-SCL V5.3 pour S7-300/400


14-16 A5E00324651-01
Fonctions standard de S7-SCL

14.4.2 Fonctions de comparaison de chaînes de caractères

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.

Paramètre Déclaration Type de Zone de mémoire Description


données
S1 INPUT STRING D, L Variable d'entrée en format STRING
S2 INPUT STRING D, L Variable d'entrée en format STRING
Valeur de BOOL E, A, M, D, L Résultat de la comparaison
retour

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.

Paramètre Déclaration Type de Zone de mémoire Description


données
S1 INPUT STRING D, L Variable d'entrée en format STRING
S2 INPUT STRING D, L Variable d'entrée en format STRING
Valeur de BOOL E, A, M, D, L Résultat de la comparaison
retour

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-17
Fonctions standard de S7-SCL

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.

Paramètre Déclaration Type de Zone de mémoire Description


données
S1 INPUT STRING D, L Variable d'entrée en format STRING
S2 INPUT STRING D, L Variable d'entrée en format STRING
Valeur de BOOL E, A, M, D, L Résultat de la comparaison
retour

S7-SCL V5.3 pour S7-300/400


14-18 A5E00324651-01
Fonctions standard de S7-SCL

14.4.3 Fonctions de conversion du type de données

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.

Paramètre Déclaration Type de Zone de mémoire Description


données
INT_TO_ST
RING
I INPUT INT E, A, M, D, L, const. Valeur d'entrée
Valeur de STRING D, L Chaîne de caractères résultant de
retour l'opération
STRING_TO
_INT
S INPUT STRING D, L Chaîne d'entrée
Valeur de INT E, A, M, D, L Résultat
retour

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.

Paramètre Déclaration Type de Zone de mémoire Description


données
DINT_TO_S
TRING
I INPUT DINT E, A, M, D, L, const. Valeur d'entrée
Valeur de STRING D, L Chaîne de caractères résultant de
retour l'opération
STRING_TO
_DINT
S INPUT STRING D, L Chaîne d'entrée
Valeur de DINT E, A, M, D, L Résultat
retour

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-19
Fonctions standard de S7-SCL

REAL_TO_STRING und STRING_TO_REAL


Les fonctions REAL_TO_STRING et STRING_TO_REAL convertissent une variable de
format REAL en une chaîne de caractères ou une chaîne de caractères en une variable
REAL. Les fonctions (FC30) ou (FC39) de la bibliothèque "Fonctions CEI" sont alors utilisées
de manière implicite. La chaîne de caractères doit avoir le format suivant :
±v.nnnnnnnE±xx (± = signe, v = position précédant la virgule,n = positions suivant la virgule,
x = exposants)
Si la longueur de la chaîne est inférieure à 14 ou si sa structure diffère de la structure ci-
dessus, la conversion n'a pas lieu.
Si la variable affectée comme valeur de retour est trop courte ou si le paramètre IN ne
présente pas de nombre à virgule flottante correct, la conversion n'a pas lieu.

Paramètre Déclaration Type de Zone de mémoire Description


données
REAL_TO_S
TRING
IN INPUT REAL E, A, M, D, L, const. Valeur d'entrée
Valeur de STRING D, L Chaîne de caractères résultant de
retour l'opération
STRING_TO
_REAL
S INPUT STRING D, L Chaîne d'entrée
Valeur de REAL E, A, M, D, L Résultat
retour

S7-SCL V5.3 pour S7-300/400


14-20 A5E00324651-01
Fonctions standard de S7-SCL

14.4.4 Exemple de traitement de chaînes de caractères

Assembler des textes de signalisation


//Assemblage et mémorisation commandés par le processus
//des textes de signalisation

////////////////////////////////////////////////////////////////////
//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. //
////////////////////////////////////////////////////////////////////

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-21
Fonctions standard de S7-SCL

FUNCTION Generateur_textes : bool


VAR_INPUT
unite : int; //Indice du texte d'un appareil
no : int; // Nº d'identification de l'appareil
etat : int;
valeur : int;
END_VAR
VAR_TEMP
texte : string[34];
i : int;
END_VAR
//Initialisation des variables temporaires
texte := '';
Generateur_textes := true;
Case unite of
1..5 : case etat of
1..5 : texte := concat( in1 :=
textes_signalisation.materiel[unite],
in2 := right(l:=2,in:=I_STRNG(no)));
texte := concat( in1 := texte,
in2 :=
Textes_signalisation.etats[etat]);
if valeur <> 0 then
texte := concat( in1 := texte,
in2 := I_STRNG(valeur));
end_if;
else Generateur_textes := false;
end_case;
else Generateur_textes := false;
end_case;
i := Textes_signalisation.indice;
Textes_signalisation.memoire_textes[i] := texte;
Textes_signalisation.indice := (i+1) mod 20;
END_FUNCTION

////////////////////////////////////////////////////////////////////
//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;

S7-SCL V5.3 pour S7-300/400


14-22 A5E00324651-01
Fonctions standard de S7-SCL

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-23
Fonctions standard de S7-SCL

S7-SCL V5.3 pour S7-300/400


14-24 A5E00324651-01
Fonctions standard de S7-SCL

////////////////////////////////////////////////////////////////////
//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. *) //
////////////////////////////////////////////////////////////////////

if %M10.0 <> %M10.1 then


erreur := Generateur_textes (unite := word_to_int(%MW0),
no := word_to_int(%EW2),
etat := word_to_int(%MW2),
valeur := 0);
%M10.1:=M10.0;
end_if;
end_organization_block

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-25
Fonctions standard de S7-SCL

14.5 Fonctions de sélection de valeurs

14.5.1 Fonctions de sélection de valeurs

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);

Paramètre Déclaration Type de données Zone de mémoire Description


G INPUT BOOL E, A, M, D, L Critère de sélection
IN0 INPUT Tous les types de E, A, M, D, L Première valeur d'entrée
données à
l'exception de
ARRAY et
STRUCT
IN1 INPUT Tous les types de E, A, M, D, L Deuxième valeur
données à d'entrée
l'exception de
ARRAY et
STRUCT
Valeur en OUTPUT Tous les types de E, A, M, D, L Valeur d'entrée
retour données à sélectionnée (option)
l'exception de
ARRAY et
STRUCT

S7-SCL V5.3 pour S7-300/400


14-26 A5E00324651-01
Fonctions standard de S7-SCL

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);

Paramètre Déclaration Type de données Zone de mémoire Description


IN1 INPUT ANY_NUM E, A, M, D, L Première valeur d'entrée
Types de données
de temporisation à
l'exception de
S5TIME
IN2 INPUT ANY_NUM E, A, M, D, L Deuxième valeur
Types de données d'entrée
de temporisation à
l'exception de
S5TIME
INn INPUT ANY_NUM E, A, M, D, L Dernière valeur d'entrée
(n=3...32) Types de données (option)
de temporisation à
l'exception de
S5TIME
Valeur en retour OUTPUT ANY_NUM E, A, M, D, L Plus grande des valeurs
Types de données d'entrée
de temporisation à (option)
l'exception de
S5TIME

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-27
Fonctions standard de S7-SCL

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);

Paramètre Déclaration Type de données Zone de mémoire Description


IN1 INPUT ANY_NUM E, A, M, D, L Première valeur d'entrée
Types de données
de temporisation à
l'exception de
S5TIME
IN2 INPUT ANY_NUM E, A, M, D, L Deuxième valeur
Types de données d'entrée
de temporisation à
l'exception de
S5TIME
INn INPUT ANY_NUM E, A, M, D, L Dernière valeur d'entrée
(n=3...32) Types de données (option)
de temporisation à
l'exception de
S5TIME
Valeur en retour OUTPUT ANY_NUM E, A, M, D, L Plus petite des valeurs
Types de données d'entrée
de temporisation à (option)
l'exception de
S5TIME

S7-SCL V5.3 pour S7-300/400


14-28 A5E00324651-01
Fonctions standard de S7-SCL

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);

Paramètre Déclaration Type de données Zone de mémoire Description


MN INPUT ANY_NUM E, A, M, D, L Limite inférieure
Types de données
de temporisation à
l'exception de
S5TIME
IN INPUT ANY_NUM E, A, M, D, L Variable d'entrée
Types de données
de temporisation à
l'exception de
S5TIME
MX INPUT ANY_NUM E, A, M, D, L Limite supérieure
Types de données
de temporisation à
l'exception de
S5TIME
Valeur en retour OUTPUT ANY_NUM E, A, M, D, L Variable de sortie limitée
Types de données (option)
de temporisation à
l'exception de
S5TIME

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-29
Fonctions standard de S7-SCL

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);

Paramètre Déclaration Type de données Zone de mémoire Description


K INPUT INT E, A, M, D, L Critère de sélection
IN0 INPUT Tous les types de E, A, M, D, L Première valeur d'entrée
données à
l'exception de
ARRAY et
STRUCT
IN1 INPUT Tous les types de E, A, M, D, L Deuxième valeur
données à d'entrée
l'exception de
ARRAY et
STRUCT
INn INPUT Tous les types de E, A, M, D, L Dernière valeur d'entrée
(n=2…31) données à (option)
l'exception de
ARRAY et
STRUCT
INELSE INPUT Tous les types de E, A, M, D, L Valeur d'entrée
données à alternative
l'exception de
ARRAY et (option)
STRUCT
Si K se trouve en
dehors de 0...n, c’est
la valeur actuelle de
INELSE qui est
utilisée.
Si INELSE n’est pas
occupé, c’est la valeur
actuelle de INO qui
est utilisée.
Valeur en retour OUTPUT Tous les types de E, A, M, D, L Valeur sélectionnée
données à (option)
l'exception de
ARRAY et
STRUCT

S7-SCL V5.3 pour S7-300/400


14-30 A5E00324651-01
Fonctions standard de S7-SCL

14.6 Fonctions système, blocs fonctionnels système et


bibliothèque standard

14.6.1 Fonctions système, blocs fonctionnels système et bibliothèque


standard

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)

Interface d'appel des SFC/SFB


Vous pouvez adresser les blocs de manière symbolique ou absolue. Vous devez donc
connaître soit leur mnémonique, qui doit être déclaré dans la table des mnémoniques, soit
leur numéro de désignation absolue.
Dans l'appel d'un bloc, vous devez affecter aux paramètres formels, dont vous avez défini
les noms et les types de données en créant le bloc paramétrable, les paramètres effectifs
dont le bloc utilise les valeurs durant l'exécution de votre programme.
S7-SCL cherche le bloc à appeler dans les répertoires et bibliothèques suivants :
• Le dossier "Programmes"
• La bibliothèque standard SIMATIC
• La bibliothèque standard CEI
Lorsque S7-SCL trouve un bloc, il le copie dans le programme utilisateur. Certains blocs font
exception : ce sont ceux qui doivent être appelés avec la notation (" ... ") par suite de leur
nom ainsi que les blocs appelés de manière absolue. S7-SCL cherche ces noms
uniquement dans la table des mnémoniques du programme utilisateur. Vous devez les
copier vous-même dans le programme utilisateur à l'aide de SIMATIC Manager.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-31
Fonctions standard de S7-SCL

Appel conditionnel (SFB/SFC)


Si vous voulez réaliser un appel conditionnel, vous devez affecter la valeur 0 au paramètre
d'entrée EN (par exemple à l'entrée E0.3) afin que le bloc ne soit pas appelé. Lorsque EN
reçoit la valeur "1", la fonction est appelée. Dans ce cas, le paramètre de sortie ENO est
également mis à "1" (autrement à "0") si aucune erreur ne survient durant l'exécution du
bloc.
Il n'est pas recommandé d'utiliser l'appel conditionnel pour les SFC, puisque la variable
censée recevoir la valeur de retour de la fonction reste indéfinie quand la fonction n'est pas
appelée.

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.

Opération DATE_AND_TIME STRING


== EQ_DT (FC9) EQ_STRING (FC10)
<> NE_DT (FC28) NE_STRING (FC29)
> GT_DT (FC14) GT_STRING (FC15)
>= GE_DT (FC12) GE_STRING (FC13)
<= LE_DT (FC18) LE_STRING (FC19)
< LT_DT (FC23) LT_STRING (FC24)
DATE_AND_TIME + TIME AD_DT_TM (FC1)
DATE_AND_TIME + TIME SB_DT_TM (FC35)
DATE_AND_TIME + SB_DT_DT (FC34)
DATE_AND_TIME
TIME_TO_S5TIME(TIME) TIM_S5TI (FC40)
S5TIME_TO_TIME(S5TIME) S5TI_TIM (FC33)

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".

S7-SCL V5.3 pour S7-300/400


14-32 A5E00324651-01
Fonctions standard de S7-SCL

14.6.2 Interface d'échange avec les OB

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 14-33
Fonctions standard de S7-SCL

S7-SCL V5.3 pour S7-300/400


14-34 A5E00324651-01
15 Description du langage

15.1 Description formelle du langage

15.1.1 Présentation des diagrammes syntaxiques

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".

Qu'entend-on par diagramme syntaxique ?


Il s'agit d'une représentation graphique de la structure du langage. Cette structure est décrite
par une suite de règles, pouvant elles-mêmes se fonder sur des règles déjà énoncées.

Nom de la règle
Séquence
Bloc 3

Bloc 1 Bloc 2
Bloc 4

Option
Bloc 5
Itération
Alternative

Le diagramme syntaxique se lit de gauche à droite. Il peut comporter :


• Séquence : suite de blocs
• Option : branche facultative
• Itération : répétition de branches
• Alternative : aiguillage

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-1
Description du langage

Quelles sont les différentes sortes de blocs ?


Un bloc est un élément de base ou un élément composé lui-même de blocs. La figure
suivante montre la représentation des différentes sortes de blocs :

Bloc terminal Bloc non terminal


<Nom de la règle>

Elément de base qui ne nécessite pas Le nom de la règle est facultatif


de description supplémentaire!
Elément complexe qui est décrit par
Il s'agit de caractères imprimables et d'autres diagrammes
de caractères spéciaux, de mots-clés syntaxiques.
et d'identificateurs prédéfinis.
Les indications relatives à ces blocs
doivent être reprises telles quelles.
Symbole
<Nom de la règle>

Le nom de la règle doit figurer


en majuscules !
Elément complexe, utilisé comme
élément de base dans les règles
syntaxiques et expliqué dans les
règles lexicales.

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.

S7-SCL V5.3 pour S7-300/400


15-2 A5E00324651-01
Description du langage

L'exemple montre la règle lexicale IDENTIFICATEUR. Elle décrit la composition d'un


identificateur (nom ), par ex. :

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

Règles Format libre


syntaxiques
Format non libre !
Règles lexicales

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-3
Description du langage

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.

S7-SCL V5.3 pour S7-300/400


15-4 A5E00324651-01
Description du langage

15.1.3 Blocs terminaux des règles lexicales

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 :

Le bloc terminal est représenté par un rectan-


gle aux bouts arrondis ou par un cercle. Il con-
tient soit un nom (en majuscules), soit directe-
ment une information.
Celui-ci définit le nombre de caractères ASCII
utilisables.

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 Sous-groupe Eléments du jeu de caractères


Lettre Majuscule AàZ
Minuscule aàz
Chiffre Chiffre décimal 0à9
Chiffre octal Chiffre octal 0à7
Chiffre hexadécimal Chiffre hexadécimal 0 à 9, A à F, a à f
Bit Chiffre binaire 0, 1

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-5
Description du langage

Caractères imprimables et caractères spéciaux


Vous pouvez employer tout le jeu de caractères ASCII étendu dans les chaînes, les
commentaires et les mnémoniques.

Caractère Sous-groupe Eléments du jeu de caractères


Caractère imprimable Selon le code de caractères utilisé. Tous les caractères imprimables
Avec le code ASCII par exemple, à
partir du caractère équivalant au
caractère décimal 31, sans DEL ni les
caractères de remplacement ci-
dessous.
Caractère de Dollar $
remplacement Apostrophe '
Caractère de $P ou $p Saut de page (formfeed, page)
commande $L ou $l Changement de ligne (linefeed)
$R ou $r Retour chariot (carriage return)
$T ou $t Tabulation
$N ou $n Nouvelle ligne
Représentation de $hh Caractères quelconques
remplacement en code enregistrables en code hexa (hh)
hexadécimal

S7-SCL V5.3 pour S7-300/400


15-6 A5E00324651-01
Description du langage

15.1.4 Caractères de mise en forme, séparateurs et opérations

Dans les règles lexicales


Le tableau suivant montre l'utilisation de certains caractères du jeu de caractères ASCII
comme caractères de mise en forme et comme séparateurs au niveau des règles lexicales.

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

Pour les constantes


Le tableau suivant montre l'utilisation de certains caractères et chaînes de caractères pour
des constantes au niveau des règles lexicales. Il s'applique aux jeux d'abréviations allemand
et anglais.

Préfixe Caractérise Règle lexicale


BOOL# Constante typée de type BOOL Constante binaire
BYTE# Constante typée de type BYTE Constante binaire
WORD# Constante typée de type WORD Constante binaire
DWORD# Constante typée de type DWORD Constante binaire
INT# Constante typée de type INT Constante entière
DINT# Constante typée de type DINT Constante entière
REAL# Constante typée de type REAL Constante réelle
CHAR# Constante typée de type CHAR Constante sur caractère
2# Constante numérique Suite de chiffres binaires
8# Constante numérique Suite de chiffres octaux
16# Constante numérique Suite de chiffres hexadécimaux
D# Indication temporelle Date
DATE# Indication temporelle Date
DATE_AND_TIME# Indication temporelle Date et heure
DT# Indication temporelle Date et heure
E Séparateur pour constante réelle Exposant
e Séparateur pour constante réelle Exposant

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-7
Description du langage

Préfixe Caractérise Règle lexicale


D Séparateur pour intervalle de temps (jour) Jours (règle : représentation par niveaux)
H Séparateur pour intervalle de temps (heure) Heures : (règle : représentation par
niveaux)
M Séparateur pour intervalle de temps Minutes : (règle : représentation par
(minutes) niveaux)
MS Séparateur pour intervalle de temps Millisecondes : (règle : représentation par
(millisecondes) niveaux)
S Séparateur pour intervalle de temps Secondes : (règle : représentation par
(secondes) niveaux)
T# Indication temporelle Durée
TIME# Indication temporelle Durée
TIME_OF_DAY# Indication temporelle Heure du jour
TOD# Indication temporelle Heure du jour

Dans les règles syntaxiques


Le tableau suivant montre l'utilisation de certains caractères comme caractères de mise en
forme et comme séparateurs au niveau des règles syntaxiques ainsi que dans les
commentaires et les attributs.

Caractère Description Règle syntaxique, commentaire ou attribut


: Séparateur pour l'indication du type, Déclaration de variable, déclaration d'instance,
dans une instruction après un repère de fonction, section des instructions, instruction CASE
saut
; Fin de déclaration ou d'instruction Déclaration de variable, section des instructions,
section d'affectation de DB, section de constantes,
section de repères de saut, déclaration de composant
, Séparateur dans les listes et les sections Déclaration de variable, spécification du type de
de repères de saut données ARRAY, liste d'initialisation d'un tableau,
paramètres de FB, paramètres de FC, liste de
valeurs, déclaration d'instance
.. Indication de plage Spécification du type de données ARRAY, liste de
valeurs
. Séparateur pour nom de FB et de DB, Appel de FB, variable complexe
adressage absolu
() Appel de fonction et de bloc fonctionnel, Appel de fonction et de FB, expression,
mise entre parenthèses dans les liste d'initialisation de tableau, multiplication simple,
expressions, expression de puissance
liste d'initialisation de tableau
[] Déclaration d'un tableau, Spécification du type de données ARRAY,
variable complexe, partie de tableau, spécification du type de données STRING
indexation pour variables globales et
chaînes de caractères
(* *) Bloc de commentaire voir "Règles lexicales"
// Ligne de commentaire voir "Règles lexicales"
{} Section d'attributs Affectation d'attributs
% Introduction d'un identificateur direct Pour programmer en conformité avec CEI, on peut
employer %M4.0 au lieu de M4.0.
# Introduction d'un non-mot-clé Caractérise un identificateur comme n'étant pas un
mot-clé, par ex. #FOR.

S7-SCL V5.3 pour S7-300/400


15-8 A5E00324651-01
Description du langage

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.

Opération Description Règle syntaxique


:= Opération d'affectation, affectation de Affectation de valeur, section d'affectation de
départ, initialisation de type de DB, section de constantes, définition de sortie
données ou d'entrée/sortie, définition d'entrée,
définition d'entrée/sortie
+, - Opérations arithmétiques : opérations Expression, expression simple, expression de
unaires, signes puissance
+, -, *, / Opérations arithmétiques de base Opération arithmétique de base,
MOD; DIV multiplication simple
** Opérations arithmétiques : opération Expression
de puissance
NOT Opérations logiques : négation Expression, opérande
AND, &, OR; XOR, Opérations logiques de base Opération logique de base
<,>,<=,>=,=,<> Opérations de comparaison Opération de comparaison

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-9
Description du langage

15.1.5 Mots-clés et identificateurs prédéfinis

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.

Mot-clé Description Règle syntaxique


AND Opération logique Opération logique de base
ANY Désignation du type de données ANY Spécification d'un type de données
paramètre
ARRAY Introduction de la spécification d'un Spécification du type de données
tableau, suivie de la liste des indices ARRAY
placée entre "[" et "]".
AT Déclare un accès à une variable Déclaration de variable
BEGIN Introduction de la section des instructions Bloc d'organisation, fonction, bloc
pour les blocs de code ou de la section fonctionnel, bloc de données
d'initialisation pour les blocs de données
BLOCK_DB Désignation du type de données Spécification d'un type de données
BLOCK_DB paramètre
BLOCK_FB Désignation du type de données Spécification d'un type de données
BLOCK_FB paramètre
BLOCK_FC Désignation du type de données Spécification d'un type de données
BLOCK_FC paramètre
BLOCK_SDB Désignation du type de données Spécification d'un type de données
BLOCK_SDB paramètre
BOOL Type de données simple pour données Type de données binaire
binaires
BY Introduction de l'incrément Instruction FOR
BYTE Type de données simple Type de données binaire
CASE Introduction de l'instruction de contrôle Instruction CASE
pour sélection
CHAR Type de données simple Type de données caractère
CONST Introduction de la définition de constantes Section de constantes
CONTINUE Instruction de commande pour les Instruction CONTINUE
boucles FOR, WHILE et REPEAT
COUNTER Type de données pour compteur, Spécification d'un type de données
utilisable seulement dans une section de paramètre
paramètres
DATA_BLOCK Introduction du bloc de données Bloc de données
DATE Type de données simple pour date Type de données temporel
DATE_AND_TIME Type de données complexe pour date et DATE_AND_TIME
heure
DINT Type de données simple pour entier à Type de données numérique
précision double
DIV Opération pour division Opération arithmétique de base,
multiplication simple
DO Introduction de la section des instructions Instruction FOR, instruction WHILE
pour l'instruction FOR

S7-SCL V5.3 pour S7-300/400


15-10 A5E00324651-01
Description du langage

Mot-clé Description Règle syntaxique


DT Type de données simple pour date et DATE_AND_TIME
heure
DWORD Type de données simple pour double mot Type de données binaire
ELSE Introduction du cas où aucune condition Instruction IF, instruction CASE
n'est remplie
ELSIF Introduction de la condition alternative Instruction IF
EN Drapeau validant le bloc
ENO Drapeau d'erreur du bloc
END_CASE Fin de l'instruction CASE Instruction CASE
END_CONST Fin de la définition de constantes Section de constantes
END_DATA_BLOCK Fin du bloc de données Bloc de données
END_FOR Fin de l'instruction FOR Instruction FOR
END_FUNCTION Fin de la fonction Fonction
END_FUNCTION_BLOCK Fin du bloc fonctionnel Bloc fonctionnel
END_IF Fin de la condition IF Instruction IF
END_LABEL Fin de la section de repères de saut Section de repères de saut
END_TYPE Fin de l'UDT Type de données utilisateur
END_ORGANIZATION_ Fin du bloc d'organisation Bloc d'organisation
BLOCK
END_REPEAT Fin de l'instruction REPEAT Instruction REPEAT
END_STRUCT Fin de la spécification d'une structure Spécification du type de données
STRUCT
END_VAR Fin d'une section de déclaration de variables temporaires, de variables
statiques, de paramètres
END_WHILE Fin de l'instruction WHILE Instruction WHILE
EXIT Abandon direct du traitement d'une EXIT
boucle
FALSE Constante booléenne prédéfinie :
condition logique non remplie, valeur
égale 0
FOR Introduction de l'instruction de contrôle Instruction FOR
pour traitement de boucle
FUNCTION Introduction de la fonction Fonction
FUNCTION_BLOCK Introduction du bloc fonctionnel Bloc fonctionnel
GOTO Instruction ordonnant un saut à un repère Saut dans le programme
de saut
IF Introduction de l'instruction de contrôle Instruction IF
pour sélection
INT Type de données simple pour entier à Type de données numérique
précision simple
LABEL Introduction de la section de repères de Section de repères de saut
saut
MOD Opération arithmétique pour le reste de la Opération arithmétique de base,
division multiplication simple
NIL Pointeur zéro

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-11
Description du langage

Mot-clé Description Règle syntaxique


NOT Opération logique faisant partie des Expression, opérande
opérations unaires
OF Introduction de la spécification du type de Spécification du type de données
données ARRAY, instruction CASE
OK Drapeau indiquant si les instructions d'un
bloc ont été exécutées sans erreur
OR Opération logique Opération logique de base
ORGANIZATION_BLOCK Introduction du bloc d'organisation Bloc d'organisation
POINTER Type de données pointeur, autorisé Voir chapitre "Données globales".
seulement dans la déclaration de
paramètre dans la section de paramètres,
n'est pas traité dans S7-SCL
PROGRAM Introduction de la section des instructions Bloc fonctionnel
d'un FB (synonyme de
FUNCTION_BLOCK)
REAL Type de données simple Type de données numérique
REPEAT Introduction de l'instruction de contrôle Instruction REPEAT
pour traitement de boucle
RET_VAL Valeur en retour d'une fonction Fonction
RETURN Instruction de commande pour revenir Instruction RETURN
d'un sous-programme
S5TIME Type de données simple, format S5 Type de données temporel
spécial
STRING Type de données pour chaîne de Spécification du type de données
caractères STRING
STRUCT Introduction de la spécification d'une Spécification du type de données
structure, suivie de la liste des STRUCT
composants
THEN Introduction des actions consécutives si Instruction IF
la condition est remplie
TIME Type de données simple pour indications Type de données temporel
temporelle
TIMER Type de données pour temporisation, Spécification de type de données
utilisable seulement dans une section de paramètre
paramètres
TIME_OF_DAY Type de données simple pour l'heure du Type de données temporel
jour
TO Introduction de la valeur finale Instruction FOR
TOD Type de données simple pour l'heure du Type de données temporel
jour
TRUE Constante booléenne prédéfinie :
condition logique remplie, valeur
différente de 0
TYPE Introduction d'un UDT Type de données utilisateur
VAR Introduction d'une section de déclaration Section de variables statiques
VAR_TEMP Introduction d'une section de déclaration Section de variables temporaires
UNTIL Introduction de la condition d'abandon Instruction REPEAT
pour instruction REPEAT

S7-SCL V5.3 pour S7-300/400


15-12 A5E00324651-01
Description du langage

Mot-clé Description Règle syntaxique


VAR_INPUT Introduction d'une section de déclaration Section de paramètres
VAR_IN_OUT Introduction d'une section de déclaration Section de paramètres
VAR_OUTPUT Introduction d'une section de déclaration Section de paramètres
WHILE Introduction de l'instruction de contrôle Instruction WHILE
pour traitement de boucle
WORD Type de données simple pour mot Type de données binaire
VOID Pas de valeur de retour pour un appel de Fonction
fonction
XOR Opération logique Opération logique de base

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-13
Description du langage

15.1.6 Identificateurs d'opérande et mots-clés de bloc

Données système globales


Le tableau suivant dresse la liste des identificateurs d'opérande de S7-SCL et en donne une
description.
• Indication de l'identificateur d'opérande :
préfixe de mémoire (A, E, M, PA, PE) ou bloc de données (D)
• Indication de la taille de l'élément de données :
préfixe de taille (facultatif ou B, D, W, X)
L'abréviation est une combinaison de l'identificateur d'opérande (préfixe de mémoire ou D
pour bloc de données) et du préfixe de taille qui sont tous deux des règles lexicales. Le
tableau est classé dans l'ordre alphabétique des abréviations allemandes ; les abréviations
anglaises sont citées en regard.

Abréviation Abréviation Préfixe de mémoire ou bloc de données Préfixe de taille


allemande anglaise
A Q Sortie (par la mémoire image) Bit
AB QB Sortie (par la mémoire image) Octet
AD QD Sortie (par la mémoire image) Double mot
AW QW Sortie (par la mémoire image) Mot
AX QX Sortie (par la mémoire image) Bit
D D Bloc de données Bit
DB DB Bloc de données Octet
DD DD Bloc de données Double mot
DW DW Bloc de données Mot
DX DX Bloc de données Bit
E I Entrée (par la mémoire image) Bit
EB IB Entrée (par la mémoire image) Octet
ED ID Entrée (par la mémoire image) Double mot
EW IW Entrée (par la mémoire image) Mot
EX IX Entrée (par la mémoire image) Bit
M M Mémento Bit
MB MB Mémento Octet
MD MD Mémento Double mot
MW MW Mémento Mot
MX MX Mémento Bit
PAB PQB Sortie (périphérie directe) Octet
PAD PQD Sortie (périphérie directe) Double mot
PAW PQW Sortie (périphérie directe) Mot
PEB PIB Entrée (périphérie directe) Octet
PED PID Entrée (périphérie directe) Double mot
PEW PIW Entrée (périphérie directe) Mot

S7-SCL V5.3 pour S7-300/400


15-14 A5E00324651-01
Description du langage

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.

Abréviation Abréviation Préfixe de mémoire ou bloc de données


allemande anglaise
DB DB Bloc de données (Data_Block)
FB FB Bloc fonctionnel (Function_Block)
FC FC Fonction (Function)
OB OB Bloc d'organisation (Organization_Block)
SDB SDB Bloc de données système (System_Data_Block)
SFC SFC Fonction système (System_Function)
SFB SFB Bloc fonctionnel système (System_Function_Block)
T T Temporisation (Timer)
UDT UDT Type de données global ou utilisateur (Userdefined_Data_Type)
Z C Compteur (Counter)

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-15
Description du langage

15.1.7 Présentation des blocs non terminaux

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.

Bloc non terminal


<Nom de la règle>

Nom de la règle : majuscules ou minuscules !

Cet élément se rencontre dans les règles lexicales et dans les règles syntaxiques.

15.1.8 Présentation des symboles

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>

Nom de la règle : toujours en majuscules !

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

S7-SCL V5.3 pour S7-300/400


15-16 A5E00324651-01
Description du langage

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.

Type d'identificateur Remarques, exemples


Mots-clés par ex. instructions de commande BEGIN, DO, WHILE
Noms prédéfinis Noms de
• Types de données standard (par ex. BOOL, BYTE, INT)
• Fonctions standard prédéfinies (par ex. ABS)
• Constantes standard TRUE et FALSE
Identificateurs d'opérande Pour données système globales et blocs de données globaux :
dans les identificateurs par ex. E1.2, MW10, FC20, T5, DB30, DB10.D4.5
absolus
Noms quelconques de votre Noms de
choix conformes à la règle • Variables déclarées
IDENTIFICATEUR
• Composants de structure
• Paramètres
• Constantes déclarées
• Repères de saut
Mnémoniques de la table des Conformes à la règle lexicale IDENTIFICATEUR ou à la règle lexicale
mnémoniques Mnémonique, c'est-à-dire écrits entre guillemets, par ex. "xyz"

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).

Type d'identificateur Distinction entre majuscules et


minuscules ?
Mots-clés non
Noms prédéfinis des types de données standard non
Noms des fonctions standard prédéfinies non
Noms prédéfinis des constantes standard non
Identificateurs d'opérande dans les identificateurs absolus non
Noms quelconques de votre choix non
Mnémoniques de la table des mnémoniques non

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.

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-17
Description du langage

15.1.10 Attribution de noms dans S7-SCL

Attribution de noms au choix


Il y a deux façons d'attribuer des noms.
• Vous pouvez les attribuer vous-même dans S7-SCL. Ils doivent être conformes à la règle
IDENTIFICATEUR qui s'applique à chaque nom employé dans S7-SCL.
• Vous pouvez les introduire par l'intermédiaire de STEP 7 à l'aide de la table des
mnémoniques. Ils suivent alors la règle IDENTIFICATEUR ou bien celle des
mnémoniques. Le mnémonique étant indiqué entre guillemets, il peut comporter tous les
caractères imprimables (par ex. des espaces).

IDENTIFICATEUR

Lettre

_ Lettre _ Lettre

Caractère de Caractère de
soulignement soulignement
Chiffre Chiffre

MNEMONIQUE
Caractère
" imprimable "

Les mnémoniques doivent être définis dans la table des mnémoniques.

Règles pour l'attribution de noms


Tenez compte des points suivants :
• Choisissez des noms univoques et évocateurs qui contribuent à la clarté du programme.
• Assurez-vous que le nom n'est pas déjà utilisé par le système, par exemple pour les
identificateurs des types de données ou des fonctions standard.
• Domaine de validité : Dans le cas de variables globales, s'étend à tout le programme,
dans le cas de variabales locales, se limite au bloc. On trouve donc des variables de
même nom dans des blocs différents (voir le tableau ci-dessous sur les régles
d'attribution de noms).

S7-SCL V5.3 pour S7-300/400


15-18 A5E00324651-01
Description du langage

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.

Utilisation de la règle IDENTIFICATEUR


Le tableau suivant précise dans quels cas vous pouvez attribuer des noms conformes à la
règle IDENTIFICATEUR.

Identificateur Description Règle


Nom de bloc Nom symbolique de bloc DESIGNATION DE BLOC, appel
de fonction
Nom de temporisation et de Nom symbolique de temporisation DESIGNATION DE
compteur et de compteur TEMPORISATION,
DESIGNATION DE COMPTEUR
Nom d'attribut Nom pour un attribut Affectation d'attribut
Nom de constante Déclaration d'une constante Section de constantes, constante
symbolique, utilisation
Repère de saut Déclaration d'un repère de saut, Section de repères de saut,
utilisation d'un repère de saut section des instructions,
instructions GOTO
Nom de variable Déclaration d'une variable Déclaration de variable, variable
temporaire ou statique simple, variable complexe
Nom d'instance locale Déclaration d'une instance locale Déclaration d'instance, nom
d'appel de FB

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-19
Description du langage

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

DB, FB, FC, OB, SDB, SFC, SFB, UDT

IDENTIFICATEUR

Mnémonique

Il en est de même pour les règles DESIGNATION DE TEMPORISATION et DESIGNATION


DE COMPTEUR.

15.1.11 Constantes et drapeaux prédéfinis

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.

S7-SCL V5.3 pour S7-300/400


15-20 A5E00324651-01
Description du langage

15.2 Règles lexicales

15.2.1 Présentation des 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.

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

DB, FB, FC, OB, SDB, SFC, SFB, UDT

IDENTIFICATEUR

Mnémonique

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-21
Description du langage

Règle Diagramme syntaxique


Désignation de
temporisation Numéro
T

Abréviation allemande
et anglaise

IDENTIFICATEUR

Mnémonique

Désignation de compteur
Z Numéro

Abréviation allemande 'Z'


Abréviation anglaise 'C'

IDENTIFICATEUR

Mnémonique

Mot-clé de bloc
OB Bloc d'organisation

FC Fonction

SFC Fonction système

Bloc fonctionnel
FB

SFB Bloc fonctionnel système

DB Bloc de données

UDT Type de données utilisateur


(User Data Type)

Mnémonique

Caractère
" imprimable "

Numéro

Chiffre

S7-SCL V5.3 pour S7-300/400


15-22 A5E00324651-01
Description du langage

15.2.3 Constantes

Règle Diagramme syntaxique


Constante binaire
CONSTANTE BINAIRE
BOOL#

SUITE DE CHIFFRES DECIMAUX


BYTE# SUITE DE CHIFFRES OCTAUX
SUITE DE CHIFFRES HEXA
SUITE DE CHIFFRES BINAIRES
WORD# CARACTERES (1)

DWORD#

(1) pour le type BYTE seulement

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)

(1) pour le type INT seulement

Constante réelle
CONSTANTE REELLE

SUITE DE CHIFFRE SUITE DE CHIFFRE


DECIMAUX . DECIMAUX
+

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-23
Description du langage

Règle Diagramme syntaxique


Suite de chiffres
binaires

2# Chiffre binaire

Chiffre binaire : 0 ou 1 Caractère de soulignement

Suite de chiffres octaux


Suite de chiffres octaux

8# Chiffre octal

_
Caractère de soulignement

Suite de chiffres
hexadécimaux
CHIFFRE HEXADECIMAL

16# Chiffre hexadécimal

_
Chiffre hexadécimal : 0-9
A-F Caractère de soulignement

Exposant
Exposant
E +

SUITE DE CHIFFRES
DECIMAUX
e -

Constante sur caractère


CONSTANTE SUR CARACTERE

CHAR# ' Caractère '

SUITE DE CHIFFRES
DECIMAUX

S7-SCL V5.3 pour S7-300/400


15-24 A5E00324651-01
Description du langage

Règle Diagramme syntaxique


Constante sur chaîne
CONSTANTE SUR CHAINE

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#

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-25
Description du langage

Règle Diagramme syntaxique


Durée
Durée

TIME# Représentation décimale

T# Représentation par niveau Représentation décimale

-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#

Indication de l'heure du jour

TOD#

Date et heure
Date et heure

DATE_AND_TIME#

Indication de la date - Indication de l'heure du jour

DT#

Indication de date
Indication de la date

SUITE DE CHIFFRES SUITE DE CHIFFRES SUITE DE CHIFFRES


- -
DECIMAUX DECIMAUX DECIMAUX

Année Mois Jour

S7-SCL V5.3 pour S7-300/400


15-26 A5E00324651-01
Description du langage

Règle Diagramme syntaxique


Indication d'heure du
jour Indication de l'heure du jour

SUITE DE CHIFFRES SUITE DE CHIFFRES


DECIMAUX
: DECIMAUX
:

Indication des heures Indication des minutes

SUITE DE CHIFFRES SUITE DE CHIFFRES


.
DECIMAUX DECIMAUX

Indication des secondes Indication des millisecondes

Représentation
décimale Représentation décimale

SUITE DE CHIFFRES . SUITE DE CHIFFRES Jours


D
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Heures


H
DECIMAUX DECIMAUX

SUITE DE CHIFFRES SUITE DE CHIFFRES Minutes


. M
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Secondes


S
DECIMAUX DECIMAUX

SUITE DE CHIFFRES . SUITE DE CHIFFRES Millisecondes


MS
DECIMAUX DECIMAUX

Pour passer à la représentation décimale, il faut que les unités temporelles


n'aient pas encore été définies

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-27
Description du langage

Règle Diagramme syntaxique


Représentation par
niveaux Représentation par niveaux

SUITE DE CHIFFRES SUITE DE CHIFFRES _


D _ H
DECIMAUX DECIMAUX

Jours Heures

SUITE DE CHIFFRES _ SUITE DE CHIFFRES _


DECIMAUX M DECIMAUX S

Minutes Secondes

SUITE DE CHIFFRES _
MS
DECIMAUX

Millisecondes

S7-SCL V5.3 pour S7-300/400


15-28 A5E00324651-01
Description du langage

15.2.4 Adressage absolu

Règle Diagramme syntaxique


Adressage simple de la
mémoire
IDENTIFICATEUR Adresse
D'OPERANDE

Adressage absolu

IDENTIFICATEUR

Adressage symbolique
MNEMONIQUE

Adessage indexé de la
mémoire

Préfixe de Préfixe de Expression Expression ]


[ de base , de base
mémoire taille
Identificateur d'opérande Indice

Pour adressage binaire seulement

Identificateur d'opérande
pour mémoire
Identificateur d'opérande

Préfixe Préfixe
de mémoire de taille

Adresage absolu d'un DB


Identificateur d'opérande DB Adresse

Adressage absolu

Adressage indexé
d'un DB Index

Identificateur [ Expression , Expression ]


d'opérande DB de base de base

uniquement pour l'adressage par bit

Adressage structuré d'un


DB
IDENTIFICATION Variable
.
DU DB simple

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-29
Description du langage

Règle Diagramme syntaxique


Identificateur d'opérande
DB Identificateur d'opérande

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

PE PI Périphérie des entrées

PA PQ Périphérie des sorties

Abréviations allemandes Abréviations anglaises

Préfixe de taille pour


mémoire et DB Préfixe de taille

X Bit

B Octet

W Mot

D Double mot

Adresse pour mémoire et


DB Adresse

Numéro . Numéro

uniquement pour une adresse binaire

Adressage de l'instance
locale
Variable
IDENTIFICATEUR .
simple

Nom de l'instance locale

S7-SCL V5.3 pour S7-300/400


15-30 A5E00324651-01
Description du langage

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.

Règle Diagramme syntaxique


Commentaire
Ligne de commentaire

Bloc de commentaire

Ligne de commentaire
Ligne de commentaire

Caractère
// CR
imprimable

Retour chariot (carriage return)

Bloc de commentaire
%ORFGHFRPPHQWDLUH

&DUDFWÙUH

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-31
Description du langage

15.2.6 Attributs de bloc

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.

Règle Diagramme syntaxique


Titre
&DUDFWÙUH
7,7/( LPSULPDEOH

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

Attributs système pour


bloc Attributs système de blocs

24 caractères au maximum
IDENTIFICATEUR caractère
{ := ' ' }
imprimable

S7-SCL V5.3 pour S7-300/400


15-32 A5E00324651-01
Description du langage

15.2.7 Options du compilateur

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.

Règle Diagramme de syntaxe


Option du compilateur

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-33
Description du langage

15.3 Règles syntaxiques

15.3.1 Présentation des 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.
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.

S7-SCL V5.3 pour S7-300/400


15-34 A5E00324651-01
Description du langage

15.3.2 Organisation des sources S7-SCL

Règle Diagramme syntaxique


Programme S7-SCL

Elément du programme SCL

Elément de programme
S7-SCL Bloc d'organisation

Fonction

Bloc fonctionnel

Bloc de données

Type de données utilisateur

Bloc d'organisation
Bloc d'organisation

DESIGNATION Section de déclaration de l'OB


ORGANIZATION_BLOCK
DE L'OB

BEGIN Section des instructions END_ORGANIZATION_BLOCK

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-35
Description du langage

Règle Diagramme syntaxique


Bloc fonctionnel

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

BEGIN Section d'affectation du DB END_DATA_BLOCK

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

S7-SCL V5.3 pour S7-300/400


15-36 A5E00324651-01
Description du langage

15.3.3 Composition des sections de déclaration

Règle Diagramme syntaxique


Section de déclaration de
l'OB

Section des constantes

Section des repères de saut

Section des
variables temporaires

Section de déclaration de
la FC

Section des constantes

Section des repères de saut

Section des
variables temporaires

Section des paramètres


Interface

Section de déclaration du
FB

Section des constantes

Section des repères de saut

Section des
variables temporaires

Section des
variables statiques

Section des paramètres


Interface

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-37
Description du langage

Règle Diagramme syntaxique


Section de déclaration du
DB

DESIGNATION
DE L'UDT

Structure de la
spécification du
type de données

Section d'affectation du
DB Section d'affectation du DB

Variable simple := Constante* ;

* en notation LIST

Section des constantes


Section des constantes

CONST Expression END_CONST


IDENTIFICATEUR := ;
simple
Mnémonique de
la constante

Section des repères de


saut Section de déclaration des repères de saut

LABEL IDENTIFICATEUR ; END_LABEL

Repère de saut

S7-SCL V5.3 pour S7-300/400


15-38 A5E00324651-01
Description du langage

Règle Diagramme syntaxique


Section des variables
statiques Section de variables statiques

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

1) Attributs système de paramètres

24 caractères au maximum
:= caractère
{ IDENTIFICATEUR ' ' }
imprimable

Initialisation du type de
données INITIALISATION

CONSTANTE

LISTE D’INITIAL.

D’UN TABLEAU

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-39
Description du langage

Règle Diagramme syntaxique


Liste d'initialisation de LISTE DE REPETITION DE CONSTANTES
tableau

LISTE DE REPET.
DE CONSTANTES

CHAINE DE CHIFFRES ( CONSTANTE )


DECIMALES
FACTEUR DE REPETITION ,

LISTE D’INITIALISATION DE TABLEAUX


CONSTANTE

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 : ;

Nom de l'instance locale DESIGNATION


DU SFB
,

Section de variables
temporaires
Section de variables temporaires

VAR_TEMP Déclaration
de la variable END_VAR

L'initialisation n'est pas possible

S7-SCL V5.3 pour S7-300/400


15-40 A5E00324651-01
Description du langage

Règle Diagramme syntaxique


Section de paramètres
Section des paramètres

VAR_INPUT

VAR_OUTPUT Déclaration
de la variable END_VAR

VAR_IN_OUT

L'initialisation est uniquement possible pour VAR_INPUT et VAR_OUTPUT

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

S7-SCL V5.3 pour S7-300/400


A5E00324651-01 15-41
Description du langage

15.3.4 Types de données dans S7-SCL

Règle Diagramme syntaxique


Type de données simple
Type de données
binaire

Type de données
caractère

Type de données
numérique

Type de données
temporel

Type de données binaire


BOOL Bit

BYTE Octet

WORD Mot

DWORD Double 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

Entier, double précision</