| 
					
				 | 
			
			
				@@ -92,47 +92,48 @@ namespace WCS.Service.Works.RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //是否有任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (rgv.Data.Trigger_1 != rgv.Data2.Trigger_1) throw new WarnException($"待执行任务{rgv.Data.TaskID_1}-{rgv.Data.TaskID_2}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //检查取货点是否需要取货 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.WhetherToExecute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //obj.WhetherToExecute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //筛选出有任务号和起始及目标地址的设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var dev = obj.RGVGetTaskedDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (dev.Count > 0) //有需要取货的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //var dev = obj.RGVGetTaskedDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int dev = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (dev > 0) //有需要取货的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //开始下达取货任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        DB.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            var taskids = dev.Select(v => v.Data2.Tasknum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            var tasks = db.Default.Set<WCS_TASK>().Where(p => taskids.Contains(p.ID)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (tasks.GroupBy(p => p.TaskGroupKey).Count() > 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                throw new WarnException("任务组ID不一致"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (!tasks.GroupBy(p => p.TaskGroupKey).Any()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                throw new WarnException("无任务组ID"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            var gw1 = obj.Items.ToArray()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            var gw2 = obj.Items.ToArray()[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (gw1.Data2.Tasknum != 0 && gw2.Data2.Tasknum != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new WarnException($"{obj.Entity.Code}目标地址不一致"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            rgv.Data.TaskID_1 = gw1.Data2.Tasknum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            rgv.Data.TaskID_2 = gw2.Data2.Tasknum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            rgv.Data.TaskType_1 = RGVTaskType.取货; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (gw1.Data2.Tasknum != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                rgv.Data.DestPosition_1 = gw1.Data2.Goodsend; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                rgv.Data.DestPosition_1 = gw2.Data2.Goodsend; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            rgv.Data.Trigger_1++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            foreach (var task in tasks) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                var msg = $"下达从{rgv.Data.StartPosition_1}移动至{ rgv.Data.DestPosition_1}的RGV PLC指令。"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                msg += $"[{ task.ID}][{rgv.Data.StartPosition_1}][{rgv.Data.DestPosition_1}[{ rgv.Data.Trigger_1}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                task.CreateStatusLog(db, msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //DB.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    var taskids = dev.Select(v => v.Data2.Tasknum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    var tasks = db.Default.Set<WCS_TASK>().Where(p => taskids.Contains(p.ID)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    if (tasks.GroupBy(p => p.TaskGroupKey).Count() > 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        throw new WarnException("任务组ID不一致"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    if (!tasks.GroupBy(p => p.TaskGroupKey).Any()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        throw new WarnException("无任务组ID"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    var gw1 = obj.Items.ToArray()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    var gw2 = obj.Items.ToArray()[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    if (gw1.Data2.Tasknum != 0 && gw2.Data2.Tasknum != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new WarnException($"{obj.Entity.Code}目标地址不一致"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    rgv.Data.TaskID_1 = gw1.Data2.Tasknum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    rgv.Data.TaskID_2 = gw2.Data2.Tasknum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    rgv.Data.TaskType_1 = RGVTaskType.取货; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    if (gw1.Data2.Tasknum != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        rgv.Data.DestPosition_1 = gw1.Data2.Goodsend; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        rgv.Data.DestPosition_1 = gw2.Data2.Goodsend; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    rgv.Data.Trigger_1++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    foreach (var task in tasks) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        var msg = $"下达从{rgv.Data.StartPosition_1}移动至{ rgv.Data.DestPosition_1}的RGV PLC指令。"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        msg += $"[{ task.ID}][{rgv.Data.StartPosition_1}][{rgv.Data.DestPosition_1}[{ rgv.Data.Trigger_1}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //        task.CreateStatusLog(db, msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -153,11 +154,21 @@ namespace WCS.Service.Works.RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 //取小车的目标位置值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 var c = Device.Find($"G{a.Data2.DestPosition_1}").Create<StationDeviceGroup>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 //计算目标位置最近的一个取货口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                var d = Device.Where(v => v.Is(DF.涂布RGV取货站台)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                var d = Device.Where(v => v.Is(DF.涂布RGV取货站台) && v.CODE != obj.Entity.CODE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                               .Select(v => v.Create<StationDeviceGroup>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                              .Where(v => v.Position > c.Position) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                              .OrderBy(v => v.Position) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              .OrderBy(v => obj.Distance(v)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                               .FirstOrDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                var cc = Device.Where(v => v.Is(DF.涂布RGV取货站台) && v.CODE != obj.Entity.CODE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              .Select(v => v.Create<StationDeviceGroup>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              .OrderBy(v => obj.Distance(v)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                var aa = Device.Where(v => v.Is(DF.涂布RGV取货站台) && v.CODE != obj.Entity.CODE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              .Select(v => v.Create<StationDeviceGroup>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              .Select(v => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                  return new Tuple<string, float>(v.Entity.CODE, obj.Distance(v)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 //写入移动任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 rgv.Move(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -173,8 +184,8 @@ namespace WCS.Service.Works.RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else //没车 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //有没有目标地址是自己这的小车 任务未完成 未到站 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var moveRgv = obj.RgvList.Any(v => v.Data2.DestPosition_1 == obj.Entity.CODE.Replace("G", "").ToShort() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                     && !v.Data2.Status_1.HasFlag(WCS.Entity.Protocol.RGVStatus.任务完成) && !v.Data2.Status_1.HasFlag(WCS.Entity.Protocol.RGVStatus.任务完成)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var moveRgv = obj.RgvList.Any(v => v.Data2.DestPosition_1 == obj.Entity.CODE.Replace("G", "").ToShort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (moveRgv) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //找到一个空闲且离自己最近的一个RGV 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var a = obj.RgvList.Where(v => v.Data2.SystemStatus == RGVRunStatus.空闲 && v.Data2.WorkMode == RGVMode.自动); 
			 |