1
zhang
5 天以前 510a21954afdf40479bdf293568cc7979e6043ad
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -5,6 +5,7 @@
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasDevp;
@@ -13,7 +14,7 @@
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.IoModeType;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
@@ -76,18 +77,7 @@
     */
    private int barcodeSize = 2;
    /**
     * 入出库模式
     * 0:未知
     * 1:入库启动中
     * 2.入库模式
     * 3.出库启动中 (不能生成入库工作档)
     * 4.出库模式
     */
    public IoModeType ioModeOf2F = IoModeType.NONE;
    //    public IoModeType ioMode = IoModeType.NONE;
    public IoModeType ioModeOf4F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
@@ -121,12 +111,16 @@
                    // 写数据 ID+目标站
                    case 2:
                        write((StaProtocol) task.getData());
                        log.error("输送线下发命令:" + ((StaProtocol) task.getData()).getWorkNo() + "," + ((StaProtocol) task.getData()).getStaNo());
                        log.info("输送线下发命令:" + ((StaProtocol) task.getData()).getWorkNo() + "," + ((StaProtocol) task.getData()).getStaNo());
                        break;
                    // 写数据 ID+目标站
                    case 3:
                        write2((StaProtocol) task.getData());
                        log.error("输送线下发命令:" + ((StaProtocol) task.getData()).getWorkNo() + "," + ((StaProtocol) task.getData()).getStaNo());
                        log.info("输送线下发命令3:");
                        break;
                    case 4:
                        write4((StaProtocol) task.getData());
                        log.info("输送线下发命令4:");
                        break;
                    default:
                        break;
@@ -256,84 +250,30 @@
            }
        }
        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB102.0", (short) 2);
        if (result4.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1);
            if (status[0] && status[1]) {
                StaProtocol staProtocol = station.get(1007);
                MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
                log.info("复位1007");
            }
        }
        //条码扫描器
//        ArrayList<Integer> barcodeList = BarcodeList;
//        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1648", (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);
//                }
//            }
//        }
        //外形检测
//        ArrayList<Integer> staNoErrs = staNosErrList;
//        int staNoErrsSize = staNoErrs.size();
//        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.1608", (short) (staNoErrsSize * 8));
//        if (resultErr.IsSuccess) {
//            for (int i = 0; i < 2; i++) {
//                Integer siteId = staNoErrs.get(i); // 站点编号
//                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4 + 2, 1);
//                StaProtocol staProtocol = station.get(siteId);
//                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]);
//            }
//        }
        //plc故障
//        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize * 4));
//        if (resultErr2.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                Integer siteId = staNos.get(i); // 站点编号
//                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.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]);
//
//            }
//        }
//        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
//        if (resultErr3.IsSuccess) {
//            if (staError1 == null) {
//                staError1 = new StaError1();
//            }
//            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
//            staError1.setEMERGENCY_Stop_Core(status[0]);
//            staError1.setEMERGENCY_STOP1(status[1]);
//            staError1.setEMERGENCY_STOP2(status[2]);
//            staError1.setEMERGENCY_STOP3(status[3]);
//            staError1.setEMERGENCY_STOP4(status[4]);
//
//            staError1.setDoor_EMERGENCY_STOP1(status[5]);
//            staError1.setDoor_EMERGENCY_STOP2(status[6]);
//            staError1.setDoor_EMERGENCY_STOP3(status[7]);
//            staError1.setDoor_EMERGENCY_STOP4(status[8]);
//            staError1.setDoor_EMERGENCY_STOP5(status[9]);
//            staError1.setDoor_EMERGENCY_STOP6(status[10]);
//
//            staError1.setDoor_Open_Err1(status[11]);
//            staError1.setDoor_Open_Err1(status[12]);
//            staError1.setDoor_Open_Err1(status[13]);
//            staError1.setDoor_Open_Err1(status[14]);
//            staError1.setDoor_Open_Err1(status[15]);
//            staError1.setDoor_Open_Err1(status[16]);
//
//        }
        ArrayList<Integer> barcodeList = BarcodeList;
        OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB101.102", (short) (barcodeList.size() * 8));
        if (result5.IsSuccess) {
            for (int i = 0; i < barcodeList.size(); i++) {
                Integer barcodeId = barcodeList.get(i);
                String barcode = siemensS7Net.getByteTransform().TransString(result5.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);
                    log.info("料箱码:{}",barcode);
                }
            }
        }
        if (result.IsSuccess) {
@@ -413,7 +353,7 @@
        do {
            write = siemensS7Net.Write("DB102.0", array);
            if (write.IsSuccess) {
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                log.error("写入输送线DB102.0命令成功3。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            } else {
                writeCount++;
@@ -426,30 +366,35 @@
        }
    }
    // 更新入出库模式
    private void updateIoMode() throws InterruptedException {
        if (this.ioModeOf2F != IoModeType.NONE) {
            if (!siemensS7Net.Write("DB100.180", this.ioModeOf2F.id).IsSuccess) {
                OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线2F入出库模式失败。输送线plc编号={1}", slave.getId()));
                News.error("SiemensDevp" + " - 6" + " - 写入输送线2F入出库模式失败。输送线plc编号={}", slave.getId());
    private void write4(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        OperateResult write = null;
        boolean[] array = new boolean[2];
        array[0] = false;
        array[1] = false;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB102.0", array);
            if (write.IsSuccess) {
                log.error("44写入输送线DB102.0命令成功3。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            } else {
                writeCount++;
                log.error("44写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        } while (writeCount < 5);
        if (!write.IsSuccess) {
            News.error("SiemensDevp" + " - 4" + " - 写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    /**
     * 心跳
     */
    private void heartbeat() {
        if (heartBeatVal == 1) {
            heartBeatVal = 2;
        } else {
            heartBeatVal = 1;
        }
        OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal);
        if (!write.IsSuccess) {
            News.error("SiemensDevp" + " - 7" + " - 输送线plc编号={} 心跳失败", slave.getId());
        }
    }
    /**
     * 设置入库标记
@@ -467,38 +412,6 @@
        siemensS7Net.ConnectClose();
    }
    public static void main(String[] args) {
        System.out.println(staNos1.indexOf(129));
        System.out.println(staNos1.size());
        for (int i = 0; i < staNos1.size(); i++) {
//            System.out.println(i*2);
//            System.out.println(i*2 + 200);
//            System.out.println(i);
        }
        int index = staNos1.indexOf(128);
        System.out.println(index * 2);
        System.out.println(index * 2 + 200);
    }
//    public static void main(String[] args) throws Exception {
//        DevpSlave slave = new DevpSlave();
//        slave.setIp("192.168.2.125");
//        SiemensDevpThread devpThread = new SiemensDevpThread(slave);
//        devpThread.connect();
//        devpThread.read();
//        // 写
//        StaProtocol staProtocol = devpThread.getStation().get(1);
//        staProtocol.setWorkNo((short) 232);
//        staProtocol.setStaNo((short) 6);
//        staProtocol.setAutoing(true);
//        staProtocol.setEmptyMk(true);
//        staProtocol.setInEnable(true);
//        devpThread.write(staProtocol);
//        System.out.println("----------------------------------------");
//        // 读
//        devpThread.read();
//        System.out.println(JSON.toJSONString(devpThread.station));
//
//    }
}