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; } }