CZT
2023-08-30 38ab8fbd4355070def9e3b39f362731dd4dea6d1
igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
@@ -5,6 +5,7 @@
import com.ld.igds.constant.BizType;
import com.ld.igds.constant.Constant;
import com.ld.igds.constant.DeviceStatus;
import com.ld.igds.constant.DeviceType;
import com.ld.igds.io.RemoteControlService;
import com.ld.igds.io.constant.OrderRespEnum;
import com.ld.igds.io.constant.ProtocolEnum;
@@ -200,7 +201,7 @@
            ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false);
            log.debug("--------写入值---{}-{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus, null);
        }
    }
@@ -213,7 +214,8 @@
    @Override
    public DeviceControlResponse queryStatus(DeviceControlRequest request) {
        try {
            List<Device> list = coreDeviceService.getCacheDeviceBySerId(request.getCompanyId(), request.getSerId());
            //由于modbus设备可能在多个分机配置上,需根据仓库编码查询设备信息
            List<Device> list = coreDeviceService.getCacheDeviceByDepotId(request.getCompanyId(), request.getDepotId());
            if (null == list || list.isEmpty()) {
                return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "未获取到设备列表信息");
@@ -223,6 +225,11 @@
            ModbusTcp modbusTcpLink;
            for (Device device : list) {
                deviceModbus = deviceModbusService.getCacheDeviceModbus(request.getCompanyId(), device.getPassCode() + "");
                //空调设备单独查询
                if(DeviceType.TYPE_05.getCode().equals(device.getType())){
                    deviceModbus = deviceModbusService.getCacheDeviceModbus(request.getCompanyId(), device.getPassCode() + "", BizType.TEMPCONTROL.getCode());
                }
                if (null == deviceModbus) {
                    log.error("当前设备---{}{},为获取到配置的MODBUS信息", device.getSerId(), device.getName());
@@ -238,7 +245,13 @@
                modbusTcp.setSerId(device.getSerId());
                modbusTcp.setCompanyId(device.getCompanyId());
                doReadStatus(modbusTcp);
                //空调状态单独读取
                if(DeviceType.TYPE_05.getCode().equals(device.getType())){
                    doReadTempStatus(modbusTcp);
                    continue;
                }
                doReadStatus(modbusTcp, null);
                if (StringUtils.isBlank(device.getLink()) || "null".equals(device.getLink())) continue;
@@ -257,7 +270,7 @@
                modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
                doReadStatus(modbusTcpLink);
                doReadStatus(modbusTcpLink, device.getPassCode() + "");
            }
        } catch (Exception e) {
@@ -274,9 +287,10 @@
     * 读取状态,同时读取开状态和关闭状态
     *
     * @param modbusTcp
     * @param mainLink  主设备编码
     * @throws Exception
     */
    private void doReadStatus(ModbusTcp modbusTcp) throws Exception {
    private void doReadStatus(ModbusTcp modbusTcp, String mainLink) throws Exception {
        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpen())) return;
        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpenEnd())) return;
@@ -285,7 +299,7 @@
        boolean result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
        log.debug("---------读风窗风口开到位状态(或其他设备运行状态)------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
        if (result) {
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode());
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode(), mainLink);
        }
        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getCloseEnd())) return;
@@ -294,7 +308,30 @@
        result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
        log.debug("---------读风窗风口关到位状态------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
        if (result) {
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode());
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode(), mainLink);
        }
    }
    /**
     * 读取空调设备状态
     *
     * @param modbusTcp
     * @throws Exception
     */
    private void doReadTempStatus(ModbusTcp modbusTcp) throws Exception {
        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpenEnd())) return;
        int addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd());
        Number number = ModbusUtil2.readHoldingRegister(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
        log.debug("---------读空调运行状态------{}-{}-{}", modbusTcp.getBizCode(), addrExe, number);
        int num = number.intValue();
        if(num == 1){
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode(), null);
        }
        if(num == 2){
            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode(), null);
        }
    }