This commit is contained in:
weizhihong 2023-11-27 16:47:40 +08:00
commit 28c74a75cd

View File

@ -487,14 +487,15 @@ public class MaService {
if (route != null) { if (route != null) {
if (this.isSwitchFaultRoute(route, section)) { if (this.isSwitchFaultRoute(route, section)) {
// 道岔故障进路直接构建返回 // 道岔故障进路直接构建返回
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Fault_Route)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Fault_Route), train);
} }
// 反向锁闭区段 // 反向锁闭区段
if (front && right != route.getStart().isRight()) { // 列车方向和区段进路方向相反 if (front && right != route.getStart().isRight()) { // 列车方向和区段进路方向相反
Signal aheadSignal = section.getSignalOf(right); Signal aheadSignal = section.getSignalOf(right);
if (aheadSignal == null || aheadSignal.getLockedRoute() == null || if (aheadSignal == null || aheadSignal.getLockedRoute() == null ||
!aheadSignal.getLockedRoute().isOpenMain()) { !aheadSignal.getLockedRoute().isOpenMain()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Reverse_Lock_Section)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Reverse_Lock_Section),
train);
} }
} }
} else if (front) { } else if (front) {
@ -503,21 +504,21 @@ public class MaService {
Signal aheadSignal = section.getSignalOf(right); Signal aheadSignal = section.getSignalOf(right);
if (aheadSignal == null || aheadSignal.getLockedRoute() == null || if (aheadSignal == null || aheadSignal.getLockedRoute() == null ||
!aheadSignal.getLockedRoute().isOpenMain()) { !aheadSignal.getLockedRoute().isOpenMain()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.UnLock_Section)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.UnLock_Section), train);
} }
} }
} }
if (section.isNoStatus()) { if (section.isNoStatus()) {
// 联锁故障 // 联锁故障
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.No_Status_Section)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.No_Status_Section), train);
} }
if (section.isClosed()) { if (section.isClosed()) {
// 关闭的区段 // 关闭的区段
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Closed_Section)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Closed_Section), train);
} }
if (this.isAbnormalStand(section)) { if (this.isAbnormalStand(section)) {
// 屏蔽门不安全/紧急停车站台 // 屏蔽门不安全/紧急停车站台
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Stand)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Stand), train);
} }
Section next = section.getNextRunningSectionOf(right); Section next = section.getNextRunningSectionOf(right);
if (front) { // 车头前方 if (front) { // 车头前方
@ -525,23 +526,24 @@ public class MaService {
if (signal != null && !signal.isMainAspect()) { if (signal != null && !signal.isMainAspect()) {
// 限制信号机 // 限制信号机
if (signal.isOverlapLock()) { if (signal.isOverlapLock()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, signal, MaType.Limit_Signal_With_Overlap)); ma = this.checkAndUpdateMa(ma, new Ma(train, signal, MaType.Limit_Signal_With_Overlap),
train);
} else { } else {
ma = this.checkAndUpdateMa(ma, ma = this.checkAndUpdateMa(ma,
new Ma(train, signal, MaType.Limit_Signal_Without_Overlap)); new Ma(train, signal, MaType.Limit_Signal_Without_Overlap), train);
} }
} }
if (section.hasNctOccupy() && !section.isInvalid()) { if (section.hasNctOccupy() && !section.isInvalid()) {
// 计轴占用区段 // 计轴占用区段
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Axle_Occupy_Section)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.Axle_Occupy_Section), train);
} else if (section.isOnlyCtcOccupy()) { } else if (section.isOnlyCtcOccupy()) {
// 前方列车 // 前方列车
Ma ma2 = this.queryFrontTrain(train, section, trainMap); Ma ma2 = this.queryFrontTrain(train, section, trainMap);
ma = this.checkAndUpdateMa(ma, ma2); ma = this.checkAndUpdateMa(ma, ma2, train);
} }
if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(section.getFault()) if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(section.getFault())
&& section.isCtOccupied()) { && section.isCtOccupied()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.CTC_Occupied_Fault)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.CTC_Occupied_Fault), train);
} else { } else {
List<Section> logicList = section.getLogicList(); List<Section> logicList = section.getLogicList();
if (!CollectionUtils.isEmpty(logicList)) { if (!CollectionUtils.isEmpty(logicList)) {
@ -549,7 +551,8 @@ public class MaService {
for (Section logic : logicList) { for (Section logic : logicList) {
if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(logic.getFault()) if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(logic.getFault())
&& logic.isCtOccupied()) { && logic.isCtOccupied()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, logic, MaType.CTC_Occupied_Fault)); ma = this.checkAndUpdateMa(ma, new Ma(train, logic, MaType.CTC_Occupied_Fault),
train);
} }
} }
} else { } else {
@ -557,7 +560,8 @@ public class MaService {
Section logic = logicList.get(k); Section logic = logicList.get(k);
if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(logic.getFault()) if (Section.AxleFault.CBTC_OCCUPIED_FAULT.equals(logic.getFault())
&& logic.isCtOccupied()) { && logic.isCtOccupied()) {
ma = this.checkAndUpdateMa(ma, new Ma(train, logic, MaType.CTC_Occupied_Fault)); ma = this.checkAndUpdateMa(ma, new Ma(train, logic, MaType.CTC_Occupied_Fault),
train);
} }
} }
} }
@ -568,10 +572,10 @@ public class MaService {
(headPosition.getSection().equals(section) || (headPosition.getSection().equals(section) ||
!headPosition.isAheadOf(new SectionPosition(section, right ? section.getLen() : 0), !headPosition.isAheadOf(new SectionPosition(section, right ? section.getLen() : 0),
right))) { right))) {
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.ZC_Boundary)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.ZC_Boundary), train);
} }
if (next == null || (!next.anyZcWorking())) { if (next == null || (!next.anyZcWorking())) {
ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.ZC_Boundary)); ma = this.checkAndUpdateMa(ma, new Ma(train, section, MaType.ZC_Boundary), train);
} }
} }
section = next; section = next;
@ -658,13 +662,18 @@ public class MaService {
return switchFault; return switchFault;
} }
private Ma checkAndUpdateMa(Ma ma, Ma ma2) { private Ma checkAndUpdateMa(Ma ma, Ma ma2, VirtualRealityTrain train) {
if (ma == null) { if (ma == null) {
return ma2; return ma2;
} else if (ma2 != null) { } else if (ma2 != null) {
if (ma.distanceToEoa > ma2.distanceToEoa) { SpeedCurve maAto = SpeedCurve.calculateAtoStopCurveAndUpdate(train, ma);
SpeedCurve ma2Ato = SpeedCurve.calculateAtoStopCurveAndUpdate(train, ma2);
if (ma2Ato.getTotalDistance() < maAto.getTotalDistance()) {
return ma2; return ma2;
} }
// if (ma.distanceToEoa > ma2.distanceToEoa) {
// return ma2;
// }
} }
return ma; return ma;
} }
@ -683,7 +692,7 @@ public class MaService {
for (VirtualRealityTrain vrTrain : trainList) { for (VirtualRealityTrain vrTrain : trainList) {
Ma ma1 = new Ma(train, vrTrain, MaType.Front_Train); Ma ma1 = new Ma(train, vrTrain, MaType.Front_Train);
if (ma1.getDistanceToEoa() > 0) { if (ma1.getDistanceToEoa() > 0) {
ma = this.checkAndUpdateMa(ma, ma1); ma = this.checkAndUpdateMa(ma, ma1, train);
} }
} }
} }