package com.zy.asrs.utils; import com.core.exception.CoolException; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.core.CrnThread; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.CrnTaskModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import org.springframework.stereotype.Component; @Component public class CrnOperaUtils { //堆垛机入库 public boolean crnPut(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 return crnControl(command); } //堆垛机出库 public boolean crnTake(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 return crnControl(command); } //库位转移 public boolean crnStockMove(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosZ(param.getSourceRow()); // 源库位排 command.setSourcePosX(param.getSourceBay()); // 源库位列 command.setSourcePosY(param.getSourceLev()); // 源库位层 command.setDestinationPosZ(param.getRow()); // 目标库位排 command.setDestinationPosX(param.getBay()); // 目标库位列 command.setDestinationPosY(param.getLev()); // 目标库位层 return crnControl(command); } //站到站 public boolean crnSiteMove(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosX(param.getSourceStaNo()); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 1); // 源库位层 command.setDestinationPosX(param.getStaNo()); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command); } //回原点 public boolean crnBacOrigin(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command); } //反原点 public boolean reverseOrigin(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 22); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command); } //任务完成 public boolean crnTaskComplete(Integer crnNo) { CrnCommand command = new CrnCommand(); command.setCrnNo(crnNo); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 1); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 command.setCommand((short)0); return crnControl(command); } //清除命令 public boolean crnClearCommand(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command); } private boolean crnControl(CrnCommand command) { if (command.getCrnNo() == null) { return false; } CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, command.getCrnNo()); if (crnThread == null) { throw new CoolException("堆垛机不在线"); } CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { throw new CoolException("堆垛机不在线"); } if (CommandUtils.offer(SlaveType.Crn, command.getCrnNo(), new Task(2, command), false)) { return true; } else { throw new CoolException("命令下发失败"); } } }