Vous êtes sur la page 1sur 28

s

SIMATIC
S7-SCL V5.3 pour S7-300/400
Getting Started Edition 01/2005

Mise en route
Cet exemple accompagnant le produit n'est pas une description isolée mais fait partie du manuel.
Il peut être appelé via l'icône "Mise en route".
Consignes de sécurité

Ce manuel donne des consignes que vous devez respecter pour votre propre sécurité ainsi que pour
éviter des dommages matériels. Elles sont mises en évidence par un triangle d’avertissement et sont
présentées, selon le risque encouru, de la façon suivante :

! Danger
signifie que la non-application des mesures de sécurité appropriées entraîne la mort, des blessures
graves ou un dommage matériel important.

! Attention
signifie que la non-application des mesures de sécurité appropriées peut entraîner la mort, des
blessures graves ou un dommage matériel important.

! 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
doit vous rendre tout particulièrement attentif à des informations importantes sur le produit, aux
manipulations à effectuer avec le produit ou à la partie de la documentation correspondante.

Personnel qualifié
La mise en service et l’utilisation d'un appareil ne doivent être effectuées que par des personnes
qualifiées. Il s’agit de personnes qui ont l’autorisation de mettre en service, de mettre à la terre et de
repérer des appareils, des systèmes et circuits électriques conformément aux règles de sécurité en
vigueur.

Utilisation conforme
Tenez compte des points suivants :

! Attention
L’appareil ne doit être utilisé que pour les applications spécifiées dans le catalogue ou dans la
description technique, et exclusivement avec des périphériques et composants recommandés par
Siemens.
Le transport, le stockage, le montage, la mise en service ainsi que l’utilisation et la maintenance
adéquats de l'appareil sont les conditions indispensables pour garantir son fonctionnement correct et
sûr.

Marques de fabrique
SIMATIC®, SIMATIC HMI® et SIMATIC NET® 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 des propriétaires desdites marques.

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


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

Siemens AG
Automation and Drives Siemens AG 2005
Postfach 4848, 90327 Nürnberg, Allemagne Sous réserve de modifications techniques

Siemens Aktiengesellschaft A5E00324656-01


Développement d'un programme S7-SCL

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
Développement d'un programme S7-SCL

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


4 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 5
Développement d'un programme S7-SCL

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


6 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 7
Développement d'un programme S7-SCL

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


8 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 9
Développement d'un programme S7-SCL

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


10 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 11
Développement d'un programme S7-SCL

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


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

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

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 13
Développement d'un programme S7-SCL

Création de la fontion CARRE

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


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

Création du FB CALCUL

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 15
Développement d'un programme S7-SCL

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


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

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


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

Création du FB SAISIE

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 19
Développement d'un programme S7-SCL

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


20 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 21
Développement d'un programme S7-SCL

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


22 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 23
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


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

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


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

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


28 A5E00324651-01

Vous aimerez peut-être aussi