4-2. Lancer une simulation MUSTIG

4-2-1. Sélectionner les éléments à calculer

Quels éléments peuvent être calculés ?

Comment définir la/les boîte(s) à calculer ?

Quels éléments du graphe sont calculés ?

4-2-2. Lancer la simulation

Comment la simulation est-elle exécutée ?

Statut de la simulation

Les erreurs de la compilation

Les options du calcul

4-2-3. Arrêter la simulation

4-2-4. Mettre à jour les résultats

Processus de mise à jour quand le graphique est modifié

Processus de mise à jour quand un dernier module est réinitialisé

Contrôle du processus de mise à jour automatique

4-2-5. Vider (réinitialiser) une boîte calculée

4-2-6. Le temps infini ou simulations en temps-réel : précautions à prendre

Définir une simulation infinie

Précautions prendre

Détecter les interruptions de l'utilisateur

Visualiser des signaux infinis

Contrôler l'ordre d'exécution en cas de graphes parallèles ou multiples

Un programme MUSTIG est un graphe composé de plusieurs boîtes élémentaires appelées macros ou modules, liées ensemble par des fils. Un graphe est composé :

Quand le graphe est construit aucun calcul n'est exécuté : Mustig vérifie seulement la consistance du graphe pour empêcher, par exemple, deux sorties d'être reliées directement ensemble.

À tout pas de la création du graphe, il est possible de demander qu'un calcul assure qu'un pas particulier de l'algorithme est correct, ou exploiter les résultats.

4-2-1. Sélectionner les éléments à calculer

MUSTIG permet de faire des simulations partielles. C'est à dire, vous ne devez pas lancer une simulation globale comme dans beaucoup d'autres langages de simulation graphiques : vous pouvez sélectionner une portion du graphe et calculer cette portion seulement.

Quels éléments peuvent être calculés ?

Les éléments sur lesquels vous pouvez lancer une simulation sont les éléments terminaux : vous devez donc choisir une macro ou une fenêtre qui contient des élémentsterminaux. Les modules terminaux les plus courants, dont une liste partielle est montrée ci-dessous, se trouvent dans la section Sorties de la Bibliothèque :

Le module général de sortie scalaire, vecteur ou texte (ou l'imprimeur). Le nombre d'éléments et le nombre de chiffres visibles dépend de la dimension du module.

Montre un vecteur de données numériques sous la forme d'un graphique. Toutes les options (couleurs, textes, type de ligne, type de tracé, etc) sont définies en cliquant deux fois sur la boîte. Le nom de la variable peut bien sûr être changé en cliquant dessus.

Montre deux signaux vectoriels x(t) et y(t) comme un nuage (x,y) de points.

Montre un signal à 2 dimensions f(t,x). Le type de tracé, couleurs, type de lignes, etc est choisi en cliquant deux fois sur la macro.

Produit une fenêtre graphique dans laquelle les dessins sont exécutés. Le calcul peut être demandé à partir de ce module ou de la fenêtre graphique associée.

Calcule une portion du graphe sans rien afficher.

Beaucoup d'autres modules terminaux sont disponibles dans la Bibliothèque : regardez leur aide en ligne (Alt+H) pour savoir leurs caractéristiques et comment ils doivent être utilisés.

Comment définir la(les) boite(s) à calculer?

Une boîte seule

Si vous voulez sélectionner une seule macro terminale, telle que Visu/t par exemple, clic gauche sur elle pour la sélectionner. L'élément sélectionné est encadré avec une ligne rouge plus épaisse.

Les boîtes groupées

Si vous voulez calculer plusieurs macros terminales simultanément, vous devez d'abord les entourer d'une clôture simple (voir Créer une boîte), et sélectionner cette boîte entière par clic gauche sur sa frontière ou sur un espace libre à l'intérieur de la clôture :

Se rappeler : Créer des boîtes (clôtures)

Pour créer une clôture, cliquez sur un coin de la clôture tirer et déplacez le curseur de la souris à l'autre coin, en encadrant toutes les boîtes que vous voulez inclure. Quand la dimension est OK, relâchez le bouton de la souris pour valider et créer la clôture. Pour effacer la clôture sans effacer les boîtes au-dedans, tirez-la par un coin et redimentionnez la afin qu'elle devienne minuscule : la clôture disparaît.

La fenêtre

Vous pouvez sélectionner le contenu entier de la fenêtre par clic gauche sur un espace libre de la fenêtre. La frontière de la fenêtre est encadrée avec une ligne rouge plus épaisse.

Quels éléments du graphe sont calculés ?

Pour compiler le graphe en un code machine, MUSTIG commence à partir des éléments treminaux sélectionnés et va vers les opérateurs source en amont pour tâcher de déterminer quels modules sont impliqués dans le calcul des articles sélectionnés. Les parties du graphe qui ne sont pas impliquées dans le calcul demandé par l'utilisateur ne sont pas prises en considération.

Il est donc très important de noter que seulement la portion de graphe nécessaire pour calculer les modules sélectionnés sera compilée réellement et sera exécutée. Un exemple est montré ci-dessous :

4-2-2. Lancer la simulation

Une fois que les éléments à calculer sont sélectionnés, sélectionnez la commande Calculer dans le menu Calculs : la boîte sélectionnée est calculée.

Vous pouvez aussi directement cliquer avec le bouton droite sur l'élément à calculer (un module, une macro, une fenêtre, une fenêtre image, une boîte tirée autour de plusieurs boîtes) : la simulation sera lancée. Ce raccourci est communément utilisé pour lancer une simulation et n'exige pas que la(les) boîte(s) à calculer soient sélectionnées en premier. Cliquez à droite sur la boîte à calculer, peu importe si c'est une macro seule, une clôture, ou une fenêtre.

Comment la simulation est-elle exécutée?

En fait, un processus à deux étapes est invoqué quand vous demandez un calcul :

Etape 1 : La compilation optimisée

La portion du graphe qui est nécessaire pour calculer les résultats que vous avez demandés est déterminée et compilée en un code machine par le compilateur MUSTIG. La stratégie est basée sur le " coût " du calcul. Le processus de la compilation est très rapide (la plupart du temps vous ne le verrez même pas !), afin qu'utiliser MUSTIG soit vraiment confortable, même si vous devez lancer beaucoup de simulations.

Dans le cas de multiples boucles, l'ordre de ces boucles est choisi de manière à obtenir un volume de stockage minimum, indépendamment des boucles du graphe. Quelques résultats intermédiaires sont gardés pendant le calcul de manière à pouvoir les utiliser ensuite quand des modifications interactives du graphe seront exécutées.

Etape 2 : Le calcul

Une fois que le processus de compilation s'est déroulé avec succès, le code produit est exécuté automatiquement et les résultats sont affichés.

Si la boîte sélectionnée est un module d'impression numérique d'un scalaire ou un vecteur, elle se remplit des valeurs adéquates.

Si des affichages graphiques sont impliqués, les fenêtres spécifiques s'ouvrent. Cependant, si les fenêtres graphiques calculées avaient été glissées précédemment sur des faces avant ou des fenêtres image , seulement ces images sont mises à jour : la fenêtre graphique originale ne s'ouvre plus.

Avancement de la simulation

Pour les longues simulations, l'avancement des calculs est montré en pourcentage à la place du menu Calculs sur la barre du haut de la fenêtre Mustig (PC & Mac). Sur les systèmes UNIX, l'avancement est indiqué par une barre graphique. Cela vous permet d'évaluer combien de temps les simulations prendront. Soyez conscient que cette estimation ne prend pas en considération les routines externes (DLLs) que vous avez pu inclure dans votre algorithme.

Les erreurs de compilation

Si MUSTIG détecte une inconsistance en essayant de compiler le graphe en code machine, par exemple si vous essayez d'ajouter un signal de 256 points à un signal de 257 points, un message d'erreur est affiché, qui indique le type de l'erreur.

La partie erronée du graphe (boîte ou borne) est montrée. Si l'élément erroné est dans une macro non ouverte, vous devez ouvrir la macro sélectionnée (en tapant Ctrl+I par exemple, ou cliquant deux fois) pour obtenir une localisation plus précise de l'erreur, et ainsi de suite jusqu'à ce que le dernier élément soit sélectionné.

Les options du calcul

Plusieurs options peuvent être définies dans le menu Edition / Options / Calculs pour modifier le comportement de MUSTIG pendant les simulations.

Si un signal sonore se produit quand vous fermez la fenêtre après avoir modifié un paramètre, cela veut dire que la modification a été refusée. Essayez de réinitialiser le programme entier (voir Vider une boîte) avant de changer l'option du calcul. Dans quelques cas ce peut être nécessaire de sortir de MUSTIG, le relancer et changer les options du calcul alors seulement. Si la valeur que vous entrez n'est à nouveau pas acceptée, cela veut dire que cette valeur est fausse.

Dimension des Données (en Kilo-octets)

Cette option contrôle la quantité de mémoire réservée pour manipuler les données pendant les simulations. La valeur par défaut est 0, signifiant que MUSTIG essaie d'estimer la mémoire par lui-même. Si une grande quantité de mémoire est exigée (par exemple si le message d'erreur Mémoire des données saturée est affiché pendant une simulation), mettez une valeur appropriée en Kilo-octets. Entrez-en 25000 pour réserver 25 Méga-octets de mémoire pour les données par exemple. Il est recommandé que la quantité spécifiée soit plus petite que la quantité de mémoire disponible, pour empêcher l'ordinateur de swapper.

Seuil du temps pour recalcul automatique (0 à 255)

C'est une des principales caractéristiques de MUSTIG : chaque fois que vous effectuez une modification sur une boîte, tout les modules en aval sont soit réinitialisés soit recalculés selon la valeur indiquée dans cette option.

Une petite valeur indique que seulement les modules qui ont besoin de brefs calculs seront mis à jour. Les modules nécessitant un plus long temps de calcul seront réinitialisés simplement.

D'autre part, une grande valeur indique que même les modules qui ont besoin de longs calculs seront mis à jour quand le graphe est modifié. Ce peut être maladroit si les simulations que vous faites sont longues et si vous devez encore modifier votre algorithme : le plus léger changement du graphe mènera à une longue simulation.

Une valeur particulière est 0 : aucun recalcul ne sera exécuté quand le graphe est changé. Tous les modules de l'aval seront réinitialisés simplement.

Cependant, si l'option Recalcul Automatique est cochée dans le menu Calculs, tous les calculs seront encore exécutés quand le programme sera modifié, quelel que soit la valeur de cette option.

Vectorisation (0, 1 ou 2)

Ce paramètre contrôle le type de code machine produit par le compilateur MUSTIG. Le temps d'exécution est souvent meilleur avec un paramètre de vectorisation maximal (2) mais la taille de mémoire requise est plus grande. Si la quantité de mémoire disponible n'est pas très grande comparée à la taille mémoire requise pour traiter les données, essayez de mettre ce paramètre à 1. Quelques programmes peuvent travailler seulement avec un paramètre de vectorisation égal à 1 .

Dimension du code programme (Kilo-octets)

Définit le montant de mémoire réservé pour le code compilé produit par MUSTIG. Essayez d'augmenter cette valeur si le message d'erreur Code trop grand se produit.

La dimension du tas (utilisateurs MAC seulement)

Définit la taille du tas (ou stack). Essayez d'augmenter cette valeur si le message d'erreur Compilateur Saturé se produit.

4-2-3. Arrêter la simulation

Si la simulation est faite sur un nombre fini d'échantillons, elle arrêtera d'elle-même finalement. Vous pouvez cependant arrêter la simulation avant achèvement en cliquant dans la fenêtre MUSTIG n'importe où.

Si la simulation est faite sur un nombre infini d'échantillons (longueur d'au moins un signal égale à -1 signifie simulation infinie), vous devez l'arrêter explicitement en cliquant dans la fenêtre Mustig n'importe où.

4-2-4. Mise à jour des résultats

Processus de mise à jour quand le graphe est modifié

Quand le graphe est modifié à un endroit donné, le principe de MUSTIG est de garder en mémoire tout résultat en amont de façon à économiser le temps pendant le prochain calcul. La première borne en amont de la modification est considérée comme la nouvelle source. Cela veut dire que quand vous demandez encore un calcul, les modules en amont de la dernière modification du graphe ne seront pas recalculés :

Processus de mise à jour quand un module terminal est réinitialisé

Si vous avez réinitialisé seulement la macro Visu/t (voir Réinitialiser une boîte calculée) dans l'exemple précédent, ou si vous changez ses paramètres sans changer le graphe en amont, et puis demandez un recalcul, MUSTIG va seulement retracer le graphique sans recalculer les résultats.

C'est à dire, la sortie de la macro Traitement est gardée en mémoire quand la boîte Visu/t est réinitialisée, elle n'est pas recalculée.

Donc, si des modules dans votre application nécessitent d'être mis à jour avant chaque simulation (par exemple modules de gestion du temps, ou graines aléatoires si vous voulez obtenir un autre signal du bruit, etc), vous devez explicitement les réinitialiser (voir Réinitialiser une boîte calculée).

Contrôler le processus de mise à jour automatique

C'est une des principales caractéristiques de MUSTIG : chaque fois que vous effectuez une modification sur une boîte, tout les modules en aval sont soit réinitialisés soit recalculés selon la valeur indiquée dans l'option Edition / Options / Calculs / Seuil Temps pour recalcul automatique. Cette stratégie autorise un fonctionnement interactif, rapide et fiable car tous les calculs ne sont pas réexécutés à chaque demande et car les résultats visualisés dépendent toujours de l'état présent du graphe . Voir Seuil Temps pour recalcul automatique dans le chapitre des Menus pour une information plus détaillée.

Cependant, si l'option Recalcul automatique est cochée dans le menu Calculs, tous les calculs seront réexécutés quand le programme sera modifié, quelle que soit la valeur de cette option.

4-2-5. Vider (réinitialiser) une boîte calculée

Comme montré dans le paragraphe précédent, vous ne devez pas réinitialiser manuellement les boîtes en aval quand vous modifiez le graphe : cela est fait automatiquement. De plus, si un fichier de données précédemment utilisé est modifié, MUSTIG détecte automatiquement que la date du fichier a changé et met à jour les résultats en conséquence.

Cependant, vous pouvez dans quelques cas vouloir réinitialiser manuellement une boîte précédemment calculée, surtout si cette dernière est localisée en amont. C'est particulièrement utile quand vous travailler avec des données aléatoires ou dépendant du temps.

En réalité, quand une modification est exécutée et / ou un recalcul est demandé, seulement les modules qui ont subi un changement et ceux localisés en aval sont recalculés réellement. Ce peut être maladroit pour quelques applications, donc c'est quelque chose dont vous devez être informé.

Considérez l'exemple ci-dessous où un nombre gaussien pseudo - aléatoire est produit :

Si nous insérons un module après la boîte Gauss et recalculons le module d'impression (cliquer à droite), le module d'impression est mis à jour, mais la " graine " aléatoire fournie par le module Aléatoire ne l'est pas :

Si nous n'insérons pas de nouveau module, mais simplement supprimons et reconstruisons le lien entre le module Gauss et le module d'impression, le comportement est le même : nous n'avons pas produit un autre nombre aléatoire et la " graine " n'a pas été modifiée. Donc, le nombre aléatoire produit est toujours le même !

Pour produire un autre nombre aléatoire individuel, nous devons réinitialiser la boîte Aléatoire explicitement. Cela est fait en la sélectionner et choisissant l'ordre Réinitialiser la clôture dans le menu Calculs.

Une conséquence de ce comportement dont vous devez être informé est que, si vous utilisez une macro Bruit/t dans vos applications, le signal du bruit reste inchangé jusqu'à ce que vous l'ayez réinitialisé en utilisantexplicitement l'ordre Réinitialiser la clôture

Vous pouvez utiliser le Réinitialiser la clôture sur toute boîte ou fenêtre quand vous voulez qu'elle soit recalculée : une fenêtre graphique, un module sur une face avant, une macro, ou même la fenêtre principale du programme.

4-2-6. Le temps infini ou simulations en temps réel : précautions à prendre

Définir une simulation infinie

Vous pouvez créer un programme qui tourne jusqu'à ce que l'utilisateur clique sur la fenêtre MUSTIG pour l'arrêter. Cela permet de observer la simulation dynamiquement, ce qui est très utile pour quelques applications . Cela permet aussi de lancer des programmes d'acquisition de données infinies.

Si la longueur d'une variable est -1, MUSTIG la considère comme une variable infinie et donc la simulation est infinie.

Le module Temps Réel/t de la section Changements de Variable de la Bibliothèque permet de traiter une variable comme un signal de longueur infinie :

Précautions à prendre

Vous devez vous assurer de ne pas utiliser des modules qui attendent un signal de longueur finie dans vos programmes, autrement la simulation ne pourrait pas être arrêtée, même en cliquant sur la fenêtre MUSTIG! Les exemples de tels modules sont: Max/t, Min/t, Dernier/t, etc.,

Soyez informé que quelques macros de Bibliothèque utilisent de tels modules. Par exemple, si vous utilisez la macro standard de visualisation 1D Visu/t dans le mode Normalisation automatique sur (par défaut) au lieu du mode de normalisation manuelle, MUSTIG essaie de calculer les limites du signal, ce qui n'est pas possible pour ce signal infini !

La détection des interruptions de l'utilisateur

Chaque fois qu'un affichage graphique est fait, MUSTIG vérifie le statut de la souris pour détecter si l'utilisateur a cliqué sur la fenêtre MUSTIG pour arrêter la simulation. Si c'est la cas, la simulation est arrêtée.

Si une boucle selon une variable de longueur infinie est présente dans votre programme et si aucun affichage graphique n'est fait, vous devez dire à MUSTIG de vérifier régulièrement le statut de la souris en insérant le module Fin dans votre graphe, à l'intérieur de la boucle. L'exemple ci dessous, dédié à l'acquisition de données infinie, montre cela :

Visualiser des signaux infinis

Quelques macros de sortie sont conçues spécialement pour les signaux infinis. Elles sont localisées dans la section Sorties/ Temps réel de la Bibliothèque MUSTIG. Regardez leur aide en ligne (Alt+H) pour savoir comment elles doivent être utilisées.

Contrôler l'ordre d'exécution en cas de graphes parallèles ou multiples

Il y a quelque chose dont vous devez être informé si votre graphe a des parties en parallèle :

ou s'il est fait de plusieurs graphes indépendants :

Dans tous les cas précédents, vous ne contrôlez pas quelle partie du graphe, ou quelle branche, sera exécutée en premier.

La plupart du temps, surtout si vous travaillez avec des signaux finis, vous ne devez pas vous soucier de cela : les résultats seront les mêmes quel que soit l'ordre d'exécution.

Cependant dans quelques cas particuliers, c'est maladroit et vous devez synchroniser les différents modules artificiellement pour imposer un ordre pendant l'exécution . Vous devez penser à cela si vous créez des programmes MUSTIG personnalisés d'acquisition de données, ou si vous utilisez l'information de temps dans vous programmes.

La synchronisation est faite en créant une dépendance artificielle entre les parties du graphe, ou entre les graphes différents.

Exemple: Le graphe multiple ci-dessous

affiche le résultat graphique d'un long traitement et aussi le temps du jour. Mais comme aucun processus de synchronisation n'a été inclus, le temps indiqué peut être soit le temps AVANT le long traitement, soit le temps APRÈS lui : vous ne pouvez pas le contrôler. Il n'y a aucune façon de savoir quelle opération (le long traitement ou le calcul du temps) a été exécutée en premier.

Si vous voulez que le temps indiqué soit le temps APRÈS QUE le long traitement ait été fait, vous devez trouver une façon d'imposer l'ordre approprié sans ambiguïté. Une bonne façon de faire cela est de forcer MUSTIG à attendre le résultat du premier calcul avant de commencer le deuxième. Si vous modifiez le graphe précédent afin qu'il ressemble à ceci :

le long traitement est fait. Puis, un échantillon est extrait des résultats de sortie pour former la valeur de l'entrée du module Temps. Ce dernier demande au système d'exploitation le temps courant du jour et met la réponse sur sa borne inférieure. Il rend une valeur sur sa borne de droite. Cette valeur est changée en zéro en la soustrayant à elle-même. Un report est utilisé pour ajouter cette valeur zéro aux données de la sortie du long traitement. Par conséquent, vous êtes sûr que le calcul du temps est exécuté APRÈS le long traitement, et AVANT le processus d'affichage (lequel peut être long si le signal a un grand nombre d'échantillons).

Quelques trucs de synchronisation de ce genre doivent toujours être inclus dans le graphe à chaque fois que vous voulez contrôler dans quel ordre les modules doivent être exécutés.