diff --git a/aman/sys/RecedingHorizonControl.py b/aman/sys/RecedingHorizonControl.py index 0906964..54d590e 100644 --- a/aman/sys/RecedingHorizonControl.py +++ b/aman/sys/RecedingHorizonControl.py @@ -72,6 +72,7 @@ class RecedingHorizonControl: plannedInbound.Report = inbound.Report plannedInbound.ReportTime = inbound.ReportTime plannedInbound.CurrentPosition = inbound.CurrentPosition + plannedInbound.RequestedRunway = inbound.RequestedRunway # ingore fixed updates if True == plannedInbound.FixedSequence or index <= self.FreezedIndex: plannedInbound.FixedSequence = True diff --git a/aman/sys/aco/RunwayManager.py b/aman/sys/aco/RunwayManager.py index a7a8afe..84fc3c6 100644 --- a/aman/sys/aco/RunwayManager.py +++ b/aman/sys/aco/RunwayManager.py @@ -118,10 +118,13 @@ class RunwayManager: def selectArrivalRunway(self, node : Node, earliestArrivalTime : datetime): availableRunways = self.Configuration.RunwayConstraints.ActiveArrivalRunways - if True == self.Configuration.RunwayConstraints.UseShallShouldMay: + if True == self.Configuration.RunwayConstraints.UseShallShouldMay and None == node.Inbound.RequestedRunway: availableRunways = self.executeShallShouldMayAssignment(node, earliestArrivalTime) - else: - availableRunways = self.Configuration.RunwayConstraints.ActiveArrivalRunways + elif None != node.Inbound.RequestedRunway: + for runway in availableRunways: + if node.Inbound.RequestedRunway == runway.Runway.Name: + availableRunways = [ runway ] + break if 0 == len(availableRunways): runway = self.Configuration.RunwayConstraints.ActiveArrivalRunways[0] diff --git a/aman/types/Inbound.py b/aman/types/Inbound.py index c1c0f28..6e8e355 100644 --- a/aman/types/Inbound.py +++ b/aman/types/Inbound.py @@ -15,6 +15,7 @@ class Inbound: self.CurrentPosition = report.position self.ReportTime = datetime.strptime(report.reportTime + '+0000', '%Y%m%d%H%M%S%z').replace(tzinfo = pytz.UTC) self.InitialArrivalTime = None + self.RequestedRunway = None self.PlannedArrivalTime = None self.PlannedRunway = None self.PlannedStar = None @@ -28,6 +29,10 @@ class Inbound: if 'L' == wtc or 'M' == wtc or 'H' == wtc or 'J' == wtc: self.WTC = wtc + # analyze the requested runway + if '' != report.requestedRunway: + self.RequestedRunway = report.requestedRunway + # search performance data -> fallback to A320 if self.Report.aircraft.type in performanceData.Aircrafts: self.PerformanceData = performanceData.Aircrafts[self.Report.aircraft.type]