lsh
2024-08-09 e3b8bc50db4cf9d5fcac58b56d1cb7e25154c3a6
#改造
5个文件已修改
248 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkMast.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -380,6 +380,29 @@
        }
        return null;
    }
    public Integer getStaNoConvert(Integer crnNo){
        switch (this.staNo){
            case 114:
                switch (crnNo){
                    case 1:
                        return 114;
                    case 2:
                        return 107;
                    case 3:
                        return 211;
                }
            case 214:
                switch (crnNo){
                    case 1:
                        return 111;
                    case 2:
                        return 207;
                    case 3:
                        return 214;
                }
        }
        return this.staNo;
    }
    public String getSourceStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -844,6 +844,29 @@
                    // 查询工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId());
                    if (wrkMast == null) {
                        // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档
                        CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
                        CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                        if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                            // 移动中
                            continue;
                        }
                        //  判断堆垛机状态等待确认
                        if (crnProtocol.modeType == CrnModeType.AUTO
                                && crnProtocol.statusType == CrnStatusType.WAITING
                                && crnProtocol.forkPosType == CrnForkPosType.HOME
                                && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) {
                            News.info("堆垛机接驳任务完成,工作号:"+crnProtocol.getTaskNo()+";执行堆垛机号:"+crnSlave.getId()+";接驳放货位:"+crnStn.getStaNo()+";接驳行走目标站:"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()));
                            // 下发站点信息
                            staProtocol.setWorkNo(crnProtocol.getTaskNo());
                            staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue());
                            if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                continue;
                            }
                            // 复位堆垛机
                            crnThread.setResetFlag(true);
                            continue;
                        }
                        continue;
                    }
                    // 判断工作档条件
@@ -866,7 +889,7 @@
                        // 下发站点信息
                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).shortValue());
                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                            continue;
                        }
@@ -969,8 +992,35 @@
            // 获取工作状态为 2,3,4,5,6 的入库工作档
            WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
            if(null == wrkMast) {
            if(null == wrkMast || (wrkMast.getCrnNo()==2 && wrkMast.getWrkSts()==2 && crnProtocol.getCrnNo()!=2)) {
//                News.error("{}站点查询无待入库数据 工作号={}", crnStn.getStaNo(), staProtocol.getWorkNo());
                // 已经存在吊车执行任务时,则过滤
                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                    continue;
                }
                //  判断堆垛机状态等待确认
                if (crnProtocol.modeType == CrnModeType.AUTO
                        && crnProtocol.statusType == CrnStatusType.IDLE
                        && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                    News.info("堆垛机接驳任务执行,工作号:"+staProtocol.getWorkNo()+";执行堆垛机号:"+slave.getId()+";接驳取货位:"+crnStn.getStaNo()+";接驳放货位:"+staProtocol.getSiteId());
                    // 堆垛机接驳任务命令下发区 --------------------------------------------------------------------------
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(staProtocol.getWorkNo()); // 工作号
                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setCommand((short) 0);
                    crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE); // 任务模式:  站位转移
                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                    crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
                    crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
                    crnCommand.setDestinationPosX(Utils.getRow(staProtocol.getSiteId()));     // 目标库位排
                    crnCommand.setDestinationPosY(Utils.getBay(staProtocol.getSiteId()));     // 目标库位列
                    crnCommand.setDestinationPosZ(Utils.getLev(staProtocol.getSiteId()));     // 目标库位层
                    if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
                        News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", slave.getId(), JSON.toJSONString(crnCommand));
                    }
                    return true;
                }
                continue;
            }
src/main/java/com/zy/asrs/utils/Utils.java
@@ -220,6 +220,61 @@
    }
    /**
     * 通过库位号获取 排
     */
    public static short getRow(Integer staNo) {
        switch (staNo){
            case 108:
                return 4;
            case 208:
                return 18;
            case 112:
                return 3;
            case 212:
                return 19;
        }
        throw new RuntimeException("站点解析异常");
    }
    /**
     * 通过库位号获取 列
     */
    public static short getBay(Integer staNo) {
        switch (staNo){
            case 108:
                return 5;
            case 208:
                return 5;
            case 112:
                return 2;
            case 212:
                return 6;
        }
        throw new RuntimeException("站点解析异常");
    }
    /**
     * 通过库位号获取 层
     */
    public static short getLev(Integer staNo) {
        return 1;
    }
    public static Integer getStaNoConvertCentreOther2(Integer staNo){//放货为获取行走目标位
        switch (staNo){
            case 108:
                return 111;
            case 208:
                return 211;
            case 112:
                return 114;
            case 212:
                return 214;
            default:
                return staNo;
        }
    }
    /**
     * 通过排列层拼接出库位号
     */
    public static String append(int row, int bay, int lev) {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -8,6 +8,7 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.service.BasDevpService;
@@ -44,12 +45,18 @@
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    private short heartBeatVal = 1;
    private int barcodeSize = 2;
    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(100);add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109);
        add(110);add(111);
        add(200);add(201);add(202);add(203);add(204);add(205);add(206);add(207);add(208);add(209);
        add(210);add(211);
        add(300);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(112);add(113);add(114);
    }};
    public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{
        add(212);add(213);add(214);
    }};
    public boolean charge0;
@@ -70,6 +77,20 @@
     */
    public IoModeType ioModeOf1F = IoModeType.NONE;
    public IoModeType ioModeOf2F = IoModeType.NONE;
    private ArrayList<Integer> getStaNo() {
        switch (slave.getId()) {
            case 1:
                return staNos1;
            case 2:
                return staNos2;
            case 3:
                return staNos3;
            default:
                throw new CoolException("服务器异常");
        }
    }
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
@@ -132,6 +153,7 @@
    private void read() throws InterruptedException {
        // 更新入出库模式
        updateIoMode();
        ArrayList<Integer> staNos = getStaNo();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 50);
        if (result.IsSuccess) {
            for (int i = 0; i < 25; i++) {
@@ -244,6 +266,7 @@
        if (null == staProtocol) {
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        OperateResult writeId,writeDest;
@@ -358,6 +381,7 @@
        if (null == staProtocol || times > 3) {
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo());    // 工作号
        Thread.sleep(200);
src/main/resources/application.yml
@@ -70,6 +70,13 @@
      row: 4
      bay: 5
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 112
      row: 3
      bay: 2
      lev: 1
  # 堆垛机2
  crn[1]:
    id: 2
@@ -132,6 +139,13 @@
      row: 18
      bay: 5
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[2].id}
      staNo: 212
      row: 19
      bay: 6
      lev: 1
  # 穿梭车1
  ste[0]:
    id: 1
@@ -153,7 +167,7 @@
    port: 502
    rack: 0
    slot: 0
  # 输送线
  # 输送线1
  devp[0]:
    id: 1
    ip: 10.10.10.61
@@ -201,6 +215,46 @@
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 200
      led: ${wcs-slave.led[2].id}
  # 输送线2
  devp[1]:
    id: 2
    ip: 10.10.11.61
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 114
      barcode: ${wcs-slave.barcode[2].id}
      backSta: 100
      led: ${wcs-slave.led[2].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 114
      barcode: ${wcs-slave.barcode[2].id}
    # 出库口1
    outSta[0]:
      staNo: 114
  # 输送线3
  devp[2]:
    id: 3
    ip: 10.10.12.61
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 214
      barcode: ${wcs-slave.barcode[3].id}
      backSta: 100
      led: ${wcs-slave.led[3].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 214
      barcode: ${wcs-slave.barcode[3].id}
    # 出库口1
    outSta[0]:
      staNo: 214
  # 条码扫描仪
  barcode[0]:
    id: 1
@@ -212,23 +266,49 @@
    ip: 10.10.10.53
    port: 51236
   # LED1
  # 条码扫描仪
  barcode[2]:
    id: 3
    ip: 10.10.11.53
    port: 51236
    # LED1
  # 条码扫描仪
  barcode[3]:
    id: 4
    ip: 10.10.12.53
    port: 51236
    # LED1
  led[0]:
    id: 1
    ip: 10.10.10.205
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 100
  # LED1
  # LED2
  led[1]:
    id: 2
    ip: 10.10.10.206
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    devpPlcId: ${wcs-slave.devp[2].id}
    staArr: 300
  # LED1
  # LED3
  led[2]:
    id: 3
    ip: 10.10.10.207
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 200
  # LED4
  led[3]:
    id: 4
    ip: 10.10.11.207
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 200
  # LED5
  led[4]:
    id: 5
    ip: 10.10.12.207
    port: 5005
    devpPlcId: ${wcs-slave.devp[2].id}
    staArr: 200