#
vincentlu
10 小时以前 5fc29f10aca2803c0876fbf8553fae5f459096cf
#
1个文件已修改
28 ■■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -946,28 +946,37 @@
                        Code nextCode = codeService.getCacheByData(next);
                        Double nextDirection = mapService.calculateDirection(lastCode, nextCode, angleOffsetVal);
                        // 第一步:如果下一个方向正好是作业方向的相反方向,则重置下一个方向为作业方向,标记 reverse = true
                        // 反向角
                        final double oppWorkDir = (workDirection + 180) % 360;
                        final double oppLastDir = (lastDirection + 180) % 360;
                        // 如果下一个方向正好是作业方向的相反方向,则重置下一个方向为作业方向,标记 reverse = true
                        boolean reverse = false;
                        if (nextDirection.equals((workDirection + 180) % 360)) {
                        if (nextDirection.equals(oppWorkDir)) {
                            nextDirection = workDirection;
                            reverse = true;
                        }
                        // 第二步:判断当前节点是否可以旋转
                        // 判断当前节点是否可以旋转
                        if (!lastCode.getCornerBool()) {
                            // 如果是作业方向,但是小车在巷道内方向错误,则停止
                            if (reverse && !lastDirection.equals(nextDirection)) {
                                throw new CoolException(agvNo + "号小车方向错误,请推至转弯点手动调整");
                            }
                            // 如果不是作业方向,判断是否相反方向,如果反方向则倒退行走
                            if (nextDirection.equals((lastDirection + 180) % 360)) {
                            // 如果不是作业方向(另一组相反方向),判断是否相反方向,如果反方向则倒退行走
                            if (nextDirection.equals(oppLastDir)) {
                                // 倒退时,因为agv方向没变,所以下一个方向还是agv方向,故nextDirection = lastDirection;
                                nextDirection = lastDirection;
                                reverse = true;
                            }
                            // 总结:1.如果是作业组(差180°)方向,那么agv方向必须是作业方向,如果 reverse 则说明倒退,这时候nextDirection肯定会等于作业方向(前面赋值了),如果不相同,则报错
                            //      2.如果不是作业组方向(另一组相反方向差180°),因为此函数不能旋转,所以差180°时只能倒退,倒退的时候因为agv不会旋转,所以nextDirection要变成agv方向
                        } else {
                            if (!lastDirection.equals(nextDirection)) {
                                // 如果下个节点方向与当前agv方向相反,则倒退行走,但是如果当前agv方向正好与工作方向相反,则旋转至工作方向
                                if (nextDirection.equals((lastDirection + 180) % 360) && !workDirection.equals((lastDirection + 180) % 360)) {
                                // 如果下一个方向与agv方向相反,则倒退行走,避免进行毫无意义的转弯动作。
                                // 但是要注意:如果agv方向与工作方向正好相反,则需要旋转至工作方向,也就是为什么要加!workDirection.equals(oppLastDir)判断
                                if (nextDirection.equals(oppLastDir) && !workDirection.equals(oppLastDir)) {
                                    // 倒退时,因为agv方向没变,所以下一个方向还是agv方向,故nextDirection = lastDirection;
                                    nextDirection = lastDirection;
                                    reverse = true;
                                } else {
@@ -1016,10 +1025,7 @@
                        }
                        // run
                        ActionTypeType actionType = ActionTypeType.StraightAheadTurnable;
                        if (reverse) {
                            actionType = ActionTypeType.StraightBackTurnable;
                        }
                        ActionTypeType actionType = reverse ? ActionTypeType.StraightBackTurnable : ActionTypeType.StraightAheadTurnable;
                        CodeGap gap = codeGapService.findByCodeOfBoth(lastCode.getId(), nextCode.getId());
                        actionList.add(new Action(
                                null,    // 编号