1
zhang
2025-08-02 8687f74a7e45949d6fc451e151a00b18f9dd0ca7
1
2个文件已修改
160 ■■■■ 已修改文件
src/main/java/com/zy/core/model/protocol/StaProtocol.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -3,6 +3,9 @@
import com.zy.asrs.entity.BasDevp;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * 输送线plc单个站点详细信息
 * Created by vincent on 2020/8/6
@@ -85,6 +88,23 @@
    //lfd入库印记  当stamp>=2时才入库
    private Integer stamp = 0;
    //故障-----------------------------------------------------------------------
    private Boolean breakerErr = false; //断路器故障
    private Boolean infraredErr = false; //光电异常
    private Boolean outTimeErr = false; //运行超时
    private Boolean seizeSeatErr = false; //占位超时
    private Boolean wrkYgoodsN = false;//有任务无货故障
    private Boolean inverterErr = false; //变频器故障
    private Boolean contactErr = false; //电机接触器故障
    private Boolean upcontactErr = false; //顶升电机接触器故障
    public BasDevp toSqlModel(){
        BasDevp basDevp = new BasDevp();
        basDevp.setDevNo(siteId);
@@ -101,6 +121,35 @@
        return basDevp;
    }
    public List<Integer> getAlarm() {
        List<Integer> alarm = new ArrayList<>();
        if (breakerErr) {
            alarm.add(1);
        }
        if (infraredErr) {
            alarm.add(2);
        }
        if (outTimeErr) {
            alarm.add(3);
        }
        if (seizeSeatErr) {
            alarm.add(4);
        }
        if (wrkYgoodsN) {
            alarm.add(5);
        }
        if (inverterErr) {
            alarm.add(6);
        }
        if (contactErr) {
            alarm.add(7);
        }
        if (upcontactErr) {
            alarm.add(8);
        }
        return alarm;
    }
    @Override
    public StaProtocol clone() {
        try {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -134,6 +134,7 @@
                    // 读数据
                    case 1:
                        read();
                        readsanqi();
                        break;
                    // 写数据 ID+目标站
                    case 2:
@@ -302,6 +303,66 @@
//                log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
            }
            //外形检测
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.42", (short) 8);
            if (resultErr.IsSuccess) {
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, 0, 1);
                StaProtocol staProtocol = station.get(304);
                staProtocol.setFrontErr(status[0]);
                staProtocol.setBackErr(status[1]);
                staProtocol.setHighErr(status[2]);
                staProtocol.setLeftErr(status[3]);
                staProtocol.setRightErr(status[4]);
                staProtocol.setWeightErr(status[5]);
                staProtocol.setBarcodeErr(status[6]);
            }
            //条码扫描器
            Thread.sleep(200);
            ArrayList<Integer> barcodeList = getBarcodeList();
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.60", (short) (barcodeList.size() * 8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeList.size(); i++) {
                    Integer barcodeId = barcodeList.get(i);
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
                }
            }
        }
        // 根据实时信息更新数据库
        try {
            if (!station.isEmpty()) {
                List<BasDevp> basDevps = new ArrayList<>();
                for (Integer siteId : staNos) {
                    StaProtocol staProtocol = station.get(siteId);
                    basDevps.add(staProtocol.toSqlModel());
                }
                BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
                    throw new Exception("更新数据库数据失败");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
        }
    }
    /**
     * 读取状态 ====> 整块plc
     */
    private void readsanqi() throws InterruptedException {
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
            //
            OperateResultExOne<byte[]> resultsanqi = siemensS7Net.Read("DB101.120", (short) (staNoSize * 8));
            if (resultsanqi.IsSuccess) {
@@ -335,21 +396,6 @@
            }
            //外形检测
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.42", (short) 8);
            if (resultErr.IsSuccess) {
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, 0, 1);
                StaProtocol staProtocol = station.get(304);
                staProtocol.setFrontErr(status[0]);
                staProtocol.setBackErr(status[1]);
                staProtocol.setHighErr(status[2]);
                staProtocol.setLeftErr(status[3]);
                staProtocol.setRightErr(status[4]);
                staProtocol.setWeightErr(status[5]);
                staProtocol.setBarcodeErr(status[6]);
            }
            //外形检测 三期
            OperateResultExOne<byte[]> resultErrsanqi = siemensS7Net.Read("DB101.160", (short) 8);
            if (resultErrsanqi.IsSuccess) {
@@ -364,28 +410,13 @@
                staProtocol.setBarcodeErr(status[6]);
            }
            //条码扫描器
            Thread.sleep(200);
            ArrayList<Integer> barcodeList = getBarcodeList();
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.60", (short) (barcodeList.size() * 8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeList.size(); i++) {
                    Integer barcodeId = barcodeList.get(i);
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
                }
            }
            //条码扫描器 三期
            Thread.sleep(200);
            ArrayList<Integer> barcodeListsanqi = getBarcodeList();
            OperateResultExOne<byte[]> result2siqi = siemensS7Net.Read("DB101.60", (short) (barcodeListsanqi.size() * 8));
            if (result2siqi.IsSuccess) {
                for (int i = 0; i < barcodeList.size(); i++) {
            for (int i = 0; i < barcodeListsanqi.size(); i++) {
                    Integer barcodeId = barcodeListsanqi.get(i);
                    String barcode = siemensS7Net.getByteTransform().TransString(result2siqi.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
@@ -395,6 +426,24 @@
                }
            }
        //故障 三期
        OperateResultExOne<byte[]> resultErrs = siemensS7Net.Read("DB101.220", (short) (staNoSize * 4));
        if (resultErrs.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrs.Content, i * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
        // 根据实时信息更新数据库
        try {