diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml
index 82947a55..2ddc2efd 100644
--- a/Models/FlightDeck/a320.flightdeck.xml
+++ b/Models/FlightDeck/a320.flightdeck.xml
@@ -7125,12 +7125,12 @@
chrono2_1
-0.547
- 0.151
+ 0.167
0.196
90
72.81
- center-center
+ right-center
xy-plane
text-value
%s
@@ -7187,7 +7187,7 @@
UTC_1
-0.547
- 0.144
+ 0.146
0.196
90
72.81
@@ -7218,7 +7218,7 @@
UTC_2
-0.547
- 0.158
+ 0.160
0.196
90
72.81
diff --git a/Nasal/Systems/brakesystem.nas b/Nasal/Systems/brakesystem.nas
index 926e1ad1..13aebae2 100755
--- a/Nasal/Systems/brakesystem.nas
+++ b/Nasal/Systems/brakesystem.nas
@@ -107,68 +107,59 @@ var BrakeSystem =
var L_thrust_lb = getprop("engines/engine[0]/thrust_lb");
var R_thrust_lb = getprop("engines/engine[1]/thrust_lb");
- if (dt<1.0)
- {
+ if (getprop("sim/freeze/replay-state")==0 and dt<1.0) {
var OnGround = getprop("gear/gear[1]/wow");
#cooling effect: adjust cooling factor by a value proportional to the environment temp (m.CoolingFactor + environment temp-degc * 0.00001)
var LCoolingRatio = me.CoolingFactor+(tatdegc*0.000001);
var RCoolingRatio = me.CoolingFactor+(tatdegc*0.000001);
- if (getprop("controls/gear/brake-fans"))
- {
+ if (getprop("controls/gear/brake-fans")) {
#increase CoolingRatio if Brake Fans are active
LCoolingRatio = LCoolingRatio * 3;
RCoolingRatio = RCoolingRatio * 3;
- }
- if (getprop("gear/gear[1]/position-norm"))
- {
+ };
+ if (getprop("gear/gear[1]/position-norm")) {
#increase CoolingRatio if gear down according to airspeed
LCoolingRatio = LCoolingRatio * getprop("velocities/airspeed-kt");
} else {
#Reduced CoolingRatio if gear up
LCoolingRatio = LCoolingRatio * 0.1;
- }
- if (getprop("gear/gear[2]/position-norm"))
- {
+ };
+ if (getprop("gear/gear[2]/position-norm")) {
#increase CoolingRatio if gear down according to airspeed
RCoolingRatio = RCoolingRatio * getprop("velocities/airspeed-kt");
} else {
#Reduced CoolingRatio if gear up
RCoolingRatio = RCoolingRatio * 0.1;
- }
- if (LBrakeLevel>0)
- {
+ };
+ if (LBrakeLevel>0) {
#Reduced CoolingRatio if Brakes used
LCoolingRatio = LCoolingRatio * 0.1 * LBrakeLevel;
- }
- if (RBrakeLevel>0)
- {
+ };
+ if (RBrakeLevel>0) {
#Reduced CoolingRatio if Brakes used
RCoolingRatio = RCoolingRatio * 0.1 * RBrakeLevel;
- }
-
+ };
+
var LnCoolFactor = math.ln(1-LCoolingRatio);
var RnCoolFactor = math.ln(1-RCoolingRatio);
L_thrust_lb = math.abs(getprop("engines/engine[0]/thrust_lb"));
- if (L_thrust_lb < 1)
- {
+ if (L_thrust_lb < 1) {
L_thrust_lb = 1
- }
+ };
#Disabling thrust computation on Brakes temperature
#L_Thrust = math.pow((math.log10(L_thrust_lb)),10)*0.0000000002;
L_Thrust = 0;
R_thrust_lb = math.abs(getprop("engines/engine[1]/thrust_lb"));
- if (R_thrust_lb < 1)
- {
+ if (R_thrust_lb < 1) {
R_thrust_lb = 1
- }
+ };
#Disabling thrust computation on Brakes temperature
#R_Thrust = math.pow((math.log10(R_thrust_lb)),10)*0.0000000002;
R_Thrust = 0;
- if (OnGround)
- {
+ if (OnGround) {
var V1 = getprop("velocities/groundspeed-kt");
var Mass = getprop("fdm/jsbsim/inertia/weight-lbs")*(me.ScalingDivisor);
@@ -176,26 +167,21 @@ var BrakeSystem =
# dE= 1/2 * m * V1^2 - 1/2 * m * V2^2)
var V2_L = V1 - me.BrakeDecel * dt * LBrakeLevel;
var V2_R = V1 - me.BrakeDecel * dt * RBrakeLevel;
-
+
LThermalEnergy += (Mass * getprop("gear/gear[1]/compression-norm") * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2);
- if (getprop("services/chocks/left"))
- {
- if (!getprop("controls/gear/brake-parking"))
- {
+ if (getprop("services/chocks/left")) {
+ if (!getprop("controls/gear/brake-parking")) {
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
} else {
#LThermalEnergy += L_Thrust;
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt);
- }
+ };
} else {
- if (!getprop("controls/gear/brake-parking"))
- {
- if (LBrakeLevel>0)
- {
- if (V2_L>0)
- {
+ if (!getprop("controls/gear/brake-parking")) {
+ if (LBrakeLevel>0) {
+ if (V2_L>0) {
#LThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2) + L_thrust;
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
@@ -203,37 +189,32 @@ var BrakeSystem =
#LThermalEnergy += math.abs(L_Thrust);
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt);
- }
+ };
} else {
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
- }
+ };
} else {
#LThermalEnergy += math.abs(L_Thrust);
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt);
- }
- }
+ };
+ };
RThermalEnergy += (Mass * getprop("gear/gear[2]/compression-norm") * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2);
- if (getprop("services/chocks/right"))
- {
- if (!getprop("controls/gear/brake-parking"))
- {
+ if (getprop("services/chocks/right")) {
+ if (!getprop("controls/gear/brake-parking")) {
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
} else {
#RThermalEnergy += math.abs(R_Thrust);
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt);
- }
+ };
} else {
- if (!getprop("controls/gear/brake-parking"))
- {
- if (RBrakeLevel>0)
- {
- if (V2_R>0)
- {
+ if (!getprop("controls/gear/brake-parking")) {
+ if (RBrakeLevel>0) {
+ if (V2_R>0) {
#RThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2) + R_thrust;
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
@@ -241,36 +222,34 @@ var BrakeSystem =
#RThermalEnergy += math.abs(R_Thrust);
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt);
- }
+ };
} else {
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
- }
+ };
} else {
#RThermalEnergy += math.abs(R_Thrust);
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt);
- }
- }
-
+ };
+ };
} else {
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
- }
-
- if (LThermalEnergy < 0) {
+ };
+ if (LThermalEnergy < 0) {
LThermalEnergy = 0
- }
+ };
if (LThermalEnergy > 3) {
LThermalEnergy = 3
- }
+ };
if (RThermalEnergy < 0) {
RThermalEnergy = 0
- }
+ };
if (RThermalEnergy > 3) {
RThermalEnergy = 3
- }
-
+ };
+
setprop("gear/gear[1]/L-Thrust",L_Thrust);
setprop("gear/gear[2]/R-Thrust",R_Thrust);
setprop("gear/gear[1]/Lbrake-thermal-energy",LThermalEnergy);
@@ -281,21 +260,19 @@ var BrakeSystem =
setprop("gear/gear[1]/L2brake-temp-degc",tatdegc+getprop("gear/gear[1]/L2error-temp-degc")+(LThermalEnergy * (300-tatdegc-getprop("gear/gear[1]/L2error-temp-degc"))));
setprop("gear/gear[2]/R3brake-temp-degc",tatdegc+getprop("gear/gear[2]/R3error-temp-degc")+(RThermalEnergy * (300-tatdegc-getprop("gear/gear[2]/R3error-temp-degc"))));
setprop("gear/gear[2]/R4brake-temp-degc",tatdegc+getprop("gear/gear[2]/R4error-temp-degc")+(RThermalEnergy * (300-tatdegc-getprop("gear/gear[2]/R4error-temp-degc"))));
-
- if ((LThermalEnergy>1)and(!me.LSmokeActive))
- {
+
+ if ((LThermalEnergy>1)and(!me.LSmokeActive)) {
# start smoke processing
me.LSmokeActive = 1;
settimer(func { BrakeSys.Lsmoke(); },0);
- }
- if ((RThermalEnergy>1)and(!me.RSmokeActive))
- {
+ };
+ if ((RThermalEnergy>1)and(!me.RSmokeActive)) {
# start smoke processing
me.RSmokeActive = 1;
settimer(func { BrakeSys.Rsmoke(); },0);
- }
- }
-
+ };
+ };
+
me.LastSimTime = CurrentTime;
# 5 updates per second are good enough
settimer(func { BrakeSys.update(); },0.2);
@@ -304,85 +281,84 @@ var BrakeSystem =
# smoke processing
Lsmoke : func()
{
- if ((me.LSmokeActive)and(getprop("gear/gear[1]/Lbrake-thermal-energy")>1))
- {
+ if ((me.LSmokeActive)and(getprop("gear/gear[1]/Lbrake-thermal-energy")>1)) {
# make density of smoke effect depend on energy level
var LSmokeDelay=0;
var LThermalEnergy = getprop("gear/gear[1]/Lbrake-thermal-energy");
- if (LThermalEnergy < 1.5)
- LSmokeDelay=(1.5-LThermalEnergy);
+ if (LThermalEnergy < 1.5) {
+ LSmokeDelay=(1.5-LThermalEnergy);
+ };
+
# No smoke when gear retracted
var LSmokeValue = (getprop("gear/gear[1]/position-norm")>0.5);
# toggle smoke to interpolate different densities
- if (LSmokeDelay>0.05)
- {
+ if (LSmokeDelay>0.05) {
me.LSmokeToggle = !me.LSmokeToggle;
if (!me.LSmokeToggle)
LSmokeValue = 0;
else
LSmokeDelay = 0;
- }
+ };
setprop("gear/gear[1]/Lbrake-smoke",LSmokeValue);
settimer(func { BrakeSys.Lsmoke(); },LSmokeDelay);
- }
- else
- {
+ } else {
# stop smoke processing
setprop("gear/gear[1]/Lbrake-smoke",0);
setprop("sim/animation/fire-services",0);
me.LSmokeActive = 0;
- }
- if (getprop("gear/gear[1]/Lbrake-thermal-energy") > 1.5)
+ };
+ if (getprop("gear/gear[1]/Lbrake-thermal-energy") > 1.5) {
setprop("sim/animation/fire-services",1);
- else
- setprop("sim/animation/fire-services",0);
+ } else {
+ setprop("sim/animation/fire-services",0);
+ };
+
},
# smoke processing
Rsmoke : func()
{
- if ((me.RSmokeActive)and(getprop("gear/gear[2]/Rbrake-thermal-energy")>1))
- {
+ if ((me.RSmokeActive)and(getprop("gear/gear[2]/Rbrake-thermal-energy")>1)) {
# make density of smoke effect depend on energy level
var RSmokeDelay=0;
var RThermalEnergy = getprop("gear/gear[2]/Rbrake-thermal-energy");
- if (RThermalEnergy < 1.5)
+ if (RThermalEnergy < 1.5) {
RSmokeDelay=(1.5-RThermalEnergy);
+ };
+
# No smoke when gear retracted
var RSmokeValue = (getprop("gear/gear[2]/position-norm")>0.5);
# toggle smoke to interpolate different densities
- if (RSmokeDelay>0.05)
- {
+ if (RSmokeDelay>0.05) {
me.RSmokeToggle = !me.RSmokeToggle;
if (!me.RSmokeToggle)
RSmokeValue = 0;
else
RSmokeDelay = 0;
- }
+ };
setprop("gear/gear[2]/Rbrake-smoke",RSmokeValue);
settimer(func { BrakeSys.Rsmoke(); },RSmokeDelay);
- }
- else
- {
+ } else {
# stop smoke processing
setprop("gear/gear[2]/Rbrake-smoke",0);
me.RSmokeActive = 0;
- }
- if (getprop("gear/gear[2]/Rbrake-thermal-energy") > 1.5)
- setprop("sim/animation/fire-services",1);
- else
- setprop("sim/animation/fire-services",0);
+ };
+ if (getprop("gear/gear[2]/Rbrake-thermal-energy") > 1.5) {
+ setprop("sim/animation/fire-services",1);
+ } else {
+ setprop("sim/animation/fire-services",0);
+ };
},
};
var BrakeSys = BrakeSystem.new();
setlistener("sim/signals/fdm-initialized",
- # executed on _every_ FDM reset (but not installing new listeners)
- func(idle) { BrakeSys.reset(); },
- 0,0);
+ # executed on _every_ FDM reset (but not installing new listeners)
+ func(idle) { BrakeSys.reset(); },
+0,0);
settimer(func()
- {
- BrakeSys.update();
- }, 5);
+ {
+ BrakeSys.update();
+ }, 5);
diff --git a/Systems/flight-recorder.xml b/Systems/flight-recorder.xml
index d43b02b3..eeaf44cf 100644
--- a/Systems/flight-recorder.xml
+++ b/Systems/flight-recorder.xml
@@ -134,7 +134,23 @@
float
/fdm/jsbsim/hydraulics/spoiler-r5/final-deg
+
+ float
+ /gear/gear[1]/L1brake-temp-degc
+
+
+ float
+ /gear/gear[1]/L2brake-temp-degc
+
+
+ float
+ /gear/gear[2]/R3brake-temp-degc
+
+
+ float
+ /gear/gear[2]/R4brake-temp-degc
+
-
\ No newline at end of file
+