#
luxiaotao1123
2022-10-25 b78b9ca2ef71de6b9af4a31b45defb12304289b7
src/main/java/com/zy/core/thread/SteThread.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.common.SpringUtils;
import com.core.exception.CoolException;
@@ -89,7 +90,7 @@
        steProtocol.setSteNo(slave.getId().shortValue());
        steProtocol.setMode((short) 0);
        steProtocol.setStatus(SteStatusType.OFF_LINE);
        steProtocol.setTaskNo(0);
        steProtocol.setTaskNo((short) 0);
        steProtocol.setExecute(false);
        steProtocol.setWaiting(false);
    }
@@ -124,8 +125,9 @@
            if (result.IsSuccess) {
                if (null == steProtocol) {
                    steProtocol = new SteProtocol();
                    steProtocol.setSteNo(slave.getId().shortValue());
                }
                steProtocol.setSteNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 0));
//                steProtocol.setSteNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 0));
                steProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, 2));
                steProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4));
                OperateResultExOne<Boolean> executeRes = siemensS7Net.ReadBool("V2001.0");
@@ -135,6 +137,14 @@
                OperateResultExOne<Boolean> waitingRes = siemensS7Net.ReadBool("V2001.1");
                if (waitingRes.IsSuccess) {
                    steProtocol.setWaiting(waitingRes.Content);
                }
                OperateResultExOne<Boolean> inEmptyRes = siemensS7Net.ReadBool("V2001.2");
                if (inEmptyRes.IsSuccess) {
                    steProtocol.setInEmpty(inEmptyRes.Content);
                }
                OperateResultExOne<Boolean> outEmptyRes = siemensS7Net.ReadBool("V2001.3");
                if (outEmptyRes.IsSuccess) {
                    steProtocol.setOutEmpty(outEmptyRes.Content);
                }
                steProtocol.setAlarm(siemensS7Net.getByteTransform().TransInt16(result.Content, 6));
                steProtocol.setAlarm0(siemensS7Net.getByteTransform().TransInt16(result.Content, 8));
@@ -148,7 +158,7 @@
                steProtocol.setPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 18));
                steProtocol.setLoad(siemensS7Net.getByteTransform().TransInt16(result.Content, 20));
                steProtocol.setTrack(siemensS7Net.getByteTransform().TransInt16(result.Content, 22));
                steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 24));
                steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 24));
                steProtocol.setTaskType(siemensS7Net.getByteTransform().TransInt16(result.Content, 28));
                steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 30));
                steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 32));
@@ -164,11 +174,14 @@
                steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 38));
                steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 40));
                steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42));
                steProtocol.setChargeStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 44));
                OutputQueue.STE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                // 复位信号
                if (steProtocol.getWaiting()) {
                    log.error("-------------------------------------------第一步、[穿梭车号:{}, 工作号:{}]==>> 状态为3,等待WCS确认!!",
                            slave.getId(),steProtocol.getTaskNo());
                    if (resetFlag) {
                        SteCommand steCommand = new SteCommand();
                        steCommand.setComplete(true);
@@ -200,9 +213,9 @@
                throw new CoolException(MessageFormat.format( "穿梭车plc状态信息失败 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
            }
        } catch (Exception e) {
            e.printStackTrace();
//            e.printStackTrace();
            OutputQueue.STE.offer(MessageFormat.format("【{0}】读取穿梭车plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            log.error("读取穿梭车plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            log.error("读取穿梭车plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            initSte();
        }
@@ -220,16 +233,15 @@
        OperateResult result = null;
        // 开始任务
        if (!command.getComplete()) {
            // 1.任务号
            OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue());
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 作业
            if (command.getTaskMode() != 0) {
                // 1.任务号
                OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue());
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 2.作业
                OperateResult result1 = siemensS7Net.Write("V1000", command.getTaskMode());
                // 3.确认开始任务
@@ -259,6 +271,8 @@
        // 任务完成
        } else {
            siemensS7Net.Write("V998", (short) 0);
            siemensS7Net.Write("V1000", (short) 0);
            result = siemensS7Net.Write("V2000.1", true);
        }
@@ -294,7 +308,9 @@
        if (result != null && result.IsSuccess) {
            // 维护数据库排列层
            if (!steProtocol.getWaiting()) {
                this.modifyPos(command.getRow().intValue(), command.getBay().intValue(), command.getLev().intValue());
                if (!Cools.isEmpty(command.getRow(), command.getBay(), command.getLev())) {
                    this.modifyPos(command.getRow().intValue(), command.getBay().intValue(), command.getLev().intValue());
                }
            }
            log.info("穿梭车命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
@@ -337,6 +353,7 @@
        short[] arr = new short[] {row.shortValue(), bay.shortValue(), lev.shortValue()};
        OperateResult result = siemensS7Net.Write("V1002", arr);
        if (!result.IsSuccess) {
            log.error("更新{}号穿梭车定位失败 ===>> 排:【{}】, 列:【{}】,层:【{}】", this.slave.getId(), row, bay, lev);
            return false;
        }
        BasSteService service = SpringUtils.getBean(BasSteService.class);
@@ -367,6 +384,12 @@
        }
    }
//    public void modifyPos(int wrkNo, int row, int bay, int lev) {
//        BasSteService service = SpringUtils.getBean(BasSteService.class);
//        if (!service.updatePos(wrkNo,this.slave.getId(), row, bay, lev)) {
//            log.error("更新{}号穿梭车定位失败 ===>> 排:【{}】, 列:【{}】,层:【{}】", this.slave.getId(), row, bay, lev);
//        }
//    }
    /******************************************************************************************/
    /**************************************** 测试专用 *****************************************/