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("命令下发失败");
|
}
|
}
|
|
}
|