修改越引导信号指令逻辑(忽略大铁的调车信号机)
This commit is contained in:
parent
9cbd1057d9
commit
8a52efacdf
@ -313,7 +313,7 @@ public class CommandBO {
|
||||
|
||||
List<Step> stepList = new ArrayList<>();
|
||||
VirtualRealityTrain train = (VirtualRealityTrain) targetMember.getDevice();
|
||||
stepList.add(buildDriveStep(train.calculateStepPosition4CrossTheGuideSignal()));
|
||||
stepList.add(buildDriveStep(calculateStepPosition4CrossTheGuideSignal(train)));
|
||||
stepList.add(buildCrossSignalStep(train.getHeadPosition().getSection().getSignalOf(train.isRight())));
|
||||
|
||||
return stepList;
|
||||
@ -322,16 +322,6 @@ public class CommandBO {
|
||||
@Override
|
||||
public Step execute(Simulation simulation, CommandBO command) {
|
||||
VirtualRealityTrain train = (VirtualRealityTrain) command.getTargetMember().getDevice();
|
||||
// Step crossSignalStep = command.getStepByType(Step.StepType.CROSS_SIGNAL).get(0);
|
||||
// Signal signal = crossSignalStep.getCrossSignal();
|
||||
// SectionPosition signalPosition = new SectionPosition(signal.getSection(), signal.getOffset());
|
||||
// if (train.getHeadPosition().isAheadOf(signalPosition, train.isRight())) { //如果已经越过了信号机
|
||||
// if (train.isAMMode()) {
|
||||
// command.getTargetMember().setCommand(null);
|
||||
// } else {
|
||||
// return getStep4ChangePreselectionMode(train, PreselectionMode.AM_C);
|
||||
// }
|
||||
// }
|
||||
if (!train.isRMMode() && !train.isNRMMode()) { //既不是RM也不是NRM,切换预选模式
|
||||
return getStep4ChangePreselectionMode(train, PreselectionMode.RM);
|
||||
}
|
||||
@ -889,5 +879,35 @@ public class CommandBO {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算越引导信号行驶的停车位置
|
||||
*/
|
||||
public SectionPosition calculateStepPosition4CrossTheGuideSignal(VirtualRealityTrain train) {
|
||||
boolean right = train.isRight();
|
||||
SectionPosition headPosition = train.getHeadPosition();
|
||||
Section section = headPosition.getSection();
|
||||
Signal trainHeadSignal = section.getSignalOf(right);
|
||||
if (trainHeadSignal == null || !trainHeadSignal.isGuideAspect()) {
|
||||
throw new SimulationException(SimulationExceptionType.Invalid_Operation, "指令要求:列车车头所在区段有同向信号机并且开放引导信号");
|
||||
}
|
||||
|
||||
SectionPosition sectionPosition = null;
|
||||
for (int i = 0; i < 30; i++) {
|
||||
section = section.getNextRunningSectionOf(right);
|
||||
Signal signal = section.getSignalOf(right);
|
||||
if (section.isStandTrack() || section.isTurnBackTrack()) {
|
||||
sectionPosition = new SectionPosition(section, section.getStopPointByDirection(right));
|
||||
break;
|
||||
} else if (signal != null && !signal.isShunting() && !signal.isMainAspect()) { //同向信号机未正常开放
|
||||
sectionPosition = new SectionPosition(section, signal.getOffset());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sectionPosition == null) {
|
||||
throw new SimulationException(SimulationExceptionType.Invalid_Operation, "引导信号前方未找到停车位置");
|
||||
}
|
||||
return sectionPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -665,6 +665,13 @@ public class Signal extends DelayUnlockDevice {
|
||||
return SignalType.SHUNTING2.equals(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是调车信号机?
|
||||
*/
|
||||
public boolean isShunting() {
|
||||
return SignalType.SHUNTING.equals(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 引导信号延时关闭开始计时
|
||||
*/
|
||||
|
@ -891,34 +891,6 @@ public class VirtualRealityTrain extends VirtualRealityDevice {
|
||||
String.format("信号机[%s]前方未找到站台轨、折返轨或转换轨", signal.getName()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算越引导信号行驶的停车位置
|
||||
*/
|
||||
public SectionPosition calculateStepPosition4CrossTheGuideSignal() {
|
||||
boolean right = this.right;
|
||||
Section section = this.headPosition.getSection();
|
||||
Signal signal = section.getSignalOf(right);
|
||||
if (signal == null || !signal.isGuideAspect()) {
|
||||
throw new SimulationException(SimulationExceptionType.Invalid_Operation, "指令要求:列车车头所在区段有同向信号机并且开放引导信号");
|
||||
}
|
||||
|
||||
SectionPosition sectionPosition = null;
|
||||
for (int i = 0; i < 30; i++) {
|
||||
section = section.getNextRunningSectionOf(right);
|
||||
if (section.isStandTrack() || section.isTurnBackTrack()) {
|
||||
sectionPosition = new SectionPosition(section, section.getStopPointByDirection(right));
|
||||
break;
|
||||
} else if (section.getSignalOf(right) != null && !section.getSignalOf(right).isMainAspect()) { //同向信号机未正常开放
|
||||
sectionPosition = new SectionPosition(section, section.getSignalOf(right).getOffset());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sectionPosition == null) {
|
||||
throw new SimulationException(SimulationExceptionType.Invalid_Operation, "引导信号前方未找到停车位置");
|
||||
}
|
||||
return sectionPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算车头到下一个正常开放的信号机的距离(找2个区段)
|
||||
*/
|
||||
|
@ -233,12 +233,6 @@ public class RobotLogicLoop {
|
||||
switch (train.getDriveMode()) {
|
||||
case AM: //AM模式下不需要司机驾驶
|
||||
return;
|
||||
// TrainInfo trainInfo = repository.getSupervisedTrainByGroup(train.getGroupNumber());
|
||||
// if (trainInfo.isManualTrain()) {
|
||||
// train.setTarget(train.getRobotTargetPosition().getSection());
|
||||
// train.setRobotTargetPosition(null);
|
||||
// }
|
||||
// break;
|
||||
case CM:
|
||||
MaService.Ma ma = train.getMa2();
|
||||
if (ma != null) {
|
||||
|
Loading…
Reference in New Issue
Block a user