Prosim737 v2.0 et SISMO

Silverstar

CONTROLEUR AERIEN
Messages
22 936
Réactions
3 224
Points
3 477
Je pars d'une base propre, donc pour ceux qui écrase leur version actuelle, pensez à supprimer vos affectations et ne pas lancer le script SISMO.

Vérifier aussi que l'adresse IP de Prosim correspond a l'adresse IP HOST de votre matériel SISMO.

J'ai donc télécharger et installer la Version démo 2 dans un autre dossier sur mon bureau.

Apres lancement

1515442972_124.jpg


J'ai ensuite été dans HELP/UPDATES pour installer la 2.0.1b2

1515443051_update.jpg


Ensuite j'ai été dans CONFIG/CONFIGURATION/DRIVERS et j'ai coché SISMO Enabled puis OK

1515443191_126.jpg


Prosim redémarre et j'ai le pedestal qui apparait sur le menu principale.

Je retourne dans CONFIG/CONFIGURATION/DRIVERS Sismo Advanced
Je vais sur mon Pedestal et je coche les modules en ma possession.

Note : Tous les modules cochés fonctionnent parfaitement dans le simulateur, mais malgré la mise à jour 2.0.1b2 le menu déroulant ne s’affiche pas correctement, j'ai envoyé un message à Prosim pour clarifier

1515443304_128.jpg
 
Le problème du menu déroulant sera régler a la prochaine mise à  jour.
Pour le moment je reste en STBY, avant de passer à  la suite des tests.
 
Le piédestal fonctionne parfaitement avec le script intégré, mise à  part que les modules sont allumés même en C/D, ce qui n'est pas le cas avec le script.exe de SISMO. Et je ne sais pas si ce problème sera résolu ou dans combien de temps il le sera.
 
Ah, c'est un des soucis du plug and play, on ne sait plus corriger soi même ce genre de dét'ail
 
J'ai fait pas mal de tests avec la V2 de Prosim, lu beaucoup le forum support et je pense qu'on s'est foutu de nous.
On a appâter les gens avec des fonctionnalité plug n play sans script, mais au finale la V2 c'est une grosse beta à  la con.

La V2 est sorti avec un nombre incalculable de bugs en tout genre, un produit qui va finalement être soumis à  un nombre important dutilisateurs, les migrants de la V2 et les nouveaux payeurs à  1500€.

Ils remontent tous les bugs qui auraient dû être fixés par Prosim avant la sortie de la V2.

Avant la sortie ils auraient du lancer une bêta fermée ou bêta privée, dans laquelle les personnes intéressées pour tester la V2 doivent sinscrire au préalable ou sont contactées par Prosim pour testé la V2.

Une panel avec des simmeurs qui ont du SIOC, du SISMO, du CPFlight....

Ensuite continuer à  tester à  des fins de tests de dernière minute visant à  déceler les toutes dernières erreurs subsistant au sein du programme.

Puis la version actuelle dit "Finale" à  1500€ et le passage de la 1.50 à  la V2 pour ceux interessé.

Ensuite on corrige les bugs non décelé et on améliore le logiciel avec de nouvelles fonctionnalités payantes via labonnement des mises à  jour.

AMHA
 
C'est quoi qui va pas ?
Les dll pour les modules externes fournit par Sismo ,Sioc ,Cpflight ,etc ..?
Prosim à  la base fonctionne sans ces dll avec les méthodes standards dattribution des I/O ?
J'aimerai comprendre ...
Comme je te lai signalé il y a peu ,il y a doffice un programme sous la forme d'une dll pour interfacer Prosim et tes panel sismo ,enfin pas tes panel mais le code Sismo.
Il ne peut en être autrement.
Il aurait été beaucoup plus malin de la part de prosim de fournir une dll avec ses fonctions et paramètres.C'est valable alors pour n'importe quoi.
Il cherche la complication en multipliant les dll de x,y,z etc ....
JeanMi
 
Tu es sévère .... mais certainement réaliste

La mise au point de logiciel lorsque tu ne maîtrises pas toute la chaîne matériel et logiciel est complexe.
Et comme le nombre dutilisateurs est quand même important, les conséquence d'un bug est multiplié par n, n étant le nombre dutilisateurs.

Tu as raison, ils n'auraient pas du mettre en vente de suite la version 2, mais plutôt loffrir gratuitement aux anciens comme ils l'ont fait et attendre un débogage complet, un peu comme avec les premières versions 1.xx qui ét'aient gratuites ...

AMHA aussi ;)
 
Fab la migration est gratuite pour les anciens...

Il cherche la complication en multipliant les dll de x,y,z etc ....

Tout a fait dou lintérêt de faire des beta-test avec des beta-testeur en amont, faire cavalier seul pas une bonne idée.
Et peut être une précipitation de vouloir la sortir à  tout prix début 2018....

Il avaient préparer le coup puisque dans les CGI ils disent clairement que le logiciel doit etre accepté tel quels avec les bugs et défauts visibles et invisibles donc si tu migres ou si tu achètes tu deviens un beta-testeur de la V2, et ça c'est pas normal pour une produit professionnel à  plus de 1500€.

Pour moi V2 doit être une version avec des bugs mineurs.

Alors V2 :

Pas de manuel pour installer le produit (doit se débrouiller tout seul)
Le script dll de sismo est différent de l'original (le pedestal est mis sous tension alors que le cockpit est dark)
La latence présente sur la V1 est toujours présente sur la V2 (Obliger de créer un Simconnect.xml dans la racine)
Les phares ne fonctionnent pas (Landings et runways)
Le cargo fire test ne marche pas
Il y a eu le bug cité plus haut de la barre de défilement rendant inutilisable les modules SIsmo acheté séparément (corrigé)
Avec le script SIOC les touches du CDU sont mélangés (obligé de faire comme avant avec SIOC)

Apres j'ai pas fait de vols complets pour vérifier si d'autres problèmes existent puisque je suis limité à  30 minutes.
 
Silverstar a dit:
...
Apres j'ai pas fait de vols complets pour vérifier si d'autres problèmes existent puisque je suis limité à  30 minutes.


Pourquoi 30mn, tu n'as pas fait la migration de ta V1
 
Ben non je suis encore en 1.50 en production.
J'ai créer un second dossier V2 démo pour faire mes essais.

Si tu migres sur V2 tu ne peux plus retourner sur V1.50
 
Windy ,désolé ,mais faire des dll sans donner les fonctions ,est bien loptique du cavalier seul ;)
On a les fonctions et paramètres dans le sdk pour utiliser Fsuipc ,on na pas de soucis !
On a les fonctions et paramètres pour travailler avec IOCP ,on na pas de soucis !
La meilleur façon de foutre le bordel est la façon qua choisit Prosim.
Et la meilleur façon de ne se faire entuber et de faire fonctionner les systèmes du 737 est la façon suivante :
Tien vla le mon code pour la gestion des bus Ac/Dc du 737 et elle correspond à  la réalité ,c'est pas du Prosim !

Code:
[== Indéfini ==]
unit AcDcPower;

interface

Uses SysUtils ,Graphics ,Dialogs ,OverHead_Aft ,VarSioc_Ovh_Aft ,Korry ,VarConsoleInstructeur;

     procedure InitAcDCPower();
     procedure ScanAcDcLevelSystem();

Const EngIgnitionIntensite = 4;
      EngStarterValveIntensite = 7;
      IntensiteLimiteGen = 140;

Var //Public
    AutoGenerator ,OnAir ,RelayTR3 ,Gen1Run ,Gen2Run : Boolean;
    CapaciteBatResiduelle ,IntensiteBatCourante ,TensionBatCourante ,TensionBatCourantePrec ,
    ApuEgt ,ApuEgtPrec ,IAmorcageApu ,RefBatLow : Real;

    DelayAPU : Word;


    TIEBusLevel ,APULevel ,APUIntensite ,APUFz ,
    GroundLevel ,GroundIntensite ,GroundFz ,

    Generatrice1Level ,Generatrice1Intensite ,Generatrice1Fz ,OilTempGen1 ,
    Generatrice2Level ,Generatrice2Intensite ,Generatrice2Fz ,OilTempGen2 ,

    ACGndServiceBus1Level ,ACGndServiceBus1Intensite ,
    ACGnd28VSvceBus1Level ,ACGnd28VSvceBus1Intensite ,
    ACGndServiceBus2Level ,ACGndServiceBus2Intensite ,
    ACGnd28VSvceBus2Level ,ACGnd28VSvceBus2Intensite ,

    AcTransferBus1Level ,AcTransferBus1Intensite ,
    AcTransferBus2Level ,AcTransferBus2Intensite ,
    ACMainBus1Level ,ACMainBus1Intensite ,
    ACMainBus2Level ,ACMainBus2Intensite ,
    GalleyBusAetBLevel ,GalleyBusAetBIntensite ,
    GalleyBusCetDLevel ,GalleyBusCetDIntensite ,
    AC115VStandbyBusLevel ,AC115VStandbyBusIntensite ,AC115VStandbyBusFZ ,
    AC28VStandbyBusLevel ,AC28VStandbyBusIntensite ,

    DCStanbyBusLevel ,DCStanbyBusIntensite ,
    DCBus1Level ,DCBus1Intensite ,
    DCBus2Level ,DCBus2Intensite ,
    HotBatteryBusLevel ,HotBatteryBusIntensite ,
    SwitchedHotBatBusLevel ,SwitchedHotBatBusIntensite ,
    BatteryBusLevel ,BatteryBusIntensite ,

    StaticINVLevel ,StaticINVFz ,StaticINVIntensite ,

    TR1Level ,TR2Level ,TR3Level ,
    TR1Intensite ,TR2Intensite ,TR3Intensite ,
    UCrossBus ,ITotalTrs  ,IChargeBatAC : Real;





    VDCDisplay ,ADCDisplay ,VACDisplay ,AACDisplay ,FZACDisplay ,
    SleepKorry : Word;

    BatStart ,BatterySw ,StopBat ,ChargerBatterie ,BusTransfSw ,StandbyPowerSwitchPosAuto ,StandbyPowerSwitchPosBat ,
    StartAPUSw ,StartApuOnBat ,StopAPUSw ,GalleyBusAetBDeConnecte ,GalleyBusCetDDeConnecte ,
    ACMainBus1DeConnecte ,ACMainBus2DeConnecte ,
    APUSw ,APUSwL ,APUSwR ,APUAvailable ,StartAPUAbort ,GNDSw ,GNDAvailable ,Gen1Available ,GCB1 ,BTB1 ,Gen2Available ,
    GCB2 ,BTB2 ,CrossBusTieRelay ,TR1Available ,TR2Available ,TR3Available ,BatEnCharge : Boolean;

    StartMoteur1 ,StartMoteur2 : Boolean;


    DCVoltsPrec ,DCAmpPrec ,AcVoltsPrec ,AcAmpPrec ,FzAcPrec : Real;

implementation

uses graphique ,BleedAirSystem ,FuelSystem;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Init Ac Dc Power ---------------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure InitAcDCPower();
begin
  //Gestion Batterie
  CapaciteBatResiduelle := 35;
  IChargeBatAC := 0;
  IntensiteBatCourante := 0;
  RefBatLow := 20;
  TensionBatCourante := 24;
  DelayAPU := 0;
  RelayTR3 := True; //Pos sur AcTransfertBus2
  CrossBusTieRelay := True;//Fermé
  AutoGenerator := True;
  OilTempGen1 := 40;
  OilTempGen2 := 40;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Puissance Sol 115 Vac ------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Ground_Level();
begin
  if INSTRUCTOR_GROUND_POWER_AVAILABLE then
     begin
       if GNDSw then //Connecté sur le TieBus
          begin
            if BTB1 And BTB2 then
               GroundIntensite := AcTransferBus1Intensite +
                                  AcTransferBus2Intensite;

            if BTB1 And Not BTB2 then
               GroundIntensite := AcTransferBus1Intensite;

            if Not BTB1 And BTB2 then
               GroundIntensite := AcTransferBus2Intensite;

            if Not BTB1 And Not BTB2 then
               GroundIntensite := 0;
          end
          else
          if INSTRUCTOR_GND_SERVICE_RELAY then
             GroundIntensite := ACGndServiceBus1Intensite + ACGndServiceBus2Intensite
             else
             GroundIntensite := 0;
       GroundLevel := Trunc(119 - (GroundIntensite * 0.1));
       GroundFz := Trunc(407 - (GroundIntensite * 0.1));
       GNDAvailable := True;
     end
     else
     begin
       GroundIntensite := 0;
       GroundLevel := 0;
       GroundFz := 0;
       GNDAvailable := False;
     end;

  if GNDAvailable then
     begin
       if Not K_GRD_POWER_AVAILABLE then
          K_GRD_POWER_AVAILABLE_ON();
     end
     else
     if K_GRD_POWER_AVAILABLE then
        K_GRD_POWER_AVAILABLE_OFF();
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du Sw de la batterie ,Var Sioc 245 --------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Battery_Switch();
begin
  if Not BatterySw And Not StopBat then
     if TabEntreesSioc[BatSw] = 1 then //Sw position On
        begin
          BatterySw := True;
          Beep;
        end;
  if BatterySw then
     if TabEntreesSioc[BatSw] = 0 then //Sw position OFF
        BatterySw := False;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Niveau de charge ,tension et courant pompé sur la batterie -----------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Battery_Level();
begin
  if StopBat then
     Exit;

  if (TensionBatCourante < (RefBatLow - 2.0)) And Not StartAPUSw then
     begin //18 Volts
       IntensiteBatCourante := 0;
       BatterySw := False;
       StopBat := True; //On Stop la batterie ,HotBatteryBus n'est plus disponible
       Exit;
     end;

  //HotBatteryBus est toujours connecté sur la batterie
  TensionBatCourantePrec := TensionBatCourante;
  IntensiteBatCourante := HotBatteryBusIntensite;
  if BatterySw then
     begin
       IntensiteBatCourante := IntensiteBatCourante +
                               BatteryBusIntensite +
                               SwitchedHotBatBusIntensite +
                               DCStanbyBusIntensite +
                               StaticINVIntensite;
       if StartAPUSw And StartApuOnBat then //Apu en séquence de démarrage sur la batterie
          IntensiteBatCourante := IntensiteBatCourante + IAmorcageApu
          else
          if (Not StartApuOnBat And StartAPUSw) Or APUAvailable then //Apu en séquence de démarrage sur lAC1 ou APU Starté
             IntensiteBatCourante := IntensiteBatCourante + 2;//2 : Intensité de régulation APU
     end;
  CapaciteBatResiduelle := CapaciteBatResiduelle - ((IntensiteBatCourante / 3600) * (Form1.ScanEventOvh.Interval / 1000));
  TensionBatCourante := (20 + (CapaciteBatResiduelle * 0.2) - (IntensiteBatCourante * 0.057));

  if (TensionBatCourante > TensionBatCourantePrec)
     then //On a diminué le courant ,on remonte la tension progressivement
     TensionBatCourante := TensionBatCourantePrec + ((TensionBatCourante - TensionBatCourantePrec) / 10);

  if TensionBatCourante < TensionBatCourantePrec
     then //On a augmenté le courant ,on descend la tension progressivement
     TensionBatCourante := TensionBatCourante + ((TensionBatCourantePrec - TensionBatCourante) / 2);
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le Hot Battery Bus (toujours connecté sur la batterie) --------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Hot_Battery_Bus(); //Puissance dispo en %
begin
  if (TensionBatCourante > (RefBatLow - 2)) then
     begin
       HotBatteryBusLevel := TensionBatCourante;
       HotBatteryBusIntensite := form2.TrackBar7.Position;
     end
     else
     begin
       HotBatteryBusLevel := 0;
       HotBatteryBusIntensite := 0;
     end;

  if TabEntreesSioc[DcBusSelBat] = 1 then
     begin
       VDCDisplay := Trunc(HotBatteryBusLevel);
       ADCDisplay := Trunc(HotBatteryBusLevel);
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du relais qui connecte la puissance électrique sol sur le Tie Bus -------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure GroundLevelSwitch(); //GNDSw
begin
  if (TabEntreesSioc[GrdPwrOn] = 1) And GNDAvailable then
     begin
       if APUSw then
          begin
            APUSw  := False;
            APUSwL := False;
            APUSwR := False;
          end;
       GNDSw := True; //Ground Switch Closed
     end;
  if TabEntreesSioc[GrdPwrOff] = 1 then
     GNDSw := False; //Ground Switch Open
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du StandPower Switch, Var Sioc 275 en position Auto et 274 en position Bat ----------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Standby_Power_Switch();
begin
  if (TabEntreesSioc[StbyPwrAuto] = 1) And (TabEntreesSioc[StbyPwrBat] = 0) then
     begin
       StandbyPowerSwitchPosAuto := True;
       StandbyPowerSwitchPosBat := False;
     end;
  if (TabEntreesSioc[StbyPwrAuto] = 0) And (TabEntreesSioc[StbyPwrBat] = 1) then
     begin
       StandbyPowerSwitchPosBat := True;
       StandbyPowerSwitchPosAuto := False;
     end;
  if (TabEntreesSioc[StbyPwrAuto] = 0) And (TabEntreesSioc[StbyPwrBat] = 0) then //Position Off
     begin
       StandbyPowerSwitchPosBat := False;
       StandbyPowerSwitchPosAuto := False;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du Bus Tranfer Switch, ,Var Sioc 278 ------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure BusTransfertSwitch();
begin
  if TabEntreesSioc[BusTransfer] = 1 then //Position Off
     begin
       BusTransfSw := True;
       CrossBusTieRelay := False;
     end
     else
     begin
       BusTransfSw := False; //Position Auto
       CrossBusTieRelay := True;
     end;  
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le Bus1 SVCE 115 V AC alimenté par puissance sol ou lAc transfert bus 1 --------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Gnd_115V_SVCE_Bus1();
begin
  if INSTRUCTOR_GND_SERVICE_RELAY then  //Connecté sur Ground Level
     begin
       if GroundLevel > 0 then
          begin
            ACGndServiceBus1Level := GroundLevel;
            ACGndServiceBus1Intensite := form2.TrackBar10.Position +
                                         ACGnd28VSvceBus1Intensite;
          end
          else
          begin
            ACGndServiceBus1Level := 0;
            ACGndServiceBus1Intensite := 0;
          end;
     end
     else //Connecté sur AcTransfertBus2
     begin
       if AcTransferBus1Level > 0 then
          begin
            ACGndServiceBus1Level := AcTransferBus1Level;
            ACGndServiceBus1Intensite := form2.TrackBar10.Position +
                                         ACGnd28VSvceBus1Intensite;
          end
          else
          begin
            ACGndServiceBus1Level := 0;
            ACGndServiceBus1Intensite := 0;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le Bus1 SVCE 28 V AC alimenté par le Bus1 SVCE 115 V AC -------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Gnd_28V_SVCE_Bus1();
begin
  ACGnd28VSvceBus1Level := ACGndServiceBus1Level / 4.1; // +/- 28 V
  if ACGnd28VSvceBus1Level > 0 then
     ACGnd28VSvceBus1Intensite := form2.TrackBar16.Position
     else
     ACGnd28VSvceBus1Intensite := 0;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le Bus2 SVCE 115 V AC alimenté par puissance sol ou lAc transfert bus 2 --------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Gnd_115V_SVCE_Bus2();
begin
  if INSTRUCTOR_GND_SERVICE_RELAY then  //Connecté sur Ground Level
     begin
       if GroundLevel > 0 then
          begin
            ACGndServiceBus2Level := GroundLevel;
            ACGndServiceBus2Intensite := form2.TrackBar11.Position +
                                         IChargeBatAC +
                                         ACGnd28VSvceBus2Intensite;
          end
          else
          begin
            ACGndServiceBus2Level := 0;
            ACGndServiceBus2Intensite := 0;
          end;
     end
     else //Connecté sur AcTransfertBus2
     begin
       if AcTransferBus2Level > 0 then
          begin
            ACGndServiceBus2Level := AcTransferBus2Level;
            ACGndServiceBus2Intensite := form2.TrackBar11.Position +
                                         IChargeBatAC +
                                         ACGnd28VSvceBus2Intensite;
          end
          else
          begin
            ACGndServiceBus2Level := 0;
            ACGndServiceBus2Intensite := 0;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le Bus2 SVCE 28 V AC alimenté par le Bus2 SVCE 115 V AC -------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Gnd_28V_SVCE_Bus2();
begin
  ACGnd28VSvceBus2Level := ACGndServiceBus2Level / 4.1; // +/- 28 V
  if ACGnd28VSvceBus2Level > 0 then
     ACGnd28VSvceBus2Intensite := form2.TrackBar17.Position
     else
     ACGnd28VSvceBus2Intensite := 0;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Chargeur de batterie alimenté par le Bus1 SVCE 115 V AC --------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Battery_Charger();
begin
  if (CapaciteBatResiduelle < 34) And Not BatEnCharge then
     ChargerBatterie := True;

  if ChargerBatterie then
     begin
       if ACGndServiceBus2Level > 0 then
          begin
            BatEnCharge := True;
            IChargeBatAC := (24 / ACGndServiceBus2Level) * 30;
            CapaciteBatResiduelle := CapaciteBatResiduelle + ((30 / 3600) * (Form1.ScanEventOvh.Interval / 1000));
            //Montée en U progressive
            TensionBatCourante := TensionBatCourante + (((29 - TensionBatCourante) / (39 - CapaciteBatResiduelle)) * (30 / 3600));
            if (TensionBatCourante > 24) And (CapaciteBatResiduelle > 30) then
               StopBat := False;
          end
          else
          begin
            IChargeBatAC := 0;
            BatEnCharge := False;
          end;
     end;

  if (CapaciteBatResiduelle > (35 * 1.1)) And BatEnCharge then // +/- 110%
     begin
       IChargeBatAC := 0;
       ChargerBatterie := False;
       BatEnCharge := False;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tensions et intensités de sorties sur les 3 redresseurs qui fournissent les tensions Dc sur le Cross Bus -------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{ Puissance Maxi des Tr1 et Tr2 = 25 Ampères ,Tr3 peut fournir 15 Ampères }

procedure Calcul_U_Trs();
Var Tr1 ,Tr2 ,Tr3 : Boolean;
    IDispoTr3 ,UDiode : Real;
begin
  Tr1  := False;
  Tr2  := False;
  Tr3  := False;
  TR1Level := 0;
  TR2Level := 0;
  TR3Level := 0;
  TR1Intensite := 0;
  TR2Intensite := 0;
  TR3Intensite := 0;
  UCrossBus := 0;
  //Calcul des tensions à  vide
  if INSTRUCTOR_TR1_AVAILABLE And (AcTransferBus1Level > 0) then
     begin
       Tr1 := True;
       TR1Level := (AcTransferBus1Level / 3.9);
     end;
  if INSTRUCTOR_TR2_AVAILABLE And (AcTransferBus2Level > 0) then
     begin
       Tr2 := True;
       TR2Level := (AcTransferBus2Level / 3.9);
     end;
  if INSTRUCTOR_TR3_AVAILABLE then
     begin
       if AcTransferBus2Level > 0 then //Connecté sur AcTransfertBus2
          begin
            Tr3 := True;
            TR3Level := AcTransferBus2Level / 3.9;
          end
          else
          if AcTransferBus1Level > 0 then //Connecté sur AcTransfertBus1
             begin
               Tr3 := True;
               TR3Level := AcTransferBus1Level / 3.9;
             end
             else
             begin
               Tr3 := False;
               TR3Level := 0;
             end;
     end;

//Cas 1 ,Tous Trs Dispo et "CrossBusTieRelay" Fermé
  if Tr1 And Tr2 And Tr3 And CrossBusTieRelay then
     begin
       if TR2Level > TR1Level then //Tensions à  vide
          begin
            TR1Intensite := ((DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) / 2) / (TR2Level / TR1Level);
            TR2Intensite := (DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) - TR1Intensite;
          end
          else
          begin
            TR2Intensite := ((DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) / 2) / (TR1Level / TR2Level);
            TR1Intensite := (DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) - TR2Intensite;
          end;
       //Addaptation des tensions de sortie de Tr1 et Tr2 en fonction de leur courant draîné
       TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
       TR2Level := (AcTransferBus2Level / 3.9) - (TR2Intensite * 0.18;
       //Equ'ilibrage des tensions de sortie de Tr1 et Tr2 sur le CrossBus
       UCrossBus := (TR1Level + TR2Level) / 2;
       TR2Level := UCrossBus;
       TR1Level := UCrossBus;
       //Détection du seuil de conduction de la diode
       TR3Level := TR3Level - (BatteryBusIntensite * 0.376);
       UDiode := TR3Level - UCrossBus - 0.6;
       if UDiode > 0 then
          begin
            IDispoTr3 := ((UDiode / 3) * 2) / 0.376;
            TR3Level := TR3Level - ((UDiode / 3) * 2);
            UCrossBus := UCrossBus + (IDispoTr3 * 0.18;
            TR2Level := UCrossBus;
            TR1Level := UCrossBus;
            TR1Intensite := TR1Intensite - (IDispoTr3 / 2);
            TR2Intensite := TR2Intensite - (IDispoTr3 / 2);
            TR3Intensite := IDispoTr3 + BatteryBusIntensite;
          end
          else
          TR3Intensite := BatteryBusIntensite;
     end;
     
//Cas 2 ,Tous Trs Dispo et "CrossBusTieRelay" Ouvert
  if Tr1 And Tr2 And Tr3 And Not CrossBusTieRelay then
     begin
       TR1Intensite := DCBus1Intensite + DCStanbyBusIntensite;
       TR2Intensite := DCBus2Intensite;
       //Addaptation des tensions de sortie de Tr1 et Tr2 en fonction de leur courant draîné
       TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
       TR2Level := (AcTransferBus2Level / 3.9) - (TR2Intensite * 0.18;
       UCrossBus := TR2Level;
       //Détection du seuil de conduction de la diode
       TR3Level := TR3Level - (BatteryBusIntensite * 0.376);
       UDiode := TR3Level - UCrossBus - 0.6;
       if UDiode > 0 then
          begin
            IDispoTr3 := ((UDiode / 3) * 2) / 0.376;
            TR3Level := TR3Level - ((UDiode / 3) * 2);
            UCrossBus := UCrossBus + (IDispoTr3 * 0.18;
            TR2Level := UCrossBus;
            TR2Intensite := TR2Intensite - (IDispoTr3);
            TR3Intensite := IDispoTr3 + BatteryBusIntensite;
          end
          else
          TR3Intensite := BatteryBusIntensite;
     end;

//Cas 3 ,Tr1 Out
  if Not Tr1 And Tr2 And Tr3 then
     begin
       TR1Level := 0;
       TR1Intensite := 0;
       if Not CrossBusTieRelay then // "CrossBusTieRelay" Ouvert
          TR2Intensite := DCBus2Intensite
          else // "CrossBusTieRelay" Fermé
          TR2Intensite := DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite;
       //Addaptation de la tensions de sortie de Tr2 en fonction du courant draîné
       TR2Level := (AcTransferBus2Level / 3.9) - (TR2Intensite * 0.18;
       UCrossBus := TR2Level;
       //Détection du seuil de conduction de la diode
       TR3Level := TR3Level - (BatteryBusIntensite * 0.376);
       UDiode := TR3Level - UCrossBus - 0.6;
       if UDiode > 0 then
          begin
            IDispoTr3 := ((UDiode / 3) * 2) / 0.376;
            TR3Level := TR3Level - ((UDiode / 3) * 2);
            UCrossBus := UCrossBus + (IDispoTr3 * 0.18;
            TR2Level := UCrossBus;
            TR2Intensite := TR2Intensite - (IDispoTr3);
            TR3Intensite := IDispoTr3 + BatteryBusIntensite;
          end
          else
          TR3Intensite := BatteryBusIntensite;
     end;

//Cas 4 ,Tr2 Out
  if Tr1 And Not Tr2 And Tr3 then
     begin
       TR2Level := 0;
       TR2Intensite := 0;
       if Not CrossBusTieRelay then // "CrossBusTieRelay" Ouvert
          begin
            TR1Intensite := DCBus1Intensite + DCStanbyBusIntensite;
            TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
            TR3Intensite := BatteryBusIntensite + DCBus2Intensite;
            TR3Level := TR3Level - (TR3Intensite * 0.376);
            UCrossBus := TR3Level - 0.6;
          end
          else // "CrossBusTieRelay" Fermé
          begin
            TR1Intensite := DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite;
            //Addaptation de la tensions de sortie de Tr1 en fonction du courant draîné
            TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
            UCrossBus := TR1Level;
            //Détection du seuil de conduction de la diode
            TR3Level := TR3Level - (BatteryBusIntensite * 0.376);
            UDiode := TR3Level - UCrossBus - 0.6;
            if UDiode > 0 then
               begin
                 IDispoTr3 := ((UDiode / 3) * 2) / 0.376;
                 TR3Level := TR3Level - ((UDiode / 3) * 2);
                 UCrossBus := UCrossBus + (IDispoTr3 * 0.18;
                 TR1Level := UCrossBus;
                 TR1Intensite := TR1Intensite - (IDispoTr3);
                 TR3Intensite := IDispoTr3 + BatteryBusIntensite;
               end
               else
               TR3Intensite := BatteryBusIntensite;
          end;
     end;

//Cas 5 ,Tr3 Out
  if Tr1 And Tr2 And Not Tr3 then
     begin
       TR3Level := 0;
       TR3Intensite := 0;
       if Not CrossBusTieRelay then // "CrossBusTieRelay" Ouvert
          begin
            TR1Intensite := DCBus1Intensite + DCStanbyBusIntensite;
            TR2Intensite := DCBus2Intensite;
            TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
            TR2Level := (AcTransferBus2Level / 3.9) - (TR2Intensite * 0.18;
            UCrossBus := TR2Level;
          end
          else // "CrossBusTieRelay" Fermé
          begin
            if TR2Level > TR1Level then //Tensions à  vide
               begin
                 TR1Intensite := ((DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) / 2) / (TR2Level / TR1Level);
                 TR2Intensite := (DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) - TR1Intensite;
               end
               else
               begin
                 TR2Intensite := ((DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) / 2) / (TR1Level / TR2Level);
                 TR1Intensite := (DCBus1Intensite + DCBus2Intensite + DCStanbyBusIntensite) - TR2Intensite;
               end;
               //Addaptation des tensions de sortie de Tr1 et Tr2 en fonction de leur courant draîné
               TR1Level := (AcTransferBus1Level / 3.9) - (TR1Intensite * 0.18;
               TR2Level := (AcTransferBus2Level / 3.9) - (TR2Intensite * 0.18;
               //Equ'ilibrage des tensions de sortie de Tr1 et Tr2 sur le CrossBus
               UCrossBus := (TR1Level + TR2Level) / 2;
               TR2Level := UCrossBus;
               TR1Level := UCrossBus;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le DC Bus 1 alimenté par le Cross Bus -------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure DC_Bus1();
begin
  if CrossBusTieRelay then
     if UCrossBus > 0 then
        begin
          DCBus1Level := UCrossBus;
          DCBus1Intensite := form2.TrackBar1.Position;
        end
        else
        begin
          DCBus1Level := 0;
          DCBus1Intensite := 0;
        end;

  if Not CrossBusTieRelay then
     if Tr1Level > 0 then
        begin
          DCBus1Level := Tr1Level;
          DCBus1Intensite := form2.TrackBar2.Position;
        end
        else
        begin
          DCBus1Level := 0;
          DCBus1Intensite := 0;
        end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur le DC Bus 2 alimenté par le Cross Bus -------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure DC_Bus2();
begin
  if CrossBusTieRelay then
     if UCrossBus > 0 then
        begin
          DCBus2Level := UCrossBus;
          DCBus2Intensite := form2.TrackBar4.Position;
        end
        else
        begin
          DCBus2Level := 0;
          DCBus2Intensite := 0;
        end;

  if Not CrossBusTieRelay then
     begin
       if (Tr2Level > 0) Or (Tr3Level > 0) then
          begin
            DCBus2Level := UCrossBus;
            DCBus2Intensite := form2.TrackBar4.Position;
          end
          else
          begin
            DCBus2Level := 0;
            DCBus2Intensite := 0;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité du Static Inverter qui fournit le courant sur lAc 115 V Standby Bus depuis la batterie ---------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Static_INV();
begin
  if Not INSTRUCTOR_STATIC_INV_AVAILABLE
     Or (Not StandbyPowerSwitchPosAuto And Not StandbyPowerSwitchPosBat) then //Sw position Off
     begin //Même si Ac est dispo
       StaticINVLevel := 0;
       StaticINVFz := 0;
       StaticINVIntensite := 0;
       Exit;
     end;

  if StandbyPowerSwitchPosBat then
     begin
       if BatterySw then
           begin //"StaticINVIntensite" est l'intensité de lInverter pompé sur la batterie
             StaticINVLevel := 99 + (TensionBatCourante / 1.5);
             StaticINVFz := 370 + (TensionBatCourante * 1.2);
             StaticINVIntensite := AC115VStandbyBusIntensite * (StaticINVLevel / TensionBatCourante);
           end
           else
           begin
             StaticINVLevel := 0;
             StaticINVFz := 0;
             StaticINVIntensite := 0;
           end;
     end
     else // StandbyPowerSwitchPosAuto
     begin
       if AcTransferBus1Level > 0 then
          begin  //Les Bus ne sont pas alimentés par lInverter
            StaticINVLevel := 0;
            StaticINVFz := 0;
            StaticINVIntensite := 0;
          end
          else
          if BatterySw then
             begin //"StaticINVIntensite" est l'intensité de lInverter pompé sur la batterie
               StaticINVLevel := 99 + (TensionBatCourante / 1.5);
               StaticINVFz := 370 + (TensionBatCourante * 1.2);
               StaticINVIntensite := AC115VStandbyBusIntensite * (StaticINVLevel / TensionBatCourante);
             end
             else
             begin
               StaticINVLevel := 0;
               StaticINVFz := 0;
               StaticINVIntensite := 0;
             end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité de lAc 115 V Standby Bus alimenté par lInverter ou l Ac Transfer Bus 1 -----------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_115V_Standby_Bus();
begin
  if StandbyPowerSwitchPosAuto then
     begin
       if AcTransferBus1Level > 0 then
          begin
            AC115VStandbyBusLevel := AcTransferBus1Level;
            AC115VStandbyBusFZ := 401;
          end
          else
          begin
            AC115VStandbyBusLevel := StaticINVLevel;//Tension fournie par lInverter
            AC115VStandbyBusFZ := StaticINVFz;
          end;
     end
     else
     if StandbyPowerSwitchPosBat then
        begin
          AC115VStandbyBusLevel := StaticINVLevel; //Tension fournie par lInverter
          AC115VStandbyBusFZ := StaticINVFz;
        end
        else //StandbyPowerSwitchPosOff
        begin
          AC115VStandbyBusLevel := 0;
          AC115VStandbyBusFZ := 0;
        end;
  if AC115VStandbyBusLevel > 0 then
     begin
       if ((EnG1StarterValve = 100) Or (EnG2StarterValve = 100))//Valves pleine ouverture
          And (((TabEntreesSioc[EngStartIgniL] = 0) And (TabEntreesSioc[EngStartIgniR] = 1))
          Or ((TabEntreesSioc[EngStartIgniL] = 0) And (TabEntreesSioc[EngStartIgniR] = 0)))
          then //Ignition L ou Both Moteur 1 ou 2
          AC115VStandbyBusIntensite := form2.TrackBar9.Position + (AC28VStandbyBusIntensite / 4.1) + EngIgnitionIntensite
          else
          AC115VStandbyBusIntensite := form2.TrackBar9.Position + (AC28VStandbyBusIntensite / 4.1);
     end
     else
     begin
       AC115VStandbyBusIntensite := 0;
       AC115VStandbyBusFZ := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité de lAc 28 V Standby Bus alimenté par lAc 115 V Standby Bus ------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_28V_Standby_Bus();
begin
  AC28VStandbyBusLevel := AC115VStandbyBusLevel / 4.1;
  if AC28VStandbyBusLevel > 0 then
     AC28VStandbyBusIntensite := form2.TrackBar18.Position + IntensiteKorry()
     else
     AC28VStandbyBusIntensite := 0;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité du Dc Standby Bus alimenté par le Cross Bus ou la batterie --------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure DC_Stanby_Bus();
begin
  if Not StandbyPowerSwitchPosAuto And Not StandbyPowerSwitchPosBat then //Sw position Off
     begin //Même si Ac est dispo
       DCStanbyBusLevel := 0;
       DCStanbyBusIntensite := 0;
       Exit;
     end;

  if StandbyPowerSwitchPosBat then
     begin
       if BatterySw then
           begin
             DCStanbyBusLevel := TensionBatCourante;
             DCStanbyBusIntensite := form2.TrackBar5.Position;
           end
           else
           begin
             DCStanbyBusLevel := 0;
             DCStanbyBusIntensite := 0;
           end;
     end
     else // StandbyPowerSwitchPosAuto
     begin
       if CrossBusTieRelay then
          if UCrossBus > 0 then
             begin
               DCStanbyBusLevel := UCrossBus;
               DCStanbyBusIntensite := form2.TrackBar5.Position;
               Exit;
             end
             else
             begin
               DCStanbyBusLevel := 0;
               DCStanbyBusIntensite := 0;
             end;

       if Not CrossBusTieRelay then
          if Tr1Level > 0 then
             begin
               DCStanbyBusLevel := Tr1Level;
               DCStanbyBusIntensite := form2.TrackBar5.Position;
               Exit;
             end
             else
             begin
               DCStanbyBusLevel := 0;
               DCStanbyBusIntensite := 0;
             end;

       if BatterySw And (DCStanbyBusLevel = 0) then
          begin
            DCStanbyBusLevel := TensionBatCourante;
            DCStanbyBusIntensite := form2.TrackBar5.Position;
          end
          else
          begin
            DCStanbyBusLevel := 0;
            DCStanbyBusIntensite := 0;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité du Battery Bus alimenté par la batterie ou le redresseurs Tr3 -----------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Battery_Bus(); //Puissance dispo en %
begin
  if Not StandbyPowerSwitchPosAuto And Not StandbyPowerSwitchPosBat then //Sw position Off
     begin //Même si Ac est dispo
       BatteryBusLevel := 0;
       BatteryBusIntensite := 0;
       Exit;
     end;

  if StandbyPowerSwitchPosBat then
     begin
       if BatterySw then
           begin
             BatteryBusLevel := TensionBatCourante;
             BatteryBusIntensite  := form2.TrackBar6.Position;
           end
           else
           begin
             BatteryBusLevel := 0;
             BatteryBusIntensite := 0;
           end;
     end
     else // StandbyPowerSwitchPosAuto
     begin
       if TR3Level > 0 then
          begin  //Le Bus est alimentés par le TR3
            BatteryBusLevel := TR3Level;
            BatteryBusIntensite  := form2.TrackBar6.Position;
          end
          else
          if BatterySw then
             begin
               BatteryBusLevel := TensionBatCourante;
               BatteryBusIntensite  := form2.TrackBar6.Position;
             end
             else
             begin
               BatteryBusLevel := 0;
               BatteryBusIntensite := 0;
             end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité du Switched Battery Bus alimenté par la batterie ------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Switched_Hot_Bat_Bus();
begin
  if BatterySw then
     begin
       SwitchedHotBatBusLevel := TensionBatCourante;
       SwitchedHotBatBusIntensite := form2.TrackBar8.Position;
     end  
     else
     begin
       SwitchedHotBatBusLevel := 0;
       SwitchedHotBatBusIntensite := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du Sw de connection de la génératrice 1 sur lAc Transfer Bus 1 ,Var Sioc 281 pour le On et 282 pour le Stop ------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure ApuGen1Switch(); //GCB1
begin
  if (TabEntreesSioc[ApuGen1On] = 1) And Gen1Available then
     GCB1 := True;  //GCB1 Closed

  if TabEntreesSioc[ApuGen1Off] = 1 then
     GCB1 := False; //GCB1 Open
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du SwL de connection de lApu sur le Tie Bus ,Var Sioc 283 pour le On et 284 pour le Stop -------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure ApuGenLSwitch();
begin
  if (TabEntreesSioc[ApuGenLOn] = 1) And APUAvailable then
     begin
       APUSwL := True;
       APUSw := True; //ApuSw Closed ,on connect LAPU sur le TIE Bus
     end;
  if TabEntreesSioc[ApuGenLOff] = 1 then
     begin
       APUSwL := False;
       if Not APUSwR then
          APUSw := False; //Apu Sw Open
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du SwR de connection de lApu sur le Tie Bus ,Var Sioc 285 pour le On et 286 pour le Stop -------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure ApuGenRSwitch();
begin
  if (TabEntreesSioc[ApuGenROn] = 1) And APUAvailable then
     begin
       APUSwR := True;
       APUSw := True; //ApuSw Closed ,on connect LAPU sur le TIE Bus
     end;
  if TabEntreesSioc[ApuGenROff] = 1 then
     begin
       APUSwR := False; //Apu Sw Open
       if Not APUSwL then
          APUSw := False;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du Sw de connection de la génératrice 2 sur lAc Transfer Bus 2 ,Var Sioc 287 pour le On et 288 pour le Stop ------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure ApuGen2Switch(); //GCB2
begin
  if (TabEntreesSioc[ApuGen2On] = 1) And Gen2Available then
     GCB2 := True;  //GCB2 Closed

  if TabEntreesSioc[ApuGen2Off] = 1 then
     GCB2 := False; //GCB2 Open
end;

///////////////////////////////////////////////////////////////////////////////////////////
function HydPumpEng1Switch() : Boolean;  //valeur au démarrage
begin
  if TabEntreesSioc[HydPumpEng1] = 1 then
     result := True  //valeur au démarrage
     else
     result := False;
end;

//////////////////////////////////////////////////////////////////////////////////////
function HydPumpElec2Switch() : Boolean;
begin
  if TabEntreesSioc[HydPumpElec2] = 1 then
     result := True  //valeur au démarrage
     else
     result := False;
end;

///////////////////////////////////////////////////////////////////////////////////////
function HydPumpElec1Switch() : Boolean;
begin
  if TabEntreesSioc[HydPumpElec1] = 1 then
     result := True  //valeur au démarrage
     else
     result := False;
end;

////////////////////////////////////////////////////////////////////////////////////////
function HydPumpEng2Switch() : Boolean;
begin
  if TabEntreesSioc[HydPumpEng2] = 1 then
     result := True  //valeur au démarrage
     else
     result := False;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Position du Sw de démarrage ou le stop de l'APU ,Var Sioc 381 pour le Start et 380 pour le Stop ----------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure StartAPUSwitch();
begin
  if BatterySw And ((TensionBatCourante > (RefBatLow - 2))) And (TabEntreesSioc[ApuStart] = 1) And Not APUAvailable then
     begin
       if AcTransferBus1Level > 0 then
          begin
            IAmorcageApu := 10; //I Amorcage APU sur AC
            StartApuOnBat := False;
          end
          else
          begin
            IAmorcageApu := 65; //I Amorcage APU sur Batterie
            StartApuOnBat := True;
          end;
       StartAPUSw := True; //Demande de démarrage de l'APU
     end;
  if (TabEntreesSioc[APUOff] = 1) And Not StopAPUSw then
     begin
       if Not APUAvailable And StartAPUSw then
          StartAPUAbort := True;
       StartAPUSw := False;
       StopAPUSw := True; //Demande d'arrêt de l'APU
       DelayAPU := 0;
     end;  
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Séquence de démarrage ou du Stop de lApu ----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Starter_Stopper_APU();
begin
  //Demande Stop APU ou SwBat sur Off ou plus de puissance batterie suffisante
  if StopAPUSw Or (TensionBatCourante <= (RefBatLow - 2)) then
     begin
       APUAvailable := False;
       StopAPUSw := False;
       IAmorcageApu := 0;
       Form2.ProgressBar2.Position := 0;
     end;
  if StartAPUSw And Not APUAvailable then //Demande de démarrage de l'APU
     if (TensionBatCourante >= (RefBatLow - 2)) then //Puissance batterie suffisante
        begin
          if DelayAPU >= 20 then //60 Secondes
             begin
               APUAvailable := True;
               StartAPUSw := False;
               Form2.ProgressBar2.Position := 0;
             end
             else
             begin
               Inc(DelayAPU);
               if IAmorcageApu > 2 then //2 Ampères ,courant de l'unité de control
                  IAmorcageApu := IAmorcageApu - (IAmorcageApu / 30);
               //Commande du servo de la gauge EGT
             end;
        end
        else //Puissance batterie plus suffisante
        begin
          StartAPUAbort := True;
          StartAPUSw := False;
          IAmorcageApu := 0;
          form2.Label103.Caption := 0;
          form2.ProgressBar2.Position := 0;
        end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension ,intensité et température EGT du moteur de lApu -------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure APU_Level();
begin
  if StartAPUSw then //APU en séquence de démarrage
     begin
       ApuEgtPrec := ApuEgtPrec + (400 / 180);
       ApuEgt := ApuEgtPrec + 21; // + 21C° TAT ,ApuEgt vaut 399 en fin de séquence Start
       Exit;
     end;

  if APUAvailable then //APU Ready
    begin
      APUIntensite := 0;
      if APUSw then //APU connecté sur le TieBus
         begin
           if BTB1 And BTB2 then
              APUIntensite := AcTransferBus1Intensite + AcTransferBus2Intensite;
           if BTB1 And Not BTB2 then
              APUIntensite := AcTransferBus1Intensite;
           if Not BTB1 And BTB2 then
              APUIntensite := AcTransferBus2Intensite;

           if ApuEgt < 398 + (APUIntensite * 3.21) then //Inférieur à  T° en fonction du courant pompé
              ApuEgt := ApuEgt + (APUIntensite / 30) //Montée en T° progressive
              else
              if ApuEgt > 400 + (APUIntensite * 3.21) then //Supèrieur à  T° en fonction du courant pompé
                 ApuEgt := Int(ApuEgt - 1) //Descente en T° progressive
                 else
                 ApuEgt := Int(ApuEgt); //A T° en fonction du courant pompé

           APULevel := 118 - (APUIntensite * (6 / 150)); //150 Amp Max
           APUFz := Trunc(410 - (ABS(APULevel - 11 * 3.33)); //410 = FzMax et 118 = APULevelMax
         end
         else  //APU plus connecté sur le TieBus
         begin
           APULevel := 118; //UMax APU
           APUFz := 410; //410 = FzMax
           if ApuEgt > 399 + (APUIntensite * 3.21) then
              ApuEgt := ApuEgt - 1 //Descente en T° progressive
              else
              ApuEgt := ApuEgt;
         end;
    end
    else //APU Not Ready ou plus dispo
    begin
      if ApuEgt > 22 then //Descente en T° progressive
         begin
           ApuEgt := ApuEgt - 1;
           ApuEgtPrec := ApuEgt - 21;
         end;
      APULevel := 0;
      APUFz := 0;
      APUIntensite := 0;
      APUSw := False;
      APUSwL := False;
      APUSwR := False;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Démarrage Moteur 1 ---------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Start_Eng1_Switch();
begin
  if TabEntreesSioc[Eng1StartGrd] = 1 then
     begin
       if (TabEntreesSioc[EngStartIgniL] = 1) And (TabEntreesSioc[EngStartIgniR] = 0)//Ignition L
          And (AcTransferBus1Level > 0) then
          StartMoteur1 := True;

       if (TabEntreesSioc[EngStartIgniR] = 1) And (TabEntreesSioc[EngStartIgniL] = 0)//Ignition R
          And (AC115VStandbyBusLevel > 0) then
          StartMoteur1 := True;

       if (TabEntreesSioc[EngStartIgniR] = 0) And (TabEntreesSioc[EngStartIgniL] = 0)//Ignition Both
          And (AcTransferBus1Level > 0) And (AC115VStandbyBusLevel > 0) then
          StartMoteur1 := True;
     end;

  if (Not BatterySw Or (TensionBatCourante < (RefBatLow - 2)) Or (BleedAirDuctPressL < 14) Or Not StartMoteur1)
     And (TabEntreesSioc[Eng1StartGrd] = 1) then
     begin
       StartMoteur1 := False;
       EnG1StarterValve := 0;
       //Faire revenir le Switch magnétique
       WriteSioc(inttostr(Eng1StartGrd) ,0);
       WriteSioc(inttostr(Eng1StartOff) ,1);
     end;

  if (FuelValveEng1 And (TabEntreesSioc[Eng1StartGrd] = 1)) And (EnG1StarterValve = 100) then //FuelValveEng1 : commande Tq
     begin
       Gen1Run := True;
       StartMoteur1 := False;
       //Faire revenir le Switch magnétique
       WriteSioc(inttostr(Eng1StartGrd) ,0);
       WriteSioc(inttostr(Eng1StartOff) ,1);
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Démarrage Moteur 2 ---------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Start_Eng2_Switch();
begin
  if TabEntreesSioc[Eng2StartGrd] = 1 then
     begin
       if (TabEntreesSioc[EngStartIgniL] = 1) And (TabEntreesSioc[EngStartIgniR] = 0)//Ignition L
          And (AcTransferBus2Level > 0) then
          StartMoteur2 := True;

       if (TabEntreesSioc[EngStartIgniR] = 1) And (TabEntreesSioc[EngStartIgniL] = 0)//Ignition R
          And (AC115VStandbyBusLevel > 0) then
          StartMoteur2 := True;

       if (TabEntreesSioc[EngStartIgniR] = 0) And (TabEntreesSioc[EngStartIgniL] = 0)//Ignition Both
          And (AcTransferBus2Level > 0) And (AC115VStandbyBusLevel > 0) then
          StartMoteur2 := True;
     end;

  if (Not BatterySw Or (TensionBatCourante < (RefBatLow - 2)) Or (BleedAirDuctPressR < 14) Or Not StartMoteur2)
     And (TabEntreesSioc[Eng2StartGrd] = 1) then
     begin
       StartMoteur2 := False;
       EnG2StarterValve := 0;
       //Faire revenir le Switch magnétique
       WriteSioc(inttostr(Eng2StartGrd) ,0);
       WriteSioc(inttostr(Eng2StartOff) ,1);
     end;

  if (FuelValveEng2 And (TabEntreesSioc[Eng2StartGrd] = 1)) And (EnG2StarterValve = 100) then //FuelValveEng1 : commande Tq
     begin
       Gen2Run := True;
       StartMoteur2 := False;
       //Faire revenir le Switch magnétique
       WriteSioc(inttostr(Eng2StartGrd) ,0);
       WriteSioc(inttostr(Eng2StartOff) ,1);
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension ,intensité et Oil température de la génératrice 1 ------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Generatrice1_Level();
begin
  if Not INSTRUCTOR_DRIVE1_SWITCH then //Génératrice 1 plus disponible et déconnectée via Sw Drive1
     begin
       Generatrice1Level := 0;
       Generatrice1Intensite := 0;
       Generatrice1Fz := 0;
       Gen1Available := False;
     end
     else
     if (TabEntreesSioc[GenDrv1Discon] = 1) And Gen1Run then //Sw Closed
        begin
          Gen1Available := True;
          if Not GCB1 then
             begin //A vide
               Generatrice1Level := form2.TrackBar2.Position;
               Generatrice1Intensite := 0;
               Generatrice1Fz := 402;
             end;
          if Not BTB1 And GCB1 then //La génératrice alimente uniquement lAcTransferBus1
             begin
               Generatrice1Intensite := AcTransferBus1Intensite;
               Generatrice1Level := form2.TrackBar2.Position - (Generatrice1Intensite * 0.0266); //117 = UMax
               Generatrice1Fz := 402 - (AcTransferBus1Intensite * 0.0266); //402 = FzMax
             end;
          if OilTempGen1 < 40 + (Generatrice1Intensite * (90 / 150)) then //Inférieur à  T° en fonction du courant pompé
             OilTempGen1 := OilTempGen1 + (Generatrice1Intensite / 200) //Montée en T° progressive
             else
             if OilTempGen1 > 42 + (Generatrice1Intensite * (90 / 150)) then //Supèrieur à  T° en fonction du courant pompé
                OilTempGen1 := OilTempGen1 - 0.05 //Descente en T° progressive
                else
                OilTempGen1 := Int(OilTempGen1);//A T° en fonction du courant pompé
        end
        else
        begin
          if TabEntreesSioc[GenDrv1Discon] = 0 then //Sw Open
             INSTRUCTOR_DRIVE1_SWITCH := False; //Génératrice 1 plus disponible
          Generatrice1Level := 0;
          Generatrice1Intensite := 0;
          Generatrice1Fz := 0;
          Gen1Available := False;
        end;
  if Not Gen1Available then //On redescend la température
     if OilTempGen1 > 12 then
        OilTempGen1 := OilTempGen1 - 0.05; //Descente en T° progressive
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension ,intensité et Oil température de la génératrice 2 ------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Generatrice2_Level();
begin
  if Not INSTRUCTOR_DRIVE2_SWITCH then //Génératrice 2 plus disponible et déconnectée via Sw Drive2
     begin
       Generatrice2Level := 0;
       Generatrice2Intensite := 0;
       Generatrice2Fz := 0;
       Gen2Available := False;
     end
     else
     if (TabEntreesSioc[GenDrv2Discon] = 1) And Gen2Run then //Sw Closed
        begin
          Gen2Available := True;
          if Not GCB2 then
             begin //A vide
               Generatrice2Level := form2.TrackBar3.Position;
               Generatrice2Intensite := 0;
               Generatrice2Fz := 402;
             end;
          if Not BTB2 And GCB2 then //La génératrice alimente uniquement lAcTransferBus2
             begin
               Generatrice2Intensite := AcTransferBus2Intensite;
               Generatrice2Level := form2.TrackBar3.Position - (Generatrice2Intensite * 0.0266); //118 = UMax
               Generatrice2Fz := 402 - (AcTransferBus2Intensite * 0.0266); //402 = FzMax
             end;
          if OilTempGen2 < 40 + (Generatrice2Intensite * (90 / 150)) then //Inférieur à  T° en fonction du courant pompé
             OilTempGen2 := OilTempGen2 + (Generatrice2Intensite / 200) //Montée en T° progressive
             else
             if OilTempGen2 > 42 + (Generatrice2Intensite * (90 / 150)) then //Supèrieur à  T° en fonction du courant pompé
                OilTempGen2 := OilTempGen2 - 0.05 //Descente en T° progressive
                else
                OilTempGen2 := Int(OilTempGen2);//A T° en fonction du courant pompé
        end
        else
        begin
          if TabEntreesSioc[GenDrv2Discon] = 0 then //Sw Open
             INSTRUCTOR_DRIVE2_SWITCH := False; //Génératrice 2 plus disponible
          Generatrice2Level := 0;
          Generatrice2Intensite := 0;
          Generatrice2Fz := 0;
          Gen2Available := False;
        end;
  if Not Gen2Available then //On redescend la température
     if OilTempGen2 > 12 then
        OilTempGen2 := OilTempGen2 - 0.05; //Descente en T° progressive
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension présente sur le Tie Bus --------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure TIEBus_Level();
begin
  if APUSw then //Apu is Available et ApuSw Closed via APUSwL ou APUSwR
     TIEBusLevel := APULevel
     else
     if GNDSw then //Puissance sol dispo et Connecté puissance sol via GNDSw
        TIEBusLevel := GroundLevel;

   if OnAir {(TabOffsets[3,2] = 0)} then //In Flight
     begin
       if AutoGenerator And Not APUAvailable And (Gen1Available Or Gen2Available) And (Not GCB1 Or Not GCB2) then
          begin
            if Gen1Available then
               GCB1 := True;
            if Gen2Available then
               GCB2 := True;
            AutoGenerator := False;
            form2.Button39.Caption := Auto Generator Off
          end;

       if Gen1Available And GCB1 And Not Gen2Available And Not BusTransfSw then
          begin //On a perdu la Gen2 ,on alimante le TieBus avec Gen1
            GCB2 := False;
            TIEBusLevel := Generatrice1Level;
            Generatrice1Intensite := AcTransferBus1Intensite + AcTransferBus2Intensite;
            Generatrice1Level := form2.TrackBar2.Position - (Generatrice1Intensite * 0.0266); //118 = UMax
            Generatrice1Fz := 402 - (Generatrice1Intensite * 0.0266); //402 = FzMax
            BTB1 := True;
            BTB2 := True;
          end;
       if Gen1Available And GCB1 And Not Gen2Available And BusTransfSw then
          begin //BusTransfSw en Pos Off
            BTB1 := False;
            BTB2 := False;
            CrossBusTieRelay := False; //Isole DcBus1 du DcBus2
            TIEBusLevel := 0;
          end;

       if Gen2Available And GCB2 And Not Gen1Available And Not BusTransfSw then
          begin //On a perdu la Gen1 ,on alimante le TieBus avec Gen2
            GCB1 := False;
            TIEBusLevel := Generatrice2Level; 
            Generatrice2Intensite := AcTransferBus1Intensite + AcTransferBus2Intensite;
            Generatrice2Level := form2.TrackBar3.Position - (Generatrice2Intensite * 0.0266); //118 = UMax
            Generatrice2Fz := 402 - (Generatrice2Intensite * 0.0266); //402 = FzMax
            BTB1 := True;
            BTB2 := True;
          end;
       if Gen2Available And GCB2 And Not Gen1Available And BusTransfSw then
          begin //BusTransfSw en Pos Off
            BTB1 := False;
            BTB2 := False;
            CrossBusTieRelay := False; //Isole DcBus1 du DcBus2
            TIEBusLevel := 0;
          end;
      end;

  if APUAvailable then //Taxi ,park and Ground ou en Vol
     begin
       if APUSwL And GCB1 then //Connect LAPU sur les Bus et déconnecte la génératrice 1
           begin
             GCB1 := False;
             BTB1 := True;
             APUSwL := False;
           end;
       if APUSwR And GCB2 then //Connect LAPU sur les Bus et déconnecte la génératrice 2
          begin
            GCB2 := False;
            BTB2 := True;
            APUSwR := False;
          end;
     end;

  if ((GCB1 And GCB2) Or (Not GCB1 And Not GCB2 And Not APUSw)) And (TIEBusLevel <> 0) And Not GNDSw then
     begin
       TIEBusLevel := 0;
     end;

  if TIEBusLevel = 0  then //Isole le TieBus
     begin
       BTB1 := False;
       BTB2 := False;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité présente sur lAc transfert bus 1 ---------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AcTransferBus1_Level();
Var IAcTr1 ,IAcTr3 : Real;
begin
  if Not GCB1 And Not BTB1 then
     begin
       AcTransferBus1Level := 0;
       AcTransferBus1Intensite := 0;
     end;

  if (TIEBusLevel > 0) And Not GCB1 then
     begin
       if APUSw And Not BusTransfSw then //Not BusTransfSw = Pos Auto
          begin
            if GNDSw then
               GNDSw := False; //On déconnecte GroundLevel
            if Not (Gen2Available And GCB2) then
               BTB2 := True;
               BTB1 := True;
            AcTransferBus1Level := TIEBusLevel;
          end;

       if APUSw And BusTransfSw And Not GCB1 And Not GCB2 then //BusTransfSw Pos Off
          begin
            if Not APUSwL then //Sw APU GEN L Pos Off
               begin
                 AcTransferBus1Level := 0;
                 BTB1 := False; //Isole le TieBus de lAc Transfert Bus 1
                 CrossBusTieRelay := False; //Isole DcBus1 du DcBus2
               end
               else //Sw APU GEN L Pos On
               if Not HydPumpElec2Switch() then //Previent une sur-consommation sur les Bus
                  begin
                    BTB1 := True; //Connect le TieBus avec LAc Bus1
                    AcTransferBus1Level := TIEBusLevel;
                  end;
          end;

       if GNDAvailable And GNDSw then
          begin
            AcTransferBus1Level := TIEBusLevel;
            BTB1 := True;
          end;

       if GCB2 And BTB1 And BTB2 then
          AcTransferBus1Level := TIEBusLevel;
     end;

  if Gen1Available And GCB1 then
     begin
       if GCB2 Or APUSw Or GNDSw then
          BTB1 := False;  //Déconnect AC TRANSFERT BUS 1 avec le TieBus

       if GCB2 And APUSw then
          begin
            APUSw  := False; //Déconnecte l'APU du TieBus
            APUSwL := False;
            APUSwR := False;
          end;
       AcTransferBus1Level := Generatrice1Level;
     end
     else
     if Not Gen1Available then
        GCB1 := False;

  if (TR1Level > 0) And (AcTransferBus1Level > 0) then
     IAcTr1 := TR1Intensite / (AcTransferBus1Level / TR1Level)
     else
     IAcTr1 := 0;

  if (TR3Level > 0) And Not RelayTr3 then //Connecté sur AcTransfertBus1
     IAcTr3 := TR3Intensite / (AcTransferBus1Level / TR3Level)
     else
     IAcTr3 := 0;

  if AcTransferBus1Level > 0 then
     AcTransferBus1Intensite := GalleyBusCetDIntensite +
                                ACMainBus1Intensite +
                                AC115VStandbyBusIntensite +
                                IAcTr1 + IAcTr3;

  if StartAPUSw And Not StartApuOnBat then //Apu en séquence de démarrage sur lAc
     AcTransferBus1Intensite := AcTransferBus1Intensite + IAmorcageApu;

  if (EnG1StarterValve > 1) And (EnG1StarterValve < 100) then //Ouverture et fermeture Starter Valve Moteur 1
     AcTransferBus1Intensite := AcTransferBus1Intensite + EngStarterValveIntensite;

  if (EnG1StarterValve = 100) //Valves pleine ouverture
     And (((TabEntreesSioc[EngStartIgniL] = 1) And (TabEntreesSioc[EngStartIgniR] = 0))
     Or ((TabEntreesSioc[EngStartIgniL] = 0) And (TabEntreesSioc[EngStartIgniR] = 0)))
     then //Ignition L Moteur 1
     AcTransferBus1Intensite := AcTransferBus1Intensite + EngIgnitionIntensite;
     
  if Not INSTRUCTOR_GND_SERVICE_RELAY then //Relay connecté sur  "AcTransferBus1"
     AcTransferBus1Intensite := AcTransferBus1Intensite + ACGndServiceBus1Intensite
     else
     if (AcTransferBus1Level > 0) And (AcTransferBus2Level > 0) then
        INSTRUCTOR_GND_SERVICE_RELAY := False; //On connecte automatiquement le GndServiceBus sur lAcTransferBus1
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité présente sur lAc transfert bus 2 ---------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AcTransferBus2_Level();
Var IAcTr2 ,IAcTr3 : Real;
begin
  if Not GCB2 And Not BTB2 then
     begin
       AcTransferBus2Level := 0;
       AcTransferBus2Intensite := 0;
     end;
     
  if (TIEBusLevel > 0) And Not GCB2 then
     begin
       if APUSw And Not BusTransfSw then //Not BusTransfSw = Pos Auto
          begin
            if GNDSw then
               GNDSw := False; //On déconnecte GroundLevel
            if Not (Gen1Available And GCB1) then
               BTB1 := True;
               BTB2 := True;
            AcTransferBus2Level := TIEBusLevel;
          end;

       if APUSw And BusTransfSw And Not GCB1 And Not GCB2 then //BusTransfSw Pos Off
          begin
            if Not APUSwR then //Sw APU GEN R Pos Off
               begin
                 AcTransferBus2Level := 0;
                 BTB2 := False; //Isole le TieBus de lAc Transfert Bus 1
                 CrossBusTieRelay := False; //Isole DcBus1 du DcBus2
               end
               else //Sw APU GEN R Pos On
               if Not HydPumpElec1Switch() then //Previent une sur-consommation sur les Bus
                  begin
                    BTB2 := True; //Connect le TieBus avec LAc Bus1
                    AcTransferBus2Level := TIEBusLevel;
                  end;
          end;

       if GNDAvailable And GNDSw then
          begin
            AcTransferBus2Level := TIEBusLevel;
            BTB2 := True;
          end;

       if GCB1 And BTB1 And BTB2 then
          AcTransferBus2Level := TIEBusLevel;
     end;

  if Gen2Available And GCB2 then
     begin
       if GCB1 Or APUSw Or GNDSw then
          BTB2 := False;  //Déconnect AC TRANSFERT BUS 2 avec le TieBus

       if GCB1 And APUSw then
          begin
            APUSw  := False; //Déconnecte l'APU du TieBus
            APUSwR := False;
            APUSwL := False;
          end;
       AcTransferBus2Level := Generatrice2Level;
     end
     else
     if Not Gen2Available then
        GCB2 := False;

  if (TR2Level > 0) And (AcTransferBus2Level > 0) then
     IAcTr2 := TR2Intensite / (AcTransferBus2Level / TR2Level)
     else
     IAcTr2 := 0;

  if (TR3Level > 0) And (AcTransferBus2Level > 0) And RelayTr3 then //Connecté sur AcTransfertBus2
     IAcTr3 := TR3Intensite / (AcTransferBus2Level / TR3Level)
     else
     IAcTr3 := 0;

  if AcTransferBus2Level > 0 then
     AcTransferBus2Intensite := GalleyBusAetBIntensite +
                                ACMainBus2Intensite +
                                IAcTr2 + IAcTr3;

  if (EnG2StarterValve > 1) And (EnG2StarterValve < 100) then //Ouverture et fermeture Starter Valve Moteur 2
     AcTransferBus2Intensite := AcTransferBus2Intensite + EngStarterValveIntensite;

  if (EnG2StarterValve = 100) //Valves pleine ouverture
     And (((TabEntreesSioc[EngStartIgniL] = 1) And (TabEntreesSioc[EngStartIgniR] = 0))
     Or ((TabEntreesSioc[EngStartIgniL] = 0) And (TabEntreesSioc[EngStartIgniR] = 0)))
     then //Ignition L Moteur 2
     AcTransferBus2Intensite := AcTransferBus2Intensite + EngIgnitionIntensite;
                                
  if Not INSTRUCTOR_GND_SERVICE_RELAY then //Relay connecté sur  "AcTransferBus2"
     AcTransferBus2Intensite := AcTransferBus2Intensite + ACGndServiceBus2Intensite
     else
     if (AcTransferBus1Level > 0) And (AcTransferBus2Level > 0) then
        INSTRUCTOR_GND_SERVICE_RELAY := False; //On connecte automatiquement le GndServiceBus sur lAcTransferBus1
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur lAc 115 V Main Bus1 alimenté par lAc transfert bus 1 --------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Main_Bus1();
begin
  if TabEntreesSioc[GalleySwOnOFF] = 0 then
     begin
       ACMainBus1DeConnecte := False;
       ACMainBus1Level := 0;
       ACMainBus1Intensite := 0;
       Exit;
     end;
  if (TabEntreesSioc[GalleySwOnOFF] = 1) And Not ACMainBus1DeConnecte then
     begin
       ACMainBus1Level := AcTransferBus1Level;
       if ACMainBus1Level > 0 then
          ACMainBus1Intensite := form2.TrackBar14.Position
          else
          ACMainBus1Intensite := 0;
     end
     else
     begin
       ACMainBus1Level := 0;
       ACMainBus1Intensite := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur lAc 115 V Main Bus2 alimenté par lAc transfert bus 2 --------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure AC_Main_Bus2();
begin
  if TabEntreesSioc[GalleySwOnOFF] = 0 then
     begin
       ACMainBus2DeConnecte := False;
       ACMainBus2Level := 0;
       ACMainBus2Intensite := 0;
       Exit;
     end;
  if (TabEntreesSioc[GalleySwOnOFF] = 1) And Not ACMainBus2DeConnecte then
     begin
       ACMainBus2Level := AcTransferBus2Level;
       if ACMainBus2Level > 0 then
          ACMainBus2Intensite := form2.TrackBar15.Position
          else
          ACMainBus2Intensite := 0;
     end
     else
     begin
       ACMainBus2Level := 0;
       ACMainBus2Intensite := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur lAc 115 V Galley Bus A B alimenté par lAc transfert bus 2 ---------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Galley_BusAetB();
begin
  if TabEntreesSioc[GalleySwOnOFF] = 0 then
     begin
       GalleyBusAetBDeConnecte := False;
       GalleyBusAetBLevel := 0;
       GalleyBusAetBIntensite := 0;
       Exit;       
     end;

  if (TabEntreesSioc[GalleySwOnOFF] = 1) And Not GalleyBusAetBDeConnecte then
     begin
       GalleyBusAetBLevel := AcTransferBus2Level;
       if GalleyBusAetBLevel > 0 then
          GalleyBusAetBIntensite := form2.TrackBar13.Position
          else
          GalleyBusAetBIntensite := 0;
     end
     else
     begin
       GalleyBusAetBLevel := 0;
       GalleyBusAetBIntensite := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Tension et intensité sur lAc 115 V Galley Bus C D alimenté par lAc transfert bus 1 ---------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Galley_BusCetD;
begin
  if TabEntreesSioc[GalleySwOnOFF] = 0 then
     begin
       GalleyBusCetDDeConnecte := False;
       GalleyBusCetDLevel := 0;
       GalleyBusCetDIntensite := 0;
       Exit;
     end;

  if (TabEntreesSioc[GalleySwOnOFF] = 1) And Not GalleyBusCetDDeConnecte then
     begin
       GalleyBusCetDLevel := AcTransferBus1Level;
       if GalleyBusCetDLevel > 0 then
          GalleyBusCetDIntensite := form2.TrackBar12.Position
          else
          GalleyBusCetDIntensite := 0;
     end
     else
     begin
       GalleyBusCetDLevel := 0;
       GalleyBusCetDIntensite := 0;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Detection Limite courant fourni par l'APU ----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Detection_Limite_Intensite_APU();
Var IntensiteLimiteApu : Real;
begin
  if (BTB1 And BTB2 And Not GCB1 And Not GCB2 And APUSw)
     Or (Not BTB1 And GCB1 And BTB2 And Not GCB2 And APUSw)
     Or ( Not BTB2 And GCB2 And BTB1 And Not GCB1 And APUSw) then
     begin //LAPU fourni les deux Bus on déconnecte progressivement les bus auxiliaires si I est trop important
       if OnAir then
          IntensiteLimiteApu := 135
          else //Au Sol
          IntensiteLimiteApu := 60;

       if (APUIntensite > IntensiteLimiteApu) And (GalleyBusAetBDeConnecte Or Not BTB2) And GalleyBusCetDDeConnecte
          And (ACMainBus2DeConnecte Or Not BTB2) And Not ACMainBus1DeConnecte then
          Begin
            ACMainBus1DeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - ACMainBus1Intensite;
          end;

       if (APUIntensite > IntensiteLimiteApu) And GalleyBusAetBDeConnecte And (GalleyBusCetDDeConnecte Or Not BTB1)
          And Not ACMainBus2DeConnecte then
          Begin
            ACMainBus2DeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - ACMainBus2Intensite;
          end;

       if (APUIntensite > IntensiteLimiteApu) And (GalleyBusAetBDeConnecte Or Not BTB2) And Not GalleyBusCetDDeConnecte
          And BTB1 then
          begin
            GalleyBusCetDDeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - GalleyBusCetDIntensite;
          end;

       if (APUIntensite > IntensiteLimiteApu) And Not GalleyBusAetBDeConnecte And BTB2 then
          begin
            GalleyBusAetBDeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - GalleyBusAetBIntensite;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Detection Limite courant fourni par la Génératrice 1 -----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Detection_Limite_Intensite_Generatrice1();
begin
  if Not BTB1 And GCB1 then //Gen1 fourni un seul Bus
     begin
       if (Generatrice1Intensite > IntensiteLimiteGen) And GalleyBusCetDDeConnecte And Not ACMainBus1DeConnecte then
          begin
            ACMainBus1DeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - ACMainBus1Intensite;
          end;

       if (Generatrice1Intensite > IntensiteLimiteGen) And Not GalleyBusCetDDeConnecte then
          begin
            GalleyBusCetDDeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - GalleyBusCetDIntensite;
          end;
     end;

  if GCB1 And BTB1 And BTB2 And Not GCB2 then
     begin //Gen1 fourni les deux Bus on déconnecte progressivement les bus auxiliaires si I est trop important
       if (Generatrice1Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And GalleyBusCetDDeConnecte
          And ACMainBus2DeConnecte And Not ACMainBus1DeConnecte then
          Begin
            ACMainBus1DeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - ACMainBus1Intensite;
          end;

       if (Generatrice1Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And GalleyBusCetDDeConnecte
          And Not ACMainBus2DeConnecte then
          Begin
            ACMainBus2DeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - ACMainBus2Intensite;
          end;

       if (Generatrice1Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And Not GalleyBusCetDDeConnecte then
          begin
            GalleyBusCetDDeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - GalleyBusCetDIntensite;
          end;

       if (Generatrice1Intensite > IntensiteLimiteGen) And Not GalleyBusAetBDeConnecte then
          begin
            GalleyBusAetBDeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - GalleyBusAetBIntensite;
          end;
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Detection Limite courant fourni par la Génératrice 2 -----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure Detection_Limite_Intensite_Generatrice2();
begin
  if Not BTB2 And GCB2 then //Gen2
     begin
       if (Generatrice2Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And Not ACMainBus2DeConnecte then
          begin
            ACMainBus2DeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - ACMainBus2Intensite;
          end;

       if (Generatrice2Intensite > IntensiteLimiteGen) And Not GalleyBusAetBDeConnecte then
          begin
            GalleyBusAetBDeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - GalleyBusAetBIntensite;
          end;
     end;

  if GCB2 And BTB1 And BTB2 And Not GCB1 then
     begin //Gen2 fourni les deux Bus on déconnecte progressivement les bus auxiliaires si I est trop important
       if (Generatrice2Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And GalleyBusCetDDeConnecte
          And ACMainBus2DeConnecte And Not ACMainBus1DeConnecte then
          Begin
            ACMainBus1DeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - ACMainBus1Intensite;
          end;

       if (Generatrice2Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And GalleyBusCetDDeConnecte
          And Not ACMainBus2DeConnecte then
          Begin
            ACMainBus2DeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - ACMainBus2Intensite;
          end;

       if (Generatrice2Intensite > IntensiteLimiteGen) And GalleyBusAetBDeConnecte And Not GalleyBusCetDDeConnecte then
          begin
            GalleyBusCetDDeConnecte := True;
            AcTransferBus1Intensite := AcTransferBus1Intensite - GalleyBusCetDIntensite;
          end;

       if (Generatrice2Intensite > IntensiteLimiteGen) And Not GalleyBusAetBDeConnecte then
          begin
            GalleyBusAetBDeConnecte := True;
            AcTransferBus2Intensite := AcTransferBus2Intensite - GalleyBusAetBIntensite;
          end;
     end;
end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Mise à  jour des Korry sur lAC And DC Metering Panel -----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure MAJ_Korry_AC_And_DC_Metering_Panel();
begin
  if (TensionBatCourante <= RefBatLow) And Not K_BAT_DISCHARGE then
     K_BAT_DISCHARGE_ON();
  if (TensionBatCourante > RefBatLow) And K_BAT_DISCHARGE then
     K_BAT_DISCHARGE_OFF();

  if Not OnAir then
     begin
       if (DCBus1Level = 0) Or (DCBus2Level = 0) Or (DCStanbyBusLevel = 0) Or (HotBatteryBusLevel = 0) then
          begin
            if Not K_ELEC then
               K_ELEC_ON()
          end
          else
          if K_ELEC then
             K_ELEC_OFF();
       if Not INSTRUCTOR_TR1_AVAILABLE Or Not INSTRUCTOR_TR2_AVAILABLE Or Not INSTRUCTOR_TR3_AVAILABLE then
          if Not K_TR_UNIT then
             K_TR_UNIT_ON();
       if INSTRUCTOR_TR1_AVAILABLE And INSTRUCTOR_TR2_AVAILABLE And INSTRUCTOR_TR3_AVAILABLE then
          if K_TR_UNIT then
             K_TR_UNIT_OFF();
     end
     else
     begin
       if Not INSTRUCTOR_TR1_AVAILABLE Or (Not INSTRUCTOR_TR2_AVAILABLE And Not INSTRUCTOR_TR3_AVAILABLE) then
          if Not K_TR_UNIT then
             K_TR_UNIT_ON();
       if INSTRUCTOR_TR1_AVAILABLE And (INSTRUCTOR_TR2_AVAILABLE Or INSTRUCTOR_TR3_AVAILABLE) then
          if K_TR_UNIT then
             K_TR_UNIT_OFF();
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Mise à  jour des Korry sur le Generator Drive Standby Level Panel -----------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure MAJ_Korry_Generator_Drive_Standby_Level_Panel();
begin
  if Not Gen1Available And Not K_DRIVE1 then //+ Eng not running + auto disconnect oil temp + swtich disconnect
     K_DRIVE1_ON();

  if Gen1Available And K_DRIVE1 then
     K_DRIVE1_OFF();

  if Not Gen2Available And Not K_DRIVE2 then //+ Eng not running + auto disconnect oil temp + swtich disconnect
     K_DRIVE2_ON();

  if Gen2Available And K_DRIVE2 then
     K_DRIVE2_OFF();

  if (Not StandbyPowerSwitchPosAuto And Not StandbyPowerSwitchPosBat) //Sw Pos OFF
     Or (DCStanbyBusLevel = 0) Or (AC115VStandbyBusLevel = 0) Or (BatteryBusLevel = 0) then
     if Not K_STANDBY_PWR_OFF then
        K_STANDBY_PWR_OFF_ON();

  if (StandbyPowerSwitchPosAuto Or StandbyPowerSwitchPosBat)  //Pos Auto ou Bat
     And (DCStanbyBusLevel > 0) And (AC115VStandbyBusLevel > 0) And (BatteryBusLevel > 0) then
     if K_STANDBY_PWR_OFF then
        K_STANDBY_PWR_OFF_OFF();
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Mise à  jour des Korry sur lHydPumps Panel ---------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure MAJ_Korry_HydPumps_Panel();
begin
  if HydPumpEng1Switch And K_LOW_PRESSURE_ENG1 And Gen1Run then
     K_LOW_PRESSURE_ENG1_OFF();

  if (Not HydPumpEng1Switch Or Not Gen1Run) And Not K_LOW_PRESSURE_ENG1 then
     K_LOW_PRESSURE_ENG1_ON();


  if HydPumpElec2Switch And K_LOW_PRESSURE_ELEC2 And (Generatrice2Level > 0) then
     K_LOW_PRESSURE_ELEC2_OFF();

  if (Not HydPumpElec2Switch Or (Generatrice2Level = 0)) And Not K_LOW_PRESSURE_ELEC2 then
     K_LOW_PRESSURE_ELEC2_ON();


  if HydPumpElec1Switch And K_LOW_PRESSURE_ELEC1 And (Generatrice1Level > 0) then
     K_LOW_PRESSURE_ELEC1_OFF();

  if (Not HydPumpElec1Switch Or (Generatrice1Level = 0)) And Not K_LOW_PRESSURE_ELEC1 then
     K_LOW_PRESSURE_ELEC1_ON();


  if HydPumpEng2Switch And K_LOW_PRESSURE_ENG2 And Gen2Run then
     K_LOW_PRESSURE_ENG2_OFF();

  if (Not HydPumpEng2Switch Or Not Gen2Run) And Not K_LOW_PRESSURE_ENG2 then
     K_LOW_PRESSURE_ENG2_ON();


 // K_OVERHEAT_ENG1
 // K_OVERHEAT_ENG2

end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Mise à  jour des Korry sur le Ground Power Panel And Bus Switching Panel ----------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure MAJ_Korry_Ground_Power_Panel_And_Bus_Switching_Panel();
begin
  // Le Korry "K_GRD_POWER_AVAILABLE" est géré dans la routine "Ground_Level"

  if (AcTransferBus1Level = 0) And Not K_GEN1_TRANSFERT_BUS_OFF then //Pas de puissance disponible sur le Bus
     K_GEN1_TRANSFERT_BUS_OFF_ON(); //On allume le Korry Gen1 "TRANSFERT BUS OFF"

  if (AcTransferBus2Level = 0) And Not K_GEN2_TRANSFERT_BUS_OFF then //Pas de puissance disponible sur le Bus
     K_GEN2_TRANSFERT_BUS_OFF_ON(); //On allume le Korry Gen2 "TRANSFERT BUS OFF"

  if (AcTransferBus1Level > 0) And K_GEN1_TRANSFERT_BUS_OFF then //Puissance disponible sur le Bus
     K_GEN1_TRANSFERT_BUS_OFF_OFF();//On eteint le Korry Gen1 "TRANSFERT BUS OFF"

  if (AcTransferBus2Level > 0) And K_GEN2_TRANSFERT_BUS_OFF then //Puissance disponible sur le Bus
     K_GEN2_TRANSFERT_BUS_OFF_OFF();//On eteint le Korry Gen2 "TRANSFERT BUS OFF"

  //le Bus AC1 est alimenté ?
  if GCB1 then //Par Gen1
     begin
       if K_GEN1_SOURCE_OFF then
          K_GEN1_SOURCE_OFF_OFF(); //On éteind le Korry Gen1 "SOURCE OFF"
     end
     else //Par l'APU ou le Ground Power
     begin
       if BTB1 And BTB2 And APUSW And APUSwL then //Par l'APU
          if K_GEN1_SOURCE_OFF then
             K_GEN1_SOURCE_OFF_OFF(); //On éteind le Korry Gen1 "SOURCE OFF"

       if BTB1 And BTB2 And GNDSw then //Par le Ground Power
          begin
            if K_GEN1_SOURCE_OFF then
               K_GEN1_SOURCE_OFF_OFF(); //On éteind le Korry Gen1 "SOURCE OFF"
          end;
     end;

  if AcTransferBus1Level = 0 then //le Bus AC1 n'est pas alimenté
     begin
       if Not K_GEN1_SOURCE_OFF then
          K_GEN1_SOURCE_OFF_ON(); //On allume le Korry Gen1 "SOURCE OFF"
     end;

  //le Bus AC2 est alimenté ?
  if GCB2 then //Par Gen2
     begin
       if K_GEN2_SOURCE_OFF then
          K_GEN2_SOURCE_OFF_OFF(); //On éteind le Korry Gen2 "SOURCE OFF"
     end
     else //Par l'APU ou le Ground Power
     begin
       if BTB1 And BTB2 And APUSW And APUSwR then //Par l'APU
          if K_GEN2_SOURCE_OFF then
             K_GEN2_SOURCE_OFF_OFF(); //On éteind le Korry Gen2 "SOURCE OFF"

       if BTB1 And BTB2 And GNDSw then //Par le Ground Power
          begin
            if K_GEN2_SOURCE_OFF then
               K_GEN2_SOURCE_OFF_OFF(); //On éteind le Korry Gen2 "SOURCE OFF"
          end;
     end;

  if AcTransferBus2Level = 0 then //le Bus AC2 n'est pas alimenté
     begin
       if Not K_GEN2_SOURCE_OFF then
          K_GEN2_SOURCE_OFF_ON(); //On allume le Korry Gen2 "SOURCE OFF"
     end;

  //On essaye de connecter la génératrice 1 qui n'est pas dispo via le Sw ,on allume le Korry tant que le Sw est maintenu On
  if (TabEntreesSioc[281] = 1) And Not Gen1Available then  //Var ApuGen1On
     if Not K_GEN1_SOURCE_OFF then
        K_GEN1_SOURCE_OFF_ON(); //On allume le Korry Gen1 "SOURCE OFF"

  //On essaye de connecter la génératrice 2 qui n'est pas dispo via le Sw ,on allume le Korry tant que le Sw est maintenu On
  if (TabEntreesSioc[287] = 1) And Not Gen2Available then  //Var ApuGen2On
     if Not K_GEN2_SOURCE_OFF then
        K_GEN2_SOURCE_OFF_ON(); //On allume le Korry Gen2 "SOURCE OFF"

  //En vol ,On a perdu la Gen2 ,on alimante le TieBus avec Gen1
  if OnAir And Gen1Available And GCB1 And Not Gen2Available And Not BusTransfSw then
     if Not K_GEN2_SOURCE_OFF then
        K_GEN2_SOURCE_OFF_ON(); //On allume le Korry Gen2 "SOURCE OFF"

  //En vol ,On a perdu la Gen1 ,on alimante le TieBus avec Gen2
  if OnAir And Gen2Available And GCB2 And Not Gen1Available And Not BusTransfSw then
     if Not K_GEN1_SOURCE_OFF then
        K_GEN1_SOURCE_OFF_ON(); //On allume le Korry Gen2 "SOURCE OFF"

  if Generatrice1Level > 0 then
     begin
       if GCB1 then //GCB1 Closed
          begin
            if K_GEN1_OFF_BUS then //On eteint le Korry Gen1 "GEN OFF BUS"  ,puissance appliquée sur le Bus
               K_GEN1_OFF_BUS_OFF();
          end
          else //GCB1 Open
          begin
            if Not K_GEN1_OFF_BUS then //On allume le Korry Gen1 "GEN OFF BUS"  ,puissance non appliquée sur le Bus
               K_GEN1_OFF_BUS_ON();
          end;
     end
     else //Plus de puissance Gen1 dispo
     begin
       if K_GEN1_OFF_BUS then //On eteint le Korry Gen1 "GEN OFF BUS"  ,puissance pas dispo
          K_GEN1_OFF_BUS_OFF();
     end;

  if Generatrice2Level > 0 then
     begin
       if GCB2 then //GCB2 Closed
          begin
            if K_GEN2_OFF_BUS then //On eteint le Korry Gen2 "GEN OFF BUS"  ,puissance appliquée sur le Bus
               K_GEN2_OFF_BUS_OFF();
          end
          else //GCB2 Open
          begin
            if Not K_GEN2_OFF_BUS then //On allume le Korry Gen2 "GEN OFF BUS"  ,puissance non appliquée sur le Bus
               K_GEN2_OFF_BUS_ON();
          end;
     end
     else //Plus de puissance Gen2 dispo
     begin
       if K_GEN2_OFF_BUS then //On eteint le Korry Gen2 "GEN OFF BUS"  ,puissance plus dispo
          K_GEN2_OFF_BUS_OFF();
     end;

  if APULevel > 0 then //Apu running et séquence de démarrage terminée
     begin
       if APUSw then //Puissance APU connectée sur le TIE Bus
          begin
            if K_APU_GEN_OFF_BUS then  //On eteint le Korry Apu "APU GEN OFF BUS"
               K_APU_GEN_OFF_BUS_OFF();
          end
          else //Puissance APU pas connectée sur le TIE Bus
          if Not K_APU_GEN_OFF_BUS then //On allume le Korry Apu "APU GEN OFF BUS"
             K_APU_GEN_OFF_BUS_ON();

       if K_LOW_OIL_PRESSURE_APU then
          K_LOW_OIL_PRESSURE_APU_OFF();

       if INSTRUCTOR_OVERSPEED_APU then //Set depuis console instructeur
          if Not K_OVERSPEED_APU then //On allume le Korry "OVER SPEED"
             K_OVERSPEED_APU_ON();
     end
     else //Apu Not Running ou tombe en panne en vol ou en phase de démarrage ou stopper en cour de démarrage
     begin
       if K_APU_GEN_OFF_BUS then //On eteint le Korry Apu "APU GEN OFF BUS"
          K_APU_GEN_OFF_BUS_OFF();

       if Not APUAvailable then
          if StartAPUSw then //Apu en phase de démarrage
             begin
               if Not K_LOW_OIL_PRESSURE_APU then
                  K_LOW_OIL_PRESSURE_APU_ON();
               if K_OVERSPEED_APU then //On éteint le Korry "OVER SPEED" allumé suite à  la séquence de démarrage APU interrompue
                  K_OVERSPEED_APU_OFF();
             end
             else
             begin //Séquence de démarrage APU interrompue
               if K_LOW_OIL_PRESSURE_APU then
                  K_LOW_OIL_PRESSURE_APU_OFF();
               if StartAPUAbort then
                  if Not K_FAULT_APU then //On allume le Korry "FAULT"
                     K_FAULT_APU_ON();
             end;     
     end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- Mise à  jour des affichages de tensions ,intensités et fréquences sur le Metering Ac Dc Panel -------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure MAJ_Metering_Ac_Dc_Panel();
begin

//DC Selector
  if TabEntreesSioc[DcBusSelStbyPw] = 1 then
     begin
       VDCDisplay := Trunc(DCStanbyBusLevel);
       ADCDisplay := Trunc(DCStanbyBusIntensite);
     end;

  if TabEntreesSioc[DcBusSelBatBus] = 1 then
     begin
       VDCDisplay := Trunc(BatteryBusLevel);
       ADCDisplay := Trunc(BatteryBusIntensite);
     end;

  if TabEntreesSioc[DcBusSelBat] = 1 then
     begin
       VDCDisplay  := Trunc(TensionBatCourante);
       ADCDisplay  := Trunc(IntensiteBatCourante);
     end;

  if TabEntreesSioc[DcBusSelTr1] = 1 then
     begin
       VDCDisplay := Trunc(TR1Level);
       ADCDisplay := Trunc(TR1Intensite);
     end;

  if TabEntreesSioc[DcBusSelTr2] = 1 then
     begin
       VDCDisplay := Trunc(TR2Level);
       ADCDisplay := Trunc(TR2Intensite);
     end;

  if TabEntreesSioc[DcBusSelTr3] = 1 then
     begin
       VDCDisplay := Trunc(TR3Level);
       ADCDisplay := Trunc(TR3Intensite);
     end;

  if Trunc(VDCDisplay) <> DCVoltsPrec then
     WriteSioc(DCVolts ,inttostr(Trunc(VDCDisplay)));
  if Trunc(ADCDisplay) <> DCAmpPrec then
     WriteSioc(DCAmp   ,inttostr(Trunc(ADCDisplay)));

  DCVoltsPrec := Trunc(VDCDisplay);
  DCAmpPrec   := Trunc(ADCDisplay);

  //Ac Selector
  if TabEntreesSioc[AcBusSelStbPwr] = 1 then
     begin
       VACDisplay  := Trunc(AC115VStandbyBusLevel);
       AACDisplay  := Trunc(AC115VStandbyBusIntensite);
       FZACDisplay := Trunc(AC115VStandbyBusFZ);
     end;

  if TabEntreesSioc[AcBusSelGrdPwr] = 1 then
     begin
       VACDisplay  := Trunc(GroundLevel);
       AACDisplay  := Trunc(GroundIntensite);
       FZACDisplay := Trunc(GroundFz);
     end;

  if TabEntreesSioc[AcBusSelGen1] = 1 then
     begin
       VACDisplay  := Trunc(Generatrice1Level);
       AACDisplay  := Trunc(Generatrice1Intensite);
       FZACDisplay := Trunc(Generatrice1Fz);
     end;

  if TabEntreesSioc[AcBusSelApuGen] = 1 then
     begin
       VACDisplay  := Trunc(APULevel);
       AACDisplay  := Trunc(APUIntensite);
       FZACDisplay := Trunc(APUFz);
     end;

  if TabEntreesSioc[AcBusSelGen2] = 1 then
     begin
       VACDisplay  := Trunc(Generatrice2Level);
       AACDisplay  := Trunc(Generatrice2Intensite);
       FZACDisplay := Trunc(Generatrice2Fz);
     end;

  if TabEntreesSioc[AcBusSelInv] = 1 then
     begin
       VACDisplay  := Trunc(StaticINVLevel);
       AACDisplay  := Trunc(StaticINVIntensite);
       FZACDisplay := Trunc(StaticINVFz);
     end;

  if Trunc(VACDisplay) <> AcVoltsPrec then
     WriteSioc(AcVolts ,inttostr(VACDisplay));
  if Trunc(AACDisplay) <> AcAmpPrec then
     WriteSioc(AcAmp   ,inttostr(AACDisplay));
  if Trunc(FZACDisplay) <> FzAcPrec then
     WriteSioc(FzAc    ,inttostr(FZACDisplay));

  AcVoltsPrec := Trunc(VACDisplay);
  AcAmpPrec   := Trunc(AACDisplay);
  FzAcPrec    := Trunc(FZACDisplay);
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///--- On Scan toutes les routines ------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure ScanAcDcLevelSystem();
begin
  Battery_Switch();
  Switched_Hot_Bat_Bus();
  GroundLevelSwitch();
  Standby_Power_Switch();
  BusTransfertSwitch();
  ApuGen1Switch();
  ApuGenLSwitch();
  ApuGenRSwitch();
  ApuGen2Switch();

  Battery_Level();
  Hot_Battery_Bus();
  Battery_Bus();

  AC_115V_Standby_Bus();
  AC_28V_Standby_Bus();
  Static_INV();

  StartAPUSwitch();
  Starter_Stopper_APU();
  APU_Level();

  Ground_Level();

  Start_Eng1_Switch();
  Start_Eng2_Switch();
  Generatrice1_Level();
  Generatrice2_Level();
  TIEBus_Level();

  Battery_Charger();
  Galley_BusAetB();
  AC_Main_Bus2();
  AC_Gnd_115V_SVCE_Bus2();
  AC_Gnd_28V_SVCE_Bus2();

  Galley_BusCetD();
  AC_Main_Bus1();
  AC_Gnd_115V_SVCE_Bus1();
  AC_Gnd_28V_SVCE_Bus1();

  AcTransferBus2_Level();
  AcTransferBus1_Level();

  DC_Bus1();
  DC_Stanby_Bus();
  DC_Bus2();
  Calcul_U_Trs();

  Detection_Limite_Intensite_APU();
  Detection_Limite_Intensite_Generatrice1();
  Detection_Limite_Intensite_Generatrice2();

  if Not BatterySw then //Rien n'est connecté
     begin
       if IntensiteKorry() > 0 then
          begin
            AllKorryOff();
            MAJ_Metering_Ac_Dc_Panel(); //On eteint l'affichage
          end;
     end
     else
     begin
       MAJ_Metering_Ac_Dc_Panel();
       if SleepKorry = 3 then
          begin
            MAJ_Korry_Generator_Drive_Standby_Level_Panel();
            MAJ_Korry_HydPumps_Panel();
            MAJ_Korry_Ground_Power_Panel_And_Bus_Switching_Panel();
            MAJ_Korry_AC_And_DC_Metering_Panel();
            SleepKorry := 0
          end
          else
          Inc(SleepKorry);
     end;
end;
end.
  proc init
  //Gestion Batterie
  BatStart := False;
  CapaciteBatResiduelle := 35;
  BatEnCharge := False;
  IChargeBatAC := 0;
  IntensiteBatCourante := 0;
  RefBatLow := 20;
  StopBat := False;

  ChargerBatterie := False;
  TensionBatCourante := 24;
  OnAir := False;
  KorryOff := True;
  BatterySw := False;
  APUSw := False;
  DelayAPU := 0;

  APUAvailable := False;
  GNDSw := False; //Ground Switch Open
  BusTransfSw := False; //Auto
  RelayTR3 := True; //Pos sur AcTransfertBus2
  CrossBusTieRelay := True;//Fermé
  GCB1 := False; //GCB1 Open
  GCB2 := False;
  APUSwL := False; //Apu Sw Open Via L Sw
  APUSwR := False; //Apu Sw Open Via R Sw
  AutoGenerator := True;
  Gen1Run := False;
  Gen2Run := False;
  OilTempGen1 := 40;
  OilTempGen2 := 40;
end;
JeanMi
 
Nous venons dassister à  la n'aissance d'un "JeamMiSim737"
 
Fab ,exagère pas ,c'est juste du self control pour gérer les bus correctement et étudier en scriptant le fonctionnement.
Comme ça ,si ça roule pas ben je corrige et je sais corriger par moi même.Je ne dépend pas de la bonne volonté dautrui.

JeanMi
 
Je nexagère pas JeanMi, je suis très sérieux là 
 
Retour
Haut