12- les variables locales et les variables internes


les variables locales

Il s'agit de variables intermédiaires, très pratiques pour simplifier l'écriture, à l'intérieur d'un même script.

Il arrive fréquemment qu'une variable soit égale à une autre variable + une valeur fixe (ex: V508=V509 + 1000) ou résulte d'un calcul plus ou moins complexe.

Par exemple, la variable $07D4 mesure à tout instant l'altitude de l'avion. Sa valeur en soi ne signifie rien, si on veut obtenir l'altitude en pieds, il faut diviser la valeur de cette variable par 19975.433 (c'est Peter Dowson qui le dit, on veut bien le croire) Supposons que nous voulions nous servir de $07D4 (notre variable SIOC 0520 ou ALTI) pour faire une alarme de déclenchement d'un son lorsque l'altitude de l'avion sera + ou - 1000 pieds par rapport à l'altitude demandée au sélecteur d'altitude.

Il va falloir définir des variables intermédiaires avec une définition:

Si la variable ALTI divisée par 19975.433 + 1000 pieds est égale à la valeur de la variable de lecture de l'altimètre, alors un son est émis.

On peut simplifier largement cette écriture en définissant une variable locale. Nous dirons une fois pour toutes que la variable locale L0=ALTI/19975.433 (L0 c'est L "zéro", car la suivante s'appellera L1, etc... jusqu'à L2)

 

Les définitions de variables intermédiaires seront beaucoup plus simples:

 

ALTI_1=L0

ALTI_2=LO + 1000

ALTI_3=LO - 1000 etc...

 

Dès qu'un calcul intervient et se répète, une variable locale simplifie bien les choses.

 

Ces variables locales ne sont valables qu'à l'intérieur d'un même script (groupe de commandes, ou sous-ensemble de programmation, entre un { et un } en texte, exécuté lorsque la variable change de valeur).

 

Les variables locales peuvent avoir une valeur numérique, décimale ou entière, positive ou négative, dans ce cas nous les appellerons L0, L1 et L2, car il n'y en a que trois à notre disposition.

 

Elles peuvent aussi avoir une valeur dite "booléenne" c'est à dire 1 ou 0, VRAI ou FAUX. Dans ce cas nous les appellerons C0, C1 et C2. Evidemment, les variables locales C correspondront souvent à une variable sur un interrupteur, ayant la valeur 0 ou 1.

 

On peut aussi combiner les variables locales L avec les C dans une même formule.


les variables internes

A ne pas confondre avec les variables "locales" du paragraphe précédent.

 

Il peut arriver que certaines fonctions présentes sur un avion "add-on" ne correspondent à rien à l'intérieur du simulateur. Et par conséquent, il n'y a aucune variable correspondante dans la liste de Peter Dowson. Exemple: sur un Beech 200 , il y a un interrupteur pour le convertisseur (Inverter), commande importante puisque si l'interrupteur reste ouvert, la gauge de Torque ne fonctionne pas, et un voyant d'alarme s'allume en rouge. Or, l'Inverter, FS ou P3D ne connaîssent pas...

 

Puisqu'il n'existe pas de variable, rien de plus simple que d'en créer une nous-mêmes. On peut créer une variable portant n'importe quel numéro, par exemple var 900 (il paraît qu'il vaut mieux rester en dessous de 2000). On pourra lui associer une variable d'interrupteur, liée à IOCard Switches, une variable de sortie Output pour une LED, et bien entendu également, on pourra mettre dans le script d'une variable interne toutes les commandes habituelles, IF, ELSE etc...

 

Exemple:

Remarquez que la variable interne INVERTER est non liée, puisque ne correspondant à rien dans FSUIPC, Non liée, mais parfaitement fonctionnelle, puisque l'interrupteur de la var 420 pourra très bien déterminer que la var 900 = 1 si lui même est = 1 (dans ce cas, au lieu de faire des IF et des ELSE, il vaut mieux on ajouter une commande ASSIGN à la var 420 pour dire "var900=var420" ou INVERTER = INVERTER_SW.

 

Souvenez-vous, la variable SUIT l'interrupteur, donc INVERTER = INVERTER_SW, mais c'est l'interrupteur qui commande, donc la commande en question est à mettre dans le script de la variable interrupteur, et non dans INVERTER. De même, la LED SUIT sa variable, mais c'est la variable qui commande)

On imagine le parti qu'on peut tirer des variables internes, sachant qu'une variable SIOC, y compris interne peut déclencher un équivalent clavier, et que cet équivalent clavier peut être attribué à une fonction particulière dans FSUIPC. Une variable interne peut même être commandée par une variable inconnue d'un add-on récent sophistiqué, il suffira de faire un "miroir" de la variable cachée en question (celà s'appelle une L:var) et de faire en sorte que la L:var modifie la variable interne INVERTER.


CHAPITRE SUIVANT: 13- les subroutines