|
|
|
|
@ -35,6 +35,8 @@ namespace SlnMesnac.WCS
|
|
|
|
|
private readonly SerilogHelper _logger;
|
|
|
|
|
private IServiceProvider serviceProvider;
|
|
|
|
|
private ISqlSugarClient SqlSugarClient;
|
|
|
|
|
|
|
|
|
|
private BearAgv bearAgv;
|
|
|
|
|
#region 变量定义
|
|
|
|
|
public List<PlcAbsractFactory> plcList;
|
|
|
|
|
|
|
|
|
|
@ -42,7 +44,7 @@ namespace SlnMesnac.WCS
|
|
|
|
|
public List<RfidAbsractFactory> rfidList;
|
|
|
|
|
|
|
|
|
|
#endregion 变量定义
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 构造函数
|
|
|
|
|
/// </summary>
|
|
|
|
|
@ -97,7 +99,7 @@ namespace SlnMesnac.WCS
|
|
|
|
|
_logger.Agv("WCS调度程序启动成功!");
|
|
|
|
|
|
|
|
|
|
//背负式agv执行任务
|
|
|
|
|
BearAgv bearAgv = new BearAgv(host.Services);
|
|
|
|
|
bearAgv = new BearAgv(host.Services);
|
|
|
|
|
bearAgv.StartPoint();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -270,6 +272,8 @@ namespace SlnMesnac.WCS
|
|
|
|
|
agv.Timestamp = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TaskHandleByAgv(agvList);
|
|
|
|
|
SqlSugarClient.Updateable(agvList).ExecuteCommand();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -279,6 +283,41 @@ namespace SlnMesnac.WCS
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void TaskHandleByAgv(List<WcsAgvStatus> agvInfos)
|
|
|
|
|
{
|
|
|
|
|
if (agvInfos == null || agvInfos.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var targetPoint = new { X = 142430, Y = 108540 };
|
|
|
|
|
|
|
|
|
|
var agvInfo = agvInfos.OrderBy(agv => CalculateDistance(double.Parse(agv.PosX), double.Parse(agv.PosY), targetPoint.X, targetPoint.Y)).First();
|
|
|
|
|
|
|
|
|
|
_logger.Agv($"=====>>>>离接驳位最近的设备为:{agvInfo.RobotCode}");
|
|
|
|
|
|
|
|
|
|
//判断当前小车有没有送空箱任务,下发PLC触发取料信号
|
|
|
|
|
if (agvInfo.StatusDetail.Contains("待机模式") || agvInfo.StatusDetail.Contains("空闲"))
|
|
|
|
|
{
|
|
|
|
|
_logger.Agv($"当前空闲车辆{agvInfo.RobotCode};离取料点最近,优先进行取料,锁定线体,下发PLC触发取料信号");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_logger.Agv($"当前没有空闲小车离取料点最近,等线体空闲后进行取料");
|
|
|
|
|
var flag = bearAgv.workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"));
|
|
|
|
|
if (flag == 0)
|
|
|
|
|
{
|
|
|
|
|
//线体空闲了,可以锁定进行取料
|
|
|
|
|
_logger.Agv($"线体空闲了,可以锁定使用远处小车进行取料");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static double CalculateDistance(double x1, double y1, double x2, double y2)
|
|
|
|
|
{
|
|
|
|
|
return Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 删除任务 -- 已经下发的任务,需要通知agv取消
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|