xu.lu 2 سال پیش
والد
کامیت
cb6505b139

+ 91 - 0
成品库/WCS.WorkEngineering/Systems/出库任务处理.cs

@@ -0,0 +1,91 @@
+using ServiceCenter.Extensions;
+using ServiceCenter.Logs;
+using ServiceCenter.SqlSugars;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.Core;
+using WCS.Entity;
+using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Protocol.Station;
+using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.Worlds;
+using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
+
+namespace WCS.WorkEngineering.Systems
+{
+    /// <summary>
+    ///  出库任务处理
+    /// </summary>
+    [BelongTo(typeof(MainWorld))]
+    [Description("出库任务处理")]
+    public class 出库任务处理 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
+    {
+        protected override bool ParallelDo => true;
+        protected override bool SaveLogsToFile => true;
+        List<Station> devs = new List<Station>();
+        public 出库任务处理()
+        {
+            devs = Device.All.Where(v => v.HasFlag(DeviceFlags.出货口)).Select(v => new Station(v, this.World)).ToList();            
+        }
+
+        public override void Do(Device<IStation520, IStation521, IStation523> obj)
+        {
+            WCS_TaskInfo task = null;
+            if (obj.Data2.TaskNumber <= 0)
+                return;
+            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status) || !obj.Data3.Status.HasFlag(StationStatus.OT_Status))
+                return;
+            if (obj.Data2.GoodsEnd != obj.Entity.Code.ToShort()) return;
+            if (obj.Data2.Request == 0)
+            {
+                SqlSugarHelper.Do(db =>
+                {
+                    //找到对应任务
+                    var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber);
+                    if (taskInfo == null) throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High);
+                    if (taskInfo.AddrTo == obj.Entity.Code && taskInfo.Type == TaskType.OutDepot)
+                    {
+                        taskInfo.Status = Entity.TaskStatus.Finish;
+                        taskInfo.EditTime = DateTime.Now;
+                        taskInfo.EedTime = DateTime.Now;
+
+                        db.Default.Updateable(taskInfo).ExecuteCommand();
+                        taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"出库任务完成");
+                        task = taskInfo;
+                        taskInfo.CompleteOrCancelTasks(db);
+                        WmsApi.CompleteTask(task.ID);
+
+                        obj.Data.TaskNumber = 0;                        
+                        obj.Data.VoucherNo++;
+                    }
+                });
+            }
+            else
+            {
+                SqlSugarHelper.Do(db =>
+                {
+                    //找到对应任务
+                    var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber);
+                    if (taskInfo != null) throw new KnownException($"WCS任务{obj.Data2.TaskNumber}未完成,请联系相关人员查明原因", LogLevelEnum.High);
+                    //出货口货取走后去叠盘机叠盘
+                    obj.Data.TaskNumber = obj.Entity.Code.ToShort();
+                    if (obj.Entity.Code == "8263" || obj.Entity.Code == "8269")
+                    {
+                        obj.Data.GoodsEnd = 8262;
+                    }
+                    obj.Data.VoucherNo++;
+
+                });
+            }                         
+        }
+
+        public override bool Select(Device dev)
+        {
+            return dev.HasFlag(DeviceFlags.出货口);
+        }
+    }
+}

+ 0 - 75
成品库/WCS.WorkEngineering/Systems/出库分配目标地址.cs

@@ -1,75 +0,0 @@
-using ServiceCenter.Extensions;
-using ServiceCenter.Logs;
-using ServiceCenter.SqlSugars;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WCS.Core;
-using WCS.Entity;
-using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.Protocol.Station;
-using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.Worlds;
-using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
-
-namespace WCS.WorkEngineering.Systems
-{
-    /// <summary>
-    ///  出库分配目标地址
-    /// </summary>
-    [BelongTo(typeof(MainWorld))]
-    [Description("出库分配目标地址")]
-    public class 出库分配目标地址 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
-    {
-        protected override bool ParallelDo => true;
-
-        protected override bool SaveLogsToFile => true;
-        List<Station> devs = new List<Station>();
-        public 出库分配目标地址()
-        {
-            devs = Device.All.Where(v => v.HasFlag(DeviceFlags.出货口)).Select(v => new Station(v, this.World)).ToList();            
-        }
-
-        public override void Do(Device<IStation520, IStation521, IStation523> obj)
-        {
-            WCS_TaskInfo task = null;
-            if (obj.Data2.TaskNumber <= 0)
-                return;
-            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status) || !obj.Data3.Status.HasFlag(StationStatus.OT_Status))
-                return;
-            if (obj.Data2.Request != 1)
-                return;
-
-            SqlSugarHelper.Do(db =>
-            {
-                //var db = _db.Default;
-                //找到对应任务
-                var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber);
-                if(taskInfo == null) throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High);
-                if (taskInfo.AddrTo == obj.Entity.Code && taskInfo.Type == TaskType.OutDepot)
-                {
-                    taskInfo.Status = Entity.TaskStatus.Finish;
-                    taskInfo.EditTime = DateTime.Now;
-                    taskInfo.EedTime = DateTime.Now;
-                }
-                db.Default.Updateable(taskInfo).ExecuteCommand();
-                taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"出库任务完成");
-                task = taskInfo;
-                taskInfo.CompleteOrCancelTasks(db);
-                WmsApi.CompleteTask(task.ID);
-
-                obj.Data.TaskNumber = obj.Data2.TaskNumber;
-                obj.Data.GoodsEnd = 8278;
-                obj.Data.VoucherNo++;
-            });
-        }
-
-        public override bool Select(Device dev)
-        {
-            return dev.HasFlag(DeviceFlags.出货口);
-        }
-    }
-}

+ 12 - 11
成品库/WCS.WorkEngineering/Systems/堆垛机.cs

@@ -97,14 +97,16 @@ namespace WCS.WorkEngineering.Systems
                             switch (task.OutType)
                             {
                                 case OutTypeEnum.自动出库任务:
-                                    task.Status = Entity.TaskStatus.Finish;
+                                    
                                     var dev = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation), this.World);
                                     if (task.AddrTo == "8271" || task.AddrTo == "8272" || task.AddrTo == "8273" || task.AddrTo == "8274" || task.AddrTo == "8275")
                                     {
+                                        task.Status = Entity.TaskStatus.Finish;
                                         dev.Data.GoodsEnd = 8278;
                                     }
                                     else
                                     {
+                                        task.Status = TaskStatus.ConveyorExecution;
                                         dev.Data.GoodsEnd = task.AddrTo.ToShort();
                                     }
                                     dev.Data.TaskNumber = task.ID;                                   
@@ -115,14 +117,16 @@ namespace WCS.WorkEngineering.Systems
                                     break;
 
                                 case OutTypeEnum.全自动手动出库任务:
-                                    task.Status = Entity.TaskStatus.Finish;
+                                    
                                     var dev1 = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation), this.World);
                                     if (task.AddrTo == "8271" || task.AddrTo == "8272" || task.AddrTo == "8273" || task.AddrTo == "8274" || task.AddrTo == "8275")
                                     {
+                                        task.Status = Entity.TaskStatus.Finish;
                                         dev1.Data.GoodsEnd = 8278;
                                     }
                                     else
                                     {
+                                        task.Status = TaskStatus.ConveyorExecution;
                                         dev1.Data.GoodsEnd = task.AddrTo.ToShort();
                                     }
                                     dev1.Data.TaskNumber = task.ID;                                    
@@ -308,14 +312,7 @@ namespace WCS.WorkEngineering.Systems
                 World.Log($"堆垛机任务处理:结束---下发入库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid);
             }
             else if (enterOrOut == 3 || !lastIsOut) //出库任务
-            {
-                //判断本次优先执行楼层,并设置下次执行时优先楼层
-
-                //var floor = obj.Entity.GetFlag<int>("FloorOut");
-
-                //floor = floor % 2 + 1;
-                //obj.Entity.SetFlag("FloorOut", floor);
-
+            {               
                 //获取当前堆垛机所有的取货站台
                 var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
 
@@ -334,17 +331,21 @@ namespace WCS.WorkEngineering.Systems
 
                 SqlSugarHelper.Do(db =>
                {
+                   var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.ConveyorExecution).ToList();
                    var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
                    //var taskIn = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.EnterDepot && v.Status > TaskStatus.WaitingToExecute);
 
                    //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
                    var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
-                                                                  .Where(v => allOutCode.Contains(v.SrmStation))
+                                                                  .Where(v => allOutCode.Contains(v.SrmStation))                                                                 
                                                                   .OrderByDescending(v => v.Priority)
                                                                   .OrderBy(v => v.AddTime)
                                                                   .First();
                    if (task == null) throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
 
+                   //控制出货口任务数量
+                   if (task.AddrTo != "8278" && tasks.Count(v => v.AddrTo == task.AddrTo) >=  3) return;
+
                    //if (taskIn.Any(v => v.AddrNext == task.SrmStation))
                    //{
                    //    throw new KnownException($"等待入库任务执行", LogLevelEnum.High);

+ 1 - 13
盘条库/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -196,19 +196,7 @@ namespace WCS.WorkEngineering.Systems
                                             if (taskInfo.AddrFrom == "1021"  || taskInfo.AddrFrom == "1022" || taskInfo.AddrFrom == "1023" || taskInfo.AddrFrom == "1024")
                                             {
                                                 startPos = "PT" + taskInfo.AddrFrom;
-                                            }
-                                            //else if (taskInfo.AddrFrom == "1022")
-                                            //{
-                                            //    startPos = "2002";
-                                            //}
-                                            //else if (taskInfo.AddrFrom == "1023")
-                                            //{
-                                            //    startPos = "2003";
-                                            //}
-                                            //else if (taskInfo.AddrFrom == "1024")
-                                            //{
-                                            //    startPos = "2004";
-                                            //}
+                                            }                                            
                                             else
                                             {
                                                 startPos = taskInfo.AddrFrom;

+ 13 - 28
盘条库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -149,7 +149,7 @@ namespace WCS.WorkEngineering.Systems
                                         //缓存区到出库口
                                         if (task.AddrTo.StartsWith("10"))
                                             busType = 111;
-                                        //入库口到缓存区
+                                        //入库口到缓存区、叫料区到缓存区
                                         else
                                             busType = 333;
                                         //创建AGV搬运任务
@@ -209,19 +209,7 @@ namespace WCS.WorkEngineering.Systems
                                         if (wcs.AddrFrom == "1021" || wcs.AddrFrom == "1022" || wcs.AddrFrom == "1023" || wcs.AddrFrom == "1024")
                                         {
                                             startPos = "PT" + wcs.AddrFrom;
-                                        }
-                                        //else if (wcs.AddrFrom == "1022")
-                                        //{
-                                        //    startPos = "2002";
-                                        //}
-                                        //else if (wcs.AddrFrom == "1023")
-                                        //{
-                                        //    startPos = "2003";
-                                        //}
-                                        //else if (wcs.AddrFrom == "1024")
-                                        //{
-                                        //    startPos = "2004";
-                                        //}
+                                        }                                        
                                         else
                                         {
                                             startPos = wcs.AddrFrom;
@@ -249,7 +237,16 @@ namespace WCS.WorkEngineering.Systems
                                         //获取对应wcs任务
                                         var wcs = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.AgvTaskID == agv.ID && t.Status == Entity.TaskStatus.WaitingToExecute).First();
                                         if (wcs == null) throw new Exception($"未找到对应的WCS任务");
-                                        var res = AgvApi.搬运_wmsEnd("PT", agv.Station, agv.Position, Guid.NewGuid().ToString().Replace("-", ""), "1");
+                                        string endPos = "";
+                                        if (agv.Position == "1012" || agv.Position == "1014" || agv.Position == "1016")
+                                        {
+                                            endPos = "PT" + agv.Position;
+                                        }
+                                        else
+                                        {
+                                            endPos = agv.Position;
+                                        }
+                                        var res = AgvApi.搬运_wmsEnd("PT", agv.Station, endPos, Guid.NewGuid().ToString().Replace("-", ""), "1");
                                         agv.Status = AGVTaskStatus.Confirm;
                                         agv.AgvID = res.data;
                                         db.Default.Updateable(agv).SplitTable().ExecuteCommand();
@@ -276,19 +273,7 @@ namespace WCS.WorkEngineering.Systems
                                         if (wcs.AddrFrom == "1021" || wcs.AddrFrom == "1022" || wcs.AddrFrom == "1023" || wcs.AddrFrom == "1024")
                                         {
                                             startPos = "PT" + wcs.AddrFrom;
-                                        }
-                                        //else if (wcs.AddrFrom == "1022")
-                                        //{
-                                        //    startPos = "2002";
-                                        //}
-                                        //else if (wcs.AddrFrom == "1023")
-                                        //{
-                                        //    startPos = "2003";
-                                        //}
-                                        //else if (wcs.AddrFrom == "1024")
-                                        //{
-                                        //    startPos = "2004";
-                                        //}
+                                        }                                        
                                         else
                                         {
                                             startPos = wcs.AddrFrom;