Voici le code utilisé pour déclarer si l'avion est alimenté.
Il est valable pour l'A320, et il marche impec chez moi.
La variable principale qui porte cette information est la variable ELEC_AVAIL avec 1 pour true et 0 pour False.
Plusieurs procédures permettent de définir l'état de cette variable.
Les procédures sont appellées dans mon code au moment de l'alumage des LEDs des voyants de l'overhead.
Par exemple, la procédure PROC_APUGEN, qui vérifie si le générateur APU est fonctionnel, se lance au changements d'état
des LEDs "APU MASTER AVAILABLE", "APUGEN FAULT" et "APU GEN OFF".
La procédure "maitresse" qui définit la cascade de priorité des générateurs est MAIN_ELEC_AVL
Les offsets d'état des Moteurs sont nécessaire pour le code des générateurs ENG1 et ENG2.
Pour conclure, j'écrit la variable ELEC_AVAIL dans un offset libre FSUIPC, ce qui permet de récupérer cette information sur d'autres cartes SIOC du réseau.
- Code: Tout sélectionner
//VARIABLES
var 9600, name ELEC_ENG1, static // ELECTRICITE Moteur1 dispo ou non
var 9601, name ELEC_ENG2, static // ELECTRICITE Moteur2 dispo ou non
var 9602, name ELEC_APU, static // ELECTRICITE APU dispo ou non
var 9603, name ELEC_EXTPWR, static // ELECTRICITE extPwr dispo ou non
//EXT POWER
var 9610, name PROC_EXTPWR, static, link SUBRUTINE // Fonction de vérification alimentation EXT POWER
{
IF &L_EXTPWR_OFF = 1
{
&ELEC_EXTPWR = 1 // dispo et selectionné
}
ELSE
{
&ELEC_EXTPWR = 0 // dispo mais non selectionné
}
CALL &PROC_BUSTIE
}
//APU GENERATOR
var 9611, name PROC_APUGEN, static, link SUBRUTINE // Fonction de vérification alimentation APU GENERATOR
{
IF &L_APU_s_avail = 1
{
IF &L_APUGEN_FLT = 0
{
IF &L_APUGEN_OFF = 0
{
&ELEC_APU = 1
}
ELSE
{
&ELEC_APU = 0
}
}
ELSE
{
&ELEC_APU = 0
}
}
ELSE // APU unavailable
{
&ELEC_APU = 0
}
CALL &PROC_BUSTIE
}
//ALIM GEN1
var 9614, name PROC_GEN1, static, link SUBRUTINE // Fonction de vérification alimentation GEN1
{
IF &R_ENG1_RUN = 1
{
IF &L_IDG1_FLT = 1 // IDG1 désemboité
{
&ELEC_ENG1 = 0
}
ELSE // IDG1 connecté
{
IF &L_GEN1_OFF = 1
{
&ELEC_ENG1 = 0
}
ELSE
{
IF &L_GEN1_FLT = 1
{
&ELEC_ENG1 = 0
}
ELSE
{
&ELEC_ENG1 = 1
}
}
}
}
ELSE
{
&ELEC_ENG1 = 0
}
CALL &PROC_BUSTIE
}
//ALIM GEN2
var 9615, name PROC_GEN2, static, link SUBRUTINE // Fonction de vérification alimentation GEN2
{
IF &R_ENG2_RUN = 1
{
IF &L_IDG2_FLT = 1 // IDG2 désemboité
{
&ELEC_ENG2 = 0
}
ELSE // IDG2 connecté
{
IF &L_GEN2_OFF = 1
{
&ELEC_ENG2 = 0
}
ELSE
{
IF &L_GEN2_FLT = 1
{
&ELEC_ENG2 = 0
}
ELSE
{
&ELEC_ENG2 = 1
}
}
}
}
ELSE
{
&ELEC_ENG2 = 0
}
CALL &PROC_BUSTIE
}
var 9619, name PROC_BUSTIE, static, link SUBRUTINE // Fonction de Verification BUS TIE est sur ON
{
IF &L_BUSTIE_OFF = 1
{
&ELEC_AVAIL = 0
}
ELSE
{
CALL &MAIN_ELEC_AVL
}
}
// DECISION PRIORITE ALIMENTATION
var 9620, name MAIN_ELEC_AVL, static, link SUBRUTINE // Fonction de hierarchisation des alimentations
{
IF &ELEC_ENG1 = 1
{
&ELEC_AVAIL = 1
}
ELSE
{
IF &ELEC_ENG2 = 1
{
&ELEC_AVAIL = 1
}
ELSE // AUCUN GEN ACTIF
{
IF &ELEC_EXTPWR = 1
{
&ELEC_AVAIL = 1
}
ELSE // GEN & EXT unavailable
{
IF &ELEC_APU = 1
{
&ELEC_AVAIL = 1
}
ELSE // GEN & EXT & APU unavailable donc pas d'alimentation
{
&ELEC_AVAIL = 0
}
}
}
}
}
var 9206, name ELEC_AVAIL, static, Link FSUIPC_OUT, Offset $66C1, Length 1
{
}
var 9210, name R_ENG1_RUN, static, link FSUIPC_IN, offset $0894, length 2 // Engine 1 combustion flag (TRUE if engine firing)
{
call &PROC_GEN1
}
var 9211, name R_ENG2_RUN, static, link FSUIPC_IN, offset $092C, length 2 // Engine 2 combustion flag (TRUE if engine firing)
{
call &PROC_GEN2
}