| | |
| | | |
| | | private List<ZyStationStatusEntity> statusList; |
| | | private List<StationObjModel> barcodeOriginList; |
| | | private List<StationObjModel> inStationOriginList; |
| | | private SiemensS7Net siemensNet; |
| | | private DeviceConfig deviceConfig; |
| | | private RedisUtil redisUtil; |
| | |
| | | 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++) { |
| | |
| | | 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]) { |
| | |
| | | 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()); |
| | | } |
| | | } |
| | |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | 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) { |
| | |
| | | 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()); |
| | |
| | | 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)) { |
| | |
| | | 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; |