|
|
@@ -91,10 +91,6 @@ namespace WCS.Service.Works.RGV
|
|
|
{
|
|
|
protected override void Do(RGVDevice obj)
|
|
|
{
|
|
|
- obj = Device.Find("RGV9").Create<RGVDevice>();
|
|
|
- obj.Put(Device.Find("G6").Create<StationDeviceGroup>(), 64704, 64705);
|
|
|
- return;
|
|
|
-
|
|
|
//11号站台是取货点,但不是待命点,如需取货,从九号站台调车
|
|
|
//2号站台是一个待命点,但是为了保证入库取货效率,所有后面会跟一个车
|
|
|
//如果3号站台的小车拦住了后一个小车的放货任务,检测一次最近的空车距离值,如果大于或等于618500并且小于被拦住小车的位置值再进行调车,用于避免无效空跑
|
|
|
@@ -173,14 +169,14 @@ namespace WCS.Service.Works.RGV
|
|
|
}
|
|
|
else if (pickStation.Entity.CODE == "G9")
|
|
|
{
|
|
|
- ////九站台的小车需要额外检测一下11站台是否需要取货
|
|
|
- //var station11 = Device.Find("G11").Create<StationDeviceGroup>();
|
|
|
- //var station11Dev = station11.RGVGetTaskedDevice();
|
|
|
- //if (station11Dev != null && station11Dev.Count > 0)
|
|
|
- //{
|
|
|
- // obj.Move(station11);
|
|
|
- //}
|
|
|
- //return;
|
|
|
+ //九站台的小车需要额外检测一下11站台是否需要取货
|
|
|
+ var station11 = Device.Find("G11").Create<StationDeviceGroup>();
|
|
|
+ var station11Dev = station11.RGVGetTaskedDevice();
|
|
|
+ if (station11Dev != null && station11Dev.Count > 0)
|
|
|
+ {
|
|
|
+ obj.Move(station11);
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
//找到自己的后一个小车
|
|
|
@@ -189,19 +185,19 @@ namespace WCS.Service.Works.RGV
|
|
|
//自己是否阻挡了该小车
|
|
|
if (afterRgv.Data2.WorkMode == RGVMode.自动 && afterRgv.Data2.SystemStatus != RGVRunStatus.空闲 && obj.StopedByMe(afterRgv))
|
|
|
{
|
|
|
- //if (pickStation.Entity.CODE == "G2")
|
|
|
- //{
|
|
|
- // //此站台因需要进行排队,因此是否需要赶车取决于是否拦住了两个小车的任务
|
|
|
- // var afterRgv1 = afterRgv.After();
|
|
|
- // //如果是空闲或者没有拦住他,就不执行赶车
|
|
|
- // if (afterRgv.Data2.WorkMode == RGVMode.自动 && afterRgv1.Data2.SystemStatus == RGVRunStatus.空闲 || !afterRgv.StopedByMe(afterRgv1)) return;
|
|
|
- //}
|
|
|
- //else if (pickStation.Entity.CODE == "G3")
|
|
|
- //{
|
|
|
- // //为了减少空跑,需要被阻拦的小车后面的小车任务类型为移动并且位置值要大于618500小于被阻拦小车的位置值
|
|
|
- // var afterRgv1 = afterRgv.After();
|
|
|
- // if (afterRgv1.Data2.WorkMode == RGVMode.自动 && afterRgv1.Data2.TaskType_1 != RGVTaskType.移动 && !(afterRgv1.Position < afterRgv.Position && afterRgv1.Position > 618500)) return;
|
|
|
- //}
|
|
|
+ if (pickStation.Entity.CODE == "G2")
|
|
|
+ {
|
|
|
+ //此站台因需要进行排队,因此是否需要赶车取决于是否拦住了两个小车的任务
|
|
|
+ var afterRgv1 = afterRgv.After();
|
|
|
+ //如果是空闲或者没有拦住他,就不执行赶车
|
|
|
+ if (afterRgv1.Data2.WorkMode == RGVMode.自动 && (afterRgv1.Data2.SystemStatus == RGVRunStatus.空闲 || !afterRgv.StopedByMe(afterRgv1))) return;
|
|
|
+ }
|
|
|
+ else if (pickStation.Entity.CODE == "G3")
|
|
|
+ {
|
|
|
+ //为了减少空跑,需要被阻拦的小车后面的小车任务类型为移动并且位置值要大于618500小于被阻拦小车的位置值
|
|
|
+ var afterRgv1 = afterRgv.After();
|
|
|
+ if (afterRgv1.Data2.WorkMode == RGVMode.自动 && afterRgv1.Data2.TaskType_1 != RGVTaskType.移动 && !(afterRgv1.Position < afterRgv.Position && afterRgv1.Position > 618500)) return;
|
|
|
+ }
|
|
|
//找到当前所在站台的下一个取货点
|
|
|
var beforeStation = Device.Where(v => v.Is(DF.涂布RGV取货设备组) && v.CODE != pickStation.Entity.CODE)
|
|
|
.Select(v => v.Create<StationDeviceGroup>())
|
|
|
@@ -214,31 +210,31 @@ namespace WCS.Service.Works.RGV
|
|
|
}
|
|
|
else if (pickStation.Entity.CODE == "G11")
|
|
|
{
|
|
|
- //obj.Move(Device.Find("G2").Create<StationDeviceGroup>());
|
|
|
- //return;
|
|
|
+ obj.Move(Device.Find("G2").Create<StationDeviceGroup>());
|
|
|
+ return;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //找到自己前面的 有货 没有小车 没有正在过来的小车 距离自己最近的 的站台
|
|
|
- //var station = Device.Where(v => v.Is(DF.涂布RGV取货设备组))
|
|
|
- // .Select(v => v.Create<StationDeviceGroup>())
|
|
|
- // .Where(v => v.Position > obj.Position) //前面的
|
|
|
- // .Where(v => v.CurrentRGV() == null)
|
|
|
- // .Where(v => !v.RgvList.Any(c => c.Data2.SystemStatus != RGVRunStatus.空闲 && c.Data2.DestPosition_1 == v.Entity.CODE.GetShortCode()))
|
|
|
- // .Where(v =>
|
|
|
- // {
|
|
|
- // // 筛选出有任务号和起始及目标地址的设备
|
|
|
- // var b = pickStation.RGVGetTaskedDevice();
|
|
|
- // //是否需要取货
|
|
|
- // if (b != null && b.Count > 0) return true;
|
|
|
- // else return false;
|
|
|
- // })
|
|
|
- // .OrderBy(v => obj.Distance(v)).FirstOrDefault();
|
|
|
- //if (obj.Data2.TaskType_1 == RGVTaskType.移动 && obj.Distance(station) > 100000)
|
|
|
- //{
|
|
|
- // obj.Move(station);
|
|
|
- //}
|
|
|
- //return;
|
|
|
+ //找到自己前面的 有货 没有小车 没有正在过来的小车 距离自己最近的 的站台
|
|
|
+ var station = Device.Where(v => v.Is(DF.涂布RGV取货设备组))
|
|
|
+ .Select(v => v.Create<StationDeviceGroup>())
|
|
|
+ .Where(v => v.Position > obj.Position) //前面的
|
|
|
+ .Where(v => v.CurrentRGV() == null)
|
|
|
+ .Where(v => !v.RgvList.Any(c => c.Data2.SystemStatus != RGVRunStatus.空闲 && c.Data2.DestPosition_1 == v.Entity.CODE.GetShortCode()))
|
|
|
+ .Where(v =>
|
|
|
+ {
|
|
|
+ // 筛选出有任务号和起始及目标地址的设备
|
|
|
+ var b = pickStation.RGVGetTaskedDevice();
|
|
|
+ //是否需要取货
|
|
|
+ if (b != null && b.Count > 0) return true;
|
|
|
+ else return false;
|
|
|
+ })
|
|
|
+ .OrderBy(v => obj.Distance(v)).FirstOrDefault();//取当前小车最近
|
|
|
+ if (obj.Data2.TaskType_1 == RGVTaskType.移动 && obj.Distance(station) > 100000)
|
|
|
+ {
|
|
|
+ obj.Move(station);
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|