Junjie
1 天以前 9608f4a428d522c04da21c6b6eea9fa76d01b136
src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -39,6 +39,33 @@
    private static final int TASK_AREA_LENGTH = 48;
    private static final int TASK_AREA_SLOT_SIZE = 12;
    private static final int TASK_AREA_SLOT_COUNT = 3;
    private static final String[] CONVEYOR_COMMON_ALARM_MESSAGES = {
            "急停",
            "低位断路器断开",
            "低位变频器故障",
            "输送运行超时",
            "顶升运行超时",
            "申请任务超时",
            "托盘突出报警",
            "任务运行超时",
            "FWD旋转限位报警",
            "REV旋转限位报警",
            "扫码检验异常",
            "安全门打开报警",
            "任务重复报警",
            "入站过程中前置条件异常",
            "入站前置条件等待超时",
            "出站过程中前置条件异常",
            "出站前置条件等待超时",
            "高位断路器断开",
            "高位变频器故障",
            "顶升限位信号异常",
            "入站运行中,上站同步运行请求消失",
            "出站完成后,仍然检测到托盘",
            "入站完成后,没有检测到托盘",
            "下站站号异常",
            "路径查询异常"
    };
    private List<ZyStationStatusEntity> statusList;
    private List<StationObjModel> barcodeOriginList;
@@ -138,6 +165,7 @@
                statusEntity.setPalletHeight(palletHeight);//高低信号
                statusEntity.setError(0);//默认无报警
                statusEntity.setErrorMsg("");
                statusEntity.setTaskWriteIdx((int) siemensNet.getByteTransform().TransInt16(result.Content, i * 10 + 8));//任务可写区
                fillTaskBufferStatus(taskBufferRaw, i, statusEntity);
@@ -171,7 +199,7 @@
            }
        }
        // 报警信息
        // 条码站报警信息
        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB103.2", (short) (barcodeOriginList.size() * 2));
        if (result4.IsSuccess) {
            for (int i = 0; i < barcodeOriginList.size(); i++) {
@@ -209,12 +237,22 @@
                    sb.append("扫码异常;");
                }
                if(sb.length() > 0) {
                    barcodeEntity.setError(1);
                }else {
                    barcodeEntity.setError(0);
                }
                barcodeEntity.setErrorMsg(sb.toString());
                applyAlarmMessage(barcodeEntity, sb.toString());
            }
        }
        // 输送站点通用报警信息
        OperateResultExOne<byte[]> result5 = siemensNet.Read("DB25.0", (short) (statusList.size() * 4));
        if (result5.IsSuccess) {
            for (int i = 0; i < statusList.size(); i++) {
                ZyStationStatusEntity statusEntity = statusList.get(i); // 站点编号
                boolean[] status1 = siemensNet.getByteTransform().TransBool(result5.Content, i * 4, 1);
                boolean[] status2 = siemensNet.getByteTransform().TransBool(result5.Content, i * 4 + 1, 1);
                boolean[] status3 = siemensNet.getByteTransform().TransBool(result5.Content, i * 4 + 2, 1);
                boolean[] status4 = siemensNet.getByteTransform().TransBool(result5.Content, i * 4 + 3, 1);
                String alarmMsg = buildConveyorCommonAlarmMessage(status1, status2, status3, status4);
                applyAlarmMessage(statusEntity, mergeAlarmMessages(statusEntity.getErrorMsg(), alarmMsg));
            }
        }
@@ -418,4 +456,51 @@
        return -1;
    }
    static String buildConveyorCommonAlarmMessage(boolean[] status1, boolean[] status2, boolean[] status3, boolean[] status4) {
        StringBuilder sb = new StringBuilder();
        appendConveyorCommonAlarmMessages(sb, status1, 0);
        appendConveyorCommonAlarmMessages(sb, status2, 8);
        appendConveyorCommonAlarmMessages(sb, status3, 16);
        appendConveyorCommonAlarmMessages(sb, status4, 24);
        return sb.toString();
    }
    static String mergeAlarmMessages(String currentMsg, String appendMsg) {
        String current = currentMsg == null ? "" : currentMsg;
        String append = appendMsg == null ? "" : appendMsg;
        if (append.isEmpty()) {
            return current;
        }
        if (current.isEmpty()) {
            return append;
        }
        if (!current.endsWith(";")) {
            current += ";";
        }
        return current + append;
    }
    private static void appendConveyorCommonAlarmMessages(StringBuilder sb, boolean[] status, int startIdx) {
        if (status == null) {
            return;
        }
        int limit = Math.min(status.length, 8);
        for (int i = 0; i < limit; i++) {
            int alarmIdx = startIdx + i;
            if (!status[i] || alarmIdx >= CONVEYOR_COMMON_ALARM_MESSAGES.length) {
                continue;
            }
            sb.append(CONVEYOR_COMMON_ALARM_MESSAGES[alarmIdx]).append(";");
        }
    }
    private static void applyAlarmMessage(ZyStationStatusEntity statusEntity, String alarmMsg) {
        if (statusEntity == null) {
            return;
        }
        String message = alarmMsg == null ? "" : alarmMsg;
        statusEntity.setError(message.isEmpty() ? 0 : 1);
        statusEntity.setErrorMsg(message);
    }
}