自动化立体仓库 - WCS系统
#
yxFwq
2025-01-01 6d4ae730f093c9bcbb28fd97d8e3ce8867b9d693
#
9个文件已修改
271 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasJarMast.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/JarBurialEscalationScheduler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/DevpSlave.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/rgv.html 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.Arith;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.RgvStatusType;
@@ -14,8 +13,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.VersionUtils;
import com.zy.core.Slave;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
@@ -26,12 +24,11 @@
import com.zy.core.model.Task;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.RgvThread;
import com.zy.core.thread.ScaleThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -67,37 +64,29 @@
    @ManagerAuth(memo = "RGV信息表")
    public R rgvStateTable(){
        List<RgvStateTableVo> list = new ArrayList<>();
        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
        for (BasRgv basRgv : rgvs) {
            // 表格行
            RgvStateTableVo vo = new RgvStateTableVo();
            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
            list.add(vo);
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
            if (rgvThread == null) {
                continue;
            }
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            vo.setStatusType(rgvProtocol.modeType.desc);   //  模式状态
            vo.setStatus(rgvProtocol.getStatusType().desc);     //  状态
            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  工位1任务号
            vo.setStatus1(rgvProtocol.getStatusType1().desc);  // 工位1状态
            vo.setLoading1(rgvProtocol.getLoaded1()==1?"有物":"无物");  // 工位1有物
            vo.setRgvPos(rgvProtocol.getRgvPos());
            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"不在定位":"在定位");
            vo.setWorkNo2(rgvProtocol.getTaskNo2());  //  工位2任务号
            vo.setStatus2(rgvProtocol.getStatusType2().desc);  // 工位2状态
            vo.setLoading2(rgvProtocol.getLoaded2()==0?"无物":"有物");  // 工位2有物
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        Map<Integer, StaProtocol> station = devpThread.getStation();
        int[] basRgvList =new int[]{623,624,625,626};
            vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
            if (rgvProtocol.getAlarm() > 0) {
                BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
                vo.setAlarm(rgvErr==null?"未知异常":rgvErr.getErrName());
            }
        for (int rgvNo : basRgvList) {
            RgvStateTableVo vo = new RgvStateTableVo();
            vo.setRgvNo(rgvNo);    // 站点编号
            list.add(vo);
            StaProtocol staProtocol = station.get(rgvNo);
            if (null == staProtocol) { continue; }
            vo.setWorkNo1(staProtocol.getWorkNo().shortValue());   //  工作号
            vo.setStatusType(staProtocol.isAutoing()?"Y":"N");   //  自动
            vo.setStatus(staProtocol.isLoading()?"Y":"N");     //  有物
            vo.setEndRow(staProtocol.getEndRow());   //  小车目标位
            vo.setNowRow(staProtocol.getNowRow());   //  小车当前位   //左:1  中: 2  右:3   (面朝入料口)
            vo.setStatus11(staProtocol.isRGV1()?"Y":"N");   //  工作号
            vo.setStatus12(staProtocol.isRGV2()?"Y":"N");   //  工作号
            vo.setStatus13(staProtocol.isRGV3()?"Y":"N");   //  工作号
            vo.setStatus14(staProtocol.isRGV4()?"Y":"N");   //  工作号
            vo.setStatus15(staProtocol.isRGV5()?"Y":"N");   //  工作号
            vo.setStatus16(staProtocol.isRGV6()?"Y":"N");   //  工作号
//            vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高");     //高低库位
//            vo.setLocType1(devp.getDevNo()==102 ? "高" : "低");
        }
        return R.ok().add(list);
    }
src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
@@ -19,9 +19,15 @@
    // 任务号
    private Short workNo1 = 0;
    private short endRow;//小车目标位
    private short nowRow;//小车当前位   //左:1  中: 2  右:3   (面朝入料口)
    // 状态
    private String status1 = "-";
    private String status11 = "-";
    private String status12 = "-";
    private String status13 = "-";
    private String status14 = "-";
    private String status15 = "-";
    private String status16 = "-";
    // 有物
    private String loading1 = "-";
@@ -35,8 +41,13 @@
    // 任务号
    private Short workNo2 = 0;
    // 状态
    private String status2 = "-";
//    // 状态
//    private String status21 = "-";
//    private String status22 = "-";
//    private String status23 = "-";
//    private String status24 = "-";
//    private String status25 = "-";
//    private String status26 = "-";
    // 有物
    private String loading2 = "-";
src/main/java/com/zy/asrs/entity/BasJarMast.java
@@ -341,7 +341,10 @@
            case 5:
                return 4;
            case 6:
                return 10;
                if (this.status == 11) {
                    return 10;
                }
                return 11;
            case 9:
                return 17;
        }
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -5367,8 +5367,8 @@
                case 3:
                case 4:
                    signExecute = jarWrkMastExecuteGenerateJar(signExecute,sign);//硫化罐任务
                case 5:
                    signExecute = jarWrkMastExecuteGenerateBurial(signExecute, sign);//冷却槽取输送线
//                case 5:
//                    signExecute = jarWrkMastExecuteGenerateBurial(signExecute, sign);//冷却槽去输送线
                default:
                    jarWrkMastExecuteGenerateSte(signExecute,sign);//小车移动
//                    signExecute = jarWrkMastExecuteGenerateBurial(signExecute, sign);//冷却槽取输送线
@@ -6462,12 +6462,12 @@
                        if (jarWrkMastExecuteActionExecute5Three(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                        continue;
                    case 6:
                        if (jarWrkMastExecuteActionExecute6Three(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                        continue;
                }
            }
        } catch (Exception e){
@@ -7202,7 +7202,7 @@
                            return false;
                        }
                        //调车  == > 取货
                        if (!jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT25.id,SteTaskModeType.STE_WFFH_13,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){
                        if (!jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT26.id,SteTaskModeType.STE_WFFH_13,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){
                            log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign);
                        }
@@ -7927,29 +7927,91 @@
            switch (sign){
                case 1:
                    if (jarWrkMastExecuteGenerateSteComplete(sign)){
                        break;
                        return;
                    }
                case 2:
                    if (jarWrkMastExecuteGenerateJarComplete(sign)){
                        break;
                        return;
                    }
                case 3:
                    if (jarWrkMastExecuteGenerateRgvComplete1(sign)){
                        break;
                        return;
                    }
                case 4:
                    if (jarWrkMastExecuteGenerateRgvComplete2(sign)){
                        break;
                        return;
                    }
                default:
                    return;
                    break;
            }
            jarWrkMastExecuteGenerateDevComplete(sign);
        }catch (Exception e){
            log.error("JarWrkMastExecute任务完成报错!"+e);
        }
    }
    /**
     *  JarWrkMastExecute任务完成 ===>Devp   //完成
     */
    public synchronized boolean jarWrkMastExecuteGenerateDevComplete(Integer sign) {
        try{
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历入库口
                for (DevpSlave.Sta inSta : devp.getOutJarInSta()) {
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    // 判断是否满足条件
                    if (staProtocol.isAutoing()
                            && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && staProtocol.getWorkNo() == 0
                            && staProtocol.isPakMk()) {
                        for (DevpSlave.Jar jar : inSta.getJarList()) {
                            // 判断重复工作档
                            List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusListB(jar.getBurial(), new ArrayList<Integer>() {{
                                add(9);
                                add(11);
                            }});
                            if (basJarMastList.isEmpty()){
                                continue;
                            }
                            BasJarMast jarMastByWrkNo = basJarMastList.get(0);
                            jarMastByWrkNo.setStatus(jarMastByWrkNo.getStatusComplete(6));
                            StaProtocol staProtocolNew = new StaProtocol();
                            staProtocolNew.setSiteId(staProtocol.getSiteId());
                            staProtocolNew.setWorkNo(basJarMastList.get(0).getWrkNo().intValue());
                            staProtocolNew.setStaNo(jar.getEndStaNo());
                            devpThread.setPakMk(staProtocolNew.getSiteId(), false,7989);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolNew));
                            if (!result) {
                                LedErrorThreadUtil.ledErrorThread("更新plc站点信息失败!站点号:"+inSta.getStaNo(),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
                                throw new CoolException("更新plc站点信息失败");
                            }
                            if (!basJarMastService.updateById(jarMastByWrkNo)){
                                log.error("硫化区域分段任务完成异常,BasJarMast={},异常信息={}",JSON.toJSONString(jarMastByWrkNo),"更新basJarMast失败");
                                throw new CoolException("更新basJarMast失败");
                            }
                            break;
                        }
                    }
                }
            }
            return true;
        }catch (Exception e){
            log.error("JarWrkMastExecute任务完成 ===>Ste报错!"+e);
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务完成 ===>Ste   //完成
     */
    public synchronized boolean jarWrkMastExecuteGenerateSteComplete(Integer sign) {
src/main/java/com/zy/asrs/task/JarBurialEscalationScheduler.java
@@ -24,7 +24,7 @@
        int[] jarList =new int[]{1,2,3,4,5,6};
        for (int jarNo : jarList){
            try{
                ReturnT<String> result = jarBurialEscalationHandler.start(jarNo,10,11);
                ReturnT<String> result = jarBurialEscalationHandler.start(jarNo,10,17);
                if (result.getCode()==200){
                    break;
                }
@@ -34,7 +34,7 @@
        }
    }
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute2(){//上传开式冷却信号
        int[] jarList =new int[]{1,2,3,4,5,6};
        for (int jarNo : jarList){
src/main/java/com/zy/core/MainProcess.java
@@ -40,7 +40,7 @@
                    i++; if (i>5) i=0;
                    j++; if (j>5) j=0;
                    k++;
                    if (k>6) {
                    if (k>5) {
                        k=0;
                        l++;
                        if (l>=3) l=0;
src/main/java/com/zy/core/model/DevpSlave.java
@@ -21,6 +21,7 @@
    private List<Sta> inSta = new ArrayList<>();
    private List<Sta> inSta464 = new ArrayList<>();
    private List<Sta> outJarInSta = new ArrayList<>();
    private List<Sta> driveSta = new ArrayList<>();
    private List<Sta> inWmsSta = new ArrayList<>();
    private List<Sta> inSingleSta = new ArrayList<>();
@@ -54,6 +55,8 @@
        private Integer led;
        private List<Jar> JarList = new ArrayList<>();//硫化罐
    }
    @Data
@@ -86,4 +89,13 @@
    }
    @Data
    public static class Jar {
        private Integer jarNo;//jar编号
        private Integer endStaNo;//jar编号
        private Integer burial;//jar编号
    }
}
src/main/resources/application.yml
@@ -386,6 +386,30 @@
        staNo: 628
        row: 1
    # 大料箱 硫化完成 入库口1
    outJarInSta[0]:
      staNo: 627
      led: ${wcs-slave.led[1].id}
      JarList[0]:
        jarNo: 1
        endStaNo: 518
        burial: 5
      JarList[1]:
        jarNo: 2
        endStaNo: 518
        burial: 5
    # 大料箱 硫化完成 入库口2
    outJarInSta[1]:
      staNo: 628
      led: ${wcs-slave.led[1].id}
      JarList[0]:
        jarNo: 3
        endStaNo: 518
        burial: 6
      JarList[1]:
        jarNo: 4
        endStaNo: 518
        burial: 6
  # 条码扫描仪
  barcode[0]:
    id: 1
src/main/webapp/views/rgv.html
@@ -90,18 +90,17 @@
                    <thead>
                    <tr>
                        <th>RGV</th>
                        <th>模式</th>
                        <th>状态</th>
                        <th>任务号1</th>
                        <th>自动</th>
                        <th>有物</th>
                        <th>小车目标位</th>
                        <th>小车当前位</th>
                        <th>任务号</th>
                        <th>状态1</th>
                        <th>有物1</th>
                        <th>RGV位置</th>
                        <th>走行定位</th>
                        <th>任务号2</th>
                        <th>状态2</th>
                        <th>有物2</th>
                        <th>故障代码</th>
                        <th>故障描述</th>
                        <th>状态3</th>
                        <th>状态4</th>
                        <th>状态5</th>
                        <th>状态6</th>
                    </tr>
                    </thead>
                    <tbody>
@@ -114,13 +113,13 @@
            <table id="rgv-msg-table">
                <thead>
                <tr>
                    <th>RGV</th>
                    <th>工作号</th>
                    <th>状态</th>
                    <th>源站</th>
                    <th>目标站</th>
                    <th>源库位</th>
                    <th>目标库位</th>
<!--                    <th>RGV</th>-->
<!--                    <th>工作号</th>-->
<!--                    <th>状态</th>-->
<!--                    <th>源站</th>-->
<!--                    <th>目标站</th>-->
<!--                    <th>源库位</th>-->
<!--                    <th>目标库位</th>-->
<!--                    <th>走行速度(m/min)</th>-->
<!--                    <th>升降速度(m/min)</th>-->
<!--                    <th>叉牙速度(m/min)</th>-->
@@ -205,18 +204,18 @@
                <fieldset>
                    <legend>手动操作</legend>
                    <div class="button-group">
                        <button class="item" onclick="put()">取放货</button>
                        <button class="item" onclick="take()">取货</button>
                        <button class="item" onclick="stockMove()">放货</button>
<!--                        <button class="item" onclick="put()">取放货</button>-->
<!--                        <button class="item" onclick="take()">取货</button>-->
<!--                        <button class="item" onclick="stockMove()">放货</button>-->
<!--                        <button class="item" onclick="siteMove()">站到站</button>-->
                        <!--                <button class="item" onclick="bacOrigin()">回原点</button>-->
                        <!--                <button class="item" onclick="reverseOrigin()">反原点</button>-->
                        <!--                <button class="item" onclick="coorMove()">坐标移行</button>-->
                        <button class="item" onclick="taskComplete()">任务完成</button>
<!--                        <button class="item" onclick="taskComplete()">任务完成</button>-->
                        <!--                <button class="item" onclick="pause()">暂停</button>-->
                        <!--                <button class="item" onclick="boot()">启动</button>-->
                        <button class="item" onclick="clearCommand()">清除命令</button>
                        <button class="item" onclick="handleReset()">复位</button>
<!--                        <button class="item" onclick="clearCommand()">清除命令</button>-->
<!--                        <button class="item" onclick="handleReset()">复位</button>-->
                    </div>
                </fieldset>
            </div>
@@ -312,16 +311,15 @@
                        setVal(tr.children("td").eq(0), table[i-1].rgvNo);
                        setVal(tr.children("td").eq(1), table[i-1].statusType);
                        setVal(tr.children("td").eq(2), table[i-1].status);
                        setVal(tr.children("td").eq(3), table[i-1].workNo1);
                        setVal(tr.children("td").eq(4), table[i-1].status1);
                        setVal(tr.children("td").eq(5), table[i-1].loading1);
                        setVal(tr.children("td").eq(6), table[i-1].rgvPos);
                        setVal(tr.children("td").eq(7), table[i-1].walkPos);
                        setVal(tr.children("td").eq(8), table[i-1].workNo2);
                        setVal(tr.children("td").eq(9), table[i-1].status2);
                        setVal(tr.children("td").eq(10), table[i-1].loading2);
                        setVal(tr.children("td").eq(11), table[i-1].warnCode);
                        setVal(tr.children("td").eq(12), table[i-1].alarm);
                        setVal(tr.children("td").eq(3), table[i-1].endRow);
                        setVal(tr.children("td").eq(4), table[i-1].nowRow);
                        setVal(tr.children("td").eq(5), table[i-1].workNo1);
                        setVal(tr.children("td").eq(6), table[i-1].status11);
                        setVal(tr.children("td").eq(7), table[i-1].status12);
                        setVal(tr.children("td").eq(8), table[i-1].status13);
                        setVal(tr.children("td").eq(9), table[i-1].status14);
                        setVal(tr.children("td").eq(10), table[i-1].status15);
                        setVal(tr.children("td").eq(11), table[i-1].status16);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";