فهرست منبع

Merge branch 'debug' of zuolinhao/YG-OPP-WCS into master

zuolinhao 3 سال پیش
والد
کامیت
13a6243af8

+ 3 - 4
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -4,7 +4,6 @@ using System.Collections.Generic;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
-using WCS.Entity.Protocol.SRM;
 using WCS.Service.Helpers;
 
 namespace WCS.Service.Extensions
@@ -111,7 +110,7 @@ namespace WCS.Service.Extensions
             return taskList;
         }
 
-        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList,SRMDevice srm, int index = 0)
+        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList, SRMDevice srm, int index = 0)
         {
             return taksList[index].ToList();
             //if (!taksList.Any() || index > (taksList.Length - 1)) throw new DoException("无可执行出库任务");
@@ -164,11 +163,11 @@ namespace WCS.Service.Extensions
             AgvTask = task.AgvTask;
             CREATETIME = task.CREATETIME;
             MaterialCode = task.MaterialCode;
-
+            SRMSTATION = task.SRMSTATION;
             ID = task.ID;
             Line = addrFrom[0].ToShort();
             Col = addrFrom[1].ToShort();
             Layer = addrFrom[2].ToShort();
         }
     }
-}
+}

+ 1 - 1
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -145,7 +145,7 @@ namespace WCS.Service.Works.RGV
                                 var tasks = db.Default.Set<WCS_TASK>().Where(p => taskids.Contains(p.ID));
                                 if (tasks.GroupBy(p => p.TaskGroupKey).Count() > 1)
                                     throw new WarnException("任务组ID不一致");
-                                if (!tasks.GroupBy(p => p.TaskGroupKey).Any())
+                                if (!tasks.GroupBy(p => p.TaskGroupKey).Any()) 
                                     throw new WarnException("无任务组ID");
                                 var gw1 = pickStation.Items.ToArray()[0];
                                 var gw2 = pickStation.Items.ToArray()[1];

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

@@ -65,41 +65,7 @@ namespace WCS.Service.Works.SRM
                 if (srmDevice.Data2.SRMMode != SCMode.远程) return;
                 if (srmDevice.Data2.SRMStatus != SCRunStatus.空闲) return;
 
-                ////检查标记好的出库任务,并将出库任务下达至堆垛机
-                DB.Do(db =>
-                {
-                    //找到两个任务
-                    var taksLsit = db.Default.Set<WCS_TASK>().Where(v =>
-                        v.ID == srmDevice.Data.TaskID_1 ||
-                        v.ID == srmDevice.Data.TaskID_2 && v.STATUS == TaskStatus.堆垛机执行).ToList();
-                    var itemList = taksLsit.Select(v => v.Create<Task>()).OrderBy(v => v.Col).ToArray();
-
-                    if (!taksLsit.Any()) return;
-                    {
-                        for (var i = 0; i < itemList.Length; i++)
-                        {
-                            var item = itemList[i];
-                            item.SRMSTATION = taksLsit.FirstOrDefault(v => v.ID == item.ID)!.SRMSTATION;
-
-                            var fork = srmDevice.GetFork(item, i);
-
-                            switch (fork)
-                            {
-                                // 列数较小的放一工位
-                                case SrmFork.货叉1:
-                                    obj.WriteTask1(item, (short)itemList.Length);
-                                    break;
-                                //列数较大的放二工位
-                                case SrmFork.货叉2:
-                                    obj.WriteTask2(item, (short)itemList.Length);
-                                    break;
-
-                                default:
-                                    throw new ArgumentOutOfRangeException();
-                            }
-                        }
-                    }
-                });
+              
 
                 var isTransfer = new List<WCS_TASK>(); //是否有移库任务
                 WCS_TASK enterPriority = new(), outPriority = new(); //出入库优先级任务
@@ -289,8 +255,6 @@ namespace WCS.Service.Works.SRM
                     srmDevice.Entity.Set("LastOutFloor", floor);
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 
-                    if (obj.Data.TaskID_1 != 0 || obj.Data.TaskID_2 != 0) return;
-
                     //获取当前堆垛机所有的放货点
                     var list = srmDevice.GetDeliveryPoint();
 
@@ -331,8 +295,7 @@ namespace WCS.Service.Works.SRM
                             foreach (var stationDevice in devise)
                             {
                                 //放货点是否有货
-                                if (stationDevice.Data.VoucherNo != stationDevice.Data2.VoucherNo) res = false;
-                                else if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
+                                if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
                                 else if (stationDevice.Data2.Status.HasFlag(IstationStatus.光电状态)) res = false;
                                 else if (stationDevice.Data2.Request == IstationRequest.堆垛机放货完成请求目标地址) res = false;
                                 else if (stationDevice.Data2.Tasknum > 10000) res = false;
@@ -347,7 +310,7 @@ namespace WCS.Service.Works.SRM
 
                     //堆垛机设备
                     var srm = srmDevice.Entity.CODE;
-
+                    var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
                     DB.Do(db =>
                     {
                         //堆垛机当前是否有正在执行的任务
@@ -402,8 +365,6 @@ namespace WCS.Service.Works.SRM
 
                         #endregion 校验两个产品是否为同规格
 
-                        var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
-
                         for (var i = 0; i < tasks.Length; i++)
                         {
                             var item = tasks[i];
@@ -425,6 +386,7 @@ namespace WCS.Service.Works.SRM
                             var msg = "";
                             msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
                             task.CreateStatusLog(db, msg, this.GetType());
+                            item.SRMSTATION = task.SRMSTATION;
                             finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));
                         }
 
@@ -450,6 +412,30 @@ namespace WCS.Service.Works.SRM
                         }
                     });
 
+                    ////检查标记好的出库任务,并将出库任务下达至堆垛机
+                    DB.Do(db =>
+                    {
+                        //此处只做标记,表示当前事务已经提交
+                        foreach (var finish in finishTaskList)
+                        {
+                            var task = db.Default.Set<WCS_TASK>().Find(finish.Station.ID).Create<Task>();
+                            switch (finish.FinishCode)
+                            {
+                                // 列数较小的放一工位
+                                case SrmFork.货叉1:
+                                    obj.WriteTask1(task, (short)finishTaskList.Count);
+                                    break;
+                                //列数较大的放二工位
+                                case SrmFork.货叉2:
+                                    obj.WriteTask2(task, (short)finishTaskList.Count);
+                                    break;
+
+                                default:
+                                    throw new ArgumentOutOfRangeException();
+                            }
+                        }
+                    });
+
                     #endregion 出库
                 }
             });
@@ -460,4 +446,4 @@ namespace WCS.Service.Works.SRM
             return dev.Is(DF.SRM);
         }
     }
-}
+}