UN SIMULATEUR DE BEECHCRAFT B200

UN SIMULATEUR DE BEECHCRAFT B200

Tutoriel Lua pour interfacer des Lvars avec des inputs et outputs SIOC

Je profite du changement de modèle d'avion pour vous écrire un tutoriel sur la façon d'interfacer des Lvars avec des Inputs et Outputs SIOC.

Cette méthode diffère de la méthode que je vous avais décrite il y a quelque temps pour interfacer l'inverter avec une Lvar en ce sens qu'il faut plonger dans l'écriture d'un script Lua.

 

Sur mon nouvel avion en l'occurence le B200 de flightOne qui remplace désormais le KA350 natif de P3DV4 il y a pas mal de Lvars que je souhaite utiliser pour avoir de nouvelles fonctionnalités et simplifier ma gestion des alarmes.

Je ne vais pas rentrer dans tous les détails pour l'instant et je vais prendre l'exemple des interrupteurs Bleed Air et des leurs alarmes rouges et vertes  associées.

Les interrupteurs Bleed Air sont situés sur le panneau Copilote gauche, ils ont chacun 3 positions.

En bas ils sont Off, au milieu Instruments et Env Off et en haut Open

Quand ils sont en bas, l'alarme rouge Bleed Air fail droite ou gauche s'allume sur le panneau des warning

Au milieu, les alarmes rouges respectives s'éteignent et seules les alarmes vertes Bleed Air Off sur le panneau des Caution sont allumées

Les interrupteurs placés en position Open éteignent les alarmes vertes.

 

J'ai donc sur le simulateur 2 interrupteurs à 3 positions, ce qui fait 4 inputs SIOC et 4 voyants d'alarmes donc 4 outputs SIOC à gérer.

 

Le problème c'est qu'on ne peut pas interfacer directement une input ou une output SIOC avec Lua, il faut passer par des variables FSUIPC et pour se faire on va devoir trouver des variables libres.

Ca tombe bien nous en avons dans la plage 66C0.

 

La première chose à faire c'est d'établir la liste des Lvars de l'avion.

Pour se faire je vous invite à lire l'article sur le codage de l'inverter avec Lvar, j'y décris la méthode pour avoir la liste des Lvars de votre avion.

Seul impératif  je vous le rappelle, il faut une version enregistrée donc payante de FSUIPC

 

Une fois votre liste de Lvars imprimée, il faut trouver la ou les Lvars qui nous intéresse.

 

Pour ce tuto je vais utiliser  les  Lvars suivantes  :

 

L:B200LBleedSwitch     inter de gauche

L:B200RBleedSwitch     inter de droite

L:B200CLBld                  voyant alarme verte caution Bleed Air Off gauche 

L:B200CRBld                 voyant alarme verte caution Bleed Air Off droite  

L:B200WLBlAirFail         voyant alarme rouge warning Bleed Air fail gauche 

L:B200WRBlAirFail        voyant alarme rouge warning Bleed Air fail droite

 

 

Le code SIOC

 

Maintenant que j'ai mes Lvars, il faut que je déclare 6 variables dans mon code Sioc, ces variables seront des Offsets libres de FSUIPC et ce sont elles qui seront en quelque sorte tampons pour le programme Lua qui va tourner en boucle.

Ces variables seront de longueur 1 donc voici les lignes de code rajoutées dans mon SIOC

 


Var 0156, name LVAR_LBLD, Link FSUIPC_INout, Offset $66C2, Length 1 // Voyant L bleed air off
Var 0157, name LVAR_RBLD, Link FSUIPC_INout, Offset $66C3, Length 1 // Voyant R bleed air off
Var 0158, name LVAR_LBLDSW, Link FSUIPC_INout, Offset $66C4, Length 1 // position du switch L bleed air  ( 2 = off, 1 = Env off, 0 = Open )
Var 0159, name LVAR_RBLDSW, Link FSUIPC_INout, Offset $66C5, Length 1 // position du switch R bleed air  ( 2 = off, 1 = Env off, 0 = Open
Var 0161, name LVAR_MLBLD, Link FSUIPC_INout, Offset $66C7, Length 1 // Voyant rouge L bleed air fail
Var 0162, name LVAR_MRBLD, Link FSUIPC_INout, Offset $66C8, Length 1 // Voyant rouge R bleed air fail

 

 

 Ces variables déclarées, il faut maintenant avoir une input pour chaque position de chaque switch

Je vais rester sur le switch de gauche, je vous laisse le soin de faire la même chose pour le droit

Donc , déclarons les 2 inputs pour notre switch

 

var 150, name BleedL1_sw, link iocard   ......

var 151, name BleedL2_sw, ......

 

En position bas l'inter doit donner la valeur   2 à l'offset Fsuipc, en position médiane l'offset doit prendre la valeur 1 et en position haute il doit prendre la valeur 0.

On rejoint la programmation classique, chaque fois que l'inter bouge, il donne une valeur à l'offset correspondant

 

var 150, name BleedL2_sw, link iocard   ......   //  position basse du switch

{

    If &BleedL2_sw = 1

    {

          &LVAR_LBLDSW = 2                                                 // l'offset va prendre la valeur 2 off

    }

   else

   {

           &LVAR_LBLDSW = 1                                                 // l'offset va prendre la valeur 1  instr et env off

   }

}

 

var 151, name BleedL1_sw, link iocard   ......

{

    If &BleedL1_sw = 1

    {

          &LVAR_LBLDSW = 0

    }

else

   {

 

           &LVAR_LBLDSW = 1                                                 // l'offset va prendre la valeur 1  instr et env off

 

   }

 

 

}

 

Vous suivez     ?        Pause

 

 

Maintenant que nos déclarations de switchs sont faites, il faut s'occuper des outputs pour piloter les leds vertes et rouges.

Donc déclarations classique de 4 variables Outputs

 

var 160, name bleedLgreenLed, link iocard, device 1, output 12   // alarme verte gauche

 

Et comme c'est l'offset Fsuipc qui va changer ( $66Cx ),  c'est lui qui commandera l'output et non pas l'inverse !

Il va falloir rajouter une section sous chaque offset du style ....

 

Var 0156, name LVAR_LBLD, Link FSUIPC_INout, Offset $66C2, Length 1 // Voyant L bleed air off 

{

    &bleedLgreenLed = & LVAR_LBLD

}

 

 

 

Le code SIOC étant prêt , il faut maintenant écrire le script Lua.

 

Le script LUA

 

Ce script va tourner en boucle et on verra un peu plus loin comment le lancer de façon automatique par FSUIPC.

Ce script fera 2 choses, il récupèrera en permanence la valeur des interrupteurs depuis SIOC et rangera ces valeurs dans les Lvars

L:B200LBleedSwitch et :B200RBleedSwitch et il copiera en permanence les valeurs des Lvars

L:B200CLBld, L:B200CRBld, L:B200WLBlAirFail et L:B200WRBlAirFail  dans les offsets qui piloterons les Outputs SIOC

Pour tourner en permanence ce script va commencer par une instruction

 

While 1 do

 

 

end

 

A l'intérieur de cette boucle nous allons mettre les instructions pour copier les Lvars des voyants d'alarmes dans les Offsets libres de Fsuipc qui eux se chargerons de changer les valeurs des Outputs donc des leds correspondantes

 

ipc.writeUB(0x66C0,ipc.readLvar('L:B200CLIgnition'))
ipc.writeUB(0x66C1,ipc.readLvar('L:B200CRIgnition'))
ipc.writeUB(0x66C2,ipc.readLvar('L:B200CLbld'))
ipc.writeUB(0x66C3,ipc.readLvar('L:B200CRbld'))

Chaque ligne d'instruction se charge de lire ( ipc.readLvar ) la Lvar et de l'écrire ( ipc.writeUB ) dans l'offset correspondant.

 

Pour les switchs c'est un peu différent

 

On teste si la Lvar est différente de la valeur de l'offset du switch

if ipc.readLvar('L:B200LBleedSwitch')~=ipc.readUB(0x66c4)   et si c'est différent alors

 

then   on écrit la valeur du switch dans la Lvar


    ipc.writeLvar('L:B200LBleedSwitch',ipc.readUB(0x66c4))

end

 

On intercale un sleep pour ralentir un peu la boucle

 

ipc.sleep(100)

Voici donc le script Lua complet pour la gestion des Bleed Air

 

Très Important :   la façon de programmer décrite ci dessous n'est pas bonne car elle fait tourner un programme en boucle, c'est contre productif et n'est pas digne d'un informaticien mais pour l'instant cela vous permet d'aborder en douceur la programmation Lua.

On verra par la suite comment faire pour transformer ce programme afin qu'il ne lance une action que lorsqu'un changement de valeur de variable s'opère.

 

 

 

 

while 1 do

ipc.writeUB(0x66C0,ipc.readLvar('L:B200CLIgnition'))
ipc.writeUB(0x66C1,ipc.readLvar('L:B200CRIgnition'))
ipc.writeUB(0x66C2,ipc.readLvar('L:B200CLbld'))
ipc.writeUB(0x66C3,ipc.readLvar('L:B200CRbld'))

-- pour les inters bleed air
-- faire correspondre l'inter et la Lvar   inter off = 2, env off = 1, open = 0
if ipc.readLvar('L:B200LBleedSwitch')~=ipc.readUB(0x66c4) then
    ipc.writeLvar('L:B200LBleedSwitch',ipc.readUB(0x66c4))

end
if ipc.readLvar('L:B200RBleedSwitch')~=ipc.readUB(0x66c5) then
    ipc.writeLvar('L:B200RBleedSwitch',ipc.readUB(0x66c5))

end
ipc.sleep(100)

end

Ce script sera sauvegardé en fichier portant l'extension .lua dans le répertoire modules de P3DV4, le même répertoire où se trouve FSUIPC

dans mon cas le fichier s'appelle B200F1.lua

 

Pour finir on modifie le fichier Fsuipc.ini  en rajoutant à la fin la section [AUTO] avec une ligne contenant le nom du fichier sous cette forme

 


[AUTO]
1= lua B200F1           B200F1 c'est le nom de mon fichier .lua

 C'est cette section rajoutée qui permettra le lancement automatique du script lors du lancement de P3DV4 et donc de Fsuipc



10/02/2019
0 Poster un commentaire

A découvrir aussi


Ces blogs de Loisirs créatifs pourraient vous intéresser

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 121 autres membres