diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas
index 96e98c31..aebd14d4 100644
--- a/Nasal/ECAM/ECAM-logic.nas
+++ b/Nasal/ECAM/ECAM-logic.nas
@@ -252,9 +252,24 @@ var messages_priority_3 = func {
}
if (eng1FireFl.active == 1) {
- eng1FireFllever.active = 1;
- eng1FireFlmaster.active = 1;
- eng1FireFlPB.active = 1;
+ if (eng1FireFllever.clearFlag == 0 and getprop("/fdm/jsbsim/fcs/throttle-lever[0]") > 0.01) {
+ eng1FireFllever.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FireFllever);
+ }
+
+ if (eng1FireFlmaster.clearFlag == 0 and getprop("/controls/engines/engine[0]/cutoff-switch") == 0) {
+ eng1FireFlmaster.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FireFlmaster);
+ }
+
+ if (eng1FireFlPB.clearFlag == 0 and getprop("/controls/engines/engine[0]/fire-btn") == 0) {
+ eng1FireFlPB.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FireFlPB);
+ }
+
eng1FireFlAgent1.active = 1;
eng1FireFlATC.active = 1;
eng1FireFl30Sec.active = 1;
@@ -359,6 +374,10 @@ var messages_priority_3 = func {
ECAM_controller.warningReset(apuFirePB);
}
+ if (getprop("/systems/fire/apu/agent-timer") != 0 and getprop("/systems/fire/apu/agent-timer") != 99) {
+ apuFireAgentTimer.msg = " -AGENT AFT " ~ getprop("/systems/fire/apu/agent-timer") ~ " S...DISCH";
+ }
+
if (apuFireAgent.clearFlag == 0 and !getprop("/systems/fire/apu/disch") and getprop("/systems/fire/apu/agent-timer") != 0) {
apuFireAgentTimer.active = 1;
} else {
diff --git a/Nasal/ECAM/ECAM-messages.nas b/Nasal/ECAM/ECAM-messages.nas
index 5091daff..c9bc2394 100644
--- a/Nasal/ECAM/ECAM-messages.nas
+++ b/Nasal/ECAM/ECAM-messages.nas
@@ -54,7 +54,7 @@ var warnings = std.Vector.new([
# ENG 1 FIRE (ground)
var eng1FireGn = warning.new(msg: "ENG 1 FIRE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
- var eng1FireGnlever = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
+ var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng1FireGnmaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
@@ -81,11 +81,11 @@ var warnings = std.Vector.new([
# ENG 2 FIRE (ground)
var eng2FireGn = warning.new(msg: "ENG 2 FIRE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
- var eng2FireGnlever = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
+ var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng2FireGnmaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
- var eng2FireGnPB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
+ var eng2FireGnPB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
var eng2FireGnAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng2FireGnmaster2 = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
diff --git a/Nasal/fire.nas b/Nasal/fire.nas
index 16774c2f..2fe781ef 100644
--- a/Nasal/fire.nas
+++ b/Nasal/fire.nas
@@ -36,9 +36,12 @@ var testBtn2 = props.globals.getNode("/controls/fire/test-btn-2", 1);
var eng1FireWarn = props.globals.initNode("/systems/fire/engine1/warning-active", 0, "BOOL");
var eng2FireWarn = props.globals.initNode("/systems/fire/engine2/warning-active", 0, "BOOL");
var apuFireWarn = props.globals.initNode("/systems/fire/apu/warning-active", 0, "BOOL");
-var eng1AgentTimer = props.globals.initNode("/systems/fire/engine1/agent-timer", 0, "INT");
-var eng2AgentTimer = props.globals.initNode("/systems/fire/engine2/agent-timer", 0, "INT");
-var apuAgentTimer = props.globals.initNode("/systems/fire/apu/agent-timer", 0, "INT");
+var eng1AgentTimer = props.globals.initNode("/systems/fire/engine1/agent-timer", 99, "INT");
+var eng2AgentTimer = props.globals.initNode("/systems/fire/engine2/agent-timer", 99, "INT");
+var apuAgentTimer = props.globals.initNode("/systems/fire/apu/agent-timer", 99, "INT");
+var eng1AgentTimerTime = props.globals.initNode("/systems/fire/engine1/agent-timer-time", 0, "INT");
+var eng2AgentTimerTime = props.globals.initNode("/systems/fire/engine2/agent-timer-time", 0, "INT");
+var apuAgentTimerTime = props.globals.initNode("/systems/fire/apu/agent-timer-time", 0, "INT");
var wow = props.globals.getNode("/fdm/jsbsim/position/wow", 1);
var dcbatNode = props.globals.getNode("systems/electrical/bus/dcbat", 1);
var dcessNode = props.globals.getNode("systems/electrical/bus/dc-ess", 1);
@@ -221,13 +224,15 @@ var engFireDetectorUnit = {
loopOne: 0,
loopTwo: 0,
condition: 100,
+ fireProp: "",
wow: "",
- new: func(sys) {
+ new: func(sys, fireProp) {
var eF = {parents:[engFireDetectorUnit]};
eF.sys = sys;
eF.active = 0;
eF.loopOne = 0;
eF.loopTwo = 0;
+ eF.fireProp = props.globals.getNode(fireProp, 1);
eF.wow = props.globals.getNode("/fdm/jsbsim/position/wow", 1);
return eF;
},
@@ -238,6 +243,12 @@ var engFireDetectorUnit = {
detector.updateTemp(detector.sys, detector.type);
}
+ if (me.fireProp.getValue() == 0) {
+ me.loopOne = 0;
+ me.loopTwo = 0;
+ return;
+ }
+
if ((me.loopOne == 1 and me.loopTwo == 1) or ((me.loopOne == 9 or me.loopOne == 8) and me.loopTwo == 1) or (me.loopOne == 1 and (me.loopTwo == 9 or me.loopTwo == 8))) {
me.TriggerWarning(me.sys);
}
@@ -295,13 +306,8 @@ var engFireDetectorUnit = {
if (me.wow.getValue() == 1) {
if (apuMaster.getBoolValue()) {
apuBleedNode.setValue(0);
- apuMaster.setValue(0);
- Listener = setlistener("/systems/apu/rpm", func() {
- if (getprop("/systems/apu/rpm") == 0) {
- extinguisherBottles.vector[4].discharge();
- removelistener(Listener);
- }
- }, 0, 0);
+ systems.apu_stop();
+ extinguisherBottles.vector[4].discharge();
} else {
extinguisherBottles.vector[4].discharge();
}
@@ -315,13 +321,14 @@ var detectorLoop = {
type: 0,
temperature: "",
elecProp: "",
- new: func(sys, type, temperature, elecProp) {
+ fireProp: "",
+ new: func(sys, type, temperature, elecProp, fireProp) {
var dL = {parents:[detectorLoop]};
dL.sys = sys;
dL.type = type;
dL.temperature = temperature;
dL.elecProp = props.globals.getNode(elecProp, 1);
-
+ dL.fireProp = props.globals.getNode(fireProp, 1);
return dL;
},
updateTemp: func(system, typeLoop) {
@@ -331,7 +338,7 @@ var detectorLoop = {
if (typeLoop == 1) { index += 1 }
- if (propsNasFire.vector[index].getValue() > 250 and me.elecProp.getValue() >= 25) {
+ if ((propsNasFire.vector[index].getValue() > 250 and me.fireProp.getBoolValue()) and me.elecProp.getValue() >= 25) {
me.sendSignal(system, typeLoop);
} elsif (me.elecProp.getValue() < 25) {
engFireDetectorUnits.vector[system].noElec(typeLoop);
@@ -366,7 +373,7 @@ var extinguisherBottle = {
return eB;
},
emptyBottle: func() {
- me.quantity -= 1;
+ me.quantity -= 5;
if (me.quantity > 0) {
settimer(func() {
me.emptyBottle()
@@ -472,13 +479,13 @@ var fireTimer3 = maketimer(0.25, checkTimeFire3);
fireTimer3.simulatedTime = 1;
# Create engine fire systems
-var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0), engFireDetectorUnit.new(1), engFireDetectorUnit.new(2) ]);
+var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/engine-left-fire"), engFireDetectorUnit.new(1, "/systems/failures/engine-right-fire"), engFireDetectorUnit.new(2, "/systems/failures/apu-fire") ]);
# Create detector loops
var detectorLoops = std.Vector.new([
-detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc2"),
-detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc2"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess"),
-detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat")
+detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc2", "/systems/failures/engine-left-fire"),
+detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc2", "/systems/failures/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-right-fire"),
+detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat", "/systems/failures/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat", "/systems/failures/apu-fire")
]);
# Create extinguisher bottles
@@ -510,57 +517,66 @@ var createFireBottleListener = func(prop, fireBtnProp, index) {
setlistener("/controls/engines/engine[0]/fire-btn", func() {
if (getprop("/controls/engines/engine[0]/fire-btn") == 1) {
ecam.shutUpYou();
+ eng1AgentTimerMakeTimer.stop();
eng1AgentTimer.setValue(10);
- createAgentTimerListener(1);
+ eng1AgentTimerTime.setValue(elapsedTime.getValue() + 10);
+ eng1AgentTimerMakeTimer.start();
}
}, 0, 0);
-var createAgentTimerListener = func(agent) {
- var elapsedList = setlistener("/sim/time/elapsed-sec", func() {
- if (agent == 1) {
- if (eng1AgentTimer != 1) {
- eng1AgentTimer.setValue(eng1AgentTimer.getValue() - 1);
- } else {
- eng1AgentTimer.setValue(0);
- removelistener(elapsedList);
- removeListener(createAgentTimerListener);
- }
- } elsif (agent == 2) {
- if (eng2AgentTimer != 1) {
- eng2AgentTimer.setValue(eng2AgentTimer.getValue() - 1);
- } else {
- eng2AgentTimer.setValue(0);
- removelistener(elapsedList);
- removeListener(createAgentTimerListener);
- }
- } elsif (agent == 3) {
- if (apuAgentTimer != 1) {
- eng1AgentTimer.setValue(apuAgentTimer.getValue() - 1);
- } else {
- apuAgentTimer.setValue(0);
- removelistener(elapsedList);
- removeListener(createAgentTimerListener);
- }
- }
- }, 0, 0);
+eng1AgentTimerMakeTimerFunc = func() {
+ if (eng1AgentTimer.getValue() > 0) {
+ var eng1Time = eng1AgentTimerTime.getValue();
+ var etEng1 = elapsedTime.getValue();
+ var timeToSetEng1 = eng1Time - etEng1;
+ eng1AgentTimer.setValue(timeToSetEng1);
+ } else {
+ eng1AgentTimerMakeTimer.stop();
+ }
}
setlistener("/controls/engines/engine[1]/fire-btn", func() {
if (getprop("/controls/engines/engine[1]/fire-btn") == 1) {
ecam.shutUpYou();
+ eng2AgentTimerMakeTimer.stop();
eng2AgentTimer.setValue(10);
- createAgentTimerListener(2);
+ eng2AgentTimerTime.setValue(elapsedTime.getValue() + 10);
+ eng2AgentTimerMakeTimer.start();
}
}, 0, 0);
+eng2AgentTimerMakeTimerFunc = func() {
+ if (eng2AgentTimer.getValue() > 0) {
+ var eng2Time = eng2AgentTimerTime.getValue();
+ var etEng2 = elapsedTime.getValue();
+ var timeToSetEng2 = eng2Time - etEng2;
+ eng2AgentTimer.setValue(timeToSetEng2);
+ } else {
+ eng2AgentTimerMakeTimer.stop();
+ }
+}
+
setlistener("/controls/APU/fire-btn", func() {
if (getprop("/controls/APU/fire-btn") == 1) {
ecam.shutUpYou();
+ apuAgentTimerMakeTimer.stop();
apuAgentTimer.setValue(10);
- createAgentTimerListener(3);
+ apuAgentTimerTime.setValue(elapsedTime.getValue() + 11);
+ apuAgentTimerMakeTimer.start();
}
}, 0, 0);
+apuAgentTimerMakeTimerFunc = func() {
+ if (apuAgentTimer.getValue() > 0) {
+ var apuTime = apuAgentTimerTime.getValue();
+ var etApu = elapsedTime.getValue();
+ var timeToSetApu = apuTime - etApu;
+ apuAgentTimer.setValue(timeToSetApu);
+ } else {
+ apuAgentTimerMakeTimer.stop();
+ }
+}
+
setlistener("/controls/fire/test-btn-1", func() {
if (getprop("/systems/failures/engine-left-fire")) { return; }
@@ -622,4 +638,7 @@ var update_fire = func() {
updateUnits();
}
-var fire_timer = maketimer(0.2, update_fire);
\ No newline at end of file
+var fire_timer = maketimer(0.2, update_fire);
+var eng1AgentTimerMakeTimer = maketimer(0.1, eng1AgentTimerMakeTimerFunc);
+var eng2AgentTimerMakeTimer = maketimer(0.1, eng2AgentTimerMakeTimerFunc);
+var apuAgentTimerMakeTimer = maketimer(0.1, apuAgentTimerMakeTimerFunc);
\ No newline at end of file
diff --git a/Systems/a320-engine-fire.xml b/Systems/a320-engine-fire.xml
index 9f991d91..a0b48f61 100644
--- a/Systems/a320-engine-fire.xml
+++ b/Systems/a320-engine-fire.xml
@@ -12,7 +12,7 @@
/systems/failures/engine-left-fire
0 -5
- 1 20
+ 1 30
simulation/channel-dt
@@ -35,7 +35,7 @@
/systems/failures/engine-right-fire
0 -5
- 1 20
+ 1 30
simulation/channel-dt
@@ -58,7 +58,7 @@
/systems/failures/apu-fire
0 -5
- 1 20
+ 1 45
simulation/channel-dt