[== 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;