diff --git a/SlnMesnac.WCS/WCS/BearAgv.cs b/SlnMesnac.WCS/WCS/BearAgv.cs index 7d05865..13bc256 100644 --- a/SlnMesnac.WCS/WCS/BearAgv.cs +++ b/SlnMesnac.WCS/WCS/BearAgv.cs @@ -7,6 +7,7 @@ using SlnMesnac.Model.dto.webapi; using SlnMesnac.Plc; using SlnMesnac.Serilog; using SlnMesnac.WCS.Global; +using SlnMesnac.WCS.Library; using SqlSugar; using System.Collections.Generic; using System.Threading.Tasks; @@ -609,6 +610,10 @@ namespace SlnMesnac.WCS.WCS workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#缓存空进AGV任务反馈"), false); workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出接驳位信号"), false); workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出一个空托盘信号"), false); + + //判断二次生成补空箱任务 + Thread.Sleep(500); + CreateSecondSuppleSmallPallet(); } } } @@ -1232,6 +1237,57 @@ namespace SlnMesnac.WCS.WCS #endregion 任务状态流转处理逻辑 + /// + /// 在从2#接驳位补托盘退出1s以后,判断如果3#库存为0,并且补小托盘任务数只有1个,总的agv任务书小于3个,并且2#线体空闲并且库存大于0, + /// 那么再次生成从2#接驳位补充空托盘任务,同时锁住2#线体 + /// + private void CreateSecondSuppleSmallPallet() + { + try + { + if (workShop3Plc == null || !workShop3Plc.IsConnected || workShop2Plc == null || !workShop2Plc.IsConnected) + { + return; + } + int work3EmptyAmount = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#缓存皮带线库存数")); + int suppleTaskCount = sqlSugarClient.Queryable().Where(x => x.TaskType == StaticTaskType.SupplySmallPalletFromTonerTask || x.TaskType == StaticTaskType.SupplySmallPalletTask).Count(); + int totalTaskCount = sqlSugarClient.Queryable().Count(); + int work2EmptyAmount = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#缓存链条线库存数")); + int work2BusyFlag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态")); + if (work3EmptyAmount == 0 && totalTaskCount < 3 && suppleTaskCount == 1 && work2BusyFlag == 0 && work2EmptyAmount > 0) + { + WcsTask task = new WcsTask(); + task.TaskType = StaticTaskType.SupplySmallPalletTask; + task.CurrPointNo = "2DeliverMetrologyRoomPoint"; + task.EndPointNo = "3DeliverSmallGoodsPoint"; + task.TaskStatus = 0; + task.CreatedTime = DateTime.Now; + task.CreatedBy = "wcs"; + task.TaskName = " 3#车间从2#接驳位补充小托盘任务"; + sqlSugarClient.AsTenant().BeginTran(); + try + { + int id = sqlSugarClient.Insertable(task).ExecuteReturnIdentity(); + WcsTaskLog wcsTaskLog = CoreMapper.Map(task); + wcsTaskLog.Id = id; + sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); + sqlSugarClient.AsTenant().CommitTran(); + workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1); + } + catch (Exception ex) + { + sqlSugarClient.AsTenant().RollbackTran(); + _logger.Error($"3#车间从2#接驳位补充小托盘任务生成提交事务异常{ex.Message}"); + } + _logger.Agv($"生成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}"); + } + } + catch (Exception ex) + { + _logger.Error($"CreateSecondSuppleSmallPallet:{ex.Message}"); + } + } + #region 弃用逻辑 ///// diff --git a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs index eb88099..e441e8f 100644 --- a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs +++ b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs @@ -167,8 +167,15 @@ namespace SlnMesnac.WCS.WCS } if (!string.IsNullOrEmpty(rfid)) { - //让其他线程 - Thread.Sleep(7000); + if (Amount < 3) + { + Thread.Sleep(2000); + } + else if (anyTonerPallet) + { + Thread.Sleep(7000); + } + busy2Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态")); if (busy2Flag == 0) { @@ -616,7 +623,7 @@ namespace SlnMesnac.WCS.WCS //判断色粉存放处是否有空托盘 WcsBaseEquip? emptyPalletEquip = sqlSugarClient.Queryable().InnerJoin( (wbe, wpi) => wbe.ContainerCode == wpi.PalletInfoCode && wpi.Amount == 0 && wbe.EquipStatus == 0) - .Where(wbe => wbe.EquipType == 7 && !string.IsNullOrEmpty(wbe.ContainerCode)).First(); + .Where(wbe => wbe.EquipType == 7 && !string.IsNullOrEmpty(wbe.ContainerCode)).OrderByDescending(wbe => wbe.Id).First(); if (emptyPalletEquip != null) //从色粉存放处生成补充空托盘任务 { WcsTask task = new WcsTask(); @@ -776,7 +783,7 @@ namespace SlnMesnac.WCS.WCS //起点库位 2#计量室车间小料箱取送货接驳点 WcsBaseEquip startEquip = sqlSugarClient.Queryable().First(it => it.EquipNo == "2DeliverMetrologyRoomPoint"); //终点库位 2#返程色粉人工拿取点 - WcsBaseEquip? endEquip = sqlSugarClient.Queryable().First(it => it.EquipStatus == 0 && it.EquipType == 7 && string.IsNullOrEmpty(it.ContainerCode)); + WcsBaseEquip? endEquip = sqlSugarClient.Queryable().Where(it => it.EquipStatus == 0 && it.EquipType == 7 && string.IsNullOrEmpty(it.ContainerCode)).OrderByDescending(x => x.Id).First(); if (endEquip == null) { //todo推送报警