修改列车升级逻辑

This commit is contained in:
joylink_zhangsai 2021-06-24 14:00:53 +08:00
parent 7a3bea2fee
commit 0cbac09abb
3 changed files with 37 additions and 35 deletions

View File

@ -80,6 +80,13 @@ public class Responder extends MapNamedElement {
// return false; // return false;
// } // }
/**
* 是否是可定位的信标
*/
public boolean isLocalizable() {
return this.isVB() || this.isFB();
}
public void exchangeData(VirtualRealityTrain train) { public void exchangeData(VirtualRealityTrain train) {
train.viaResponder(this); train.viaResponder(this);
} }

View File

@ -396,6 +396,11 @@ public class VirtualRealityTrain extends VirtualRealityDevice {
*/ */
private float controlLeaver; private float controlLeaver;
/**
* 有定位
*/
private boolean positioned = true;
public void setRunType(RunType runType) { public void setRunType(RunType runType) {
this.runType = runType; this.runType = runType;
switch (runType) { switch (runType) {
@ -494,6 +499,8 @@ public class VirtualRealityTrain extends VirtualRealityDevice {
this.runType = null; this.runType = null;
this.orderStop = false; this.orderStop = false;
this.needDepartureCommand = false; this.needDepartureCommand = false;
this.controlLeaver = 0;
this.positioned = true;
this.fault = null; this.fault = null;
} }
@ -705,9 +712,12 @@ public class VirtualRealityTrain extends VirtualRealityDevice {
// this.setSignalEB(false); // this.setSignalEB(false);
this.setAtoOn(false); this.setAtoOn(false);
this.setDriveMode(DriveMode.RM); this.setDriveMode(DriveMode.RM);
if (RunLevel.CBTC.equals(this.runLevel)) { this.positioned = false; //定位丢失
this.setCbtcMaMiss(); this.setCbtcMaMiss(); //通信断开
} this.lastTwoPassedResponders.clear();
// if (RunLevel.CBTC.equals(this.runLevel)) {
// this.setCbtcMaMiss();
// }
} }
public void useCMMode() { public void useCMMode() {
@ -1083,6 +1093,9 @@ public class VirtualRealityTrain extends VirtualRealityDevice {
} }
lastTwoPassedResponders.remove(responder); lastTwoPassedResponders.remove(responder);
lastTwoPassedResponders.offer(responder); lastTwoPassedResponders.offer(responder);
if (lastTwoPassedResponders.stream().allMatch(Responder::isLocalizable)) {
this.positioned = true;
}
} }
public void clearResponders() { public void clearResponders() {

View File

@ -12,7 +12,6 @@ import club.joylink.rtss.simulation.cbtc.data.support.SectionPosition;
import club.joylink.rtss.simulation.cbtc.data.support.TrainStopMessage; import club.joylink.rtss.simulation.cbtc.data.support.TrainStopMessage;
import club.joylink.rtss.simulation.cbtc.data.vr.StandParkedTrainActivity; import club.joylink.rtss.simulation.cbtc.data.vr.StandParkedTrainActivity;
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain; import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
import club.joylink.rtss.simulation.cbtc.event.SimulationATPAutoCancelEBEvent;
import club.joylink.rtss.simulation.cbtc.event.SimulationTrainIsAbout2ArriveEvent; import club.joylink.rtss.simulation.cbtc.event.SimulationTrainIsAbout2ArriveEvent;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember; import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.simulation.cbtc.onboard.ATO.service.ATOService; import club.joylink.rtss.simulation.cbtc.onboard.ATO.service.ATOService;
@ -68,45 +67,28 @@ public class ATPLogicLoop {
} }
/** /**
* 检查ma接收情况并改变列车运行级别 * 列车运行级别控制
*/ */
private void maCheckAndChangeRunLevel(Simulation simulation, VirtualRealityTrain train) { private void runLevelControl(Simulation simulation, VirtualRealityTrain train) {
RunLevel defaultRunLevel = simulation.getRepository().getConfig().getRunMode(); RunLevel defaultRunLevel = simulation.getRepository().getConfig().getRunMode();
if (train.isCbtcMaMiss()) { //cbtc级别ma丢失 //更新移动授权丢失时长
if (train.isCBTC()) { //并且列车处于CBTC级别 train.setCbtcMaMissDuration(train.getCbtcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE);
train.setItcMaMissDuration(train.getItcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE);
//判断并控制运行级别
if (!train.isPositioned()) { //列车定位丢失降级
if (train.isITC() || train.isCBTC()) { //并且是ITC/CBTC级别
train.setRunLevel(RunLevel.IL); train.setRunLevel(RunLevel.IL);
atpService.triggerSignalEB(train); atpService.triggerSignalEB(train);
train.setMa(null); train.setMa(null);
} }
} else { } else { //升级
train.setCbtcMaMissDuration(train.getCbtcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE); if (!train.isCbtcMaMiss() && defaultRunLevel.equals(RunLevel.CBTC)) {
if (train.isITC() && defaultRunLevel.equals(RunLevel.CBTC)) { //如果列车是ITC同时线路默认级别是CBTC
train.setCBTCMode(); train.setCBTCMode();
} } else if (!train.isItcMaMiss()) {
}
if (!train.isItcMaMiss()) {
train.setItcMaMissDuration(train.getItcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE);
if (!simulation.getRepository().hasResponder()) {
if (RunLevel.IL.equals(train.getRunLevel())) { //如果列车是IL级别
train.setITCMode(); train.setITCMode();
} }
} }
} //或许升级降级逻辑可以放在移动授权更新和定位状态设置的地方就不需要循环判断了
// if (!simulation.getRepository().hasResponder()) {
// //无应答器
// if (!train.isCbtcMaMiss()) {
// if (!train.isCBTC() && defaultRunLevel.equals(RunLevel.CBTC)) { //如果列车不是CBTC同时线路默认级别是CBTC
// train.setCBTCMode();
// }
// train.setCbtcMaMissDuration(train.getCbtcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE);
// }
// if (!train.isItcMaMiss()) { //itc级别ma未丢失
// if (RunLevel.IL.equals(train.getRunLevel())) { //如果列车是IL级别
// train.setITCMode();
// }
// train.setItcMaMissDuration(train.getItcMaMissDuration() + SimulationConstants.ATP_LOOP_RATE);
// }
// }
} }
private void driveLogicRun(Simulation simulation, VirtualRealityTrain train) { private void driveLogicRun(Simulation simulation, VirtualRealityTrain train) {
@ -122,7 +104,7 @@ public class ATPLogicLoop {
} }
private void onboardLogicRun2(Simulation simulation, VirtualRealityTrain train) { private void onboardLogicRun2(Simulation simulation, VirtualRealityTrain train) {
this.maCheckAndChangeRunLevel(simulation, train); this.runLevelControl(simulation, train);
boolean right = train.isRight(); boolean right = train.isRight();
SectionPosition headPosition = train.getHeadPosition(); SectionPosition headPosition = train.getHeadPosition();