diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index ba189a8..2e5dd18 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -43,6 +43,56 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("二楼AGV上件扫描监听启动成功"); } + + /// + /// 开启线程监听2分钟小包出口光电信号,如果小包出口到位信号消失,即取托盘完成,发送信号通知线体 + /// + /// + public static void ListenForSignal(int timeoutMinutes = 2) + { + // 创建一个 CancellationTokenSource 来控制超时 + var cts = new CancellationTokenSource(TimeSpan.FromMinutes(timeoutMinutes)); + + Task.Run(async () => + { + var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); + var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress); + + while (!cts.Token.IsCancellationRequested) + { + // 每隔 1 秒检查一次小包出口光电信号 + await Task.Delay(1000, cts.Token); + + agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress); + + if (agvGetValue != null && Convert.ToInt32(agvGetValue) == 0) + { + // 信号消失,20s后执行相关操作 + Thread.Sleep(1000*20); + + // 取托盘确认信号DB4.DBX310.1写true + BasePlcpoint secondOutGetOverPoint = StaticData.BasePlcpointList.First(t => t.id == 71); + StaticData.PlcDic[2].WriteToPoint(secondOutGetOverPoint.plcpointAddress, true, secondOutGetOverPoint.plcpointLength.ToString()); + + // 清空小包出口RFID + BasePlcpoint rfid2001Point = StaticData.BasePlcpointList.First(t => t.id == 52); + StaticData.PlcDic[2].WriteRFID(rfid2001Point.plcpointAddress, "", 12); + + // 满足条件后退出循环 + break; + } + } + + // 任务被取消或者超时 + if (cts.Token.IsCancellationRequested) + { + Console.WriteLine("任务超时或被取消"); + } + }).Wait(); + } + + + public void MonitorInLocatorPoint() { using var scope = _host.Services.CreateScope(); @@ -538,8 +588,16 @@ namespace Khd.Core.Wcs.Wcs { dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); + + // 开启线程监听2分钟小包出口光电信号,如果小包出口到位信号消失,即取托盘完成,发送信号通知线体 + ListenForSignal(2); + + } } + + + } else { @@ -557,6 +615,9 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); } } + + + } else if (item.taskStatus == 5) { @@ -594,12 +655,6 @@ namespace Khd.Core.Wcs.Wcs if (item.taskType == StaticTaskType.SecondSmallPackageToStorage) { - //取托盘确认信号DB4.DBX310.1写true - BasePlcpoint SecondOutGetOverPoint = StaticData.BasePlcpointList.First(t => t.id == 71); - StaticData.PlcDic[2].WriteToPoint(SecondOutGetOverPoint.plcpointAddress, true, SecondOutGetOverPoint.plcpointLength.ToString()); - // 清空小包出口RFID - BasePlcpoint RFID2001Point = StaticData.BasePlcpointList.First(t => t.id == 52); - StaticData.PlcDic[2].WriteRFID(RFID2001Point.plcpointAddress,"", 12);//小包出口的RFID //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); //if (wmsProductInstock != null) diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index a982cd6..38b74ba 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -1374,6 +1374,7 @@ namespace Khd.Core.Wpf.Form { if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes) { + Application.Current.Shutdown(); System.Environment.Exit(System.Environment.ExitCode); } }