 Simulation

Le simulateur ISaGRAF est lancé avec le debugger par la commande "Simuler" du menu "Test" dans la fenêtre du Gestionnaire de Programmes. Le simulateur ISaGRAF est un système cible supportant toutes le fonctionnalités d'un automate ISaGRAF, et les fonctions et blocs fonctionnels "C" de la librairie standard délivrée par CJ international. Les cartes d'E/S sont simulées graphiquement dans une fenêtre. Tout type de carte d'E/S peut être simulé. Les cartes définies comme "Cartes Virtuelles" pendant le câblage des E/S apparaissent également dans la fenêtre du simulateur.

Liens avec le debugger

Simulation des E/S

Elements de librairie

Options

Le simulateur d'ISaGRAF inclut d'autres outils puissants pour la simulation et le diagnostic des applications:

Enregistrer et restituer l'état des entrées

L'analyseur de cycles

Les scripts de simulation


Liens avec le debugger

Le simulateur supporte un dialogue complet avec le debugger d'ISaGRAF. Ainsi, toutes les possibilités de mise au point sont encore valides pendant la simulation. Le simulateur travaille toujours sur l'application ISaGRAF courante. Pendant la simulation, les commandes "Activer", "Arrêter", "Transférer" et "Mise à jour" du debugger ne sont plus valides. Le simulateur ne peut pas être utilisé si la cible "SIMULATE" n'a pas été sélectionnée pour la génération du code de l'application. La fermeture de la fenêtre du simulateur entraine la fermeture du debugger et de toutes les fenêtres ISaGRAF ouvertes pendant la session de mise au point.


Simulation des E/S

Les cartes d'E/S apparaissent dans la fenêtre du simulateur, repérées par leur numéro d'emplacement. Tous les types standard d'entrées/sorties ISaGRAF (booléen, analogique ou message) peuvent être simulés. Les voies d'une carte d'entrée sont représentées par des boutons ou des champs de saisie. Les voies d'une carte de sortie sont représentées par des objets graphiques animés.

 	Entrée booléenne: Une voie d'entrée booléenne est représentée par un bouton. Le numéro de la voie est affiché à côté du bouton. L'entrée vaut TRUE quand le bouton est enfoncé. Il suffit de cliquer sur le bouton pour inverser l'état de l'entrée correspondante.

 	Sortie booléenne: Une voie de sortie booléenne est représentée par un petit cercle. Le numéro de la voie est affiché à côté du cercle. La cercle est coloré quand la valeur de la sortie est TRUE.

 	Entrée analogique: Une voie d'entrée analogique est représentée par un simple champ de saisie, où la valeur de l'entrée peut être saisie. Cliquez sur le champ pour faire apparaître le curseur de saisie, et entrez la nouvelle valeur. Aucune confirmation par la touche ENTREE n'est nécessaire. Les entrées analogiques peuvent être saisies en décimal ou en hexadécimal.

 	Sortie analogique: Une voie de sortie analogique est représentée par un pavé d'affichage numérique rouge. La valeur de la sortie peut être affichée en décimal ou en hexadécimal. Aucune action ne peut être effectuée sur une voie de sortie.

 	Entrée message: Une voie d'entrée message est représentée par un simple champ de saisie, où la valeur de l'entrée peut être saisie. Cliquez sur le champ pour faire apparaître le curseur de saisie, et entrez la nouvelle valeur. Aucune confirmation par la touche ENTREE n'est nécessaire.

 	Sortie message: Une voie de sortie message est représentée par un pavé d'affichage textuel. Aucune action ne peut être effectuée sur une voie de sortie.


Elements de librairie

Le simulateur ISaGRAF supporte l'ensemble des conversions, fonctions et blocs fonctionnels standards fournis par CJ International. Voici la liste des objets supportés :

 Fonctions de conversion:

bcd, scale

 Fonctions:

abs, acos, ArCreate, ArRead, ArWrite, ascii, asin, atan, char, cos, delete, expt, find, insert, left, limit, log, max, mid, min, mlen, mod, mux4, mux8, odd, rand, replace, right, rol, ror, sel, shl, shr, sin, sqrt, tan, trunc

 Blocs fonctionnels:

average, blink, cmp, ctd, ctu, ctud, derivate, f_trig, hyster, integral, lim_alrm, r_trig, rs, sema, sr, stackint, tof, ton, tp

Les conversions, fonctions et blocs fonctionnels "C" écrits par l'utilisateur ne peuvent pas être intégrés au simulateur d'ISaGRAF. Typiquement, ces objets prennent en compte les ressources matérielles et logicielles du système cible, et ces ressources n'ont généralement aucun sens dans l'environnement Windows. Toutefois, le simulateur d'ISaGRAF assure le comportement standard suivant pour toute nouvelle conversion, fonction ou tout nouveau bloc fonctionnel :

•	Quand une nouvelle conversion est traitée par le simulateur, elle est remplacée par une conversion "sans effet". La valeur physique d'une entrée ou sortie analogique est toujours égale à sa valeur électrique (saisie ou affichée dans le panneau de simulation).

•	Quand une nouvelle fonction (ou bloc fonctionnel) "C" est traitée par le simulateur, aucune opération n'est effectuée. La valeur de retour n'est pas mise à jour.


Options

Les commandes du menu "Options" permettent à l'utilisateur de contrôler les affichages des voies d'E/S dans le panneau de simulation. Ces options peuvent être inhibées ou validées à tout moment pendant la mise au point d'une application.

 Quand l'option "Affichage couleur" est validée, les voies d'E/S sont affichées sous la forme de dessins en couleurs. Si ces couleurs ne peuvent pas être clairement distinguées sur un écran LCD monochrome, l'utilisateur peut enlever cette option, afin de forcer tous les affichages en noir et blanc.

 Quand l'option "Noms de variables" est validée, une étiquette est affichée à côté de chaque voie d'E/S, avec le nom de la variable d'E/S connectée. Enlever cette option permet de réduire la taille du panneau de simulation.

 Quand l'option "Valeurs hexadécimales" est validée, toutes les voies analogiques en entrée ou en sortie sont affichées ou saisies dans un format hexadécimal.

 Quand l'option "Toujours visible" est validée, la fenêtre du simulateur reste toujours au dessus des autres fenêtres, même quand elle n'est pas active.


L'analyseur de cycle

L'analyseur de cycle d'ISaGRAF est un outil puissant de diagnostic qui montre comment le temps de cycle est réparti dans les différents programmes, fonctions et blocs fonctionnels de l'application. Cet outil est très utile pour établir un diagnostic rapide sur les performances de l'application, et dirige le programmeur vers les parties du cyles qui nécessitent une optimisation.

L'analyseur de cycle est lancé par la commande "Outils / Analyseur de cycle" dans la fenêtre du simulateur ISaGRAF. Il affiche, pour chaque programme, fonction ou bloc fonctionnel, le pourcentage du temps de cycle dépensé pour son exécution:

Quand l'option "Affichage / Moyenne" est validée, les pourcentages affichés sont moyennés. La moyenne est calculée depuis le lancement de l'application, ou depuis la dernière commande "Affichage / Ré-initialisation".

Quand l'option "Affichage / Moyenne" n'est pas validée, les pourcentages affichés sont ceux calculés pendant le dernier cycle exécuté. Ce mode peut également être utilisé quand l'application est en mode "Cycle à Cycle", et vous permet d'avoir un calcul correspondant au contexte courant de l'application.

Utilisez la commande "Affichage / Copier" pour copier les noms de programmes et les pourcentage dans le presse-papiers de Windows, en format texte. Ces données peuvent ensuite être collées dans d'autres applications telles que des éditeurs de textes ou des tableurs.

Notes importantes:

Il ne s'agit pas de mesures de temps précises. Les pourcentages affichés sont basés sur la mesure de chaque instruction TIC élémentaire, en tenant compte du ratio entre les différentes instructions. La mesure ne prend pas en compte le temps passé dans les fonctions et les blocs fonctionnels en "C".

La valeur affichée pour une fonction ou un bloc fonctionnel est la somme de tous les appels effectués pendant le cycle.

La mesure des pourcentage est basée sur l'évaluation des codes TIC et ne représente pas une information fiable si l'application est destinée à être traduite en code source "C" et compilée par un compilateur "C".


Les scripts de simulation

Le simulateur d'ISaGRAF inclut un outil pour l'édition et l'exécution de scripts de simulation. Un script est décrit à l'aide d'un langage simple de type ST, et permet d'automatiser les tests et la validation des application simulées.

Edition des scripts

Exécution des scripts

Langage de descrtiption des scripts

L'éditeur de scripts est lancé par la commande "Outils / Scripts de simulation" depuis la fenêtre du simulateur. Voici la fenêtre d'édition des scripts:

La fenêtre du haut est un éditeur de texte où les instructions du script sont entrées. Il est utilisé comme les autres éditeurs de texte d'ISaGRAF, et inclut quelques fonctionalités puissantes telles que l'insertion par sélection du symbole d'une variable. Utilisez les commandes du menu "Options" pour changer la largeur des taquets de tabulation ou la police de caractères.

La fenêtre du bas montre tous les messages produits lors de l'exécution du script. La ligne de séparation entre les deux fenêtres peut être glissée avec la souris pour redimensionner les fenêtres. La fenêtre des messages peut être cachée pendant l'édition du script, mais elle est automatiquement ré-ouverte à chaque exécution du script.


Edition des scripts

Utilisez les commandes du menu "Fichier" pour gérer les fichiers de script:

Nouveau	crée un nouveau script sans titre

Ouvrir	charge un script stocké sur disque

Enregistrer	enregistre sur disque le contenu du script et de la fenêtre de messages,

dans le répertoire du projet

Enregistrer sous	enregistre le script sous un autre nom

Deux fichiers sont créés pour chaque script dans le répertoire du projet ISaGRAF:

<nomscript>.SCC	contenu du script (instructions)

< nomscript >.SCO	contenu de la fenêtre de messages

Où < nomscript > est le nom du script. Ces deux fichiers sont des fichiers de texte ASCII qui peuvent être librement ouverts par d'autres applications.

 Pendant l'édition d'un script, utilisez la commande "Edition / Insérer un symbole" pour sélectionner le nom d'une variable déclarée et l'insérer à la position courante du curseur.


Exécution des scripts

Les scripts doivent être vérifiés avant d'être exécutés. Si nécessaire, la vérification est lancée automatiquement avant l'exécution du script. Utilisez les commandes suivantes du menu "Script":

Vérifier	vérifie la syntaxe du script et le compile

Démarrer le script	lance l'exécution du script édité

Dans le cas d'un nouveau script sans titre, il faut l'enregistrer (et lui donner un nom) avant de le vérifier. Dans le cas d'un script ayant déjà un nom, son contenu est automatiquement enregistré avant la vérification.

Quand un script est en cours d'exécution, son contenu ne peut plus être changé. Un message est affiché quand son exécution est terminée. Vous pouvez aussi interrompre l'exécution du script à l'aide de la commande suivante du menu "Script":

Arrêter le script	abandonne l'exécution du script

L'exécution du script est faite entre les cycles ISaGRAF. Dans le cas d'une boucle infinie, programmée dans un cycle, le simulateur ISaGRAF assure que la boucle sera interrompue de façon à ce que les cycles ISaGRAF puissent continuer à être exécutés, et à ne pas bloquer les autres applications. L'interpréteur de scripts d'ISaGRAF décide d'interrompre une boucle à chaque fois qu'une étiquette est rencontrée plus d'une fois dans le même cycle d'exécution. L'exécution des scripts peut aussi être explicitement interrompue par l'utilisation des instructions "Cycle" ou "Wait".


Langage de description des scripts

Le langage de description des scripts est un langage littéral très simple, similaire au langage ST, mais où chaque instruction est entrée sur une ligne, et où l'instruction n'a pas besoin d'être terminée par un point-virgule. Utilisez le bouton suivant dans la barre d'outils pour connaître les instructions disponibles et insérer le mot clé d'une instruction à la position du curseur:

insère une instruction (mot clé et aide sous forme de commentaires)

Il y a différents groupes d'instructions. Le premier concerne l'assignation (forçage) des variables:

:=	assignation

D'autres instructions permettent d'envoyer des informations dans la fenêtre de messages:

Print	affiche un texte ou la valeur d'une variable

PrintTime	affiche l'heure courante

D'autres instructions permettent de synchroniser le script avec les cycles ISaGRAF:

Cycle	laisse le simulateur exécuter un cycle ISaGRAF

Wait	suspend le script pendant un temps

D'autres instructions permettent de contrôler le flux d'exécution des instructions du script:

Etiquettes	peuvent être insérées partout dans le cycle

Goto	saut inconditionnel à une étiquette

If goto	saut conditionnel à une étiquette

End	termine l'exécution du script

Le langage de description des scripts ne différentie pas les majuscules et les minuscules. Des commentaires peuvent être entrés à la fin de chaque ligne. Les commentaires peuvent être entrés selon la syntaxe ST (entre "(*" et "*)"), ou plus simplement préfixés par le caractère ";".


":=" Assignation

Description:	Force la valeur d'une variable ISaGRAF. Il peut s'agir d'une variable interne, ou d'une voie d'entrée ou de sortie.

Syntaxe:	<varname> := <constant_expression>

<varname> = <constant_expression>

Arguments:	<varname> est un symbole de variable déclarée dans l'application, ou une E/S représentée directement selon les conventions d'écriture utilisant le caractère "%".

<constant_expression> est une expression constante valide, en accord avec le type de la variable. Pour les booléens, les valeurs "0" et "1" peuvent être utilisées à la place de "FALSE" et "TRUE". Pour les temporisations, le préfixe "T#" ou "TIME#" peut être omis.

Notes:	Les variables d'entrées forcées depuis le script n'ont pas besoin d'être verrouillées dans l'application ISaGRAF. Le dessin de la voie d'entrée correspondant est mis à jour dans le panneau de simulation.

Attention: ne forcez pas de variable d'entrée ou de sortie analogique ayant une conversion. L'exécution des scripts ne prend pas en compte les conversions (fonctions ou tables).

Exemple:	MyBooVar := 1         (* équivalent à TRUE *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Hello'

MyTmrVar := t#12s


Print

Description:	Envoie une chaine de caractères ou la valeur courante d'une variable dans la fenêtre de messages. Le texte est formatté sur une seule ligne, qui est ajoutée à la fin des messages.

Syntaxe:	Print '<text>'

Print <varname>

Arguments:	<text> est une chaîne de caractères exprimée entre apostrophes

<varname> est un symbole de variable déclarée dans l'application, ou une E/S représentée directement selon les conventions d'écriture utilisant le caractère "%"

Notes:	Le formattage des valeurs de variables est conforme aux conventions d'écritures de l'IEC.

Exemple:	Print 'Hello'

Print MyBooVar

Messages:	Hello

MyBoovar = TRUE


PrintTime

Description:	Envoie l'heure courante dans la fenêtre des messages. Le texte est formatté sur une seule ligne, qui est ajoutée à la fin des messages.

Syntaxe:	PrintTime

Notes:	L'heure est formattée selon le paramétrage du système Windows

Exemple:	Print 'Il est maintenant:'

PrintTime

Messages:	Il est maintenant:

15:45:22


Cycle

Description:	Suspend l'exécution du script jusqu'à l'exécution du prochain cycle ISaGRAF.

Syntaxe:	Cycle

Notes:	Les instructions du script sont exécutées en début de cycle ISaGRAF. Si le simulateur est en mode "Cycle à Cycle", l'instruction "cycle" est immédiatement suivie par l'exécution d'un cycle ISaGRAF. Les instructions suivantes du script seront exécutées lors de la prochaine commande "Exécuter un cycle" depuis le debugger ISaGRAF.

Exemple:	(* le programme ISaGRAF copie A dans B *)

A := 0

Cycle

Print B

A := 1

Print B (* aucun cycle effectué / B n'est pas encore forcé à 1 *)

Cycle

Print B

Messages:	B = 0

B = 0

B = 1


Wait

Description:	Suspend l'exécution du script pendant la durée passée en paramètre

Syntaxe:	Wait <delay>

Arguments:	<delay> durée exprimée selon les conventions d'écriture de l'IEC pour les constantes temporelles. Le préfixe "T#" ou "TIME#" peut être omis. La durée doit être comprise entre 10 millisecondes et 1 heure.

Notes:	La durée effective des instructions "Wait" n'est pas précise et dépend notament du système Windows. Aussi, la durée devra être assumée avec une précision de plus ou moins un cycle ISaGRAF.

Quand une instruction "Wait" est rencontrée, les cycles ISaGRAF sont exécutés jusqu'à ce que la durée soit écoulée et avant l'exécution des instructions suivantes du script.

Exemple:	PrintTime

Wait 2s

PrintTime

Messages:	15:45:27

15:45:29


Etiquettes

Description:	Des étiquettes peuvent être placées n'importe où dans le script. Elles sont utilisées comme destination par les instructions de branchement "Goto" et permettent le contrôle du flux d'exécution des instructions du script.

Syntaxe:	<labelname>:

Arguments:	<labelname> nom unique respectant les conventions de nomenclature des variables ISaGRAF: limité à 16 caractères, commençant par une lettre suivie de lettres, de chiffres ou de caractères soulignés. Lors de sa définition, le nom de l'étiquette doit être suivie par le caractère ":".

Notes:	Aucune instruction ne doit être placée sur la ligne où l'étiquette est définie.

Une étiquette ne peut pas avoir le même nom qu'une variable ISaGRAF

Exemple:	(* exemple de script avec une boucle infinie *)

loop:

PrintTime

Wait 1s

Goto loop


Goto

Description:	Saut inconditionnel à une étiquette

Syntaxe:	Goto <labelname>

Arguments:	<labelname> est le nom d'une étiquette déclarée dans le script

Notes:	Les sauts en arrière sont autorisés. Dans le cas d'une boucle infinie, l'exécution du script est automatiquement interrompue pour assurer l'exécution des cycles ISaGRAF.

Exemple:	Print 'Avant le saut'

Goto MyLabel

Print 'Dans le saut' (* instruction jamais exécutée *)

MyLabel:

Print 'Après le saut'

Messages:	Avant le saut

Après le saut


If Goto

Description:	Saut conditionnel à une étiquette. La condition peut être la comparaison entre deux variables ISaGRAF, ou la comparaison entre une variable ISaGRAF et une expression constante.

Syntaxe:	If <var1> test <var2> Goto <labelname>

If <var1> test <constant_expression> Goto <labelname>

Les tests de comparaison disponibles sont:

=	vrai si les deux membres ont la même valeur

<>	vrai si les deux membres ont des valeurs différentes

<	vrai si le premier membre est inférieur au second

<=	vrai si le premier membre est inférieur ou égal au second

>	vrai si le premier membre est supérieur au second

>=	vrai si le premier membre est supérieur ou égal au second

Arguments:	<var1> <var2> sont des symboles de variables déclarées dans l'application, ou des E/S représentées directement selon les conventions d'écriture utilisant le caractère "%"

<constant_expression> est une expression constante valide, en accord avec le type de la variable. Pour les booléens, les valeurs "0" et "1" peuvent être utilisées à la place de "FALSE" et "TRUE". Pour les temporisations, le préfixe "T#" ou "TIME#" peut être omis.

<labelname> est le nom d'une étiquette déclarée dans le script

Notes:	Les sauts en arrière sont autorisés. Dans le cas d'une boucle infinie, l'exécution du script est automatiquement interrompue pour assurer l'exécution des cycles ISaGRAF.

Exemple:	(* Ce script boucle jusqu'à ce que MyVar vale TRUE *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


End

Description:	Termine le script

Syntaxe:	End

Notes:	Il n'est pas obligatoire de placer une instruction "End" sur la dernière ligne du script

Exemple:	(* Ce script boucle jusqu'à ce que MyVar vale TRUE *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


Enregistrer et restituer l'état des entrées

Lors de l'utilisation du simulateur d'ISaGRAF, les voies d'entrée sont forcées manuellement pas des actions sur les boutons et contrôles du panneau de simulation. Vous pouvez à tout moment utilisez les commandes suivantes du menu "Outils" pour enregistrer ou restituer l'état de toutes les entrées:

Charger un jeu d'entrées	Force la valeur des voies d'entrée avec les valeurs contenues dans une fichier créé préalablement par la commande "Sauver le jeu d'entrées".

Sauver le jeu d'entrées	Enregistre dans un fichier l'état des entrées, afin de pouvoir le restituer plus tard à l'aide de la commande "Charger un jeu d'entrées". Le fichier de valeurs est enregistré dans le répertoire du projet, et sera pris en compte par le gestionnaire d'archives d'ISaGRAF avec les autres données du projet.

Note: Seules les entrées nommées (celles ayant une variable déclarée connectée) sont sauvées et restituées.