From 938c87e6a6715b56312014d36f2d47cbc013436f Mon Sep 17 00:00:00 2001 From: liuwf Date: Sun, 25 May 2025 17:31:30 +0800 Subject: [PATCH] =?UTF-8?q?add-=E6=B7=BB=E5=8A=A0RFID=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Business/base/BaseBusiness.cs | 1 + SlnMesnac.Model/domain/WcsTask.cs | 6 +- SlnMesnac.Rfid/Factory/RflyFactory.cs | 1 - SlnMesnac.WCS/MainCentralControl.cs | 2 +- SlnMesnac.WCS/WCS/BearAgv.cs | 192 +++++++++++++----------- SlnMesnac.WCS/WCS/CreateTaskByRecord.cs | 34 ++--- 6 files changed, 122 insertions(+), 114 deletions(-) diff --git a/SlnMesnac.Business/base/BaseBusiness.cs b/SlnMesnac.Business/base/BaseBusiness.cs index 7efc3b1..16a648e 100644 --- a/SlnMesnac.Business/base/BaseBusiness.cs +++ b/SlnMesnac.Business/base/BaseBusiness.cs @@ -145,6 +145,7 @@ namespace SlnMesnac.Business.@base List tagInfoList = await rfidEquip.GetRFIDAsync(); if (tagInfoList == null || tagInfoList.Count == 0) return ""; + tagInfoList = tagInfoList.Where(X => X.EPCstring.Length == 12).ToList(); epcStr = tagInfoList.OrderByDescending(x => x.Count).First().EPCstring; epcStr = epcStr.Replace(" ", "").Replace("\r\n", "").Replace("\0", "").Replace("\n", ""); return epcStr; diff --git a/SlnMesnac.Model/domain/WcsTask.cs b/SlnMesnac.Model/domain/WcsTask.cs index df94781..21b929c 100644 --- a/SlnMesnac.Model/domain/WcsTask.cs +++ b/SlnMesnac.Model/domain/WcsTask.cs @@ -29,19 +29,19 @@ namespace SlnMesnac.Model.domain [SugarColumn(ColumnName = "task_status", ColumnDescription = "任务状态,字典表")] public int TaskStatus { get; set; } - [SugarColumn(ColumnName = "start_point_no", ColumnDescription = "起始点编号")] + [SugarColumn(ColumnName = "start_point_no", ColumnDescription = "未使用")] public string StartPointNo { get; set; } [SugarColumn(ColumnName = "start_point_id", ColumnDescription = "起始点id")] public int StartPointId { get; set; } - [SugarColumn(ColumnName = "curr_point_no", IsNullable = false, ColumnDescription = "当前点编号")] + [SugarColumn(ColumnName = "curr_point_no", IsNullable = false, ColumnDescription = "任务起点")] public string CurrPointNo { get; set; } [SugarColumn(ColumnName = "curr_point_id", IsNullable = false, ColumnDescription = "当前点id")] public string CurrPointId { get; set; } - [SugarColumn(ColumnName = "next_point_no", IsNullable = false, ColumnDescription = "下一点编号")] + [SugarColumn(ColumnName = "next_point_no", IsNullable = false, ColumnDescription = "执行的agv编号")] public string NextPointNo { get; set; } [SugarColumn(ColumnName = "next_point_id", IsNullable = false, ColumnDescription = "下一点id")] diff --git a/SlnMesnac.Rfid/Factory/RflyFactory.cs b/SlnMesnac.Rfid/Factory/RflyFactory.cs index 30642ec..08a4c29 100644 --- a/SlnMesnac.Rfid/Factory/RflyFactory.cs +++ b/SlnMesnac.Rfid/Factory/RflyFactory.cs @@ -161,7 +161,6 @@ namespace SlnMesnac.Rfid.Factory } catch (Exception e) { - Console.WriteLine($"设备{ip}:{port}连接异常:{e.Message}"); return false; } } diff --git a/SlnMesnac.WCS/MainCentralControl.cs b/SlnMesnac.WCS/MainCentralControl.cs index 4ab896b..19b3699 100644 --- a/SlnMesnac.WCS/MainCentralControl.cs +++ b/SlnMesnac.WCS/MainCentralControl.cs @@ -159,7 +159,7 @@ namespace SlnMesnac.WCS rfidDb.IsOnline = status ? 1 : 0; } } - SqlSugarClient.Updateable(rfidDbList).ExecuteCommand(); + SqlSugarClient.Updateable(rfidDbList).UpdateColumns(it => new { it.IsOnline }).ExecuteCommand(); #endregion RFID状态 //色粉库位有未取走色粉声光报警 diff --git a/SlnMesnac.WCS/WCS/BearAgv.cs b/SlnMesnac.WCS/WCS/BearAgv.cs index 13bc256..65dd6cf 100644 --- a/SlnMesnac.WCS/WCS/BearAgv.cs +++ b/SlnMesnac.WCS/WCS/BearAgv.cs @@ -82,7 +82,7 @@ namespace SlnMesnac.WCS.WCS break; //3#车间从下料点到1-16机台送料任务 case StaticTaskType.TransferMaterialBoxTask: - await TransferMaterialBoxTaskHandlerAsync(item); + TransferMaterialBoxTaskHandler(item); break; //1-12号机台之间空料箱移库任务 case StaticTaskType.MoveLocationTask: @@ -90,7 +90,10 @@ namespace SlnMesnac.WCS.WCS break; //3#接驳位到2#计量室接驳位的送料任务 case StaticTaskType.TransferMaterialMetrologyRoomBoxTask: - await TransferMaterialMetrologyRoomBoxTaskHandlerAsync(item); + lock (string.Empty) + { + TransferMaterialMetrologyRoomBoxTaskHandler(item); + } break; //3#车间从2#接驳位补充小托盘任务 case StaticTaskType.SupplySmallPalletTask: @@ -176,25 +179,8 @@ namespace SlnMesnac.WCS.WCS //通知plc已经放下了料箱 workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#四宫格空托盘就绪信号"), true); - //解锁终点库位 - WcsBaseEquip? baseEquip = sqlSugarClient.Queryable().First(t => t.AgvPositionCode == task.EndPointNo); - if (baseEquip != null) - { - sqlSugarClient.AsTenant().BeginTran(); - try - { - baseEquip.EquipStatus = 0; - sqlSugarClient.Deleteable(task).ExecuteCommand(); - sqlSugarClient.Updateable(baseEquip).ExecuteCommand(); - sqlSugarClient.AsTenant().CommitTran(); - _logger.Agv($"Agv:{task.NextPointNo};完成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}"); - } - catch (Exception ex) - { - sqlSugarClient.AsTenant().RollbackTran(); - _logger.Error("SupplyEmptyPalletTaskHandlerAsync提交事务异常:" + ex.Message); - } - } + sqlSugarClient.Deleteable(task).ExecuteCommand(); + _logger.Agv($"Agv:{task.NextPointNo};完成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}"); } } catch (Exception ex) @@ -208,11 +194,11 @@ namespace SlnMesnac.WCS.WCS /// /// /// - private async Task TransferMaterialBoxTaskHandlerAsync(WcsTask task) + private void TransferMaterialBoxTaskHandler(WcsTask task) { try { - WcsTaskLog wcsTaskLog = await sqlSugarClient.Queryable().FirstAsync(t => t.Id == task.Id); + WcsTaskLog wcsTaskLog = sqlSugarClient.Queryable().First(t => t.Id == task.Id); if (task.TaskStatus == 0) { TaskStatus0Handle(task); @@ -251,13 +237,19 @@ namespace SlnMesnac.WCS.WCS WmsBaseLocation? endLocation = sqlSugarClient.Queryable().First(t => t.AgvPositionCode == task.EndPointNo); if (endLocation != null) { - //入库校验RFID --todo解开屏蔽 - //string readEpc = await ReadEpcStrByRfidKeyAsync(endLocation.EquipKey); - //test使用 - string? readEpc = task.PalletInfoCode; + //入库校验RFID + string readEpc = ReadEpcStrByRfidKey(endLocation.EquipKey); + _logger.Agv($"读到RFID:{readEpc}"); + + //todo:12号机台装上RFID以后删除-------------------------------- + if (endLocation.MachineId == 12) + { + readEpc = task.PalletInfoCode; + } + //---------------------------------- if (string.IsNullOrEmpty(readEpc) || readEpc != task.PalletInfoCode) { - workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#机台校验失败提示"), true); + // workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#机台校验失败提示"), true); _logger.Error("入库校验RFID失败,当前库位RFID:" + readEpc + ",任务RFID:" + task.PalletInfoCode); return; } @@ -437,11 +429,11 @@ namespace SlnMesnac.WCS.WCS /// 3#接驳位到2#计量室接驳位的送料任务 /// /// - private async Task TransferMaterialMetrologyRoomBoxTaskHandlerAsync(WcsTask task) + private void TransferMaterialMetrologyRoomBoxTaskHandler(WcsTask task) { try { - WcsTaskLog wcsTaskLog = await sqlSugarClient.Queryable().FirstAsync(t => t.Id == task.Id); + WcsTaskLog wcsTaskLog = sqlSugarClient.Queryable().First(t => t.Id == task.Id); if (task.TaskStatus == 0) { TaskStatus0Handle(task); @@ -461,15 +453,14 @@ namespace SlnMesnac.WCS.WCS } else if (outFlag == 1) { //已经出来就绪,wcs通知agv取走托盘 - bool result = await ContinueTaskHandle(task); + bool result = ContinueTaskHandle(task).Result; if (result) { //从下料点直接取,清空RFID及机台号,条码等信息--ok - //workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 0); workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#接驳位到位信号"), 0); workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#出接驳位信号"), false); workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#小料箱agv已取走反馈"), true); - _logger.Agv($"agv取走料{task.PalletInfoCode},3#忙碌状态清0"); + _logger.Agv($"agv取走料{task.PalletInfoCode},3#已取走反馈"); } } } @@ -480,17 +471,9 @@ namespace SlnMesnac.WCS.WCS _logger.Plc(DateTime.Now + "3#PLC未连接,请检查网络!"); return; } - - //解锁起始库位忙碌状态 - WcsBaseEquip? startEquip = sqlSugarClient.Queryable().First(it => it.AgvPositionCode == task.CurrPointNo); sqlSugarClient.AsTenant().BeginTran(); try { - if (startEquip != null) - { - startEquip.EquipStatus = 0; - sqlSugarClient.Updateable(startEquip).ExecuteCommand(); - } task.TaskStatus = 5; task.UpdatedTime = DateTime.Now; if (wcsTaskLog != null) @@ -522,15 +505,25 @@ namespace SlnMesnac.WCS.WCS } if (busyFlag == 0) { - Thread.Sleep(2500); + int amount = sqlSugarClient.Queryable().Where(x => x.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask).Count(); + if (amount < 2) + { + Thread.Sleep(3500); + } + else //优先级最高,释放掉一个agv + { + Thread.Sleep(300); + } + busyFlag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态")); if (busyFlag == 0) { - bool result = await ContinueTaskHandle(task); - if (result) + //抢占线体状态,agv进入接驳位 + workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1); + bool result = ContinueTaskHandle(task).Result; + if (!result) { - //抢占线体状态,agv进入接驳位 - workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1); + workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 0); } } } @@ -552,7 +545,7 @@ namespace SlnMesnac.WCS.WCS } else if (!outFlag) { //托盘已经离开,wcs通知agv离开 - bool result = await ContinueTaskHandle(task); + bool result = ContinueTaskHandle(task).Result; if (result) //已经离开 { workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#放完成反馈"), false); @@ -624,19 +617,9 @@ namespace SlnMesnac.WCS.WCS _logger.Plc(DateTime.Now + "2#PLC未连接,请检查网络!"); return; } - //从下料点直接取,清空RFID及机台号,条码等信息--ok - - //workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 0); - //解锁起始库位忙碌状态 - WcsBaseEquip? startEquip = sqlSugarClient.Queryable().First(it => it.AgvPositionCode == task.CurrPointNo); sqlSugarClient.AsTenant().BeginTran(); try { - if (startEquip != null) - { - startEquip.EquipStatus = 0; - sqlSugarClient.Updateable(startEquip).ExecuteCommand(); - } task.TaskStatus = 5; task.UpdatedTime = DateTime.Now; if (wcsTaskLog != null) @@ -672,11 +655,12 @@ namespace SlnMesnac.WCS.WCS busyFlag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态")); if (busyFlag == 0) { + //抢占线体状态,agv进入接驳位 + workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 1); bool result = await ContinueTaskHandle(task); - if (result) + if (!result) { - //抢占线体状态,agv进入接驳位 - workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 1); + workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 0); } } } @@ -700,7 +684,6 @@ namespace SlnMesnac.WCS.WCS if (result) { //从下料点直接取,清空RFID及机台号,条码等信息--ok - workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 0); workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#接驳位到位信号"), 0); workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#出接驳位信号"), false); workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#小料箱agv已取走反馈"), true); @@ -784,19 +767,23 @@ namespace SlnMesnac.WCS.WCS busyFlag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态")); if (busyFlag == 0) { - //解锁起始库位 - WcsBaseEquip? baseEquip = sqlSugarClient.Queryable().First(t => t.AgvPositionCode == task.CurrPointNo); - if (baseEquip != null) - { - baseEquip.EquipStatus = 0; - baseEquip.ContainerCode = null; - sqlSugarClient.Updateable(baseEquip).ExecuteCommand(); - } - + //抢占线体状态,agv进入接驳位 + workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 1); bool result = await ContinueTaskHandle(task); + if (result) { - //抢占线体状态,agv进入接驳位 - workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 1); + //解锁起始色粉库位 + WcsBaseEquip? baseEquip = sqlSugarClient.Queryable().First(t => t.AgvPositionCode == task.CurrPointNo); + if (baseEquip != null) + { + baseEquip.EquipStatus = 0; + baseEquip.ContainerCode = null; + sqlSugarClient.Updateable(baseEquip).ExecuteCommand(); + } + } + else //下发任务继续失败 + { + workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 0); } } } @@ -1207,30 +1194,61 @@ namespace SlnMesnac.WCS.WCS taskCode = task.TaskCode }; string message = JsonConvert.SerializeObject(agvTask); - string result = HttpHelper.SendPostMessage(baseEquip.ServerIp, baseEquip.ServerPort, "rcms/services/rest/hikRpcService/continueTask", message); - ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); - if (reponseMessage != null && reponseMessage.message == "成功") + try { - sqlSugarClient.AsTenant().BeginTran(); - _logger.Agv($"下发agv任务继续,任务名称:{task.TaskName},任务id:{task.Id},任务状态:{task.TaskStatus}"); - task.TaskStatus += 1; - task.UpdatedTime = DateTime.Now; - sqlSugarClient.Updateable(task).ExecuteCommand(); - if (wcsTaskLog != null) + string result = HttpHelper.SendPostMessage(baseEquip.ServerIp, baseEquip.ServerPort, "rcms/services/rest/hikRpcService/continueTask", message); + ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") { - wcsTaskLog.UpdatedTime = DateTime.Now; - wcsTaskLog.TaskStatus = task.TaskStatus; - sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand(); + sqlSugarClient.AsTenant().BeginTran(); + _logger.Agv($"下发agv任务继续,任务名称:{task.TaskName},任务id:{task.Id},任务状态:{task.TaskStatus}"); + task.TaskStatus += 1; + task.UpdatedTime = DateTime.Now; + sqlSugarClient.Updateable(task).ExecuteCommand(); + if (wcsTaskLog != null) + { + wcsTaskLog.UpdatedTime = DateTime.Now; + wcsTaskLog.TaskStatus = task.TaskStatus; + sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand(); + } + sqlSugarClient.AsTenant().CommitTran(); + continueResult = true; + } + } + catch (Exception ex) + { + _logger.Error($"第一次下发agv任务继续异常,任务名称:{task.TaskName},任务id:{task.Id},异常信息:{ex.StackTrace}"); + _logger.Error("开始尝试第二次下发"); + await Task.Delay(1000 * 2); + string result = HttpHelper.SendPostMessage(baseEquip.ServerIp, baseEquip.ServerPort, "rcms/services/rest/hikRpcService/continueTask", message); + ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + sqlSugarClient.AsTenant().BeginTran(); + _logger.Agv($"下发agv任务继续,任务名称:{task.TaskName},任务id:{task.Id},任务状态:{task.TaskStatus}"); + task.TaskStatus += 1; + task.UpdatedTime = DateTime.Now; + sqlSugarClient.Updateable(task).ExecuteCommand(); + if (wcsTaskLog != null) + { + wcsTaskLog.UpdatedTime = DateTime.Now; + wcsTaskLog.TaskStatus = task.TaskStatus; + sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand(); + } + sqlSugarClient.AsTenant().CommitTran(); + continueResult = true; + } + else + { + _logger.Error($"下发第二次agv任务继续失败,任务名称:{task.TaskName},任务id:{task.Id},异常信息:{ex.StackTrace}"); } - sqlSugarClient.AsTenant().CommitTran(); - continueResult = true; } #endregion 下发AGV信号放料箱 } catch (Exception ex) { - _logger.Error($"下发agv任务继续异常,任务名称:{task.TaskName},任务id:{task.Id},异常信息:{ex.StackTrace}"); + _logger.Error($"下发agv任务第二次继续异常,任务名称:{task.TaskName},任务id:{task.Id},异常信息:{ex.StackTrace}"); } return continueResult; } diff --git a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs index e441e8f..78d874e 100644 --- a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs +++ b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs @@ -114,7 +114,7 @@ namespace SlnMesnac.WCS.WCS int work3EmptyAmount = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#缓存皮带线库存数")); int busy3Flag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态")); - if (work3EmptyAmount < 2 && busy3Flag == 0) + if ((work3EmptyAmount == 1 && busy3Flag == 0) || work3EmptyAmount == 0) { //3#车间从色粉存放点补充小托盘任务 或者 3#车间从2#接驳位补充小托盘任务 CreateSupplySmallPalletToWorkshop3Task(); @@ -128,7 +128,7 @@ namespace SlnMesnac.WCS.WCS } finally { - Thread.Sleep(2000); + Thread.Sleep(1000); } } }); @@ -171,9 +171,9 @@ namespace SlnMesnac.WCS.WCS { Thread.Sleep(2000); } - else if (anyTonerPallet) + else if (anyTonerPallet) //有色粉空转 { - Thread.Sleep(7000); + Thread.Sleep(4500); } busy2Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态")); @@ -205,7 +205,7 @@ namespace SlnMesnac.WCS.WCS } else if (wmsPalletInfo != null && wmsPalletInfo.Amount > 0 && wmsPalletInfo.TonerFlag == 0) //携带满料 { - //2空箱转运 + //2转运 _logger.Info($"2#移栽===={rfid}携带满料,空转一圈"); workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1); workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2); @@ -351,7 +351,7 @@ namespace SlnMesnac.WCS.WCS } finally { - Thread.Sleep(1000 * 2); + Thread.Sleep(1000 * 1); } } } @@ -424,8 +424,6 @@ namespace SlnMesnac.WCS.WCS task.CurrPointNo = startLocation.AgvPositionCode; startLocation.LocationStatus = 1; sqlSugarClient.Updateable(startLocation).ExecuteCommand(); - endEquip.EquipStatus = 1; - sqlSugarClient.Updateable(endEquip).ExecuteCommand(); // task.NextPointNo = agvEquip.AgvPositionCode; task.EndPointNo = endEquip.AgvPositionCode; task.TaskStatus = 0; @@ -456,7 +454,7 @@ namespace SlnMesnac.WCS.WCS bool hasMachineCode = StaticData.WmsMachineInfos.Any(x => x.MachineCode == machineCode); if (!string.IsNullOrEmpty(rfid) && hasMachineCode) { - //判断agv是否有来这里的任务 + //判断该料箱是否已经有送料任务 bool hasTask = sqlSugarClient.Queryable().Any(it => it.TaskType == StaticTaskType.TransferMaterialBoxTask && it.PalletInfoCode == rfid); if (hasTask) { @@ -500,8 +498,6 @@ namespace SlnMesnac.WCS.WCS int id = sqlSugarClient.Insertable(task).ExecuteReturnIdentity(); WcsTaskLog wcsTaskLog = CoreMapper.Map(task); wcsTaskLog.Id = id; - startEquip.EquipStatus = 1; - sqlSugarClient.Updateable(startEquip).ExecuteCommand(); targetLocation.LocationStatus = 1; sqlSugarClient.Updateable(targetLocation).ExecuteCommand(); sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); @@ -574,11 +570,6 @@ namespace SlnMesnac.WCS.WCS WcsTaskLog wcsTaskLog = CoreMapper.Map(task); wcsTaskLog.Id = id; - startEquip.EquipStatus = 1; - // endEquip.EquipStatus = 1; 终点无需锁,其他地方还可以用 - //sqlSugarClient.Updateable(endEquip).ExecuteCommand(); - sqlSugarClient.Updateable(startEquip).ExecuteCommand(); - sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); #region 修改托盘信息 @@ -623,7 +614,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)).OrderByDescending(wbe => wbe.Id).First(); + .Where(wbe => wbe.EquipType == 7 && !string.IsNullOrEmpty(wbe.ContainerCode)).OrderBy(wbe => wbe.Id).First(); if (emptyPalletEquip != null) //从色粉存放处生成补充空托盘任务 { WcsTask task = new WcsTask(); @@ -643,7 +634,7 @@ namespace SlnMesnac.WCS.WCS WcsTaskLog wcsTaskLog = CoreMapper.Map(task); wcsTaskLog.Id = id; sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); - //锁住起止库位 + //锁住开始色粉库位 emptyPalletEquip.EquipStatus = 1; sqlSugarClient.Updateable(emptyPalletEquip).ExecuteCommand(); sqlSugarClient.AsTenant().CommitTran(); @@ -690,15 +681,14 @@ namespace SlnMesnac.WCS.WCS WcsTaskLog wcsTaskLog = CoreMapper.Map(task); wcsTaskLog.Id = id; sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); - //锁住起止库位 - //emptyPalletEquip.EquipStatus = 1; - //sqlSugarClient.Updateable(emptyPalletEquip).ExecuteCommand(); + sqlSugarClient.AsTenant().CommitTran(); } catch (Exception ex) { sqlSugarClient.AsTenant().RollbackTran(); _logger.Error($"3#车间从2#接驳位补充小托盘任务生成提交事务异常{ex.Message}"); + workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 0); } _logger.Agv($"生成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}"); return; @@ -783,7 +773,7 @@ namespace SlnMesnac.WCS.WCS //起点库位 2#计量室车间小料箱取送货接驳点 WcsBaseEquip startEquip = sqlSugarClient.Queryable().First(it => it.EquipNo == "2DeliverMetrologyRoomPoint"); //终点库位 2#返程色粉人工拿取点 - WcsBaseEquip? endEquip = sqlSugarClient.Queryable().Where(it => it.EquipStatus == 0 && it.EquipType == 7 && string.IsNullOrEmpty(it.ContainerCode)).OrderByDescending(x => x.Id).First(); + WcsBaseEquip? endEquip = sqlSugarClient.Queryable().Where(it => it.EquipStatus == 0 && it.EquipType == 7 && string.IsNullOrEmpty(it.ContainerCode)).OrderBy(x => x.Id).First(); if (endEquip == null) { //todo推送报警