 Génération du code

La fenêtre du générateur de code est automatiquement ouverte par les commandes "Vérifier" et "Générer l'application" des autres fenêtres de l'atelier ISaGRAF. Elle n'est pas automatiquement refermée à la fin de la fonction requise, ce qui permet à l'utilisateur l'accès aux autres commandes de génération de code et de paramétrage du code fabriqué.

Commandes principales

Options de compilation

Génération de code source C

Affichage des résultats

Définition des resources


Commandes principales

Le menu "Fichier" groupe les commandes de génération du code et de vérification syntaxique des programmes.

Générer l'application

Vérifier la syntaxe des programmes

Simuler une modification

Cliquez deux fois sur un message d'erreur pour ouvrir le programme correspondant à l'emplacement où l'erreur a été détectée.


Générer l'application

La commande "Générer" construit le code cible du projet ouvert. Avant la génération, cette commande vérifie la syntaxe des déclarations et des programmes. Toute erreur qui ne peut pas être détectée lors de la vérification isolée d'un programme est détectée à la génération du code. Ceci s'applique aux tables de conversion, le câblage des variables d'E/S et les liens avec les librairies. La génération de code s'arrête après le premier programme contenant une erreur. Ce programme doit être corrigé avant de continuer la génération. Les programmes déjà vérifiés (sans erreur) et qui n'ont pas été modifiés ne sont pas re-vérifiés. La vérification du dictionnaire est toujours effectuée. Pendant la vérification des programmes, la commande "Générer" peut être interrompue en frappant la touche "ECHAP".

Note: Si la déclaration d'une variable locale à un programme a été modifiée, le programme correspondant est vérifié. Si une variable globale est modifiée, tous les programmes sont vérifiés (de même pour les définitions de mots équivalents)


Vérifier la syntaxe des programmes

La commande "Vérifier un programme" lance la vérification d'un seul programme, même s'il n'a pas été modifié. La commande "Vérifier le dictionnaire" permet de lancer de façon isolée la vérification du dictionnaire de variables du projet. La commande "Vérifier tous les programmes" lance la vérification de tous les programmes du projet, même s'ils n'ont pas été modifiés. Cette commande ne s'arrête pas lorsque des erreurs sont détectées dans un programme. Elle peut donc être utilisée pour produire un listing complet de toutes les erreurs subsistant dans le projet. Cette commande peut être interrompue en frappant la touche "ECHAP".


Simuler une modification

La commande "Simuler une modification" met à jour tous les programmes sans modifier leur contenu, de façon à ce qu'ils soient tous vérifiés lors de la prochaine génération de code. La commande "Ouvrir" lance l'édition du dernier programme vérifié. Cette commande permet un accès rapide aux erreurs détectées lors de la vérification d'un programme.


Options de compilation

La commande "Options de compilation" permettent de configurer les paramètres utilisés par le générateur de code d'ISaGRAF pour construire et optimiser le code exécutable. Le but de cette commande est de choisir les cibles ISaGRAF pour lesquelles le code doit être généré, et de positionner les paramètres d'optimisation pour établir le meilleur compromis entre le temps de compilation et les performances de l'application à l'exécution.

Sélection des cibles

Traduction des graphes SFC

Options d'optimisation

Le bouton "Télélecture" ouvre une seconde boîte pour la saisie des options concernant l'embarquement des sources compactées avec le code téléchargé, de façon à permettre la récupération de l'application par télélecture. Référez-vous au chapître "Télélecture" pour plus d'information.


Sélection des cibles

La liste du haut montre les différentes cibles ISaGRAF supportées. Le signe ">>" indique le(s) cible(s) sélectionnée(s). Le générateur de code d'ISaGRAF peut construire parallèlement jusqu'à 3 types de code différents. Utilisez les boutons "Sélectionner" et "Libérer" pour indiquer quel type de code doit être produit, en accord avec le type de logiciel ISaGRAF installé sur votre cible. Voici la liste des cibles ISaGRAF:

SIMULATE:	Ce code est dédié au Simulateur de l'atelier ISaGRAF. Le simulateur ne pourra pas être lancé si cette cible n'a pas été sélectionnée poour la génération du code.

ISA86M:	C'est un code TIC (Target Independent Code) dédié aux noyaux exécutifs ISaGRAF installés sur des processeurs de type Intel. Le type de processeur concerne l'ordre des octets de poids fort et faible dans le code généré.

ISA68M:	C'est un code TIC (Target Independent Code) dédié aux noyaux exécutifs ISaGRAF installés sur des processeurs de type Motorola. Le type de processeur concerne l'ordre des octets de poids fort et faible dans le code généré.

SCC:	La sélection de cette cible indique qu'ISaGRAF doit générer l'application sous la forme de code source "C" structuré qui sera compilé et lié avec les autres librairies du noyau cible ISaGRAF pour produire un exécutable.

CC86M:	La sélection de cette cible indique qu'ISaGRAF doit générer l'application sous la forme de code source "C" non structuré qui sera compilé et lié avec les autres librairies du noyau cible ISaGRAF pour produire un exécutable. Cette sélection est fournie pour la compatibilité avec les systèmes antérieurs à la version V3.23 d'ISaGRAF, quand la génération de code "C" structuré n'était pas supportée.

Référez-vous au manuel d'utilisation de votre automate pour connaître le type de code à générer. D'autres types de code (code machine, code source X...) pourront être supportés dans les versions futures de l'atelier ISaGRAF.


Traduction des graphes SFC

Validez l'option "Utiliser le moteur SFC embarqué" pour valider l'utilisation du moteur SFc dans la cible ISaGRAF. Ce mode est préférable, car il induit en général de meilleures performances. Toutefois, le moteur SFc peut être absent dans certaines implémentations de la cible ISaGRAF, ou plus particulièrement sur les implémentations d'ISaGRAF basées sur une post-compilation du code. Dans ce cas, vous devez retirer cette option, et ISaGRAF traduit tous les graphes SFC en instructions classiques. Référez-vous au guide d'utilisation de votre automate pour plus d'information sur l'utilisation de cette option.


Options d'optimisation

Cette section présente les paramètres utilisés par le générateur de code d' ISaGRAF pour optimiser le code généré. Ces paramètres peuvent être configurés à l'aide la boîte de dialogue "Options de compilation". Le bouton "Par défaut" permet de retirer toutes les options d'optimisation, afin de réduire le temps de compilation des programmes.

Quand l'option "Deux passes" est sélectionnée, L'optimiseur de code d'ISaGRAF est lancé deux fois de suite. Les optimisations réalisées lors de la seconde passe sont généralement moins significatives que celles réalisées dans la première passe.

Quand l'option "Expressions constantes" est sélectionnée, les expressions numériques constantes sont évaluéess par le compilateur. Par exemple, l'expression "2 + 3" est remplacée par "5" dans le code cible. Quand cette option n'est pas sélectionnée, les expressions sont calculées pendant l'exécution de l'application.

Quand l'option "Etiquettes inutilisées" est sélectionnée, l'optimiseur simplifie le système de sauts et d'étiquettes des programmes compilés, afin de supprimer les éventuels sauts "nuls" et étiquettes inutilisées.

Quand l'option "Copie des variables" est sélectionnée, l'utilisation des variables temporaires (utilisées pour stocker les résultats intermédiaires) est optimisée. Cette option est généralement utilisée avec l'option "Expressions". Quand cette option est sélectionnée, l'optimiseur cherche à ré-utiliser les expressions ou sous-expressions qui apparaissent plusieurs fois dans le programme.

Quand l'option "Code inutilisé" est sélectionné, l'optimiseur supprime les portions de code non significatives. Par exemple, si les instructions suivantes sont programmées: "var := 1; var := X;", le code généré est seulement: "var := X;".

Quand l'option "Opérations arithmétiques" est sélectionnée, l'optimiseur simplifie les opérations numériques en fonction des opérandes particuliers. Par exemple, l'expression "A + 0" est remplacée par "A". Quand l'option "Opérations booléennes" est sélectionnée, l'optimiseur simplifie les opérations logiques en fonction des opérandes particuliers. Par exemple, l'expression "A & A" est remplacée par "A".

Quand l'option "Diagrammes binaires" est sélectionnée, l'optimiseur remplace les équations booléennes (mêlant les opérateurs AND, OR , XOR et NOT), par une liste réduite de sauts conditionnels. La traduction n'est effectuée que si le temps d'exécution attendu pour la liste de sauts est plus faible que celui attendu poour l'expression originale.

La table suivante présente un résumé des temps et des résultats d'optimisation attendus, en fonction des différents paramètres:

gain (performances)	temps de compilation

Deux passes	xxxx	(*)

Expressions constantes	xxxxxxxxxx	xxxx

Etiquettes inutilisées	xxxx	xxxxxxxxxx

Copie de variables	xxxx	xxxxxxxxxx

Expressions	xxxx	xxxxxxxxxx

Code inutilisé	xxxx	xxxxxxxxxx

Opérations arithmétiques	xxxxxxxxxx	xxxx

Opérations booléennes	xxxxxxxxxx	xxxx

Diagrammes binaires	xxxxxxxxxxxxxxx	xxxxxxxxxxxxxxx

(*) le temps de compilation est également doublé.


Génération de code source C

L'atelier ISaGRAF supporte la génération de code source en langage "C". Dans ce cas, le contenu total de l'application est traduit en code source C. Ceci inclut la description des graphes SFC, la définition de la base de données et les séquences de code. Il y a deux possibilités, correspondant à deux styles de code "C" généré:

CC86M (C source code - V3.04) produit un code source "C" non structuré. Vous devez choisir ce style si votre cible ISaGRAF est antérieure à la version V3.23.

SCC (structure C source code) produit un code source "C" structuré. Ce style doit être préféré si votre cible ISaGRAF est une version V3.23 ou plus récente.

Les fichiers suivants sont créés dans le répertoire du projet:

APPLI.C	code source commun de l'application

APPLI.H	définitions communes en langage "C" language

Dans le cas de la génération de code structuré, un fichier source ".C" et un fichier de définitions ".H" est créé pour chaque programme du projet, en plus des fichiers communs "APPLI.C" et "APPLI.H".

Ces fichiers doivent être compilés et liés avec les librairies du noyau cible ISaGRAF pour produire le code exécutable final. Référez-vous au guide d'utilisation de la cible ISaGRAF pour plus d'information sur la procédure d'intégration et les techniques de compilation.

Note:	Certaines fonctionalités de mise au point, telles que le téléchargement, la modification en ligne et les points d'arrêt ne sont pas disponibles dans le cas d'une application générée en code C.


Affichage des résultats

Le menu "Edition" groupe les commandes permettant de visualiser les fichiers de texte créés pendant la vérification des programmes et la génération du code. La fenêtre de génération de code est une zône de texte qui accueille les messages de la génération de code et de la vérification syntaxique. Ces informations sont également stockées sur le disque et peuvent donc être rappelées à l'aide des commandes du menu "Edition".

Commandes d'édition

La commande "Effacer l'écran" efface le texte affiché. La fenêtre est automatiquement effacée à chaque nouvelle commande de vérification ou de génération du code. La commande "Copier" copie le texte affiché dans le presse-papiers de Windows, de façon à ce qu'il puisse être repris par d'autres applications telles que les éditeurs de texte d'ISaGRAF.

Messages du compilateur

La commande "Messages d'erreur" affiche les messages de la dernière opération de vérification syntaxique ou de génération de code, et en particulier la description des erreurs de syntaxe détectées.

D'autres choix du menu "Edition" permettent de consulter les fichiers de texte intermédiaires créés pendant la vérification et la génération du code. La consultation de ces fichiers n'est généralement pas nécessaire.


Définition des resources

La commande "Ressources" du menu "Options" permet de définir les ressources. Une ressource est un ensemble de données défini par l'utilisateur (configuration de réseau, paramétrage du matériel...) de tout format (fichier, série de valeurs) qui doit être ajouté au code généré, de façon à être téléchargé avec lui dans l'automate cible. Ces données ne sont pas directement traitées par le noyau ISaGRAF, et sont généralement dédiées à d'autres logiciels installés dans 'automate. Référez-vous au manuel d'utilisation de votre automate pour plus d'informations sur le type de ressource supportée ou attendue.

Le fichier de définition des ressources

Référence du langage

Exemple

Compilation des ressources

Implémentation


Le fichier de définition des ressources

Les ressources sont définies dans un "Fichier de définition des ressources" stocké avec les autres fichiers du projet ISaGRAF. C'est un fichier de text ASCII, analysé par le Compilateur de Ressources d'ISaGRAF. Le compilateur de resssources est lancé automatiquement lors de la génération du code. Cette section présente la syntaxe de ce fichier. Cette syntaxe suit les règles lexicales du langage ST. Des commentaires, commençant par "(*" et finissant par "*)" peuvent être insérés partout dans le texte. Les chaînes de caractères sont délimitées par des apostrophes. Référez-vous à la deuxième partie de ce manuel pour une présentatioon détaillée du format des constantes numériques.


Référence du langage

Voici la liste des mots clés et des énoncés utilisés dans le fichier de définition des ressources.

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

Rôle:	Specifie une ressource qui contient une série de valeurs entières. Les valeurs sont stockées dans le code cible comme des entiers non signés sur 32 bits. Les valeurs sont stockées dans l'ordre indiqué dans le fichier de définition. Les valeurs doivent être séparées par des virgules. Le nom de la ressource ne doit pas excéder 15 caractères.

Syntaxe:	ULONGDATA '<nom_ressource>'

BEGIN

...sélection de cibles...

...liste de valeurs...

END

Exemple:	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(* decimal *)

16#A0B1, 2#1011_0101	(* hexadecimal, binary *)

End


VARLIST

Rôle:	Spécifie une ressource qui est une liste d'adresses de variables. Les variables sont identifiées par leur symbole dans le fichier de définition des ressources. Les adresses sont stockées dans le code dela ressource comme des entiers de 16 bits. Les adresss sont stockées dans l'ordre où elles apparaissent dans le fichier de définition. Les noms de variables doivent être séparés par des virgules. Le nom de la ressource ne doit pas excéder 15 caractères.

Syntaxe:	VARLIST '<nom_ressource>'

BEGIN

...sélection des cibles...

...liste des noms de variables...

END

Exemple:	VarList 'LIST'

Begin

...

Var100, MyParameter, Command, Alarm

End


BINARYFILE

Rôle:	Spécifie une ressource dont le contenu provient d'un fichier binaire MS-DOS. La définition de la ressource sur la cible est complétée par un nom de chemin. Les caractères de fin de ligne ne sont pas convertis par le compilateur de ressources. Le nom de la ressource ne peut pas excéder 15 caractères.

Syntaxe:	BINARYFILE '<nom_ressource>'

BEGIN

...sélection des cibles...

FROM '<chemin_source>'

TO '<chemin_destination>'

END

Exemple:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TEXTFILE

Rôle:	Spécifie une ressource dont le contenu provient d'un fichier ASCII de MS-DOS. La définition de la ressource sur la cible est complétée par un nom de chemin. Les caractères de fin de ligne sont automatiquement convertis par le compilateur de ressources selon les conventions du système cible. Le nom de la ressource ne peut pas excéder 15 caractères.

Syntaxe:	TEXTFILE '<nom_ressource>'

BEGIN

...sélection des cibles...

FROM '<chemin_source>'

TO '<chemin_destination>'

END

Exemple:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TARGET

Rôle:	Spécifie le nom d'un code cible qui doit contenir la ressource. Référez-vous à la section précédente (options de compilation) pour plus d'information sur les cibles supportées. L'énoncé "Target" peut apparaître plusieurs fois dans la description de la ressource, dans le cas où la ressource doit être téléchargée sur plusieurs cibles. Cet énoncé ne peut pas être spécifié si l'énoncé "AnyTarget" est utilisé.

Syntaxe:	TARGET '<nom_cible>'

Exemple:	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

Rôle:	Spécifie que la ressource doit être inclus dans tous les codes générés. Le générateur de code d'ISaGRAF peut produire différents codes lors de la même session de codage. Cet énoncé ne peut pas être spécifié dans une ressource où l'énoncé "Target" est utilisé.

Syntaxe:	ANYTARGET

Exemple:	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

Rôle:	Spécifie le chemin du fichier source (sur le PC où l'atelier ISaGRAF est installé) d'une ressource BinaryFile ou TextFile. Les caractères utilisés pour séparer les composants du nom de chemin (unité, répertoire, préfixe, suffixe) doivent respecter les conventions du système MS-DOS.

Syntaxe:	FROM '<chemin_source>'

Exemple:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


TO

Rôle:	Spécifie le chemin du fichier de destination (sur le système cible) d'une ressource BinaryFile ou TextFile. Les caractères utilisés pour séparer les composants du nom de chemin (unité, répertoire, préfixe, suffixe) doivent respecter les conventions du système hôte de la cible.

Syntaxe:	TO '<chemin_destination>'

Exemple:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


Exemple

Voici un exemple complet de fichier de définition de ressources:

(* resource definition file *)

ULongData 'DATA1'	(* list of values *)

Begin

   Target 'ISA86M'	(* for this target only *)

   1, 0, 16#1A2B3C4D, +1, -1	(* numerical values *)

End

VarList 'VLIST1'	(* list of variables *)

Begin

   Target 'ISA86M'	(* for this target only *)

   Valve1, StateX, Command, Alrm1	(* variable names *)

End

BinaryFile 'FILE1'	(* binary file resource *)

Begin

   AnyTarget	(* dedicated to all targets *)

   From 'c:\user\updatef.bin'	(* source file on PC *)

   To 'updatef.cfg'	(* target file on PLC *)

End

TextFile 'FILE2'	(* text file resource *)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(* source file on PC *)

   To '/nw/dat/nwbd'	(* target file on PLC *)

End


Compilation des ressources

Si des ressources ont été définies dans le fichier de définition des ressources, une boîte de dialogue apparaît à la fin de la génération du code ISaGRAF. Pressez le bouton "Compilation" pour lancer la compilation des ressources. Les messages d'erreur seront affichés dans cette boîte. Pressez le bouton "Sortie" pour ignorer les ressources. Dans ce cas le code des ressources ne sera pas ajouté au code ISaGRAF.


Implémentation

Le nombre de ressources, la taille des séries de valeurs et des fichiers ne sont pas limités par ISaGRAF. Le contenu des ressources est stocké à la fin du code généré, précédées par un répertoire de ressources. Voici le format (utilisant les notations du langage C) du répertoire de ressources:

__RESOURCE:

{

  long nbres;	/* nombre de ressources définies */

  {

    char name[16];	/* nom de la ressource */

    long type;	/* type de la ressource */

    long size;	/* taille exacte des données */

    uint32 data;

    uint32 path_offset;	/* pointe vers une chaîne de caractères */

  } /*nb of records */

}

Voici les valeurs possibles pour le champ "type":

1 = fichier binaire

2 = fichier texte

3 = liste de valeurs (path_offset inutilisé dans ce cas)

4 = liste de variables (path_offset inutilisé dans ce cas)

Pour les fichiers textes, les caractères de fin de ligne sont convertis par le compilateur de ressources, selon les conventions du système cible. Tous les pointeurs sont des offsets sur 32 bits par rapport à l'adresse de début de la structure correspondante. Tous les noms de ressources et les noms de chemin sont terminés par un caractère nul. Les noms de chemin et le contenu des ressources sont stockés à la suite du répertoire des ressources.