林豪 左 1 năm trước cách đây
mục cha
commit
783ee94586

+ 4 - 1
ServiceCenter/ServiceCenter.csproj

@@ -20,8 +20,11 @@
     <PackageReference Include="PlcSiemens" Version="1.0.1" />
     <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.5.0" />
     <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.5.0" />
-    <PackageReference Include="WCS.Core" Version="1.0.2.3" />
     <PackageReference Include="WCS.Entity" Version="1.0.3.15" />
   </ItemGroup>
+  
+  <ItemGroup>
+    <ProjectReference Include="..\WCS.Core\WCS.Core.csproj" />
+  </ItemGroup>
 
 </Project>

+ 13 - 3
WCS.Core/DataBlock.cs

@@ -1,4 +1,5 @@
 using System.Collections;
+using System.Net.NetworkInformation;
 using System.Reflection;
 using System.Runtime.InteropServices;
 
@@ -29,10 +30,19 @@ namespace WCS.Core
             id = DBList.Count;
         }
 
+        DateTime faildTime = DateTime.MinValue;
+
         public void RefreshData()
-        {
+        { 
             try
             {
+                if (failed)
+                { 
+                    if (!Entity.PLCInfo.Ex().Ping) 
+                    {
+                        throw new Exception($"{Entity.PLCInfo.IP}无法访问");
+                    }
+                } 
                 Start = (ushort)ProxyList.Min(v => v.Info.Position);
                 var last = ProxyList.OrderBy(v => v.Info.Position).Last();
                 Length = (ushort)(last.Info.Position + last.BytesCount);
@@ -50,10 +60,10 @@ namespace WCS.Core
             }
             catch (Exception ex)
             {
-                failed = true;
+                failed = true; 
                 throw;
             }
-        }
+        } 
 
         public PlcItem<T> Regist<T>(ProtocolProxyBase proxy, string objid, string name, int start, byte arrLen = 1, byte strLen = 0)
         {

+ 18 - 1
WCS.Core/PLC.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Net.NetworkInformation;
 using System.Text;
 using System.Threading.Tasks; 
 
@@ -8,6 +9,7 @@ namespace WCS.Core
 {
     public class PLC : EntityEx<PLCInfo>
     {
+        public bool Ping { get; private set; }
         public PLC(PLCInfo ent) : base(ent)
         {
             if (Configs.PLCAccessorCreater != null)
@@ -16,9 +18,24 @@ namespace WCS.Core
             }
             else
                 throw new Exception("Configs.PLCAccessorCreater未赋值");
-           
+
+            Task.Run(() =>
+            {
+                while (true)
+                {
+                    Ping=ping();
+                    Task.Delay(1000);
+                }
+            });
         }      
         public IPLCAccessor Accessor { get; private set; }
+
+        bool ping(int timeout = 100)
+        { 
+            var p = new Ping();
+            var res = p.Send(Entity.IP, timeout);
+            return res.Status == IPStatus.Success;
+        }
       
     }
 

+ 17 - 13
WCS.Core/World.cs

@@ -1,4 +1,5 @@
 using FreeRedis;
+using System.Collections.Concurrent;
 using System.ComponentModel;
 using System.Diagnostics;
 using System.Reflection;
@@ -375,18 +376,20 @@ namespace WCS.Core
     public class WorldEx : EntityEx<World>
     {
         private RedisClient Redis = new RedisClient(Configs.DebugRedisUrl);
-        private List<string> ChannelList = new List<string>();
+        private ConcurrentQueue<string> ChannelList = new ConcurrentQueue<string>();
+
         private DateTime SubTime = DateTime.Now;
 
         public WorldEx(World ent) : base(ent)
         {
             Redis.Subscribe("Login", (channel, msg) =>
             {
-                lock (ChannelList)
+                ChannelList.Clear();
+                foreach (var m in msg.ToString().Split(','))
                 {
-                    ChannelList.Clear();
-                    ChannelList.AddSafe(msg.ToString().Split(','));
+                    ChannelList.Enqueue(m);
                 }
+
                 SubTime = DateTime.Now;
                 Console.WriteLine($"调试工具正在使用中,已订阅:{msg}");
             });
@@ -394,17 +397,18 @@ namespace WCS.Core
 
         public void Publish(Channel channel, string msg)
         {
-            if ((DateTime.Now - SubTime).TotalSeconds > 20) return;
+            if ((DateTime.Now - SubTime).TotalSeconds > 20)
+                return;
             var flag = false;
-            lock (ChannelList)
+
+            flag = ChannelList.Any(v =>
             {
-                flag = ChannelList.Any(v =>
-                {
-                    var b = Regex.Match(channel.ToString(), $"^{v.Replace("*", ".*")}$");
-                    return b.Success;
-                });
-            }
-            if (flag) Redis.Publish(channel.ToString(), msg);
+                var b = Regex.Match(channel.ToString(), $"^{v.Replace("*", ".*")}$");
+                return b.Success;
+            });
+
+            if (flag)
+                Redis.Publish(channel.ToString(), msg);
         }
     }
 

+ 1 - 1
WCS.Service/appsettings.json

@@ -7,6 +7,6 @@
     }
   },
   "ConnectionStrings": {
-    "Redis": "10.30.37.1,database=0,prefix=Sorting:"
+    "Redis": "127.0.0.1,database=0,prefix=Sorting:"
   }
 }

+ 4 - 3
业务工程/分拣库/WCS.WorkEngineering/Extensions/DeviceExtension.cs

@@ -289,15 +289,16 @@ namespace WCS.WorkEngineering.Extensions
                 "1606" => "1N",
                 "1666" => "1NR",
                 "1661" => "1NR",
-                "1691" => "2NR",
-                "1696" => "2NR",
                 "SRM1" => "1N",
                 "SRM2" => "1S",
                 "418" => "1N",
-                "618" => "2N",
                 "18" => "1S",
                 "1676" => "1SR",
                 "1681" => "1SR",
+                "618" => "2N",
+                "1691" => "3NR",
+                "1696" => "3NR",
+                "818" => "3N",
                 _ => "",
             };
         }

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -94,7 +94,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is "18" or "118";
+            return dev.Code is "18" or "118" or "38" or "58" or "138" or "158";
         }
     }
 

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

@@ -1,8 +1,6 @@
-using Newtonsoft.Json;
-using PlcSiemens.Core.Extension;
+using PlcSiemens.Core.Extension;
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
-using ServiceCenter.Redis;
 using ServiceCenter.SqlSugars;
 using SqlSugar;
 using System.ComponentModel;
@@ -42,6 +40,7 @@ namespace WCS.WorkEngineering.Systems
                 obj.Data.GoodsStart = obj.Entity.Code.ToShort();
                 obj.Data.GoodsEnd = 591;
                 obj.Data.VoucherNo++;
+                World.Log($"执行记录:任务号[{obj.Data2.TaskNumber}]-[{obj.Data.VoucherNo}]`");
                 return;
             }
 
@@ -87,6 +86,22 @@ namespace WCS.WorkEngineering.Systems
                             case "618":
                                 nextAdd = 642;
                                 break;
+
+                            case "818":
+                                nextAdd = 842;
+                                break;
+
+                            case "1018":
+                                nextAdd = 1042;
+                                break;
+
+                            case "1218":
+                                nextAdd = 1242;
+                                break;
+
+                            case "1418":
+                                nextAdd = 1442;
+                                break;
                         }
                         taskInfo.AddrNext = nextAdd.ToString();
                         taskInfo.Status = TaskStatus.FinishOfShunt;

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

@@ -421,7 +421,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.HasFlag(DeviceFlags.Robot);
+            return dev.Code is "Robot1" or "Robot2" or "Robot3" or "Robot4" or "Robot5" or "Robot6";
         }
     }
 }

+ 447 - 103
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -1,5 +1,4 @@
-using PlcSiemens.Core.Extension;
-using ServiceCenter;
+using ServiceCenter;
 using ServiceCenter.SqlSugars;
 using WCS.Core;
 using WCS.Entity;
@@ -92,10 +91,10 @@ namespace WCS.WorkEngineering
                 //分拣库三
                 new("10.30.37.105",new List<Tuple<int, int>>()
                 {
-                    //new(1621, 1640),
-                    //new(2901, 2940),
-                    //new(3101, 3140),
-                    //new(1691, 1720)
+                    new(1641, 1660),
+                    new(3301, 3340),
+                    new(3501, 3540),
+                    new(1721, 1750)
                 })
             };
 
@@ -251,7 +250,7 @@ namespace WCS.WorkEngineering
             var mLTuples91 = new List<Tuple<string, List<int>>>()
             {
                 new("10.30.37.166",new List<int>(){418,818,1218}),
-                new("10.30.37.166",new List<int>(){618,1018,1418})
+                new("10.30.37.198",new List<int>(){618,1018,1418})
             };
 
             foreach (var item in mLTuples91)
@@ -328,8 +327,8 @@ namespace WCS.WorkEngineering
             List<TrussSegmentInfo> TrussInfo = new List<TrussSegmentInfo>
             {
                 new TrussSegmentInfo( 1, "10.30.37.211"),
-                new TrussSegmentInfo( 1, "10.30.37.217"),
-                new TrussSegmentInfo( 1, "10.30.37.223")
+                new TrussSegmentInfo( 2, "10.30.37.217"),
+                new TrussSegmentInfo( 3, "10.30.37.223")
             };
 
             foreach (var item in TrussInfo)
@@ -435,89 +434,222 @@ namespace WCS.WorkEngineering
 
             routeInfos.AddRange(new List<RouteInfo>() {
 
-                #region 出库路径
+                #region 出库
+
+                #region 堆垛机--巷道
 
-                //堆垛机--巷道
                 new RouteInfo("SRM1", new string[] { "TY1" }),
                 new RouteInfo("SRM2", new string[] { "TY2" }),
-                //巷道--一楼堆垛机放货口
-                new RouteInfo("TY1", new string[] { "2532" }), //人工取货口
-                new RouteInfo("TY2", new string[] { "2732" }),
-                new RouteInfo("TY1", new string[] { "2534","2533" }),//AGV取货口
-                new RouteInfo("TY2", new string[] { "2734","2733" }),
-                //巷道--二楼堆垛机放货口
+                new RouteInfo("SRM3", new string[] { "TY3" }),
+                new RouteInfo("SRM4", new string[] { "TY4" }),
+                new RouteInfo("SRM5", new string[] { "TY5" }),
+                new RouteInfo("SRM6", new string[] { "TY6" }),
+
+                #endregion 堆垛机--巷道
+
+                #region 巷道--一楼堆垛机放货口
+
+                new RouteInfo("TY1", new string[] { "2532","2534","2533" }), //人工取货口
+                new RouteInfo("TY2", new string[] { "2732","2734","2733" }),
+                new RouteInfo("TY3", new string[] { "2932","2934","2933" }), //人工取货口
+                new RouteInfo("TY4", new string[] { "3132","3134","3133" }),
+                new RouteInfo("TY5", new string[] { "3332","3334","3333" }), //人工取货口
+                new RouteInfo("TY6", new string[]{ "3532","3534","3533" }),
+
+                #endregion 巷道--一楼堆垛机放货口
+
+                #region 巷道--二楼堆垛机放货口
+
                 new RouteInfo("TY1", new string[] { "1601","1605" }),
                 new RouteInfo("TY2", new string[] { "1611","1615" }),
-                //二楼堆垛机放货口--二楼拆盘机
+                new RouteInfo("TY3", new string[] { "1621","1625" }),
+                new RouteInfo("TY4", new string[] { "1631","1635" }),
+                new RouteInfo("TY5", new string[] { "1641","1645" }),
+                new RouteInfo("TY6", new string[] { "1651","1655" }),
+
+                #endregion 巷道--二楼堆垛机放货口
+
+                #region 二楼堆垛机放货口--二楼拆盘机
+
+                //库一
                 new RouteInfo("1601", new string[] { "1602" }),//非09拆盘机
                 new RouteInfo("1611", new string[] { "1612"}),
                 new RouteInfo("1605", new string[] { "1606" }),//09拆盘机
                 new RouteInfo("1615", new string[] { "1616" }),
-                //二楼拆盘机--RGV
+                //库二
+                new RouteInfo("1621", new string[] { "1622" }),//非09拆盘机
+                new RouteInfo("1631", new string[] { "1632"}),
+                new RouteInfo("1625", new string[] { "1626" }),//09拆盘机
+                new RouteInfo("1635", new string[] { "1636" }),
+                ////库三
+                new RouteInfo("1641", new string[] { "1642" }),//非09拆盘机
+                new RouteInfo("1651", new string[] { "1652"}),
+                new RouteInfo("1645", new string[] { "1646" }),//09拆盘机
+                new RouteInfo("1655", new string[] { "1656" }),
+
+                #endregion 二楼堆垛机放货口--二楼拆盘机
+
+                #region 二楼拆盘机--RGV
+
+                //库一
                 new RouteInfo("1602", new string[] { "RGV1" }),//非09拆盘机
                 new RouteInfo("1612", new string[] { "RGV2"}),
                 new RouteInfo("1606", new string[] { "RGV1" }),//09拆盘机
                 new RouteInfo("1616", new string[] { "RGV2" }),
-                //RGV--码垛区域
+                //库二
+                new RouteInfo("1622", new string[] { "RGV3" }),//非09拆盘机
+                new RouteInfo("1632", new string[] { "RGV4"}),
+                new RouteInfo("1626", new string[] { "RGV3" }),//09拆盘机
+                new RouteInfo("1636", new string[] { "RGV4" }),
+                ////库三
+                new RouteInfo("1642", new string[] { "RGV5" }),//非09拆盘机
+                new RouteInfo("1652", new string[] { "RGV6"}),
+                new RouteInfo("1646", new string[] { "RGV5" }),//09拆盘机
+                new RouteInfo("1656", new string[] { "RGV6" }),
+
+                #endregion 二楼拆盘机--RGV
+
+                #region RGV--码垛区域
+
+                //库一
                 new RouteInfo("RGV1", new string[] { "1661","1666" }),//北区机械臂码垛区
-                new RouteInfo("RGV2", new string[] { "1676","1681" }),
-                //new RouteInfo("RGV2", new string[] { }),//南区机械臂
                 new RouteInfo("RGV1", new string[] { "1662","1663","1664","1665", "1670","1671","1672","1673","1674","1675"}),//桁架北区码垛站台
-                //new RouteInfo("RGV2", new string[] { }),//南区桁架
-
-                //Robot码垛工位
+                new RouteInfo("RGV2", new string[] { "1676","1681" }),
+                new RouteInfo("RGV2", new string[] { "1677","1678","1679","1680", "1685","1686","1687","1688","1689","1690" }),
+                //库二
+                new RouteInfo("RGV3", new string[] { "1691","1696" }),//北区机械臂码垛区
+                new RouteInfo("RGV3", new string[] { "1692","1693","1694","1695", "1700","1701","1702","1703","1704","1705"}),//桁架北区码垛站台
+                new RouteInfo("RGV4", new string[] { "1706","1711" }),
+                new RouteInfo("RGV4", new string[] { "1707","1708","1709","1710", "1715","1716","1717","1718","1719","1720" }),
+                ////库三
+                new RouteInfo("RGV5", new string[] { "1721","1726" }),//北区机械臂码垛区
+                new RouteInfo("RGV5", new string[] { "1722","1723","1724","1725", "1730","1731","1732","1733","1734","1735"}),//桁架北区码垛站台
+                new RouteInfo("RGV6", new string[] { "1736","1741" }),
+                new RouteInfo("RGV6", new string[] { "1737","1738","1739","1740", "1745","1746","1747","1748","1749","1750" }),
+
+                #endregion RGV--码垛区域
+
+                #region Robot--码垛工位
+
+                //库一
                 new RouteInfo("Robot1", new string[] { "1666" }),
                 new RouteInfo("Robot1", new string[] { "1661" }),
                 new RouteInfo("Robot2", new string[] { "1676" }),
                 new RouteInfo("Robot2", new string[] { "1681" }),
+                //库二
+                new RouteInfo("Robot3", new string[] { "1691" }),
+                new RouteInfo("Robot3", new string[] { "1696" }),
+                new RouteInfo("Robot4", new string[] { "1706" }),
+                new RouteInfo("Robot4", new string[] { "1711" }),
+                //库三
+                new RouteInfo("Robot5", new string[] { "1721" }),
+                new RouteInfo("Robot5", new string[] { "1726" }),
+                new RouteInfo("Robot6", new string[] { "1736" }),
+                new RouteInfo("Robot6", new string[] { "1741" }),
+
+                #endregion Robot--码垛工位
 
-                #endregion 出库路径
+                #endregion 出库
 
                 #region 入库
 
-                //一楼人工入库口-巷道
+                #region 一楼人工入库口-巷道
+
                 new RouteInfo("2532", new string[] { "TY1" }), //分拣库一
                 new RouteInfo("2732", new string[] { "TY2" }),
                 new RouteInfo("2932", new string[] { "TY3" }), //分拣库二
                 new RouteInfo("3132", new string[] { "TY4" }),
-                //new RouteInfo("2532", new string[] { "TY5" }), //分拣库三
-                //new RouteInfo("2732", new string[] { "TY6" }),
-                //一楼叠盘机(堆垛机入口)--巷道
+                new RouteInfo("3332", new string[] { "TY5" }), //分拣库三
+                new RouteInfo("3532", new string[] { "TY6" }),
+
+                #endregion 一楼人工入库口-巷道
+
+                #region 一楼叠盘机(堆垛机入口)--巷道
+
                 new RouteInfo("2527", new string[] { "TY1" }), //分拣库一
                 new RouteInfo("2528", new string[] { "TY1" }),
                 new RouteInfo("2727", new string[] { "TY2" }),
                 new RouteInfo("2728", new string[] { "TY2" }),
-                //new RouteInfo("2527", new string[] { "TY3" }), //分拣库二
-                //new RouteInfo("2528", new string[] { "TY3" }),
-                //new RouteInfo("2727", new string[] { "TY4" }),
-                //new RouteInfo("2728", new string[] { "TY4" }),
-                //new RouteInfo("2527", new string[] { "TY5" }), //分拣库三
-                //new RouteInfo("2528", new string[] { "TY5" }),
-                //new RouteInfo("2727", new string[] { "TY6" }),
-                //new RouteInfo("2728", new string[] { "TY6" }),
-                //一楼AGV入口
-                //主线入口--预分配点
-                new RouteInfo("1", new string[] { "18" }),
-                new RouteInfo("101", new string[] { "118" }),
-                //预分配点--主线分流点
+                new RouteInfo("2927", new string[] { "TY3" }), //分拣库二
+                new RouteInfo("2928", new string[] { "TY3" }),
+                new RouteInfo("3127", new string[] { "TY4" }),
+                new RouteInfo("3128", new string[] { "TY4" }),
+                new RouteInfo("3327", new string[] { "TY5" }), //分拣库三
+                new RouteInfo("3328", new string[] { "TY5" }),
+                new RouteInfo("3527", new string[] { "TY6" }),
+                new RouteInfo("3528", new string[] { "TY6" }),
+
+                #endregion 一楼叠盘机(堆垛机入口)--巷道
+
+                #region 主线
+
+                //北侧
+                new RouteInfo("3", new string[] { "14" }),
+                new RouteInfo("14", new string[] { "18" }),
                 new RouteInfo("18", new string[] { "22" }),
-                  new RouteInfo("118", new string[] { "122" }),
-                //主线分流点--环形库分流点
-                new RouteInfo("22", new string[] { "418" }),
-                new RouteInfo("122", new string[] { "618" }),
-                //环形库分流点--环形库取货点
+                new RouteInfo("22", new string[] { "38" }),
+                //new RouteInfo("323", new string[] { "38" }),
+                new RouteInfo("38", new string[] { "41" }),
+                new RouteInfo("41", new string[] { "58" }),
+                new RouteInfo("58", new string[] { "61" }),
+                //南侧
+                new RouteInfo("101", new string[] { "114" }),
+                new RouteInfo("114", new string[] { "118" }),
+                new RouteInfo("118", new string[] { "122" }),
+                new RouteInfo("122", new string[] { "138" }),
+                new RouteInfo("138", new string[] { "141" }),
+                new RouteInfo("141", new string[] { "158" }),
+                new RouteInfo("158", new string[] { "161" }),
+
+                #endregion 主线
+
+                #region 主线分流点--环形库分流点
+
+                new RouteInfo("22", new string[] { "418" }), //分拣库一北
+                new RouteInfo("122", new string[] { "618" }), //分拣库一南
+                new RouteInfo("41", new string[] { "818" }), //分拣库一北
+                new RouteInfo("141", new string[] { "1018" }), //分拣库一南
+                new RouteInfo("61", new string[] { "1218" }), //分拣库一北
+                new RouteInfo("161", new string[] { "1418" }), //分拣库一南
+
+                #endregion 主线分流点--环形库分流点
+
+                #region 环形库分流点--环形库取货点
+
                 new RouteInfo("418", new string[] { "424","433","442" }),
-                new RouteInfo("618", new string[] { /*"424","433",*/"642" }),
-                //环形库分流点--桁架分流点
-                new RouteInfo("418", new string[] { "455" }),
-                new RouteInfo("618", new string[] { "655" }),
-                //桁架分流点--桁架缓存放行点
-                new RouteInfo("455", new string[] { "466","480","494","508", "522","536","550","564","578"}),
-                new RouteInfo("655", new string[] { "666"/*,"480","494","508", "522","536","550","564","578"*/}),
-                //桁架分流点--异常缓存放行点
-                new RouteInfo("455", new string[] { "491" }),
-                //桁架缓存放行点--桁架取货点
-                new("466", new[] { "461" }),
+                new RouteInfo("618", new string[] { "624", "633", "642" }),
+                new RouteInfo("818", new string[] { "824","833","842" }),
+                new RouteInfo("1018", new string[] { "1024","1033","1042" }),
+                new RouteInfo("1218", new string[] { "1224","1233","1242" }),
+                new RouteInfo("1418", new string[] { "1424","1433","1442" }),
+
+                #endregion 环形库分流点--环形库取货点
+
+                #region 环形库分流点--桁架分流点
+
+                new RouteInfo("418", new string[] { "455" }), //分拣库一北
+                new RouteInfo("618", new string[] { "655" }), //分拣库一南
+                new RouteInfo("818", new string[] { "855" }), //分拣库二北
+                new RouteInfo("1018", new string[] { "1055" }), //分拣库二南
+                new RouteInfo("1218", new string[] { "1255" }), //分拣库三北
+                new RouteInfo("1418", new string[] { "1455" }), //分拣库三南
+
+                #endregion 环形库分流点--桁架分流点
+
+                #region 桁架分流点--桁架缓存放行点
+
+                new RouteInfo("455", new string[] { "466","480","494","508", "522","536","550","564","578","591"}), //分拣库一北
+                new RouteInfo("655", new string[] { "666","680","694","708", "722","736","750","764","778","791"}), //分拣库一南
+                new RouteInfo("855", new string[] { "866","880","894","908", "922","936","950","964","978","991"}), //分拣库二北
+                new RouteInfo("1055", new string[] { "1066","1080","1094","1108", "1122","1136","1150","1164","1178","1191"}), //分拣库二南
+                new RouteInfo("1255", new string[] { "1266","1280","1294","1308", "1322","1336","1350","1364","1378", "1391"}), //分拣库三北
+                new RouteInfo("1455", new string[] { "1466","1480","1494","1408", "1422","1436","1450","1464","1478","1591"}), //分拣库三南
+
+                #endregion 桁架分流点--桁架缓存放行点
+
+                #region 桁架缓存放行点--桁架取货点
+
+                new("466", new[] { "461" }), //分拣一北侧
                 new("480", new[] { "475" }),
                 new("494", new[] { "489" }),
                 new("508", new[] { "503" }),
@@ -526,9 +658,63 @@ namespace WCS.WorkEngineering
                 new("550", new[] { "545" }),
                 new("564", new[] { "559" }),
                 new("578", new[] { "573" }),
-                new("666", new[] { "661" }),
-                //桁架取货点--桁架
-                new("461", new[] { "Truss1" }),
+                new("591", new[] { "586" }),
+                new("666", new[] { "661" }),//分拣一南侧
+                new("680", new[] { "675" }),
+                new("694", new[] { "689" }),
+                new("708", new[] { "703" }),
+                new("722", new[] { "717" }),
+                new("736", new[] { "731" }),
+                new("750", new[] { "745" }),
+                new("764", new[] { "759" }),
+                new("778", new[] { "773" }),
+                new("791", new[] { "786" }),
+                new("866", new[] { "861" }), //分拣二北侧
+                new("880", new[] { "875" }),
+                new("894", new[] { "889" }),
+                new("908", new[] { "903" }),
+                new("922", new[] { "917" }),
+                new("936", new[] { "931" }),
+                new("950", new[] { "945" }),
+                new("964", new[] { "959" }),
+                new("978", new[] { "973" }),
+                new("991", new[] { "986" }),
+                new("1066", new[] { "1061" }),//分拣二南侧
+                new("1080", new[] { "1075" }),
+                new("1094", new[] { "1089" }),
+                new("1108", new[] { "1103" }),
+                new("1122", new[] { "1117" }),
+                new("1136", new[] { "1131" }),
+                new("1150", new[] { "1145" }),
+                new("1164", new[] { "1159" }),
+                new("1178", new[] { "1173" }),
+                new("1191", new[] { "1186" }),
+                new("1266", new[] { "1261" }), //分拣三北侧
+                new("1280", new[] { "1275" }),
+                new("1294", new[] { "1289" }),
+                new("1308", new[] { "1303" }),
+                new("1322", new[] { "1317" }),
+                new("1336", new[] { "1331" }),
+                new("1350", new[] { "1345" }),
+                new("1364", new[] { "1359" }),
+                new("1378", new[] { "1373" }),
+                new("1391", new[] { "1386" }),
+                new("1466", new[] { "1461" }),//分拣三南侧
+                new("1480", new[] { "1475" }),
+                new("1494", new[] { "1489" }),
+                new("1508", new[] { "1503" }),
+                new("1522", new[] { "1517" }),
+                new("1536", new[] { "1531" }),
+                new("1550", new[] { "1545" }),
+                new("1564", new[] { "1559" }),
+                new("1578", new[] { "1573" }),
+                new("1591", new[] { "1586" }),
+
+                #endregion 桁架缓存放行点--桁架取货点
+
+                #region 桁架取货点--桁架
+
+                new("461", new[] { "Truss1" }),//分拣一北侧
                 new("475", new[] { "Truss1" }),
                 new("489", new[] { "Truss1" }),
                 new("503", new[] { "Truss1" }),
@@ -537,20 +723,68 @@ namespace WCS.WorkEngineering
                 new("545", new[] { "Truss1" }),
                 new("559", new[] { "Truss1" }),
                 new("573", new[] { "Truss1" }),
+                new("586", new[] { "Truss1" }),//分拣一南侧
                 new("661", new[] { "Truss1" }),
+                new("675", new[] { "Truss1" }),
+                new("689", new[] { "Truss1" }),
+                new("703", new[] { "Truss1" }),
+                new("717", new[] { "Truss1" }),
+                new("731", new[] { "Truss1" }),
+                new("745", new[] { "Truss1" }),
+                new("759", new[] { "Truss1" }),
+                new("773", new[] { "Truss1" }),
+                new("786", new[] { "Truss1" }),
+                new("861", new[] { "Truss2" }), //分拣二北侧
+                new("875", new[] { "Truss2" }),
+                new("889", new[] { "Truss2" }),
+                new("903", new[] { "Truss2" }),
+                new("917", new[] { "Truss2" }),
+                new("931", new[] { "Truss2" }),
+                new("945", new[] { "Truss2" }),
+                new("959", new[] { "Truss2" }),
+                new("973", new[] { "Truss2" }),
+                new("986", new[] { "Truss2" }),
+                new("1061", new[] { "Truss2" }),//分拣二南侧
+                new("1075", new[] { "Truss2" }),
+                new("1089", new[] { "Truss2" }),
+                new("1103", new[] { "Truss2" }),
+                new("1117", new[] { "Truss2" }),
+                new("1131", new[] { "Truss2" }),
+                new("1145", new[] { "Truss2" }),
+                new("1159", new[] { "Truss2" }),
+                new("1173", new[] { "Truss2" }),
+                new("1186", new[] { "Truss2" }),
+                new("1261", new[] { "Truss3" }), //分拣三北侧
+                new("1275", new[] { "Truss3" }),
+                new("1289", new[] { "Truss3" }),
+                new("1303", new[] { "Truss3" }),
+                new("1317", new[] { "Truss3" }),
+                new("1331", new[] { "Truss3" }),
+                new("1345", new[] { "Truss3" }),
+                new("1359", new[] { "Truss3" }),
+                new("1373", new[] { "Truss3" }),
+                new("1386", new[] { "Truss3" }),
+                new("1461", new[] { "Truss3" }),//分拣三南侧
+                new("1475", new[] { "Truss3" }),
+                new("1489", new[] { "Truss3" }),
+                new("1503", new[] { "Truss3" }),
+                new("1517", new[] { "Truss3" }),
+                new("1531", new[] { "Truss3" }),
+                new("1545", new[] { "Truss3" }),
+                new("1559", new[] { "Truss3" }),
+                new("1573", new[] { "Truss3" }),
+                new("1586", new[] { "Truss3" }),
+
+                #endregion 桁架取货点--桁架
+
                 //桁架--码垛工位
-                new("Truss1", new[] { "1662" }),
-                new("Truss1", new[] { "1663" }),
-                new("Truss1", new[] { "1664" }),
-                new("Truss1", new[] { "1665" }),
-                new("Truss1", new[] { "1670" }),
-                new("Truss1", new[] { "1671" }),
-                new("Truss1", new[] { "1672" }),
-                new("Truss1", new[] { "1673" }),
-                new("Truss1", new[] { "1674" }),
-                new("Truss1", new[] { "1675" }),
-                //new("Truss2", new[] { "1675" }),
-                //码垛工位--RGV
+                new("Truss1", new[] { "1662","1663","1664","1665","1670","1671","1672","1673", "1674","1675","1677","1678","1679","1680", "1685","1686","1687","1688","1689","1690" }),
+                new("Truss2", new[] {  "1692","1693","1694","1695", "1700","1701","1702","1703","1704","1705","1707","1708","1709","1710", "1715","1716","1717","1718","1719","1720" }),
+                new("Truss3", new[] { "1722","1723","1724","1725", "1730","1731","1732","1733","1734","1735","1737","1738","1739","1740", "1745","1746","1747","1748","1749","1750"}),
+
+                #region 码垛工位--RGV
+
+                //分拣库一北
                 new RouteInfo("1661", new string[] { "RGV1" }),//机械手码垛工位
                 new RouteInfo("1666", new string[] { "RGV1" }),
                 new RouteInfo("1662", new string[] { "RGV1" }),//绗架码垛工位
@@ -563,48 +797,158 @@ namespace WCS.WorkEngineering
                 new RouteInfo("1673", new string[] { "RGV1" }),
                 new RouteInfo("1674", new string[] { "RGV1" }),
                 new RouteInfo("1675", new string[] { "RGV1" }),
-                new RouteInfo("1676", new string[] { "RGV2" }),
+                //分拣库一南
+                new RouteInfo("1676", new string[] { "RGV2" }),//机械手码垛工位
                 new RouteInfo("1681", new string[] { "RGV2" }),
-                //RGV--RGV放货点
+                new RouteInfo("1677", new string[] { "RGV2" }),//绗架码垛工位
+                new RouteInfo("1678", new string[] { "RGV2" }),
+                new RouteInfo("1679", new string[] { "RGV2" }),
+                new RouteInfo("1680", new string[] { "RGV2" }),
+                new RouteInfo("1685", new string[] { "RGV2" }),
+                new RouteInfo("1686", new string[] { "RGV2" }),
+                new RouteInfo("1687", new string[] { "RGV2" }),
+                new RouteInfo("1688", new string[] { "RGV2" }),
+                new RouteInfo("1689", new string[] { "RGV2" }),
+                new RouteInfo("1690", new string[] { "RGV2" }),
+
+                //分拣库二北
+                new RouteInfo("1691", new string[] { "RGV3" }),//机械手码垛工位
+                new RouteInfo("1696", new string[] { "RGV3" }),
+                new RouteInfo("1692", new string[] { "RGV3" }),//绗架码垛工位
+                new RouteInfo("1693", new string[] { "RGV3" }),
+                new RouteInfo("1694", new string[] { "RGV3" }),
+                new RouteInfo("1695", new string[] { "RGV3" }),
+                new RouteInfo("1700", new string[] { "RGV3" }),
+                new RouteInfo("1701", new string[] { "RGV3" }),
+                new RouteInfo("1702", new string[] { "RGV3" }),
+                new RouteInfo("1703", new string[] { "RGV3" }),
+                new RouteInfo("1704", new string[] { "RGV3" }),
+                new RouteInfo("1705", new string[] { "RGV3" }),
+                //分拣库二南
+                new RouteInfo("1706", new string[] { "RGV4" }),//机械手码垛工位
+                new RouteInfo("1711", new string[] { "RGV4" }),
+                new RouteInfo("1707", new string[] { "RGV4" }),//绗架码垛工位
+                new RouteInfo("1708", new string[] { "RGV4" }),
+                new RouteInfo("1709", new string[] { "RGV4" }),
+                new RouteInfo("1710", new string[] { "RGV4" }),
+                new RouteInfo("1715", new string[] { "RGV4" }),
+                new RouteInfo("1716", new string[] { "RGV4" }),
+                new RouteInfo("1717", new string[] { "RGV4" }),
+                new RouteInfo("1718", new string[] { "RGV4" }),
+                new RouteInfo("1719", new string[] { "RGV4" }),
+                new RouteInfo("1720", new string[] { "RGV4" }),
+                //分拣库三北
+                new RouteInfo("1721", new string[] { "RGV5" }),//机械手码垛工位
+                new RouteInfo("1726", new string[] { "RGV5" }),
+                new RouteInfo("1722", new string[] { "RGV5" }),//绗架码垛工位
+                new RouteInfo("1723", new string[] { "RGV5" }),
+                new RouteInfo("1724", new string[] { "RGV5" }),
+                new RouteInfo("1725", new string[] { "RGV5" }),
+                new RouteInfo("1730", new string[] { "RGV5" }),
+                new RouteInfo("1731", new string[] { "RGV5" }),
+                new RouteInfo("1732", new string[] { "RGV5" }),
+                new RouteInfo("1733", new string[] { "RGV5" }),
+                new RouteInfo("1734", new string[] { "RGV5" }),
+                new RouteInfo("1735", new string[] { "RGV5" }),
+                //分拣库三南
+                new RouteInfo("1736", new string[] { "RGV6" }),//机械手码垛工位
+                new RouteInfo("1741", new string[] { "RGV6" }),
+                new RouteInfo("1737", new string[] { "RGV6" }),//绗架码垛工位
+                new RouteInfo("1738", new string[] { "RGV6" }),
+                new RouteInfo("1739", new string[] { "RGV6" }),
+                new RouteInfo("1740", new string[] { "RGV6" }),
+                new RouteInfo("1745", new string[] { "RGV6" }),
+                new RouteInfo("1746", new string[] { "RGV6" }),
+                new RouteInfo("1747", new string[] { "RGV6" }),
+                new RouteInfo("1748", new string[] { "RGV6" }),
+                new RouteInfo("1749", new string[] { "RGV6" }),
+                new RouteInfo("1750", new string[] { "RGV6" }),
+
+                #endregion 码垛工位--RGV
+
+                #region RGV--RGV放货点
+
                 new RouteInfo("RGV1", new string[] { "1604" }),
                 new RouteInfo("RGV2", new string[] { "1614" }),
-                //RGV放货点--堆垛机取货口
+                new RouteInfo("RGV3", new string[] { "1624" }),
+                new RouteInfo("RGV4", new string[] { "1634" }),
+                new RouteInfo("RGV5", new string[] { "1644" }),
+                new RouteInfo("RGV6", new string[] { "1654" }),
+
+                #endregion RGV--RGV放货点
+
+                #region RGV放货点--堆垛机取货口
+
                 new RouteInfo("1604", new string[] { "1603" }),//北侧
-                new RouteInfo("1614", new string[] { "1613" }),//北侧
+                new RouteInfo("1614", new string[] { "1613" }),//南侧
+                new RouteInfo("1624", new string[] { "1623" }),//北侧
+                new RouteInfo("1634", new string[] { "1633" }),//南侧
+                new RouteInfo("1644", new string[] { "1643" }),//北侧
+                new RouteInfo("1654", new string[] { "1653" }),//南侧
+
+                #endregion RGV放货点--堆垛机取货口
+
+                #region 二楼堆垛机入库--巷道
 
-                //二楼堆垛机入库--巷道
                 new RouteInfo("1603", new string[] { "TY1" }),//北侧
-                //new RouteInfo("1603", new string[] { "TY2" }),//北侧
                 new RouteInfo("1613", new string[] { "TY2" }),//南侧
+                new RouteInfo("1623", new string[] { "TY3" }),//北侧
+                new RouteInfo("1633", new string[] { "TY4" }),//南侧
+                new RouteInfo("1643", new string[] { "TY5" }),//北侧
+                new RouteInfo("1653", new string[] { "TY6" }),//南侧
+
+                #endregion 二楼堆垛机入库--巷道
+
+                #region 巷道--堆垛机
 
-                //巷道--堆垛机
                 new RouteInfo("TY1", new string[] { "SRM1" }),
                 new RouteInfo("TY2", new string[] { "SRM2" }),
+                new RouteInfo("TY3", new string[] { "SRM3" }),
+                new RouteInfo("TY4", new string[] { "SRM4" }),
+                new RouteInfo("TY5", new string[] { "SRM5" }),
+                new RouteInfo("TY6", new string[] { "SRM6" }),
+
+                #endregion 巷道--堆垛机
+
+                #region 线体取货位--Robot
 
-                //线体取货位--Robot
                 new RouteInfo("442", new string[] { "Robot1" }),
                 new RouteInfo("433", new string[] { "Robot1" }),
                 new RouteInfo("424", new string[] { "Robot1" }),
+                new RouteInfo("624", new string[] { "Robot2" }),
+                new RouteInfo("633", new string[] { "Robot2" }),
                 new RouteInfo("642", new string[] { "Robot2" }),
-                //new RouteInfo("433", new string[] { "Robot1" }),
-                //new RouteInfo("424", new string[] { "Robot1" }),
+                new RouteInfo("824", new string[] { "Robot3" }),
+                new RouteInfo("833", new string[] { "Robot3" }),
+                new RouteInfo("842", new string[] { "Robot3" }),
+                new RouteInfo("1024", new string[] { "Robot4" }),
+                new RouteInfo("1033", new string[] { "Robot4" }),
+                new RouteInfo("1042", new string[] { "Robot4" }),
+                new RouteInfo("1224", new string[] { "Robot5" }),
+                new RouteInfo("1242", new string[] { "Robot5" }),
+                new RouteInfo("1424", new string[] { "Robot5" }),
+                new RouteInfo("1424", new string[] { "Robot6" }),
+                new RouteInfo("1433", new string[] { "Robot6" }),
+                new RouteInfo("1442", new string[] { "Robot6" })
+
+                #endregion 线体取货位--Robot
 
                 #endregion 入库
             });
 
             #endregion 分拣库一
 
-            foreach (var item in routeInfos)
+            Parallel.ForEach(routeInfos, routeInfo =>
             {
-                var device = Device.All.FirstOrDefault(x => x.Code == item.DeviceCode);
-                device.AddTarget(item.NextList);
+                var device = Device.All.FirstOrDefault(x => x.Code == routeInfo.DeviceCode);
+                device.AddTarget(routeInfo.NextList);
 
-                foreach (var next in item.NextList)
+                Parallel.ForEach(routeInfo.NextList, next =>
                 {
                     var dev = Device.All.FirstOrDefault(x => x.Code == next);
                     dev.Parent = device;
-                }
-            }
+                });
+            });
 
             #endregion 配置路径信息
 
@@ -637,11 +981,11 @@ namespace WCS.WorkEngineering
                 new("1433",new List<string> {"1433","1434"}),
                 new("1424",new List<string> {"1424","1425"}),
             };
-            foreach (var item in tuples2)
+            Parallel.ForEach(tuples2, tuple =>
             {
-                var device = Device.All.FirstOrDefault(x => x.Code == item.Item1);
-                device.AddDeviceGroup(item.Item2.ToArray());
-            }
+                var device = Device.All.FirstOrDefault(x => x.Code == tuple.Item1);
+                device.AddDeviceGroup(tuple.Item2.ToArray());
+            });
 
             #endregion 添加设备组
 
@@ -658,24 +1002,24 @@ namespace WCS.WorkEngineering
                 { DeviceFlags.一楼叠盘机,new List<string>() { "2527","2528","2727","2728"} },
                 { DeviceFlags.主线分流点,new List<string>() { "22","41","61"} },
                 { DeviceFlags.满轮主线第一次扫码,new List<string>() { "1"} },
-                { DeviceFlags.环形库分流点,new List<string>(){ "418", "618" } },
+                { DeviceFlags.环形库分流点,new List<string>(){ "418", "618","818","1018","1218","1418" } },
                 { DeviceFlags.桁架分流点,new List<string>() { "455" } },
                 { DeviceFlags.桁架缓存放行点, new List<string>(){ "466", "480", "494", "508","522","536","666","680","694","708","736","750" } },
                 { DeviceFlags.桁架取货点, new List<string>(){ "461", "475", "489", "503","517","531", "661", "675", "689", "703", "717", "731" } },
-                { DeviceFlags.拆盘机09, new List<string>(){ "1606","1616" } },
-                { DeviceFlags.拆盘机非09, new List<string>(){ "1602","1612" } },
+                { DeviceFlags.拆盘机09, new List<string>(){ "1606","1616","1626","1636","1646","1656" } },
+                { DeviceFlags.拆盘机非09, 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" } },
-                { DeviceFlags.环形库码垛工位, new List<string>(){ "1666", "1661","1676","1681" } },
+                { DeviceFlags.环形库码垛工位, new List<string>(){ "1666", "1661","1676","1681", "1691", "1696", "1706", "1711", "1721", "1726", "1736", "1741" } },
                 { DeviceFlags.AGV取货站台口, new List<string>(){ "2533", "2534", "2734" } },
-                { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2" } },
+                { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2", "Robot3","Robot4" , "Robot5", "Robot6" } },
         };
 
-            devices.ForEach(item =>
+            Parallel.ForEach(devices, device =>
             {
-                item.Value.ForEach(code =>
+                Parallel.ForEach(device.Value, value =>
                 {
-                    var device = Device.All.FirstOrDefault(v => v.Code == code);
-                    device.AddFlag(item.Key);
+                    var dev = Device.All.FirstOrDefault(v => v.Code == value);
+                    dev.AddFlag(device.Key);
                 });
             });