自动化立体仓库 - WCS系统
Junjie
2023-11-29 7b316902c2b3ee1d50f67bea43ee454007e8f080
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -1,9 +1,7 @@
package com.zy.asrs.controller;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
@@ -21,6 +19,7 @@
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.CommandUtils;
import com.zy.asrs.utils.VersionUtils;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
@@ -37,8 +36,10 @@
import com.zy.core.properties.SystemProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -51,6 +52,11 @@
@Slf4j
@RestController
public class CrnController {
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.movePath}")
    private String movePath;
@@ -566,7 +572,7 @@
                crnCommand.setCommand((short) 0);  // 任务完成确认位
                // 延时发送
                Thread.sleep(1000L);
                if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand), false)) {
                    return R.ok();
                } else {
                    throw new CoolException("命令下发失败");
@@ -586,18 +592,111 @@
        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());     // 目标库位层
        command.setAuto((short)1);
        return crnControl(command)?R.ok():R.error();
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "切换半手动模式")
    @PostMapping("/crn/operator/semiAutomatic")
    public R crnsemiAutomatic(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAuto((short)2);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "切换手动模式")
    @PostMapping("/crn/operator/hand")
    public R onlineWrk1(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAuto((short)3);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "申请完成任务")
    @PostMapping("/crn/operator/onlineWrk1")
    public R onlineWrk2(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk1((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "申请取消任务")
    @PostMapping("/crn/operator/onlineWrk2")
    public R onlineWrk3(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk2((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "清除联机任务")
    @PostMapping("/crn/operator/onlineWrk3")
    public R onlineWrk4(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk3((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "恢复联机任务")
    @PostMapping("/crn/operator/onlineWrk4")
    public R crnHand(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk4((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    private boolean crnControl2(CrnCommand command){
        if (command.getCrnNo() == null) {
            throw new CoolException("请选择堆垛机");
        }
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            if (command.getCrnNo().equals(crn.getId())) {
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                if (crnThread == null) {
                    throw new CoolException("堆垛机不在线");
                }
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    throw new CoolException("堆垛机不在线");
                }
                // 空闲判断
//                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(4, command), false)) {
                    return true;
                } else {
                    throw new CoolException("命令下发失败");
                }
//                } else {
//                    throw new CoolException("堆垛机不在空闲状态");
//                }
            }
        }
        return false;
    }
    private boolean crnControl(CrnCommand command){
@@ -617,11 +716,11 @@
                }
                // 空闲判断
//                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
                    if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
                        return true;
                    } else {
                        throw new CoolException("命令下发失败");
                    }
                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, command), false)) {
                    return true;
                } else {
                    throw new CoolException("命令下发失败");
                }
//                } else {
//                    throw new CoolException("堆垛机不在空闲状态");
//                }