|
@@ -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}");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
}
|