huanghongfeng
5 天以前 23cdbe08ee002d12c6d2a9034cc265fea0270a88
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SpeStackerCraneJob/SpeStackerCraneJob.cs
@@ -81,6 +81,7 @@
                        //查找RGV进行下发任务
                        Dt_Task task = GetTask(speStackerCrane.DeviceCode);
                        if (task != null)
@@ -126,7 +127,7 @@
            {
                (int)TaskInStatusEnum.RGV_InNew => task,
                (int)TaskInStatusEnum.RGV_InPickupFinish => HandlePickupFinish(task),
                (int)TaskInStatusEnum.RGV_InReleaseFinish => task,  //需要判断子车是内侧区还是外侧取货(待完成)
                (int)TaskInStatusEnum.RGV_InReleaseFinish => HandInneRouterSides(task),
                (int)TaskInStatusEnum.RGV_InZicheFinish => HandleZicheFinish(task),
                (int)TaskInStatusEnum.RGV_InZicheReleaseFinish => HandleZicheReleaseFinish(task),
                (int)TaskInStatusEnum.RGV_InZichemoveFinish => HandleZicheMoveFinish(task),
@@ -150,6 +151,60 @@
        }
        #region å…¥åº“方法
        private Dt_Task? HandInneRouterSides(Dt_Task task)
        {
            // éªŒè¯è¾“å…¥
            if (task == null) throw new ArgumentNullException(nameof(task));
            if (string.IsNullOrEmpty(task.CurrentAddress)) return null;
            // èŽ·å–å½“å‰ç«™å°ä¿¡æ¯
            AGVStation currentStation = _agvStationService.GetAllStationByDeviceCode(int.Parse(task.CurrentAddress));
            if (currentStation == null) return null;
            // åªå¤„理特定类型的站台
            if (currentStation.Station_material != (int)AgvStationEnum.HCJAisleplatform)
                return task;
            // èŽ·å–å­è½¦ä½ç½®
            int zicheAddress = GetZichelocation(task, task.CurrentAddress);
            if (zicheAddress == 0) return null;
            AGVStation zicheStation = _agvStationService.GetAllStationByDeviceCode(zicheAddress);
            if (zicheStation == null) return null;
            // æ ¹æ®å­è½¦ä½ç½®å¤„理不同情况
            switch (zicheStation.Station_material)
            {
                case (int)AgvStationEnum.Aisleplatform_Outside:
                    // å­è½¦åœ¨å¤–ä¾§ - ç›´æŽ¥è¿”回任务
                    return task;
                case (int)AgvStationEnum.Aisleplatform_Medial:
                    // å­è½¦åœ¨å†…ä¾§ - æ£€æŸ¥æ¯è½¦ä½ç½®
                    return HandleMedialCase(task, currentStation, zicheStation);
                default:
                    // æœªçŸ¥çš„子车位置状态
                    return null;
            }
        }
        private Dt_Task? HandleMedialCase(Dt_Task task, AGVStation currentStation, AGVStation zicheStation)
        {
            int motherCarAddress = GetMothercarlocation(task.TaskNum, currentStation.MotherCarDeviceCode);
            if (motherCarAddress == 0) return null;
            // å¦‚果母车不在预期位置,下发移动任务
            if (motherCarAddress != int.Parse(currentStation.MotherCarDeviceCode))
            {
                RGVMovetask(zicheStation.Motherinlaw, currentStation.ChildPosiDeviceCode, task.TaskId);
                return null; // æ¯è½¦éœ€è¦ç§»åŠ¨ï¼Œæš‚ä¸è¿”å›žä»»åŠ¡
            }
            // æ¯è½¦å·²åœ¨æ­£ç¡®ä½ç½®
            return task;
        }
        private Dt_Task? HandlePickupFinish(Dt_Task task)
        {
            try
@@ -203,7 +258,7 @@
            }
            else if (aGVStation.Station_Area == 3)  //当前地址为HCJ站台,且AGV任务为取货
            {
                return task;    //去取货,需要判断子车当前位子,(后续优化)
                return task;    //去取货位,需要判断子车当前位子,(后续优化)
            }
            return null;