change - 提升机旁出空料箱逻辑修改,收到运送空料箱任务就通知PLC出空料箱

master
wenjy 6 months ago
parent 8a83088d3d
commit 619a674cc0

@ -35,6 +35,8 @@ namespace SlnMesnac.WCS
private readonly SerilogHelper _logger; private readonly SerilogHelper _logger;
private IServiceProvider serviceProvider; private IServiceProvider serviceProvider;
private ISqlSugarClient SqlSugarClient; private ISqlSugarClient SqlSugarClient;
private BearAgv bearAgv;
#region 变量定义 #region 变量定义
public List<PlcAbsractFactory> plcList; public List<PlcAbsractFactory> plcList;
@ -42,7 +44,7 @@ namespace SlnMesnac.WCS
public List<RfidAbsractFactory> rfidList; public List<RfidAbsractFactory> rfidList;
#endregion 变量定义 #endregion 变量定义
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
@ -97,7 +99,7 @@ namespace SlnMesnac.WCS
_logger.Agv("WCS调度程序启动成功!"); _logger.Agv("WCS调度程序启动成功!");
//背负式agv执行任务 //背负式agv执行任务
BearAgv bearAgv = new BearAgv(host.Services); bearAgv = new BearAgv(host.Services);
bearAgv.StartPoint(); bearAgv.StartPoint();
} }
@ -270,6 +272,8 @@ namespace SlnMesnac.WCS
agv.Timestamp = DateTime.Now; agv.Timestamp = DateTime.Now;
} }
} }
//TaskHandleByAgv(agvList);
SqlSugarClient.Updateable(agvList).ExecuteCommand(); 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取消 #region 删除任务 -- 已经下发的任务需要通知agv取消
/// <summary> /// <summary>

@ -24,13 +24,15 @@ namespace SlnMesnac.WCS.WCS
private List<string> agvEquipNos = new List<string>() { "AGV01", "AGV02", "AGV03" }; private List<string> agvEquipNos = new List<string>() { "AGV01", "AGV02", "AGV03" };
//3#车间上料点plc //3#车间上料点plc
private readonly PlcAbsractFactory workShop3Plc; public readonly PlcAbsractFactory workShop3Plc;
//2#计量室相关点位 //2#计量室相关点位
private readonly PlcAbsractFactory workShop2Plc; private readonly PlcAbsractFactory workShop2Plc;
public readonly WcsBaseEquip baseEquip; public readonly WcsBaseEquip baseEquip;
public List<WcsAgvStatus> agvStatusList = new List<WcsAgvStatus>();
public BearAgv(IServiceProvider serviceProvider) : base(serviceProvider) public BearAgv(IServiceProvider serviceProvider) : base(serviceProvider)
{ {
sqlSugarClient = serviceProvider.GetRequiredService<ISqlSugarClient>(); sqlSugarClient = serviceProvider.GetRequiredService<ISqlSugarClient>();
@ -590,6 +592,7 @@ namespace SlnMesnac.WCS.WCS
if (task.TaskStatus == 0) if (task.TaskStatus == 0)
{ {
TaskStatus0Handle(task); TaskStatus0Handle(task);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出一个空托盘信号"), true);
} }
else if (task.TaskStatus == 2) //agv到达接驳位里面等待料箱上agv else if (task.TaskStatus == 2) //agv到达接驳位里面等待料箱上agv
{ {
@ -598,6 +601,11 @@ namespace SlnMesnac.WCS.WCS
_logger.Plc(DateTime.Now + "2#PLC未连接,请检查网络!"); _logger.Plc(DateTime.Now + "2#PLC未连接,请检查网络!");
return; return;
} }
if (!workShop2Plc.readBoolByAddress("DB100.DBX38.0"))
{
workShop2Plc.writeBoolByAddress("DB100.DBX38.0", true);
}
bool goOutFlag = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#缓存空进AGV任务反馈")); bool goOutFlag = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#缓存空进AGV任务反馈"));
bool outFlag = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#接驳位到位信号")); bool outFlag = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#接驳位到位信号"));
@ -616,6 +624,8 @@ namespace SlnMesnac.WCS.WCS
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出接驳位信号"), false); workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出接驳位信号"), false);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出一个空托盘信号"), false); workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出一个空托盘信号"), false);
workShop2Plc.writeBoolByAddress("DB100.DBX38.0", false);
//判断二次生成补空箱任务 //判断二次生成补空箱任务
Thread.Sleep(500); Thread.Sleep(500);
CreateSecondSuppleSmallPallet(); CreateSecondSuppleSmallPallet();
@ -663,7 +673,7 @@ namespace SlnMesnac.WCS.WCS
} }
if (busyFlag == 0) if (busyFlag == 0)
{ {
Thread.Sleep(1000); Thread.Sleep(3000);
busyFlag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态")); busyFlag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"));
if (busyFlag == 0) if (busyFlag == 0)
{ {
@ -1275,6 +1285,9 @@ namespace SlnMesnac.WCS.WCS
{ {
try try
{ {
return;
if (workShop3Plc == null || !workShop3Plc.IsConnected || workShop2Plc == null || !workShop2Plc.IsConnected) if (workShop3Plc == null || !workShop3Plc.IsConnected || workShop2Plc == null || !workShop2Plc.IsConnected)
{ {
return; return;

@ -79,7 +79,7 @@ namespace SlnMesnac.WPF.ViewModel
GetTaskList(); GetTaskList();
await RefreChartAsync(); await RefreChartAsync();
await LoadAgvDataAsync(); await LoadAgvDataAsync();
PrintMessageToListBox("测试消息" + Guid.NewGuid()); //PrintMessageToListBox("测试消息" + Guid.NewGuid());
await Task.Delay(5000); await Task.Delay(5000);
} }
}); });

Loading…
Cancel
Save