#
18516761980
2022-03-17 a0adee2f689c85399ca311ef7691cd911a00fd3b
src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -198,12 +198,12 @@
                    }
                }
                // 根据实时信息更新数据库
                BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
                BasCrnp basCrnp = new BasCrnp();
                basCrnp.setCrnErr(crnProtocol.getAlarm()==null?0:crnProtocol.getAlarm().longValue());
                basCrnp.setCrnNo(slave.getId());
                basCrnp.setCrnSts((int)crnProtocol.getMode());
                if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
                    log.error("堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                }
@@ -229,24 +229,73 @@
            log.error("堆垛机写入命令为空");
            return false;
        }
        command.setCrnNo(slave.getId());
        short[] array = new short[10];
        array[0] = command.getAckFinish();
        array[1] = command.getTaskNo();
        array[2] = command.getTaskMode();
        array[3] = command.getSourcePosX();
        array[4] = command.getSourcePosY();
        array[5] = command.getSourcePosZ();
        array[6] = command.getDestinationPosX();
        array[7] = command.getDestinationPosY();
        array[8] = command.getDestinationPosZ();
        array[9] = command.getCommand();
        OperateResult result = melsecMcNet.Write("D0", array);
        if (command.getAckFinish() == 0) {
            short commandFinish = 1;
            result = melsecMcNet.Write("D9", commandFinish);
        OperateResult result = null;
        try{
            Integer exeCount=0;
            do{
                command.setCrnNo(slave.getId());
                short[] array = new short[10];
                array[0] = command.getAckFinish();
                array[1] = command.getTaskNo();
                array[2] = command.getTaskMode();
                array[3] = command.getSourcePosX();
                array[4] = command.getSourcePosY();
                array[5] = command.getSourcePosZ();
                array[6] = command.getDestinationPosX();
                array[7] = command.getDestinationPosY();
                array[8] = command.getDestinationPosZ();
                array[9] = command.getCommand();
                result = melsecMcNet.Write("D0", array);
                if(result.IsSuccess) {
                    if (command.getAckFinish() == 0) {
                        short commandFinish = 1;
                        result = melsecMcNet.Write("D9", commandFinish);
                        if(result.IsSuccess){
                            //写任务确认返回成功后,查询确认一次
                            Thread.sleep(200);
                            OperateResultExOne<byte[]> result1 = melsecMcNet.Read("D9", (short)2);
                            if(result1.IsSuccess){
                                short commandVal = melsecMcNet.getByteTransform().TransInt16(result1.Content,2);
                                if(commandVal==1){
                                    break;
                                } else {
                                    exeCount++;
                                }
                            } else{
                                exeCount++;
                            }
                        }else{
                            exeCount++;
                        }
                    }
                }else{
                    exeCount++;
                }
                Thread.sleep(200);
            }while(exeCount>3);
        }catch (Exception e){
        }
//        command.setCrnNo(slave.getId());
//        short[] array = new short[10];
//        array[0] = command.getAckFinish();
//        array[1] = command.getTaskNo();
//        array[2] = command.getTaskMode();
//        array[3] = command.getSourcePosX();
//        array[4] = command.getSourcePosY();
//        array[5] = command.getSourcePosZ();
//        array[6] = command.getDestinationPosX();
//        array[7] = command.getDestinationPosY();
//        array[8] = command.getDestinationPosZ();
//        array[9] = command.getCommand();
//        OperateResult result = melsecMcNet.Write("D0", array);
//
//        if (command.getAckFinish() == 0) {
//            short commandFinish = 1;
//            result = melsecMcNet.Write("D9", commandFinish);
//        }
        try {
            // 日志记录
@@ -271,7 +320,7 @@
            bean.insert(basCrnOpt);
        } catch (Exception ignore) {}
        if (result.IsSuccess) {
        if (result != null && result.IsSuccess) {
            log.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
            return true;