| | |
| | | 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; |
| | |
| | | statusEntity.setPalletHeight(palletHeight);//高低信号 |
| | | |
| | | statusEntity.setError(0);//默认无报警 |
| | | statusEntity.setErrorMsg(""); |
| | | |
| | | statusEntity.setTaskWriteIdx((int) siemensNet.getByteTransform().TransInt16(result.Content, i * 10 + 8));//任务可写区 |
| | | fillTaskBufferStatus(taskBufferRaw, i, statusEntity); |
| | |
| | | } |
| | | } |
| | | |
| | | // 报警信息 |
| | | // 条码站报警信息 |
| | | OperateResultExOne<byte[]> result4 = siemensNet.Read("DB103.2", (short) (barcodeOriginList.size() * 2)); |
| | | if (result4.IsSuccess) { |
| | | for (int i = 0; i < barcodeOriginList.size(); i++) { |
| | |
| | | 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)); |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.core.network.real; |
| | | |
| | | import org.junit.jupiter.api.Test; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertEquals; |
| | | |
| | | class ZyStationV4RealConnectTest { |
| | | |
| | | @Test |
| | | void buildConveyorCommonAlarmMessageShouldMapDefinedBits() { |
| | | String alarmMsg = ZyStationV4RealConnect.buildConveyorCommonAlarmMessage( |
| | | new boolean[]{true, false, false, false, false, false, false, false}, |
| | | new boolean[]{false, false, true, false, false, false, false, false}, |
| | | new boolean[]{false, false, true, false, false, false, false, false}, |
| | | new boolean[]{true, true, false, false, false, false, false, false} |
| | | ); |
| | | |
| | | assertEquals("急停;扫码检验异常;高位变频器故障;路径查询异常;", alarmMsg); |
| | | } |
| | | |
| | | @Test |
| | | void mergeAlarmMessagesShouldAppendToExistingBarcodeAlarm() { |
| | | String merged = ZyStationV4RealConnect.mergeAlarmMessages("扫码异常;", "急停;路径查询异常;"); |
| | | |
| | | assertEquals("扫码异常;急停;路径查询异常;", merged); |
| | | } |
| | | } |