#1
dubin
8 天以前 97c788f31a57b4e8c3fc8091dc29aab598adeebb
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -53,7 +53,7 @@
        add(100);add(101);add(102);add(103);add(104);
        add(105);add(106);add(107);add(108);add(109);
        add(110);add(111);add(112);add(113);add(114);
        add(115);add(116);add(117);add(118);add(119);add(120);
        add(115);add(116);add(117);add(118);add(119);add(120);add(122);
    }};
    public static final ArrayList<Integer> barcode1 = new ArrayList<Integer>() {{
@@ -130,6 +130,10 @@
                    case 2:
                        write((LiftCommand) task.getData());
                        break;
                    case 3:
                        writeIoMode((Integer) task.getData());
                    case 4:
                        writeBack((Integer) task.getData());
                    default:
                        break;
                }
@@ -193,7 +197,7 @@
    private void read() throws InterruptedException {
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 13));
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB301.0", (short) (staNoSize * 14));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -204,18 +208,31 @@
                    station.put(siteId, staProtocol);
                }
                staProtocol.setSiteId(siteId);
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13)));     // 工作号
                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13) + 4));   // 目标站
                staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 8));//库位高度
                staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 10));   // 报警
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14)));     // 工作号
                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14) + 4));   // 目标站
                staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 8));//库位高度
                staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 10));   // 报警
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 13) + 12, 1);
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 14) + 12, 1);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
                staProtocol.setOutEnable(status[3]);// 可出
                staProtocol.setEmptyMk(status[4]);  // 空板信号
                staProtocol.setFullPlt(status[5]);  // 满托盘
                //122 提升机单独读取
                if (siteId == 122){
                    staProtocol.setSiteId(siteId);
                    OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10);
                    OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.306", (short) 1);
                    staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6)); //工作号
                    staProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0) == 1); //自动
                    boolean[] booleans = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1);
                    staProtocol.setLoading(booleans[1]); //1 有物  0 无物
                }
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
@@ -225,18 +242,19 @@
        //任务信息反馈
        Thread.sleep(200);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.400", (short) 10);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10);
        if (result3.IsSuccess) {
            liftProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0));     // 模式
            liftProtocol.setDeviceStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 2));     // 设备状态
            liftProtocol.setTaskStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4));     // 完成信号
            liftProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6));     // 工作号
            liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8));     // 出入库模式
        }
        //温湿度信息反馈
        Thread.sleep(200);
        ArrayList<Integer> temperatureList = getTemperature();
        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.300", (short) (temperatureList.size() * 4));
        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.300", (short) (temperatureList.size() * 4));
        if (result4.IsSuccess) {
            for (int i = 0; i < temperatureList.size(); i++) {
                Integer deviceId = temperatureList.get(i); // 编号
@@ -255,7 +273,7 @@
        Thread.sleep(200);
        ArrayList<Integer> barcodeList = getBarcode();
        int barcodeSize = barcodeList.size();
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB103.0", (short) (barcodeSize * 8));
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB4.0", (short) (barcodeSize * 8));
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeSize; i++) {
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
@@ -283,7 +301,7 @@
            deviceDataLogTime = System.currentTimeMillis();
        }
        if (result.IsSuccess && result2.IsSuccess) {
        if (result.IsSuccess && result2.IsSuccess && result3.IsSuccess && result4.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
        } else {
            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()));
@@ -293,7 +311,7 @@
    /**
     * 写入命令
     */
    private void write(LiftCommand liftCommand) throws InterruptedException {
    private void write(LiftCommand liftCommand) {
        if (null == liftCommand) {
            return;
        }
@@ -302,7 +320,7 @@
        array[1] = liftCommand.getSourceStaNo();
        array[2] = liftCommand.getTargetStaNo();
        OperateResult write = siemensS7Net.Write("DB100.0", array);
        OperateResult write = siemensS7Net.Write("DB300.0", array);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(liftCommand)));
@@ -314,6 +332,48 @@
    }
    /**
     * 写入命令
     */
    private void writeIoMode(Integer ioMode) {
        if (null == ioMode) {
            return;
        }
        short[] array = new short[1];
        array[0] = ioMode.shortValue();
        OperateResult write = siemensS7Net.Write("DB300.12", array);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入出入库模式数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
            News.error("SiemensDevp"+" - 4"+" - 写入出入库模式数据失败。输送线plc编号={},站点数据={}", slave.getId(), ioMode);
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 出入库模式命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
            News.info("SiemensDevp"+" - 5"+" - 出入库模式命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), ioMode);
        }
    }
    /**
     * 写入命令
     */
    private void writeBack(Integer back) {
        if (null == back) {
            return;
        }
        short[] array = new short[1];
        array[0] = back.shortValue();
        OperateResult write = siemensS7Net.Write("DB300.14", array);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入托盘退回数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), back));
            News.error("SiemensDevp"+" - 4"+" - 写入托盘退回数据失败。输送线plc编号={},站点数据={}", slave.getId(), back);
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 托盘退回命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), back));
            News.info("SiemensDevp"+" - 5"+" - 托盘退回命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), back);
        }
    }
    /**
     * 设置入库标记
     */
    @Override