林豪 左 2 anos atrás
pai
commit
49819ae492

+ 1 - 1
WCS.Core/Device.cs

@@ -132,7 +132,7 @@ namespace WCS.Core
         {
             get
             {
-                return Device.All.Where(v => v.GetFlags("DeviceGroup").Contains(this.Code)).ToArray();
+                return GetFlags("DeviceGroup").Select(v => Device.all[v]).ToList();
             }
         }
 

+ 6 - 0
WCS.Entity/WCS_Palletizing.cs

@@ -82,6 +82,12 @@ namespace WCS.Entity
         [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingLayer.PalletizingId))]
         public List<WCS_PalletizingLayer> Layers { get; set; }
 
+        /// <summary>
+        ///  位信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingLoc.PalletizingId))]
+        public List<WCS_PalletizingLoc> Locs { get; set; }
+
         /// <summary>
         ///  垛型大类
         /// </summary>

+ 6 - 0
WCS.Entity/WCS_PalletizingLoc.cs

@@ -20,6 +20,12 @@ namespace WCS.Entity
         [SugarColumn(IsNullable = false, ColumnDescription = "码垛位信息表Id")]
         public int PalletizingRowId { get; set; }
 
+        /// <summary>
+        ///  码垛信息表Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛位信息表Id")]
+        public int PalletizingId { get; set; }
+
         /// <summary>
         ///  任务Id
         /// </summary>

+ 24 - 0
WCS.Entity/WCS_TaskInfo.cs

@@ -309,6 +309,30 @@ namespace WCS.Entity
         /// </summary>
         [SugarColumn(ColumnDescription = "版本号", ColumnDataType = "timestamp", IsNullable = true, IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]
         public byte[] VER { get; set; }
+
+        /// <summary>
+        ///  行
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行", IsNullable = true)]
+        public int Line { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        [SugarColumn(ColumnDescription = "列", IsNullable = true)]
+        public int Col { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "层", IsNullable = true)]
+        public int Layer { get; set; }
+
+        /// <summary>
+        ///  深度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "深度", IsNullable = true)]
+        public int Depth { get; set; }
     }
 
     /// <summary>

+ 24 - 0
WCS.Entity/WCS_TaskOld.cs

@@ -303,5 +303,29 @@ namespace WCS.Entity
         /// </summary>
         [SugarColumn(ColumnDescription = "货位类型", IsNullable = true)]
         public int GoodsType { get; set; }
+
+        /// <summary>
+        ///  行
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行", IsNullable = true)]
+        public int Line { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        [SugarColumn(ColumnDescription = "列", IsNullable = true)]
+        public int Col { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "层", IsNullable = true)]
+        public int Layer { get; set; }
+
+        /// <summary>
+        ///  深度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "深度", IsNullable = true)]
+        public int Depth { get; set; }
     }
 }

+ 74 - 69
WCS.WorkEngineering/Systems/机械臂cs.cs → WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -17,7 +17,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///   机械臂
     /// </summary>
-    [BelongTo(typeof(MainWorld))]
+    [BelongTo(typeof(RingWorld))]
     [Description("机械臂")]
     public class 机械臂 : DeviceSystem<Device<IRobot520, IRobot521, IRobot522>>
     {
@@ -45,7 +45,7 @@ namespace WCS.WorkEngineering.Systems
             {
                 //取货设备
                 PickUpDevices.Add(roobot.Code, roobot.Sources.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => v).ToList());
-                PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, this.World)).ToList());
+                PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, World)).ToList());
             }
         }
 
@@ -148,18 +148,23 @@ namespace WCS.WorkEngineering.Systems
 
                 if (!arrIn.Any()) throw new KnownException($"[{obj.Entity.Code}]等待入库任务输送到位", LogLevelEnum.Mid);
                 //等待下发的任务信息
-                List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>> taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
+                var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
                 SqlSugarHelper.Do(db =>
                 {
                     //跟据设备组中第一个设备任务号最小的一个先执行
                     var devGroup = arrIn.MinBy(x => x.Item2.OrderBy(o => o.Data2.TaskNumber));
-                    foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2).OrderByDescending(x => x.Entity.Code.ToShort()))
+                    foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2)
+                             )
                     {
                         var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID);
                         if (task == null) continue;
                         var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, dev.Entity.Code, task.Height);
                         task.Status = Entity.TaskStatus.StackerExecution;
                         task.AddrTo = res.ResData.CellNo;
+                        task.Line = res.ResData.Row;
+                        task.Col = res.ResData.Colomn;
+                        task.Layer = res.ResData.Layer;
+                        task.Depth = res.ResData.Row;
                         task.LastInteractionPoint = dev.Entity.Code;
                         task.SrmStation = dev.Entity.Code;
                         task.EditWho = "WCS";
@@ -171,70 +176,71 @@ namespace WCS.WorkEngineering.Systems
 
                 if (!taskList.Any()) return;
 
-                if (taskList.Count == 2)
+                switch (taskList.Count)
                 {
-                    //机械臂需要保证靠翻转机的设备(即设备号较大的设备)的取货任务一定是下发至一工位的,设备号较小的任务下发至二工位
-                    //下发任务一
-                    var taskInfo = taskList.MaxBy(x => x.Item2.Entity.Code.ToShort());
-                    var task = taskInfo.Item1;
-                    var dev = taskInfo.Item2;
-                    var addrTo = task.AddrTo.Split("-");
-                    obj.Data.TaskNumber1 = task.ID;
-                    obj.Data.SLine1 = dev.Entity.Code.ToShort();
-                    obj.Data.SCol1 = 0;
-                    obj.Data.SLayer1 = 0;
-                    obj.Data.SDepth1 = 0;
-                    obj.Data.ELine1 = addrTo[0].ToShort();
-                    obj.Data.ECol1 = addrTo[1].ToShort();
-                    obj.Data.ELayer1 = addrTo[2].ToShort();
-                    obj.Data.EDepth1 = addrTo[3].ToShort();
-                    //下发任务二
-                    taskInfo = taskList.MinBy(x => x.Item2.Entity.Code.ToShort());
-                    task = taskInfo.Item1;
-                    dev = taskInfo.Item2;
-                    addrTo = task.AddrTo.Split("-");
-                    obj.Data.TaskNumber2 = task.ID;
-                    obj.Data.SLine2 = dev.Entity.Code.ToShort();
-                    obj.Data.SCol2 = 0;
-                    obj.Data.SLayer2 = 0;
-                    obj.Data.SDepth2 = 0;
-                    obj.Data.ELine2 = addrTo[0].ToShort();
-                    obj.Data.ECol2 = addrTo[1].ToShort();
-                    obj.Data.ELayer2 = addrTo[2].ToShort();
-                    obj.Data.EDepth2 = addrTo[3].ToShort();
-                    obj.Data.TaskSum = taskList.Count.ToShort();
-                    obj.Data.GoodsType = 1;
-                    obj.Data.TaskType = 3;
-                    obj.Data.VoucherNo++;
-                }
-                else  //如果只有一个任务,固定下发至一号工位
-                {
-                    var task = taskList.FirstOrDefault().Item1;
-                    var dev = taskList.FirstOrDefault().Item2;
-                    var addrTo = task.AddrTo.Split("-");
-                    //下发任务
-                    obj.Data.TaskNumber1 = task.ID;
-                    obj.Data.SLine1 = dev.Entity.Code.ToShort();
-                    obj.Data.SCol1 = 0;
-                    obj.Data.SLayer1 = 0;
-                    obj.Data.SDepth1 = 0;
-                    obj.Data.ELine1 = addrTo[0].ToShort();
-                    obj.Data.ECol1 = addrTo[1].ToShort();
-                    obj.Data.ELayer1 = addrTo[2].ToShort();
-                    obj.Data.EDepth1 = addrTo[3].ToShort();
-                    obj.Data.TaskNumber2 = 0;
-                    obj.Data.SLine2 = 0;
-                    obj.Data.SCol2 = 0;
-                    obj.Data.SLayer2 = 0;
-                    obj.Data.SDepth2 = 0;
-                    obj.Data.ELine2 = 0;
-                    obj.Data.ECol2 = 0;
-                    obj.Data.ELayer2 = 0;
-                    obj.Data.EDepth2 = 0;
-                    obj.Data.TaskSum = taskList.Count.ToShort();
-                    obj.Data.GoodsType = 1;
-                    obj.Data.TaskType = 3;
-                    obj.Data.VoucherNo++;
+                    case 1:
+                        var task = taskList.FirstOrDefault().Item1;
+                        var dev = taskList.FirstOrDefault().Item2;
+                        //下发任务
+                        obj.Data.TaskNumber1 = task.ID;
+                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol1 = 0;
+                        obj.Data.SLayer1 = 0;
+                        obj.Data.SDepth1 = 0;
+                        obj.Data.ELine1 = task.Line.ToShort();
+                        obj.Data.ECol1 = task.Col.ToShort();
+                        obj.Data.ELayer1 = task.Layer.ToShort();
+                        obj.Data.EDepth1 = task.Depth.ToShort();
+                        obj.Data.TaskNumber2 = 0;
+                        obj.Data.SLine2 = 0;
+                        obj.Data.SCol2 = 0;
+                        obj.Data.SLayer2 = 0;
+                        obj.Data.SDepth2 = 0;
+                        obj.Data.ELine2 = 0;
+                        obj.Data.ECol2 = 0;
+                        obj.Data.ELayer2 = 0;
+                        obj.Data.EDepth2 = 0;
+                        obj.Data.TaskSum = taskList.Count.ToShort();
+                        obj.Data.GoodsType = 1;
+                        obj.Data.TaskType = 3;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    case 2:
+                        //一工位取深度较大的任务
+                        var taskInfo = taskList.MaxBy(x => x.Item1.Depth);
+                        task = taskInfo.Item1;
+                        dev = taskInfo.Item2;
+                        obj.Data.TaskNumber1 = task.ID;
+                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol1 = 0;
+                        obj.Data.SLayer1 = 0;
+                        obj.Data.SDepth1 = 0;
+                        obj.Data.ELine1 = task.Line.ToShort();
+                        obj.Data.ECol1 = task.Col.ToShort();
+                        obj.Data.ELayer1 = task.Layer.ToShort();
+                        obj.Data.EDepth1 = task.Depth.ToShort();
+                        //二工位取深度较少的值
+                        taskInfo = taskList.MinBy(x => x.Item1.Depth);
+                        task = taskInfo.Item1;
+                        dev = taskInfo.Item2;
+                        obj.Data.TaskNumber2 = task.ID;
+                        obj.Data.SLine2 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol2 = 0;
+                        obj.Data.SLayer2 = 0;
+                        obj.Data.SDepth2 = 0;
+                        obj.Data.ELine2 = task.Line.ToShort();
+                        obj.Data.ECol2 = task.Col.ToShort();
+                        obj.Data.ELayer2 = task.Layer.ToShort();
+                        obj.Data.EDepth2 = task.Depth.ToShort();
+                        obj.Data.TaskSum = taskList.Count.ToShort();
+                        obj.Data.GoodsType = 1;
+                        obj.Data.TaskType = 3;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    default:
+                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
                 }
             }
             else if (!lastIsOut) //出库任务
@@ -261,11 +267,10 @@ namespace WCS.WorkEngineering.Systems
                 SqlSugarHelper.Do(db =>
                         {
                             var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
-                            //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
+
                             var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
                                                                          .Where(v => allOutCode.Contains(v.SrmStation))
                                                                          .OrderByDescending(v => v.Priority)
-                                                                         .OrderByDescending(v => v.Floor == floor ? 1 : 0)
                                                                          .OrderBy(v => v.AddTime)
                                                                          .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
 

+ 2 - 5
WCS.WorkEngineering/WorkStart.cs

@@ -517,15 +517,12 @@ namespace WCS.WorkEngineering
                 //环形库一北侧机械手取货位
                 new("424",new List<string> {"424","425"}),
                 new("433",new List<string> {"433","434"}),
-                new("424",new List<string> {"442","443"})
+                new("442",new List<string> {"442","443"})
             };
             foreach (var item in tuples2)
             {
                 var device = Device.All.FirstOrDefault(x => x.Code == item.Item1);
-                foreach (var sub in item.Item2)
-                {
-                    device.AddDeviceGroup(sub);
-                }
+                device.AddDeviceGroup(item.Item2.ToArray());
             }
 
             #endregion 添加设备组

+ 12 - 0
WCS.WorkEngineering/Worlds/RingWorld.cs

@@ -0,0 +1,12 @@
+using System.ComponentModel;
+
+namespace WCS.WorkEngineering.Worlds
+{
+    /// <summary>
+    ///  环形库
+    /// </summary>
+    [Description("环形库")]
+    public class RingWorld : MainWorld
+    {
+    }
+}