From f4f3f677f923b41816cb9484fb6c17ca887fa1c7 Mon Sep 17 00:00:00 2001 From: joylink_zhangsai <1021828630@qq.com> Date: Thu, 9 Jun 2022 09:41:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=A2=E6=B2=B3=E8=B4=A2=E7=BB=8FIBP?= =?UTF-8?q?=E7=9B=98=EF=BC=9B=E5=AE=9E=E4=BD=93IBP=E7=9B=98=E4=B8=8E?= =?UTF-8?q?=E8=99=9A=E6=8B=9FIBP=E7=9B=98=E4=BA=A4=E4=BA=92=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9=EF=BC=88zjd=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E4=BD=93IBP=E7=9B=98=E9=80=BB=E8=BE=91=E7=9B=B8=E5=BA=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/IVirtualRealityIbpService.java | 13 +- .../services/VirtualRealityIbpService.java | 109 ++++++++---- .../rtss/simulation/cbtc/data/map/Stand.java | 10 ++ .../cbtc/data/status/IbpStatus.java | 5 +- .../cbtc/data/vr/VirtualRealityIbp.java | 147 +++++++++++++--- .../modbustcp/hhcj/HhcjIbpServiceImpl.java | 166 +++++++++++++++++- .../modbustcp/richor/ZjdIbpServiceImpl.java | 111 +++++++----- .../client/project/hhcj/HhcjIbpConfigVO.java | 94 +++++++++- 8 files changed, 523 insertions(+), 132 deletions(-) diff --git a/src/main/java/club/joylink/rtss/services/IVirtualRealityIbpService.java b/src/main/java/club/joylink/rtss/services/IVirtualRealityIbpService.java index 41071406a..f3ae590bd 100644 --- a/src/main/java/club/joylink/rtss/services/IVirtualRealityIbpService.java +++ b/src/main/java/club/joylink/rtss/services/IVirtualRealityIbpService.java @@ -20,12 +20,17 @@ public interface IVirtualRealityIbpService { void pressTheButton(String group, String stationCode, String buttonCode); /** - * 更新IBP元素状态(按下和松开二合一) + * 按下或松开 */ - void updateElementStatus(Simulation simulation, VirtualRealityIbp ibp, - VirtualRealityIbp.IbpElement element, boolean pressed); + void pressOrRelease(Simulation simulation, VirtualRealityIbp ibp, + VirtualRealityIbp.IbpElement element, boolean pressed); - void updateElementStatus(Simulation simulation, VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean pressed); + void pressOrRelease(Simulation simulation, VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean pressed); + + /** + * 更新打开或关闭状态 + */ + void updateOnOrOff(VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean on); /** * 收集并发送IBP的状态数据 diff --git a/src/main/java/club/joylink/rtss/services/VirtualRealityIbpService.java b/src/main/java/club/joylink/rtss/services/VirtualRealityIbpService.java index 7460f656a..b5eff98fd 100644 --- a/src/main/java/club/joylink/rtss/services/VirtualRealityIbpService.java +++ b/src/main/java/club/joylink/rtss/services/VirtualRealityIbpService.java @@ -72,14 +72,14 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { private void pressTheButton(Simulation simulation, VirtualRealityIbp ibp, VirtualRealityIbp.IbpElement element) { boolean change = false; if (VirtualRealityIbp.Type.KEY.equals(element.getType())) { - element.setOn(!element.isOn()); + element.orderTo(!element.isOn()); return; } else if (VirtualRealityIbp.Type.BUTTON.equals(element.getType())) { VirtualRealityIbp.SquareButton button = (VirtualRealityIbp.SquareButton) element; if (!button.isOn()) change = true; button.setPressed(true); - element.setOn(true); + element.orderTo(true); } if (change) effective(simulation, ibp, element); @@ -93,8 +93,9 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { return; Station station = ibp.getStation(); MapConfig config = simulation.getRepository().getConfig(); - List stands = chooseStands(station, element, config); + List stands = chooseStands(station, element.getUp(), config); switch (element.getMean()) { + //------------------- 信号 ------------------- case KC: stands.forEach(stand -> ciApiService.ibpHoldTrain(simulation, stand.getCode())); break; @@ -103,38 +104,46 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { break; case JJTC: stands.forEach(stand -> ciApiService.standEC(simulation, stand)); - ibp.query(VirtualRealityIbp.Mean.ALARM, element.getUp()).forEach(alarm -> alarm.setOn(true)); + ibp.query(VirtualRealityIbp.Mean.ALARM, element.getUp()).orderToOn(); break; case QXJJTC: stands.forEach(stand -> ciApiService.cancelStandEC(simulation, stand)); break; case BJQC: - ibp.query(VirtualRealityIbp.Mean.ALARM, element.getUp()).forEach(ele -> ele.setOn(false)); + ibp.query(VirtualRealityIbp.Mean.ALARM, element.getUp()).orderToOff(); break; - case ALARM: + case SD: //试灯在IBP盘状态收集逻辑里生效 break; + //------------------- 屏蔽门 ------------------- case KM: { stands.forEach(stand -> ciApiService.openScreenDoor(simulation, stand.getCode(), CiStandService.PsdCommandSource.IBP)); break; } + case PSD_SMKM: //逻辑未知 + break; case GM: { stands.forEach(stand -> ciApiService.closeScreenDoor(simulation, stand.getCode(), CiStandService.PsdCommandSource.IBP)); break; } case XXYS: { - List czLights = ibp.query(VirtualRealityIbp.Mean.CZ_LIGHT, false); - czLights.forEach(light -> light.setOn(true)); + List czLights = ibp.query(VirtualRealityIbp.Mean.PSD_CZYX_LIGHT, false); + czLights.forEach(light -> light.orderTo(true)); break; } case SXYS: { - List czLights = ibp.query(VirtualRealityIbp.Mean.CZ_LIGHT, true); - czLights.forEach(light -> light.setOn(true)); + List czLights = ibp.query(VirtualRealityIbp.Mean.PSD_CZYX_LIGHT, true); + czLights.forEach(light -> light.orderTo(true)); break; } - case HSJC: { + case PSD_HSJC: { stands.forEach(stand -> stand.getPsd().getVirtualScreenDoor().setInterlockRelease(true)); break; } + case PSD_BJQC: + ibp.query(VirtualRealityIbp.Mean.PSD_ALARM, element.getUp()).orderToOff(); + break; + case PSD_SD: + break; case AXLE_RESET: { VirtualRealityIbp.SquareButton button = (VirtualRealityIbp.SquareButton) element; ciApiService.axleReset(simulation, button.getSectionCode()); @@ -149,20 +158,27 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { break; } case PRERESET_Z: - break; - case SD: - ibp.queryByType(VirtualRealityIbp.Type.LIGHT).forEach(light -> light.setOn(true)); + case kcLight: + case jjtcLight: + case ALARM: + case PSD_ALARM: + case gmLight: + case kmLight: + case PSD_CZYX_LIGHT: + case PSD_HSJC_LIGHT: + case PSD_SDCZ_LIGHT: + case PSD_GZBJ_LIGHT: break; default: throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception(String.format("不正确的按钮类型[%s]", element.getMean())); } } - private List chooseStands(Station station, VirtualRealityIbp.IbpElement element, MapConfig config) { - if (element.getUp() == null) { + private List chooseStands(Station station, Boolean up, MapConfig config) { + if (up == null) { return station.getAllNormalStands(); } - return station.getStandOf(config.isRight(element.getUp())); + return station.getStandOf(config.isRight(up)); } @Override @@ -178,7 +194,7 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(VirtualRealityIbp.Type.BUTTON.equals(element.getType()), "元素非按钮"); VirtualRealityIbp.SquareButton button = (VirtualRealityIbp.SquareButton) element; if (!VirtualRealityIbp.Mean.AXLE_PRE_RESET.equals(button.getMean())) { - button.setOn(false); + button.orderTo(false); } else { button.setEffective(false); } @@ -186,11 +202,12 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { /** * 更新IBP元素状态 + * * @param pressed true-按下;false-松开 */ @Override - public void updateElementStatus(Simulation simulation, VirtualRealityIbp ibp, - VirtualRealityIbp.IbpElement element, boolean pressed) { + public void pressOrRelease(Simulation simulation, VirtualRealityIbp ibp, + VirtualRealityIbp.IbpElement element, boolean pressed) { if (pressed) { pressTheButton(simulation, ibp, element); } else { @@ -199,7 +216,7 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { } @Override - public void updateElementStatus(Simulation simulation, VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean pressed) { + public void pressOrRelease(Simulation simulation, VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean pressed) { List elements = ibp.query(mean, up); if (pressed) { elements.forEach(element -> pressTheButton(simulation, ibp, element)); @@ -208,6 +225,12 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { } } + @Override + public void updateOnOrOff(VirtualRealityIbp ibp, VirtualRealityIbp.Mean mean, Boolean up, boolean on) { + List elements = ibp.query(mean, up); + elements.forEach(element -> element.setOn(on)); + } + @Override public void collectAndDispatcher(Simulation simulation) { SimulationDataRepository repository = simulation.getRepository(); @@ -282,26 +305,27 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { MapConfig config = repository.getConfig(); List sdList = vrIbp.queryByMean(VirtualRealityIbp.Mean.SD); - Set sdSignalCodes; //处于试灯状态的信号灯 + Set sdLightMeans; //处于试灯状态的元素的意义 if (!CollectionUtils.isEmpty(sdList)) { - sdSignalCodes = sdList.stream() + sdLightMeans = sdList.stream() .filter(VirtualRealityIbp.SquareButton::isPressed) - .flatMap(button -> button.getSignalCodes().stream()) + .flatMap(button -> button.getSdLightMeans().stream()) .collect(Collectors.toSet()); } else { - sdSignalCodes = new HashSet<>(); + sdLightMeans = new HashSet<>(); } - for (VirtualRealityIbp.IbpElement element : vrIbp.getElementList()) { - if (sdSignalCodes.contains(element.getCode())) { //如果是处于试灯状态的元素,直接点亮 - element.setOn(true); + for (VirtualRealityIbp.IbpElement element : vrIbp.getAllElements()) { + if (sdLightMeans.contains(element.getMean())) { //如果是处于试灯状态的元素,直接点亮 + element.orderTo(true); continue; } - List stands = chooseStands(station, element, config); + List stands = chooseStands(station, element.getUp(), config); if (element.getMean() == null) continue; switch (element.getMean()) { - case HSJC: + case PSD_SMKM: + case PSD_HSJC: case KC: case XXYS: case SXYS: @@ -314,28 +338,37 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService { case AXLE_RESET: case PRERESET_Z: case ALARM: - case CZ_LIGHT: + case PSD_CZYX_LIGHT: case SD: + case PSD_ALARM: + case PSD_BJQC: break; case kcLight: - element.setOn(stands.stream().anyMatch(Stand::isIbpHoldTrain)); + element.orderTo(stands.stream().anyMatch(Stand::isIbpHoldTrain)); break; case jjtcLight: - element.setOn(stands.stream().allMatch(Stand::isEmergencyClosed)); + element.orderTo(stands.stream().allMatch(Stand::isEmergencyClosed)); break; case gmLight: - element.setOn(stands.stream().allMatch(stand -> stand.getPsd().isCloseAndLock())); + element.orderTo(stands.stream().allMatch(stand -> stand.getPsd().isCloseAndLock())); break; case kmLight: - element.setOn(!stands.stream().allMatch(stand -> stand.getPsd().isClose())); + element.orderTo(!stands.stream().allMatch(stand -> stand.getPsd().isClose())); break; - case HSJC_LIGHT: - element.setOn(stands.stream().anyMatch(stand -> stand.getPsd().isInterlockRelease())); + case PSD_HSJC_LIGHT: + element.orderTo(stands.stream().anyMatch(stand -> stand.getPsd().isInterlockRelease())); break; case AXLE_PRE_RESET: VirtualRealityIbp.SquareButton button = (VirtualRealityIbp.SquareButton) element; Section section = repository.getByCode(button.getSectionCode(), Section.class); - element.setOn(section.isPreReset()); + element.orderTo(section.isPreReset()); + break; + case PSD_SDCZ_LIGHT: //逻辑未知 + break; + case PSD_GZBJ_LIGHT: + element.orderTo(stands.stream().anyMatch(Stand::hasCheckedPsdFault)); + break; + case PSD_SD: break; default: throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("未知的IBP元素类型"); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Stand.java b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Stand.java index e2ec6182d..40b609d5d 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Stand.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Stand.java @@ -331,6 +331,16 @@ public class Stand extends MayOutOfOrderDevice { this.runTimeMap.put(groupNumber, runLevelTime); } + /** + * 有能被检测到的屏蔽门故障? + */ + public boolean hasCheckedPsdFault() { + DeviceFault fault = this.getFault(); + return Fault.PSD_CANNOT_BE_CLOSED.equals(fault) + || Fault.PSD_CANNOT_BE_OPENED.equals(fault) + || Fault.NO_CLOSE_AND_LOCK.equals(fault); + } + /** * 站台折返类型策略 */ diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/data/status/IbpStatus.java b/src/main/java/club/joylink/rtss/simulation/cbtc/data/status/IbpStatus.java index bb1a7c13b..de00d2ddd 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/data/status/IbpStatus.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/data/status/IbpStatus.java @@ -9,7 +9,6 @@ import org.springframework.util.CollectionUtils; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; @Getter @Setter @@ -18,7 +17,7 @@ public class IbpStatus { private Map statusMap = new HashMap<>(); public IbpStatus(VirtualRealityIbp vrIbp) { - for (VirtualRealityIbp.IbpElement ibpElement : vrIbp.getElementList()) { + for (VirtualRealityIbp.IbpElement ibpElement : vrIbp.getAllElements()) { statusMap.put(ibpElement.getCode(), new IbpElementStatus(ibpElement)); } } @@ -26,7 +25,7 @@ public class IbpStatus { public IbpStatus collectDifference(VirtualRealityIbp vrIbp) { IbpStatus ibpStatus = new IbpStatus(); Map diffMap = ibpStatus.getStatusMap(); - for (VirtualRealityIbp.IbpElement ibpElement : vrIbp.getElementList()) { + for (VirtualRealityIbp.IbpElement ibpElement : vrIbp.getAllElements()) { IbpElementStatus status = statusMap.get(ibpElement.getCode()); if (status == null) { status = new IbpElementStatus(ibpElement); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/data/vr/VirtualRealityIbp.java b/src/main/java/club/joylink/rtss/simulation/cbtc/data/vr/VirtualRealityIbp.java index 0baa2d4ec..f11ac4e02 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/data/vr/VirtualRealityIbp.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/data/vr/VirtualRealityIbp.java @@ -8,10 +8,7 @@ import lombok.Setter; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -28,7 +25,7 @@ public class VirtualRealityIbp extends VirtualRealityDevice { super(code, name, DeviceType.IBP); if (!CollectionUtils.isEmpty(ibpData.getDrawData().getSquareButtonList())) { for (IbpData.SquareButtonVO vo : ibpData.getDrawData().getSquareButtonList()) { - SquareButton button = new SquareButton(vo.getCode(), vo.getMean(), false, vo.getSectionCode(), vo.getSignalCodes(), vo.getDirection()); + SquareButton button = new SquareButton(vo.getCode(), vo.getMean(), false, vo.getSectionCode(), vo.getDirection()); addElement(button); } } @@ -55,8 +52,8 @@ public class VirtualRealityIbp extends VirtualRealityDevice { } public void reset() { - this.queryByMean(Mean.SXYS).forEach(element -> element.setOn(false)); - this.queryByMean(Mean.XXYS).forEach(element -> element.setOn(false)); + this.queryByMean(Mean.SXYS).forEach(element -> element.orderTo(false)); + this.queryByMean(Mean.XXYS).forEach(element -> element.orderTo(false)); } public void addElement(IbpElement element) { @@ -87,19 +84,27 @@ public class VirtualRealityIbp extends VirtualRealityDevice { .collect(Collectors.toList()); } - public List query(Mean mean, Boolean up) { + public T query(Mean mean, Boolean up) { return elementMap.values().stream() .filter(element -> mean.equals(element.getMean()) && Objects.equals(element.getUp(), up)) .map(element -> (T) element) - .collect(Collectors.toList()); + .findAny().orElse(null); } - public Collection getElementList() { + public T get(Mean mean, Boolean up) { + T t = query(mean, up); + BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(t, + String.format("[%s]的IBP盘上无[%s]元素", station.debugStr(), up, mean)); + return t; + } + + public Collection getAllElements() { return this.elementMap.values(); } /** * 是否允许操作 + * * @param up 是否是上行 * @return */ @@ -109,7 +114,6 @@ public class VirtualRealityIbp extends VirtualRealityDevice { } @Getter - @Setter public class IbpElement { private String code; @@ -117,10 +121,24 @@ public class VirtualRealityIbp extends VirtualRealityDevice { private Mean mean; - /** 是否开启/亮灯 */ + /** + * 是否开启/亮灯 + */ private boolean on; - /** 是否上行 */ + /** + * 要转为开启状态 + */ + private boolean turnOn; + + /** + * 要转为关闭状态 + */ + private boolean turnOff; + + /** + * 是否上行 + */ private Boolean up; public IbpElement(String code, Type type, Mean mean, boolean on, Boolean up) { @@ -131,18 +149,50 @@ public class VirtualRealityIbp extends VirtualRealityDevice { this.up = up; } + /** + * 下令 + */ + public void orderTo(boolean on) { + if (isConnectReal()) { + if (on) + orderToOn(); + else + orderToOff(); + } else { + setOn(on); + } + } + public void setOn(boolean on) { this.on = on; + if (on) + turnOn = false; + else + turnOff = false; + } + + public void orderToOn() { + this.turnOn = true; + this.turnOff = false; + } + + public void orderToOff() { + this.turnOn = false; + this.turnOff = true; } } @Getter @Setter public class SquareButton extends IbpElement { - /** 是否被按下 */ + /** + * 是否被按下 + */ private boolean pressed; - /** 按钮被按下的时刻 */ + /** + * 按钮被按下的时刻 + */ private LocalDateTime pressTime; /** @@ -151,21 +201,42 @@ public class VirtualRealityIbp extends VirtualRealityDevice { private String sectionCode; /** - * 试灯按钮关联的灯 + * 这些意义的元素,受试灯按钮影响 */ - private List signalCodes; + private Set sdLightMeans; - /** 有效的(防止计轴预复位按钮多次生效) */ + /** + * 有效的(防止计轴预复位按钮多次生效) + */ private boolean effective; - public SquareButton(String code, Mean mean, boolean on, String sectionCode, List signalCodes, Boolean up) { + public SquareButton(String code, Mean mean, boolean on, String sectionCode, Boolean up) { super(code, Type.BUTTON, mean, on, up); this.sectionCode = sectionCode; - this.signalCodes = signalCodes; + if (mean != null) { + switch (mean) { + case SD: { + sdLightMeans = new HashSet<>(); + sdLightMeans.add(Mean.kcLight); + sdLightMeans.add(Mean.jjtcLight); + break; + } + case PSD_SD: { + sdLightMeans = new HashSet<>(); + sdLightMeans.add(Mean.gmLight); + sdLightMeans.add(Mean.kmLight); + sdLightMeans.add(Mean.PSD_CZYX_LIGHT); + sdLightMeans.add(Mean.PSD_HSJC_LIGHT); + break; + } + } + } } } - /** 元素类型 */ + /** + * 元素类型 + */ public enum Type { LIGHT, BUTTON, @@ -173,7 +244,9 @@ public class VirtualRealityIbp extends VirtualRealityDevice { ALARM, } - /** 元素意义 */ + /** + * 元素意义 + */ public enum Mean { //------------------ 信号 ------------------ /** @@ -203,15 +276,17 @@ public class VirtualRealityIbp extends VirtualRealityDevice { kcLight, jjtcLight, - gmLight, - kmLight, SD, //------------------ 屏蔽门 ------------------ /** - * 下行屏蔽门开门 + * 开门 */ KM, + /** + * 首末开门 + */ + PSD_SMKM, GM, /** * 下行钥匙 @@ -221,19 +296,33 @@ public class VirtualRealityIbp extends VirtualRealityDevice { /** * 互锁解除 */ - HSJC, + PSD_HSJC, /** - * 屏蔽门的蜂鸣器 + * 屏蔽门板块的蜂鸣器 */ PSD_ALARM, + /** + * 屏蔽门板块的报警切除 + */ + PSD_BJQC, + gmLight, + kmLight, /** * 操作允许灯 */ - CZ_LIGHT, + PSD_CZYX_LIGHT, /** * 互锁解除灯 */ - HSJC_LIGHT, + PSD_HSJC_LIGHT, + /** + * 手动操作灯 + */ + PSD_SDCZ_LIGHT, + /** + * 故障报警灯 + */ + PSD_GZBJ_LIGHT, /** * 屏蔽门试灯 */ diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/hhcj/HhcjIbpServiceImpl.java b/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/hhcj/HhcjIbpServiceImpl.java index d84ab42bd..4b021bf72 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/hhcj/HhcjIbpServiceImpl.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/hhcj/HhcjIbpServiceImpl.java @@ -3,17 +3,24 @@ package club.joylink.rtss.simulation.cbtc.device.real.modbustcp.hhcj; import club.joylink.rtss.services.IVirtualRealityIbpService; import club.joylink.rtss.simulation.cbtc.Simulation; import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityIbp; +import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.PlcGatewayService; import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.RealDeviceService; +import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.device.PlcGateway; import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.device.RealDeviceConfig; import club.joylink.rtss.vo.client.project.hhcj.HhcjIbpConfigVO; import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Objects; + @Service public class HhcjIbpServiceImpl implements RealDeviceService { @Autowired private IVirtualRealityIbpService iVirtualRealityIbpService; + @Autowired + private PlcGatewayService plcGatewayService; @Override public boolean canHandle(RealDeviceConfig deviceConfig) { @@ -27,6 +34,9 @@ public class HhcjIbpServiceImpl implements RealDeviceService { @Override public void handle(Simulation simulation, RealDeviceConfig deviceConfig, ByteBuf byteBuf) { + PlcGateway plcGateway = simulation.queryPlcGatewayDevice(); + if (plcGateway == null) + return; HhcjIbpConfig config = (HhcjIbpConfig) deviceConfig; VirtualRealityIbp vrIbp = (VirtualRealityIbp) config.getMapElement(); if (vrIbp == null) @@ -39,20 +49,158 @@ public class HhcjIbpServiceImpl implements RealDeviceService { boolean r_xx_gm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_xx_gm()); boolean r_xx_hsjc = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_xx_hsjc()); boolean r_xy = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_xy()); - boolean r_dcs = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_dcs()); + boolean r_psd_sd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_psd_sd()); boolean r_sx_cz = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_cz()); boolean r_sx_smkm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_smkm()); boolean r_sx_km = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_km()); boolean r_sx_gm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_gm()); boolean r_sx_hsjc = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_hsjc()); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.XXYS, false, r_xx_cz); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.KM, false, r_xx_km); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.GM, false, r_xx_gm); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.HSJC, false, r_xx_hsjc); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.SXYS, true, r_sx_cz); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.KM, true, r_sx_km); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.GM, true, r_sx_gm); - iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, VirtualRealityIbp.Mean.HSJC, true, r_sx_hsjc); + boolean w_xx_czyx = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_czyx()); + boolean w_xx_smkm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_smkm()); + boolean w_xx_km = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_km()); + boolean w_xx_gm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_gm()); + boolean w_xx_gbsj = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_gbsj()); + boolean w_xx_dk = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_dk()); + boolean w_xx_sdcz = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_sdcz()); + boolean w_xx_hsjc = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_hsjc()); + boolean w_gzbj = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_gzbj()); + boolean w_psd_fmq = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_psd_fmq()); + boolean w_sx_czyx = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_czyx()); + boolean w_sx_smkm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_smkm()); + boolean w_sx_km = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_km()); + boolean w_sx_gm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_gm()); + boolean w_sx_gbsj = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_gbsj()); + boolean w_sx_dk = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_dk()); + boolean w_sx_sdcz = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_sdcz()); + boolean w_sx_hsjc = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_hsjc()); + + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_CZYX_LIGHT, false, w_xx_czyx); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_SMKM, false, w_xx_smkm); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.KM, false, w_xx_km); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.GM, false, w_xx_gm); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.gmLight, false, w_xx_gbsj); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.kmLight, false, w_xx_dk); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_SDCZ_LIGHT, false, w_xx_sdcz); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_HSJC_LIGHT, false, w_xx_hsjc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_GZBJ_LIGHT, null, w_gzbj); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_ALARM, null, w_psd_fmq); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_CZYX_LIGHT, true, w_sx_czyx); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_SMKM, true, w_sx_smkm); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.KM, true, w_sx_km); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.GM, true, w_sx_gm); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.gmLight, true, w_sx_gbsj); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.kmLight, true, w_sx_dk); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_SDCZ_LIGHT, true, w_sx_sdcz); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.PSD_HSJC_LIGHT, true, w_sx_hsjc); + + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.XXYS, false, r_xx_cz); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.KM, false, r_xx_km); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.GM, false, r_xx_gm); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.PSD_HSJC, false, r_xx_hsjc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.PSD_BJQC, null, r_xy); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.PSD_SD, null, r_psd_sd); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.SXYS, true, r_sx_cz); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.KM, true, r_sx_km); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.GM, true, r_sx_gm); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.PSD_HSJC, true, r_sx_hsjc); + + int baseAddr = plcGateway.getConfig().getAddr() + configVO.getAddr(); + Channel channel = plcGateway.getChannel(); + for (VirtualRealityIbp.IbpElement element : vrIbp.getAllElements()) { + Boolean on = null; + if (element.isTurnOn()) { + on = true; + } else if (element.isTurnOff()) { + on = false; + } + boolean currentIsOn = false; + Integer addr = null; + switch (element.getMean()) { + case KM: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_km(); + currentIsOn = w_sx_km; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_km(); + currentIsOn = w_xx_km; + } + break; + case PSD_SMKM: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_smkm(); + currentIsOn = w_sx_smkm; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_smkm(); + currentIsOn = w_xx_smkm; + } + break; + case GM: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_gm(); + currentIsOn = w_sx_gm; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_gm(); + currentIsOn = w_xx_gm; + } + break; + case PSD_ALARM: + addr = configVO.getW_psd_fmq(); + currentIsOn = w_psd_fmq; + break; + case gmLight: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_gbsj(); + currentIsOn = w_sx_gbsj; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_gbsj(); + currentIsOn = w_xx_gbsj; + } + break; + case kmLight: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_dk(); + currentIsOn = w_sx_dk; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_dk(); + currentIsOn = w_xx_dk; + } + break; + case PSD_CZYX_LIGHT: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_czyx(); + currentIsOn = w_sx_czyx; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_czyx(); + currentIsOn = w_xx_czyx; + } + break; + case PSD_HSJC_LIGHT: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_hsjc(); + currentIsOn = w_sx_hsjc; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_hsjc(); + currentIsOn = w_xx_hsjc; + } + break; + case PSD_SDCZ_LIGHT: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_sdcz(); + currentIsOn = w_sx_sdcz; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_sdcz(); + currentIsOn = w_xx_sdcz; + } + break; + case PSD_GZBJ_LIGHT: + addr = configVO.getW_gzbj(); + currentIsOn = w_gzbj; + break; + } + if (addr != null && on != null) { + plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, addr, currentIsOn, on, channel); + } + } } } diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/richor/ZjdIbpServiceImpl.java b/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/richor/ZjdIbpServiceImpl.java index 1490fb68a..e3969926f 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/richor/ZjdIbpServiceImpl.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/device/real/modbustcp/richor/ZjdIbpServiceImpl.java @@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.List; +import java.util.Objects; @Slf4j @Component @@ -72,60 +72,77 @@ public class ZjdIbpServiceImpl implements RealDeviceService { boolean r_sd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sd()); boolean r_qdbj = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_qdbj()); boolean w_fmq = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_fmq()); - boolean w_sx_jjtcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_jjtcd()); boolean w_xx_jjtcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_jjtcd()); - boolean w_sx_kcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_kcd()); boolean w_xx_kcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_xx_kcd()); + boolean w_sx_jjtcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_jjtcd()); + boolean w_sx_kcd = RealDeviceConfig.getBitOf(deviceStatus, configVO.getW_sx_kcd()); boolean r_sx_czyx = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_czyx()); boolean r_sx_km = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_km()); boolean r_sx_gm = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_sx_gm()); int baseAddr = plcGateway.getConfig().getAddr() + configVO.getAddr(); Channel channel = plcGateway.getChannel(); - //查找真实设备和vr设备 - /*------------------------- 输入 -------------------------*/ - //下行紧急停车 - List jjtc = vrIbp.query(VirtualRealityIbp.Mean.JJTC, false); - jjtc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_xx_jjtc)); - //下行取消紧停 - List qxjt = vrIbp.query(VirtualRealityIbp.Mean.QXJJTC, false); - qxjt.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_xx_qxjt)); - //下行扣车 - List kc = vrIbp.query(VirtualRealityIbp.Mean.KC, false); - kc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_xx_kc)); - //下行取消扣车 - List qxkc = vrIbp.query(VirtualRealityIbp.Mean.ZZKC, false); - qxkc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_xx_qxkc)); - //上行紧急停车 - List sxjjtc = vrIbp.query(VirtualRealityIbp.Mean.JJTC, true); - sxjjtc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_sx_jjtc)); - //上行取消紧停 - List sxqxjt = vrIbp.query(VirtualRealityIbp.Mean.QXJJTC, true); - sxqxjt.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_sx_qxjt)); - //上行扣车 - List sxkc = vrIbp.query(VirtualRealityIbp.Mean.KC, true); - sxkc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_sx_kc)); - //上行取消扣车 - List sxqxkc = vrIbp.query(VirtualRealityIbp.Mean.ZZKC, true); - sxqxkc.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_sx_qxkc)); - //试灯 - List sd = vrIbp.queryByMean(VirtualRealityIbp.Mean.SD); - sd.forEach(element -> iVirtualRealityIbpService.updateElementStatus(simulation, vrIbp, element, r_sd)); - //下行允许禁止钥匙 - List ibpElements = vrIbp.queryByMean(VirtualRealityIbp.Mean.XXYS); - ibpElements.forEach(ibpElement -> ibpElement.setOn(r_sx_czyx)); + // 灯 + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.jjtcLight, false, w_xx_kcd); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.kcLight, false, w_xx_kcd); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.jjtcLight, true, w_sx_kcd); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.kcLight, true, w_sx_kcd); + // 按钮灯 + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.JJTC, false, r_xx_jjtc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.QXJJTC, false, r_xx_qxjt); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.KC, false, r_xx_kc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.ZZKC, false, r_xx_qxkc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.JJTC, true, r_sx_jjtc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.QXJJTC, true, r_sx_qxjt); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.KC, true, r_sx_kc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.ZZKC, true, r_sx_qxkc); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.XXYS, false, r_sx_czyx); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.KM, true, r_sx_km); + iVirtualRealityIbpService.updateOnOrOff(vrIbp, VirtualRealityIbp.Mean.GM, true, r_sx_gm); + // 按钮 + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.JJTC, false, r_xx_jjtc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.QXJJTC, false, r_xx_qxjt); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.KC, false, r_xx_kc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.ZZKC, false, r_xx_qxkc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.JJTC, true, r_sx_jjtc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.QXJJTC, true, r_sx_qxjt); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.KC, true, r_sx_kc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.ZZKC, true, r_sx_qxkc); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.ZZKC, null, r_sd); + iVirtualRealityIbpService.pressOrRelease(simulation, vrIbp, VirtualRealityIbp.Mean.XXYS, false, r_sx_czyx); /*------------------------- 输出 -------------------------*/ - boolean xxkcd = vrIbp.query(VirtualRealityIbp.Mean.kcLight, false).stream() - .allMatch(VirtualRealityIbp.IbpElement::isOn); - plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_xx_kcd(), w_xx_kcd, xxkcd, channel); - boolean sxkcd = vrIbp.query(VirtualRealityIbp.Mean.kcLight, true).stream() - .allMatch(VirtualRealityIbp.IbpElement::isOn); - plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_sx_kcd(), w_sx_kcd, sxkcd, channel); - boolean xxjjtcd = vrIbp.query(VirtualRealityIbp.Mean.jjtcLight, false).stream() - .allMatch(VirtualRealityIbp.IbpElement::isOn); - plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_xx_jjtcd(), w_xx_jjtcd, xxjjtcd, channel); - boolean sxjjtcd = vrIbp.query(VirtualRealityIbp.Mean.jjtcLight, true).stream() - .allMatch(VirtualRealityIbp.IbpElement::isOn); - plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_sx_jjtcd(), w_sx_jjtcd, sxjjtcd, channel); + for (VirtualRealityIbp.IbpElement element : vrIbp.getAllElements()) { + Integer addr = null; + boolean currentIsOn = false; + Boolean turnOn = null; + if (element.isTurnOn()) { + turnOn = true; + } else if (element.isTurnOff()) { + turnOn = false; + } + switch (element.getMean()) { + case kcLight: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_kcd(); + currentIsOn = w_sx_kcd; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_kcd(); + currentIsOn = w_xx_kcd; + } + break; + case jjtcLight: + if (Objects.equals(true, element.getUp())) { + addr = configVO.getW_sx_jjtcd(); + currentIsOn = w_sx_jjtcd; + } else if (Objects.equals(false, element.getUp())) { + addr = configVO.getW_xx_jjtcd(); + currentIsOn = w_xx_jjtcd; + } + break; + } + if (addr != null && turnOn != null) { + plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, addr, currentIsOn, turnOn, channel); + } + } //ISCS状态 SimulationIscsDataRepository iscsRepository = simulation.getIscsRepository(); String iscsCode = configVO.getIscsCode(); diff --git a/src/main/java/club/joylink/rtss/vo/client/project/hhcj/HhcjIbpConfigVO.java b/src/main/java/club/joylink/rtss/vo/client/project/hhcj/HhcjIbpConfigVO.java index 1f950ee39..e8be37272 100644 --- a/src/main/java/club/joylink/rtss/vo/client/project/hhcj/HhcjIbpConfigVO.java +++ b/src/main/java/club/joylink/rtss/vo/client/project/hhcj/HhcjIbpConfigVO.java @@ -36,9 +36,9 @@ public class HhcjIbpConfigVO extends RealConfigVO { private Integer r_xy = 15; /** - * 灯测试 + * 屏蔽门板块试灯 */ - private Integer r_dcs = 16; + private Integer r_psd_sd = 16; /** * 上行操作开关 @@ -65,6 +65,96 @@ public class HhcjIbpConfigVO extends RealConfigVO { */ private Integer r_sx_hsjc = 21; + /** + * 下行IBP/PSL操作允许灯 + */ + private Integer w_xx_czyx = 41; + + /** + * 下行首末开门按钮灯 + */ + private Integer w_xx_smkm = 42; + + /** + * 下行开门按钮灯 + */ + private Integer w_xx_km = 43; + + /** + * 下行关门按钮灯 + */ + private Integer w_xx_gm = 44; + + /** + * 下行所有门关闭且锁紧灯 + */ + private Integer w_xx_gbsj = 45; + + /** + * 下行所有门打开灯 + */ + private Integer w_xx_dk = 46; + + /** + * 下行手动操作灯 + */ + private Integer w_xx_sdcz = 47; + + /** + * 下行互锁解除灯 + */ + private Integer w_xx_hsjc = 48; + + /** + * 故障报警灯 + */ + private Integer w_gzbj = 49; + + /** + * 屏蔽门蜂鸣器 + */ + private Integer w_psd_fmq = 50; + + /** + * 上行操作允许灯 + */ + private Integer w_sx_czyx = 51; + + /** + * 上行首末开门按钮灯 + */ + private Integer w_sx_smkm = 52; + + /** + * 上行开门按钮灯 + */ + private Integer w_sx_km = 53; + + /** + * 上行关门按钮灯 + */ + private Integer w_sx_gm = 54; + + /** + * 上行所有门关闭锁紧灯 + */ + private Integer w_sx_gbsj = 55; + + /** + * 上行所有门打开灯 + */ + private Integer w_sx_dk = 56; + + /** + * 上行手动操作灯 + */ + private Integer w_sx_sdcz = 57; + + /** + * 上行互锁解除灯 + */ + private Integer w_sx_hsjc = 58; + public HhcjIbpConfigVO() { super(0, 304); }