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 isole mais fait partie du manuel. Il peut tre appel via l'icne "Mise en route".

Consignes de scurit
Ce manuel donne des consignes que vous devez respecter pour votre propre scurit ainsi que pour viter des dommages matriels. Elles sont mises en vidence par un triangle davertissement et sont prsentes, selon le risque encouru, de la faon suivante :

! ! !

Danger
signifie que la non-application des mesures de scurit appropries entrane la mort, des blessures graves ou un dommage matriel important.

Attention
signifie que la non-application des mesures de scurit appropries peut entraner la mort, des blessures graves ou un dommage matriel important.

Prudence
signifie que la non-application des mesures de scurit appropries peut entraner des blessures lgres.

Prudence
signifie que la non-application des mesures de scurit appropries peut entraner un dommage matriel.

Important
doit vous rendre tout particulirement 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 lutilisation d'un appareil ne doivent tre effectues que par des personnes qualifies. Il sagit de personnes qui ont lautorisation de mettre en service, de mettre la terre et de reprer des appareils, des systmes et circuits lectriques conformment aux rgles de scurit en vigueur.

Utilisation conforme
Tenez compte des points suivants :

Attention
Lappareil ne doit tre utilis que pour les applications spcifies dans le catalogue ou dans la description technique, et exclusivement avec des priphriques et composants recommands par Siemens. Le transport, le stockage, le montage, la mise en service ainsi que lutilisation et la maintenance adquats de l'appareil sont les conditions indispensables pour garantir son fonctionnement correct et sr.

Marques de fabrique
SIMATIC, SIMATIC HMI et SIMATIC NET sont des marques dposes de Siemens AG. Les autres dsignations dans ce document peuvent tre des marques dont lutilisation par des tiers leurs propres fins peut enfreindre les droits des propritaires desdites marques.

Copyright Siemens AG 2005 Tous droits rservs


Toute communication et reproduction de ce support d'information, toute exploitation ou communication de son contenu sont interdites, sauf autorisation expresse. Tout manquement cette rgle est illicite et expose son auteur au versement de dommages et intrts. Tous nos droits sont rservs, notamment pour le cas de la dlivrance d'un brevet ou celui de l'enregistrement d'un modle d'utilit.

Exclusion de responsabilit
Nous avons vrifi la conformit du contenu du prsent manuel avec le matriel et le logiciel qui y sont dcrits. Or des divergences n'tant pas exclues, nous ne pouvons pas nous porter garants pour la conformit intgrale. Si l'usage de ce manuel devait rvler des erreurs, nous en tiendrons compte et apporterons les corrections ncessaires ds la prochaine dition. Veuillez nous faire part de vos suggestions.

Siemens AG Automation and Drives Postfach 4848, 90327 Nrnberg, Allemagne

Siemens AG 2005 Sous rserve de modifications techniques

Siemens Aktiengesellschaft

A5E00324656-01

Dveloppement d'un programme S7-SCL

Bienvenue dans l'exemple pour dbutants "Saisie de valeurs de mesure"


Objectifs
L'exemple propos veut vous apprendre utiliser au mieux les possibilits offertes par S7-SCL. Les questions les plus frquentes au dbut sont par exemple : Comment faire pour concevoir mon programme avec S7-SCL ? Quels sont les lments de langage de S7-SCL adquats pour rsoudre ce problme ? Quelles sont les fonctions de test mises ma disposition ? Ce chapitre entend rpondre ces questions et quelques autres.

Elments de langage S7-SCL employs


Notre exemple prsente entre autres les lments de langage suivants : Composition et utilisation des diffrents types de bloc de S7-SCL, Appel des blocs avec transmission et exploitation des paramtres, Divers formats d'entre et de sortie, Programmation l'aide de types de donnes simples et de tableaux, Initialisation de variables, Structures de programme avec utilisation d'aiguillages et de boucles.

Matriel requis
Vous pouvez excuter le programme-exemple dans un automate SIMATIC S7-300 ou SIMATIC S7-400 dot de la priphrie suivante : Un module d'entre 16 voies, Un module de sortie 16 voies.

Fonctions de test disponibles


Le programme est conu pour tre test rapidement l'aide des commutateurs de l'entre et des indicateurs de la sortie. Pour un test plus dtaill, utilisez les fonctions de test de S7-SCL. De plus, toutes les possibilits offertes par le logiciel de base STEP 7 sont votre disposition, indpendamment du langage utilis.

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

Dveloppement d'un programme S7-SCL

Enonc du problme
Prsentation
Il s'agit de saisir des valeurs de mesure au moyen d'un module d'entre, pour les trier et traiter ensuite l'aide d'un programme S7-SCL. Les rsultats seront indiqus par un module de sortie.

Saisie des valeurs de mesure


Vous indiquez une valeur de mesure au moyen des 8 commutateurs d'entre. Il s'agit de l'enregistrer en mmoire dans le tableau des valeurs de mesure l'instant exact d'un front au commutateur de saisie (voir la figure ci-dessous). La plage exige pour les valeurs de mesure tant de 0 255, 1 octet est ncessaire l'entre.

Traitement des valeurs de mesure


Le tableau de valeurs de mesure sera organis sous forme de mmoire circulante contenant 8 enregistrements au plus. Lorsqu'un front est dtect un commutateur de tri, il faut trier par ordre croissant les valeurs enregistres dans le tableau des valeurs de mesure. Ensuite, il faut calculer la racine carre et le carr de chaque valeur. Les fonctions de traitement ncessitent 1 mot.
Saisie des donnes :
Commutateur de saisie x=Evaluation du front

Valeur de mesure

Commutateur de tri

1 1 1 1 1 1 1 1

255
Racine carre Carr

255 127 63 31 15 7 3 1 Saisie des valeurs de mesure

1 3 7 15 31 63 127 255 Tri des valeurs de mesure


Calculs

1 2 3 4 6 8 11 16

1 9 49 225 961 3969 16129


Dbordement haut

Calcul des rsultats

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

Dveloppement d'un programme S7-SCL

Slection pour les sorties


Le module de sortie ne pouvant indiquer qu'une seule valeur la fois, il faudra disposer des possibilits suivantes : Slection d'un lment dans une liste, Choix entre valeur de mesure, racine carre et carr. La valeur indiquer est slectionne de la manire suivante : Trois commutateurs forment un codage qui est valid en cas de front un quatrime commutateur, le commutateur de codage. Ceci permet de calculer l'adresse de la sortie. Trois valeurs sont mises disposition pour la sortie la mme adresse, la valeur de mesure, la racine carre et le carr. Deux inverseurs sont prvoir pour choisir une valeur parmi les trois.
Saisie des donnes :
Commutateur sur module d'entre Deux inverseurs Codage 1 1 0 Commutateur de codage

x=Evaluation du front

0
Racine carre ou carr

1
Valeur de mesure ou rsultat

Valeur de mesure

Racine carre

Carr

1 3 7 15 31 63 127 255 Valeurs tries


Inverseur

1 Adressage de la sortie 2 3 4 6 8 11 16

1 9 49 225 961 3969 16129


Dbordement haut

Slection de la sortie

Rsultats

Sortie des donnes :


Affichage sur le module de sortie

4
Sortie

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

Dveloppement d'un programme S7-SCL

Composition d'un programme structur avec S7-SCL


Types de bloc
Un programme S7-SCL structur permet de rsoudre au mieux le problme pos. Un tel programme est de construction modulaire, c'est--dire divis en blocs chargs chacun d'une tche partielle bien dtermine. 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 systme d'exploitation de la CPU S7 et le programme utilisateur. C'est ici qu'est dfini l'ordre d'excution des blocs du programme utilisateur. Les blocs fonctionnels sont des blocs de code donnes statiques. Le FB disposant d'une mmoire, il est possible d'accder ses paramtres (par ex. des sorties) depuis n'importe quelle position du programme utilisateur. Les fonctions sont des blocs de code sans mmoire. De ce fait, il faut que les valeurs calcules soient traites aussitt aprs l'appel de la fonction. Les blocs de donnes sont des zones servant mmoriser les donnes utilisateur. On distingue les DB globaux auxquels tous les blocs de code ont accs et les DB d'instance qui sont associs un appel de FB dtermin. Les types de donn es utilisateur sont des types complexes que vous dfinissez vous-mme au besoin et qui sont rutilisables. Ainsi, un type de donnes utilisateur peut servir gnrer plusieurs blocs de donnes de mme structure. Les UDT s'emploient comme des blocs.

OB

FB

Blocs STEP 7

FC

DB

UDT

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

Dveloppement 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 diffrents blocs.
Une source pour un programme

Plusieurs sources pour un programme


Source SCL pour OB1 Source SCL pour FC2 Source SCL pour FB22

. FB22 . . . FC2 . . . OB1 .


Source SCL

FB22 FC2 OB1


DB D'instance

Dossier Blocs Hors ligne

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

Dveloppement d'un programme S7-SCL

Dfinition des tches partielles


Tches partielles
Dans la figure ci-aprs, les tches partielles sont reprsentes par des blocs. Les zones rectangulaires grises reprsentent 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) Saisie des valeurs de mesure

CALCUL Bloc fonctionnel (FB)

Entre des donnes Appel Cyclique Sortie des donnes

Tri des valeurs de mesure

SQRT (racine carre) et CARRE Fonctions (FC)

Adressage et slection de la sortie

Calcul des rsultats

Racine carre, carr

SAISIE_DONNEES Bloc de donnes (DB)

Enregistrement des donnes

Sens de dplacement du programme

Sens de dPlacement des donnes

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

Dveloppement d'un programme S7-SCL

Choix et affectation des types de bloc possibles


Les diffrents blocs ont t choisis d'aprs les critres suivants :
Fonction Un programme utilisateur ne peut tre dclench 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 - Entre des donnes et Sortie des donnes - sera programme dans l'OB. Pour la tche partielle Saisie des valeurs de mesure, il nous faut un bloc mmoire, donc un FB, puisque certaines donnes locales (la mmoire circulante, par exemple) doivent tre conserves d'un cycle de programme au suivant. Le lieu propre l'Enregistrement des donnes (mmoire) est le bloc de donnes d'instance SAISIE_DONNEES. Le mme FB peut encore se charger de la tche partielle Adressage et slection de la sortie, puisqu'il dispose des donnes requises. Dans le choix du type de bloc qui assumera les tches partielles Tri des valeurs de mesure et Calcul des rsultats, il faut tenir compte du fait qu'une mmoire tampon de sortie doit tre cre qui contiendra, pour chaque valeur de mesure, la racine carre et le carr rsultant des calculs. Seul un FB entre en ligne de compte. Comme il est appel par un FB de rang suprieur, il n'a pas besoin de DB en propre. Ses donnes d'instance peuvent tre stockes dans le bloc de donnes d'instance du bloc appelant. Nom de bloc OB "CYCLE"

FB "SAISIE"

FB "CALCUL"

Pour assumer la tche partielle Calcul de la racine carre ou du carr, c'est une FC qui convient le mieux, parce que le rsultat peut tre retourn en tant que valeur de la fonction. En outre, le calcul ne ncessite pas de donnes devant tre conserves au- del d'un cycle d'excution du programme. La fonction standard de S7-SCL SQRT peut servir calculer la racine carre. Pour calculer le carr, il faut crer une fonction CARRE qui vrifie aussi les limites de la plage de valeurs.

FC "SQRT" (racine carre) et FC "CARRE"

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

Dveloppement d'un programme S7-SCL

Dfinition des interfaces entre blocs


Prsentation
L'interface d'un bloc est forme de paramtres auxquels il est possible d'accder depuis d'autres blocs. Les paramtres dclars dans le bloc sont des marques de rservation dont les valeurs ne sont fixes qu'au moment de l'utilisation concrte (appel). On les nomme paramtres formels, tandis que les valeurs qui leur sont affectes l'appel du bloc sont dsignes par paramtres effectifs. Lorsqu'un bloc est appel, des donnes d'entre lui sont transmises en tant que paramtres effectifs. Aprs le retour au bloc appelant, les donnes de sortie sont mises disposition pour tre prises en charge. Une fonction (FC) peut transmettre son rsultat sous forme de valeur de la fonction. On peut classer les paramtres de bloc dans les catgories suivantes :
Paramtres de bloc Paramtres d'entre Signification Dclaration avec

Paramtres de sortie

Paramtres d'entre/sortie

A l'appel du bloc, les paramtres d'entre prennent VAR_INPUT les valeurs d'entre actuelles. Vous pouvez y accder uniquement en lecture. Les paramtres de sortie transmettent les valeurs VAR_OUTPUT de sortie actuelles au bloc appelant. Vous pouvez y accder en criture comme en lecture. Les paramtres d'entre/sortie prennent en charge VAR_IN_OUT la valeur actuelle d'une variable lors de l'appel, la traitent et rangent ensuite les rsultats dans la mme variable.

OB CYCLE
L'OB CYCLE n'a pas de paramtres formels. Il appelle le FB SAISIE et lui transmet pour ses paramtres formels la valeur de mesure et les donnes de commande.

FB SAISIE
Nom de paramtre Entree_val_mesure nouv_val nouv_tri choix_fonction Selection nouv_selection Sortie_resultat Sortie_val_mesure Type de donnes INT BOOL BOOL BOOL WORD BOOL DWORD DWORD Type de dclaration VAR_INPUT VAR_INPUT VAR_INPUT VAR_INPUT VAR_INPUT VAR_INPUT VAR_OUTPUT VAR_OUTPUT Description Valeur de mesure Commutateur pour prendre en charge la valeur de mesure dans la mmoire circulante Commutateur pour trier et exploiter les valeurs de mesure Inverseur pour choisir la racine carre ou le carr Codage pour slectionner la valeur de sortie Commutateur pour valider le codage Sortie du rsultat calcul Sortie de la valeur de mesure correspondante

10

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

Dveloppement d'un programme S7-SCL

FB CALCUL
Le FB SAISIE appelle le FB CALCUL. Les deux FB ont comme donnes communes le tableau de valeurs de mesure trier. Il faut donc dclarer ce tableau comme paramtre d'entre/sortie. Un tableau de structures est cr en tant que paramtre d'entre pour les rsultats du calcul que sont la racine carre et le carr. Voici les paramtres formels :
Nom Memoire_tri Memoire_calcul Type de donnes Type de dclaration Description Tableau des valeurs de mesure, correspond la mmoire circulante Tableau pour les rsultats : stucture avec les composants "racine_carree" et "carre" de type INT

ARRAY[..] OF VAR_IN_OUT REAL ARRAY[..] OF VAR_OUTPUT STRUCT

SQRT et CARRE
Ces fonctions sont appeles par CALCUL. Elles ncessitent une valeur d'entre et fournissent le rsultat en tant que valeur de la fonction.
Nom Valeur SQRT Valeur CARRE Type de donnes REAL REAL INT INT Type de dclaration VAR_INPUT valeur de la fonction VAR_INPUT Valeur de la fonction Description Entre pour SQRT Racine carre de la valeur d'entre Entre pour CARRE Carr de la valeur d'entre

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

11

Dveloppement d'un programme S7-SCL

Dfinition de l'interface d'entre/sortie


La figure ci-aprs montre l'interface d'entre/sortie. Notez que pour l'entre/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'entre/sortie sous forme de mot.
Octet 0 Octet 4

Systme d'automatisation

Octet 1

Octet 5

Module TOR d'entre

Module TOR de sortie

Module d'entre

Octet 0

E 0.3 E 0.4
0 1 2 3 4 5 6 7 07 Validation de la valeur de mesure Dclenchement du tri et du calcul Choix du rsultat : racine carre ou carr Slection sortie : valeur de mesure ou rsultat Codage, bit 0 Codage, bit 1 Codage, bit 2 Validation du codage

Octet d'entre : valeur de mesure

Octet 1 Module de sortie Octet 4

0 1 2 3 4 5 6 7

07

Octet de poids fort du mot de sortie (bits 8 15), requis seulement pour l'lvation au carr, sinon 0.

0 1 2 3 4 5 6

07

Octet de poids faible du mot de sortie (bits 0 7), valeur de mesure ou rsultat : racine carre ou carr.

Octet 5

12

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

Dveloppement d'un programme S7-SCL

Dfinition 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

Dfinition des mnmoniques


Le programme sera plus facile lire si vous attribuez des noms symboliques aux adresses des module et aux blocs. Pour cela, il faut dfinir des mnmoniques dans une table de mnmoniques. La figure ci-aprs montre la table des mnmoniques de notre exemple. Elle prsente les noms symboliques que vous devez y dclarer pour pouvoir compiler la source sans erreurs.

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

13

Dveloppement d'un programme S7-SCL

Cration de la fontion CARRE


Section des instructions de la fonction CARRE

Section des instructions


Il faut d'abord vrifier si la valeur d'entre ne dpasse pas la limite pour laquelle le rsultat 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'lvation au carr est effectue. Le rsultat est transmis comme valeur de la fonction. FUNCTION CARRE : INT (******************************************************************* Cette fonction fournit comme valeur le carr de la valeur d'entre ou en cas de dbordement, la valeur maximale pouvant tre reprsente 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 dbordement END_IF; END_FUNCTION

14

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

Dveloppement d'un programme S7-SCL

Cration du FB CALCUL
Organigramme de EXPLOITER
Cette figure reprsente l'algorithme sous forme d'organigramme.
CALCUL Bloc fonctionnel Dbut de linstruction REPEAT Dbut

changer := FALSE I := LIMITE

I signifie index

Dbut de linstruction FOR I >= 1 ? oui

non

mmoire_tri [I-1] > mmoire_tri [I] ? non

oui Echanger les valeurs de la mmoire de tri [I-1] et de la mmoire de tri [I]

ECHANGER = TRUE

Fin de linstruction FOR Fin de linstruction REPEAT TRUE

I := I-1

changer ? FALSE I := 0

Dbut de linstruction FOR

I <= LIMITE ?

non

oui SQRT CARRE Fin de linstruction FOR Entrer les rsultats dans le tableau structur des rsultats. Entrer les rsultats dans le tableau structur des rsultats.

I := I+1

Fin

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

15

Dveloppement d'un programme S7-SCL

Section de dclaration du FB CALCUL

Composition de la section de dclaration


La section de dclaration de ce bloc se compose des blocs de dclaration suivants : Dclaration des constantes Paramtres d'entre/sortie Paramtres de sortie Dclaration des variables temporaires CONST LIMITE := 7; END_CONST VAR_IN_OUT memoire_tri END_VAR entre CONST et END_CONST, entre VAR_IN_OUT et END_VAR, entre VAR_OUTPUT et END_VAR, entre VAR_TEMP et END_VAR.

: ARRAY[0..LIMITE] OF INT;

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

16

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

Dveloppement d'un programme S7-SCL

Section des instructions du FB CALCUL

Droulement du programme
Le paramtre d'entre/sortie "memoire_tri" est combin avec la mmoire circulante "valeurs_mesure", c'est--dire que le contenu original de la mmoire est cras par les valeurs de mesure tries. Le nouveau tableau "memoire_calcul" est cr comme paramtre de sortie pour les rsultats du calcul. Ses lments sont structurs de telle faon qu'ils contiennent la racine carre et le carr de chaque valeur de mesure. La figure ci-aprs montre le lien entre les tableaux dcrits.

mmoire_tri valeurs_mesure mmoire_calcul

CALCUL

Cette interface reprsente le noyau de l'change de donnes servant au traitement des valeurs de mesure. Les valeurs sont enregistres dans le bloc de donnes d'instance SAISIE_DONNEES, puisqu'une instance locale a t cre pour le FB CALCUL dans le FB SAISIE appelant.

Section des instructions


Les valeurs de mesure sont d'abord tries dans la mmoire circulante, puis les calculs sont effectus. Mthode de l'algorithme de tri C'est la mthode de permutation permanente des valeurs qui est utilise pour trier la mmoire circulante ; en d'autres termes, deux valeurs conscutives sont compares l'une l'autre et permutes jusqu' obtention de l'ordre de tri souhait. La mmoire utilise est le paramtre d'entre/sortie "memoire_tri". Dclenchement du calcul Une fois le tri termin, une boucle de calcul est parcourue qui contient l'appel des fonctions CARRE pour l'lvation au carr et SQRT pour l'extraction de la racine carre. Les rsultats sont enregistrs dans le tableau de structures "memoire_calcul".

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

17

Dveloppement d'un programme S7-SCL

Section des instructions du FB CALCUL


La section des instructions du bloc de code se prsente comme suit : BEGIN (****************************************************************** 1re partie : tri par change de paires. Les valeurs sont changes par paires jusqu' ce que la mmoire des valeurs de mesure soit trie. *******************************************************************) 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; (****************************************************************** 2me partie : calcul de la racine carre avec la fonction standard SQRT et lvation 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

18

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

Dveloppement d'un programme S7-SCL

Cration du FB SAISIE
Organigramme de SAISIR
Cette figure reprsente l'algorithme sous forme d'organigramme.
SAISIE Bloc fonctionnel Dbut

Modifier nouvelle valeur ? non

oui Inscrire valeur de mesure dans mmoire circulante, recalculer lindex La mmoire circulante est ralise avec lopration MOD : lorsque la limite est atteinte, elle recommence au dbut.

Modifier nouveau tri ? non

oui Trier la mmoire circulante et effectuer les calculs (crer cet effet le tableau des rsultats).

CALCUL

Reprise des rsultats des calculs dans le tableau des rsultats

charger depuis le bloc de donnes dinstance

Modifier nouveau code ? non

oui Evaluation du codage et dtermination de ladresse de sortie Dabord dcaler les bits non significatifs vers le bord droit, puis masquer les places inutiles laide de AND

Choix fonction ?
FALSE

TRUE

Charger rsultat du calcul de la racine carre

Charger rsultat du calcul du cadre

Charger valeur de mesure

Fin

Charger : inscrire les lments de la liste avec les adresses de sortie dans les paramtres de sortie pour ensuite afficher leurs valeurs.

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

19

Dveloppement d'un programme S7-SCL

Section de dclaration du FB SAISIE

Composition de la section de dclaration


La section de dclaration de ce bloc se compose des blocs de dclaration suivants : Dclaration des constantes entre CONST et END_CONST, Paramtres d'entre entre VAR_INPUT et END_VAR, Paramtres de sortie entre VAR_OUTPUT et END_VAR, Variables statiques entre VAR et END_VAR ; c'est ici aussi qu'est effectue la dclaration 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 mmoire // circulante "valeurs_mesure" nouv_tri : BOOL; // Trier les valeurs de mesure choix_fonction : BOOL; // Choix de la fonction de calcul Racine carre ou Carr nouv_selection : BOOL; // Valider l'adresse de sortie selection : WORD; // Adresse de sortie END_VAR VAR_OUTPUT sortie_resultat : INT; // Valeur calcule 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, //Dfinition de l'instance //locale END_VAR

20

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

Dveloppement d'un programme S7-SCL

Variables statiques
Nous avons choisi le type de bloc FB parce qu'il y a des donnes enregistrer d'un cycle de programme au suivant. Il s'agit des variables statiques qui sont dclares dans la section de dclaration "VAR, END_VAR". On appelle variables statiques les variables locales dont les valeurs sont conserves durant toutes les excutions du bloc concern. Elles servent stocker les valeurs d'un bloc fonctionnel et sont conserves dans le bloc de donnes d'instance.

Initialisation de variables
Notez les valeurs initiales qui sont crites dans les variables lors de l'initialisation du bloc (aprs son chargement dans la CPU). L'instance locale du FB CALCUL est galement dclare dans la section de dclaration "VAR, END_VAR". Ce nom sera utilis plus tard pour l'appel et l'accs aux paramtres de sortie. L'instance globale SAISIE_DONNEES sert de mmoire de donnes.
Nom Valeurs_mesure Type de donnes Valeur initiale ARRAY [..] OF INT 8(0) Description Mmoire circulante pour les valeurs de mesure Tableau de structures avec les composants "racine_carree" et "carre" de type INT Pointeur de la mmoire circulante dsignant l'endroit o la valeur de mesure suivante est crite Valeur prcdente pour la prise en charge de valeur de mesure avec "nouv_val" Valeur prcdente pour le tri avec "nouv_tri" Valeur prcdente pour la validation du codage avec "nouv_selection" Adresse pour la sortie de valeur de mesure ou de rsultat Instance locale du FB CALCUL

Memoire_resultats ARRAY [..] OF STRUCT Pointeur INT

anc_val anc_tri anc_selection Adresse Instance_calcul

BOOL BOOL BOOL INT Instance locale

FALSE FALSE FALSE 0 -

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

21

Dveloppement 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 paramtre d'entre "nouv_val" a chang par rapport "anc_val", une nouvelle valeur de mesure est lue dans la mmoire circulante. Dclenchement du tri et du calcul Tri et calcul sont dclenchs par l'appel du bloc fonctionnel CALCUL lorsque le paramtre d'entre "nouv_tri" a chang par rapport "anc_tri". Evaluation du codage et prparation de la sortie Le codage est lu sous forme de mot. Conformment la convention SIMATIC, cela signifie que le groupe de commutateurs du haut (octet 0) contient les 8 bits de poids fort du mot d'entre et que le groupe de commutateurs du bas (octet 1) contient ceux de poids faible. La figure ci-aprs montre l'emplacement des commutateurs permettant d'effectuer le codage.

22

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

Dveloppement d'un programme S7-SCL

Calcul de l'adresse
La figure ci-aprs montre le calcul de l'adresse. Le mot d'entre EW0 contient dans ses bits 12 14 le codage qui est valid lorsqu'un front est dtect au commutateur de codage (bit 15). La valeur "adresse" est dtermine par dcalage 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 lments du tableau (rsultat du calcul et valeur de mesure correspondante) sont crits dans les paramtres de sortie. Le paramtre "choix_fonction" dtermine si le rsultat est la racine carre ou le carr. Un front du commutateur de codage est signal par le changement de "nouv_selection" par rapport "anc_selection".

Commutateur sur module

Mot dans mmoire

Vers SHR de 12 places

Vers AND, Masque 0007

Commutateur pour valeur de codage Commutateur de codage

0 1 2 3 4 5 6 7 Octet 0 0 1 2 3 4 5 6 7 Octet 1

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

0 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

adresse

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

23

Dveloppement d'un programme S7-SCL

Section des instructions


La section des instructions du bloc de code se prsente comme suit. BEGIN (***************************************************************** 1re partie : saisie des valeurs de mesure. La modification de "nouv_val" provoque la saisie de la valeur de mesure. L'opration MOD permet de raliser une mmoire 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; (****************************************************************** 2me partie : dclenchement du tri et du calcul La modification de "nouv_tri" dclenche le tri de la mmoire circulante et l'excution de calculs avec les valeurs de mesure. Les rsultats sont enregistrs dans un nouveau tableau "memoire_calcul". ******************************************************************) IF nouv_tri <> anc_tri THEN pointeur := 0; //Remise 0 du pointeur de la mmoire 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 carre (****************************************************************** 3me partie : valuation du codage et prparation de la sortie Si modification de "nouv_selection", le codage pour adressage de l'lment de tableau pour la sortie est dtermin de nouveau : les bits significatifs de "selection" sont masqus 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

24

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

Dveloppement d'un programme S7-SCL

Cration du bloc d'organisation CYCLE


Tches de l'OB CYCLE
Nous avons choisi un OB1, car il est appel de manire cyclique. Il sert raliser les tches suivantes pour le programme : Appel et dfinition des paramtres du bloc fonctionnel SAISIE avec donnes d'entre et donnes de commande, Prise en charge des donnes de rsultat du bloc fonctionnel SAISIE, Sortie des valeurs indiquer. La section de dclaration commence par la zone de donnes 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 systme S7. 1re partie : appel du bloc fonctionnel et transmission des valeurs d'entre 2me partie : prise en charge des valeurs de sortie et sortie avec slection *******************************************************************) VAR_TEMP donnees_systeme : ARRAY[0..20] OF BYTE; //Zone pour l'OB1 END_VAR BEGIN (* 1re partie : ***************************************************) SAISIE.SAISIE_DONNEES( entree_val_mesure := WORD_TO_INT(entree), nouv_val := "entree 0.0", //Commutateur de saisie //sous forme de mnmonique nouv_tri := commutateur_de_tri, choix_fonction := commutateur_de_fonction, nouv_selection := commutateur_de_codage, selection := codage); (* 2me partie : **************************************************) IF commutateur_de_sortie THEN //Commutation de la sortie sortie := SAISIE_DONNEES.sortie_resultat; //Racine carre //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

Dveloppement d'un programme S7-SCL

Conversion du type de donnes


La valeur de mesure fournie au module d'entre est du type de donnes BYTE. Elle doit tre convertie en INT : vous devez donc la convertir de WORD en INT, la conversion prcdente de BYTE en WORD tant automatiquement effectue par le compilateur. Par contre, il n'est pas ncessaire de convertir la sortie, puisqu'elle est dclare comme INT dans la table des mnmoniques.

26

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

Dveloppement d'un programme S7-SCL

Donnes de test
Conditions requises
Vous avez besoin pour le test d'un module d'entre 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 suprieurs du module d'entre et vers la droite ("1") les 8 commutateurs infrieurs. Chargez nouveau les blocs dans la CPU, puisque les valeurs initiales des variables sont galement testes.

Etapes du test
Effectuez maintenant le test en vous conformant aux tapes dcrites dans le tableau ciaprs.
Test Action 1 Rglez le codage sur "111" (E0.4, E0.5 et E0.6) et validez-le l'aide du commutateur de codage (E0.7). 2 Faites indiquer la racine carre correspondante en positionnant le commutateur de sortie (E0.3) sur "1". 3 Faites indiquer le carr correspondant en positionnant le commutateur de fonction (E0.2) sur "1". 4a Remettez le commutateur de sortie (E0.3) "0". Consquence Toutes les sorties du module de sortie (octet de poids faible) sont actives et les diodes s'allument. Les indications la sortie quivalent la valeur binaire "10000" (=16). 15 indicateurs s'allument la sortie. Ceci signale un dbordement, car 255 x 255 est une valeur trop leve pour la plage des entiers. La valeur de mesure est nouveau indique : tous les indicateurs des sorties de l'octet de poids faible du module de sortie sont "1". Rien ne change encore sur le module de sortie.

4b Donnez comme nouvelle valeur de mesure au module d'entre la valeur 3, c'est--dire la valeur binaire "11". 5a Observez la lecture de la valeur de mesure : rglez 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. 5b Inversez le commutateur de saisie "entree 0.0" (E0.0). Ceci provoque la lecture de la valeur donne la 4e tape du test. 6 Dclenchez le tri et le calcul en inversant le commutateur de tri (E0.1). 7 Indication de la valeur de mesure aprs le tri : rglez 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 rsultats 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. 8b Inversez le commutateur de fonction (E0.2) pour obtenir aussi la racine carre.

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

La sortie indique la valeur de mesure 3 , valeur binaire "11". La sortie indique nouveau 0, puisque le tri a dcal la valeur de mesure vers le haut du tableau. La sortie indique nouveau la valeur de mesure "11", puisque c'est la seconde valeur la plus leve dans le tableau.

La valeur de sortie 9, c'est--dire la valeur binaire "1001" est indique.

La valeur de sortie 2, c'est--dire la valeur binaire "10" est indique.

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

27

Dveloppement d'un programme S7-SCL

Test complmentaire
Les tableaux ci-aprs expliquent les commutateurs du module d'entre et proposent des modles de test pour la racine carre et le carr qui vous aideront dfinir vos propres tapes de test. L'entre est effectue 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 effectue 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 commande Voie 0 Voie 1 Voie 2 Voie 3 Voie 4 Voie 5 Voie 6 Voie 7 Commutateur de saisie Commutateur de tri Explication Inversion pour prise en charge de la valeur de mesure Inversion pour tri/exploitation

Commutateur de fonction A gauche ("0") : racine carre, A droite ("1") : carr Commutateur de sortie Codage Codage Codage Commutateur de codage A gauche ("0") : valeur de mesure, A droite ("1") : rsultat Adresse de sortie, bit 0 Adresse de sortie, bit 1 Adresse de sortie, bit 2 Inversion pour validation du codage

Le tableau suivant contient 8 valeurs de mesure dj tries titre d'exemple. Entrez les valeurs dans n'importe quel ordre. Pour cela, rglez la combinaison binaire respective et prenez la valeur en charge en inversant le commutateur de saisie. Une fois toutes les valeurs saisies, dclenchez le tri et l'exploitation en inversant le commutateur de tri. Aprs cela, vous pouvez prendre connaissance des valeurs de mesure tries ou des rsultats, racine carre ou carr.
Valeur de mesure 0000 0001 = 0000 0011 = 0000 0111 = 1 3 7 Racine carre 0, 0000 0001 = 1 0, 0000 0010 = 2 0, 0000 0011 = 3 0, 0000 0100 = 4 0, 0000 0110 = 6 0, 0000 1000 = 8 0, 0000 1011 = 11 0, 0001 0000 = 16 Carr 0000 0000, 0000 0001 = 0000 0000, 0000 1001 = 0000 0000, 0011 0001 = 0000 0000, 1110 0001 = 0000 0011, 1100 0001 = 1 9 49 225 961

0000 1111 = 15 0001 1111 = 31 0011 1111 = 63 0111 1111 = 127 1111 1111 = 255

0000 1111, 1000 0001 = 3969 0011 1111, 0000 0001 = 16129 0111 111, 1111 1111 = indication de dbordement !

28

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

Vous aimerez peut-être aussi