Schneider Electric PL7 SDKC, Modes opératoires Mode d'emploi

Ajouter à Mes manuels
118 Des pages
Schneider Electric PL7 SDKC, Modes opératoires Mode d'emploi | Fixfr
Section
p. 3
Page
Manuel modes opératoires SDKC p.121
___________________________________________________________________________
1
FRANÇAIS
SDKC Operating Modes Manual
ENGLISH
Contents
Sommaire
Page
Manuel modes opératoires SDKC p.121
___________________________________________________________________________
119
FRANÇAIS
FRANÇAIS
Chapitre
Sommaire
Page
FRANÇAIS
Chapitre
___________________________________________________________________________
120
Sommaire
Page
1 Présentation
127
1.1
Introduction
127
1.2
Installation
1.2-1 La machine cible
1.2-2 Contenu du produit PL7 SDKC
1.2-3 La procédure d'installation
128
128
129
129
2 Méthodologie de création d'une EF et utilisation dans PL7
131
2.1
Création
2.1-1 La famille d'EF
2.1-2 La Classe d'EF
2.1-3 L'EF
133
133
133
134
2.2
Gestion automatique de versions
135
2.3
Génération de la famille en debug
135
2.4
Installation/Désinstallation en bibliothèque PL7 pour la mise
au point
135
2.5
Création d'une application utilisant les EF créées
136
2.6
Test de chaque EF dans PL7
136
2.7
Génération de la famille en release
136
3 Mise en œuvre de l'EF avec PL7SDKC
3.1
137
Création
137
3.1-1 La famille d'EF
137
3.1-2 La Classe d'EF
139
3.1-3 L'EF
141
___________________________________________________________________________
121
FRANÇAIS
Chapitre
Sommaire
Chapitre
3.2
Génération de la famille en debug
3.3
Génération de la famille en release
147
3.4
Installation/Désinstallation dans la bibliothèque PL7
148
4 Test de l'EF avec l'outil de mise au point
FRANÇAIS
Page
146
4.1
4.2
4.3
Accès à la mise au point des EF
4.1-1 Choix de la famille de l'EF à tester
4.1-2 Ouverture de l'écran de mise au point des EF
Présentation de l'outil
Mise au point des EF
4.3-1 Pose et dépose de points d'arrêt
4.3-2 Mixer code C et langage assembleur
4.3-3 Les registres
4.3-4 Les variables locales
5 Fonctionnalités complémentaires de SDKC
149
149
149
149
151
152
152
153
153
154
157
5.1
Paramétrage de l'outil
157
5.2
Modifier une famille
158
5.3
Importer/Exporter
5.3-1 Classe
5.3-2 Source C
159
159
160
5.4
Archiver/Restaurer une famille
5.4-1 Archiver
5.4-2 Restaurer
5.4-3 Restaurer à partir de
162
162
163
164
5.5 Imprimer
164
___________________________________________________________________________
122
Sommaire
Page
6 Le code de l'EF
167
6.1
Règles de mise en œuvre des EF
6.1-1 Langage C
6.1-2 Gestion de versions de famille et d'EF
6.1-3 Gestion de la taille de la pile
6.1-4 Utilisation des nombres flottants
167
167
171
172
172
6.2
Liste des mots réservés
174
7 Fonctions système
177
value = rd_sysbit ( sysbit_range , status )
180
status = wr_sysbit ( sysbit_range , value )
181
value = rd_sysword ( sysword_range , status )
182
status = wr_sysword ( sysword_range , value )
183
value = rd_bit_attrib ( address )
184
value = rd_bits ( address , number , status )
186
status = wr_bits ( address , number , value , type )
187
value = rd_16bits ( address )
189
wr_16bits ( address , value )
190
value = rd_1bit ( address )
191
wr_1bit ( address , value )
192
result = phy_ptr_init ( sel_off )
193
___________________________________________________________________________
123
FRANÇAIS
Chapitre
Sommaire
FRANÇAIS
Chapitre
status = date_and_time ( date_ptr )
Page
194
value = cnt_100ms ( void )
196
value = cnt_10ms ( void )
197
info = proc_type ( void )
198
info = proc_indic ( void )
199
Res = ADD ( a, b )
200
Res = SUB ( a, b )
201
Res = MUL ( a, b )
202
Res = DIV ( a, b )
203
Res = EQU ( a, b )
204
Res = SUP ( a, b )
205
Res = INF ( a, b )
206
Res = ABS ( a )
207
Res = CHS ( a )
208
Res = SQRT ( a )
209
Res = FTOL ( a )
210
Res = LTOF ( a )
211
Res = EXP ( a )
212
___________________________________________________________________________
124
Sommaire
Page
213
Res = SIN ( a )
214
Res = COS ( a )
215
Res = TAN ( a )
216
Res = ASIN ( a )
217
Res = ACOS ( a )
218
Res = ATAN ( a )
219
8 Fonctions utilitaires
221
value = GET_FLOATPL7 ( fvalPl7 )
222
fvalPl7 = FLOAT_TOPL7 ( f )
223
value = FLOAT_TO_DBG ( f )
224
FLOAT_SETVALUE ( selecteur, offset, valeur )
225
WORD_SETVALUE ( selecteur, offset, valeur )
226
DWORD_SETVALUE ( selecteur, offset, valeur )
227
ptr = GET_ADDR ( selecteur, offset )
228
9 Annexes
9.1
229
Exemple
229
9.1-1 Définition de l'EF
229
9.1-2 Génération d'une disquette et installation de la famille
234
___________________________________________________________________________
125
FRANÇAIS
Chapitre
Res = LN ( a )
Sommaire
Chapitre
9.2
Page
234
En cas de problème
235
FRANÇAIS
9.3
Equivalences clavier
___________________________________________________________________________
126
Présentation
Chapitre
1
1 Présentation
1.1
Introduction
Une EF (Elementary Fonction) est une fonction, développée pour remplir une certaine
tâche dans le programme utilisateur.
Faisant partie, à terme, de la bibliothèque de PL7, au même titre que les fonctions
constructeur, elle peut être utilisée d'une manière identique :
• accessibilité dans tous les langages
• visualisation par l'outil Bibliothèque de PL7
• classement en familles/fonctions
• la gestion d’une famille d’EF (création, modification)
• le développement de chaque EF en langage “ C ”
• la mise au point individuelle d’une EF dans l’automate cible (TSX 37 ou TSX 57)
• la génération d’une forme installable contenant la nouvelle famille d'EF à installer
dans la bibliothèque de PL7, ainsi que sa procédure d’installation sur un poste
utilisateur.
La possibilité d'exécuter une EF sur un automate donné dépend de la version de
l'automate cible choisi lors de la génération de cette EF (cf. § 2.1-3).
Les EF créées et destinées à des automates en version ≥ 3.0 (avec ou sans
coprocesseur), peuvent comporter du calcul flottant.
L’utilisateur d’un tel produit est un développeur et à ce titre il doit obligatoirement
connaître :
• le langage “ C ” pour le développement,
• PL7 (Micro, Junior, Pro) et ses langages pour la mise au point.
Grâce à la clé d'accès (*) livrée avec le kit, il est possible de gérer 5 familles (jusqu'à
25500 fonctions par famille) sous la forme de 1 code différent par famille. Ces
codes sont attribués par le constructeur et uniques, ce qui assure l'exclusivité des
numéros des familles.
___________________________________________________________________________
127
FRANÇAIS
Le kit de développement en langage "C" (option de PL7) a pour objectif la mise en
oeuvre de tout le cycle de développement d'une famille d'EF :
Présentation
Le présent manuel se décompose de la façon suivante :
• Chapitre 1 "Présentation"
• Chapitre 2 "Méthodologie de création d'une EF et utilisation dans PL7"
• Chapitre 3 "Gestion de l'EF avec PL7SDKC"
• Chapitre 4 "Test de l'EF avec DBGEF"
• Chapitre 5 "Fonctionnalités complémentaires du SDK C"
• Chapitre 6 "Le code de l'EF"
• Chapitre 7 "Fonctions système"
• Chapitre 8 "Fonctions utilitaires"
FRANÇAIS
• Chapitre 9 "Annexes"
1.2
Installation
1.2-1 La machine cible
Le SDK C fonctionne sur :
• micro-ordinateur IBM PC ou compatible
La configuration minimale doit être la suivante :
• microprocesseur 486 DX 33
• 32 Mo de mémoire RAM
• 20 Mo de disponible sur disque
• moniteur VGA
• un port série COM disponible (COM1 à COM4) pour connexion à l’automate
• système d’exploitation Win95, NT
• PL7 Micro, Junior ou Pro V3.0 minimum
La configuration de la machine type est la suivante :
• microprocesseur Pentium 133 Mhz
• 48 Mo de mémoire RAM
___________________________________________________________________________
128
Présentation
1.2-2 Contenu du produit PL7 SDKC
Le produit que vous venez de recevoir est constitué :
• des disquettes d'installation (voir la procédure sur la page suivante)
• de la présente documentation
1.2-3 La procédure d'installation
Le produit PL7 SDKC est à installer sur un poste de développement, contenant déjà
PL7 Micro, PL7 Junior ou PL7 Pro .
La disquette étant insérée dans le lecteur, les étapes à réaliser pour procéder à
l'installation sont les suivantes :
• Ouvrir l'explorateur Windows, sélectionner le lecteur (A) puis double cliquer sur
setup.exe ou dans Exécuter du Menu Démarrer, taper a:\setup puis cliquer sur OK.
• Enregistrer votre nom et votre organisation
• Choisir la langue d'installation
• Entrer le n° (clé d'accès de votre produit) inscrit sur la boite de livraison (*). Cette
clé permet d'accéder aux cinq codes famille qui sont attribués au produit. L'installation ne peut être poursuivie, tant que la saisie de cette clé d'accès n'est pas correcte.
(*) Il est vivement conseillé de noter le n° de la clé d'accès à l'emplacement prévu
à cet effet sur la page suivante.
• Une fois l'installation terminée, pour accéder à PL7 SDKC, il suffit de double cliquer
sur l'icône présente dans le dossier MODICON-TELEMECANIQUE.
Attention : Suite à une mise à jour ou à une nouvelle installation de PL7 Micro, PL7
Junior ou PL7 Pro, il est obligatoire de procéder à une nouvelle installation de PL7
SDKC.
___________________________________________________________________________
129
FRANÇAIS
• du pack logiciel Visual C++ 5.0 Initiation (fourni pour des raisons de licence vis à vis
de MICROSOFT). Ce logiciel n'est pas à installer sur le poste de développement. Il
fournit les outils de génération et d'édition de liens utilisés pour compiler les EF. Ces
outils sont déjà incorporés dans les disquettes d'installation du produit PL7 SDKC.
Présentation
FRANÇAIS
Cadre réservé à l'inscription des numéros des clés d'accès de vos produits
1
........................................................................
2
........................................................................
3
........................................................................
4
........................................................................
5
........................................................................
6
........................................................................
7
........................................................................
8
........................................................................
9
........................................................................
___________________________________________________________________________
130
Méthodologie de création d'une EF et utilisation
dans PL7
Chapitre
2
2 Méthodologie de création d'une EF et utilisation dans PL7
Le croquis ci-dessous donne un aperçu du cycle de développement.
erreur
▼
▼
▼
Développer
la famille
Installer la famille sur
poste de développement
▼
▼
▼
pas d'erreur
Pl7 Micro/Junior/Pro
Mise au point
d'une EF
▼
Pl7 Micro/Junior/Pro
▼
Poste utilisateur
Famille d'EF
+
Setup.exe
Bibliotèque
d'EF
Les sous-chapitres suivants ont pour but de présenter les différents écrans qui vont
permettre de suivre ce cycle de développement.
___________________________________________________________________________
131
FRANÇAIS
Générer la famille
en release
erreur
▼
Poste de développement
PL7 SDKC
Générer la famille
en Debug
pas d'erreur
Méthodologie de création d'une EF et utilisation dans PL7
FRANÇAIS
Un clic sur l'icône PL7 SDKC permet d'ouvrir l'écran d'accueil suivant :
La partie gauche de cet écran, vide lors de la première utilisation du kit, s'enrichira des
noms des familles d'EF, au fur et à mesure de leur création (Courantes et/ou Archives).
Une famille sera composée d'une ou plusieurs classes, ces classes étant elles mêmes
composées d'une ou plusieurs EF comme le montre le schéma ci-dessous :
Nom de famille
Classe1
EF1
EF2
Classe2
EF1
EF2
EF3
Une famille est composée au maximum de 100 Classes et de 255 EF par classe. La
classe est une entité qui ne sert que pendant le développement de la famille et qui ne
sera pas vue dans l'outil Bibliothèque de PL7.
La version, renseignée lors de la description de la famille, est celle qui sera vue dans
l'outil bibliothèque de PL7.
___________________________________________________________________________
132
Méthodologie de création d'une EF et utilisation dans PL7
2.1
Création
2.1-1 La famille d'EF
En choisissant la fonction Créer du menu Famille, il est possible de créer une famille.
Cinq familles peuvent être créées. Elles correspondent aux cinq codes délivrés par le
produit.
- L'onglet Fiche permet d'enregistrer des
renseignements
complémentaires sur
la famille.
2.1-2 La Classe d'EF
Une fois la famille validée, en choisissant la fonction Créer Classe du menu Services,
il est possible de créer une des classes autorisées par famille (1 à 100).
- L'onglet Description
contient les caractéristiques de la classe.
- L'onglet Class.h permet de définir des
constantes, des types ou des structures communs à toutes les EF de la classe
___________________________________________________________________________
133
FRANÇAIS
- L'onglet Description
contient les caractéristiques de la famille.
Méthodologie de création d'une EF et utilisation dans PL7
2.1-3 L'EF
FRANÇAIS
En fin de création, le nom de la classe apparaît dans la partie gauche de l'écran, il est
alors possible de créer une EF en sélectionnant la fonction Créer EF du menu Services.
255 EF peuvent être créées par classe (1 à 255).
• L'onglet Description contient les caractéristiques de l'EF.
La possibilité d'exécuter une EF sur un automate donné dépend de la version de
l'automate cible choisi dans cet onglet (voir tableau ci-après ).
Choix lors de la génération
Cible
Automate V< 3.0
Version < 3.0 V≥ 3.0 (sans coprocesseur)
Oui
V≥ 3.0 (avec coprocesseur)
Non
Non
Automate V≥ 3.0 Oui (si pas appelé
(sans coprocesseur) dans un DFB)
Oui
Non
Automate V≥ 3.0 Oui (si pas appelé
(avec coprocesseur) dans un DFB)
Oui
Oui (Optimisé)
Les EF créées et destinées à des automates en version ≥ 3.0 (avec ou sans
coprocesseur), peuvent comporter du calcul flottant.
• L'onglet Interface permet de saisir les paramètres d'appel de l'EF.
• L'onglet Source .C permet d'écrire le code C de l'EF.
• L'onglet Source .H permet de définir des constantes, des types ou des structures
spécifiques à l'EF.
___________________________________________________________________________
134
Méthodologie de création d'une EF et utilisation dans PL7
2.2
Gestion automatique de versions
L'option par défaut (recommandée) est l'incrémentation automatique.
2.3
Génération de la famille en debug
La génération s'effectue sur la famille entière.
Lorsque la famille est terminée en développement, il est préférable dans un premier
temps, de la générer en sélectionnant la fonction Générer Debug du menu Famille.
Ceci rendant possible par la suite le test d'une des EF de la famille.
Générer signifie compiler puis faire l'édition de liens avec les options de debug de
chaque EF de cette famille.
En fin de génération, un fichier récapitulatif des erreurs et des warnings (resul.log) est
édité (cf. §3.1-3) , il est nécessaire de revenir aux écrans de source .C ou .H de(s) EF
qui posent éventuellement problème.
2.4
Installation/Désinstallation en bibliothèque PL7 pour la mise au
point
Une fois la famille générée sans erreur (de compilation ou d'édition de liens), il est
possible de lancer la fonction Installer du menu Famille pour que celle-ci enrichisse
la bibliothèque de PL7.
___________________________________________________________________________
135
FRANÇAIS
En choisissant la fonction Option de génération du menu Service, la boite ci-après
s'ouvre permettant le choix dans le mode d'incrémentation des versions des familles
et des classes.
Méthodologie de création d'une EF et utilisation dans PL7
Il est possible de désinstaller, de la bibliothèque PL7, la famille en cours d'édition. Pour
cela, lancer la fonction Desinstaller du menu Famille.
Cette installation/désinstallation n'est possible que si PL7 (Micro, Junior ou Pro)
n'est pas en service (actifs en mémoire).
2.5
Création d'une application utilisant les EF créées
FRANÇAIS
L'installation de la famille étant terminée, il faut lancer PL7 (Micro, Junior ou Pro).
Afin de tester le(s) nouvelle(s) EF, il faut alors développer une application faisant appel
à celle(s)-ci et transférer ensuite cette application dans l'automate.
Il est conseillé, dans cette application ayant pour mission le test de comportement, de
n'inclure qu'un exemplaire de chaque EF à tester.
2.6
Test de chaque EF dans PL7
Pour tester l'EF dans l'application, il faut choisir Mise au point EF du menu Outils de
PL7 (Micro, Junior ou Pro).
Il est alors possible de poser des points d'arrêt, de faire du pas à pas, de visualiser les
variables locales ou les registres, ...
SI les tests ne sont pas concluants, il faut revenir dans l'environnement de développement de(s) EF "pour revoir sa copie" et recommencer le cycle précédemment décrit.
2.7
Génération de la famille en release
L'ensemble des tests de toutes les EF de la famille s'étant révélé concluant, il est donc
possible de générer cette famille, pour exploitation, en choisissant la fonction Générer
Release du menu Famille.
Cette action va permettre de créer un support d'installation pour la famille choisie
(disquette, répertoire de disque dur local ou en réseau, ...). Ce support pourra alors être
distribué.
___________________________________________________________________________
136
Mise en œuvre de l'EF avec
PL7SDKC
Chapitre
3
3 Mise en œuvre de l'EF avec PL7SDKC
3.1
Création
3.1-1 La famille d'EF
Saisie du nom de la famille (24 caractères)
Permet de gérer les
évolutions de la famille
par la saisie d'un nombre du type VV.RR (*)
FRANÇAIS
Créer ouvre en saisie
l'espace Famille défini
par l'onglet "Description"
Un numéro
de famille
sera automatiquement attribué (libre
parmi les 5
possibles)
En mode visualisation
famille, permet de faire
apparaître, dans la liste,
les familles créées et/
ou les familles archivées (cf. § 5.4)
Nombre entier
commençant à 1.
Celui-ci permet de
gérer les évolutions qui rendraient incompatibles les textes
(fiche famille et
commentaires)
(*) La valeur de VV (version) ou de RR (release) doit être comprise entre 0 et 99 bornes
incluses.
___________________________________________________________________________
137
Mise en œuvre de l'EF avec PL7SDKC
FRANÇAIS
Un clic sur l'onglet "Fiche" ouvre l'espace suivant :
La famille est validée par ce bouton, seulement si tous les champs de l'onglet "Description" sont correctement renseignés
Cet espace ouvert à la saisie (facultative), sert à noter les informations principales liées
à la famille.
Cette fiche permet, par exemple, de saisir les informations concernant l'historique des
versions de la famille .
Cette fiche n'apparaît dans PL7, qu'en cas de conflit de versions entre une famille en
bibliothèque et la même famille en application.
Il est possible de supprimer une famille en utilisant la commande Supprimer du menu
Services. En supprimant une famille on supprime aussi son contenu (classe(s) et
EF(s)).
___________________________________________________________________________
138
Mise en œuvre de l'EF avec PL7SDKC
3.1-2 La Classe d'EF
Rappel des paramètres
définis pour la famille
(en lecture seulement)
FRANÇAIS
Créer Classe ouvre en
saisie les champs
Classe et enrichit l'espace défini par l'onglet
"Description"
Permet de saisir le nom de la
classe en cours de création (16
caractères alphanumériques + le
caractère underscore)
Nombre compris entre 1 et 100 bornes
incluses et servant à
gérer l'unicité de la
classe développée. Il
est automatiquement
renseigné
Permet de gérer
les évolutions de
la classe par la
saisie d'un nombre au format
VV.RR (*)
(*) La valeur de VV (version) ou de RR (release) doit être comprise entre 0 et 99, bornes
incluses.
Les classes appartenant à la même famille doivent avoir obligatoirement des noms et
des codes différents.
Il est possible de sortir de l'onglet de description que si tous les champs sont
renseignés. Cette action valide les paramètres saisis.
Il est possible de supprimer une classe en utilisant la commande Supprimer du menu
Services. En supprimant une classe on supprime aussi le(s) EF(s) qui la composent).
___________________________________________________________________________
139
Mise en œuvre de l'EF avec PL7SDKC
Les fonctions "Importer classe" et "Exporter classe" du menu Services vont permettre
d'importer une classe venant d'une autre famille, d'exporter une classe vers une autre
famille (cf. § 5.3).
Un clic sur l'onglet "Class.h" ouvre l'espace suivant :
FRANÇAIS
Bouton flip-flop (Taille normale/ Pleine fenêtre)
réduit/agrandit la fenêtre de saisie
Cet espace permet de saisir le code source du fichier interface ( .h) commun à toutes
les EF de la classe. Ce fichier permet de créer par exemple des types spécifiques ou
des constantes qui seront réutilisés dans les sources C de tous les EF de la classe.
Ce fichier doit avoir une taille ≤ à 200 Koctets
___________________________________________________________________________
140
Mise en œuvre de l'EF avec PL7SDKC
3.1-3 L'EF
Nombre compris entre 1 et 255 bornes incluses et servant à gérer l'unicité de l'EF développée. Il est renseigné automatiquement
Rappel des
paramètres
définis pour
la famille et
pour
la
classe (en
lecture seulement)
Le type d EF
est une procédure ou
une fonction
La taille de
l'EF générée
Permet de saisir le nom de
l'EF en cours
de création (16
caractères alphanumériques
+ le caractère
underscore)
Permet de
saisir un
texte commentaire de
l'EF contenant
au
maximum
80 caractères
Permet de définir la taille de
la pile. Elle vaut 512 octets
par défaut et permet de stocker les paramètres de l'EF,
les variables locales, les paramètres et variables des
fonctions qu'elle appelle (cf.
§ 6.1-3)
Permet de
choisir la version
de
l'automate cible pour lequel cettte
EF est développée
Les EF développées et installées en bibliothèque doivent avoir obligatoirement des
noms différents. Attention à ne pas utiliser comme noms les mots clés de PL7(cf. § 6.2).
Il n'est possible de sortir de l'onglet de description que si tous les champs sont
renseignés. Cette action valide les paramètres saisis.
Il est possible de supprimer une EF en utilisant la commande Supprimer du menu
Services.
___________________________________________________________________________
141
FRANÇAIS
Créer EF ouvre en saisie les champs EF et
enrichit l'espace défini
par l'onglet "Description"
Mise en œuvre de l'EF avec PL7SDKC
Un clic sur l'onglet "Interface" ouvre l'espace suivant, comportant trois zones qui
permettent de saisir les paramètres formels de l'EF.
Ces paramètres formels sont ceux d'entrées, de sorties, d'entrées/sorties, de retour de
la fonction (dans le cas d'une fonction) .
Ces paramètres d’appel de la fonction sont répartis dans trois champs :
• le nom qui contient au maximum quatre caractères (sans espaces),
• le type du paramètre : Entrées, Sorties et Entrée/Sortie. Le choix est à faire parmi :
BOOL, EBOOL, WORD, DWORD, STRING, REAL, AR_D, AR_R, AR_W et AR_X
(pour revoir la signification de tous ces types, se reporter au § 6.1 et à la documentation PL7).
• le commentaire qui contient au maximum 80 caractères.
FRANÇAIS
Exemple :
Rappelle le nom de la classe
et le nom de l'EF concernées
Boutons permettant de déplacer
l'ordre des paramètres dans la
grille sélectionnée
Au niveau des paramètres formels, il y a au maximum 7 entrées, 7 sorties et 17 entrées/
sorties.
Il est possible de détruire une ou plusieurs lignes de paramètres, pour cela il faut
sélectionner la ligne en cliquant sur le numéro correspondant puis taper Ctrl+x au
clavier (Ctrl+v recolle ce qui a été enlevé).
Pour la correspondance entre les types PL7 définis dans cet onglet et les types C
présents dans l'entête de la fonction, se reporter au tableau du § 6.1.
___________________________________________________________________________
142
Mise en œuvre de l'EF avec PL7SDKC
Un clic sur l'onglet "Source .C" ouvre l'espace suivant :
Ces boutons permettent d'importer ou d'exporter un fichier C
FRANÇAIS
Bouton flip-flop (Taille normale/ Pleine fenêtre) réduit/
agrandit la fenêtre de saisie
Cet onglet donne accès à l’édition de code C. L’utilisateur pourra utiliser son propre
éditeur si il le désire ou si la taille du fichier C est supérieure à 200 K, via l'export et
l'import.
Comme le font les outils standards du marché, des commentaires qui contiennent des
mots clés spécifiques sont générés.
Quand PL7 SDKC crée l’en-tête de la fonction pour la première fois , les mots clés
PL7SDK_BEGIN_FUNCTION_NAME et PL7SDK_END_FUNCTION_NAME sont
placés automatiquement.
Quand on sort de cet onglet, ou quand on modifie l'interface dans l'onglet précédent,
PL7SDKC génère automatiquement cet en-tête, ce qui assure la cohérence entre
l’interface déclarée et l’interface dans le code.
Par le menu Edition, les fonctionnalités courantes sont offertes par l’EditText (couper,
copier, coller, rechercher, remplacer).
D'autres fonctionnalités sont disponibles comme :
• Sélection sur double click
• Affichage du numéro de ligne, dans la Status Bar, correspondant à la position actuelle
du curseur.
___________________________________________________________________________
143
Mise en œuvre de l'EF avec PL7SDKC
FRANÇAIS
Pour informer l’utilisateur des erreurs qui résultent de la compilation des sources C , la
ligne du code source comportant l’erreur est signalée.
Un fichier donnant le résultat de la compilation est généré. Il est accessible par la
commande Voir résultats génération du menu Famille et renseigne sur les éventuelles
erreurs.
La définition de l’interface de l’EF génère automatiquement le prototype de cette
dernière dans le FICHIER MAINxxyy.C où xx est le code classe et yy le code EF.
L’utilisateur peut exporter le source si il le désire, le travailler, puis l’importer de nouveau
.
Il n’y a pas de contrôle à postériori sur les éventuelles modifications manuelles de
l’interface de la fonction principale de l’EF. Si l’utilisateur modifie l’interface, ces
modifications seront ignorées.
L'interface est automatiquement régénérée à partir de l’onglet d'interface.
Dans le cas ou le fichier est trop important pour être visualisé on le signalera.
Néanmoins, la génération automatique du prototype de la fonction sera encore
assurée.
• l’utilisateur travaille dans l’éditeur fourni, et atteint la limite des 200K, pour l’EF
courante.
A ce moment là le message suivant est affiché :
«Votre fichier est trop grand pour être édité avec PL7SDKC. Vous devez l’exporter
, puis le réimporter».
• l’utilisateur préfère utiliser son éditeur "favori".
C’est possible et le travail est facilité par l’export d’un seul fichier à la fois. En
procédant comme suit :
créer son EF,
créer son interface puis entrer dans l’onglet de code,
exporter le fichier C,
travailler dans son éditeur puis sauver, sans changer le nom,
importer dans PL7SDKC.
___________________________________________________________________________
144
Mise en œuvre de l'EF avec PL7SDKC
Un clic sur l'onglet "Source .H" ouvre l'espace suivant :
FRANÇAIS
Bouton flipflop (Taille
normale/
Pleine fenêtre) réduit/
agrandit la
fenêtre de
saisie
Cet espace permet de définir des constantes, des types ou des structures spécifiques
à l'EF.
Ce fichier doit avoir une taille ≤ à 200 Koctets.
___________________________________________________________________________
145
Mise en œuvre de l'EF avec PL7SDKC
3.2
Génération de la famille en debug
FRANÇAIS
La phase de création est achevée, il est désormais possible de procéder à la génération
de la famille en debug. Pour cela on choisira Générer Debug du menu Famille comme
le montre l'écran ci-dessous.
Le rôle de cette génération est d'activer les différents outils logiciels permettant
d'obtenir une nouvelle famille (toutes les classes) et de vérifier la cohérence des
informations tout au long de la chaîne de génération.
En cas de problème, un écran s'ouvre indiquant la nature de(s) erreur(s) à corriger, afin
de pouvoir lancer une nouvelle génération.
Il est possible de suivre le déroulement de la génération grâce à la ligne d'information
positionnée au bas de l'écran. Lorsque la génération est terminée, l'indication "x
error(s), y warning(s)" s'affiche et un beep sonore est émis.
Un état "Générée en mode Debug" suivi d'une date de génération s'inscrivent dans la
zone de description de la famille, il est alors possible d'installer cette famille dans la
bibliothèque.
Les informations sur la génération sont consultables en ouvrant le fichier résultat (Voir
résultat génération du menu Famille).
L'installation de cette famille ainsi générée, n'est possible que depuis le produit
PL7SDKC.
___________________________________________________________________________
146
Mise en œuvre de l'EF avec PL7SDKC
3.3
Génération de la famille en release
FRANÇAIS
La phase terminale consiste à procéder à la génération de la famille en release (taille
de code minimisée). Pour cela on choisira Générer Release du menu Famille comme
le montre l'écran ci-dessous.
Le rôle de cette génération est d'activer les différents outils logiciels permettant
d'obtenir une nouvelle famille (toutes les classes) et de créer les fichiers correspondants.
Il est possible de suivre le déroulement de la génération grâce à la ligne d'information
positionnée au bas de l'écran. Lorsque la génération est terminée, l'indication "x
error(s), y warning(s)" s'affiche et un beep sonore est émis.
Un état "Générée en mode Release" suivi d'une date de génération s'inscrivent dans
la zone de description de la famille.
Les informations sur la génération sont consultables en ouvrant le fichier résultat (Voir
résultat génération du menu Famille).
Une fois la génération achevée, les éléments nécessaires (fichiers) sont automatiquement copiés sur le support choisi pour la diffusion (disquette, disque réseau, ...). Cet
espace fait partie des paramètres définis dans le menu de personnalisation de l'outil (cf.
§5.1)
___________________________________________________________________________
147
Mise en œuvre de l'EF avec PL7SDKC
3.4
Installation/Désinstallation dans la bibliothèque PL7
FRANÇAIS
Il est possible d'installer une famille générée en debug ou générée en release sur le
poste de développement, seules celles générées en debug pourront être mises au point
dans PL7.
Pour effectuer cette installation, on choisira Installer du menu Famille.
Si le code de la famille à installer existe déjà en bibliothèque, une fenêtre de dialogue
s'ouvre
S'il s'agit d'une nouvelle famille devant remplacer l'ancienne, cliquer sur "Ecraser".
En cas d'erreur, ou d'incertitude, il est possible d'annuler l'installation en bibliothèque
en choisissant Quitter.
Lorsqu' elle est terminée, le message "La famille a été installée en bibliothèque"
apparaît et l'installation est alors effective.
Il est possible de désinstaller une famille de la bibliothèque PL7. Il suffit de choisir la
commande Désinstaller du menu Famille lorsqu'une famille est en cours d'édition.
___________________________________________________________________________
148
Test de l'EF avec l'outil de Chapitre
mise au point4
4 Test de l'EF avec l'outil de mise au point
4.1
Accès à la mise au point des EF
4.1-1 Choix de la famille de l'EF à tester
Comme nous l'avons précisé au chapitre précédent, les EF des familles générées en
debug vont pouvoir être mises au point, une par une, dans PL7 Micro, Junior ou Pro.
Après avoir lancé PL7 puis chargé dans l'automate le programme contenant l'EF à
tester, la commande Mise au point EF du menu Outils ouvre l'écran suivant permettant
de sélectionner le répertoire de développement (dvt_ef, par défaut), puis la famille
dans laquelle se trouve l'EF.
Permet de rechercher le lecteur ainsi que le
répertoire de
développement
rappel
d'informations
sur la famille
La famille qui comporte l'EF à tester étant repérée, un clic sur OK ouvre l'environnement
de mise au point des EF, présenté dans le prochain paragraphe.
Il est fortement conseillé de ne faire appel qu'une fois à l'EF dans l'application, pour
en effectuer la mise au point.
4.1-2 Ouverture de l'écran de mise au point des EF
Cet écran est en fait composé de deux parties :
• Une partie commande offrant sept boutons,
• Une partie donnant des informations sur le test.
___________________________________________________________________________
149
FRANÇAIS
Le nom de la famille (générée en debug) et son numéro de code apparaîssent
Test de l'EF avec l'outil de mise au point
FRANÇAIS
L'ouverture de l'écran ajoute un menu "Debug EF" à la barre de menu PL7.
En choisissant la commande EF du menu Debug EF ou en cliquant sur le bouton
(2ème bouton en partant de la gauche), l'écran qui va permettre de choisir l'EF à tester
s'ouvre.
Dans notre exemple, il n'y a qu'une EF dans la famille (l'EF "MAX_TABW" que l'on veut
tester), le code de la classe à laquelle elle appartient, son code EF, son nom et son
commentaire apparaîssent.
Un clic sur OK ouvre un écran présentant le source C de l'EF (cf. § 4.3-1).
En fonction de la complexité de l'EF, le temps d'accès à cet écran peut prendre
quelques dizaines de secondes.
___________________________________________________________________________
150
Test de l'EF avec l'outil de mise au point
4.2
Présentation de l'outil
Les commandes de l'outil
sont accessibles à partir d'un
menu déroulant et/ou par les
boutons.
Toutes ces commandes sont
décrites ci-après :
(3ème bouton en partant de la gauche) :
permet de poser/enlever un point d'arrêt.
(4ème bouton en partant de la gauche) ou la commande Go du menu Debug EF
permet de relancer l'automate à partir du point d'arrêt ou du pas courant.
(5ème bouton en partant de la gauche) ou la commande Step Into (Ligne suivante)
du menu Debug EF : permet de pénétrer à l'intérieur d'une fonction (si c'est une
fonction présente dans le source C de l'EF.
(6ème bouton en partant de la gauche) ou la commande Step Over (Ligne
suivante meme fonction) du menu Debug EF : permet d'éviter une fonction
(passer par dessus).
(7ème bouton en partant de la gauche) ou la commande Step Out (Sort de la
fonction) du menu Debug EF : permet de sortir d'une fonction C composant une
EF.
• la commande Registres du menu Debug EF permet d'afficher la liste de l'ensemble
des registres utilisés par le microprocesseur de l'UC (cf. § 4.3-3).
• la commande Variables locales du menu Debug EF permet d'afficher la liste des
variables utilisées localement (cf. § 4.3-4).
• la commande Mixer C/Asm du menu Debug EF permet de passer d'une présentation
en langage C à une présentation en langage C et en langage assembleur.
• la commande Points d'arrêt du menu Debug EF permet d'afficher un écran donnant
des renseignements sur la localisation des points d'arrêt.
• la commande Step to Cursor (Avance vers curseur) du menu Debug EF permet de
relancer l'API, du pas sur lequel il est arrêté jusqu'au curseur.
___________________________________________________________________________
151
FRANÇAIS
(1er bouton en partant
de la gauche) : permet de sortir de l'outil
de mise au point des
EF.
Test de l'EF avec l'outil de mise au point
4.3
Mise au point des EF
Suite à la procédure décrite précédemment (cf. § 4.2-1), le code source C de l'EF
s'affiche à l'écran et la mise au point peut commencer.
Il va être possible, à l'aide des commandes et des boutons de l'outil, d'effectuer toutes
les opérations habituelles inhérentes au debug, à savoir :
• Pose et dépose de points d'arrêt,
• Faire du pas à pas,
• Dérouler une portion de programme,
• Rentrer dans une fonction,
• Faire de l'analyse en s'appuyant sur les listes des registres et des variables locales,
FRANÇAIS
• Editer l'EF en code C et langage assembleur, pour les besoins d'une analyse plus
fine d'une portion de programme qui pourrait poser problème.
4.3-1 Pose et dépose de points d'arrêt
Après avoir choisi une ligne de code en y pointant le curseur, en appuyant sur le bouton
, on va placer un point d'arrêt sur cette ligne. Le même bouton permet d'enlever
un point d'arrêt. Il est possible de poser jusqu'à 7 points d'arrêt simultanément.
Celui-ci est matérialisé sous la forme d'une ligne bleue. il est possible, de poser ou
d'enlever ainsi, tous les points d'arrêt souhaités.
Si l'automate est en RUN et si le programme passe sur un des points d'arrêt, la ligne
en question passe alors en jaune.
En utilisant les boutons,
,
,
, il va être aisé de rentrer/sortir d'une fonction
ou de sauter une fonction.
Exemple de portion de
code source C de l'EF
avec deux points d'arrêt
matérialisés (une ligne
bleue, une ligne jaune)
___________________________________________________________________________
152
Test de l'EF avec l'outil de mise au point
4.3-2 Mixer code C et langage assembleur
FRANÇAIS
La commande Mixer C/Asm du menu Debug EF permet de passer d'une présentation
en langage C à une présentation en langage C et en langage assembleur.
4.3-3 Les registres
La commande Registres du menu Debug EF permet d'afficher la liste de l'ensemble
des registres utilisés par le microprocesseur de l'UC, ainsi que le contenu de la pile
d'exécution qui contient les variables locales et les paramètres de la fonction dans
laquelle est arrêté le programme.
___________________________________________________________________________
153
Test de l'EF avec l'outil de mise au point
4.3-4 Les variables locales
FRANÇAIS
La commande Variables locales du menu Debug EF permet d'afficher la liste des
variables locales et des paramètres de la fonction dans laquelle est arrêté le programme.
Toutes les valeurs numériques qui sont visualisées dans cet écran sont exprimées en hexadécimal (sauf les variables FLOAT_TODBG).
La syntaxe permettant de définir les types des variables locales et des paramètres est
décrite ci-dessous :
+: le signe "plus" signifie que l'on peut déployer l'objet situé sur la ligne.
- : le signe "moins" signifie que l'on peut contracter l'objet situé sur la ligne.
{...} : signifie que l'objet correspondant est une structure.
[]
: signifie que l'objet correspondant est un tableau.
0xabcd:0xabcd
: signifie que l'objet correspondant est un pointeur. En le déployant, on voit apparaître le type de l'objet pointé.
%xxxxxxxx
: où x prend la valeur 0 ou 1, signifie que l'objet correspondant
est un champ de bits.
___________________________________________________________________________
154
Test de l'EF avec l'outil de mise au point
En fin d'une session de mise au point d'une EF, pour sortir, on utilisera soit le bouton
de l'outil, soit les commandes habituelles de sortie d'un écran Windows.
FRANÇAIS
En cas de problème en cours de test d'une EF, si l'outil de mise au point des EF
n'a pu être fermé, Il est nécessaire de charger à nouveau l'application dans
l'automate avant de relancer une session.
___________________________________________________________________________
155
FRANÇAIS
Test de l'EF avec l'outil de mise au point
___________________________________________________________________________
156
Fonctionnalités complémentaires
de SDKC
Chapitre
5
5 Fonctionnalités complémentaires de SDKC
5.1
Paramétrage de l'outil
La commande Personnaliser du menu Services ouvre la fenêtre suivante permettant de
paramétrer un certain nombre de répertoires de travail utiles pour le fonctionnement de
l'outil.
Répertoire (par défaut) où seront placés les fichiers des
familles d'EF
Disque de travail (C:\) où le logiciel crée/détruit ses fichiers de
travail temporaires
Répertoire (par défaut) où seront placés les fichiers des
classes importés/exportés
Répertoire (par défaut) où seront
placés les fichiers des sources en
language C destinés à être importés/exportés
Les flèches situées à droite de chaque champ, ouvrent une boite de dialogue permettant, pour chacun des champs, la sélection d'un autre disque/répertoire.
___________________________________________________________________________
157
FRANÇAIS
Répertoire (par défaut) où seront
placés les fichiers permettant l'installation d'une famille d'EF
Fonctionnalités complémentaires de SDKC
5.2
Modifier une famille
FRANÇAIS
Lorsqu'un nom de famille et un numéro de version ont été associés à un code famille,
la seule possibilité de changer ce(s) paramètre(s) est de sélectionner cette famille
(vidéo-inverse) et de lancer Modifier du menu Famille.
Cette action a pour conséquence d'ouvrir les champs "Nom" et "Version" à la saisie.
Par exemple, cette démarche s'avèrera utile pour changer le numéro de version d'une
famille, suite à l'évolution de celle-ci.
Un clic sur "Valider" prend en compte cette modification et ouvre la famille, afin de
permettre une création/consultation de classe/EF (cf. § 3.1.2, § 3.1.3).
___________________________________________________________________________
158
Fonctionnalités complémentaires de SDKC
5.3
Importer/Exporter
5.3-1 Classe
Une famille étant ouverte, deux commandes du menu Services vont permettre l'import
et/ou l'export de classe(s) dans cette famille.
Exporter une classe consiste à copier celle-ci dans le répertoire approprié défini lors
de la personnalisation de l'outil (cf. § 5.1).
L'export de la classe "Class1" de cette famille a pour conséquence, de copier dans le
répertoire un fichier " CLASSE01.EXP" contenant tous les éléments inhérents à cette
classe.
En fin d'export, le message : La classe "Class1" a été exportée avec succès vers
"C:\SDKCWTMP\IMPCLASS\CLASSE01.EXP" indique que l'opération est terminée.
Attention : Le fichier "CLASSE01.EXP" écrase l'éventuel "CLASSE01.EXP" déjà
existant et il n'y a pas de message d'avertissement.
Le groupe de deux chiffres terminant le nom du fichier "CLASSE01" indique le code
de la classe en hexadécimal (classe de code 1, dans cet exemple).
Le suffixe .EXP est la marque distinctive d'un fichier "d'Import-Export classe".
Importer une classe consiste à venir ouvrir l'écran suivant,
présentant le contenu du répertoire "d'Import-export classe" évoqué précédemment
et de choisir le fichier correspondant à la classe que l'on désire importer dans une
famille.
___________________________________________________________________________
159
FRANÇAIS
Exemple :
Famille "Programme", classe "Class1" :
(le répertoire "d'import-export classe" est celui par défaut : C:\SDKCWTMP\IMPCLASS)
Fonctionnalités complémentaires de SDKC
Exemple : Si l'on désire importer une classe1 dans la famille "Programme"
Il faut sélectionner le fichier " CLASSE01.EXP" contenant tous les éléments inhérents
à cette classe et cliquer sur OK.
Deux cas sont possibles :
• Il n'y avait pas de classe de code 1 dans cette famille, le clic sur OK déclenche la copie
et on voit apparaître dans la partie gauche de l'écran la classe de code 1 et ses EF.
FRANÇAIS
• Une classe de code 1 existait déjà dans la famille "Programme", le clic sur OK fait
apparaître le message suivant :
Oui importera la nouvelle classe (tous les éléments inhérents à cette classe) et
écrasera l'ancienne classe de même code (tous les éléments inhérents à cette
classe).
Non permet d'annuler l'import et de revenir à la situation initiale.
5.3-2 Source C
A partir de l'onglet "Source C" d'une EF, deux boutons vont permettre d'importer et/ou
d'exporter le code source C d'une autre EF.
Exporter Source C d'une EF consiste à copier le code dans le répertoire approprié
défini lors de la personnalisation de l'outil (cf. § 5.1).
Exemple :
Famille "Programme", classe "Class1", EF "MAX_TABW" :
(le répertoire "d'import-export sources C" est celui par défaut : C:\SDKCWTMP\IMPSRC)
l'export du contenu de l'onglet source C de l'EF "MAX_TABW" a pour conséquence,
de copier ce code dans un fichier "MAIN0101.C" du répertoire.
En fin d'export, le message : Le fichier source "MAIN0101.C" a été copié vers
"C:\SDKCWTMP\IMPSRC\MAIN0101.C", indique que l'opération est terminée.
Attention : Le fichier "MAIN0101.C" écrase l'éventuel "MAIN0101.C" déjà existant
et il n'y a pas de message d'avertissement.
___________________________________________________________________________
160
Fonctionnalités complémentaires de SDKC
Les deux groupes de deux chiffres formant la fin du nom du fichier "MAIN0101" indiquent
le code de la classe suivi du code de l'EF (classe de code 1, EF de code 1, dans cet
exemple). Ces codes sont exprimés en hexadécimal.
Le suffixe .C est la marque distinctive d'un fichier "d'Import-Export Source C".
Ce type de fichier MAINxxxx.C, pourra être ouvert par un éditeur C du commerce (plus
élaboré).
Cette manipulation sera rendue obligatoire, lorsque le fichier C dépassera la limite de
la zone d'édition de 64 Koctets.
FRANÇAIS
Importer Source C d'une EF consiste à venir ouvrir l'écran suivant,
présentant le contenu du répertoire "d'Import-export sources C" évoqué précédemment
et de choisir le fichier correspondant au code source C que l'on désire importer dans l'EF.
Exemple : Si l'on désire importer le source C contenu dans le fichier "MAIN0102.C"
Il faut sélectionner ce fichier et cliquer sur OK. Le clic sur OK fait apparaître le message
suivant :
OK importera le nouveau code source C et écrasera l'ancien.
Annuler permet de revenir à la situation initiale.
___________________________________________________________________________
161
Fonctionnalités complémentaires de SDKC
5.4
Archiver/Restaurer une famille
5.4-1 Archiver
FRANÇAIS
Lorsqu'une famille a été créée, que se(s) classe(s) et se(s) EF(s) ont été créées et
paramétrées, il peut être intéressant de l'archiver.
Cette opération est réalisable en actionnant la commande Archiver du menu Famille,
comme l'indique l'écran suivant :
Ces carrés en fonction de leur sélection, permettent
l'affichage dans la partie gauche de l'écran des
familles normales et/ou archivées
Par défaut, cette archive est transférée dans le répertoire général des familles d'EF
(DVT_EF) créé lors de l'installation. Il est possible, à l'aide du bouton "Choisir chemin",
de placer cette archive dans un autre répertoire de sa convenance.
L'archivage de la famille est terminé et si la visualisation des archives est effective, on
voit apparaître l'archive dans la partie gauche de l'écran. En sélectionnant l'archive,
un écran apparaît contenant les principales caractéristiques de la famille archivée.
Une zone s'ouvre permettant de saisir des commentaires sur l'archive ; ces commentaires seront précieux lors d'une éventuelle restitution.
Zone de saisie des commentaires (4 lignes maximum)
___________________________________________________________________________
162
Fonctionnalités complémentaires de SDKC
5.4-2 Restaurer
FRANÇAIS
La fonction "Restaurer" a pour but de remplacer une famille donnée par un archivage
antérieur en provenance du répertoire général des familles d'EF. Cette fonction est
réalisable en actionnant la commande Restaurer du menu Famille, comme l'indique
l'écran suivant :
Comme cette restauration a pour conséquence d'écraser la famille actuelle, un
message de confirmation apparaît :
OK restaure la famille. Annuler permet de revenir à la situation initiale.
Lors de l'exécution des fonctions Archiver/Restaurer, les fichiers créés ou manipulés
se trouvent dans le répertoire défini dans l'écran de personnalisation (cf. § 5.1) sous
l'item : Répertoire général des familles d'EF (C:\DVT_EF par défaut). Ces fichiers sont
nommés respectivement :
• CRD_xxxx.yyy : pour la fiche famille
• CAT_xxxx.yyy : pour les informations sur la famille
• FAM_xxxx.yyy : pour l'archive complète
où xxxx correspond au code famille en hexadécimal et yyy au numéro de l'archive.
___________________________________________________________________________
163
Fonctionnalités complémentaires de SDKC
5.4-3 Restaurer à partir de
FRANÇAIS
La commande Restaurer à partir de... du menu Famille, ouvre l'écran suivant permettant de définir le chemin où est localisée la famille recherchée (répertoire, réseau,
disquette, ...)
La famille souhaitée étant sélectionnée, un clic sur Ouvrir valide la restauration.
Attention, une famille restaurée ecrase une éventuelle famille de même nom et de
même version. Dans ce cas, un avertissement apparait et une confirmation est exigée.
5.5
Imprimer
A l'intérieur d'une famille, la commande Imprimer du menu Famille permet de lancer
l'impression. L'écran suivant permet de définir la nature de l'impression désirée.
___________________________________________________________________________
164
Fonctionnalités complémentaires de SDKC
Par défaut, sont imprimés les informations du niveau famille, En les sélectionnant, il
est possible d'obtenir les informations sur les classes et les EF et/ou les programmes
source contenus dans ces classes et dans ces EF.
La rubrique "Imprimer uniquement le source de l'éditeur actif" apparaît en grisé. Cette
commande devient active, lors de l'écriture d'un programme source, et que le curseur
se trouve à l'intérieur de l'éditeur.
FRANÇAIS
Un bouton "Configuration" permet d'activer la boite de configuration de l'impression
permettant d'en définir les paramètres .
___________________________________________________________________________
165
FRANÇAIS
Fonctionnalités complémentaires de SDKC
___________________________________________________________________________
166
LeChapitre
code de l'EF
6
6 Le code de l'EF
6.1
Règles de mise en œuvre des EF
6.1-1 Langage C
Limitation :
L'installation et l'utilisation de librairies de fonctions autres que celles incluses
dans le produit PL7 SDKC ne sont pas supportées par Schneider Automation.
N° 1
Il est interdit de définir des variables statiques dans une EF.
N° 2
Il est interdit de définir des Unions dans une structure. Il faut les avoir définies,
hors de la structure, au préalable.
N° 3
L'utilisation d'un pointeur comme paramètre ou variable locale d'une fonction
nécessite qu'il soit déclaré comme pointeur long.
Il est interdit de définir un champ de bits de longueur 0.
N° 5
L'instruction "switch" du langage C est interdite dans le code d'une EF.
N° 6
Les types des paramètres formels d'une EF sont spécifiques aux langages PL7
(se reporter à la documentation PL7 Micro, Junior ou Pro), ceux-ci sont transformés automatiquement dans l'en-tête de la fonction C comme indiqué cidessous :
Paramètre
formel PL7
Paramètre
d'entrée
Paramètre
de sortie
Paramètre
d'entrée/sortie
BOOL
short
adrNFBIT
adrNFBIT
EBOOL
adrFBIT
adrFBIT
adrFBIT
WORD
short
adrSCAL
adrSCAL
DWORD
long
adrSCAL
adrSCAL
REAL
unsigned long
adrSCAL
adrSCAL
STRING
adrTABLE
adrTABLE
adrTABLE
AR_X
adrTABLE
adrTABLE
adrTABLE
AR_W
adrTABLE
adrTABLE
adrTABLE
AR_D
adrTABLE
adrTABLE
adrTABLE
AR_R
adrTABLE
adrTABLE
adrTABLE
N° 7
Les types et les constantes présentées page suivante appartiennent au fichier
CSTSYST.H qui est inclus automatiquement en début de chaque source C
décrivant une EF.
___________________________________________________________________________
167
FRANÇAIS
Exemple : int far* pVariableLocale
N° 4
Le code de l'EF
//Définition des constantes
FRANÇAIS
// Valeurs de status répertoriées
#define
STATUS_OK
#define
OUT_OF_BOUNDS
#define
NULL_RW_SIZE
#define
CLOCK_UNAVAILABLE
#define
CLOCK_NOT_SUPPORTED
#define
INVALID_LENGTH
#define
#define
#define
#define
NIL
NILL
INVALID_ADDRESS
NULL_FPTR
// Types d’action possibles sur chaînes de bits forçables (wr_bits)
#define
DATA_WRITE
// Ecriture du champ data
#define
RVALUE_WRITE
// Ecriture du champ valeur de repli (TSX57
uniquement)
#define
RVALID_WRITE
// Ecriture du champ validation de la valeur
// de repli (TSX57 uniquement)
#define
DEFAULT_WRITE // Ecriture du défaut (TSX57 uniquement)
#define
UNFORCE_ALL
// Déforçage global des bits
#define
GAMME_TSX37
4
#define
REFCAT_TSX37_10
#define
REFCAT_TSX37_21
#define
REFCAT_TSX37_22
1
2
3
#define
GAMME_TSX57
5
#define
REFCAT_TSX57_10
#define
REFCAT_TSX57_20
#define
REFCAT_PMX57_20
#define
REFCAT_TSX57_30
#define
REFCAT_TSX57_10_V3
#define
REFCAT_TSX57_20_V3
#define
REFCAT_TSX57_25_V3
#define
REFCAT_TSX57_30_V3
#define
REFCAT_TSX57_35_V3
#define
REFCAT_TSX57_40_V3
#define
REFCAT_TSX57_45_V3
1
2
3
4
5
6
7
8
9
10
11
___________________________________________________________________________
168
Le code de l'EF
//Définition des types
#define
BOOL short
#define
BYTE unsigned char
#define
WORD unsigned short
#define
DWORD unsigned long
//Définition des structures
typedef struct {
void __near
unsigned short
}PTR_LOG;
*off;
sel;
// Offset
// Numéro de sélecteur
typedef struct {
unsigned short selecteur;
unsigned short offset;
unsigned short taille;
} adrTABLE;
FRANÇAIS
typedef struct {
unsigned short selecteur;
unsigned short offset;
} adrSCAL;
// Taille du tableau ou de la chaîne
typedef struct {
unsigned short selecteur;
unsigned short offset;
} adrFBIT;
typedef struct {
unsigned short selecteur;
unsigned short offset;
unsigned short rang;
} adrNFBIT;
typedef struct {
unsigned char gamme;
unsigned char version;
unsigned char codecat;
// valeur discrète : 0..15
// Gamme du processeur
// Version de l’OS présente dans le
processeur
// Code de référence catalogue du
modèle d’UC
unsigned char unused;
} PROC_IDENT;
___________________________________________________________________________
169
Le code de l'EF
FRANÇAIS
typedef struct {
unsigned char reserved ;
unsigned char Second ;
unsigned char Minut ;
unsigned char Hour ;
unsigned char DayMonth ;
unsigned char Month ;
unsigned char Year ;
unsigned char Century ;
unsigned char DayWeek ;
} DATE_TIME ;
typedef struct {
unsigned Run
unsigned AppliExec
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
CartMemDetect
Reservation
BrkptSet
AppliFailure
PartialRun
CartFlashErase
: 1;
: 1;
:1;
: 1;
: 1;
: 1;
: 1;
: 1;
unsigned UserMemProtect : 1;
unsigned Reserved
} PROC_INDIC ;
: 7;
/* 1 si run
*/
/* 1 si indice compatibilité entre appli
et processeur ok
*/
/* 1 si détection cart. mèm. */
/* 1 si réservation en cours */
/* 1 si brkpt positionné
*/
/* 1 si appli «halted»
*/
/* 1 si run partiel
*/
/* 1 si la cart. mém. FEPROM */
/* est en cours d’effacement */
/* 1 si mémoire application */
/* protégée en écriture
*/
/* bits réservés
*/
#ifdef SDKCV3
typedef union {
unsigned long ul;
float fl;
} FLOAT_DBG;
#ifdef C_486
typedef
#else
typedef
#endif
float FLOAT;
unsigned long FLOAT;
#endif
___________________________________________________________________________
170
Le code de l'EF
6.1-2 Gestion de versions de famille et d'EF
N° 8
Pour une famille déjà installée en bibliothèque, toute modification à l'intérieur d'une classe doit imperativement entraîner une évolution de son
numéro de version (de l'indice et/ou de l'indice release), ainsi que du numéro
de version de la famille à laquelle elle appartient.
Le respect de cette règle est obligatoire pour permettre la remise à niveau
des applications PL7 existantes contenant des EF de la classe dans la version
antérieure.
Attention : le numéro de version d'une famille ne correspond pas nécessairement au maximum des numéros de versions des classes qui la composent.
Exemple : soit une famille F de version 2.1, composée des classes C1, C2 et
C3
de versions respectives 1.0, 2.1 et 1.0.
Une évolution de la classe C1 de 1.0 vers 1.1, devra faire passer la version de
la famille F de 2.1 vers 2.2 au minimum.
N° 9
Une nouvelle version de famille d'EF doit rester totalement compatible avec
la version précédente :
• il ne doit pas y avoir de disparition d'EF de la famille,
• une EF ne doit pas changer d'interface d'appel (il faut créer une nouvelle EF,
avec un nom distinct si le prototypage doit changer, et conserver l'ancienne.
N° 10 Il faut incrémenter "l'indice compatibilité info textuelles" d'une famille d'EF si
(et seulement si) l'évolution subie par cette famille rend les informations d'aide
existantes obsolètes.
Remarque : pendant la phase de mise au point des EF, il est conseillé d'attribuer les
numéros de versions aux classes et familles à partir 0.01, afin de permettre d'attribuer
par la suite la version 1.0 au produit commercialisé.
___________________________________________________________________________
171
FRANÇAIS
Un numéro de version (format VV.RR) est attribué à une famille d'EF et à chaque classe
de la famille.
Un indice de compatibilité des informations textuelles est attribué à une famille d'EF.
Cet indicateur permet, en cas d'incohérence de versions de la famille entre la
bibliothèque et une application, de déterminer la validité des informations d'aide
associées aux EF (commentaire général, nom et commentaire de ses paramètres) qui
composent la famille.
Le code de l'EF
6.1-3 Gestion de la taille de la pile
La gestion de la taille réservée pour la pile d'exécution d'une EF est laissée à la charge
de l'utilisateur. Il est important de pouvoir l'estimer au plus juste, car :
• si la taille est trop faible, l'automate va se retrouver en défaut.
• si la taille est trop grande, c'est autant de place en moins pour la mémoire de données
de l'automate.
Pour estimer cette taille en octets, il faut additionner les tailles :
• des paramètres et des variables locales de l'EF (exemple : int = 2 octets, long = 4
octets, char = 1 octet, ...),
FRANÇAIS
• des paramètres et des variables locales des fonctions qu'elle appelle, en parcourant
l'arbre d'appel le plus profond.
6.1-4 Utilisation des nombres flottants
Il est possible de saisir des paramètres flottants en argument d’une EF. Dans le cas
d’une EF fonction on peut aussi choisir de retourner un flottant ; Il faut pour cela
sélectionner le type REAL lors du choix du type.
Le calcul flottant n’est accessible que sur les automates de version ≥ à V3.0 (avec ou
sans coprocesseur). Cela signifie que le code source d’une EF incluant des paramètres flottants ne sera pas regénérable pour un automate cible de version < 3 (erreurs
de compilation).
Déclaration et initialisation d’une variable de type flottant
La déclaration se fait ainsi :
FLOAT varf ;
L’initialisation de la variable avec une valeur littérale se fait avec la macro FVALUE :
varf = FVALUE(2.1e23) ;
Visualisation en debug d’une variable flottante
La visualisation d’une variable flottante dans Debug EF se fait en utilisant une variable
du type FLOAT_DBG. On convertit grâce à la fonction FLOAT_TO_DBG une valeur
de type FLOAT en une valeur de type FLOAT_DBG.
Exemple
FLOAT_DBG fv ;
FLOAT FVAL ;
FVAL = FVALUE(1.1) ;
fv =FLOAT_TO_DBG (FVAL) ;
___________________________________________________________________________
172
Le code de l'EF
La visualisation de la variable fv en debug donnera ceci. ( on constate que c’est en
réalité un union entre un flottant et un unsigned long. )
- fv = (union)
fl = +1.1000000E+000
ul = 0x3F8CCCCD
Conversion des variables flottantes PL7 en variables SDKC et vice-versa
Le type flottant dans PL7 est un unsigned long. Il faut assurer une conversion en entrée
de fonction ainsi que la conversion inverse en cas de retour.
// retour déclaré en REAL
unsigned long far pascal MONEF(
unsigned long IN1 // déclaré en REAL dans SDKC
)
{
FLOAT FVAL ;
FVAL = GET_FLOATPL7(INI) ; // conversion vers un flottant
/// traitements
return (FLOAT_TOPL7 (FVAL) ) ; // conversion inverse
}
___________________________________________________________________________
173
FRANÇAIS
Exemple
Le code de l'EF
6.2
Liste des mots réservés
FRANÇAIS
Les mots de la liste suivante (présentés en colonne et par ordre alphabétique) sont ou
seront utilisés par PL7, ils ne doivent pas être employés comme nom d'EF :
ABS
ACCEPT
ACOS
ACTION
ACTIVATE_PULSE
ACTIVE_TIME
ADD
ADDRESS
ADD_DT
ADD_TOD
ADR
AND
ANDF
ANDN
ANDR
AND_ARX
ANY
ANY_BIT
ANY_DATE
ANY_INT
ANY_NUM
ANY_REAL
ARRAY
AR_D
AR_DINT
AR_F
AR_INT
AR_R
AR_W
AR_X
ASIN
ASK
ASK_MSG
ASK_VALUE
ASSIGN_KEYS
AT
ATAN
AUX
BCD_TO_INT
BIT_D
BIT_W
BLK
BLOCK
BODY
BOOL
BOTTOM
BTI
BTR
BY
BYTE
C
CAL
CALC
CALCN
CALL
CALL_COIL
CANCEL
CASE
CD
CHART
CH_M
CLK
CLOSE
CLOSED_CONTACT
COIL
COMMAND
COMMENTS
COMP4
COMPCH
CONCAT
CONCATW
CONF
CONFIGURATION
CONSTANT
CONTROL_LEDS
COPY_BIT
COS
CTD
CTU
CTUD
CU
D
DATA_EXCH
DATE
DATE_AND_TIME
DAT_FMT
DAY_OF_WEEK
DA_TYPE
DEACTIVATE_PULSE
DEC
DELETE
DELTA_D
DELTA_DT
DELTA_TOD
DINT
DINT_TO_REAL
DINT_TO_STRING
DISPLAY_ALRM
DISPLAY_GRP
DISPLAY_MSG
DIV
DMOVE
DO
DOWN
DR
DRUM
DS
DSHL_RBIT
DSHRZ_C
DSHR_RBIT
DSORT_ARD
DSORT_ARW
DT
DTS
DWORD
D_BIT
E
EBOOL
ELSE
ELSIF
EMPTY
EMPTY_LINE
END
ENDC
ENDCN
END_ACTION
END_BLK
END_BLOCK
END_CASE
END_COMMENTS
END_CONFIGURATION
END_EXPRESSION
END_FOR
END_FUNCTION
END_FUNCTION_BLOCK
END_IF
END_MACRO_STEP
END_PAGE
END_PHRASE
END_PROG
END_PROGRAM
END_REPEAT
END_RESOURCE
END_RUNG
END_STEP
END_STRUCT
END_TRANSITION
END_TYPE
END_VAR
END_WHILE
EQ
EQUAL
EQUAL_ARR
ERR
EVT
EXCHG
EXCH_DATA
EXIT
EXP
EXPRESSION
EXPT
F
FALSE
FAST
FBD
FE
FIFO
FIND
FIND_EQ
FIND_EQD
FIND_EQDP
FIND_EQR
FIND_EQW
FIND_EQWP
FIND_GTD
FIND_GTR
FIND_GTW
FIND_LTD
FIND_LTR
FIND_LTW
FOR
FPULSOR
FROM
FTOF
FTON
FTP
FUNC
FUNCTION
___________________________________________________________________________
174
FUNCTION_BLOCK
F_B
F_EDGE
F_TRIG
GE
GET
GET_MSG
GET_VALUE
GLOBAL_COMMENT
GR7
GRAY_TO_INT
GT
GTI
H
HALT
HALT_COIL
HASH_COIL
HW
H_COMPARE
H_LINK
I
IF
IL
IN
INC
INCJUMP
INDEX_CH
INFO
INITIAL_STEP
INIT_BUTTONS
INPUT
INPUT_CHAR
INSERT
INT
INTERVAL
INT_TO_BCD
INT_TO_REAL
INT_TO_STRING
ITB
ITS
JMP
JMPC
JMPCN
JUMP
JUMP_COIL
L
LAD
LANGAGE
LANGUAGE
LD
LDF
LDN
LDR
LE
LEFT
LEN
LENGTH_ARD
LENGTH_ARR
LENGTH_ARW
LENGTH_ARX
LIFO
LIMIT
LINT
LIST
LIT
LN
LOCATION
LOG
LREAL
LT
LW
LWORD
M
MACRO_STEP
MAIN
MASKEVT
MAST
MAX
MAX_ARD
MAX_ARR
MAX_ARW
MAX_PAGES
MAX_STEP
MCR
MCR_COIL
MCS
MCS_COIL
MID
MIN
MIN_ARD
MIN_ARR
MIN_ARW
MN
MOD
MONO
MOVE
MPP
MPS
MRD
MS
MUL
MUX
M_CH
M_MACRO_STEP
N
N1
NAME
NB_ACTIVE_STEPS
NB_ACTIVE_TIME
NB_BLOCKS
NB_COMMON_WORDS
NB_CONSTANT_WORDS
NB_CPT
NB_DRUM
NB_INTERNAL_BITS
NB_INTERNAL_WORDS
NB_MACRO_STEPS
NB_MONO
NB_PAGES
NB_REG
NB_TIMER
NB_TM
NB_TRANSITIONS
NE
NIL
NO
NON_STORED
NOP
NOT
NOT_ARX
NOT_COIL
NOT_READABLE
NO_GR7
NO_PERIOD
N_CONTACT
O
OCCUR
OCCUR_ARD
OCCUR_ARR
OCCUR_ARW
OF
ON
OPEN
OPEN_CONTACT
OPERATE
OR
ORF
ORN
ORR
OR_ARX
OTHERS
OUT
OUTIN_CHAR
OUTPUT
OUT_BLK
OUT_IN_CHAR
P
P0
P1
PAGE
PAGE_COMMENT
PANEL_CMD
PERIOD
PHRASE
PHRASE_COMMENT
PID
PID_MMI
PLC
POST
PRESET
PRINT
PRINT_CHAR
PRIO0
PRIO1
PRIORITY
PRL
PROG
PROGRAM
PROG_LANGAGE
PROG_LANGUAGE
PT
PTC
PUT
PV
PWM
P_CONTACT
Q
QUERY
R
R1
RCV_TLG
RE
READ
READ_EVT_UTW
READ_ONLY
READ_PARAM
READ_STS
READ_VAR
READ_WRITE
REAL
REAL_TO_DINT
REAL_TO_INT
REAL_TO_STRING
REG
REM
REPEAT
REPLACE
REQ
___________________________________________________________________________
175
FRANÇAIS
Le code de l'EF
FRANÇAIS
Le code de l'EF
RESET
RESET_COIL
RESOURCE
RESTORE_PARAM
RET
RETAIN
RETC
RETCN
RETURN
RET_COIL
RIGHT
ROL
ROLD
ROLW
ROL_ARD
ROL_ARR
ROL_ARW
ROL_DWORD
ROL_WORD
ROR
ROR1_ARB
RORD
RORW
ROR_ARD
ROR_ARR
ROR_ARW
ROR_DWORD
ROR_WORD
RRTC
RS
RTB
RTC
RTS
RUNG
R_EDGE
R_TRIG
S
S1
SAVE
SAVE_PARAM
SCHEDULE
SCOUNT
SD
SEARCH
SECTION
SEL
SEMA
SEND
SENDER
SEND_ALARM
SEND_MBX_ALARM
SEND_MBX_MSG
SEND_MSG
SEND_REQ
SEND_TLG
SERVO
SET
SET_COIL
SFC
SHIFT
SHL
SHOW_ALARM
SHOW_MSG
SHOW_PAGE
SHR
SHRZ
SIN
SINGLE
SINT
SL
SLCWORD
SMOVE
SOFT_CONFIGURATION
SORT
SORT_ARD
SORT_ARR
SORT_ARW
SQRT
SR
ST
STANDARD
START
STD
STEP
STI
STN
STOP
STR
STRING
STRING_TO_DINT
STRING_TO_INT
STRING_TO_REAL
STRUCT
SUB
SUB_DT
SUB_TOD
SUM
SU_TYPE
SWAP
S_T_AND_LINK
S_T_OR_LINK
T
TAN
TASK
TASKS
THEN
TIME
TIMER
TIME_OF_DAY
TM
TMAX
TMOVE
TO
TOD
TOF
TOFF
TON
TOP
TP
TRANSITION
TRANS_TIME
TRUE
TRUNC
TYPE
TYPES
T_S_AND_LINK
T_S_OR_LINK
U
UDINT
UINT
ULINT
UNMASKEVT
UNTIL
UP
USINT
USORT_ARD
USORT_ARW
UTIN_CHAR
VAR
VAR_ACCESS
VAR_EXTERNAL
VAR_GLOBAL
VAR_INPUT
VAR_IN_OUT
VAR_OUTPUT
VAR_PUBLIC
VERSION
V_COMPARE
V_LINK
W
WHILE
WITH
WORD
WRITE
WRITE_CMD
WRITE_PARAM
WRITE_VAR
WRTC
WSHL_RBIT
WSHRZ_C
WSHR_RBIT
W_BIT
XM
XM_MONO
XM_MULTI
XOR
XORF
XORN
XORR
XOR_ARX
YES
___________________________________________________________________________
176
Fonctions
système
Chapitre
7
7 Fonctions système
Il est possible de faire appel, dans le corps d'une EF, à des fonctions système présentes
dans l'UC de l'automate.
En voici la liste :
• rd_sysbit :
lecture d'un bit système %Si
• wr_sysbit :
écriture d'un bit système %Si
• rd_sysword :
lecture d'un mot système %SWi
• wr_sysword :
écriture d'un mot système %SWi
• rd_bit_attrib :
lecture d'un bit de la mémoire forçable
• rd_bits :
lecture de plusieurs bits consécutifs en mémoire forçable
• wr_bits :
écriture de plusieurs bits consécutifs en mémoire forçable
• rd_16bits :
lecture de la valeur de 16 bits consécutifs en mémoire forçable
• wr_16bits :
écriture de la valeur de 16 bits consécutifs en mémoire forçable
• rd_1bit :
lecture de la valeur d'un bit en mémoire forçable
• wr_1bit :
écriture de la valeur d'un bit en mémoire forçable
• phy_ptr_init :
transformation d'une adresse logique en une adresse physique
• date_and_time : lecture de la date et de l'heure courante de l'automate
• cnt_100ms :
lecture de la valeur d'un compteur interne cadencé à 100 ms
• cnt_10ms :
lecture de la valeur d'un compteur interne cadencé à 10 ms
• proc_type :
lecture du type de processeur
• proc_indic :
lecture d'informations sur la configuration mémoire
• ADD :
somme de deux nombres flottants
• SUB :
soustraction de deux nombres flottants
• MUL :
multiplication de deux nombres flottants
• DIV :
division de deux nombres flottants
• EQU :
test si égalité entre deux nombres flottants
• SUP :
test si un flottant est supérieur à un autre flottant
• INF :
test si un flottant est inférieur à un autre flottant
• ABS :
calcul de la valeur absolue d'un nombre flottant
• CHS :
changement de signe d'un nombre flottant
• SQRT :
calcul de la racine carrée d'un nombre flottant
• FTOL :
conversion d'un double mot en nombre flottant
• LTOF :
conversion d'un nombre flottant en double mot
• of_passw_check :accès à la signature d'une carte PCMCIA pour protection d'application (voir Aide en ligne)
___________________________________________________________________________
177
FRANÇAIS
Fonctions de base
Fonctions système
Fonctions trigonométriques et exponentielles
FRANÇAIS
• EXP :
exponentielle d'un nombre flottant
• LN :
calcul du logarithme d'un nombre flottant
• SIN :
calcul du sinus d'un nombre flottant
• COS :
calcul du cosinus d'un nombre flottant
• TAN :
calcul de la tangente d'un nombre flottant
• ASIN :
calcul de l'arcsinus d'un nombre flottant
• ACOS :
calcul de l'arccosinus d'un nombre flottant
• ATAN :
calcul de l'arctangente d'un nombre flottant
Exceptions et cas d’erreur
Les fonctions mathématiques proposées ne retournent pas de compte-rendu d’exécution. Néanmoins, il est possible d’obtenir ce compte-rendu grace à la Macro
GET_STATUS(status) qui doit être utilisée juste après l’appel d’une fonction. Le
résultat contenu dans status indique le résultat d’ exécution de cette fonction .
La signification des différentes valeur retournées, sont décrites dans le tableau ci
dessous :
#define
valeur
signification
STATUS_OK
0
opération correctement effectuée
flag_InvalideOp
1
opérande invalide
flag_Denorm
2
opérande dénormalisé
ZeroDivide
4
division par zéro
flag_Overflow
8
overflow
flag_Underflow
16
underflow
Exemple d’utilisation de la Macro GET_STATUS
FLOAT fa, fb ;
unsigned short status ;
fa = ADD( fa, fb);
GET_STATUS (status) ;
if (status!= STATUS_OK)
{
// traitement d’erreur
}
___________________________________________________________________________
178
Fonctions système
Conventions de représentations des valeurs exceptionnelles (Norme IEEE 754)
-1.#NAN :
représente un nombre dénormalisé
représente + l’ infini (valeur Hexadécimale 7F800000)
représente - l’infini (valeur Hexadécimale FF800000)
représente un résultat indéfini ( Not A Number ) positif. (valeur Hexadécimale 7FC00000)
représente un résultat indéfini ( Not A Number )négatif. (valeur Hexadécimale FFC00000)
Remarque : Comme il est possible, en utilisant ces fonctions, d'aller écrire dans la
mémoire de l'automate, des précautions d'accès sont à prendre en compte par
l'utilisateur.
Exemple : Lorsqu'un tableau est passé en paramètre d'une EF, attention à ne pas
accéder à des mots en dehors de ce tableau. La vérification peut s'effectuer en testant
sa longueur.
Les pages suivantes décrivent ces fonctions, leurs paramètres, les types utilisés en
s'appuyant sur des exemples.
___________________________________________________________________________
179
FRANÇAIS
0.#DN :
1.#INF :
-1.#INF :
1.#NAN :
Fonctions système
value = rd_sysbit ( sysbit_range , status )
unsigned short
unsigned short
unsigned short
value
sysbit_range
far * status
Description
Lecture du bit système %Si identifié par son numéro.
La cohérence du numéro de bit est contrôlée.
FRANÇAIS
Paramètres d'entrée
sysbit_range :
status :
Adresse logique du bit à lire.
Pointeur far sur le mot de status système.
Retour
Lorsque status vaut STATUS_OK, la valeur du bit est renseignée dans le bit de poids
faible de valeur ;
Les bits de rang 1..15 sont positionnés à zéro.
Un numéro de bit hors bornes produit la valeur de status OUT_OF_BOUNDS.
Exemples
//Lecture du bit système %S4
unsigned short
Value;
unsigned short
Status;
Value = rd_sysbit (4,(unsigned short far *) & Status);
___________________________________________________________________________
180
Fonctions système
status = wr_sysbit ( sysbit_range , value )
unsigned short
unsigned short
unsigned short
status
sysbit_range
value
Description
Paramètres d'entrée
sysbit_range :
value :
Adresse logique du bit à écrire.
Valeur à écrire ; seul le bit de poids faible est pris en compte.
Retour
Le compte-rendu d’écriture du bit.
Celui-ci vaut STATUS_OK lorsque l’écriture est acceptée par le système.
Un numéro de bit hors bornes est signalé par la valeur de status OUT_OF_BOUNDS.
Exemples
//Ecriture de la valeur 0 dans le bit système %S10
unsigned short
Status;
Status = wr_sysbit (10,0);
___________________________________________________________________________
181
FRANÇAIS
Ecriture du bit système %Si identifié par son numéro.
La cohérence du numéro de bit est contrôlée.
Fonctions système
value = rd_sysword ( sysword_range , status )
unsigned short
unsigned short
unsigned short
value
sysword_range
far * status
Description
FRANÇAIS
Lecture du mot système %SWi identifié par son numéro.
La cohérence du numéro de mot est contrôlée.
Paramètres d'entrée
sysword_range :
status :
Adresse logique du mot à lire.
Pointeur far sur le mot de status système.
Retour
Lorsque status vaut STATUS_OK, la valeur du mot est renseignée dans la valeur de
retour de la fonction.
Un numéro de mot hors bornes produit la valeur de status OUT_OF_BOUNDS.
Exemples
//Lecture du mot système %SW48 (nombre d'événement)
unsigned short
Value;
unsigned short
Status;
Value = rd_sysword (48,(unsigned short far *) & Status);
___________________________________________________________________________
182
Fonctions système
status = wr_sysword ( sysword_range , value )
unsigned short
unsigned short
unsigned short
status
sysword_range
value
Description
Paramètres d'entrée
sysword_range :
value :
Adresse logique du mot à écrire.
Valeur à écrire.
Retour
STATUS_OK lorsque l’écriture se passe bien.
Un numéro de mot hors bornes produit la valeur de status OUT_OF_BOUNDS.
Exemples
//Ecriture de la valeur 10 dans le mot système %SW48
unsigned short
Status;
unsigned short
Value;
Status = wr_sysword (48,10);
___________________________________________________________________________
183
FRANÇAIS
Ecriture du mot système %SWi identifié par son numéro.
La cohérence du numéro de mot est contrôlée.
Fonctions système
value = rd_bit_attrib ( address )
unsigned char
adrFBIT
value
address
Description
Lecture d’un bit de la mémoire forçable identifié par son adresse. Les bits de la mémoire
forçable sont : %Si, %Mi, %Xi, %Ii.j et %Qi.j.
FRANÇAIS
Paramètres d'entrée
address :
Adresse du bit à lire, de type adrFBIT (cf. § 6.1-1).
Retour
Les attributs du bit référencé, conformément à la structure de la mémoire des bits
forçables.
Bit forçable TSX37 : 3 bits significatifs
bit2
F
V
H
F
bit1
H
bit0
V
: Valeur
: Historique
: Forçage
Bit forçable TSX57 : 8 bits significatifs
bit7
Def.
bit6
VR
bit5
ER
bit4
R
V
H
F
r.F.
R.
ER
VR
Def.
: Valeur
: Historique
: Forçage (local)
: Forçage distant
: Valeur de repli
: Etat de repli
: Validation du repli
: Défaut
bit3
r.F.
bit2
F
bit1
H
bit0
V
significatif uniquement pour les bits d'entrée/sortie
(Ii,j ; Qi,j)
___________________________________________________________________________
184
Fonctions système
Exemples
FRANÇAIS
//Lecture des attributs du bit correspondant à l'entrée 1 de l'emplacement 2
void far pascal FONCTION(adrFBIT AdresseBit)
{
unsigned char
Valeur;
:
:
Valeur = rd_bit_attrib(AdresseBit);
:
:
}
___________________________________________________________________________
185
Fonctions système
value = rd_bits ( address , number , status )
unsigned long
adrFBIT
unsigned short
unsigned short far *
value
address
number
status
Description
FRANÇAIS
Lecture de plusieurs bits consécutifs en mémoire forçable.
Paramètres d'entrée
address :
number :
status :
Adresse du premier bit à lire, de type adrFBIT (cf. § 6.1-1).
Nombre de bits à lire, cette longueur ne peut excéder 32 bits.
Pointeur far sur le mot de status système.
Retour
La valeur de la chaîne de bits référencée.
La fonction n’effectue aucun traitement lorsque le nombre de bits demandés dépasse
32 .
status vaut alors INVALID_LENGTH.
Exemples
//Lecture de 17 bits consécutifs à partir de %M1 passé en paramètre
void far pascal FONCTION(adrFBIT PremierBit)
{
unsigned short status;
unsigned long
Valeur;
:
:
Valeur = rd_bits(PremierBit,17,(unsigned short far *) & Status);
:
:
}
___________________________________________________________________________
186
Fonctions système
status = wr_bits ( address , number , value , type )
unsigned
adrFBIT
unsigned
unsigned
unsigned
short
short
long
short
status
address
number
value
type
Description
Paramètres d'entrée
address :
number :
value :
type :
Adresse du premier bit forçable à écrire, de type adrFBIT (cf. § 6.1-1).
Nombre de bits à écrire ; cette valeur ne peut excéder 32.
Valeurs à écrire sur un double mot.
Type d’écriture à effectuer :
00h : DATA_WRITE : mise à jour des valeurs
04h : RVALUE_WRITE : écriture de la valeur de repli
06h : RVALID_WRITE : écriture du champ de validation du repli
07h : DEFAULT_WRITE : écriture du défaut aux valeurs spécifiées
08h : déforçage global des bits (UNFORCE_ALL) : le paramètre «value» est
alors non significatif
Retour
Le compte-rendu d’écriture : STATUS_OK lorsque tout se passe bien.
La fonction n’effectue aucun traitement lorsque le nombre de bits à écrire dépasse 32.
La fonction retourne alors INVALID_LENGTH.
Le système retourne UNAVAILABLE_SERVICE lorsqu’il ne reconnaît pas le type
d’action à effectuer.
___________________________________________________________________________
187
FRANÇAIS
Ecriture de bits consécutifs de la mémoire forçable ; la fonction permet d’écrire jusqu’à
32 bits localisés à l’adresse fournie en entrée.
Fonctions système
Exemples
FRANÇAIS
void far pascal FONCTION(adrFBIT AdresseBit)
{
unsigned short
Status;
:
:
Status = wr_bits (AdresseBit,17,0x194AC,DATA_WRITE);
:
:
}
___________________________________________________________________________
188
Fonctions système
value = rd_16bits ( address )
unsigned short
adrFBIT
value
address
Lecture de la valeur (bit de donnée) de 16 bits consécutifs de la mémoire des bits
forçables.
L’EF qui utilise ce service doit garantir la validité de l’adresse passée en paramètre
;
le système ne contrôle pas que l’adresse fait référence à l’espace des bits forçables
de l’automate, ni que les 16 bits se trouvent tous dans cet espace.
Paramètres d'entrée
address :
Adresse du premier bit à lire, de type adrFBIT (cf. § 6.1-1).
Retour
La valeur de la chaîne de bits référencée.
Exemples
void far pascal FONCTION(adrFBIT AdresseBit)
{
unsigned short
Valeur;
:
:
Valeur = rd_16bits (AdresseBit);
:
:
}
___________________________________________________________________________
189
FRANÇAIS
Description
Fonctions système
wr_16bits ( address , value )
adrFBIT
unsigned short
address
value
Description
FRANÇAIS
Ecriture de la valeur de 16 bits consécutifs de la mémoire forçable.
Dans la mesure où aucun contrôle n’est effectué par le système, l’EF qui utilise ce
service doit garantir la validité de l’adresse des 16 bits qui est passée en paramètre.
Paramètres d'entrée
address :
value :
Adresse du premier bit forçable à écrire, de type adrFBIT (cf. § 6.1-1).
Valeurs à écrire sur un mot.
Retour
Néant
Exemples
void far pascal FONCTION(adrFBIT AdresseBit)
{
:
:
wr_16bits (AdresseBit,0xAFC1);
:
:
}
___________________________________________________________________________
190
Fonctions système
value = rd_1bit ( address )
unsigned short
adrFBIT
value
address
Description
Paramètres d'entrée
address :
Adresse du bit à lire, de type adrFBIT (cf. § 6.1-1).
Retour
La valeur du bit référencé (0 ou 1).
Exemples
void far pascal FONCTION(adrFBIT AdresseBit)
{
unsigned short
Valeur;
:
:
Valeur = rd_1bit (AdresseBit);
:
:
}
___________________________________________________________________________
191
FRANÇAIS
Lecture de la valeur (bit de donnée) d'un bit forçable.
L’EF qui utilise ce service doit garantir la validité de l’adresse passée en paramètre
;
le système ne vérifiant pas que celle-ci est comprise dans l’espace des bits forçables
de l’automate.
Fonctions système
wr_1bit ( address , value )
adrFBIT
unsigned short
address
value
Description
FRANÇAIS
Ecriture de la valeur d'un bit forçable.
Dans la mesure où aucun contrôle n’est effectué par le système, l’EF qui utilise ce
service doit garantir la validité de l’adresse du bit qui est passée en paramètre.
Paramètres d'entrée
address :
value :
Adresse du bit forçable à écrire, de type adrFBIT (cf. § 6.1-1).
Valeurs à écrire sur un mot : celle-ci vaut 0 ou 1.
Retour
Néant
Exemples
void far pascal FONCTION(adrFBIT AdresseBit)
{
:
:
wr_1bit (AdresseBit,0);
:
:
}
___________________________________________________________________________
192
Fonctions système
result = phy_ptr_init ( sel_off )
void far*
PTR_LOG
result
sel_off
Description
La fonction détermine une adresse physique à partir d’une référence logique au format
sélecteur : offset .
address :
Adresse logique de type PTR_LOG à convertir en pointeur physique 32
bits (cf. § 6.1-1).
Retour
Le pointeur far correspondant à l’adresse logique fournie en entrée.
En cas d’échec (adresse logique non valide pour cette configuration), la fonction
retourne INVALID_ADDRESS.
Exemples
//Conversion d'une adresse logique de type adrTABLE en une adresse physique
void far* CalculAdrPhy(adrTABLE far* pwTable)
{
PTR_LOG
SLog;
SLog.sel = pwTable->selecteur;
SLog.off = (unsigned short near *)pwTable->offset;
return(phy_ptr_init(SLog));
}
//Exemple d'EF d'addition de 2 mots
void far pascal ADDITION(short A, short B, adrSCAL Resultat)
{
PTR_LOG
SLog;
void far*
pSomme;
SLog.sel = Resultat.selecteur;
SLog.off = (unsigned short near *)Resultat.offset;
pSomme = phy_ptr_init(SLog);
*pSomme = A+B;
}
___________________________________________________________________________
193
FRANÇAIS
Paramètres d'entrée
Fonctions système
status = date_and_time ( date_ptr )
unsigned short
DATE_TIME
status
far * date_ptr
Description
FRANÇAIS
Lecture de la date et de l’heure courante de l’automate.
L’information est codée en BCD sur 9 octets utiles (soit 18 digits) , suivant le format cidessous.
Les années bissextiles sont gérées.
J. / sem. Année
Mois
Jour
Heure
[ 01..07 ] [ 0000...9999 ] [ 01...12 ] [ 01...31 ]
x
x
x
octet 8
x x
octet 7&6
x
x
Mot 3
Légende :
x
x
............
x
Minute
[ 00...23 ]
x
x
x
............ octet 2
Mot 2
Seconde
[ 00...59 ]
x
x
x
octet 1
Mot 1
x est un digit = [ 0..9 ]
J./sem. est le jour de la semaine = 01
02
03
04
05
06
07
reservé
[ 00...59 ]
00
x
x
octet 0
Mot 0
: Lundi
: Mardi
: Mercredi
: Jeudi
: Vendredi
: Samedi
: Dimanche
Paramètres d'entrée
date_ptr :
Un pointeur far sur la zone de recopie de la date et de l’heure courante
(9 octets). Le type DATA_TIME est décrit au § 6.1-1
Retour
La fonction retourne CLOCK_UNAVAILABLE si elle n’a pas pu mettre à jour la zone
de résultat (cas de contension sur les accès à l’horodateur).
Si l’opération s’est bien passée (les champs de date et d’heure sont correctement
renseignés) , le status vaut STATUS_OK.
L’automate répond CLOCK_NOT_SUPPORTED s’il ne dispose pas d’horodateur.
___________________________________________________________________________
194
Fonctions système
Exemples
FRANÇAIS
DATE_TIME Buffer;
Status = date_and_time(&Buffer);
___________________________________________________________________________
195
Fonctions système
value = cnt_100ms ( void )
unsigned long
value
Description
Le système lit la valeur d’un compteur interne qui a pour base de temps 100ms.
Paramètres d'entrée
FRANÇAIS
Néant
Retour
La valeur du compteur , qui possède les caractéristiques suivantes :
• valeur non signée , de 0 à 4 294 967 295
• remis à zéro sur reprise à froid et sur mise à un du bit système %S0
• non incrémenté pendant les coupures secteur
___________________________________________________________________________
196
Fonctions système
value = cnt_10ms ( void )
unsigned long
value
Description
Compteur système qui a pour base de temps 10ms.
Paramètres d'entrée
Retour
La valeur du compteur , qui possède les caractéristiques suivantes :
• valeur non signée , de 0 à 4 294 967 295
• remis à zéro sur reprise à froid uniquement
• non incrémenté pendant les coupures secteur
___________________________________________________________________________
197
FRANÇAIS
Néant
Fonctions système
info = proc_type ( void )
PROC_IDENT
info
Description
Identification du type de processeur qui exécute l'application.
Paramètres d'entrée
FRANÇAIS
Néant
Retour
Une structure de type PROC_IDENT (cf. § 6.1-1) contenant plusieurs informations
d’identification :
• la gamme du processeur sur un octet :
04h : TSX37
05h : TSX57
• la version logicielle SMART présente dans le processeur, sur un octet :
- en quartet de poids fort , le numéro de version
- en quartet de poids faible , le numéro de révision (release)
• le code de référence catalogue du modèle d’UC sur un mot :
01h
02h
03h
01h
02h
03h
04h
05h
06h
07h
08h
09h
10h
11h
:
:
:
:
:
:
:
:
:
:
:
:
:
:
REFCAT_TSX37_10
REFCAT_TSX37_21
REFCAT_TSX37_22
REFCAT_TSX57_10
REFCAT_TSX57_20
REFCAT_PMX57_20
REFCAT_TSX57_30
REFCAT_TSX57_10_V3
REFCAT_TSX57_20_V3
REFCAT_TSX57_25_V3
REFCAT_TSX57_30_V3
REFCAT_TSX57_35_V3
REFCAT_TSX57_40_V3
REFCAT_TSX57_45_V3
Exemples
PROC_IDENT
Info;
Info = proc_type( );
___________________________________________________________________________
198
Fonctions système
info = proc_indic ( void )
PROC_INDIC
info
Description
Information sur la configuration de la mémoire application dans l’automate.
Paramètres d'entrée
Retour
Une structure de type PROC_INDIC (cf. § 6.1-1) contenant des informations sur :
• l’état de l’automate :
- en Run, réservé, en arrêt Breakpoint, en Halt, en Run partiel.
• la validité de l’application
• la présence éventuelle d’une cartouche mémoire
• le type de mémoire application : non modifiable / modifiable
Exemples
PROC_INDIC
Info;
Info = proc_indic( );
___________________________________________________________________________
199
FRANÇAIS
Néant
Fonctions système
Res = ADD ( a, b )
FLOAT
FLOAT
FLOAT
Res
a
b
Description
Res = a + b
Somme de deux nombres réels (au format IEEE simple précision)
Paramètres d'entrée
FRANÇAIS
FLOAT a
FLOAT b
Retour
FLOAT Res
Exemples
// Exemple d'EF d'addition de 2 nombres réels
unsigned long far pascal ADDF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
FLOAT f1, f2, f;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
f = ADD (f1, f2);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
+/- 1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
(- ∞) + (+ ∞)
- 1. #NAN
1 : flag_InvalideOp
opération invalide
(+ ∞) + (- ∞)
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
200
Fonctions système
Res = SUB ( a, b )
FLOAT
FLOAT
FLOAT
Res
a
b
Description
Res = a - b
Soustraction de deux nombres réels (au format IEEE simple précision)
Paramètres d'entrée
FRANÇAIS
FLOAT a
FLOAT b
Retour
FLOAT Res
Exemples
// Exemple d'EF de soustraction de 2 nombres réels
unsigned long far pascal SUBF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
FLOAT f1, f2, f;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
f = SUB (f1, f2);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
+/- 1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
(+ ∞) - (+ ∞)
- 1. #NAN
1 : flag_InvalideOp
opération invalide
(- ∞) - (- ∞)
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
201
Fonctions système
Res = MUL ( a, b )
FLOAT
FLOAT
FLOAT
Res
a
b
Description
Res = a x b
Produit de deux nombres réels (au format IEEE simple précision)
Paramètres d'entrée
FRANÇAIS
FLOAT a
FLOAT b
Retour
FLOAT Res
Exemples
// Exemple d'EF de produit de 2 nombres réels
unsigned long far pascal MULF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
FLOAT f1, f2, f;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
f = MUL (f1, f2);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
+/- 1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
0 *∞
+/- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
202
Fonctions système
Res = DIV ( a, b )
FLOAT
FLOAT
FLOAT
Res
a
b
Description
Res = a / b
Division de deux nombres réels (au format IEEE simple précision)
Paramètres d'entrée
FRANÇAIS
FLOAT a
FLOAT b
Retour
FLOAT Res
Exemples
// Exemple d'EF de division de 2 nombres réels
unsigned long far pascal DIVF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
FLOAT f1, f2, f;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
f = DIV (f1, f2);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
0 / 0 et ∞ / ∞
1. #NAN
1 : flag_InvalideOp
opération invalide
a ou b = +-1.#NAN
+/- 1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
a quelconque b=0
+/-∞
4 : flag_ZeroDivide
division par zéro
___________________________________________________________________________
203
Fonctions système
Res = EQU ( a, b )
unsigned short
FLOAT
FLOAT
Res
a
b
Description
si a = b alors Res = 1
sinon Res = 0
Teste l'égalité de deux nombres réels (au format IEEE
simple précision)
FRANÇAIS
Paramètres d'entrée
FLOAT a
FLOAT b
Retour
unsigned short Res
Exemples
// Exemple d'EF de test d'égalité de 2 nombres réels
short far pascal EQUF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
unsigned short nEqual;
FLOAT f1, f2;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
nEqual = EQU (f1, f2);
return (nEqual);
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
a ou b = #NAN
la comparaison se fait bien
0 : Status_Ok
Ok
___________________________________________________________________________
204
Fonctions système
Res = SUP ( a, b )
unsigned short
FLOAT
FLOAT
Res
a
b
Description
si a > b alors Res = 1
sinon Res = 0
Teste la supériorité d'un nombre réel par rapport à un
autre nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FRANÇAIS
FLOAT a
FLOAT b
Retour
unsigned short Res
Exemples
// Exemple d'EF de test de supériorité d'un nombre réel par rapport à un autre nombre
réel
short far pascal SUPF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
unsigned short nSup;
FLOAT f1, f2;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
nSup = SUP (f1, f2);
return (nSup);
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
résultat toujours FAUX
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
___________________________________________________________________________
205
Fonctions système
Res = INF ( a, b )
unsigned short
FLOAT
FLOAT
Res
a
b
Description
si a < b alors Res = 1
sinon Res = 0
Teste l'infériorité d'un nombre réel par rapport à un autre
nombre réel (au format IEEE simple précision)
FRANÇAIS
Paramètres d'entrée
FLOAT a
FLOAT b
Retour
unsigned short Res
Exemples
// Exemple d'EF de test de l'infériorité d'un nombre réel par rapport à un autre nombre
réel
short far pascal INFF (
unsigned long F1, // valeur d'un %MF
unsigned long F2 // valeur d'un %MF
)
{
unsigned short nInf;
FLOAT f1, f2;
f 1= GET_FLOATPL7 (F1); // conversion vers un flottant
f 2= GET_FLOATPL7 (F2); // conversion vers un flottant
nInf = INF (f1, f2);
return (nInf);
}
Cas particuliers et exceptions
Arguments a et b
résultat res
valeur du status
signification du
status
a ou b = +-1.#NAN
résultat toujours FAUX
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
___________________________________________________________________________
206
Fonctions système
Res = ABS ( a )
FLOAT
FLOAT
Res
a
Description
Res = | a |
Détermine la valeur absolue d'un nombre réel (au format IEEE simple
précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul de la valeur absolue d'un nombre réel
unsigned long far pascal ABSF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = ABS (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
a = +-1.#NAN
1.#NAN de même signe
que a
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
___________________________________________________________________________
207
Fonctions système
Res = CHS ( a )
FLOAT
FLOAT
Res
a
Description
Res = - a
Change le signe d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de changement de signe d'un nombre réel
unsigned long far pascal CHSF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = CHS (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
a = +-1.#NAN
1.#NAN avec signe
opposé de a
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
___________________________________________________________________________
208
Fonctions système
Res = SQRT ( a )
FLOAT
FLOAT
Res
a
Description
Res = √ a
Calcule la racine carrée d'un nombre réel positif (au format IEEE simple
précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul de la racine carrée d'un nombre réel
unsigned long far pascal SQRTF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = SQRT (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
a<0
1.#NAN
1 : flag_InvalideOp
opération invalide
a = +-1.#NAN
+- 1.#NAN
1 : flag_InvalideOp
opération invalide
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
-0
-0
0 : Status_Ok
Ok
___________________________________________________________________________
209
Fonctions système
Res = FTOL ( a )
long
FLOAT
Res
a
Description
Convertit un nombre réel en un entier long (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
long Res
Exemples
// Exemple d'EF de conversion d'un nombre réel en un entier long
long far pascal FTOLF (
unsigned long F // valeur d'un %MF
)
{
long ul;
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
ul = FTOL (f);
return (ul);
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
un des opérandes est
dénormalisé (0#DN)
résultat obtenu en
assimilant l’opérande à +/- 0
2 : flag_Denorm
opérande dénormalisé
| a | trop grand pour la
conversion
8000000H
1 : flag_InvalideOp
opération invalide
a = +-1.#NAN
1.#NAN
1 : flag_InvalideOp
opération invalide
+ ∞ ou - ∞
8000000H
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
210
Fonctions système
Res = LTOF ( a )
FLOAT
long
Res
a
Description
Convertit un double mot en un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
Retour
FLOAT Res
Exemples
// Exemple d'EF de conversion d'un double mot en un nombre réel
unsigned long far pascal LTOFF (
long UL // valeur d'un %MD
)
{
FLOAT f;
f = LTOF (UL);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Aucun cas particulier ou exception.
___________________________________________________________________________
211
FRANÇAIS
long a
Fonctions système
Res = EXP ( a )
FLOAT
FLOAT
Res
a
Description
Res = e a
Calcule la valeur exponentielle d'un nombre réel (au format IEEE simple
précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul de la valeur exponentielle d'un nombre réel
unsigned long far pascal EXPF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = EXP (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
1.0
2 : flag_Denorm
opérande non standard
- 0. #DN
1.0
2 : flag_Denorm
opérande non standard
1. #INF
1. #INF
0 : Status_Ok
Ok
- 1. #INF
0.0
0 : Status_Ok
Ok
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
> 88.72283
1. #INF
8 : flag_Overflow
overflow
< 87.33654
0.0
8 : flag_Underflow
underflow
___________________________________________________________________________
212
Fonctions système
Res = LN ( a )
FLOAT
FLOAT
Res
a
Description
Calcule le logarithme népérien d'un nombre réel positif (au format IEEE simple
précision)
Paramètres d'entrée
FLOAT a
Retour
FRANÇAIS
FLOAT Res
Exemples
// Exemple d'EF de calcul du logarithme d'un nombre réel
unsigned long far pascal LNF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = LN (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
1. #INF
2 : flag_Denorm
opérande non standard
- 0. #DN
- 1. #NAN
1 : flag_InvalideOp
opération invalide (a≤ 0.0)
1. #INF
1. #INF
0 : Status_Ok
Ok
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide (a≤ 0.0)
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
1 : flag_InvalideOp
opération invalide (a≤ 0.0)
< 0.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide (a≤ 0.0)
0.0
1. #INF
0 : Status_Ok
Ok
- 0.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide (a≤ 0.0)
___________________________________________________________________________
213
Fonctions système
Res = SIN ( a )
FLOAT
FLOAT
Res
a
Description
Res = sin (a) Calcule le sinus d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul du sinus d'un nombre réel
unsigned long far pascal SINF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = SIN (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
0.0
2 : flag_Denorm
opérande non standard
- 0. #DN
0.0
2 : flag_Denorm
opérande non standard
1. #INF
1. #INF
1 : flag_InvalideOp
opération invalide (ou imprécision)
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide (ou imprécision)
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
< 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
< - 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
214
Fonctions système
Res = COS ( a )
FLOAT
FLOAT
Res
a
Description
Res = cos (a) Calcule le cosinus d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
FLOAT Res
Exemples
// Exemple d'EF de calcul du cosinus d'un nombre réel
unsigned long far pascal COSF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = COS (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
1.0
2 : flag_Denorm
opérande non standard
- 0. #DN
1.0
2 : flag_Denorm
opérande non standard
1. #INF
1. #INF
1 : flag_InvalideOp
opération invalide (ou imprécision)
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide (ou imprécision)
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
> 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
> - 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
215
FRANÇAIS
Retour
Fonctions système
Res = TAN ( a )
FLOAT
FLOAT
Res
a
Description
Res = tan (a) Calcule la tangente d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
Retour
FRANÇAIS
FLOAT Res
Exemples
// Exemple d'EF de calcul de la tangente d'un nombre réel
unsigned long far pascal TANF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = TAN (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
0.0
2 : flag_Denorm
opérande non standard
- 0. #DN
0.0
2 : flag_Denorm
opérande non standard
1. #INF
1. #NAN
1 : flag_InvalideOp
opération invalide (ou imprécision)
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide (ou imprécision)
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
> 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
< - 4096 π
- 1. #NAN
1 : flag_InvalideOp
opération invalide
π / 2 + kπ , k ≥ 0
1. #INF
8 : flag_Overflow
overflow
π / 2 + kπ , k < 0
- 1. #INF
8 : flag_Overflow
overflow
___________________________________________________________________________
216
Fonctions système
Res = ASIN ( a )
FLOAT
FLOAT
Res
a
Description
Res = asin (a) Calcule l'arcsinus d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
Retour
Exemples
// Exemple d'EF de calcul de l'arcsinus d'un nombre réel
unsigned long far pascal ASINF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = ASIN (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
0.0
2 : flag_Denorm
opérande non standard
- 0. #DN
0.0
2 : flag_Denorm
opérande non standard
1. #INF
1. #NAN
1 : flag_InvalideOp
opération invalide
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
> 1.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide
< 1.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
217
FRANÇAIS
FLOAT Res
Fonctions système
Res = ACOS ( a )
FLOAT
FLOAT
Res
a
Description
Res = acos (a) Calcule l'arccosinus d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
FLOAT a
FRANÇAIS
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul de l'arccosinus d'un nombre réel
unsigned long far pascal ACOSF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = ACOS (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
1.570796
2 : flag_Denorm
opérande non standard
- 0. #DN
1.570796
2 : flag_Denorm
opérande non standard
1. #INF
1. #NAN
1 : flag_InvalideOp
opération invalide
- 1. #INF
- 1. #NAN
1 : flag_InvalideOp
opération invalide
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
> 1.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide
< 1.0
- 1. #NAN
1 : flag_InvalideOp
opération invalide
___________________________________________________________________________
218
Fonctions système
Res = ATAN ( a )
FLOAT
FLOAT
Res
a
Description
Res = atan (a) Calcule l'arctangente d'un nombre réel (au format IEEE simple précision)
Paramètres d'entrée
Retour
FLOAT Res
Exemples
// Exemple d'EF de calcul de l'arctangente d'un nombre réel
unsigned long far pascal ATANF (
unsigned long F // valeur d'un %MF
)
{
FLOAT f;
f= GET_FLOATPL7 (F); // conversion vers un flottant
f = ATAN (f);
return (FLOAT_TOPL7(f)); // conversion inverse
}
Cas particuliers et exceptions
Argument a
résultat res
valeur du status
signification du
status
0. #DN
0.0
2 : flag_Denorm
opérande non standard
- 0. #DN
0.0
2 : flag_Denorm
opérande non standard
1. #INF
1.570796
0 : Status_Ok
Ok
- 1. #INF
- 1.570796
0 : Status_Ok
Ok
1. #NAN
1. #NAN
0 : Status_Ok
Ok
- 1. #NAN
- 1. #NAN
0 : Status_Ok
Ok
___________________________________________________________________________
219
FRANÇAIS
FLOAT a
FRANÇAIS
Fonctions système
___________________________________________________________________________
220
Fonctions
utilitaires
Chapitre
8
8 Fonctions utilitaires
Il est possible de faire appel, dans le corps d'une EF, à des fonctions utilitaires.
En voici la liste :
Fonctions utilitaires de conversion
• GET_FLOATPL7 :
conversion d'un réel Pl7 vers un FLOAT
• FLOAT_TOPL7:
conversion d'un FLOAT vers un réel Pl7
• FLOAT_TO_DBG:
conversion d'un FLOAT vers un FLOAT_DBG pour visualisation en debug
• FLOAT_SETVALUE :
affecte une valeur flottante dans une adresse Pl7
• WORD_SETVALUE :
affecte une valeur de type mot dans une adresse Pl7
• DWORD_SETVALUE :
affecte une valeur de type double mot dans une adresse
Pl7
• GET_ADDR :
donne l' adresse réelle d'une variable (sous forme de
pointeur) à partir d'une adresse Pl7
Remarque : Comme il est possible, en utilisant ces fonctions, d'aller écrire dans la
mémoire de l'automate, des précautions d'accès sont à prendre en compte par
l'utilisateur.
Exemple : Lorsqu'un tableau est passé en paramètre d'une EF, attention à ne pas
accéder à des mots en dehors de ce tableau. La vérification peut s'effectuer en testant
sa longueur.
Les pages suivantes décrivent ces fonctions, leurs paramètres, les types utilisés en
s'appuyant sur des exemples.
___________________________________________________________________________
221
FRANÇAIS
Fonctions utilitaires d'accès aux variables automate
Fonctions utilitaires
value = GET_FLOATPL7 ( fvalPl7 )
unsigned long
unsigned long
value
fvalPl7
Description
Convertit un flottant venant de Pl7 en un nombre de type FLOAT permettant d'utiliser
les fonctions flottantes.
Paramètres d'entrée
FRANÇAIS
unsigned long fvalPl7
Retour
FLOAT value
Exemples
// Exemple d'EF de conversion
// Retour déclaré en real
unsigned long far pascal monef (
unsigned long IN1, // déclaré en REAL dans SDKC
)
{
FLOAT fval;
fval = GET_FLOATPL7 (IN1); // conversion vers un FLOAT
}
___________________________________________________________________________
222
Fonctions utilitaires
fvalPl7 = FLOAT_TOPL7 ( f )
unsigned long
FLOAT
fvalPl7
f
Description
C'est la fonction réciproque de GET_FLOATPL7, elle convertit un nombre de type
FLOAT en flottant du langage Pl7. Cette fonction doit être appelée avant de retourner
un flottant dans le cas d'une EF fonction.
FLOAT f
Retour
unsigned long fvalPl7
Exemples
// Exemple d'EF fonction qui retourne la valeur 2.1
// Retour déclaré en REAL dans SDKC
unsigned long far pascal monef (
)
{
FLOAT fval;
fval = FVALUE (2.1);
return (FLOAT_TOPL7 (fval));
}
___________________________________________________________________________
223
FRANÇAIS
Paramètres d'entrée
Fonctions utilitaires
value = FLOAT_TO_DBG( f )
FLOAT_DBG
FLOAT
value
f
Description
Cette fonction a un intérêt uniquement pour débugger l'EF. Elle permet de visualiser
une variable FLOAT. Elle convertit une variable FLOAT en une variable FLOAT_DBG
car seules les variables FLOAT_DBG sont visualisables au format flottant par debugEF.
FRANÇAIS
Paramètres d'entrée
FLOAT
Retour
FLOAT_DBG
Exemples
Extrait du code de l'EF
FLOAT_DBG fv;
FLOAT fval;
fval = fvalue (1.1);
fv = FLOAT_TO_DBG (fval); // fv est visualisable dans l'outil debugEF de Pl7
Visualisation de fv dans debugEF de Pl7
fv = (union)
fl = +1.1000000E+000
ul = 0x3F8CCCCD
___________________________________________________________________________
224
Fonctions utilitaires
FLOAT_SETVALUE ( selecteur, offset, valeur )
unsigned short
unsigned short
unsigned short
selecteur
offset
valeur
Description
Paramètres d'entrée
unsigned short selecteur : adresse de la variable Pl7 (sélecteur)
unsigned short offset :
adresse de la variable Pl7 (offset)
FLOAT valeur :
valeur que l'on désire mettre dans la variable Pl7
Retour
Aucun
Exemples
//
void far pascal AFFECT (
adrSCAL OUT1, // adresse d'un %MF
adrSCAL OUT2, // adresse d'un %MF
)
{
// On met dans OUT1 la valeur dircte 1.0E2 et dans OUT2 la valeur 2.1
FLOAT_SETVALUE (OUT1.selecteur, OUT1.offset, FVALUE (1.0E2));
FLOAT_SETVALUE (OUT2.selecteur, OUT2.offset, FVALUE (2.1));
}
___________________________________________________________________________
225
FRANÇAIS
Affecte directement une valeur de type FLOAT à une adresse Pl7 (sélecteur offset).
Cette fonction simplifie l'utilisation de la fonction phy_ptr_init (cf. Chap. 7).
Les valeurs sélecteur offset proviennent directement d'une variable Pl7 de type
adrSCAL.
Fonctions utilitaires
WORD_SETVALUE ( selecteur, offset, valeur )
unsigned short
unsigned short
unsigned short
selecteur
offset
valeur
Description
FRANÇAIS
Affecte directement une valeur de type mot à une adresse Pl7 (sélecteur offset). Cette
fonction simplifie l'utilisation de la fonction phy_ptr_init (cf. Chap. 7).
Les valeurs sélecteur offset proviennent directement d'une variable Pl7 de type
adrSCAL.
Paramètres d'entrée
unsigned short selecteur : adresse de la variable Pl7 (sélecteur)
unsigned short offset :
adresse de la variable Pl7 (offset)
short valeur :
valeur que l'on désire mettre dans la variable Pl7
Retour
Aucun
Exemples
//
void far pascal AFFECT (
short value, // valeur
adrSCAL OUTW // adresse d'un %MW
)
{
// On met dans OUTW la valeur directe value
WORD_SETVALUE (OUTW.selecteur, OUTW.offset, value);
}
___________________________________________________________________________
226
Fonctions utilitaires
DWORD_SETVALUE ( selecteur, offset, valeur )
unsigned short
unsigned short
unsigned short
selecteur
offset
valeur
Description
Paramètres d'entrée
unsigned long selecteur :
unsigned long offset :
long valeur :
adresse de la variable Pl7 (sélecteur)
adresse de la variable Pl7 (offset)
valeur que l'on désire mettre dans la variable Pl7
Retour
Aucun
Exemples
//
void far pascal AFFECT (
adrSCAL OUTD // adresse d'un %MD
)
{
// On met dans OUTW la valeur dircte 122003
DWORD_SETVALUE (OUTD.selecteur, OUTD.offset, 122003);
}
___________________________________________________________________________
227
FRANÇAIS
Affecte directement une valeur de type mot double à une adresse Pl7 (sélecteur offset).
Cette fonction simplifie l'utilisation de la fonction phy_ptr_init (cf. Chap. 7).
Les valeurs sélecteur offset proviennent directement d'une variable Pl7 de type
adrSCAL.
Fonctions utilitaires
ptr = GET_ADDR ( selecteur, offset )
void far*
unsigned short
unsigned short
ptr
selecteur
offset
Description
Renvoie l' adresse réelle d'une variable Pl7 (sous forme d'un pointeur C) à partir d'une
adresse PL7.
Les valeurs sélecteur offset proviennent directement d'une variable Pl7 de type
adrSCAL.
FRANÇAIS
Paramètres d'entrée
unsigned short selecteur : adresse de la variable Pl7 (sélecteur)
unsigned short offset :
adresse de la variable Pl7 (offset)
Retour
void far* ptr : pointeur
Exemples
// Exemple d'EF qui affecte 123 dans un tableau mots %MW et 122223 dans un tableau
// de mots doubles %MD
void far pascal GESTTAB (
adrTABLE TAB1, // adresse d'un tableau de %MW
adrTABLE TAB2 // adresse d'un tableau de %MD
)
{
// Déclarations
short far* adr1;
long far* adr2;
int i, j;
adr1 = GET_ADDR (TAB1.selecteur, TAB1.offset);
adr2 = GET_ADDR (TAB2.selecteur, TAB2.offset);
for (i = 0; i < TAB1.taille; i++)
* adr1++ = 123;
// on affecte 123 à l'adresse pointée par adr1 et on
incrémente l'adresse
for (j = 0; j < TAB2.taille; j++)
* adr2++ = 122223; // on affecte 122223 à l'adresse pointée par adr2 et on
incrémente l'adresse
}
___________________________________________________________________________
228
Annexes9
Chapitre
9 Annexes
9.1
Exemple
9.1-1 Définition de l'EF
L'exemple suivant donne la marche à suivre pour créer une EF permettant d'extraire
la valeur maximale d'un tableau de mots.
FRANÇAIS
Ecran de définition de la famille "Programme" (cf. § 3.1-1)
Ecran de définition de la classe "Class1" (cf. § 3.1-2)
___________________________________________________________________________
229
Annexes
FRANÇAIS
Ecran de définition de l'EF "MAX_TABW" (cf. § 3.1-3)
Ecran de l'onglet Interface de lEF "MAX_TABW" (cf. § 3.1-3)
___________________________________________________________________________
230
Annexes
La partie située au dessus du trait pointillé est la partie commune du code source C, elle
est insérée automatiquement par l'outil.
La partie située au dessous du trait pointillé représente le corps du code source C, saisi
ou importé par l'utilisateur (n'est visible sur cet écran que le début, l'ensemble de ce code
fait l'objet des deux pages suivantes.
Ecran de l'onglet Source .H de l'EF "MAX_TABW" (cf. § 3.1-3)
___________________________________________________________________________
231
FRANÇAIS
Ecran de l'onglet Source .C de l'EF "MAX_TABW" (cf. § 3.1-3)
Annexes
Code source C de l'EF
FRANÇAIS
En-tête
//PL7SDK_BEGIN_FUNCTION_NAME
// do not modify the generated function prototype please
// The main EF Function must be the first in this file
#include <Cstsyst.h>
#include <Fctsyst.h>
#include <C:\ASAWTEMP\SDKC\CLASSE01.H>
#include <C:\ASAWTEMP\SDKC\MAIN0101.H>
void far pascal MAX_TABW(
adrTABLE TAB,
adrSCAL MAX)
//PL7SDK_END_FUNCTION_NAME
{
adrTABLE far *pwTable=&TAB; /* pointeur structure adresse logique table*/
short far *pcPhyTable;
/* pointeur adresse physique table de mot*/
short Resultat= TABLEVIDEMAX_ARW; /* init résultat fonction */
short TailleTab;
short I;
short far* pResultat;
PTR_LOG SLog;
SLog.sel = MAX.selecteur;
SLog.off = (unsigned short near *)MAX.offset;
pResultat = phy_ptr_init(SLog);
/* calculer l’adresse physique du tableau d’entrée et la taille de la table*/
pcPhyTable = CalculAdrPhy(pwTable);
TailleTab = LimTableOk(pwTable);
/* si adresse incorrecte
ou si la longueur du tableau est nulle
ou si la longueur de la table est supérieure à LGMAXTBWORD)
monter S20 et positionner résultat ‡ TABLEVIDE (fait a l’init)*/
if (((DWORD)pcPhyTable == NILL)||(TailleTab == 0))
{
SetS20();
}
/* si non */
else
{
/* faire la recherche */
Resultat=*pcPhyTable;
for (I=PREMELEMENT;I<TailleTab;I++)
___________________________________________________________________________
232
Annexes
{
//contrôle les bornes d’une table de 32 Ko
short LimTableOk(adrTABLE far *pwTable)
{
short Resultat = FALSE;
if ((pwTable->taille < LGMAXTBWORD)&&(pwTable->taille>0))
{
Resultat = pwTable->taille;
}
return(Resultat);
}
void far * CalculAdrPhy(adrTABLE far * pwTable)
{
PTR_LOG
SLog;
// récupération des paramètres d’identification des paramètres
SLog.sel= pwTable->selecteur;
SLog.off= (unsigned short near *)pwTable->offset;
// calculer les adresses physiques des paramètres
return( phy_ptr_init (SLog));
}
// Positionnement du bit système %S20 sur défaut de pointeurs de paramètre
void SetS20 ( )
{
WORD
Sysbit,Value,Status;
Sysbit =20;
Value = 1;
Status = wr_sysbit (Sysbit, Value);
// appel smart
}
___________________________________________________________________________
233
FRANÇAIS
if (*pcPhyTable>Resultat)
{
Resultat=*pcPhyTable;
}
pcPhyTable++;
}
}
/* fsi*/
*pResultat= Resultat;
}
Annexes
9.1-2 Génération d'une disquette et installation de la famille
Pour générer la disquette d'installation, il faut d'abord choisir Personnaliser du menu
Services, pour paramétrer le chemin de destination.
FRANÇAIS
Espace de saisie du lecteur où
seront placés les fichiers permettant l'installation d'une famille d'EF
Générer Release va copier sur la disquette insérée dans le lecteur A:, les fichiers
nécessaires à l'installation de la famille dans la bibliothèque de PL7.
Sur le poste client, il faut insérer la disquette dans le lecteur, lancer le fichier
SETUP.EXE et suivre la procédure d'installation.
9.2
Equivalences clavier
Voici la liste des équivalences clavier :
• CTRL + S :
Sauver
• F7 :
Générer la famille en debug
• CTRL + F7 :
Générer la famille en release
___________________________________________________________________________
234
Annexes
9.3
En cas de problème
• Installation de famille en bibliothèque impossible :
- Cause possible : PL7 n'est pas installé
- Solution :
Installer PL7 micro, Junior ou Pro
• Le menu Outils / Mise au point n'apparait pas dans PL7 :
- Cause possible : PL7 a été desinstallé, puis réinstallé
- Solution :
Faire une nouvelle installation de PL7SDKC
• Erreur fatale dans PL7, lors de la mise à jour à l'aide du bouton "Mise à jour famille",
d'une famille développée avec PL7SDKC :
- Solution :
Conserver dans la famille l'ancienne version de l'EF, ou supprimer les appels à cette EF
• Les fichiers include ne sont pas trouvés à la génération
- Solution :
Ajouter la ligne suivante dans le fichier CONFIG.SYS
SHELL=C:\Command.com C:\ /E:1024 /P
___________________________________________________________________________
235
FRANÇAIS
- Cause possible : Une EF de la famille a été supprimée ou l'interface d'une EF a été
modifiée

Manuels associés