04-Stockage Des Donné Dans Les Bloc de Donnée
04-Stockage Des Donné Dans Les Bloc de Donnée
04-Stockage Des Donné Dans Les Bloc de Donnée
Sommaire Page
Mémento
DBz
MIS
DBy . .
MIE .
DBx
Périphérie
Généralités Outre les blocs de programme, un programme utilisateur comporte aussi des données
sur l‘état du processus et des signaux, traitées par les opérations du programme
utilisateur.
Les données sont stockées dans des variables du programme utilisateur, une variable
étant caractérisée de manière univoque par :
• le chemin d‘accès à la zone mémoire (opérande : par exemple Périphérie, MIE, MIS,
mémentos, pile L, DB)
• le type de données (type de données élémentaire ou complexe, type de paramètre).
En fonction des modalités d‘accès, on distingue :
• les variables globales qui sont déclarées dans la table des mnémoniques globale ou
dans des blocs de données globaux et
• les variables locales qui se trouvent dans la partie déclarative des OB, FB et FC.
Pile de données La pile de données locales (pile L) est une zone mémoire qui permet d‘enregistrer :
locales • des variables temporaires d'un bloc de code, y compris les informations
de démarrage des OB.
• des opérandes effectifs lors du transfert de paramètres pour les appels de FC
• des résultats intermédiaires dans des programmes en schéma à contacts.
Ce sujet est traité au chapitre "Fonctions et blocs fonctionnels".
Blocs de Les blocs de code utilisent les blocs de données pour mémoriser des valeurs.
données Contrairement aux données temporaires, les données stockées dans un bloc de
données ne sont pas écrasées lorsque le traitement du bloc de code est terminé ou
que le DB est fermé.
Fonction
OB1
FC10
Données
globales
DB20
Fonction
FC20
DB d‘instance de FB1
Bloc Données
fonctionnel d‘instance
FB1 DB5
Généralités Les blocs de données servent à enregistrer des données utilisateur. Comme les
blocs de code, ils occupent de l‘espace dans la mémoire utilisateur. Les blocs
de données contiennent des variables (par exemple des valeurs numériques)
nécessaires à l‘exécution du programme utilisateur.
Le programme utilisateur peut accéder aux données d'un bloc de données par
des opérations sur bit, sur octet, sur mot et sur double mot. L'accès peut se faire
en symbolique ou en absolu.
Domaine Les bloc de données peuvent, selon leur contenu, être employés de différentes
d'application manières par l‘utilisateur. On distingue :
• les blocs de données globaux : ils contiennent des informations auxquelles
on peut accéder à partir de tous les blocs logiques du programme utilisateur.
• les blocs de données d'instance : ils sont toujours associés à un FB. Les
données de ce DB ne devraient être traitées que par le FB correspondant.
Les blocs de données d'instance sont traités plus en détail au chapitre
"Fonctions et blocs fonctionnels ".
Création de DB Les DB globaux sont créés via l‘éditeur de programme ou selon un "type de
données utilisateur" défini préalablement.
Les blocs de données d'instance sont créés en cas d'appel d'un bloc FB.
Registres La CPU possède deux registres de blocs de données, les registres DB et DI,
permettant d‘ouvrir deux blocs de données simultanément.
Ce sujet est traité dans un cours de programmation avancé.
Aperçu Les types de données définissent les propriétés des données, c'est-à-dire la
représentation du contenu d'un ou plusieurs opérandes interdépendants et les
plages de valeurs admissibles.
Le type de données détermine également les opérations possibles.
Types de données Les types de données élémentaires sont définis selon CEI 1131-3. Le type
élémentaires de données définit de manière univoque l‘espace mémoire nécessaire
correspondant. C‘est ainsi, par exemple, que le type de données Mot (Word)
occupe 16 bits dans la mémoire utilisateur.
Les types de données élémentaires ont toujours une longueur inférieure ou
égale à 32 bits, ils peuvent être chargés entièrement dans les accumulateurs et
traités par des opérations STEP 7 élémentaires.
Types de données Les types de données complexes peuvent être utilisés uniquement en liaison
complexes avec des variables déclarées dans des blocs de données globaux. Les types de
données complexes ne peuvent pas être chargés entièrement dans
l‘accumulateur avec des opérations de chargement. Pour traiter des types de
données complexes, on dispose de blocs standard dans la bibliothèque "CEI".
Types de données Un type de données utilisateur (UDT) peut être utilisé pour des blocs de
utilisateur données ou comme type de donnée dans une table de déclaration des
variables.
Les UDT sont créés avec l‘éditeur de bloc de données.
La structure d'un UDT peut contenir des groupes de types de données
élémentaires et/ou complexes.
BOOL 1 1 ou 0
BYTE 8 B#16#A6
WORD 16 W#16#FADA
DWORD 32 DW#16#CAC40EDF
CHAR 8 'w'
S5TIME 16 S5T#5s_200ms
INT 16 123
DINT 32 65539 ou L#-5
REAL 32 1.0 ou 34.5E-12
TIME 32 T#2D_1H_3M_45S_12MS
DATE 16 D#2002-06-20
TIME_OF_DAY 32 TOD#12:23:45.12
BOOL, BYTE, WORD Les variables du type de données BOOL représentent un bit, les variables avec
DWORD, CHAR des types de données BYTE, WORD, DWORD sont des séquences binaires de 8,
16 ou 32 bits. Les bits ne sont pas évalués individuellement dans ces types de
données.
Les nombres BCD et la valeur de comptage, ainsi que le type de données CHAR,
qui représente un caractère dans la représentation ASCII, sont des formes
particulières de ces types de données.
S5TIME Les variables du type de données S5TIME sont utilisées pour définir les valeurs de
temps dans les temporisations. La durée est indiquée en heures, minutes,
secondes ou millisecondes. Les valeurs de temps peuvent être entrées avec un
caractère de soulignement (1h_4m) ou sans (1h4m).
Les fonctions FC33 et FC40 de la bibliothèque "Library Standard" convertissent les
formats S5TIME en TIME ou TIME en S5TIME.
INT, DINT, REAL Les variables avec ces types de données représentent des nombres avec lesquels
il est possible d‘effectuer des opérations arithmétiques.
TIME Une variable du type de données TIME (durée) occupe un double mot. Cette
variable est utilisée par exemple pour définir des valeurs de temps dans les
temporisations CEI. Le contenu d‘une variable est interprété comme un nombre
DINT en millisecondes et peut ainsi être positif ou négatif (par exemple :
T#1s=L#1 000, T#24d20h31m23s647ms = L#214748647).
DATE Une variable du type de données DATE (date) est stockée dans un mot comme un
nombre entier sans signe. Le contenu de la variable correspond au nombre de
jours écoulés depuis le 01.01.1990 (par exemple : D#1999-06-24 = W#16#0D85).
Création d'un DB Vous pouvez insérer un nouveau bloc de données dans le SIMATIC Manager,
comme indiqué sur la figure, en sélectionnant tout d'abord le dossier Blocs dans
le programme S7 puis Insertion -> Bloc S7 -> Bloc de données.
Il est également possible de créer un nouveau bloc de données dans l'Editeur
CONT/LIST/LOG via les commandes de menu suivantes :
Fichier -> Nouveau -> Définir projet et nom du projet -> Sélectionner le dossier
Blocs du programme S7 -> Nom de l'objet : DB 99
DB global Un bloc de données global est destiné à stocker les données globales, c'est-à-
dire les données générales auxquelles doit pouvoir accéder tout bloc de code
(OB, FC, FB).
Un bloc de données global doit être édité par l'utilisateur lui-même en déclarant
dans le bloc de données les variables requises pour le stockage des données.
DB d'instance Un bloc de données d'instance est utilisé comme "mémoire" pour un bloc
fonctionnel (FB). Les paramètres et les variables statiques d'un bloc fonctionnel
sont gérés dans le DB d'instance de ce bloc fonctionnel.
En règle générale, les DB d'instance ne sont pas édités par l'utilisateur, mais
générés par l‘éditeur (voir chapitre Fonctions et blocs fonctionnels).
DB de type Un bloc de données peut aussi être généré par l‘éditeur en fonction d'un type de
données défini par l'utilisateur, appelé UDT (User Defined dataType). L'UDT est
un modèle que l'utilisateur doit éditer, exactement comme un bloc de données.
L'UDT peut également servir de modèle pour la création d'autres blocs de
données et/ou d'une manière générale, pour la déclaration de variables et de
paramètres de blocs.
Déclaration Les blocs de données sont édités dans la table de déclaration. L‘utilisateur
(entrée des variables) y déclare les variables requises pour mémoriser les données.
Charger Tout comme les blocs de code, les blocs de données doivent être chargés dans
la CPU.
Vue des données Pour visualiser les valeurs courantes dans le bloc de données (valeurs des
variables dans la CPU), passez en ligne à la “Vue des données". Les “lunettes"
dans la barre d‘outils permettent de visualiser le bloc de données.
Initialiser le DB Lorsqu‘un bloc de données est initialisé, les valeurs effectives des variables
sont remplacées par les valeurs initiales. Cette opération d‘initialisation des
valeurs peut être nécessaire lorsque des valeurs initiales modifiées doivent être
validées en tant que valeurs effectives.
8 bits
7 0
Octet de donnée 0 DBB 0
Octet de donnée 1 DBW 0
Octet de donnée 2
DBD 0
Octet de donnée 3
DBX 4.1
DBD 8188
DBW 8190
Octet de donnée DBB 8191
8191
Généralités L‘adressage des éléments de données d'un bloc de données se fait octet par
octet, comme pour les mémentos.
Vous pouvez charger et transférer des octets de données, des mots de données
ou des doubles mots de données. Dans le cas des mots de données, entrez la
première adresse d'octet pour l‘opération (par exemple L DBW 2), 2 octets sont
ensuite chargés à partir de cette adresse. Dans le cas des doubles mots, 4
octets sont chargés à partir de l‘adresse d'octet indiquée.
AUF DB 99
8.0 Poids[2] REAL ou L DB99.DBD8 ou L "Valeurs".Poids[2]
L DBD 8
Accès courant L'accès courant à un bloc de données (en environnement S5) n‘est possible
qu'après ouverture effective du bloc. L'accès qui peut être absolu ou
symbolique, se fait avec l'instruction AUF DB 99 ou AUF "Valeurs"
(voir exemple). Le bloc de données préalablement ouvert, est automatiquement
refermé. Il est ensuite possible d'accéder individuellement aux éléments de
données par bits (DBX...), octets (DBB...), mots (DBW...) ou doubles mots
(DBD...) sans être obligé de spécifier le bloc de données.
Inconvénients :
• En cas d'accès aux éléments de données, il faut s'assurer que le bloc de
données ouvert est le bon.
• Seul un accès absolu est possible, et par conséquent c'est le programmeur
qui doit “retrouver" dans le bloc de données la valeur requise. Supposons
que DBW3 soit chargé dans l'exemple ci-dessus, la valeur chargée ne
serait dans ce cas ni le Nombre ni le Poids[1], mais une valeur incorrecte.
• Les accès absolus diminuent considérablement les possibilités de correction
et la lisibilité du programme.
Accès entièrement L'accès entièrement qualifié comprend à la fois la lecture du bloc de données et
qualifié ... la fermeture du bloc de données précédemment ouvert (!). Dans ce cas, l'accès
peut être absolu ou symbolique :
...symbolique Un accès symbolique à une variable dans un bloc de données n'est possible
que sous forme entièrement qualifiée et symbolique. L'éditeur offre la possibilité
théorique de "mélanger" des adresses absolues et symboliques, mais passe en
mode entièrement symbolique dès validation de l'entrée.
Fonction existante : Les pièces transportées en mode automatique sont comptées (avec un compteur
S5 Z18), dès qu'elles franchissent le poste de contrôle final ou la barrière
photoélectrique.
Énoncé : N'utilisez plus le compteur S5 Z18 pour le comptage des pièces, mais effectuez le
comptage par addition avec la variable “DB_pieces“.Nombre_de_pieces_produit
(DB 18.DBW 0).
Pour cela, il faut tout d‘abord éditer le DB 18.
Marche à suivre : 1. Modifiez le DB 18 (voir figure) en insérant les variables et chargez-le dans la
CPU.
2. Attribuez le nom symbolique "DB_pieces" au DB 18 dans la table de
mnémoniques globale.
Nombre réel
AW 12 / AW 6
Nombre de consigne
0 8 1 5
EW 4 / EW 2
LED de la maquette
REEL=CONSIGNE
A 20.4 / A 8.4
Fonction existante • Les pièces transportées en mode automatique (avec le compteur S5 Z 18)
dans FC 18 : sont comptées dès qu'elles franchissent la barrière photoélectrique, front
0->1.
• Le nombre de pièces transportées (nombre réel de pièces) est affiché sur
l‘afficheur numérique BCD.
• Le compteur est remis à zéro à l'arrêt de l'installation (A 8.1 / 4.1 = ´0´).
Marche à suivre : 1. Insérez le bloc d'organisation OB 121 dans votre programme et chargez-le
dans la CPU. L'OB 121 ne nécessite aucun programme. Le chargement de
l'OB 121 "vide" empêche la mise à l‘arrêt de la CPU lors du réglage du
nombre de pièces de consigne sur les roues codeuses par suite des aléas
de commutation générant des valeurs non BCD.
2. Supprimez la FC 18 précédente et programmez une nouvelle FC 18
en vous conformant à la structure décrite ci-dessus.
3. Modifiez la FC 16 et la FC 17 pour la commande du moteur du convoyeur et
des voyants lumineux.
Types de données Les types de données complexes (tableaux et structures) sont créés en
complexes regroupant des types de données élémentaires ou complexes.
L‘utilisateur a ainsi la possibilité de créer des types de données adaptés à son
besoin avec lesquels il peut structurer et traiter par voie symbolique de grandes
quantités de données.
Les types de données complexes ne peuvent pas être traités directement dans
leur intégralité (taille supérieure à 32 bits) avec des opérations STEP7, le
traitement ne peut se faire que composante par composante.
Les types de données complexes sont prédéfinis, la longueur du type de données
DATE_AND_TIME étant égale à 64 bits. La longueur des types de données
ARRAY (tableau), STRUCT (structure) et STRING (chaîne de caractères) est
définie par l‘utilisateur.
Les variables contenant des types de données complexes ne peuvent être
déclarées qu‘à l‘intérieur de blocs de données globaux et sous forme de
paramètres ou comme variables locales de blocs de code.
Type de données Les types de données utilisateur sont une structure définie par l‘utilisateur.
utilisateur Mémorisée dans des blocs UDT (UDT1 à UDT65535), cette structure peut être
utilisée comme modèle pour le type de données d‘une autre variable.
Cette solution évite des opérations de frappe superflues, lors de la saisie d'un
bloc de données, lorsqu‘une même structure est utilisée plusieurs fois.
Exemple : vous avez besoin de la même structure 10 fois dans un bloc de
données. Définissez d‘abord la structure puis enregistrez celle-ci, par exemple en
tant que UDT 1. Dans le DB, définissez une variable “Entrainement" sous forme
de tableau avec 10 éléments du type UDT1 :
Entrainement : array[1..10]
UDT 1
Vous avez ainsi créé 10 zones de données avec la structure définie dans l‘UDT 1
sans avoir à les resaisir.
Définir un tableau On utilise "ARRAY[n..m]" comme mot-clé d‘un tableau. Le premier élément (n)
dans le DB et le dernier élément (m) sont indiqués entre crochets. Dans notre exemple
[1..10] signifie 10 éléments, le premier élément étant adressé avec l‘indice [1] et
le dernier avec l‘indice [10]. Au lieu de [1..10], on peut tout autant définir [0..9]
par exemple, ceci a seulement une incidence sur l‘accès aux éléments.
Nota Pour créer un bloc de données vide, définissez un tableau avec le type de
données souhaité.
Vue des données Pour voir quelles sont les valeurs enregistrées dans les différents éléments,
passez à un autre mode d‘affichage avec l'option de menu Affichage -> " Vue
des données“. L‘écran „Vue des données" présente les valeurs enregistrées à
cet instant dans la colonne “Valeur en cours".
Définir la structure On utilise "STRUCT" comme mot-clé d‘une structure. La fin de la structure est
dans le DB désignée par "END_STRUCT". On définit un nom pour la structure (dans
l‘exemple : "Données_moteur").
À tout de suite...