林豪 左 1 an în urmă
părinte
comite
ad70b1ce45
24 a modificat fișierele cu 462 adăugiri și 179 ștergeri
  1. 12 7
      WCS.Core/PLC.cs
  2. 1 2
      WCS.Core/World.cs
  3. 48 46
      业务工程/分拣库/WCS.WorkEngineering/Systems/RGVSystems.cs
  4. 25 44
      业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/桁架分流点.cs
  5. 23 18
      业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs
  6. 15 9
      业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/二次码垛任务到RGV取货位处理.cs
  7. 1 2
      业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs
  8. 29 29
      业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs
  9. 122 0
      业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库分配货位.cs
  10. 3 3
      业务工程/分拣库/WCS.WorkEngineering/Systems/环形库码垛结束.cs
  11. 17 16
      业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs
  12. 1 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/MainWorld.cs
  13. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld1.cs
  14. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld2.cs
  15. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld3.cs
  16. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld4.cs
  17. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld5.cs
  18. 17 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld6.cs
  19. 12 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld1.cs
  20. 12 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld2.cs
  21. 12 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld3.cs
  22. 3 3
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld4.cs
  23. 12 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld5.cs
  24. 12 0
      业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld6.cs

+ 12 - 7
WCS.Core/PLC.cs

@@ -3,14 +3,15 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Net.NetworkInformation;
 using System.Text;
-using System.Threading.Tasks; 
+using System.Threading.Tasks;
 
 namespace WCS.Core
 {
     public class PLC : EntityEx<PLCInfo>
     {
         public bool Ping { get; private set; }
-        public PLC(PLCInfo ent,World world) : base(ent)
+
+        public PLC(PLCInfo ent, World world) : base(ent)
         {
             if (Configs.PLCAccessorCreater != null)
             {
@@ -23,29 +24,33 @@ namespace WCS.Core
             {
                 while (true)
                 {
-                    Ping=ping();
+                    Ping = ping();
                     Task.Delay(1000);
                 }
+                // ReSharper disable once FunctionNeverReturns
             });
-        }      
+        }
+
         public IPLCAccessor Accessor { get; private set; }
 
-        bool ping(int timeout = 100)
-        { 
+        private bool ping(int timeout = 300)
+        {
             var p = new Ping();
+            if (Entity.IP == "1") return false;
             var res = p.Send(Entity.IP, timeout);
             return res.Status == IPStatus.Success;
         }
-      
     }
 
     public interface IPLCAccessorCreater
     {
         IPLCAccessor Create(PLCInfo data);
     }
+
     public interface IPLCAccessor
     {
         void WriteBytes(ushort db, ushort address, byte[] data);
+
         byte[] ReadBytes(ushort db, ushort address, ushort length);
     }
 }

+ 1 - 2
WCS.Core/World.cs

@@ -65,9 +65,8 @@ namespace WCS.Core
         {
             MM_BeginPeriod(1);
             Worlds.ForEach(w => w.Init());
-            foreach (var w in Worlds)
+            foreach (var w in Worlds.Where(x => x.SystemTypes.Length > 0))
             {
-                if (w.SystemTypes.Length == 0) continue;
                 w.Start();
             }
             var arr = Worlds.SelectMany(v => v.SystemGroups).SelectMany(v => v.Value)

+ 48 - 46
业务工程/分拣库/WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -233,43 +233,45 @@ namespace WCS.WorkEngineering.Systems
                             World.Log($"任务处理:开始-取放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
                             var statDev = Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString());
 
-                            if (statDev.HasFlag(DeviceFlags.二次码垛RGV取货口))
-                            {
-                                var dev = new Device<IStation520, IStation521, ITruss530>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-                                WCS_Palletizing pall = new WCS_Palletizing();
-                                //获取码垛信息
-                                SqlSugarHelper.Do(_db =>
-                                {
-                                    var db = _db.Default;
-                                    pall = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, x => x.Rows, x => x.Locs).First(x => x.Id == obj.Data2.TaskNumber);
-                                });
-                                if (pall == null)
-                                {
-                                    World.Log($"未找到对应任务{obj.Data2.TaskNumber}");
-                                }
-                                var pallLoc = pall.Layers.SelectMany(x => x.Rows).SelectMany(x => x.Locs).Select(x => new { XYNo = x.XYNo.ToShort(), x.Finish }).ToList();
-
-                                dev.Data3.MaxQuantity = pall.CountQty.ToShort();
-                                dev.Data3.Quantity = pallLoc.Count(x => x.Finish).ToShort();
-                                dev.Data3.Type = pall.ShortCode;
-                                dev.Data3.VoucherNo++;
-                                World.Log($"任务处理:二次码垛目标地址写入码垛信息-目标货位[{dev.Entity.Code}]最大码垛数量[{dev.Data3.MaxQuantity}]已码数量[{dev.Data3.Quantity}]垛形[{dev.Data3.Type}]凭证号[{dev.Data3.VoucherNo}]");
-
-                                var destDev = new Device<IStation520, IStation521>(statDev, World);
-                                destDev.Data.TaskNumber = 0;
-                                destDev.Data.GoodsStart = 0;
-                                destDev.Data.GoodsEnd = 0;
-                                World.Log($"任务处理:清除起始地址信息-目标货位{destDev.Entity.Code}");
-                            }
-                            else
-                            {
-                                //var destDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-                                var stDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString())!, World);
-                                stDev.Data.TaskNumber = 0;
-                                stDev.Data.GoodsStart = 0;
-                                stDev.Data.GoodsEnd = 0;
-                                World.Log($"任务处理:清除目标地址信息-目标货位{stDev.Entity.Code}");
-                            }
+                            //if (statDev.HasFlag(DeviceFlags.二次码垛RGV取货口))
+                            //{
+                            //    //var dev = new Device<IStation520, IStation521, ITruss530>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
+                            //    //WCS_Palletizing pall = new WCS_Palletizing();
+                            //    ////获取码垛信息
+                            //    //SqlSugarHelper.Do(_db =>
+                            //    //{
+                            //    //    var db = _db.Default;
+                            //    //    pall = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, x => x.Rows, x => x.Locs).First(x => x.Id == obj.Data2.TaskNumber);
+                            //    //});
+                            //    //if (pall == null)
+                            //    //{
+                            //    //    World.Log($"未找到对应任务{obj.Data2.TaskNumber}");
+                            //    //}
+                            //    //var pallLoc = pall.Layers.SelectMany(x => x.Rows).SelectMany(x => x.Locs).Select(x => new { XYNo = x.XYNo.ToShort(), x.Finish }).ToList();
+
+                            //    //dev.Data3.MaxQuantity = pall.CountQty.ToShort();
+                            //    //dev.Data3.Quantity = pallLoc.Count(x => x.Finish).ToShort();
+                            //    //dev.Data3.Type = pall.ShortCode;
+                            //    //dev.Data3.VoucherNo++;
+                            //    //World.Log($"任务处理:二次码垛目标地址写入码垛信息-目标货位[{dev.Entity.Code}]最大码垛数量[{dev.Data3.MaxQuantity}]已码数量[{dev.Data3.Quantity}]垛形[{dev.Data3.Type}]凭证号[{dev.Data3.VoucherNo}]");
+
+                            //    //var destDev = new Device<IStation520, IStation521>(statDev, World);
+                            //    //destDev.Data.TaskNumber = 0;
+                            //    //destDev.Data.GoodsStart = 0;
+                            //    //destDev.Data.GoodsEnd = 0;
+                            //    //World.Log($"任务处理:清除起始地址信息-目标货位{destDev.Entity.Code}");
+                            //}
+                            //else
+                            //{
+                            //    //var destDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
+
+                            //}
+
+                            var stDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString())!, World);
+                            stDev.Data.TaskNumber = 0;
+                            stDev.Data.GoodsStart = 0;
+                            stDev.Data.GoodsEnd = 0;
+                            World.Log($"任务处理:清除目标地址信息-目标货位{stDev.Entity.Code}");
 
                             obj.Data.RES1 = 1;
                             World.Log($"任务处理:结束-取放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
@@ -354,15 +356,15 @@ namespace WCS.WorkEngineering.Systems
                         return;
                     }
 
-                    if (dev.Entity.HasFlag(DeviceFlags.二次码垛RGV取货口))
-                    {
-                        obj.Data.TaskNumber = dev.Data.TaskNumber;
-                        obj.Data.CmdType = RGVCmdType.PickPutGoods;
-                        obj.Data.StartPosition = dev.Entity.Code.ToShort();
-                        obj.Data.DestPosition = dev.Data.GoodsEnd;
-                        obj.Data.VoucherNo++;
-                        return;
-                    }
+                    //if (dev.Entity.HasFlag(DeviceFlags.二次码垛RGV取货口))
+                    //{
+                    //    obj.Data.TaskNumber = dev.Data.TaskNumber;
+                    //    obj.Data.CmdType = RGVCmdType.PickPutGoods;
+                    //    obj.Data.StartPosition = dev.Entity.Code.ToShort();
+                    //    obj.Data.DestPosition = dev.Data.GoodsEnd;
+                    //    obj.Data.VoucherNo++;
+                    //    return;
+                    //}
 
                     World.Log($"任务处理:开始-下发满托入库任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]RGV运行状态[{obj.Data2.WorkMode.GetDescription()}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
                     //非拆盘机起始任务

+ 25 - 44
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/桁架分流点.cs

@@ -1,10 +1,9 @@
-using Newtonsoft.Json;
-using PlcSiemens.Core.Extension;
+using System.ComponentModel;
+using Newtonsoft.Json;
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
 using SqlSugar;
-using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
@@ -16,7 +15,7 @@ using TaskStatus = WCS.Entity.TaskStatus;
 using WCS_CacheLine = WCS.Entity.WCS_CacheLine;
 using WCS_CacheLineLoc = WCS.Entity.WCS_CacheLineLoc;
 
-namespace WCS.WorkEngineering.Systems
+namespace WCS.WorkEngineering.Systems.分拣支线
 {
     /// <summary>
     ///  桁架分流点
@@ -163,8 +162,10 @@ namespace WCS.WorkEngineering.Systems
             if (devCode == 0)
             {
                 World.Log($"无可用线体:{taskInfo.ID}", LogLevelEnum.Mid);
-                var endTime = DateTime.Now.AddMinutes(-25);
-                //找一个当前时间最早且已超过25分钟未码垛的码垛信息半托入库
+                //如果当前工字轮是18,不会触发当前逻辑,因为所有在桁架码垛的18工字轮仅一种规格
+                if (taskInfo.GoodsType == 18) return false;
+                var endTime = DateTime.Now.AddMinutes(-30);
+                //找一个当前时间最早且已超过30分钟未码垛的码垛信息半托入库
                 //未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
                 var palletizing = db.Queryable<WCS_Palletizing>()
                     .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
@@ -179,13 +180,10 @@ namespace WCS.WorkEngineering.Systems
                 {
                     var dev = Device.All.Where(x => x.Code == palletizing.PalletizingStation)
                         .Select(x => new Device<ITruss530>(x, World)).FirstOrDefault();
-                    if (dev != null && (!dev.Data.CmdType.HasFlag(TrussCmdType.Two) &&
-                                        !dev.Data.CmdType.HasFlag(TrussCmdType.End1)))
+                    if (dev != null && !dev.Data.CmdType.HasFlag(TrussCmdType.Two) && !dev.Data.CmdType.HasFlag(TrussCmdType.End1))
                     {
                         //如果找到的最早的一个托盘超六小时了,就直接强制结盘
-                        dev.Data.CmdType = palletizing.AddTime < DateTime.Now.AddHours(-6)
-                            ? TrussCmdType.End1
-                            : TrussCmdType.Two;
+                        dev.Data.CmdType = palletizing.AddTime < DateTime.Now.AddHours(-6) ? TrussCmdType.End1 : TrussCmdType.Two;
                     }
                 }
                 return false;
@@ -224,7 +222,7 @@ namespace WCS.WorkEngineering.Systems
                 var palletizingRow = rows.MinBy(x => x.RowNo);
 
                 //开始初始化缓存位信息
-                cacheLine = new WCS.Entity.WCS_CacheLine()
+                cacheLine = new WCS_CacheLine()
                 {
                     LocationNo = devCode,
                     AddTime = nowTime,
@@ -240,39 +238,24 @@ namespace WCS.WorkEngineering.Systems
 
                 if (palletizing.isItHalf) //当前任务被分配到了二次码垛托盘上了。
                 {
-                    var twoDevCode = new List<string>();
-                    switch (obj.Entity.Code)
+                    var twoDevCode = obj.Entity.Code switch
                     {
-                        case "455":
-                            twoDevCode.AddRange(new List<string>() { "1670", "1671" });
-                            break;
-
-                        case "655":
-                            twoDevCode.AddRange(new List<string>() { "1685", "1686" });
-                            break;
-
-                        case "855":
-                            twoDevCode.AddRange(new List<string>() { "1700", "1701" });
-                            break;
-
-                        case "1055":
-                            twoDevCode.AddRange(new List<string>() { "1715", "1716" });
-                            break;
-
-                        case "1255":
-                            twoDevCode.AddRange(new List<string>() { "", "" });
-                            break;
-
-                        case "1455":
-                            twoDevCode.AddRange(new List<string>() { "", "" });
-                            break;
-                    }
+                        "455" => "1606",
+                        "655" => "1616",
+                        "855" => "1626",
+                        "1055" => "1636",
+                        "1255" => "1646",
+                        "1455" => "1656",
+                        _ => throw new ArgumentOutOfRangeException()
+                    };
 
                     //找到一个对应的空置码垛位
-                    var twoDevs = Device.All.Where(x => twoDevCode.Contains(x.Code))
+                    var twoDevs = Device.All.Where(x => twoDevCode == x.Code)
                         .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
                         .Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status)).Select(x => x.Entity.Code);
-                    if (twoDevs.Any())
+                    //找到一个对应的空置码垛位
+                    var twoDev = new Device<IStation520, IStation521, IStation523>(Device.All.First(x => x.Code == twoDevCode), World);
+                    if (twoDev.Data3.Status.HasFlag(StationStatus.PH_Status))
                     {
                         World.Log("无可用的二次码垛工位");
                         continue;
@@ -287,10 +270,8 @@ namespace WCS.WorkEngineering.Systems
                     palletizing.EditTime = nowTime;
                     palletizing.Finish = false;
                     palletizing.PalletizingStation = twoDevs.FirstOrDefault();
-                    palletizing.TaskAddNext ??= devCode.ToString();
-                    db.UpdateableRowLock(palletizing)
-                        .UpdateColumns(x => new { x.EditTime, x.Finish, x.PalletizingStation, x.TaskAddNext })
-                        .ExecuteCommand();
+                    palletizing.TaskAddNext = devCode.ToString();
+                    db.UpdateableRowLock(palletizing).UpdateColumns(x => new { x.EditTime, x.Finish, x.PalletizingStation, x.TaskAddNext }).ExecuteCommand();
                 }
 
                 if (palletizing.TaskAddNext == null)

+ 23 - 18
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs

@@ -48,6 +48,11 @@ namespace WCS.WorkEngineering.Systems
                 return;
             }
 
+            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
+            {
+                World.Log("站台无光电信息");
+                return;
+            }
             ;
             if (obj.Data2.Request != 1)
             {
@@ -223,32 +228,32 @@ namespace WCS.WorkEngineering.Systems
                 },
                 18 => obj.Entity.Code switch
                 {
-                    "418" => 442,
-                    "618" => 642,
-                    "818" => 842,
-                    "1018" => 1042,
-                    "1218" => 1242,
-                    "1418" => 1442,
+                    "418" => 444,
+                    "618" => 644,
+                    "818" => 844,
+                    "1018" => 1044,
+                    "1218" => 1244,
+                    "1418" => 1444,
                     _ => 9999
                 },
                 50 => obj.Entity.Code switch
                 {
-                    "418" => 424,
-                    "618" => 624,
-                    "818" => 824,
-                    "1018" => 1024,
-                    "1218" => 1224,
-                    "1418" => 1424,
+                    "418" => 426,
+                    "618" => 626,
+                    "818" => 826,
+                    "1018" => 1026,
+                    "1218" => 1226,
+                    "1418" => 1426,
                     _ => 9999
                 },
                 34 => obj.Entity.Code switch
                 {
-                    "418" => 433,
-                    "618" => 633,
-                    "818" => 833,
-                    "1018" => 1033,
-                    "1218" => 1233,
-                    "1418" => 1433,
+                    "418" => 435,
+                    "618" => 635,
+                    "818" => 835,
+                    "1018" => 1035,
+                    "1218" => 1235,
+                    "1418" => 1435,
                     _ => 9999
                 },
                 _ => 9999

+ 15 - 9
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/二次码垛任务到RGV取货位处理.cs

@@ -4,6 +4,7 @@ using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
+using WCS.Entity.Protocol.Truss;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Worlds;
 using TaskStatus = WCS.Entity.TaskStatus;
@@ -15,12 +16,11 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
     /// </summary>
     [BelongTo(typeof(SortingPalletizingWorld))]
     [Description("二次码垛任务到RGV取货位处理")]
-    public class 二次码垛任务到RGV取货位处理 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
+    public class 二次码垛任务到RGV取货位处理 : DeviceSystem<Device<IStation520, IStation521, IStation523, ITruss530>>
     {
         protected override bool ParallelDo => true;
-        
 
-        public override void Do(Device<IStation520, IStation521, IStation523> obj)
+        public override void Do(Device<IStation520, IStation521, IStation523, ITruss530> obj)
         {
             if (!obj.Data3.Status.HasFlag(StationStatus.Auto)) return;
             if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) return;
@@ -28,7 +28,8 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
             if (obj.Data2.Request != 1) return;
 
             var addNext = 1;
-            int taskId = 0;
+            WCS_Palletizing palletizing = null;
+            WCS_TaskInfo task = null;
 
             SqlSugarHelper.Do(_db =>
             {
@@ -36,7 +37,7 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
                 var soDev = obj.Entity.Sources.First();
                 var taskInfo = db.Queryable<WCS_TaskInfo>().Where(x => x.SrmStation == soDev.Code && x.Status == TaskStatus.StackerCompleted).OrderBy(x => x.EditTime).First();
                 if (taskInfo == null) return;
-                var pall = db.Queryable<WCS_Palletizing>().RowLock().First(x => x.TaskId == taskInfo.ID && !x.Finish);
+                var pall = db.Queryable<WCS_Palletizing>().RowLock().Includes(x => x.Locs).First(x => x.TaskId == taskInfo.ID && !x.Finish);
                 if (pall == null) return;
                 taskInfo.Status = TaskStatus.Finish;
                 taskInfo.EditTime = DateTime.Now;
@@ -44,12 +45,17 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
                 db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.EditTime, x.EndTime }).ExecuteCommand();
                 taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, "二次码垛出库任务完成");
                 addNext = pall.PalletizingStation.ToShort();
-                taskId = pall.Id;
+                palletizing = pall;
+                task = taskInfo;
             });
-            if (taskId == 0) return;
-            obj.Data.TaskNumber = taskId;
+            if (palletizing == null || task == null) return;
+            obj.Data.TaskNumber = palletizing.Id;
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
-            obj.Data.GoodsEnd = addNext.ToShort();
+            obj.Data.GoodsEnd = 0;
+            obj.Data4.Type = 1;
+            obj.Data4.MaxQuantity = palletizing.CountQty.ToShort();
+            obj.Data4.Quantity = palletizing.Locs.Count(x => x.Finish).ToShort();
+            obj.Data4.VoucherNo++;
             obj.Data.VoucherNo++;
         }
 

+ 1 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -299,8 +299,7 @@ namespace WCS.WorkEngineering.Systems
                     if (rowList.Count == 2 && rowList[0].LocationNo == rowList[1].LocationNo) rowList = rowList!.Take(1).ToList();
                     //两个行号,差值大于一时,只执行一个任务
                     if (rowList.Count == 2 && rowList[0].RowNo + 1 != rowList[1].RowNo) rowList = rowList!.Take(1).ToList();
-                    //如果取货行号是在18取货区域,只
-
+                    //如果取货行号是在18取货区域,只执行一个任务
                     if (rowList.Count == 2)
                     {
                         var locationNos = rowList.Select(x => x.LocationNo);

+ 29 - 29
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -11,7 +11,7 @@ using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
-using WCS.WorkEngineering.Worlds;
+using WCS.WorkEngineering.Worlds.环形库.环形库;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using TaskStatus = WCS.Entity.TaskStatus;
 
@@ -20,7 +20,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///   机械臂
     /// </summary>
-    [BelongTo(typeof(RingWorld))]
+    [BelongTo(typeof(RingWorld1))]
     [Description("机械臂")]
     public class 机械臂 : DeviceSystem<Device<IRobot520, IRobot521, IRobot522>>
     {
@@ -165,17 +165,11 @@ namespace WCS.WorkEngineering.Systems
                 var arrIn = pickUpDevices.Where(x => x.Item2.All(a => !a.Data.Status.HasFlag(StationStatus.Run)))
                                                       .Where(x =>
                                                       {
-                                                          var a = x.Item2
-                                                              .OrderBy(o => o.Entity.Code.ToShort()) //前两个设备中有取货任务的
-                                                              .Take(2)
-                                                              .Any(a => a.Data2.TaskNumber > 0 && a.Data.Status.HasFlag(StationStatus.PH_Status));
-                                                          var b = x.Item2
-                                                              .OrderBy(o => o.Entity.Code.ToShort()) //前两个设备中有取货任务的
-                                                              .First();
-                                                          return a && b.Data2.TaskNumber > 0 && b.Data.Status.HasFlag(StationStatus.PH_Status);
-                                                      })
-                                                      .OrderBy(x => x.Item1.Data2.TaskNumber)
-                                                      .ToList();
+                                                          var a = x.Item2.Any(a => a.Data2.TaskNumber > 0 && a.Data.Status.HasFlag(StationStatus.PH_Status));
+                                                          var b = x.Item2.OrderBy(o => o.Entity.Code.ToShort()).First();
+                                                          return b.Data2.TaskNumber > 0 && b.Data.Status.HasFlag(StationStatus.PH_Status) && a;
+                                                      }).ToList();
+                //.OrderBy(x => x.Item1.Data2.TaskNumber)
 
                 if (!arrIn.Any())
                 {
@@ -188,11 +182,17 @@ namespace WCS.WorkEngineering.Systems
                 var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
                 SqlSugarHelper.Do(db =>
                 {
+                    ////跟据设备组中第一个设备任务号最小的一个先执行
+                    //var devGroup = arrIn.MinBy(x => x.Item2.MinBy(o => o.Data2.TaskNumber).Data2.TaskNumber).Item2
+                    //                                        .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status))
+                    //                                        .OrderByDescending(x => x.Entity.Code.ToShort())
+                    //                                        .Take(2);
+
                     //跟据设备组中第一个设备任务号最小的一个先执行
-                    var devGroup = arrIn.MinBy(x => x.Item2.MinBy(o => o.Data2.TaskNumber).Data2.TaskNumber).Item2
-                                                            .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status) /*&& x.Data.Status1.HasFlag(StationStatus1.IsLock)*/)
-                                                            .OrderByDescending(x => x.Entity.Code.ToShort())
-                                                            .Take(2);
+                    var devGroup = arrIn.MinBy(x => x.Item1.Data2.TaskNumber).Item2
+                        .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status));
+                    //.OrderByDescending(x => x.Entity.Code.ToShort())
+                    //.Take(2);
                     if (!devGroup.Any())
                     {
                         obj.Entity.SetFlag("InQuantity", 4); //在无有效取货位的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
@@ -203,19 +203,19 @@ namespace WCS.WorkEngineering.Systems
                     {
                         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.GoodsType);
-                        if (res.ResCode != ResponseStatusCodeEnum.Sucess)
-                        {
-                            World.Log(res.ResMsg);
-                            obj.Entity.SetFlag("InQuantity", 4); //在获取货物异常的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
-                            return;
-                        }
+                        //var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, dev.Entity.Code, task.GoodsType);
+                        //if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+                        //{
+                        //    World.Log(res.ResMsg);
+                        //    obj.Entity.SetFlag("InQuantity", 4); //在获取货物异常的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
+                        //    return;
+                        //}
                         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.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.Device = obj.Entity.Code;

+ 122 - 0
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库分配货位.cs

@@ -0,0 +1,122 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ServiceCenter.Extensions;
+using ServiceCenter.Logs;
+using ServiceCenter.SqlSugars;
+using WCS.Core;
+using WCS.Entity;
+using WCS.Entity.Protocol.Robot;
+using WCS.Entity.Protocol.Station;
+using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.WMS.Response;
+using WCS.WorkEngineering.Worlds.环形库.环形库;
+using TaskStatus = WCS.Entity.TaskStatus;
+
+namespace WCS.WorkEngineering.Systems.环形库
+{
+    [BelongTo(typeof(RingWorld1))]
+    [Description("机械臂")]
+    public class 环形库分配货位 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
+    {
+        protected override bool ParallelDo => true;
+
+        public override void Do(Device<IStation520, IStation521, IStation523> obj)
+        {
+            if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
+            {
+                World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}");
+                return;
+            }
+
+            if (obj.Data3.Status.HasFlag(StationStatus.Run))
+            {
+                World.Log("设备运行中");
+                return;
+            }
+            ;
+            if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status))
+            {
+                World.Log("站台货物信息与实际占用不一致");
+                return;
+            }
+
+            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
+            {
+            }
+            ;
+            if (obj.Data2.Request != 1)
+            {
+                World.Log("无请求");
+                return;
+            }
+
+            WCS_TaskInfo taskInfo = null;
+
+            //开始获取货位号
+            SqlSugarHelper.Do(db =>
+            {
+                var task = db.Default.Queryable<WCS_TaskInfo>().First(v => obj.Data2.TaskNumber == v.ID);
+                if (task == null)
+                {
+                    World.Log($"未找到任务[{obj.Data2.TaskNumber}],请人工接入处理!!!!");
+                    return;
+                }
+
+                if (task.Type != TaskType.SetPlate)
+                {
+                    World.Log($"任务[{obj.Data2.TaskNumber}]任务类型错误,应该是组盘任务,请人工接入处理!!!!");
+                    return;
+                }
+                if (task.Status != TaskStatus.FinishOfShunt)
+                {
+                    World.Log($"任务[{obj.Data2.TaskNumber}]任务状态错误,当前状态应该市分流结束,,请人工接入处理!!!!");
+                    return;
+                }
+
+                var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
+                if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+                {
+                    World.Log(res.ResMsg);
+                    return;
+                }
+                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 = obj.Entity.Code;
+                task.Device = obj.Entity.Code;
+                task.EditWho = "WCS";
+                db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, x.Device, x.EditWho }).ExecuteCommand();
+                task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"任务分配货位{task.AddrTo}");
+                taskInfo = task;
+            });
+            if (taskInfo == null) return;
+            var next = (taskInfo.AddrNext.ToShort() - 2).ToShort();
+            obj.Data.TaskNumber = taskInfo.ID;
+            obj.Data.TaskNumber = taskInfo.ID;
+            obj.Data.GoodsStart = obj.Entity.Code.ToShort();
+            obj.Data.GoodsStart = obj.Entity.Code.ToShort();
+            obj.Data.GoodsEnd = next;
+            obj.Data.GoodsEnd = next;
+            obj.Data.SetVoucherNo();
+        }
+
+        public override bool Select(Device dev)
+        {
+            var codes = new List<string>()
+            {
+                "444","644","844","1044","1244","1444",
+                "426","626","826","1026","1226","1426",
+                "435","635","835","1035","1235","1435"
+            };
+            return codes.Any(x => x == dev.Code);
+        }
+    }
+}

+ 3 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库码垛结束.cs → 业务工程/分拣库/WCS.WorkEngineering/Systems/环形库码垛结束.cs

@@ -14,7 +14,7 @@ using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using TaskStatus = WCS.Entity.TaskStatus;
 
-namespace WCS.WorkEngineering.Systems.环形库
+namespace WCS.WorkEngineering.Systems
 {
     /// <summary>
     ///  环形库码垛结束
@@ -25,7 +25,7 @@ namespace WCS.WorkEngineering.Systems.环形库
     {
         protected override bool ParallelDo => true;
 
-        
+
 
         public override void Do(Device<IStation520, IStation521, IStation523, IRobot530, IRobot531> obj)
         {
@@ -42,7 +42,7 @@ namespace WCS.WorkEngineering.Systems.环形库
                 var tasks = db.Queryable<WCS_TaskInfo>().UpdLock().Where(x => taskNoList.Contains(x.ID) && x.Status == TaskStatus.ConveyorExecution).ToList();
                 var deliveryTask = db.Queryable<WCS_TaskInfo>().UpdLock().Single(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status >= TaskStatus.RgvExecution) ?? throw new KnownException($"未找到当前站台对应的托盘搬运任务", LogLevelEnum.High);
                 var taskInfo = db.Queryable<WCS_TaskInfo>().UpdLock().Single(x => x.Status <= TaskStatus.RgvCompleted && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
-                if (deliveryTask.Status != Entity.TaskStatus.RgvCompleted) throw new KnownException($"搬运任务状态异常:{deliveryTask.ID}", LogLevelEnum.High);
+                if (deliveryTask.Status != TaskStatus.RgvCompleted) throw new KnownException($"搬运任务状态异常:{deliveryTask.ID}", LogLevelEnum.High);
                 if (taskInfo == null)
                 {
                     //开始获取当前位置的空托盘搬运任务信息

+ 17 - 16
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -346,9 +346,9 @@ namespace WCS.WorkEngineering
             var tuples1 = new List<Tuple<string, List<int>>>
             {
                 //桁架
-                new("10.30.37.211",new  List<int>(){1685,1686,1687,1688,1689,1690,1675,1674,1673,1672,1671,1670,1677,1678,1679,1680,1665,1664,1663,1662}), //分拣库一
-                new("10.30.37.217",new  List<int>(){1715,1716,1717,1718,1719,1720,1705,1704,1703,1702,1701,1700,1707,1708,1709,1710,1695,1694,1693,1692}), //分拣库二
-                new("10.30.37.223",new  List<int>(){1745,1746,1747,1748,1749,1750,1735,1734,1733,1732,1731,1730,1737,1738,1739,1740,1725,1724,1723,1722}), //分拣库三
+                new("10.30.37.211",new  List<int>(){1685,1686,1687,1688,1689,1690,1675,1674,1673,1672,1671,1670,1677,1678,1679,1680,1665,1664,1663,1662,1616,1606}), //分拣库一
+                new("10.30.37.217",new  List<int>(){1715,1716,1717,1718,1719,1720,1705,1704,1703,1702,1701,1700,1707,1708,1709,1710,1695,1694,1693,1692,1636,1626}), //分拣库二
+                new("10.30.37.223",new  List<int>(){1745,1746,1747,1748,1749,1750,1735,1734,1733,1732,1731,1730,1737,1738,1739,1740,1725,1724,1723,1722,1656,1646}), //分拣库三
             };
 
             foreach (var item in tuples1)
@@ -1099,8 +1099,9 @@ namespace WCS.WorkEngineering
                 { DeviceFlags.桁架18取货点, new List<string>(){ "545", "559", "573", "945", "959", "973", "1345", "1359", "1373", "745", "759", "773", "1145", "1159", "1173", "1545", "1559", "1573" } },
                 //{ DeviceFlags.拆盘机09, new List<string>(){ /*"1606", "1616",*/"1626","1636","1646","1656" } },
                 { DeviceFlags.拆盘机, new List<string>(){ "1602", "1612", "1622", "1632", "1642", "1652" } },
-                { DeviceFlags.桁架码垛位, new List<string>(){ /*"1670", "1671",*/ "1672", "1673", "1674", "1675", "1664","1662","1663","1665","1677","1678","1679","1680",/*"1685","1686",*/"1687","1688","1689",
-                    "1690", "1692", "1693", "1694", "1695", "1700", "1701", "1702", "1703", "1704", "1705", "1707", "1708", "1709", "1710", "1715", "1716", "1717", "1718", "1719", "1720", "1722", "1723", "1724", "1725", "1730", "1731", "1732", "1733", "1734", "1735", "1737", "1738", "1739", "1740", "1745", "1746", "1747", "1748", "1749", "1750" } },
+                { DeviceFlags.桁架码垛位, new List<string>(){ "1670", "1671", "1672", "1673", "1674", "1675", "1664","1662","1663","1665","1677","1678","1679","1680","1685","1686","1687","1688","1689",
+                    "1690", "1692", "1693", "1694", "1695", "1700", "1701", "1702", "1703", "1704", "1705", "1707", "1708", "1709", "1710", "1715", "1716", "1717", "1718", "1719", "1720", "1722", "1723",
+                    "1724", "1725", "1730", "1731", "1732", "1733", "1734", "1735", "1737", "1738", "1739", "1740", "1745", "1746", "1747", "1748", "1749", "1750","1606","1616","1626","1636","1646","1656"} },
                 { DeviceFlags.环形库码垛工位, new List<string>(){ "1666", "1661", "1676", "1681", "1691", "1696", "1706", "1711", "1721", "1726", "1736", "1741" } },
                 { DeviceFlags.AGV取货站台口, new List<string>(){ "2533", "2534", "2734", "2733","2934","2933","3133", "3134","3333","3334","3533","3534"} },
                 { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2", "Robot3", "Robot4" , "Robot5", "Robot6" } },
@@ -1138,17 +1139,17 @@ namespace WCS.WorkEngineering
                     {
                         case "WCSDB"://WCS基本数据库
                             SqlSugarHelper.SetDefault(connectionString.Key);
-                            _db.CodeFirst.InitTables(typeof(WCS_PlcData));
-                            _db.CodeFirst.InitTables(typeof(WCS_TaskInfo));
-                            _db.CodeFirst.InitTables(typeof(WCS_TaskDtl));
-                            _db.CodeFirst.InitTables(typeof(WCS_TaskOld));
-                            _db.CodeFirst.InitTables(typeof(WCS_AgvTaskInfo));
-                            _db.CodeFirst.InitTables(typeof(WCS_Palletizing));
-                            _db.CodeFirst.InitTables(typeof(WCS_PalletizingLayer));
-                            _db.CodeFirst.InitTables(typeof(WCS_PalletizingRow));
-                            _db.CodeFirst.InitTables(typeof(WCS_PalletizingLoc));
-                            _db.CodeFirst.InitTables(typeof(WCS_CacheLine));
-                            _db.CodeFirst.InitTables(typeof(WCS_CacheLineLoc));
+                            //_db.CodeFirst.InitTables(typeof(WCS_PlcData));
+                            //_db.CodeFirst.InitTables(typeof(WCS_TaskInfo));
+                            //_db.CodeFirst.InitTables(typeof(WCS_TaskDtl));
+                            //_db.CodeFirst.InitTables(typeof(WCS_TaskOld));
+                            //_db.CodeFirst.InitTables(typeof(WCS_AgvTaskInfo));
+                            //_db.CodeFirst.InitTables(typeof(WCS_Palletizing));
+                            //_db.CodeFirst.InitTables(typeof(WCS_PalletizingLayer));
+                            //_db.CodeFirst.InitTables(typeof(WCS_PalletizingRow));
+                            //_db.CodeFirst.InitTables(typeof(WCS_PalletizingLoc));
+                            //_db.CodeFirst.InitTables(typeof(WCS_CacheLine));
+                            //_db.CodeFirst.InitTables(typeof(WCS_CacheLineLoc));
 
                             break;
 

+ 1 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/MainWorld.cs

@@ -63,6 +63,7 @@ namespace WCS.WorkEngineering.Worlds
             });
         }
 
+        
         /// <summary>
         ///  异常处理,重写改方法后请自行添加执行内容
         ///  执行内容:Exception as KnownException并添加至日志队列

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld1.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂1
+    /// </summary>
+    [Description("机械臂1")]
+    public class RobotWorld1 : MainWorld
+    {
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld2.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂2
+    /// </summary>
+    [Description("机械臂2")]
+    public class RobotWorld2 : MainWorld
+    {
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld3.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂3
+    /// </summary>
+    [Description("机械臂3")]
+    public class RobotWorld3 : MainWorld
+    {
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld4.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂4
+    /// </summary>
+    [Description("机械臂4")]
+    public class RobotWorld4 : MainWorld
+    {
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld5.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂5
+    /// </summary>
+    [Description("机械臂5")]
+    public class RobotWorld5 : MainWorld
+    {
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/机械臂/RobotWorld6.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds.环形库.机械臂
+{
+    /// <summary>
+    ///  机械臂6
+    /// </summary>
+    [Description("机械臂6")]
+    public class RobotWorld6 : MainWorld
+    {
+    }
+}

+ 12 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld1.cs

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

+ 12 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld2.cs

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

+ 12 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld3.cs

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

+ 3 - 3
业务工程/分拣库/WCS.WorkEngineering/Worlds/RingWorld.cs → 业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld4.cs

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

+ 12 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld5.cs

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

+ 12 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/环形库/环形库/RingWorld6.cs

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