#
1
2 天以前 68242c8f3acc051368eeb1246b2fb6327a783bfc
#
6个文件已修改
139 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/rgv.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -11,8 +11,10 @@
import com.zy.asrs.domain.vo.RgvStateTableVo;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvErr;
import com.zy.asrs.entity.BasRgvMap;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.BasRgvErrMapper;
import com.zy.asrs.mapper.BasRgvMapMapper;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
@@ -62,7 +64,8 @@
    private MainServiceImpl mainService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private BasRgvMapMapper basRgvMapMapper;
    @ManagerAuth(memo = "解锁小车")
    @PostMapping("/lock")
    public R lock(CrnOperatorParam param){
@@ -88,13 +91,14 @@
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) continue;
            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
            vo.setStatusType(rgvProtocol.modeType.desc);   // 模式状态
            vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 状态
            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 工位1任务号
            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 工位1状态
            vo.setLoading1(rgvProtocol.getLoaded1() ? "有物" : "无物"); // 工位1有物
            vo.setRgvPos(rgvProtocol.getRgvPos());
            vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0);
            vo.setRgvPos1(rgvProtocol.getRgvPosI2());
            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "在定位" : "不在定位");
            vo.setPakMk(rgvThread.isPakMk() ? "无锁" : "锁定");
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1079,7 +1079,7 @@
            //mark - 3 - ....
            this.locToLoc(crn, crnProtocol,mark);
            //预调度
            this.crnRebackHp(crnProtocol, crnThread);
//            this.crnRebackHp(crnProtocol, crnThread);
        }
//        News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成");
@@ -1102,6 +1102,9 @@
                case 5: x =18; break;
            }
            if(crnProtocol.getCrnNo() != 5){
                return;
            }
            // 已经存在吊车执行任务时,则过滤3,12
            if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
                return;
@@ -2351,6 +2354,9 @@
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                    News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                }
//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
//                    News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                }
            }
        }
    }
@@ -2954,52 +2960,18 @@
                    log.error("{}号RGV尚未在数据库进行维护!2", rgvSlave.getRgvNo());
                    continue;
                }
                // 只有当RGV空闲、自动,工位一无物//rgv可用
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO
                    && !rgvProtocol.isLoaded1ing()  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接
                    && rgvProtocol.getTaskNo1()==0
                        && !rgvProtocol.isLoaded2ing()
                        && rgvProtocol.getTaskNo2()==0
                        &&rgvThread.isPakMk()
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    Integer rgvNoOther = basRgvMap.getRgvNoOther((int) rgvProtocol.getRgvNo());
                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNoOther);
                    RgvProtocol rgvProtocolOther = rgvThreadOther.getRgvProtocol();
                    if (rgvProtocolOther == null) {
                Integer site = rgvProtocol.getRgvNo() == 1 ? rgvProtocol.getRgvPosI1() : rgvProtocol.getRgvPosI2();
                if (site == 0) {
                        continue;
                    }else {
                        rgvProtocolOther = rgvProtocolOther.clone();
                    }
                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE
                        && rgvProtocolOther.getModeType() == RgvModeType.AUTO
                        && !rgvProtocolOther.isLoaded1ing()
                        && rgvProtocolOther.getTaskNo1()==0
                        && !rgvProtocolOther.isLoaded2ing()
                        && rgvProtocolOther.getTaskNo2()==0
                        &&rgvThreadOther.isPakMk()
                    ){
                        //对工作档进行判断
                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                        if (rgvProtocol.getTaskNo1() >0 && rgvProtocol.getTaskNo1()<=9000){
                            WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
                            rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2366");
                        }else if (rgvProtocol.getTaskNo1() == 0){
                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2366");
                rgvSlave.setNowRoute(site); // 更新小车当前位置站点号
                if (!basRgvMapService.updateById(rgvSlave)) {
                    log.error("小车更新地图失败");
                        }
                    }
                }
            }
        }catch (Exception e){
            log.error("4109行执行小车初始化任务下发失败");
            log.error("4109行"+e);
            log.error("小车更新地图失败");
        }
    }
@@ -3330,6 +3302,7 @@
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    basRgvMapService.updateById(basRgvMap);
                    Integer workNo = 0;
                    if(rgvProtocol.getTaskNo2() > 9999|| rgvProtocol.getTaskNo1() > 9999){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1() : rgvProtocol.getTaskNo2();
@@ -3396,6 +3369,7 @@
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    basRgvMapService.updateById(basRgvMap);
                    Integer workNo = 0;
                    if(basRgv.getPakToCrn().equals("1")){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1():rgvProtocol.getTaskNo2();  //正常情况出库放货优先工位1放
@@ -3491,11 +3465,11 @@
                basRgvService.updateById(basRgv);
                rgvThread.setPakMk(true);
            }
            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
            if(wrkMastStaPakingNum.size() <1){
                basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复
                basRgvService.updateById(basRgv);
            }
//            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
//            if(wrkMastStaPakingNum.size() <1){
//                basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复
//                basRgvService.updateById(basRgv);
//            }
        }
    }
src/main/java/com/zy/core/thread/LedThread.java
@@ -106,7 +106,6 @@
    private void reset() {
        commandList = null;
        stringBuffer.delete(0, stringBuffer.length());
    }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -448,6 +448,8 @@
        OperateResultExOne<byte[]> result4 = null;//1054-1079
        OperateResultExOne<byte[]> result5 = null;//1080-1110
        OperateResultExOne<byte[]> resultErr = null;
        OperateResultExOne<byte[]> resultAlarm = null;
        if(staNoSize == 102){
            result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028
            result2 = siemensS7Net.Read("DB101.0", (short) (1268));//1029-1037
@@ -455,11 +457,13 @@
            result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079
            result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110
            resultErr = siemensS7Net.Read("DB3.0", (short) (536));
//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (220));
        }else{
            result1 = siemensS7Net.Read("DB200.0", (short) (3000));//2001-2030
            result2 = siemensS7Net.Read("DB201.0", (short) (720));//2031-2037
            result3 = siemensS7Net.Read("DB400.0", (short) (600));//4001-4006
            resultErr = siemensS7Net.Read("DB3.0", (short) (354));
//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (126));
        }
@@ -562,6 +566,25 @@
                    staProtocol.setInEnable(status1[2]); // 可入
                    staProtocol.setOutEnable(status1[2]);// 可出
                    staProtocol.setErr(status1[6]);
//                    boolean[] statusAlarm = siemensS7Net.getByteTransform().TransBool(resultAlarm.Content, 2*i, 1);
//                    //报警
//                    staProtocol.setPassTimeOut(statusAlarm[0]);
//                    staProtocol.setObjectNoIdError(statusAlarm[1]);
//                    staProtocol.setIdNoObjectError(statusAlarm[2]);
//                    staProtocol.setLmfrError(statusAlarm[3]);
//                    staProtocol.setLiftError(statusAlarm[4]);
//                    staProtocol.setDlfrError(statusAlarm[5]);
//                    staProtocol.setDmfrError(statusAlarm[6]);
//                    staProtocol.setVfdError(statusAlarm[7]);
//                    staProtocol.setSrvError(statusAlarm[8]);
//                    staProtocol.setRes1(statusAlarm[9]);
//                    staProtocol.setRes2(statusAlarm[10]);
//                    staProtocol.setRes3(statusAlarm[11]);
//                    staProtocol.setCommunicationTimeOut(statusAlarm[12]);
//                    staProtocol.setParameterIncompleteError(statusAlarm[13]);
//                    staProtocol.setDataNotClear(statusAlarm[14]);
//                    staProtocol.setSetParameterError(statusAlarm[15]);
                    //报警
                    staProtocol.setPassTimeOut(statusErr[0]);
@@ -669,7 +692,7 @@
        OperateResultExOne<byte[]> reasultBarcode3 = siemensS7Net.Read("DB102.2780", (short) 4);//1103
        OperateResultExOne<byte[]> reasultBarcode4 = siemensS7Net.Read("DB201.344", (short) 4);//2037
        OperateResultExOne<byte[]> reasultBarcode5 = siemensS7Net.Read("DB400.112", (short) 4);//4001
        OperateResultExOne<byte[]> reasultBarcode6 = siemensS7Net.Read("DB201.716", (short) 4);//4001
        OperateResultExOne<byte[]> reasultBarcode6 = siemensS7Net.Read("DB201.716", (short) 4);//2033
        if(barcodeList.get(0) == 0){
            if(reasultBarcode1.IsSuccess){
src/main/webapp/views/console.html
@@ -56,8 +56,8 @@
                    <span class="machine-put-flag">入库</span>
                    <span class="machine-take-flag">出库</span>
                    <span class="machine-stock-move-flag">库到库</span>
                    <span class="machine-site-move-flag">站到站</span>
                    <span class="machine-p-move-flag">PToP</span>
<!--                    <span class="machine-site-move-flag">站到站</span>-->
<!--                    <span class="machine-p-move-flag">PToP</span>-->
                    <span class="machine-error-flag">异常</span>
                    <span class="machine-auto-flag">自动</span>
                    <span class="machine-unauto-flag">非自动/手动</span>
@@ -689,11 +689,16 @@
        }
    }
    // 小车偏移动画
    function carAnimate(id, target) {
        // debugger
        var targetTop = 0;
        if (id === 1 || id === '1' || id === '2' || id === 2 || id === '3' || id === 3 ||id === '4' || id === 4) {
        // 确保 target 是有效的站点
        if (target === -1) {
            console.log("站点无效,跳过动画");
            return; // 跳过无效站点
        }
        // 计算目标站点的 top 值
            switch (target) {
                case 1004:
                    targetTop += 84;
@@ -732,7 +737,7 @@
                    targetTop += 128;
                    break;
                case 2009:
                    targetTop += 19.;
                targetTop += 190;
                    break;
                case 2012:
                    targetTop += 240;
@@ -756,15 +761,23 @@
                    targetTop += 580;
                    break;
                default:
                    return;
            }
        } else {
            return;
                return; // 无效的站点,跳过
        }
        $("#site-" + id).animate({top: targetTop + 'px'}, 0);
        // 获取当前站点位置
        var currentTop = $("#site-" + id).position().top;
        // 计算两个站点之间的距离
        var distance = Math.abs(targetTop - currentTop);
        // 计算动画时间,距离越远时间越长,最小时间为500ms,最大为2000ms
        var duration = Math.max(500, Math.min(distance / 2, 2000));
        // 执行动画,平滑地移动到目标位置
        $("#site-" + id).animate({ top: targetTop + 'px' }, duration);
    }
    // 检查 URL 中是否包含 fullscreen=true 参数
    function checkFullscreen() {
        const urlParams = new URLSearchParams(window.location.search);
src/main/webapp/views/rgv.html
@@ -120,7 +120,7 @@
                    <th>工位1工作号</th>
                    <th>工位2工作号</th>
                    <th>状态</th>
                    <th>走行目标站</th>
                    <th>走行目标点位</th>
                    <th>工位1目标站</th>
                    <th>工位2目标站</th>
                    <!--                    <th>源库位</th>-->
@@ -341,7 +341,7 @@
                        setVal(tr.children("td").eq(2), table[i-1].workNo1);
                        setVal(tr.children("td").eq(3), table[i-1].status1);
                        setVal(tr.children("td").eq(4), table[i-1].loading1);
                        setVal(tr.children("td").eq(5), table[i-1].rgvPos1);
                        setVal(tr.children("td").eq(5), table[i-1].rgvPos);
                        // setVal(tr.children("td").eq(6), table[i-1].walkPos);
                        // setVal(tr.children("td").eq(8), table[i-1].workNo2);
                        // setVal(tr.children("td").eq(9), table[i-1].status2);