【指示灯逻辑】
Signed-off-by: weizhihong <weizhihong@joylink.club>
This commit is contained in:
parent
25413f0f58
commit
3d59d32db7
@ -9,7 +9,6 @@ import club.joylink.rtss.simulation.cbtc.CI.device.CiRouteService;
|
|||||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Button;
|
import club.joylink.rtss.simulation.cbtc.data.map.Button;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Indicator;
|
import club.joylink.rtss.simulation.cbtc.data.map.Indicator;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Route;
|
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
|
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
|
||||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
||||||
@ -100,48 +99,25 @@ public class AssistService {
|
|||||||
Indicator receiveIndicator = getStationIndicatorByType(curStation, labelEnum, IndicatorTypeEnum.RECEIVE);
|
Indicator receiveIndicator = getStationIndicatorByType(curStation, labelEnum, IndicatorTypeEnum.RECEIVE);
|
||||||
// 获取发车指示灯
|
// 获取发车指示灯
|
||||||
Indicator deliverIndicator = getStationIndicatorByType(curStation, labelEnum, IndicatorTypeEnum.DELIVER);
|
Indicator deliverIndicator = getStationIndicatorByType(curStation, labelEnum, IndicatorTypeEnum.DELIVER);
|
||||||
if (receiveIndicator == null || deliverIndicator == null) {
|
// 如果都没有亮
|
||||||
return;
|
if (deliverIndicator != null && receiveIndicator != null && !deliverIndicator.isOn() && !receiveIndicator.isOn()) {
|
||||||
}
|
if (DirectionLabelEnum.X.equals(labelEnum) || DirectionLabelEnum.S.equals(labelEnum)) {
|
||||||
// 接车进路
|
receiveIndicator.setOn(true);
|
||||||
Route receiveRoute = receiveIndicator.getRoute();
|
|
||||||
// 发车进路
|
|
||||||
Route deliverRoute = deliverIndicator.getRoute();
|
|
||||||
IndicatorStatusEnum receiveStatus;
|
|
||||||
IndicatorStatusEnum deliverStatus;
|
|
||||||
// X、S 优先判断发车灯
|
|
||||||
if (DirectionLabelEnum.X.equals(labelEnum) || DirectionLabelEnum.S.equals(labelEnum)) {
|
|
||||||
// 当发车进路办理时,必须亮起发车灯
|
|
||||||
if (deliverRoute.isLock()) {
|
|
||||||
deliverIndicator.setOn(true);
|
|
||||||
receiveIndicator.setOn(false);
|
|
||||||
deliverStatus = IndicatorStatusEnum.R;
|
|
||||||
receiveStatus = IndicatorStatusEnum.No;
|
|
||||||
} else {
|
} else {
|
||||||
// 发车灯自身亮、并且发车进路并没锁闭、接车进路也没办理,说明刚完成改方操作
|
deliverIndicator.setOn(true);
|
||||||
if (deliverIndicator.isOn() && !deliverRoute.isLock() && !receiveRoute.isLock()) {
|
|
||||||
deliverIndicator.setOn(true);
|
|
||||||
receiveIndicator.setOn(false);
|
|
||||||
deliverStatus = IndicatorStatusEnum.G;
|
|
||||||
receiveStatus = IndicatorStatusEnum.No;
|
|
||||||
} else { // 其他操作均已接车灯为主
|
|
||||||
deliverIndicator.setOn(false);
|
|
||||||
receiveIndicator.setOn(true);
|
|
||||||
deliverStatus = IndicatorStatusEnum.No;
|
|
||||||
receiveStatus = IndicatorStatusEnum.Y;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// 如果接车灯不亮就发车灯亮
|
|
||||||
receiveIndicator.setOn(receiveRoute.isLock());
|
|
||||||
deliverIndicator.setOn(!receiveRoute.isLock());
|
|
||||||
deliverStatus = deliverIndicator.isOn() ? IndicatorStatusEnum.G : IndicatorStatusEnum.No;
|
|
||||||
receiveStatus = receiveIndicator.isOn() ? IndicatorStatusEnum.Y : IndicatorStatusEnum.No;
|
|
||||||
}
|
}
|
||||||
receiveIndicator.setAspect(receiveStatus);
|
IndicatorStatusEnum receiveStatus = getRDIndicatorStatusEnum(receiveIndicator, deliverIndicator);
|
||||||
deliverIndicator.setAspect(deliverStatus);
|
IndicatorStatusEnum deliverStatus = getRDIndicatorStatusEnum(deliverIndicator, receiveIndicator);
|
||||||
|
if (receiveIndicator != null) {
|
||||||
|
receiveIndicator.setAspect(receiveStatus);
|
||||||
|
}
|
||||||
|
if (deliverIndicator != null) {
|
||||||
|
deliverIndicator.setAspect(deliverStatus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 改方按钮按下校验
|
* 改方按钮按下校验
|
||||||
*/
|
*/
|
||||||
@ -162,6 +138,11 @@ public class AssistService {
|
|||||||
if (IndicatorStatusEnum.R.equals(sectionIndicator.getAspect())) {
|
if (IndicatorStatusEnum.R.equals(sectionIndicator.getAspect())) {
|
||||||
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:区段非空闲");
|
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:区段非空闲");
|
||||||
}
|
}
|
||||||
|
// 判断接车灯进路是否办理
|
||||||
|
Indicator receiveIndicator = getStationIndicatorByType(button.getStation(), button.getLabel(), IndicatorTypeEnum.RECEIVE);
|
||||||
|
if (receiveIndicator.getRoute().isLock()) {
|
||||||
|
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:进路冲突");
|
||||||
|
}
|
||||||
// 获取靠停列车
|
// 获取靠停列车
|
||||||
VirtualRealityTrain train = getSandStopTrain(simulation, button.getStand().getSection().getCode());
|
VirtualRealityTrain train = getSandStopTrain(simulation, button.getStand().getSection().getCode());
|
||||||
if (train == null || !train.isStop()) {
|
if (train == null || !train.isStop()) {
|
||||||
@ -283,4 +264,28 @@ public class AssistService {
|
|||||||
}
|
}
|
||||||
return train;
|
return train;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取接发车指示灯状态
|
||||||
|
*
|
||||||
|
* @param indicator 指示灯
|
||||||
|
* @param mutexIndicator 同组指示灯,接-发
|
||||||
|
* @return 点灯状态
|
||||||
|
*/
|
||||||
|
private IndicatorStatusEnum getRDIndicatorStatusEnum(Indicator indicator, Indicator mutexIndicator) {
|
||||||
|
if (indicator == null) {
|
||||||
|
return IndicatorStatusEnum.No;
|
||||||
|
}
|
||||||
|
boolean isLock = indicator.getRoute() != null && indicator.getRoute().isLock();
|
||||||
|
if (isLock) {
|
||||||
|
indicator.setOn(true);
|
||||||
|
if (mutexIndicator != null) {
|
||||||
|
mutexIndicator.setOn(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IndicatorStatusEnum statusEnum = indicator.isOn() ?
|
||||||
|
(isLock ? IndicatorStatusEnum.R : indicator.getDefaultStatus())
|
||||||
|
: IndicatorStatusEnum.No;
|
||||||
|
return statusEnum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ public class Indicator extends MapNamedElement {
|
|||||||
|
|
||||||
public Indicator(String code, String name) {
|
public Indicator(String code, String name) {
|
||||||
super(code, name, DeviceType.INDICATOR);
|
super(code, name, DeviceType.INDICATOR);
|
||||||
on = Boolean.FALSE;
|
on = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Indicator(String code, String name, DeviceType deviceType) {
|
protected Indicator(String code, String name, DeviceType deviceType) {
|
||||||
@ -66,7 +66,7 @@ public class Indicator extends MapNamedElement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
on = Boolean.FALSE;
|
on = false;
|
||||||
aspect = getDefaultStatus();
|
aspect = getDefaultStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,10 +77,10 @@ public class Indicator extends MapNamedElement {
|
|||||||
*/
|
*/
|
||||||
public IndicatorStatusEnum getDefaultStatus() {
|
public IndicatorStatusEnum getDefaultStatus() {
|
||||||
// 接
|
// 接
|
||||||
if ((DirectionLabelEnum.S.equals(label) || DirectionLabelEnum.X.equals(label)) && IndicatorTypeEnum.RECEIVE.equals(type)) {
|
if (IndicatorTypeEnum.RECEIVE.equals(type)) {
|
||||||
return IndicatorStatusEnum.Y;
|
return IndicatorStatusEnum.Y;
|
||||||
// 发
|
// 发
|
||||||
} else if ((DirectionLabelEnum.XF.equals(label) || DirectionLabelEnum.SF.equals(label)) && IndicatorTypeEnum.DELIVER.equals(type)) {
|
} else if (IndicatorTypeEnum.DELIVER.equals(type)) {
|
||||||
return IndicatorStatusEnum.G;
|
return IndicatorStatusEnum.G;
|
||||||
} else {
|
} else {
|
||||||
return IndicatorStatusEnum.No;
|
return IndicatorStatusEnum.No;
|
||||||
|
Loading…
Reference in New Issue
Block a user