ProfControl简单平面库 创建TaskInfo类public class TaskInfo { public IAgv AgvName { get; set; } public IStation PickStation { get; set; } public IStation DropStation { get; set; } public IPocketLines PocketLine { get; set; } public bool IsMovingObstacle { get; set; } // 是否正在移动障碍物 public TaskInfo(IAgv agv, IStation PickStation, IPocketLines pocketLine null) { this.AgvName agv; this.PickStation PickStation; this.PocketLine pocketLine; this.IsMovingObstacle false; agv.Tag this; } }初始化AGV和站点为站点和AGV分配全局属性public void InitProcess() { API.StartVirtualSim(); API.QuickGPropertyIStation, bool(取货点, Dispatch.PPT.PropertyDetail.PropertyCtrlEnum.CheckBox, true); API.QuickGPropertyIStation, bool(放货点, Dispatch.PPT.PropertyDetail.PropertyCtrlEnum.CheckBox, true); API.QuickGPropertyIAgv, string(小车状态, Dispatch.PPT.PropertyDetail.PropertyCtrlEnum.TextBox, true); API.QuickGPropertyIAgv, string(待命点, Dispatch.PPT.PropertyDetail.PropertyCtrlEnum.TextBox, true); API.Agvs.Foreach(agv { agv.ShowInMap(小车状态, true); agv.SetValue(小车状态, 空闲); agv.TakeAll(); agv.Tag null; agvMovingStatus[agv] false; if (agv.GetValuestring(待命点) ! null) { agv.GoTo(agv.GetValuestring(待命点)); } }); var 取货点 API.Stations.Where(x x.GetValuebool(取货点)).ToList(); 取货点.ForEach(sta { sta.Tag null; }); var 放货点 API.Stations.Where(x x.GetValuebool(放货点)).ToList(); foreach (var sta in 放货点) { sta.TakeAll(); sta.Tag null; } }随机生成货物且生成障碍货物//生成货物 public void SimProduce() { var allCargoStas API.Stations.Where(x x.GetValuebool(取货点)).ToList(); API.ClearCargos(allCargoStas.SelectMany(x x.CargoAreas).ToList()); API.RandomGenerateCargoInfo(3); API.RandomGenerateContainerInfo(1, true, false, false); var storageStas allCargoStas; var pocketLines storageStas.SelectMany(x x.BelongPocketLines).Distinct().ToList(); var pocketLineStas pocketLines.SelectMany(x x.OrderStations).Distinct().ToList(); // 生成货物_1目标货物 var haveCargoStas (int)(pocketLineStas.Count * initCargosPercent); var rand new Random(); while (haveCargoStas 0) { var pocketLine pocketLines[rand.Next(pocketLines.Count)]; var catchOne false; foreach (var sta in pocketLine.OrderStations) { if (sta.GetValuebool(取货点) sta.IsEmpty()) { var container sta.CargoAreas.FirstOrDefault().ContainerPlace(托盘_0); container.CargoPlace(货物_1, 1); catchOne true; Tools.trace($生成货物_1 在 {sta.Mark}); break; } } if (catchOne) haveCargoStas--; } // 生成障碍物货物货物_2放在货物_1前面造成障碍 var obstacleCount (int)(pocketLineStas.Count * 0.2); while (obstacleCount 0) { var pocketLine pocketLines[rand.Next(pocketLines.Count)]; var catchOne false; foreach (var sta in pocketLine.OrderStations) { if (sta.GetValuebool(取货点) sta.IsEmpty()) { var container sta.CargoAreas.FirstOrDefault().ContainerPlace(托盘_0); container.CargoPlace(货物_2, 1); catchOne true; Tools.trace($生成障碍物货物_2 在 {sta.Mark}); break; } } if (catchOne) obstacleCount--; } }