package com.zy.asrs.wcs.core.kernel.command;
|
|
import com.zy.asrs.wcs.core.entity.Motion;
|
import com.zy.asrs.wcs.core.utils.ConveyorDispatcher;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* Created by vincent on 2023/10/23
|
*/
|
@Slf4j
|
@Service
|
public class ConveyorCommandService {
|
|
@Autowired
|
private ConveyorDispatcher conveyorDispatcher;
|
|
public Boolean accept(Motion motion) {
|
// Integer deviceNo = Integer.parseInt(motion.getDevice());
|
// SiemensDevpThread devpThread;
|
// StaProtocol staProtocol;
|
// BasDevp staDetl;
|
// StaProtocol clone;
|
// SiemensLiftThread liftThread;
|
// LiftProtocol liftProtocol;
|
// switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
|
// // 输送线指令下发
|
// case CONVEYOR_INBOUND:
|
// devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
|
//
|
// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin()));
|
// if (staProtocol == null) {
|
// return false;
|
// }
|
// // 查询站点详细信息
|
// staDetl = basDevpService.selectById(staProtocol.getSiteId());
|
// if (staDetl == null || Cools.isEmpty(staDetl.getCanining()) || !"Y".equals(staDetl.getCanining())) {
|
// News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId());
|
// return false;
|
// }
|
// if (!staProtocol.isAutoing()
|
// || !staProtocol.isLoading()
|
// || !staProtocol.isInEnable()
|
// || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) {
|
// return false;
|
// }
|
//
|
// if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) {
|
// return false;
|
// }
|
//
|
// clone = staProtocol.clone();
|
//
|
// clone.setWorkNo(motion.getWrkNo().shortValue());
|
// clone.setStaNo(Short.parseShort(motion.getTarget()));
|
//
|
// devpThread.setPakMk(staProtocol.getSiteId(), false);
|
//
|
// return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone));
|
//
|
// case CONVEYOR_INBOUND_TO_LIFT:
|
// // 输送线 -----------------------------------------------
|
// devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
|
//
|
// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin()));
|
// if (staProtocol == null) {
|
// return false;
|
// }
|
// // 查询站点详细信息
|
// staDetl = basDevpService.selectById(staProtocol.getSiteId());
|
// if (staDetl == null || Cools.isEmpty(staDetl.getCanining()) || !"Y".equals(staDetl.getCanining())) {
|
// News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId());
|
// return false;
|
// }
|
// if (!staProtocol.isAutoing()
|
// || !staProtocol.isLoading()
|
//// || !staProtocol.isInEnable()
|
// || (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9991)
|
// || !staProtocol.isPakMk()) {
|
// return false;
|
// }
|
//
|
// // 提升机判断 -----------------------------------------------
|
// liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getDockNo()));
|
// liftProtocol = liftThread.getLiftProtocol();
|
// if (null == liftProtocol) {
|
// return false;
|
// }
|
// DevpSlave.Sta inSta = devpThread.getSlave().queryInSta(staProtocol.getSiteId());
|
// if (!(liftProtocol.getMode()
|
// || liftProtocol.getReady()
|
// || !liftProtocol.getRunning()
|
// || !liftProtocol.getLev().equals(Short.parseShort(motion.getTarget())))) {
|
// return false;
|
// }
|
//
|
// // 下发命令 -----------------------------------------------
|
//
|
// // 1.驱动提升机电机
|
// LiftCommand liftCommand = new LiftCommand();
|
//
|
// LiftInteractiveModeType liftInteractiveModeType = null;
|
// switch (Integer.parseInt(motion.getOrigin())) {
|
// case 2:
|
// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN;
|
// break;
|
// case 7:
|
// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN;
|
// break;
|
// case 9:
|
// case 10:
|
// case 11:
|
// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN;
|
// break;
|
// default:
|
// break;
|
// }
|
//
|
// if (liftInteractiveModeType == null) {
|
// return false;
|
// }
|
// liftCommand = liftThread.getLiftTurnCommand(liftInteractiveModeType.id);
|
// liftCommand.setLiftNo(liftProtocol.getLiftNo());
|
// liftCommand.setTaskNo(motion.getWrkNo().shortValue());
|
// if (!liftThread.assignWork(liftCommand)) {
|
// return false;
|
// }
|
//
|
// try {
|
// Thread.sleep(1000);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
//
|
// // 2.下发输送线任务
|
// clone = staProtocol.clone();
|
// // 判断是否存在提升机代理站点
|
// ConveyorProxyType conveyorProxyType = ConveyorProxyType.queryByLift(Integer.parseInt(motion.getDockNo()), true);
|
// clone.setWorkNo(motion.getWrkNo().shortValue());
|
// clone.setStaNo(conveyorProxyType.liftProxyStaNo.shortValue());
|
// devpThread.setPakMk(staProtocol.getSiteId(), false);
|
// return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone));
|
//
|
// case CONVEYOR_OUTBOUND:
|
// devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
|
//
|
// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin()));
|
// if (staProtocol == null) {
|
// return false;
|
// }
|
// if (!staProtocol.isAutoing()
|
// || !staProtocol.isLoading()
|
// || staProtocol.getWorkNo() != 0
|
// || !staProtocol.isPakMk()) {
|
// return false;
|
// }
|
//
|
// // 下发命令 -----------------------------------------------
|
// clone = staProtocol.clone();
|
// clone.setWorkNo(motion.getWrkNo().shortValue());
|
// clone.setStaNo(Short.parseShort(motion.getTarget()));
|
//
|
// devpThread.setPakMk(clone.getSiteId(), false);
|
//
|
// return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone));
|
//
|
//// case CONVEYOR_OUTBOUND_FROM_LIFT:
|
//// Integer liftNo = Integer.parseInt(motion.getDockNo());
|
////
|
//// LiftNeighborType.query(liftNo, )
|
////
|
//// // 输送线 -----------------------------------------------
|
//// devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
|
////
|
//// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget()));
|
//// if (staProtocol == null) {
|
//// return false;
|
//// }
|
//// // 查询站点详细信息
|
//// staDetl = basDevpService.selectById(staProtocol.getSiteId());
|
//// if (staDetl == null || Cools.isEmpty(staDetl.getCanouting()) || !"Y".equals(staDetl.getCanouting())) {
|
//// News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId());
|
//// return false;
|
//// }
|
//// if (!staProtocol.isAutoing()
|
//// || !staProtocol.isLoading()
|
//// || !staProtocol.isInEnable()
|
//// || !(staProtocol.getWorkNo() >= 9991 && staProtocol.getWorkNo() <= 9999)) {
|
//// return false;
|
//// }
|
//// if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) {
|
//// return false;
|
//// }
|
////
|
//// // 提升机判断 -----------------------------------------------
|
//// liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
|
//// liftProtocol = liftThread.getLiftProtocol();
|
//// if (null == liftProtocol) {
|
//// return false;
|
//// }
|
//// DevpSlave.Sta inSta = devpThread.getSlave().queryOutSta(staProtocol.getSiteId());
|
//// if (liftProtocol.getMode() != 1
|
//// || liftProtocol.getAlarm() != 2
|
//// || liftProtocol.getLoadingByGoods() != 1
|
//// || liftProtocol.getPos() != inSta.getLiftLev().shortValue()) {
|
//// return false;
|
//// }
|
//
|
//
|
// default:
|
// break;
|
// }
|
return Boolean.TRUE;
|
}
|
|
public Boolean finish(Motion motion) {
|
// Integer deviceNo = Integer.parseInt(motion.getDevice());
|
// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
|
// StaProtocol staProtocol;
|
// switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
|
// case CONVEYOR_INBOUND:
|
// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget()));
|
// if (staProtocol == null) {
|
// return false;
|
// }
|
// if (!staProtocol.isAutoing() || !staProtocol.isLoading() || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) {
|
// return false;
|
// }
|
// if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) {
|
// return false;
|
// }
|
// break;
|
// case CONVEYOR_OUTBOUND:
|
// // todo:luxiaotao 出库到目标站是否需要跟踪
|
//// staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget()));
|
//// if (staProtocol == null) {
|
//// return false;
|
//// }
|
//// if (!staProtocol.isAutoing() || !staProtocol.isLoading() || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) {
|
//// return false;
|
//// }
|
//// if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) {
|
//// return false;
|
//// }
|
// break;
|
// case CONVEYOR_INBOUND_TO_LIFT:
|
// // 判断提升机状态
|
// SiemensLiftThread liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getDockNo()));
|
// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
|
// if (null == liftProtocol) {
|
// return false;
|
// }
|
//
|
// DevpSlave.Sta inSta = devpThread.getSlave().queryInSta(Integer.parseInt(motion.getOrigin()));
|
// if (!(liftProtocol.getMode()
|
// || liftProtocol.getReady()
|
// || !liftProtocol.getRunning()
|
// || liftProtocol.getLev() != Short.parseShort(motion.getTarget()))) {
|
// return false;
|
// }
|
//
|
// //货物已经进入提升机
|
// if (!(liftProtocol.getLineFrontHasStock() && liftProtocol.getLineEndHasStock())) {
|
// return false;
|
// }
|
//
|
// //清空提升机工作号
|
// if (liftProtocol.getTaskNo().intValue() == motion.getWrkNo()) {
|
// liftThread.setTaskNo(0);
|
// }
|
//
|
// // 判断输送线状态
|
// int originSta = Integer.parseInt(motion.getOrigin());
|
// if (originSta == 6) {
|
// originSta = 7;
|
// }
|
// staProtocol = devpThread.getStation().get(originSta);
|
//
|
// // 停止输送线电机
|
// int times = 0;boolean staProtocolMotorRes = false;
|
// while (times < 5) {
|
// if (staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) {
|
// staProtocolMotorRes = true;
|
// break;
|
// }
|
// if (!devpThread.controlMotor(originSta, StaMotorType.REQ_STOP)) {
|
// continue;
|
// }
|
// try {
|
// Thread.sleep(500);
|
// } catch (InterruptedException ignore) {}
|
// times++;
|
// }
|
// if (!staProtocolMotorRes) {
|
// return false;
|
// }
|
//
|
// break;
|
// default:
|
// break;
|
// }
|
|
return true;
|
}
|
|
}
|