3b604eb218a3b167144cc6e5d9c86cd95e16157c..7a0381baabd865d8339b02af822f1c4ffe6bf1bc
2025-05-29 lsh
*
7a0381 对比 | 目录
2025-05-29 lsh
*
713324 对比 | 目录
2025-05-29 lsh
*
9eecd4 对比 | 目录
5个文件已修改
551 ■■■■ 已修改文件
src/main/java/com/zy/core/MainProcess.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/JarThread.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SteThread.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java
@@ -1,5 +1,6 @@
package com.zy.core;
import com.core.common.SpringUtils;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.core.properties.SystemProperties;
import lombok.Data;
@@ -24,6 +25,7 @@
    private MainServiceImpl mainService;
    // 所属线程
    private Thread thread;
    private Thread thread2;
    // 频率
    private int i = 0;
    private int j = 0;
@@ -34,110 +36,121 @@
     * =====>>  开始工作
     */
    public void start(){
        thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    i++; if (i>5) i=0;
                    j++; if (j>5) j=0;
                    k++;
                    if (k>5) {
                        k=0;
                        l++;
                        if (l>=3) l=0;
                    }
        thread = new Thread(this::cenAndDevRun);
        thread.start();
        thread2 = new Thread(this::jarRun);
        thread2.start();
    }
                    // 间隔
                    Thread.sleep(1000);
                    // 系统运行状态判断
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                        continue;
                    }
    private void cenAndDevRun() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                i++; if (i>5) i=0;
                    //初始化RGV地图
//                    mainService.initRgvMap();
                    //刷新RGV地图
//                    mainService.refreshRgvMap();
                    // 演示
//                    mainService.crnDemoOfLocMove1();
                    // 入出库模式切换函数
//                    mainService.ioConvert();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                // 间隔
                Thread.sleep(1000);
                    mainService.generateStoreWrkFile(); // 组托
                    mainService.generateStoreWrkFile464(); // 组托464
                    mainService.generateStoreWrkFileSingle(); // 组托  双工位单伸   小料箱
                    mainService.generateStoreWrkFileLarge(); // 组托  双工位单伸   大料箱
                // 系统运行状态判断
                if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                    continue;
                }
                // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                mainService.generateStoreWrkFile(); // 组托
                mainService.generateStoreWrkFile464(); // 组托464
                mainService.generateStoreWrkFileSingle(); // 组托  双工位单伸   小料箱
                mainService.generateStoreWrkFileLarge(); // 组托  双工位单伸   大料箱
//                    mainService.generateStoreWrkFile0(); // WMS入库
                    // 出库  ===>>  堆垛机出库站到出库站
                    mainService.crnStnToOutStn();
                    // 出库  ===>>  堆垛机出库站到出库站  工位2
                    mainService.crnStnToOutStnTwo();
                    // 入出库  ===>>  堆垛机入出库作业下发
                    mainService.crnIoExecute();
                    // 入出库  ===>>  堆垛机入出库作业下发  双工位堆垛机
                    mainService.crnIoExecuteTwo();
                    // 入出库  ===>>  堆垛机入出库作业下发  双工位堆垛机  拆分执行任务下发
                    mainService.crnIoExecuteTwoExecute(i);//Execute
                    if (i%2==0){
                        // 入库  ===>> 执行对工作档的完成操作
                        mainService.storeFinished();
                    }else {
                        // 入库  ===>> 执行对工作档的完成操作  工位2
                        mainService.storeFinishedTwo();
                    }
                // 出库  ===>>  堆垛机出库站到出库站
                mainService.crnStnToOutStn();
                // 出库  ===>>  堆垛机出库站到出库站  工位2
                mainService.crnStnToOutStnTwo();
                // 入出库  ===>>  堆垛机入出库作业下发
                mainService.crnIoExecute();
                // 入出库  ===>>  堆垛机入出库作业下发  双工位堆垛机
                mainService.crnIoExecuteTwo();
                // 入出库  ===>>  堆垛机入出库作业下发  双工位堆垛机  拆分执行任务下发
                mainService.crnIoExecuteTwoExecute(i);//Execute
                if (i%2==0){
                    // 入库  ===>> 执行对工作档的完成操作
                    mainService.storeFinished();
                }else {
                    // 入库  ===>> 执行对工作档的完成操作  工位2
                    mainService.storeFinishedTwo();
                }
//                    // 异常信息记录
//                    mainService.recErr();
                    // 入库  ===>> 空栈板初始化入库
                    mainService.storeEmptyPlt();
                    // 入库  ===>> 空栈板初始化入库  双工位单伸   小料箱
                    mainService.storeEmptyPltSingle();
                    // 入库  ===>> 空栈板初始化入库  双工位单伸   大料箱
                    mainService.storeEmptyPltLarge();
                    // 出库  ===>> 工作档信息写入led显示器
                    mainService.ledExecute();
                    // 其他   ===>> LED显示器复位,显示默认信息
                    mainService.ledReset();
                // 入库  ===>> 空栈板初始化入库
                mainService.storeEmptyPlt();
                // 入库  ===>> 空栈板初始化入库  双工位单伸   小料箱
                mainService.storeEmptyPltSingle();
                // 入库  ===>> 空栈板初始化入库  双工位单伸   大料箱
                mainService.storeEmptyPltLarge();
                // 出库  ===>> 工作档信息写入led显示器
                mainService.ledExecute();
                // 其他   ===>> LED显示器复位,显示默认信息
                mainService.ledReset();
                    /************************************JAR调度************************************/
                    mainService.stackingCompletionDriveTray();//分配硫化罐
                    mainService.stackingCompletionDriveTray2();//分配硫化罐
                    //Jar充电任务完成
                    mainService.jarChargeComplete();
                    //JarWrkMastExecute任务完成
                    mainService.jarWrkMastExecuteGenerateComplete(k);
                    //JarWrkMastExecute任务创建   //硫化罐
                    mainService.jarWrkMastExecuteGenerate(k);
                    //JarWrkMastExecute任务执行
                    mainService.jarWrkMastExecuteAction(k,l);
                    //Jar任务创建
                    mainService.jarMastGenerate();
                    //Jar任务完成
                    mainService.jarMastGenerateComplete();
                    //Jar充电任务创建
                    mainService.jarChargeGenerate();
                    /************************************JAR调度************************************/
                    mainService.signTrunBig();
                mainService.signTrunBig();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        thread.start();
        }
    }
    private void jarRun() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                // 间隔
                Thread.sleep(1000);
                // 系统运行状态判断
                if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                    continue;
                }
                k++;
                if (k>5) {
                    k=0;
                    l++;
                    if (l>=3) l=0;
                }
                /************************************JAR调度************************************/
                mainService.stackingCompletionDriveTray();//分配硫化罐
                mainService.stackingCompletionDriveTray2();//分配硫化罐
                //Jar充电任务完成
                mainService.jarChargeComplete();
                //JarWrkMastExecute任务完成
                mainService.jarWrkMastExecuteGenerateComplete(k);
                //JarWrkMastExecute任务创建   //硫化罐
                mainService.jarWrkMastExecuteGenerate(k);
                //JarWrkMastExecute任务执行
                mainService.jarWrkMastExecuteAction(k,l);
                //Jar任务创建
                mainService.jarMastGenerate();
                //Jar任务完成
                mainService.jarMastGenerateComplete();
                //Jar充电任务创建
                mainService.jarChargeGenerate();
                /************************************JAR调度************************************/
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    @PreDestroy
    public void shutDown(){
        if (thread != null) thread.interrupt();
        if (thread2 != null) thread2.interrupt();
    }
}
src/main/java/com/zy/core/thread/JarThread.java
@@ -40,6 +40,8 @@
    private JarSlave slave;
    private JarProtocol jarProtocol;
    private short heartBeatVal = 1;
    private boolean connectJar = false;
    public JarThread(JarSlave slave) {
        this.slave = slave;
@@ -48,7 +50,33 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        this.connect();
        connectJar = this.connect();
        while(!connectJar){
            try {
                connectJar = this.connect();
                Thread.sleep(100);
            } catch (Exception e){
            }
        }
        // 启动线程自动重连
        new Thread(this::jarConnect).start();
        // 启动读数据线程
        new Thread(this::readStatusJar).start();
        // 启动任务下发线程
        new Thread(this::taskIssued).start();
    }
    /**
     * 任务下发
     */
    private void taskIssued() {
        while (true) {
            try {
                int step = 1;
@@ -59,7 +87,7 @@
                switch (step) {
                    // 读数据
                    case 1:
                        readStatus();
//                        readStatus();
                        break;
                    // 写数据 ID+目标站
                    case 2:
@@ -70,14 +98,55 @@
                }
                // 心跳
//                heartbeat();
                Thread.sleep(500);
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("JAR写线程异常"+e.getMessage());
//                e.printStackTrace();
            }
        }
    }
    private void jarConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectJar){
                    try {
                        connectJar = this.connect();
                        Thread.sleep(100);
                    } catch (Exception e){
                    }
                }
            } catch (Exception e) {
                log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSte();
//                e.printStackTrace();
            }
        }
    }
    private void readStatusJar() {
        while (true) {
            try {
                Thread.sleep(50);
//                System.out.println("读线程"+ slave.getId());
                readStatus();
            } catch (Exception e) {
                log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSte();
//                e.printStackTrace();
            }
        }
    }
    /**
     * 初始化堆垛机状态
     */
src/main/java/com/zy/core/thread/RgvThread.java
@@ -43,6 +43,8 @@
     * 工位1复位信号
     */
    private boolean resetFlag1 = false;
    private boolean connectRgv = false;
    /**
     * 工位2复位信号
     */
@@ -55,7 +57,70 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        this.connect();
        connectRgv = this.connect();
        while(!connectRgv){
            try {
                connectRgv = this.connect();
                Thread.sleep(100);
            } catch (Exception e){
            }
        }
        // 启动线程自动重连
        new Thread(this::rgvConnect).start();
        // 启动读数据线程
        new Thread(this::readStatusRgv).start();
        // 启动任务下发线程
        new Thread(this::taskIssued).start();
    }
    private void rgvConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectRgv){
                    try {
                        connectRgv = this.connect();
                        Thread.sleep(100);
                    } catch (Exception e){
                    }
                }
            } catch (Exception e) {
                log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initRgv();
//                e.printStackTrace();
            }
        }
    }
    private void readStatusRgv() {
        while (true) {
            try {
                Thread.sleep(50);
                readStatus();
            } catch (Exception e) {
                log.error("RGV读线程异常"+e.getMessage());
                log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initRgv();
//                e.printStackTrace();
            }
        }
    }
    /**
     * 任务下发
     */
    private void taskIssued() {
        while (true) {
            try {
                int step = 1;
@@ -66,7 +131,7 @@
                switch (step) {
                    // 读数据
                    case 1:
                        readStatus();
//                        readStatus();
                        break;
                    // 工位1、2写入数据
                    case 2:
@@ -123,8 +188,10 @@
                    default:
                        break;
                }
                Thread.sleep(500);
                Thread.sleep(200);
            } catch (Exception e) {
                log.error("RGV写线程异常"+e.getMessage());
//                e.printStackTrace();
            }
@@ -135,23 +202,27 @@
     * 初始化RGV状态
     */
    private void initRgv() {
        if (null == rgvProtocol) {
            rgvProtocol = new RgvProtocol();
        try{
            if (null == rgvProtocol) {
                rgvProtocol = new RgvProtocol();
            }
            rgvProtocol.setMode((short) -1);
            rgvProtocol.setStatus((short)-1);
            rgvProtocol.setTaskNo1((short)0);
            rgvProtocol.setStatus1((short)-1);
            rgvProtocol.setLoaded1((short)0);
            rgvProtocol.setWalkPos((short)0);
            rgvProtocol.setRgvPos((short)0);
            rgvProtocol.setTaskNo2((short)0);
            rgvProtocol.setStatus2((short)-1);
            rgvProtocol.setLoaded2((short)0);
            rgvProtocol.setAlarm((short)0);
            rgvProtocol.setxSpeed((short) 0);
            rgvProtocol.setxDistance((short) 0);
            rgvProtocol.setxDuration((short) 0);
        }catch (Exception e){
            log.error("初始化RGV失败"+e.getMessage());
        }
        rgvProtocol.setMode((short) -1);
        rgvProtocol.setStatus((short)-1);
        rgvProtocol.setTaskNo1((short)0);
        rgvProtocol.setStatus1((short)-1);
        rgvProtocol.setLoaded1((short)0);
        rgvProtocol.setWalkPos((short)0);
        rgvProtocol.setRgvPos((short)0);
        rgvProtocol.setTaskNo2((short)0);
        rgvProtocol.setStatus2((short)-1);
        rgvProtocol.setLoaded2((short)0);
        rgvProtocol.setAlarm((short)0);
        rgvProtocol.setxSpeed((short) 0);
        rgvProtocol.setxDistance((short) 0);
        rgvProtocol.setxDuration((short) 0);
    }
    @Override
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -134,6 +134,9 @@
        add(696);add(697);add(698);add(699);
    }};
    private boolean connectDev = false;
    /**
     * 条码数量
     */
@@ -167,10 +170,85 @@
        }
    }
    /**
     * 初始化站点状态
     */
    private void initSite() {
        try{
            ArrayList<Integer> staNos = getStaNo();
            // 站点编号
            for (Integer siteId : staNos) {
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setSiteId(siteId);
                staProtocol.setWorkNo(0);    // ID
                staProtocol.setAutoing(false);      // 自动
                staProtocol.setLoading(false);      // 有物
                staProtocol.setInEnable(false);     // 可入
                staProtocol.setOutEnable(false);    // 可出
                staProtocol.setEmptyMk(false);      // 空板信号
                staProtocol.setStaNo(0);     // 目标站
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
                }
            }
        } catch (Exception e){
            try{
                log.error(e.getMessage());
            } catch (Exception e1){
            }
            log.error("初始化站点状态异常");
        }
    }
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        connect();
        connectDev = connect();
        while(!connectDev){
            try {
                connectDev = this.connect();
                Thread.sleep(100);
            } catch (Exception e){
            }
        }
        // 启动线程自动重连
        new Thread(this::devConnect).start();
        new Thread(this::readStatusDev).start();
        new Thread(this::writeStatusDev).start();
    }
    private void devConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectDev){
                    try {
                        connectDev = this.connect();
                        Thread.sleep(100);
                    } catch (Exception e){
                    }
                }
            } catch (Exception e) {
                log.info("dev连接失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSite();
//                e.printStackTrace();
            }
        }
    }
    private void writeStatusDev() {
        while (true) {
            try {
                int step = 1;
@@ -181,7 +259,7 @@
                switch (step) {
                    // 读数据
                    case 1:
                        read();
//                        read();
                        break;
                    // 写数据 ID+目标站
                    case 2:
@@ -220,10 +298,34 @@
//                heartbeat();
                Thread.sleep(400);
            } catch (Exception e) {
                e.printStackTrace();
//                e.printStackTrace();
                try{
                    log.error("dev写线程异常"+e.getMessage());
                } catch (Exception e1){
                }
                log.error("DEV数据写入线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            }
        }
    }
    private void readStatusDev() {
        while (true) {
            try {
                Thread.sleep(50);
                read();
            } catch (Exception e) {
                log.error("Dev数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSite();
            }
        }
    }
    @Override
src/main/java/com/zy/core/thread/SteThread.java
@@ -44,6 +44,7 @@
    private SteProtocol steProtocol;
    private short heartBeatVal = 1;
    private boolean resetFlag = false;
    private boolean connectSte = false;
    public SteThread(SteSlave slave) {
        this.slave = slave;
@@ -52,7 +53,31 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        this.connect();
        connectSte = this.connect();
        while(!connectSte){
            try {
                connectSte = this.connect();
                Thread.sleep(100);
            } catch (Exception e){
            }
        }
        // 启动线程自动重连
        new Thread(this::steConnect).start();
        // 启动读数据线程
        new Thread(this::readStatusSte).start();
        // 启动任务下发线程
        new Thread(this::taskIssued).start();
    }
    /**
     * 任务下发
     */
    private void taskIssued() {
        while (true) {
            try {
                int step = 1;
@@ -63,7 +88,7 @@
                switch (step) {
                    // 读数据
                    case 1:
                        readStatus();
//                        readStatus();
                        break;
                    // 写入数据
                    case 2:
@@ -74,14 +99,55 @@
                }
                // 心跳
//                heartbeat();
                Thread.sleep(500);
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("STE写线程异常"+e.getMessage());
//                e.printStackTrace();
            }
        }
    }
    private void steConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectSte){
                    try {
                        connectSte = this.connect();
                        Thread.sleep(100);
                    } catch (Exception e){
                    }
                }
            } catch (Exception e) {
                log.error("ste连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSte();
//                e.printStackTrace();
            }
        }
    }
    private void readStatusSte() {
        while (true) {
            try {
                Thread.sleep(50);
//                System.out.println("读线程"+ slave.getId());
                readStatus();
            } catch (Exception e) {
                log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                initSte();
//                e.printStackTrace();
            }
        }
    }
    /**
     * 初始化堆垛机状态
     */