L’exemple précédent , la manette de train, était relativement simple, le train est rentré ou sorti. Une seule condition IF et ELSE était attachée à la variable.
Nous avons préparé les variables 020 à 022 concernant les diodes LED d’affichage de la position du train, nous allons maintenant nous en servir.
Nous ajouterons maintenant une commande indiquant que le train est en transit, commande liée à une diode rouge, mais sans création d’une nouvelle variable, l’état ne sera déterminé que par l’état des autres variables. Pour simplifier les choses, nous n’allons créer qu’une seule variable LED Rouge, et non un voyant par train. L’unique voyant « en transit » s’allumera lorsqu’un quelconque des trois trains sera en mouvement (c’est à dire que sa variable de position sera inférieure à 16383, mais supérieure à 0).
Nous aurons ainsi:
Var 0012 ou LEFT_GEAR_POS, position du train gauche ($0BF4) associée à Var 0020 ou LEFT_GEAR_LED, diode verte du train gauche, agissant sur la nouvelle variable Var 0025 ou GEAR_TRANS_LED du transit.
Var 0014 ou RIGHT_GEAR_POS, position du train droit ($0BF0) + Var 0022 ou RIGHT_GEAR_LED, diode verte du train droit, agissant également sur la variable Var 0025 ou GEAR_TRANS_LED du transit.
Var 0013 ou NOSE_GEAR_POS, position du train avant ($0BEC) + Var 0021ou NOSE_GEAR_LED, diode verte du train avant, agissant sur la variable Var 0025 ou GEAR_TRANS_LED du transit.
Il nous reste à créer la variable 0025 GEAR_TRANS_LED.
Définition de ce qu’on veut obtenir, pour le train avant:
en langage courant | traduction | en langage courant | traduction | en langage courant | traduction |
Si | IF | ||||
le train avant est sorti, |
NOSE_GEAR_POS =16383 | ||||
la sortie OUT de la Master est active |
NOSE_GEAR_LED =1 | ||||
ET la diode transit est éteinte |
GEAR_TRANS_LED =0 | ||||
autrement, | ELSE | ||||
Si | IF | ||||
la position du train avant est plus grande ou égale à 1, (le train est entre 0=rentré et 16383=sorti |
NOSE_GEAR_POS >=1 | ||||
la sortie OUT de la Master est inactive |
NOSE_GEAR_LED =0 | ||||
et la diode de transit est allumée |
GEAR_TRANS_LED =1 | ||||
autrement, | ELSE | ||||
Si | IF | ||||
le train avant est rentré |
NOSE_GEAR_POS +0 | ||||
la sortie Out de la Master est éteinte |
NOSE_GEAR_LED =0 | ||||
et la diode de transit est éteinte |
GEAR_TRANS_LED =0 |
Ce qui fait trois conditions IF, d’où un décalage de l’arborescence à chaque fois qu’une condition nouvelle est exposée, décalage symbolisé sur le tableau ci-dessus par un changement de colonnes.
On remarque qu’on peut avoir plusieurs ASSIGN sous un même IF. Bien noter surtout que à un IF correspond un ELSE (mais ce n’est pas obligatoire), et que le ELSE est aligné avec son IF. D’ailleurs, en cas d’erreur, Config SIOC ne veut pas aller plus loin.
Pour ajouter plusieurs attributions (Assign) à la suite, il suffit de faire plusieurs fois un clic droit sur la condition IF, et de choisir les ASSIGN nécessaires.
Transposons donc dans les commandes SIOC les fonctions définies par le tableau ci-dessus.
Voilà ce que cela donne dans Config SIOC pour le train avant:

Il n’y a plus qu’à faire la même chose pour les variables de position train droit et gauche.
Au premier abord cela peut paraître assez complexe, mais quand on a bien compris cela, tout le reste de SIOC devient limpide…
Qu’est-ce que cela donnerait en mode texte ? Cliquez sur File / Export to TXT, choisissez le nom essai_1.txt et enregistrez.
Nota: nous avons utilisé dans cet exemple des signes comme >=, ce sont des « opérateurs logiques ». Vous en trouverez le détail un peu plus loin.
Enregistrez ce nouveau sioc.ssi et essayez-le dans FS/P3D (en faisant RELOAD dans SIOC) . C’est magique !
Variante: on peut aussi dire des choses comme « SI l’inter de batterie est ON, ET SI le moteur 1 est en marche, ET SI la génératrice 1 est sur OFF, ALORS l’alarme de charge batterie est sur ON. Cela fait trois IF pour une seule assignation, et cela s’écrit en décalant d’un cran à chaque fois chaque condition vers la droite.