Closes 443
When the events STAGE_SEPARATION and EJECTION_CHARGE are both triggered by BURNOUT, both events occur simultaneously and either can be inserted in EventQueue first. If STAGE_SEPARATION is inserted first, the filter in BasicEventSimulationEngine.java ignoring events from components that are no longer attached to the rocket drops ignores EJECTION_CHARGE. If second stage IGNITION is triggered by EJECTION_CHARGE it is filtered out, and second stage IGNITION fails to happen. This can be seen in the following snippet of a log file: 10592 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4] 10592 DEBUG [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - detected Motor Burnout for motor B4@ 1.03 on stage 1: Stage 10592 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null] 10592 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=EJECTION_CHARGE,time=1.0311458852237796,source=Stage,data=B4], FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]] 10592 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null] 10592 INFO [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - ==>> @ 1.03115; from Branch: Sustainer ---- Branching: Stage ---- 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=EJECTION_CHARGE,time=1.0311458852237796,source=Stage,data=B4] 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]] 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Ignoring event from unattached componenent 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]] 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [] 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]] 10593 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Taking simulation step at t=1.0311458852237796 altitude 25.603323566419885 10593 TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Too small time step 0.0014030377018961126 (limiting factor 5), using 0.0025 instead. 10593 TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Thrust = 0.0 Note here that there was no IGNITION in the sustainer branch, and the Thrust is 0.0 at the end of the snippet. Moving the test for ignition events ahead of the filter assures the IGNITION is scheduled, as seen in this log file snippet: 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4] 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]] 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4] 8994 DEBUG [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - detected Motor Burnout for motor B4@ 1.03 on stage 1: Stage 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null] 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=EJECTION_CHARGE,time=1.0302951181945657,source=Stage,data=B4], FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]] 8994 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null] 8995 INFO [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - ==>> @ 1.03030; from Branch: Sustainer ---- Branching: Stage ---- 8995 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=EJECTION_CHARGE,time=1.0302951181945657,source=Stage,data=B4] 8995 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]] 8995 INFO [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Queueing Ignition Event for: Body tube/334ebb79 / A8 - Armed @: 1.0302951181945657 8995 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Ignoring event from unattached componenent 8995 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=IGNITION,time=1.0302951181945657,source=Body tube,data=A8] 8995 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]] 8996 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=IGNITION,time=1.0302951181945657,source=Body tube,data=A8] 8996 INFO [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Igniting motor: Body tube/334ebb79 / A8 - Armed @1.0302951181945657 8996 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue: FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]] 8996 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=BURNOUT,time=1.7602951181945656,source=Body tube,data=A8]] 8996 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]] 8996 TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Taking simulation step at t=1.0302951181945657 altitude 25.5788943164009 8996 TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Too small time step 0.0012514398786730699 (limiting factor 5), using 0.0025 instead. 8996 TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Thrust = 0.015609756097560644 Here, the IGNITION does take place, and Thrust is non-zero. Displaying a plot of the flight, and saving CSV files, shows a normal two-stage flight profile. This commit does two things: (1) adds a little more logging, in particular logging what event has been obtained from EventQueue and logging when that event is ignored. (2) moves the motor ignition events test ahead of the filter, as described above.
This commit is contained in:
parent
1448cde5aa
commit
7d4c73f32b
@ -251,25 +251,8 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
|
||||
log.trace("HandleEvents: current branch = " + currentStatus.getFlightData().getBranchName());
|
||||
for (event = nextEvent(); event != null; event = nextEvent()) {
|
||||
log.trace("EventQueue = " + currentStatus.getEventQueue().toString());
|
||||
|
||||
// Ignore events for components that are no longer attached to the rocket
|
||||
if (event.getSource() != null && event.getSource().getParent() != null &&
|
||||
!currentStatus.getConfiguration().isComponentActive(event.getSource())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Call simulation listeners, allow aborting event handling
|
||||
if (!SimulationListenerHelper.fireHandleFlightEvent(currentStatus, event)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (event.getType() == FlightEvent.Type.RECOVERY_DEVICE_DEPLOYMENT) {
|
||||
RecoveryDevice device = (RecoveryDevice) event.getSource();
|
||||
if (!SimulationListenerHelper.fireRecoveryDeviceDeployment(currentStatus, device)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
log.trace("Obtained event from queue: " + event.toString());
|
||||
log.trace("Remaining EventQueue = " + currentStatus.getEventQueue().toString());
|
||||
|
||||
// Check for motor ignition events, add ignition events to queue
|
||||
for (MotorClusterState state : currentStatus.getActiveMotors() ){
|
||||
@ -291,6 +274,25 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
}
|
||||
}
|
||||
|
||||
// Ignore events for components that are no longer attached to the rocket
|
||||
if (event.getSource() != null && event.getSource().getParent() != null &&
|
||||
!currentStatus.getConfiguration().isComponentActive(event.getSource())) {
|
||||
log.trace("Ignoring event from unattached componenent");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Call simulation listeners, allow aborting event handling
|
||||
if (!SimulationListenerHelper.fireHandleFlightEvent(currentStatus, event)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (event.getType() == FlightEvent.Type.RECOVERY_DEVICE_DEPLOYMENT) {
|
||||
RecoveryDevice device = (RecoveryDevice) event.getSource();
|
||||
if (!SimulationListenerHelper.fireRecoveryDeviceDeployment(currentStatus, device)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check for stage separation event
|
||||
for (AxialStage stage : currentStatus.getConfiguration().getActiveStages()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user