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

master
wenjy 6 months ago
parent 8a83088d3d
commit 619a674cc0

@ -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>

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

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

Loading…
Cancel
Save