dubin
2025-08-28 6d11821ff01c5bfb1c07153772a8efce774ab5d5
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -7,12 +7,9 @@
import com.alibaba.fastjson.JSON;
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.entity.BasRgvMap;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.BasRgvMapService;
import com.zy.common.utils.News;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
@@ -28,7 +25,10 @@
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -48,15 +48,11 @@
//
//    }};
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(121);add(122);add(123);add(124);add(125);
        add(126);
        add(221);add(222);add(223);add(224);add(225);
        add(226);add(227);add(228);add(229);add(230);
        add(231);
        add(411);add(412);add(413);add(414);
        add(101);add(102);add(103);
        add(104);add(105);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
    /*public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(101);add(102);add(103);
        add(104);add(105);add(106);add(107);
        add(108);add(109);
@@ -66,35 +62,35 @@
        add(208);add(209);add(210);add(211);
        add(401);add(402);add(403);add(404);
    }};
    }};*/
    public static final ArrayList<Integer> BarcodeList1 = new ArrayList<Integer>() {{
        add(1); add(2);add(3);add(4);add(5);
    }};
    public static final ArrayList<Integer> BarcodeList2 = new ArrayList<Integer>() {{
   /* public static final ArrayList<Integer> BarcodeList2 = new ArrayList<Integer>() {{
        add(6);add(7);add(8);add(9);
        add(10); add(11); add(12); add(13);
    }};
    public static final ArrayList<Integer> staNosErrList2 = new ArrayList<Integer>() {{
        add(101); add(104);add(106);add(108);
        add(202);add(204);add(207);add(210);
    }};
    }};*/
    /*public static final ArrayList<Integer> staNosErrList2 = new ArrayList<Integer>() {{
        add(102); add(105);add(107);add(109);
        add(203);add(205);add(208);add(211);
    }};*/
    public static final ArrayList<Integer> staNosErrList1 = new ArrayList<Integer>() {{
        add(122);
        add(222);add(224);add(227);add(230);
//        add(101);
//        add(102);add(103);add(104);add(105);
        add(102);
    }};
    public static final ArrayList<Integer> staNoWeight1 = new ArrayList<Integer>() {{
        add(123);
        add(223);add(225);add(228);add(231);
        add(101);add(102);add(103);add(104);add(105);
    }};
    public static final ArrayList<Integer> staNoWeight2 = new ArrayList<Integer>() {{
    /*public static final ArrayList<Integer> staNoWeight2 = new ArrayList<Integer>() {{
        add(102);add(105);add(107);add(109);
        add(203);add(205);add(208);add(211);
    }};
    }};*/
    private Integer count=0;
@@ -124,8 +120,8 @@
        switch (slave.getId()) {
            case 1:
                return staNosErrList1;
            case 2:
                return staNosErrList2;
            /*case 2:
                return staNosErrList2;*/
            default:
                throw new CoolException("服务器异常");
        }
@@ -135,8 +131,8 @@
        switch (slave.getId()) {
            case 1:
                return staNoWeight1;
            case 2:
                return staNoWeight2;
            /*case 2:
                return staNoWeight2;*/
            default:
                throw new CoolException("服务器异常");
        }
@@ -146,8 +142,8 @@
        switch (slave.getId()) {
            case 1:
                return staNos1;
            case 2:
                return staNos2;
            /*case 2:
                return staNos2;*/
            default:
                throw new CoolException("服务器异常");
        }
@@ -156,8 +152,8 @@
        switch (slave.getId()) {
            case 1:
                return BarcodeList1;
            case 2:
                return BarcodeList2;
            /*case 2:
                return BarcodeList2;*/
            default:
                throw new CoolException("获取站点失败!");
        }
@@ -242,7 +238,7 @@
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            News.error("SiemensDevp"+" - 2"+" - 输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
        siemensS7Net.ConnectClose();
//        siemensS7Net.ConnectClose();
        initSite();
        return result;
    }
@@ -269,13 +265,23 @@
//        updateIoMode();
//        if (slave.getId()==1) return;
        ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNos = staNos1;
        int staNoSize = staNos1.size();
        //ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNosErrList = getStaNoErr();
        ArrayList<Integer> staNoWeight = getStaNoWeight();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
        OperateResultExOne<byte[]> resultWeight = siemensS7Net.Read("DB102.0", (short)  (8 * 4));
        if (result.IsSuccess && resultWeight.IsSuccess) {
        //int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
        OperateResultExOne<byte[]> resultWeight = null;
        /*if(staNoWeight.size()>4){
            resultWeight = siemensS7Net.Read("DB102.0", (short)  (8 * 4));
        }else{
            resultWeight = siemensS7Net.Read("DB102.0", (short)  (4 * 4));
        }
        OperateResultExOne<byte[]> resultWeight2 = siemensS7Net.Read("DB102.0", (short)  (4 * 4));*/
        //if (result.IsSuccess && resultWeight.IsSuccess) {
            if (result.IsSuccess) {
            int j = 0;
            for(int i = 0 ; i<staNoSize;i++){
                Integer siteId = staNos.get(i); // 站点编号
@@ -288,13 +294,19 @@
                boolean[] status = null;
                int offset = getOffsetFromSiteId(siteId);//取余获得对应db块数据
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, offset));     // 工作号
                if (staNoWeight.contains(siteId)) {
                    staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(resultWeight.Content, j));
                    j = j + 4;
                }
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, offset+ 4));   // 目标站
                status = siemensS7Net.getByteTransform().TransBool(result.Content, offset+ 6, 2);
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8));     // 工作号
                /*if (staNoWeight.contains(siteId)) {
                    if(staNoWeight.size() == 4){
                        staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(resultWeight2.Content, j));
                        j = j + 4;
                    }else{
                        staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(resultWeight.Content, j));
                        j = j + 4;
                    }
                }*/
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4));   // 目标站
                status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 1);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
@@ -313,7 +325,7 @@
            //条码扫描器
            ArrayList<Integer> barcodeList = getBarcodeList();
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.2848", (short) (barcodeList.size() * 8));
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.602", (short) (barcodeList.size() * 8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeList.size(); i++) {
                    Integer barcodeId = barcodeList.get(i);
@@ -327,11 +339,12 @@
            //外形检测
            ArrayList<Integer> staNoErrs = staNosErrList;
            int staNoErrsSize = staNoErrs.size();
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.2808", (short) (staNoErrsSize * 4));
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.702", (short) (staNoErrsSize * 7));
            if (resultErr.IsSuccess) {
                for (int i = 0; i < staNoErrsSize; i++) {
                    Integer siteId = staNoErrs.get(i); // 站点编号
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4 + 2, 1);
//                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4 + 2, 1);
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 7, 1);
                    StaProtocol staProtocol = station.get(siteId);
                    staProtocol.setFrontErr(status[0]);
                    staProtocol.setBackErr(status[1]);
@@ -428,17 +441,17 @@
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
//        int index = staNos.indexOf(staProtocol.getSiteId());
        int offset = getOffsetFromSiteId2(staProtocol.getSiteId());//取余获得对应db块数据
        int index = staNos.indexOf(staProtocol.getSiteId());
//        int offset = getOffsetFromSiteId2(staProtocol.getSiteId());//取余获得对应db块数据
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100." + offset, staProtocol.getWorkNo());    // 工作号
            write = siemensS7Net.Write("DB100." + index * 6, staProtocol.getWorkNo());    // 工作号
            Thread.sleep(200);
            write1 = siemensS7Net.Write("DB100." + (offset+4), staProtocol.getStaNo().shortValue());    // 目标站
            write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo().shortValue());    // 目标站
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;