| 
					
				 | 
			
			
				@@ -16,11 +16,49 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public class StationDeviceGroup : DeviceGroup<IStation520, IStation521, IStation523> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// 当前设备可用的RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private static List<RGVDevice> AllRGVList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        static StationDeviceGroup() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            AllRGVList = Device.Where(v => v.IsRGV() && v.CODE != "RGV8").Select(v => v.Create<RGVDevice>()).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public StationDeviceGroup(WCS_DEVICE entity) : base(entity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private List<RGVDevice> RGVs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void EX(Action<StationDeviceGroup> act) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (ExDevice.Any(v => v == Entity.CODE)) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AddExDevice(Entity.CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                act(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch (Exception ex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                InfoLog.INFO_ERROR($"{ex.Message}--{ex.StackTrace}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, "待定"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            finally 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                RemoveExDevice(Entity.CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// 当前设备可用的RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private List<RGVDevice> RgvList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            get 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return AllRGVList.Where(v => v.LocationList.Any(p => p.Station == Entity.CODE)).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// 设备组自身的位置 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -112,7 +150,10 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <returns></returns> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public RGVDevice CurrentRGV() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return new RGVDevice(new WCS_DEVICE()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //RGV与站台距离误差为 正负50 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var max = Position + 50; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var min = Position - 50; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return RgvList.FirstOrDefault(v => v.Data2.Position < max && v.Data2.Position > min); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -223,6 +264,7 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// 所有环穿RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private static List<RGVDevice> AllRGVList { get; set; } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -251,7 +293,7 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// 与当前RGV处于同一环穿的RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// 与当前RGV处于同一环穿的站台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public List<StationLocation> LocationList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -324,22 +366,35 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <param name="addr">目标地址</param> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public void Move(StationDeviceGroup addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.TaskType_1 = RGVTaskType.移动; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.DestPosition_1 = addr.Entity.CODE.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.Trigger_1++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// 写入取货任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <param name="addr">目标地址</param> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public void Pick(StationDeviceGroup addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void Pick(StationDeviceGroup addr, int task1 = 0, int task2 = 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.TaskType_1 = RGVTaskType.取货; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.DestPosition_1 = addr.Entity.CODE.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (task1 != 0) Data.TaskID_1 = task1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (task2 != 0) Data.TaskID_2 = task2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.Trigger_1++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// 写入放货任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <param name="addr">目标地址</param> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public void Put(StationDeviceGroup addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void Put(StationDeviceGroup addr, int task1 = 0, int task2 = 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.TaskType_1 = RGVTaskType.放货; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.DestPosition_1 = addr.Entity.CODE.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (task1 != 0) Data.TaskID_1 = task1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (task2 != 0) Data.TaskID_2 = task2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Data.Trigger_1++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -525,7 +580,7 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public int Location { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// 所属PLC名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// 所属RGV组 PLC名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public string PLC { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -544,22 +599,4 @@ namespace WCS.Service.Extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public WCS_DEVICE taskIN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public Device<ISRM520, ISRM521, ISRM537> SRM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /// 设备扩展 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static class DeviceExtension 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public static void EX(this StationDevice dev, Func<bool> func) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                func(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch (Exception ex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                InfoLog.INFO_ERROR($"{ex.Source}----{ex.Message}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |