林豪 左 1 년 전
부모
커밋
498be06902

+ 24 - 4
WCS.Core/PLC.cs

@@ -1,4 +1,5 @@
 using System.Net.NetworkInformation;
+using System.Text;
 
 namespace WCS.Core
 {
@@ -29,10 +30,29 @@ namespace WCS.Core
 
         private bool ping(int timeout = 100)
         {
-            var p = new Ping();
-            var res = p.Send(Entity.IP, timeout);
-            return res.Status == IPStatus.Success;
-            //return true;
+            if (Entity.IP == "1") return false;
+            try
+            {
+                var objPingSender = new Ping();
+                var objPinOptions = new PingOptions
+                {
+                    DontFragment = true
+                };
+                const string data = "";
+                var buffer = Encoding.UTF8.GetBytes(data);
+                var objPinReply = objPingSender.Send(Entity.IP, timeout, buffer, objPinOptions);
+                var strInfo = objPinReply.Status.ToString();
+                return strInfo == "Success";
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+
+            //var p = new Ping();
+            //var res = p.Send(Entity.IP, timeout);
+            //return res.Status == IPStatus.Success;
+            ////return true;
         }
     }
 

+ 4 - 2
WCS.Core/ProtocolProxyBase.cs

@@ -12,11 +12,12 @@ namespace WCS.Core
         public Dictionary<string, PlcItem> Items = new Dictionary<string, PlcItem>();
         public Type ProtocolType, ProtocolDataType;
         public Device Device { get; private set; }
-
+        public World World { get; private set; }
         private DataBlock Db;
 
         public ProtocolProxyBase(Device dev, ProtocolInfo info, Type protocolType, World world)
         {
+            this.World = world;
             this.Device = dev;
             this.Info = info;
             Db = info.DBInfo.Ex(world);
@@ -125,6 +126,7 @@ namespace WCS.Core
             var item = Items[propertyName] as PlcItem<T>;
             var res = item.Value;
             var channel = Ltc.GetChannel();
+            if (channel != null) this.World.OnInternalLog(channel, $"获取值:{Device.Code}.{ProtocolType.Name}.{propertyName}:{res}");
             return res;
         }
 
@@ -132,7 +134,7 @@ namespace WCS.Core
         {
             var item = Items[propertyName] as PlcItem<T>;
             item.Value = value;
-            var channel = Ltc.GetChannel();
+            var channel = Ltc.GetChannel(); this.World.OnInternalLog(channel, $"设置值:{Device.Code}.{ProtocolType.Name}.{propertyName} :{value}");
         }
 
         #endregion

+ 2 - 2
业务工程/分拣库/WCS.Entity.Protocol/Truss/ITruss530.cs

@@ -380,9 +380,9 @@ namespace WCS.Entity.Protocol.Truss
         public short MaxQuantity { get; set; }
 
         /// <summary>
-        ///  最大码垛数量
+        ///  已码数量
         /// </summary>
-        [Description("最大码垛数量")]
+        [Description("已码数量")]
         public short Quantity { get; set; }
 
         /// <summary>

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

@@ -392,6 +392,7 @@ namespace WCS.WorkEngineering.Extensions
         桁架09缓存放行点 = 1L << 39,
         桁架18缓存放行点 = 1L << 40,
         桁架09异常缓存放行点 = 1L << 41,
+        二次码垛RGV取货口 = 1L << 42,
     }
 
     /// <summary>

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

@@ -30,7 +30,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override void Do(Device<IStation520> obj)
         {
-            if (obj.Entity.Code == "2534")
+            if (obj.Entity.Code == "出库AGV")
             {
                 var agvTaskInfos = new List<WCS_AgvTaskInfo>();
                 //获取所有未结束的叫料及背负式补空AGV任务
@@ -113,7 +113,7 @@ namespace WCS.WorkEngineering.Systems
                     }
                 }
             }
-            else if (obj.Entity.Code == "2533")
+            else if (obj.Entity.Code == "入库AGV")
             {
                 List<WCS_AgvTaskInfo> agvTaskInfos = new List<WCS_AgvTaskInfo>();
                 //获取所有未结束的入库AGV任务
@@ -126,7 +126,6 @@ namespace WCS.WorkEngineering.Systems
 
                 if (agvTaskInfos.Any())
                 {
-                    this.ExRecord(obj.Entity.Code, "可用入库AGV任务列表", agvTaskInfos.Select(v => v.ID).ToList());
                     foreach (var agv in agvTaskInfos)
                     {
                         try
@@ -258,7 +257,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is "2534" or "2533";
+            return dev.Code is "出库AGV" or "入库AGV";
         }
     }
 }

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

@@ -93,60 +93,73 @@ namespace WCS.WorkEngineering.Systems
                             break;
 
                         case RGVCmdType.PutGoods:
-                            WCS_TaskInfo finishiTask = null;
-                            var startPosition = Device.All.Where(x => x.Code == obj.Data2.StartPosition.ToString()).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).FirstOrDefault();
-                            var destPosition = Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString());
-                            var isPalletizing = destPosition!.HasFlag(DeviceFlags.桁架码垛位, DeviceFlags.环形库码垛工位);
-                            short countQty = 0;
-                            short shortCode = 0;
-                            SqlSugarHelper.Do(_db =>
+                            try
                             {
-                                var db = _db.Default;
+                                WCS_TaskInfo finishiTask = null;
+                                var startPosition = Device.All.Where(x => x.Code == obj.Data2.StartPosition.ToString())
+                                    .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
+                                    .FirstOrDefault();
+                                var destPosition =
+                                    Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString());
+                                var isPalletizing = destPosition!.HasFlag(DeviceFlags.桁架码垛位, DeviceFlags.环形库码垛工位);
+                                short countQty = 0;
+                                short shortCode = 0;
+                                SqlSugarHelper.Do(_db =>
+                                {
+                                    var db = _db.Default;
+                                    if (isPalletizing)
+                                    {
+                                        if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
+                                        {
+                                            var palletizingInfo = db.Queryable<WCS_Palletizing>()
+                                                .First(x => x.Id == obj.Data.TaskNumber);
+                                            countQty = palletizingInfo.CountQty.ToShort();
+                                            shortCode = palletizingInfo.ShortCode;
+                                        }
+                                        else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
+                                        {
+                                            var deliveryTask = db.Queryable<WCS_TaskInfo>()
+                                                .First(x => x.ID == obj.Data.TaskNumber);
+                                            countQty = deliveryTask.FullQty;
+                                            shortCode = deliveryTask.PalletType;
+                                            deliveryTask.Status = TaskStatus.RgvCompleted;
+                                            deliveryTask.EditTime = DateTime.Now;
+                                            deliveryTask.LastInteractionPoint = obj.Entity.Code;
+                                            db.Updateable(deliveryTask).ExecuteCommand();
+                                            deliveryTask.AddWCS_TASK_DTL(db, deliveryTask.AddrTo, $"RGV任务执行结束");
+                                        }
+                                    }
+                                });
+
+                                if (startPosition.Data.TaskNumber == obj.Data.TaskNumber) //初始化起始点信息
+                                {
+                                    startPosition.Data.TaskNumber = 0;
+                                    startPosition.Data.GoodsEnd = 0;
+                                }
+
+                                //目标地址是码垛工位
                                 if (isPalletizing)
                                 {
                                     if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
                                     {
-                                        var palletizingInfo = db.Queryable<WCS_Palletizing>().First(x => x.Id == obj.Data.TaskNumber);
-                                        countQty = palletizingInfo.CountQty.ToShort();
-                                        shortCode = palletizingInfo.ShortCode;
+                                        var dest = new Device<ITruss530>(destPosition!, World);
+                                        dest.Data.MaxQuantity = countQty;
+                                        dest.Data.Quantity = 0;
+                                        dest.Data.Type = shortCode;
+                                        dest.Data.VoucherNo++;
                                     }
                                     else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
                                     {
-                                        var deliveryTask = db.Queryable<WCS_TaskInfo>().First(x => x.ID == obj.Data.TaskNumber);
-                                        countQty = deliveryTask.FullQty;
-                                        shortCode = deliveryTask.PalletType;
-                                        deliveryTask.Status = TaskStatus.RgvCompleted;
-                                        deliveryTask.EditTime = DateTime.Now;
-                                        deliveryTask.LastInteractionPoint = obj.Entity.Code;
-                                        db.Updateable(deliveryTask).ExecuteCommand();
-                                        deliveryTask.AddWCS_TASK_DTL(db, deliveryTask.AddrTo, $"RGV任务执行结束");
+                                        var dest = new Device<IRobot530>(destPosition!, World);
+                                        dest.Data.MaxQuantity = countQty;
+                                        dest.Data.Type = shortCode;
+                                        dest.Data.VoucherNo++;
                                     }
                                 }
-                            });
-
-                            if (startPosition.Data.TaskNumber == obj.Data.TaskNumber) //初始化起始点信息
-                            {
-                                startPosition.Data.TaskNumber = 0;
-                                startPosition.Data.GoodsEnd = 0;
                             }
-
-                            //目标地址是码垛工位
-                            if (isPalletizing)
+                            catch (Exception e)
                             {
-                                if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
-                                {
-                                    var dest = new Device<ITruss530>(destPosition!, World);
-                                    dest.Data.MaxQuantity = countQty;
-                                    dest.Data.Type = shortCode;
-                                    dest.Data.VoucherNo++;
-                                }
-                                else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
-                                {
-                                    var dest = new Device<IRobot530>(destPosition!, World);
-                                    dest.Data.MaxQuantity = countQty;
-                                    dest.Data.Type = shortCode;
-                                    dest.Data.VoucherNo++;
-                                }
+                                throw new KnownException($"处理小车放货完成是出现错误:{e.Message}", LogLevelEnum.High);
                             }
                             obj.Data.RES1 = 1;
                             break;
@@ -162,10 +175,37 @@ namespace WCS.WorkEngineering.Systems
                             break;
 
                         case RGVCmdType.PickPutGoods:
-                            staDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-                            staDev.Data.TaskNumber = 0;
-                            staDev.Data.GoodsStart = 0;
-                            staDev.Data.GoodsEnd = 0;
+                            var statDev = new Device<IStation520, IStation521, ITruss530>(Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString())!, World);
+                            if (statDev.Entity.HasFlag(DeviceFlags.二次码垛RGV取货口))
+                            {
+                                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) ?? throw new KnownException($"未找到对应任务{obj.Data2.TaskNumber}", LogLevelEnum.High);
+                                });
+                                var pallLoc = pall.Layers.SelectMany(x => x.Rows).SelectMany(x => x.Locs).Select(x => new { XYNo = x.XYNo.ToShort(), x.Finish }).ToList();
+
+                                foreach (var loc in pallLoc)
+                                {
+                                    statDev.Data3.GetType().GetProperty($"IsGoods{loc.XYNo - 1}").SetValue(obj.Data3, loc.Finish);
+                                }
+
+                                statDev.Data3.MaxQuantity = pall.CountQty.ToShort();
+                                statDev.Data3.Quantity = pallLoc.Count(x => x.Finish).ToShort();
+                                statDev.Data3.Type = pall.ShortCode;
+                                statDev.Data3.VoucherNo++;
+                            }
+                            else
+                            {
+                                var destDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
+                                destDev.Data.TaskNumber = 0;
+                                destDev.Data.GoodsStart = 0;
+                                destDev.Data.GoodsEnd = 0;
+                            }
+
                             obj.Data.RES1 = 1;
                             break;
 
@@ -233,6 +273,16 @@ 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;
+                    }
+
                     //非拆盘机起始任务
                     //站台中的任务号
                     WCS_TaskInfo task = null;
@@ -274,7 +324,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is /*"RGV1" or "RGV2" or*/ /*"RGV3" or*/ "RGV4" /*or "RGV5" or "RGV6"*/;
+            return dev.Code is "RGV1" or "RGV2" or "RGV3" or "RGV4" or "RGV5" or "RGV6";
             //return dev.HasFlag(Extensions.DeviceFlags.RGV);
         }
     }

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -382,7 +382,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is /*"SRM1" or "SRM2" or*/ "SRM3" or "SRM4" or "SRM5" or "SRM6";
+            return dev.Code is "SRM1" or "SRM2" or "SRM3" or "SRM4" or "SRM5" or "SRM6";
         }
     }
 }

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -14,7 +14,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///  UpLoadSystems
     /// </summary>
-    //[BelongTo(typeof(UpLoadWorld))]
+    [BelongTo(typeof(UpLoadWorld))]
     [Description("UpLoadSystems")]
     public class UpLoadSystems : DeviceSystem<Device<IStation520>>
     {

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

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

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

@@ -134,7 +134,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is /*"418" or "618" or*/ "818" or "1018" or "1218" or "1418";
+            return dev.Code is "418" or "618" or "818" or "1018" or "1218" or "1418";
         }
 
         /// <summary>

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

@@ -28,7 +28,7 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
             if (obj.Data2.Request != 1) return;
 
             var addNext = 1;
-            WCS_TaskInfo task = null;
+            int taskId = 0;
 
             SqlSugarHelper.Do(_db =>
             {
@@ -43,10 +43,11 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
                 taskInfo.EndTime = DateTime.Now;
                 db.Updateable(taskInfo).ExecuteCommand();
                 taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, "二次码垛出库任务完成");
-                task = taskInfo;
+                addNext = pall.PalletizingStation.ToShort();
+                taskId = pall.Id;
             });
-            if (task == null) return;
-            obj.Data.TaskNumber = task.ID;
+            if (taskId == 0) return;
+            obj.Data.TaskNumber = taskId;
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
             obj.Data.GoodsEnd = addNext.ToShort();
             obj.Data.VoucherNo++;
@@ -54,7 +55,7 @@ namespace WCS.WorkEngineering.Systems.桁架码垛
 
         public override bool Select(Device dev)
         {
-            return dev.Code is /*"1606" or "1616" or "1626" or*/ "1636" /*or "1646" or "1656"*/;
+            return dev.Code is "1606" or "1616" or "1626" or "1636" or "1646" or "1656";
         }
     }
 }

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

@@ -158,11 +158,12 @@ namespace WCS.WorkEngineering.Systems
                     .Where(x => x.Layers.Any(l => !l.Finish) && x.PalletizingStation != null).ToList();
                 //筛选出目标位置有光电的码垛记录信息
                 var devCode = palletizingLsit.Select(x => x.PalletizingStation);
-                //var devList = Device.All.Where(x => devCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523, ITruss530>(x, World)).ToList();
-                //devList = devList.Where(x => x.Data3.Status.HasFlag(StationStatus.PH_Status) && !x.Data4.CmdType.HasFlag(TrussCmdType.Two)).ToList();
-                //devCode = devList.Select(x => x.Entity.Code);
-                //if (!devCode.Any()) throw new KnownException($"无可用放货码垛位,请检查实际有货位置的光电是否正常", LogLevelEnum.Mid);
-                palletizingLsit = palletizingLsit.Where(x => x.PalletizingStation == "1716").ToList(); //可以放货的目标托盘
+                var taskCode = palletizingLsit.Select(x => x.Id);
+                var devList = Device.All.Where(x => devCode.Contains(x.Code)).Select(x => new Device<IStation521, IStation523, ITruss530>(x, World)).ToList();
+                devList = devList.Where(x => x.Data2.Status.HasFlag(StationStatus.PH_Status) && taskCode.Contains(x.Data.TaskNumber) && !x.Data3.CmdType.HasFlag(TrussCmdType.Two)).ToList();
+                devCode = devList.Select(x => x.Entity.Code);
+                if (!devCode.Any()) throw new KnownException($"无可用放货码垛位,请检查实际有货位置的光电是否正常", LogLevelEnum.Mid);
+                palletizingLsit = palletizingLsit.Where(x => devCode.Contains(x.PalletizingStation)).ToList(); //可以放货的目标托盘
                 //可以取货的码垛信息
                 var pickUpCode = _pickUpDevices.Select(x => x.Key.Entity.Code.ToShort());
                 //从缓存线信息找到可以取货的缓存线
@@ -342,7 +343,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.Code is /*"Truss1" or*/ "Truss2" or "Truss3";
+            return dev.Code is "Truss1" or "Truss2" or "Truss3";
         }
 
         public 桁架()

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架码垛工位任务结束处理.cs

@@ -87,7 +87,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.HasFlag(DeviceFlags.桁架码垛位);
+            return dev.HasFlag(DeviceFlags.桁架码垛位) || dev.Code is "1715" or "1716";
         }
     }
 }

+ 13 - 14
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -1065,25 +1065,24 @@ namespace WCS.WorkEngineering
                 { DeviceFlags.入库, new List<string>() { "2532", "2533", "2534", "2732", "2733", "2734","1603" } },
                 { DeviceFlags.出库, new List<string>() { "2532", "2533", "2534", "2732", "2733", "2734" } },
                 { DeviceFlags.扫码, new List<string>() { "2532", "2732" } },
-                { DeviceFlags.一列堆垛机, new List<string>() { "SRM1"/*, "SRM3", "SRM5"*/} },
-                { DeviceFlags.二列堆垛机, new List<string>() { "SRM2"/*, "SRM4", "SRM6"*/ } },
                 { DeviceFlags.一楼扫码,new List<string>(){ "2532","2732", "2932", "3132" , "3332", "3532"  } },
-                { DeviceFlags.一楼叠盘机,new List<string>() { /*"2527","2528","2727","2728",*/ "2927", "2928", "3127", "3128" , "3327", "3328", "3527", "3528" } },
+                { DeviceFlags.一楼叠盘机,new List<string>() { "2527", "2528", "2727", "2728", "2927", "2928", "3127", "3128" , "3327", "3328", "3527", "3528" } },
                 { DeviceFlags.主线分流点,new List<string>() { "22","41","61"} },
                 { DeviceFlags.满轮主线第一次扫码,new List<string>() { "1"} },
-                { DeviceFlags.环形库分流点,new List<string>(){ /*"418", "618",*/"818","1018","1218","1418" } },
-                { DeviceFlags.桁架分流点,new List<string>() { /*"455","655",*/"855","1055","1255","1455" } },
-                { DeviceFlags.桁架缓存放行点, new List<string>(){ /*"466", "480", "494", "508", "522", "536", "550", "564", "578", "591", "666", "680", "694", "708", "722", "736", "750", "764", "778", "791" , */"866", "880", "894", "908", "922", "936", "950", "964", "978", "991" , "1066", "1080", "1094", "1108", "1122", "1136", "1150", "1164", "1178", "1191" , "1266", "1280", "1294", "1308", "1322", "1336", "1350", "1364", "1378", "1391" , "1466", "1480", "1494", "1408", "1422", "1436", "1450", "1464", "1478", "1591" } },
-                { DeviceFlags.桁架09缓存放行点, new List<string>(){ /*"466", "480", "494", "508", "522", "536", "666", "680", "694", "708", "722", "736", */"866", "880", "894", "908", "922", "936", "1066", "1080", "1094", "1108", "1122", "1136",  "1266", "1280", "1294", "1308", "1322", "1336",  "1466", "1480", "1494", "1408", "1422", "1436" } },
-                { DeviceFlags.桁架09异常缓存放行点, new List<string>(){  /*"591", "791" ,*/"991" , "1191" , "1391" , "1591" } },
-                { DeviceFlags.桁架18缓存放行点, new List<string>(){  /*"550", "564", "578", "750", "764", "778" ,*/ "950", "964", "978" , "1150", "1164", "1178" , "1350", "1364", "1378" , "1450", "1464", "1478" } },
-                { DeviceFlags.桁架取货点, new List<string>(){ /*"461", "475", "489", "503","517","531", "545", "559", "573", "586", "661", "675", "689", "703", "717", "731", "745", "759", "773", "786", */"861", "875", "889", "903", "917", "931", "945", "959", "973", "986", "1061", "1075", "1089", "1103", "1117", "1131", "1145", "1159", "1173", "1186", "1261", "1275", "1289", "1303", "1317", "1331", "1345", "1359", "1373", "1386" , "1461", "1475", "1489", "1503", "1517", "1531", "1545", "1559", "1573", "1586" } },
+                { DeviceFlags.环形库分流点,new List<string>(){ "418", "618", "818","1018","1218","1418" } },
+                { DeviceFlags.桁架分流点,new List<string>() { "455", "655", "855","1055","1255","1455" } },
+                { DeviceFlags.桁架缓存放行点, new List<string>(){ "466", "480", "494", "508", "522", "536", "550", "564", "578", "591", "666", "680", "694", "708", "722", "736", "750", "764", "778", "791", "866", "880", "894", "908", "922", "936", "950", "964", "978", "991" , "1066", "1080", "1094", "1108", "1122", "1136", "1150", "1164", "1178", "1191" , "1266", "1280", "1294", "1308", "1322", "1336", "1350", "1364", "1378", "1391" , "1466", "1480", "1494", "1408", "1422", "1436", "1450", "1464", "1478", "1591" } },
+                { DeviceFlags.桁架09缓存放行点, new List<string>(){ "466", "480", "494", "508", "522", "536", "666", "680", "694", "708", "722", "736", "866", "880", "894", "908", "922", "936", "1066", "1080", "1094", "1108", "1122", "1136",  "1266", "1280", "1294", "1308", "1322", "1336",  "1466", "1480", "1494", "1408", "1422", "1436" } },
+                { DeviceFlags.桁架09异常缓存放行点, new List<string>(){ "591", "791", "991" , "1191" , "1391" , "1591" } },
+                { DeviceFlags.桁架18缓存放行点, new List<string>(){ "550", "564", "578", "750", "764", "778", "950", "964", "978" , "1150", "1164", "1178" , "1350", "1364", "1378" , "1450", "1464", "1478" } },
+                { DeviceFlags.桁架取货点, new List<string>(){ "461", "475", "489", "503", "517", "531", "545", "559", "573", "586", "661", "675", "689", "703", "717", "731", "745", "759", "773", "786", "861", "875", "889", "903", "917", "931", "945", "959", "973", "986", "1061", "1075", "1089", "1103", "1117", "1131", "1145", "1159", "1173", "1186", "1261", "1275", "1289", "1303", "1317", "1331", "1345", "1359", "1373", "1386" , "1461", "1475", "1489", "1503", "1517", "1531", "1545", "1559", "1573", "1586" } },
                 //{ 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>(){ /*"1666", "1661", "1676", "1681",*/ "1691", "1696", "1706", "1711", "1721", "1726", "1736", "1741" } },
+                { 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>(){ "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" } },
+                { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2", "Robot3","Robot4" , "Robot5", "Robot6" } },
+                {DeviceFlags.二次码垛RGV取货口, new List<string>(){ "1606", "1616", "1626","1636","1646","1656"}}
         };
 
             Parallel.ForEach(devices, device =>