列车运行级别升级需ma的atp防护速度为正;计轴故障区段不会再显示通信车占用

This commit is contained in:
joylink_zhangsai 2021-09-28 18:14:28 +08:00
parent a345f73528
commit 8f43e51dba
4 changed files with 19 additions and 11 deletions

View File

@ -94,7 +94,7 @@ public class AtpSectionService {
if (parent != null) { if (parent != null) {
axle = parent; axle = parent;
} }
if (axle.isAxleCounter() && !axle.isNctOccupied()) { if (axle.isAxleCounter() && (!axle.isNctOccupied() || Section.AxleFault.FAULT.equals(axle.getFault()))) {
removes.add(atpSection); removes.add(atpSection);
continue; continue;
} }

View File

@ -21,7 +21,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* ATS追踪的列车信息 * ATS追踪的列车信息
@ -382,7 +381,7 @@ public class TrainInfo extends MapElement {
this.communicable = train.isCommunicable(); this.communicable = train.isCommunicable();
if (headPosition.getSection().isSwitchTrack()) { if (headPosition.getSection().isSwitchTrack()) {
this.section = headPosition.getSection().getParent().getCode(); this.section = headPosition.getSection().getParent().getCode();
} else if (this.isCommunicable()) { } else if (train.isCBTC()) {
this.section = headPosition.getLogicSection().getCode(); this.section = headPosition.getLogicSection().getCode();
} else { } else {
this.section = headPosition.getSection().getCode(); this.section = headPosition.getSection().getCode();

View File

@ -85,13 +85,7 @@ public class ATPLogicLoop {
atpService.updateRunLevel(train, RunLevel.IL, preselectionMode); atpService.updateRunLevel(train, RunLevel.IL, preselectionMode);
atpService.triggerSignalEB(train); atpService.triggerSignalEB(train);
} else if (!train.isCBTC() && !train.isCbtcMaMiss() && defaultRunLevel.equals(RunLevel.CBTC)) { } else if (!train.isCBTC() && !train.isCbtcMaMiss() && defaultRunLevel.equals(RunLevel.CBTC)) {
boolean headSectionAxleFault = Section.AxleFault.FAULT atpService.updateRunLevel(train, RunLevel.CBTC, preselectionMode);
.equals(train.getHeadPosition().getSection().getFault()); //车头区段计轴故障
boolean tailSectionAxleFault = Section.AxleFault.FAULT
.equals(train.calculateTailPosition().getSection().getFault()); //车尾区段计轴故障
if (!headSectionAxleFault && !tailSectionAxleFault) {
atpService.updateRunLevel(train, RunLevel.CBTC, preselectionMode);
}
} }
} }
} }

View File

@ -1,6 +1,7 @@
package club.joylink.rtss.simulation.cbtc.onboard.ATP; package club.joylink.rtss.simulation.cbtc.onboard.ATP;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum; import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.simulation.cbtc.ATP.ground.MaService;
import club.joylink.rtss.simulation.cbtc.CI.CiApiService; import club.joylink.rtss.simulation.cbtc.CI.CiApiService;
import club.joylink.rtss.simulation.cbtc.CI.device.CiStandService; import club.joylink.rtss.simulation.cbtc.CI.device.CiStandService;
import club.joylink.rtss.simulation.cbtc.Simulation; import club.joylink.rtss.simulation.cbtc.Simulation;
@ -447,10 +448,23 @@ public class ATPService {
if (!preselectionMode.isMatchTheRunLevel(runLevel)) { if (!preselectionMode.isMatchTheRunLevel(runLevel)) {
return; return;
} }
train.setRunLevel(runLevel);
switch (runLevel) { switch (runLevel) {
case CBTC: case CBTC:
case ITC: case ITC:
MaService.Ma ma = train.getMa2();
if (ma == null)
return;
SpeedCurve ebTriggerCurve = ma.getEbTriggerCurve();
float ebTriggerRemain = ma.calculateDistanceOfEbTriggerEnd();
ma.setEbTriggerCurve(ebTriggerCurve);
float totalDistance = ebTriggerCurve.getTotalDistance();
if (totalDistance < ebTriggerRemain) {
ebTriggerRemain = totalDistance;
}
float atpSpeed = ebTriggerCurve.getSpeedOf(ebTriggerRemain);
if (atpSpeed <= 0) {
return;
}
updateDriveMode(train, train.isAtoOn() ? DriveMode.AM : DriveMode.CM, preselectionMode); updateDriveMode(train, train.isAtoOn() ? DriveMode.AM : DriveMode.CM, preselectionMode);
break; break;
case IL: case IL:
@ -459,6 +473,7 @@ public class ATPService {
default: default:
throw new IllegalStateException("Unexpected value: " + runLevel); throw new IllegalStateException("Unexpected value: " + runLevel);
} }
train.setRunLevel(runLevel);
} }
private void updateDriveMode(VirtualRealityTrain train, DriveMode driveMode) { private void updateDriveMode(VirtualRealityTrain train, DriveMode driveMode) {