Administrator преди 2 години
родител
ревизия
ca176e9ed4

+ 4 - 0
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -764,6 +764,10 @@ namespace WCS.Service.Extensions
 
                                 break;
                             }
+                        case TaskType.倒库:
+                            task.STATUS = TaskStatus.堆垛机完成;
+                            task.UPDATETIME = DateTime.Now;
+                            break;
                         default:
                             throw new Exception($"[{Entity.CODE}]任务类型错误,{task.ID}");
                     }

+ 19 - 15
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -60,34 +60,38 @@ namespace WCS.Service.Extensions
         /// <param name="srmFork">货叉</param>
         public static void GetSrmStationAndaddNext(this WCS_TASK task, SrmFork srmFork)
         {
-            //TODO:确定在倒库任务重是否能生效
+            List<Device<IStation520, IStation521, IStation523>> stations = new List<Device<IStation520, IStation521, IStation523>>();
             //取任务巷道到达目标地址的下一个地址,即任务堆垛机的站台对应的设备组
-            var stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", ""))))
-                                 .Select(v => v.Create<StationDeviceGroup>())
-                                 .FirstOrDefault()?.Items
-                                 .OrderByDescending(v => v.Entity.CODE)
-                                 .ToArray();
             if (task.TYPE == TaskType.倒库)
             {
                 stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.DEVICEDL)))
-                                 .Select(v => v.Create<StationDeviceGroup>())
-                                 .FirstOrDefault()?.Items
-                                 .OrderByDescending(v => v.Entity.CODE)
-                                 .ToArray();
+                                    .Select(v => v.Create<StationDeviceGroup>())
+                                    .FirstOrDefault()?.Items
+                                    .OrderByDescending(v => v.Entity.CODE)
+                                    .ToList();
             }
+            else
+            {
+                stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", ""))))
+                                    .Select(v => v.Create<StationDeviceGroup>())
+                                    .FirstOrDefault()?.Items
+                                    .OrderByDescending(v => v.Entity.CODE)
+                                    .ToList();
+            }
+            var ts = stations.ToArray();
 
             var addNext = task.TYPE == TaskType.倒库 ? task.DEVICEDL : task.ADDRTO;
             //一工位放较大的站台号
             switch (srmFork)
             {
                 case SrmFork.货叉1:
-                    task.SRMSTATION = stations?[0].Entity.CODE;
-                    task.ADDRNEXT = stations?[0].Entity.GetPath(addNext).CODE;
+                    task.SRMSTATION = ts?[0].Entity.CODE;
+                    task.ADDRNEXT = ts?[0].Entity.GetPath(addNext).CODE;
                     break;
 
                 case SrmFork.货叉2:
-                    task.SRMSTATION = stations?[1].Entity.CODE;
-                    task.ADDRNEXT = stations?[1].Entity.GetPath(addNext).CODE;
+                    task.SRMSTATION = ts?[1].Entity.CODE;
+                    task.ADDRNEXT = ts?[1].Entity.GetPath(addNext).CODE;
                     break;
             }
         }
@@ -180,4 +184,4 @@ namespace WCS.Service.Extensions
             Layer = addrFrom[2].ToShort();
         }
     }
-}
+}

+ 1 - 1
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -256,7 +256,7 @@ namespace WCS.Service.Works.SRM
                             //找出等待执行的出库任务
                             var waitTask = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
                                                           .Where(v => v.DEVICE == srm)
-                                                          .Where(v => v.TYPE == TaskType.出库)
+                                                          .Where(v => v.TYPE == TaskType.倒库 )
                                                           .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
                                                           .Where(v => groupList.Contains(v.SRMSTATION)) //站台必须可用
                                                           .ToList();

+ 2 - 5
Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

@@ -51,7 +51,7 @@ namespace WCS.Service.Works.Station
 
                     foreach (var dev in devise)
                     {
-                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == dev.FinishCode && v.STATUS == TaskStatus.堆垛机完成) ?? throw new WarnException("无任务");
+                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => (v.TYPE == TaskType.出库 || v.TYPE == TaskType.倒库) && v.SRMSTATION == dev.FinishCode && v.STATUS == TaskStatus.堆垛机完成) ?? throw new WarnException("无任务");
                         var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
                         if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
 
@@ -140,8 +140,6 @@ namespace WCS.Service.Works.Station
 
                             //问题,要怎么确定目标巷道的货物
 
-
-
                             task.ADDRNEXT = "G1";
                             task.CreateStatusLog(db, $"分配目标地址{task.ADDRNEXT}", this.GetType());
                             finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
@@ -433,7 +431,6 @@ namespace WCS.Service.Works.Station
                              var qty = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.叫料 && v.Status > AGVTaskStatus.新建 && v.Status < AGVTaskStatus.完成).Count(v => v.Position == tasking.Position);
 
                              var cmQty = ProtocolProxy.YGWMS150Redis.Get("MaxLineCallTaskCount").ToInt();
-                           
 
                              if (qty >= cmQty)
                              {
@@ -582,4 +579,4 @@ namespace WCS.Service.Works.Station
             return dev.CODE == "G1340" || dev.CODE == "G1343";
         }
     }
-}
+}