#
lsh
2023-03-03 76d3fff7c27d020fd7110e4a5e84cc87e3fe7e43
#
10个文件已修改
224 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/SiteController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/SteTaskModeType.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/SteProtocol.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SteThread.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -63,8 +63,8 @@
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            Map<String, Object> map1 = new HashMap<>();
            map1.put("floor", 1);
            map1.put("modeVal", devpThread.charge0);
            map1.put("modeDesc", devpThread.charge0?"充电中":"关闭");
            map1.put("modeVal", !devpThread.charge0);
            map1.put("modeDesc", !devpThread.charge0?"充电中":"关闭");
            res.add(map1);
            Map<String, Object> map2 = new HashMap<>();
            map2.put("floor", 2);
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -91,4 +91,6 @@
    WrkMast selectPakoutWorkingByGroupLoc(@Param("locNos")List<String> locNos);
    List<WrkMast> selectAll(@Param("staNo")Integer staNo);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.*;
@@ -1835,6 +1836,22 @@
                            }
                        }
                        // 移库 ===>> 堆垛机搬至目标库位组 完成
                    } else if (wrkMast.getWrkSts() == 16) {
                        // 16.吊车出库中 ==> 17.出库完成
                        wrkMast.setWrkSts(17L);
                        Date now = new Date();
                        wrkMast.setCrnEndTime(now);
                        wrkMast.setModiTime(now);
                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                        Integer outCrnNo = locMastService.getOutCrnNo(locMast);
                        wrkMast.setCrnNo(outCrnNo);
                        // 修改成功后复位堆垛机
                        if (wrkMastMapper.updateById(wrkMast) > 0) {
                            // 堆垛机复位
                            crnThread.setResetFlag(true);
                        } else {
                            News.error("修改工作档状态 16.吊车出库中 ==> 17.出库完成 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                    }
                }
            }
@@ -1879,15 +1896,17 @@
                                } else {
                                    steThread.setResetFlag(true);
                                }
                            } else if (wrkCharge.getWrkSts() == 29) {
                                // 29.开始充电 ===>> 30.完成充电
                                wrkCharge.setWrkSts(30L);
                                if (!wrkChargeService.updateById(wrkCharge)) {
                                    News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo());
                                } else {
                                    steThread.setResetFlag(true);
                                }
                            } else if (wrkCharge.getWrkSts() == 32) {
                            }
//                            else if (wrkCharge.getWrkSts() == 29) {
//                                // 29.开始充电 ===>> 30.完成充电
//                                wrkCharge.setWrkSts(30L);
//                                if (!wrkChargeService.updateById(wrkCharge)) {
//                                    News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo());
//                                } else {
//                                    steThread.setResetFlag(true);
//                                }
//                            }
                            else if (wrkCharge.getWrkSts() == 32) {
                                // 32.小车走行 ===>> 33.小车待搬
                                wrkCharge.setWrkSts(33L);
                                if (!wrkChargeService.updateById(wrkCharge)) {
@@ -2486,7 +2505,7 @@
                    SteChargeType steCharge = null;
                    do {
                        String locNo;
                        if (!devpThread.charge0) {
                        if (devpThread.charge0) {
                            SteChargeType first = SteChargeType.FIRST;
                            locNo = first.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null
@@ -2582,6 +2601,7 @@
            return;
        }
        if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) {
            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记
            wrkCharge.setWrkSts(30L);
            wrkChargeMapper.updateById(wrkCharge);
            return;
@@ -2644,7 +2664,7 @@
                    SteCommand steCommand = new SteCommand();
                    steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号
                    steCommand.setTaskNo(wrkCharge.getWrkNo()); // 工作号
                    steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN);  // 去右端
                    steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN);  // 去右端
                    steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
                    steCommand.setBay(steProtocol.getBay());
@@ -2675,6 +2695,19 @@
                    wrkCharge.setWrkSts(29L);
                    if (!wrkChargeService.updateById(wrkCharge)) {
                        News.error("修改充电任务状态 28.充电就绪 ===>> 29.开始充电 失败!!,工作号={}", wrkCharge.getWrkNo());
                    }
                }
            } else if (wrkCharge.getWrkSts() == 29) {
                Float idle2 = steProtocol.isIdle2();
                String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(1).getChargeLine();
                if (idle2<(Float.parseFloat(chargeLine)+2)){
                    MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 666));//充电标记
                }else if (idle2 > 70f){
                    MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记
                    // 29.开始充电 ===>> 30.完成充电
                    wrkCharge.setWrkSts(30L);
                    if (!wrkChargeService.updateById(wrkCharge)) {
                        News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo());
                    }
                }
            }
@@ -3201,6 +3234,63 @@
        }
    }
    /**
     * 出入库模式切换
     */
    public synchronized void outAndIn() {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    Thread.sleep(500);
                    boolean a=true,b=true;
                    List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo());
                    if (Cools.isEmpty(wrkMasts)){
                        b=false;
                    }else {
                        for (WrkMast wrkMast:wrkMasts){
                            if (wrkMast.getSourceStaNo()!=wrkMast.getStaNo()){
                                a=false;
                                break;
                            }
                        }
                    }
                    switch (inSta.getStaNo()) {
                        case 102://1F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10));
                            }
                            break;
                        case 202://2F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20));
                            }
                            break;
                        case 302://3F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30));
                            }
                            break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -22,6 +22,8 @@
    private MainServiceImpl mainService;
    // 所属线程
    private Thread thread;
    // 频率
    private int i = 0;
    /**
     * =====>>  开始工作
@@ -70,6 +72,13 @@
                    // 穿梭车 ===>> 小车电量检测充电
                    mainService.loopSteCharge();
                    mainService.executeSteCharge();
                    //出入库模式
                    i++;
                    if (i > 1) {
                        mainService.outAndIn();
                        i = 0;
                    }
                    // 间隔
                    Thread.sleep(200);
                    // 穿梭车 ===>> 小车复位至待机库位
src/main/java/com/zy/core/enums/SteTaskModeType.java
@@ -96,9 +96,9 @@
    public static SteTaskModeType findOriginByLoc(Integer row) {
        if (Utils.FIRST_GROUP_ROW_LIST.contains(row)) {
            return SteTaskModeType.BACK_ORIGIN;
        } else if (Utils.SECOND_GROUP_ROW_LIST.contains(row)) {
            return SteTaskModeType.GO_ORIGIN;
        } else if (Utils.SECOND_GROUP_ROW_LIST.contains(row)) {
            return SteTaskModeType.BACK_ORIGIN;
        } else {
            throw new CoolException("解析穿梭车原点定位失败");
        }
src/main/java/com/zy/core/model/protocol/SteProtocol.java
@@ -536,6 +536,11 @@
        }
    }
    // 小车电量
    public Float isIdle2() {
        return this.charge;
    }
    // 是否处于报警状态
    public Boolean isAlarm() {
        return this.alarm > 1;
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -226,7 +226,7 @@
            News.error("堆垛机写入命令为空");
            return false;
        }
        siemensNet.Write("DB100.18", (short) 0);
//        siemensNet.Write("DB100.18", (short) 0);
//        convertRow(command);
        command.setCrnNo(slave.getId());
        short[] array = new short[10];
@@ -258,11 +258,9 @@
        OperateResult result = siemensNet.Write("DB100.0", array);
        if (command.getAckFinish() == 0) {
            if (result.IsSuccess) {
                short commandFinish = 1;
                Thread.sleep(300);
                result = siemensNet.Write("DB100.18", commandFinish);
            }
        }
        try {
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.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.core.DevpThread;
@@ -75,6 +76,10 @@
                    // 写数据 ID+目标站
                    case 2:
                        write((StaProtocol)task.getData());
                        break;
                    // 出入库模式
                    case 3:
                        write3((int)task.getData());
                        break;
                    default:
                        break;
@@ -150,10 +155,10 @@
        //读条码
        Thread.sleep(100);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.150",(short)31);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.150",(short)24);
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeSize; i++) {
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*16,15, "UTF-8");
            for (int i = 0; i <= barcodeSize; i++) {
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                    barcodeThread.setBarcode(barcode);
@@ -163,12 +168,17 @@
        // 充电信号位
        Thread.sleep(50);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.128", (short)1);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.109", (short)1);
        if (result3.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, 0, 1);
            charge0 = status[0];
            charge1 = status[1];
            charge2 = status[2];
        }
        // 充电信号位
        Thread.sleep(50);
        OperateResultExOne<byte[]> result31 = siemensS7Net.Read("DB100.201", (short)1);
        if (result3.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result31.Content, 0, 1);
            charge1 = status[0];
        }
        // 外形检测 - 102
@@ -225,6 +235,35 @@
//            News.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
        }
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write3(int outAndIn) throws InterruptedException{
        if (Cools.isEmpty(outAndIn)) {
            return;
        }
        if (outAndIn==666){
            siemensS7Net.Write("DB100.200", (short) 1);
        }else if (outAndIn==999){
            siemensS7Net.Write("DB100.200", (short) 0);
        }else {
            String Db=null;
            if (outAndIn<20){
                Db="DB100.180";
            }else if (outAndIn<30){
                Db="DB100.182";
            }else {
                Db="DB100.184";
            }
            if (outAndIn == 11 || outAndIn == 21 || outAndIn == 31){
                siemensS7Net.Write(Db, (byte) 1);    // 入库
            }else if (outAndIn == 12 || outAndIn == 22 || outAndIn == 32){
                siemensS7Net.Write(Db, (byte) 2);    // 出库
            }else if (outAndIn == 10 || outAndIn == 20 || outAndIn == 30){
                siemensS7Net.Write(Db, (byte) 0);    // 出库
            }
        }
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
src/main/java/com/zy/core/thread/SteThread.java
@@ -11,12 +11,16 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasSte;
import com.zy.asrs.entity.BasSteOpt;
import com.zy.asrs.entity.WrkCharge;
import com.zy.asrs.service.BasSteOptService;
import com.zy.asrs.service.BasSteService;
import com.zy.common.model.enums.WrkChargeType;
import com.zy.core.DevpThread;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.enums.SteStatusType;
import com.zy.core.model.SteSlave;
@@ -175,7 +179,13 @@
                steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 38));
                steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 40));
                steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42));
                steProtocol.setChargeStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 44));
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                if (!devpThread.charge0 || devpThread.charge1){
                    steProtocol.setChargeStatus((short)1);
                }else {
                    steProtocol.setChargeStatus((short)0);
                }
                OutputQueue.STE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
@@ -286,6 +296,21 @@
            News.error("穿梭车写入命令为空");
            return false;
        }
        //判断小车是否在充电
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        if (!devpThread.charge0 || devpThread.charge1){
            // led 异常显示
            LedThread ledThread1 = (LedThread) SlaveConnection.get(SlaveType.Led, 1);
            LedThread ledThread2 = (LedThread) SlaveConnection.get(SlaveType.Led, 1);
            LedThread ledThread3 = (LedThread) SlaveConnection.get(SlaveType.Led, 1);
            if (ledThread1 != null && ledThread2 != null && ledThread3 != null) {
                MessageQueue.offer(SlaveType.Led, 1, new Task(3, "穿梭车正在充电"));
                MessageQueue.offer(SlaveType.Led, 2, new Task(3, "穿梭车正在充电"));
                MessageQueue.offer(SlaveType.Led, 3, new Task(3, "穿梭车正在充电"));
            }
            News.error("穿梭车正在充电");
            return false;
        }
        command.setSteNo(slave.getId());
        OperateResult result = null;
        // 开始任务
src/main/resources/application.yml
@@ -183,21 +183,21 @@
   # LED1
  led[0]:
    id: 1
    ip: 10.10.10.205
    ip: 10.10.10.231
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 102
  # LED1
  led[1]:
    id: 2
    ip: 10.10.10.207
    ip: 10.10.10.232
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 202
  # LED1
  led[2]:
    id: 3
    ip: 10.10.10.206
    ip: 10.10.10.233
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 302