1
skyouc
3 天以前 98895616ebf69fb398445dd0d664882349b0761f
src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -69,6 +69,7 @@
    private List<ZyStationStatusEntity> statusList;
    private List<StationObjModel> barcodeOriginList;
    private List<StationObjModel> inStationOriginList;
    private SiemensS7Net siemensNet;
    private DeviceConfig deviceConfig;
    private RedisUtil redisUtil;
@@ -126,13 +127,14 @@
                statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
            }
            barcodeOriginList = basDevp.getBarcodeStationList$();
            inStationOriginList = sortStationObjModelsByStationId(basDevp.getInStationList$());
        }
        if (siemensNet == null) {
            return statusList;
        }
        OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) (statusList.size() * 10));
        OperateResultExOne<byte[]> result = siemensNet.Read("DB100.10", (short) (statusList.size() * 10));
        if (result.IsSuccess) {
            byte[] taskBufferRaw = readTaskBufferRaw();
            for (int i = 0; i < statusList.size(); i++) {
@@ -151,6 +153,7 @@
                boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, i * 10 + 7, 1);
                statusEntity.setEnableIn(status2[1]);//启动入库
                statusEntity.setRunBlock(status2[2]);//重新规划路线
                statusEntity.setInBarcodeError(status2[3]);//入库条码站异常
                Integer palletHeight = null;
                if (status[7]) {
@@ -212,31 +215,30 @@
                boolean[] status1 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2, 1);
                boolean[] status2 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2 + 1, 1);
                if(status1[0]){
                if(status1[0] || status2[0]){
                    sb.append("左超宽报警;");
                }
                if(status1[1]) {
                if(status1[1] || status2[1]) {
                    sb.append("右超宽报警;");
                }
                if(status1[2]) {
                if(status1[2] || status2[2]) {
                    sb.append("前超长报警;");
                }
                if(status1[3]) {
                if(status1[3] || status2[3]) {
                    sb.append("后超长报警;");
                }
                if(status1[4]) {
                if(status1[4] || status2[4]) {
                    sb.append("超高报警;");
                }
                if(status1[5]) {
                if(status1[5] || status2[5]) {
                    sb.append("有货报警,空托入库时检测托盘上有无货物;");
                }
                if(status1[6]) {
                if(status1[6] || status2[6]) {
                    sb.append("重量异常报警;");
                }
                if(status1[7]) {
                if(status1[7] || status2[7]) {
                    sb.append("扫码异常;");
                }
                applyAlarmMessage(barcodeEntity, sb.toString());
            }
        }
@@ -253,6 +255,19 @@
                String alarmMsg = buildConveyorCommonAlarmMessage(status1, status2, status3, status4);
                applyAlarmMessage(statusEntity, mergeAlarmMessages(statusEntity.getErrorMsg(), alarmMsg));
            }
        }
        // 出入库模式
        OperateResultExOne<byte[]> result6 = siemensNet.Read("DB167.2", (short) (inStationOriginList.size() * 2));
        if (result6.IsSuccess) {
            for (int i = 0; i < inStationOriginList.size(); i++) {
                ZyStationStatusEntity inStationEntity = findStatusEntityByInStationIdx(i);
                if (inStationEntity == null) {
                    continue;
                }
                Integer ioMode = normalizeIoMode((int) siemensNet.getByteTransform().TransInt16(result6.Content, i * 2));
                inStationEntity.setIoMode(ioMode);
            }
        }
@@ -288,7 +303,7 @@
            return commandResponse;
        }
        int taskBaseOffset = stationIdx * TASK_AREA_LENGTH + (useTaskWriteIdx * TASK_AREA_SLOT_SIZE);
        int taskBaseOffset = (stationIdx + 1) *  TASK_AREA_LENGTH + (useTaskWriteIdx * TASK_AREA_SLOT_SIZE);
        OperateResult writeTaskNo = siemensNet.Write("DB13." + taskBaseOffset, command.getTaskNo());
        if (!writeTaskNo.IsSuccess) {
@@ -331,7 +346,7 @@
            return commandResponse;
        }
        int slotBaseOffset = stationIdx * TASK_AREA_LENGTH + slotIdx * TASK_AREA_SLOT_SIZE;
        int slotBaseOffset = (stationIdx + 1) * TASK_AREA_LENGTH + slotIdx * TASK_AREA_SLOT_SIZE;
        CommandResponse clearTaskNo = sendOriginCommand("DB13." + slotBaseOffset, new short[]{0, 0});
        if (clearTaskNo == null || !Boolean.TRUE.equals(clearTaskNo.getResult())) {
            commandResponse.setMessage(clearTaskNo == null ? "清空任务号失败" : clearTaskNo.getMessage());
@@ -385,6 +400,17 @@
                break;
            }
        }
        for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
            if(zyStationStatusEntity.getStationId().equals(stationId)) {
                return zyStationStatusEntity;
            }
        }
        return null;
    }
    private ZyStationStatusEntity findStatusEntityByInStationIdx(Integer idx) {
        Integer stationId = findInStationIdByOrder(inStationOriginList, idx);
        for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
            if(zyStationStatusEntity.getStationId().equals(stationId)) {
@@ -480,6 +506,32 @@
        return current + append;
    }
    static Integer normalizeIoMode(Integer rawMode) {
        if (rawMode == null) {
            return null;
        }
        if (rawMode == 1 || rawMode == 2) {
            return rawMode;
        }
        return null;
    }
    static Integer findInStationIdByOrder(List<StationObjModel> inStationOriginList, Integer orderIdx) {
        if (inStationOriginList == null || orderIdx == null || orderIdx < 0 || orderIdx >= inStationOriginList.size()) {
            return null;
        }
        StationObjModel stationObjModel = inStationOriginList.get(orderIdx);
        return stationObjModel == null ? null : stationObjModel.getStationId();
    }
    static List<StationObjModel> sortStationObjModelsByStationId(List<StationObjModel> stationObjModels) {
        if (stationObjModels == null) {
            return Collections.emptyList();
        }
        stationObjModels.sort(Comparator.comparing(StationObjModel::getStationId, Comparator.nullsLast(Integer::compareTo)));
        return stationObjModels;
    }
    private static void appendConveyorCommonAlarmMessages(StringBuilder sb, boolean[] status, int startIdx) {
        if (status == null) {
            return;