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

pas une description isolée mais fait partie du manuel. Il peut être appelé via l'icône "Mise

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

Toute communication et reproduction de ce support d'information, toute exploitation ou communication de son contenu sont interdites, sauf autorisation expresse. Tout manquement à cette règle est illicite et expose son auteur au versement de dommages et intérêts. Tous nos droits sont réservés, notamment pour le cas de la délivrance d'un brevet ou celui de l'enregistrement d'un modèle d'utilité.

Siemens AG Automation and Drives Postfach 4848, 90327 Nürnberg, Allemagne

Exclusion de responsabilité

Nous avons vérifié la conformité du contenu du présent manuel avec le matériel et le logiciel qui y sont décrits. Or des divergences n'étant pas exclues, nous ne pouvons pas nous porter garants pour la conformité intégrale. Si l'usage de ce manuel devait révéler des erreurs, nous en tiendrons compte et apporterons les corrections nécessaires dès la prochaine édition. Veuillez nous faire part de vos suggestions.

Siemens AG 2005 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

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
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
Calcul des résultats
Saisie des valeurs
de mesure
Tri des valeurs
de mesure

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

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 Codage 1 Deux
Saisie des données :
x=Evaluation du front
Commutateur sur module d'entrée
1
Codage
1
Deux inverseurs
Commutateur de codage
0
0
1
X
Racine carrée
ou carré
Valeur de mesure
ou
résultat
3
Valeur de mesure
Racine carrée
Carré
1
1 1
3
2 9
Adressage
de la sortie
7
3 49
15
4
225
31
6
961
63
Inverseur
8
3969
Sélection
127
11
16129
de la sortie
Débordement
255
16
haut
Valeurs triées
Résultats
Sortie des données :
Affichage sur le module
de sortie
4
Sortie

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

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.

Blocs

STEP 7

OB
OB

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 d'exécution des blocs du programme utilisateur.

FB
FB

Les blocs fonctionnels sont des blocs de code à données statiques. Le 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.

FC
FC

Les fonctions sont des blocs de code sans mémoire. De ce fait, il faut que les valeurs calculées soient traitées aussitôt après l'appel de la fonction.

DB
DB

Les blocs de données sont des zones servant à mémoriser les données 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é.

UDT
UDT

Les types de donné es utilisateur sont des types complexes que vous 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

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 un programme Plusieurs sources pour un programme Source Source Source SCL SCL
Une source pour
un programme
Plusieurs sources pour
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

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 Bloc d'organisation (OB) SAISIE Bloc fonctionnel (FB) CALCUL Bloc fonctionnel (FB) Saisie des Tri
CYCLE
Bloc d'organisation (OB)
SAISIE
Bloc fonctionnel (FB)
CALCUL
Bloc fonctionnel (FB)
Saisie des
Tri des
Entrée des
SQRT
valeurs de
valeurs de
données
(racine carrée)
mesure
mesure
et CARRE
Appel
Fonctions (FC)
Cycli-
que
Adressage et
Sortie des
Calcul des
sélection de
Racine carrée,
données
résultats
la sortie
carré
Enregistre-
SAISIE_DONNEES
Bloc de données (DB)
ment des
données
Sens de dé-
placement du
programme
Sens de dé-
Placement
des données

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

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

OB "CYCLE"

Pour la tâche partielle Saisie des valeurs de mesure, il nous faut un bloc à mémoire, 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.

FB "SAISIE"

Dans le choix du type de bloc qui assumera les tâches partielles Tri des valeurs de 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.

FB "CALCUL"

Pour assumer la tâche partielle Calcul de la racine carrée ou du carré, c'est une FC qui convient le mieux, parce que le résultat peut être retourné en tant que valeur de la fonction. En outre, le calcul ne nécessite pas de données devant être conservées au- 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.

FC "SQRT" (racine carrée) et

FC "CARRE"

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

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 de sortie actuelles au bloc appelant. Vous pouvez y accéder en écriture comme en lecture.

VAR_OUTPUT

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

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 à la mémoire circulante

REAL

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 fonction

Racine carrée de la valeur d'entrée

Valeur

INT

VAR_INPUT

Entrée pour CARRE

CARRE

INT

Valeur de la fonction

Carré de la valeur d'entrée

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

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
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
5
6
Codage, bit 0
Codage, bit 1
Codage, bit 2
7
Validation du codage
0 à 7
Octet d'entrée : valeur de mesure
Octet 1
Module de
sortie
Octet 4
0
Octet de poids fort du mot de sortie
0 à 7
1
(bits 8 à 15), requis seulement pour
2
l'élévation au carré, sinon 0.
3
4
5
6
7
0
1
2
Octet de poids faible du mot de sortie
0 à 7
3
(bits 0 à 7), valeur de mesure ou résultat :
racine carrée ou carré.
4
5
6
Octet 5
7

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

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.

que vous devez y déclarer pour pouvoir compiler la source sans erreurs. S7-SCL V5.3 pour S7-300/400

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

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

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 Début Bloc fonctionnel Début de l’instruction REPEAT échanger := FALSE I := LIMITE I
CALCUL
Début
Bloc fonctionnel
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]
?
non
Echanger les valeurs
de la mémoire de tri [I-1]
et de la mémoire de tri [I]
ECHANGER = TRUE
I := I-1
Fin de l’instruction
FOR
Fin de l’instruction
REPEAT
échanger ?
TRUE
FALSE
I := 0
Début de l’instruction
FOR
non
I <= LIMITE ?
oui
SQRT
Entrer les résultats dans le ta-
bleau structuré des résultats.
CARRE
Entrer les résultats dans le
tableau structuré des résultats.
Fin de l’instruction
FOR
I := I+1
Fin

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

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

Paramètres d'entrée/sortie

Paramètres de sortie

Déclaration des variables temporaires

entre CONST et END_CONST,

entre VAR_IN_OUT et END_VAR,

entre VAR_OUTPUT et END_VAR,

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 STRUCT

LIMITE]

OF

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

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

mémoire_calcul

valeurs_mesure

décrits. mémoire_tri mémoire_calcul valeurs_mesure CALCUL Cette interface représente le noyau de

CALCUL

mémoire_tri mémoire_calcul valeurs_mesure CALCUL Cette interface représente le noyau de l'échange de

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

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

resultat_r := SQRT(valeur_r);

memoire_calcul[indice].racine_carree := REAL_TO_INT(resultat_r);

memoire_calcul[indice].carre

:= INT_TO_REAL(memoire_tri[indice]);

:=

CARRE(memoire_tri[indice]);

END_FOR;

END_FUNCTION_BLOCK

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

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 ? non Inscrire valeur de mesure dans mémoire circulante, recalculer
Début
Modifier
oui
nouvelle
valeur ?
non
Inscrire valeur de mesure
dans mémoire circulante,
recalculer l’index
Modifier
oui
nouveau
tri ?
non
CALCUL
Reprise des résultats
des calculs dans le
tableau des résultats
charger depuis le bloc
de données d’instance
Modifier
oui
nouveau
code ?
non
Evaluation du codage et
détermination de l’adresse
de sortie
Choix
TRUE
fonction ?
FALSE
Charger résultat du calcul
de la racine carrée
Charger résultat du calcul
du cadre
Charger valeur de mesure
Fin

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

La mémoire circulante est réalisée avec l’opération MOD : lorsque la limite est atteinte, elle recommence au début.

Trier la mémoire circulante et effectuer les calculs (créer à cet effet le tableau des résultats).

D’abord décaler les bits non significatifs vers le bord droit, puis masquer les places inutiles à l’aide de AND

Charger :

inscrire les éléments de la liste avec les adresses de sortie dans les paramètres de sortie pour ensuite afficher leurs valeurs.

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

:

:

nouv_val

INT ; // Nouvelle valeur de mesure BOOL; // Prendre en charge la valeur

:

// de mesure dans la mémoire // circulante "valeurs_mesure" BOOL; // Trier les valeurs de mesure

nouv_tri 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 END_VAR VAR

: INT; // Valeur de mesure correspondante

valeurs_mesure

memoire_resultats

STRUCT

:

:

ARRAY[0

LIMITE]

ARRAY[0

LIMITE]

OF

OF INT := 8(0);

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

END_VAR

: CALCUL,

//Définition de l'instance //locale

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

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 [ ] OF INT

8(0)

Mémoire circulante pour les valeurs de mesure

Memoire_resultats

ARRAY [ ] OF STRUCT

-

Tableau de structures avec les 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

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

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

Commutateur

pour valeur

de codage

Commutateur

de codage

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
Octet 0
0
8
1
9
2
10
3
11
4
12
5
13
6
14
7
15
Octet 1
EW0
 

0

1
1

1

2

 

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

14 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13

« adresse »

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

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

valeurs_mesure[pointeur] := entree_val_mesure;

pointeur

:= pointeur MOD NOMBRE;

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

//Remise à 0 du pointeur de la mémoire circulante

instance_calcul(memoire_tri := valeurs_mesure);//Appel du FB CALCUL END_IF;

anc_tri

memoire_resultats := instance_calcul.memoire_calcul; //Carré et racine carrée

pointeur := 0;

:= nouv_tri;

(****************************************************************** 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

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 END_VAR BEGIN (* 1ère partie :

***************************************************) SAISIE.SAISIE_DONNEES( entree_val_mesure := WORD_TO_INT(entree),

20]

OF BYTE; //Zone pour l'OB1

nouv_val

:= "entree 0.0", //Commutateur de saisie

nouv_tri

//sous forme de mnémonique := 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

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

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 validez-le à l'aide du commutateur de codage

Toutes les sorties du module de sortie (octet de poids faible) sont activées et les diodes s'allument.

(E0.7).

2

Faites indiquer la racine carrée correspondante en positionnant le commutateur de sortie (E0.3) sur

Les indications à la sortie équivalent à la valeur binaire "10000" (=16).

"1".

3

Faites indiquer le carré correspondant en positionnant le commutateur de fonction (E0.2) sur

15 indicateurs s'allument à la sortie. Ceci signale un débordement, car 255 x 255 est une valeur trop élevée pour la plage des entiers.

"1".

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 module d'entrée la valeur 3, c'est-à-dire la valeur binaire "11".

Rien ne change encore sur le module de sortie.

5a

Observez la lecture de la valeur de mesure : réglez le codage sur "000" et validez-le à l'aide du commutateur de codage (E0.7) afin de pouvoir observer plus tard la saisie de la valeur.

La sortie indique 0, c'est-à-dire qu'aucun des indicateurs ne s'allume.

5b

Inversez le commutateur de saisie "entree 0.0" (E0.0). Ceci provoque la lecture de la valeur donnée à la 4e étape du test.

La sortie indique la valeur de mesure 3 , valeur binaire

"11".

6

Déclenchez le tri et le calcul en inversant le commutateur de tri (E0.1).

La sortie indique à nouveau 0, puisque le tri a décalé 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", puisque c'est la seconde valeur la plus élevée dans le tableau.

réglez le codage sur "110" (E0.6 = 1, E0.5 = 1, E0.4 = 0 pour EB0, ce qui correspond aux bits 14, 13 et 12 de EW0) et validez-le en inversant le commutateur de codage.

8a

Indication des résultats correspondants : une inversion du commutateur de sortie (E0.3) provoque l'indication du carré de la valeur de mesure de l'étape 7 du test.

La valeur de sortie 9, c'est-à-dire la valeur binaire "1001" est indiquée.

8b

Inversez le commutateur de fonction (E0.2) pour obtenir aussi la racine carrée.

La valeur de sortie 2, c'est-à-dire la valeur binaire "10" est indiquée.

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

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