@@ -1084,53 +1084,8 @@ public override void Update()
10841084
10851085 SetPenaltyApplicationDisplay ( IsBrakeEmergency ( ) || IsBrakeFullService ( ) ) ;
10861086
1087- // Update monitoring status
1088- if ( SpeedMpS ( ) > CurrentSpeedLimitMpS )
1089- {
1090- if ( OverspeedMonitor != null && ( OverspeedMonitor . AppliesEmergencyBrake || OverspeedMonitor . AppliesFullBrake ) )
1091- Status = MonitoringStatus . Intervention ;
1092- else
1093- Status = MonitoringStatus . Warning ;
1094- }
1095- else if ( NextSpeedLimitMpS < CurrentSpeedLimitMpS && SpeedMpS ( ) > NextSpeedLimitMpS )
1096- {
1097- if ( Deceleration ( SpeedMpS ( ) , NextSpeedLimitMpS , NextSignalDistanceM ( 0 ) ) > 0.7f )
1098- Status = MonitoringStatus . Overspeed ;
1099- else
1100- Status = MonitoringStatus . Indication ;
1101- }
1102- else
1103- Status = MonitoringStatus . Normal ;
1104- SetMonitoringStatus ( Status ) ;
1105-
1106- // Provide basic functionality for ETCS DMI planning area
1107- float maxDistanceAheadM = 0 ;
1108- ETCSStatus . SpeedTargets . Clear ( ) ;
1109- ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( 0 , CurrentSpeedLimitMpS ) ) ;
1110- for ( int i = 0 ; i < 5 ; i ++ )
1111- {
1112- maxDistanceAheadM = NextSignalDistanceM ( i ) ;
1113- if ( NextSignalAspect ( i ) == Aspect . Stop || NextSignalAspect ( i ) == Aspect . None ) break ;
1114- float speedLimMpS = NextSignalSpeedLimitMpS ( i ) ;
1115- if ( speedLimMpS >= 0 ) ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( maxDistanceAheadM , speedLimMpS ) ) ;
1116- }
1117- float prevDist = 0 ;
1118- float prevSpeed = 0 ;
1119- for ( int i = 0 ; i < 10 ; i ++ )
1120- {
1121- float distanceM = NextPostDistanceM ( i ) ;
1122- if ( distanceM >= maxDistanceAheadM ) break ;
1123- float speed = NextPostSpeedLimitMpS ( i ) ;
1124- if ( speed == prevSpeed || distanceM - prevDist < 10 ) continue ;
1125- ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( distanceM , speed ) ) ;
1126- prevDist = distanceM ;
1127- prevSpeed = speed ;
1128- }
1129- ETCSStatus . SpeedTargets . Sort ( ( x , y ) => x . DistanceToTrainM . CompareTo ( y . DistanceToTrainM ) ) ;
1130- ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( maxDistanceAheadM , 0 ) ) ;
1131- ETCSStatus . GradientProfile . Clear ( ) ;
1132- ETCSStatus . GradientProfile . Add ( new GradientProfileElement ( 0 , ( int ) ( CurrentGradientPercent ( ) * 10 ) ) ) ;
1133- ETCSStatus . GradientProfile . Add ( new GradientProfileElement ( maxDistanceAheadM , 0 ) ) ; // End of profile
1087+ UpdateMonitoringStatus ( ) ;
1088+ UpdateETCSPlanning ( ) ;
11341089 }
11351090 }
11361091
@@ -1149,6 +1104,59 @@ public void UpdateInputs()
11491104 SetNextSpeedLimitMpS ( NextSpeedLimitMpS ) ;
11501105 }
11511106
1107+ private void UpdateMonitoringStatus ( )
1108+ {
1109+ if ( SpeedMpS ( ) > CurrentSpeedLimitMpS )
1110+ {
1111+ if ( OverspeedMonitor != null && ( OverspeedMonitor . AppliesEmergencyBrake || OverspeedMonitor . AppliesFullBrake ) )
1112+ Status = MonitoringStatus . Intervention ;
1113+ else
1114+ Status = MonitoringStatus . Warning ;
1115+ }
1116+ else if ( NextSpeedLimitMpS < CurrentSpeedLimitMpS && SpeedMpS ( ) > NextSpeedLimitMpS )
1117+ {
1118+ if ( Deceleration ( SpeedMpS ( ) , NextSpeedLimitMpS , NextSignalDistanceM ( 0 ) ) > 0.7f )
1119+ Status = MonitoringStatus . Overspeed ;
1120+ else
1121+ Status = MonitoringStatus . Indication ;
1122+ }
1123+ else
1124+ Status = MonitoringStatus . Normal ;
1125+ SetMonitoringStatus ( Status ) ;
1126+ }
1127+
1128+ // Provide basic functionality for ETCS DMI planning area
1129+ private void UpdateETCSPlanning ( )
1130+ {
1131+ float maxDistanceAheadM = 0 ;
1132+ ETCSStatus . SpeedTargets . Clear ( ) ;
1133+ ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( 0 , CurrentSpeedLimitMpS ) ) ;
1134+ for ( int i = 0 ; i < 5 ; i ++ )
1135+ {
1136+ maxDistanceAheadM = NextSignalDistanceM ( i ) ;
1137+ if ( NextSignalAspect ( i ) == Aspect . Stop || NextSignalAspect ( i ) == Aspect . None ) break ;
1138+ float speedLimMpS = NextSignalSpeedLimitMpS ( i ) ;
1139+ if ( speedLimMpS >= 0 ) ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( maxDistanceAheadM , speedLimMpS ) ) ;
1140+ }
1141+ float prevDist = 0 ;
1142+ float prevSpeed = 0 ;
1143+ for ( int i = 0 ; i < 10 ; i ++ )
1144+ {
1145+ float distanceM = NextPostDistanceM ( i ) ;
1146+ if ( distanceM >= maxDistanceAheadM ) break ;
1147+ float speed = NextPostSpeedLimitMpS ( i ) ;
1148+ if ( speed == prevSpeed || distanceM - prevDist < 10 ) continue ;
1149+ ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( distanceM , speed ) ) ;
1150+ prevDist = distanceM ;
1151+ prevSpeed = speed ;
1152+ }
1153+ ETCSStatus . SpeedTargets . Sort ( ( x , y ) => x . DistanceToTrainM . CompareTo ( y . DistanceToTrainM ) ) ;
1154+ ETCSStatus . SpeedTargets . Add ( new PlanningTarget ( maxDistanceAheadM , 0 ) ) ;
1155+ ETCSStatus . GradientProfile . Clear ( ) ;
1156+ ETCSStatus . GradientProfile . Add ( new GradientProfileElement ( 0 , ( int ) ( CurrentGradientPercent ( ) * 10 ) ) ) ;
1157+ ETCSStatus . GradientProfile . Add ( new GradientProfileElement ( maxDistanceAheadM , 0 ) ) ; // End of profile
1158+ }
1159+
11521160 public override void HandleEvent ( TCSEvent evt , string message )
11531161 {
11541162 switch ( evt )
0 commit comments