diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 30ef414..5626b36 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -52,7 +52,7 @@ namespace Khd.Core.Wcs try { //plc.Open(); - Console.WriteLine(DateTime.Now + ":连接到PLC:" + plcConfig.IP); + Console.WriteLine(DateTime.Now + ":连接PLC:" + plcConfig.IP); } catch { @@ -98,17 +98,17 @@ namespace Khd.Core.Wcs //五层接驳位 var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); - FiveFloorPoint fifthFloorPoint = new(_host, FifthBaseFloorEquip.floorNo.Value); + FiveFloorPoint fifthFloorPoint = new(_host, FifthBaseFloorEquip.floorNo.Value); fifthFloorPoint.StartPoint(); //五层CTU var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); - FiveFloorCTU fiveFloorCTU = new(_host,FiveFloorCTUEquip.floorNo.Value); + FiveFloorCTU fiveFloorCTU = new(_host, FiveFloorCTUEquip.floorNo.Value); fiveFloorCTU.StartPoint(); //五层AGV var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); - FiveFloorAGV fifthFloorAGV = new(_host, FifthFloorAgvEquip.floorNo.Value); + FiveFloorAGV fifthFloorAGV = new(_host, FifthFloorAgvEquip.floorNo.Value); fifthFloorAGV.StartPoint(); //背负式Agv diff --git a/src/Khd.Core.Wcs/Program.cs b/src/Khd.Core.Wcs/Program.cs index 236d16e..7949516 100644 --- a/src/Khd.Core.Wcs/Program.cs +++ b/src/Khd.Core.Wcs/Program.cs @@ -14,7 +14,7 @@ internal class Program private static LoggerUtils _logger = new LoggerUtils(); private static void Main(string[] args) { - + Thread.CurrentThread.Name = "Main"; Console.ForegroundColor = ConsoleColor.Yellow; Init(); //初始化加载配置文件 AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; //全局异常捕获 @@ -62,12 +62,14 @@ internal class Program } private static void GlobalExceptionHandler(object sender, UnhandledExceptionEventArgs e) { + //当前线程名称 + Thread.CurrentThread.Name = "Error"; if (e.ExceptionObject is Exception exception) { Console.WriteLine("全局异常捕获:"); Console.WriteLine(exception.Message); Console.WriteLine(exception.StackTrace); - _logger.Info("全局异常捕获:" + exception.Message); + _logger.Info("全局异常捕获:" + exception.Message+"\n"+exception.StackTrace); } else { diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 1df27b8..ea7f4e5 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -19,7 +19,7 @@ namespace Khd.Core.Wcs.Wcs /// public class CreateTaskByRecord { - private readonly LoggerUtils _logger=new LoggerUtils(); + private readonly LoggerUtils _logger = new LoggerUtils(); private readonly IHost _host; public CreateTaskByRecord(IHost host) { @@ -31,6 +31,11 @@ namespace Khd.Core.Wcs.Wcs /// public void StartPoint() { + var createRemoveThread = new Thread(CreateRemoveLogic); + createRemoveThread.IsBackground = true; + createRemoveThread.Name = "CreateRemoveLogic"; + createRemoveThread.Start(); + //背负式Agv返库任务 var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); createBearAgvReturnThread.IsBackground = true; @@ -77,7 +82,7 @@ namespace Khd.Core.Wcs.Wcs createThirdWasterTaskThread.Name = "CreateThirdWasterTaskLogic"; createThirdWasterTaskThread.Start(); //背负式退库 - var BackReturnTaskThread= new Thread(BackReturnTaskLogic); + var BackReturnTaskThread = new Thread(BackReturnTaskLogic); BackReturnTaskThread.IsBackground = true; BackReturnTaskThread.Name = "BackReturnTaskLogic"; BackReturnTaskThread.Start(); @@ -85,6 +90,221 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("出库任务监听启动成功"); } + /// + /// 主动移库 + /// + /// + private void CreateRemoveLogic(object? obj) + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var CanRemoveWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.locationStatus == "7").ToList(); + List locationCodes = CanRemoveWmsBaseLocations.Select(t => t.locationCode).ToList(); + List CanRemoveWmsProductStocks = dbContext.WmsProductStock.Where(t => locationCodes.Contains(t.locationCode)).ToList(); + foreach (var wmsProductStock in CanRemoveWmsProductStocks) + { + BaseEquip? agvEquip = null; + if (wmsProductStock.warehouseId == 531) + { + agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + } + else if (wmsProductStock.warehouseId == 231) + { + agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); + } + if (agvEquip != null) + { + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == agvEquip.objid).Any(); + if (!hasTask) + { + WmsBaseLocation fromLocationCode = CanRemoveWmsBaseLocations.First(t => t.locationCode == wmsProductStock.locationCode); + if (wmsProductStock.warehouseId == 531 || wmsProductStock.warehouseId == 231)//成品移库 + { + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == wmsProductStock.warehouseId) + .ToList();//所有可用库位 + var wmsProductStocks = dbContext.WmsProductStock + .Where(t => t.warehouseId == wmsProductStock.warehouseId) + .ToList();//仓库的库存 + WmsBaseLocation? wmsBaseLocation = null; + if (wmsBaseLocations.Count > 0) + { + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的有托盘 + + List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo + .Where(t => t.saleOrderId == (wmsProductStock.saleOrderId == null ? 0 : wmsProductStock.saleOrderId))//销售订单 + .Where(t => t.materialId == wmsProductStock.productId)//物料Id + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + + var bill = from a in mesBasePalletInfos + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 + from b in wmsBaseLocations//所有库位 + where a.b.layerNum == b.layerNum//层数相同 + && b.locDeep == 2//浅库位 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + //如果是4则找3,如果是1则找2 + && a.b.locColumn == b.locColumn//列数相同 + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + if (wmsBaseLocation != null)//如果找到库位,生成入库任务 + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + currPointId = fromLocationCode.locationId, + currPointNo = fromLocationCode.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.locationCode, + taskStatus = 0, + useFlag = 1, + containerNo = wmsProductStock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now, + isEmpty = "0", + taskType = agvEquip.objid == 28 ? 66 : 55, + qty = 1, + }; + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + } + else + { + //报警 + } + } + } + } + } + } + + List wmsRawStocks = dbContext.WmsRawStock.Where(t => locationCodes.Contains(t.locationCode)).ToList(); + foreach (var wmsRawStock in wmsRawStocks) + { + + WmsBaseLocation fromLocationCode = CanRemoveWmsBaseLocations.First(t => t.locationCode == wmsRawStock.locationCode); + if (wmsRawStock.warehouseId == 511 || wmsRawStock.warehouseId == 311) + { + BaseEquip? agvEquip = null; + if (wmsRawStock.warehouseId == 511) + { + agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + } + else if (wmsRawStock.warehouseId == 311) + { + agvEquip = StaticData.BaseEquip.First(t => t.objid == 9); + } + if (agvEquip != null) + { + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == agvEquip.objid).Any(); + if (!hasTask) + { + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == wmsRawStock.warehouseId) + .ToList();//所有可用库位 + var wmsProductStocks = dbContext.WmsRawStock + .Where(t => t.warehouseId == wmsRawStock.warehouseId) + .ToList();//仓库的库存 + WmsBaseLocation? wmsBaseLocation = null; + if (wmsBaseLocations.Count > 0) + { + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的有托盘 + + List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo + .Where(t => t.saleOrderId == (wmsRawStock.saleOrderId == null ? 0 : wmsRawStock.saleOrderId))//销售订单 + .Where(t => t.materialId == wmsRawStock.materialId)//物料Id + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + + var bill = from a in mesBasePalletInfos + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 + from b in wmsBaseLocations//所有库位 + where a.b.layerNum == b.layerNum//层数相同 + && b.locDeep == 2//浅库位 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + //如果是4则找3,如果是1则找2 + && a.b.locColumn == b.locColumn//列数相同 + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + if (wmsBaseLocation != null)//如果找到库位,生成入库任务 + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + currPointId = fromLocationCode.locationId, + currPointNo = fromLocationCode.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.locationCode, + taskStatus = 0, + useFlag = 1, + containerNo = wmsRawStock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now, + isEmpty = "0", + taskType = agvEquip.objid == 28 ? 66 : 67, + qty = 1, + }; + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + } + else + { + //报警 + } + } + } + } + } + } + } + catch + { + + } + } + } + /// /// 五楼柜体拆分返库任务 /// @@ -365,7 +585,7 @@ namespace Khd.Core.Wcs.Wcs } } } - catch(Exception ex) + catch (Exception ex) { _logger.Error(ex.Message + "\n" + ex.StackTrace); } @@ -506,7 +726,7 @@ namespace Khd.Core.Wcs.Wcs if (wmsRawOutstock != null) { var wmsRawStocks = dbContext.WmsRawStock - .Where(t => t.saleOrderId == wmsRawOutstock.saleOrderId) + .Where(t => t.saleOrderId == (wmsRawOutstock.saleOrderId == null ? 0 : wmsRawOutstock.saleOrderId)) .Where(t => t.warehouseId == 311) .ToList(); var AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 311).ToList(); @@ -900,7 +1120,7 @@ namespace Khd.Core.Wcs.Wcs { objid = StaticData.SnowId.NextId(), orderId = item.productOutstockId, - taskType = 38, + taskType = 66, containerNo = wmsProductStock.palletInfoCode, createBy = "WCS", createTime = DateTime.Now.AddSeconds(-10), @@ -1042,7 +1262,7 @@ namespace Khd.Core.Wcs.Wcs { var wmsproStocks = proStock - .Where(t => t.productId == item.productId && t.saleOrderId == item.saleOrderId && t.warehouseId == item.warehouseId) + .Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId) .Select(t => t.palletInfoCode) .ToList(); List AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == item.warehouseId).ToList(); @@ -1453,7 +1673,7 @@ namespace Khd.Core.Wcs.Wcs break; } var wmsRawStocks = rawStock - .Where(t => t.materialId == order.MaterialId && t.saleOrderId == order.SaleOrderId && t.warehouseId == 512) + .Where(t => t.materialId == order.MaterialId && t.saleOrderId == (order.SaleOrderId == null ? 0 : order.SaleOrderId) && t.warehouseId == 512) .Select(t => t.palletInfoCode) .ToList(); var AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512).ToList(); @@ -1644,7 +1864,7 @@ namespace Khd.Core.Wcs.Wcs } if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区,背板安装 { - bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 1 && t.taskStatus <= 5).Any(); + bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == endEquip.objid || t.endPointId == endEquip.objid).Any(); if (!hasTask) { if (endEquip.emptyCount == 0) @@ -1653,7 +1873,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) .WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0") .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1") - .Where(t => t.saleOrderId == item.saleOrderId) + .Where(t => t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId)) .Where(t => t.totalAmount > t.frozenAmount) .Select(t => t.palletInfoCode) .ToList(); @@ -1664,6 +1884,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.locationScrapType == "1") .Where(t => t.locationStatus == "1") .Where(t => t.warehouseId == item.warehouseId) + .OrderByDescending(t => t.locDeep) .Where(t => wmsRawStocks.Contains(t.containerCode)) .ToList(); @@ -1674,7 +1895,6 @@ namespace Khd.Core.Wcs.Wcs where a.locationCode == b.locationCode select new { a, b }; - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); foreach (var b in bill) @@ -1686,13 +1906,11 @@ namespace Khd.Core.Wcs.Wcs int qty = 0; if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 { - item.realOutstockAmount += stock.totalAmount - stock.frozenAmount; qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); stock.updateDate = DateTime.Now; } else { - item.realOutstockAmount += needNumber; qty = Convert.ToInt32(needNumber); stock.updateDate = DateTime.Now; } @@ -1704,11 +1922,11 @@ namespace Khd.Core.Wcs.Wcs int? row = 0; if (location.locRow % 2 == 1)//五楼原材料与其他的深浅库位相反 { - row = location.locRow - 1; + row = location.locRow + 1; } else { - row = location.locRow + 1; + row = location.locRow - 1;//5 } var lowLocationBill = bill.Where(t => t.a.locRow == row).Where(t => t.a.locColumn == location.locColumn).Where(t => t.a.warehouseId == location.warehouseId).FirstOrDefault(); if (lowLocationBill != null) @@ -1718,9 +1936,10 @@ namespace Khd.Core.Wcs.Wcs } else { - WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) - .Where(t => t.locColumn == location.locColumn) - .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations + .Where(t => t.locRow == row) + .Where(t => t.locColumn == location.locColumn) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) { WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); @@ -1739,7 +1958,7 @@ namespace Khd.Core.Wcs.Wcs { objid = StaticData.SnowId.NextId(), orderId = item.rawOutstockId, - taskType = 38, + taskType = 66, containerNo = wmsRawStock.palletInfoCode, createBy = "WCS", createTime = DateTime.Now.AddSeconds(-10), diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index c425e8c..a4b9ca8 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -174,23 +174,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } } @@ -247,23 +236,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } Thread.Sleep(1000); } @@ -479,16 +457,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } Thread.Sleep(1000); } @@ -723,23 +697,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } Thread.Sleep(5000); } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index cbc68cd..4b98623 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -515,6 +515,7 @@ namespace Khd.Core.Wcs.Wcs WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.Where(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1").FirstOrDefault(); if (wmsRawOutstockDetail != null) { + wmsRawOutstock.realOutstockAmount += 1; wmsRawOutstockDetail.executeStatus = "2"; wmsRawOutstock.executeStatus = "2"; WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); @@ -595,6 +596,7 @@ namespace Khd.Core.Wcs.Wcs WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault(); if (wmsRawOutStock != null && wmsRawOutstockDetail != null) { + wmsRawOutStock.realOutstockAmount += 1; wmsRawOutstockDetail.executeStatus = "2"; wmsRawOutStock.executeStatus = "2"; dbContext.Update(wmsRawOutStock); @@ -756,23 +758,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index e33db67..e09d1eb 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -78,15 +78,7 @@ namespace Khd.Core.Wcs.Wcs } catch { - try - { - StaticData.PlcDic[1] = new Plc.S7.Plc(StaticData.PlcDic[1].CPU, StaticData.PlcDic[1].IP, StaticData.PlcDic[1].Port, StaticData.PlcDic[1].Rack, StaticData.PlcDic[1].Slot); - StaticData.PlcDic[1].Open(); - } - catch - { - - } + } Thread.Sleep(1000); } @@ -271,23 +263,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } Thread.Sleep(1000); } @@ -658,23 +639,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index f1c5220..20af058 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -190,23 +190,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index b00be36..267364f 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -119,23 +119,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 0b7bcda..4a73fb3 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -442,7 +442,7 @@ namespace Khd.Core.Wcs.Wcs { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); - + var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -484,9 +484,9 @@ namespace Khd.Core.Wcs.Wcs else { { - _logger.Info("二楼AGV线程完成任务" + item.objid); if (item.taskStatus == 3) { + _logger.Info("二楼AGV线程继续任务" + item.objid); if (item.currPointId == lineEquip.objid) { var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress); @@ -645,6 +645,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } // } //} @@ -678,7 +679,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); - + _logger.Info("二楼AGV线程完成任务" + item.objid); } } } @@ -691,6 +692,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 53)//提升机到废料口 { @@ -705,6 +707,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 51)//输送线到小包入口 { @@ -714,6 +717,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 54)//周转位到废料口 { @@ -730,6 +734,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 55)//移库 { @@ -758,6 +763,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); transaction.Commit(); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } catch (Exception ex) { @@ -777,6 +783,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(wasteEquip); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 57)//周转位-提升机 { @@ -790,6 +797,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(emptyEquip); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } else if (item.taskType == 59)//周转区-小包入口 { @@ -801,6 +809,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.SaveChanges(); + _logger.Info("二楼AGV线程完成任务" + item.objid); } } } @@ -812,23 +821,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 1ea8831..a4fcaf6 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -316,23 +316,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 8a96efb..3c5cb73 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -306,23 +306,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index 85ca5b2..6326dc4 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -36,7 +36,7 @@ namespace Khd.Core.Wcs.Wcs var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic) { - Name="PlcHeartBeat30Thread", + Name = "PlcHeartBeat30Thread", IsBackground = true }; PlcHeartBeat30Thread.Start();//脉冲 @@ -48,9 +48,40 @@ namespace Khd.Core.Wcs.Wcs }; PlcHeartBeat31Thread.Start();//脉冲 + var PlcHearBeat220Thread = new Thread(PlcHearBeat220Logic) { + Name = "PlcHeartBeat220Thread", + IsBackground = true + }; + PlcHearBeat220Thread.Start(); + Console.WriteLine($"{DateTime.Now}: SystemTimer started"); } + private void PlcHearBeat220Logic(object? obj) + { + BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray"); + while (true) + { + try + { + StaticData.PlcDic[0].Read(HeartBeat30.plcpointAddress); + } + catch + { + try + { + StaticData.PlcDic[2] = new Plc.S7.Plc(StaticData.PlcDic[2].CPU, StaticData.PlcDic[2].IP, StaticData.PlcDic[2].Port, StaticData.PlcDic[2].Rack, StaticData.PlcDic[2].Slot); + StaticData.PlcDic[2].Open(); + } + catch (Exception ex2) + { + _logger.Error("Plc短线重连失败" + ex2.Message); + } + } + Thread.Sleep(1000); + } + } + /// /// 定时发送心跳包 /// @@ -66,25 +97,16 @@ namespace Khd.Core.Wcs.Wcs heartBeatCount = !heartBeatCount; StaticData.PlcDic[0].WriteToPoint(HeartBeat30.plcpointAddress, heartBeatCount, HeartBeat30.plcpointLength?.ToString()); } - catch (Exception ex) + catch { - if (ex is PlcException) + try { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - //报警 - } + StaticData.PlcDic[0] = new Plc.S7.Plc(StaticData.PlcDic[0].CPU, StaticData.PlcDic[0].IP, StaticData.PlcDic[0].Port, StaticData.PlcDic[0].Rack, StaticData.PlcDic[0].Slot); + StaticData.PlcDic[0].Open(); + } + catch (Exception ex2) + { + _logger.Error("Plc短线重连失败" + ex2.Message); } } Thread.Sleep(1000); @@ -98,7 +120,7 @@ namespace Khd.Core.Wcs.Wcs private void PlcHeartBeat31Logic(object? obj) { BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTUHeart"); - bool heartBeatCount =false; + bool heartBeatCount = false; while (true) { try @@ -112,20 +134,18 @@ namespace Khd.Core.Wcs.Wcs { try { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } + StaticData.PlcDic[1] = new Plc.S7.Plc(StaticData.PlcDic[1].CPU, StaticData.PlcDic[1].IP, StaticData.PlcDic[1].Port, StaticData.PlcDic[1].Rack, StaticData.PlcDic[1].Slot); + StaticData.PlcDic[1].Open(); } - catch + catch (Exception ex2) { - + _logger.Error("Plc短线重连失败" + ex2.Message); } } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); + } } Thread.Sleep(1000); } @@ -187,24 +207,14 @@ namespace Khd.Core.Wcs.Wcs } catch (Exception ex) { - try - { - if (ex is PlcException) - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - } - catch + if (ex is PlcException) { } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); + } } Thread.Sleep(1000); } diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 98ea929..fda9285 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -98,23 +98,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } Thread.Sleep(3000); } @@ -766,23 +755,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 0a11861..a909598 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -164,23 +164,12 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - try - { - foreach (var item in StaticData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); - StaticData.PlcDic[item.Key].Open(); - } - } - } - catch - { - - } + + } + else + { + _logger.Error(ex.Message + "\n" + ex.StackTrace); } - _logger.Error(ex.Message + "\n" + ex.StackTrace); } finally { diff --git a/src/Khd.Core.Wpf/App.xaml.cs b/src/Khd.Core.Wpf/App.xaml.cs index 18d2487..3844b9c 100644 --- a/src/Khd.Core.Wpf/App.xaml.cs +++ b/src/Khd.Core.Wpf/App.xaml.cs @@ -22,19 +22,19 @@ namespace Khd.Core.Wpf TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;//Task异常 IConfigurationRoot configuration = new ConfigurationBuilder() - .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) - .AddJsonFile("appsettings.json") - .Build(); + .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) + .AddJsonFile("appsettings.json") + .Build(); SystemData.PlcConfigs = configuration.GetSection("PlcConfigs").Get>(); ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"].ToString(); - //配置文件 加载 Thrift 推送端口 - ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString(); - ThriftConfig.JiesShouDuanKou = int.Parse(configuration["ThriftConfig:JiesShouDuanKou"]); - ThriftConfig.TuiSongDuankou = int.Parse(configuration["ThriftConfig:TuiSongDuankou"]); - ThriftConfig.UpSite = configuration["ThriftConfig:upsite"].ToString(); - FlagConfig.UpFlagNum = int.Parse(configuration["FlagConfig:UpFlagNum"]); + ////配置文件 加载 Thrift 推送端口 + //ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString(); + //ThriftConfig.JiesShouDuanKou = int.Parse(configuration["ThriftConfig:JiesShouDuanKou"]); + //ThriftConfig.TuiSongDuankou = int.Parse(configuration["ThriftConfig:TuiSongDuankou"]); + //ThriftConfig.UpSite = configuration["ThriftConfig:upsite"].ToString(); + //FlagConfig.UpFlagNum = int.Parse(configuration["FlagConfig:UpFlagNum"]); } void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index fb35e37..f396d9a 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -1746,7 +1746,7 @@ - + diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 0041c27..8483513 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -189,7 +189,7 @@ namespace Khd.Core.Wpf.Form } catch (Exception ex) { - MessageBox.Show("条码枪连接失败" + ex.Message); + MessageBox.Show("条码枪连接失败"); } @@ -2894,10 +2894,10 @@ namespace Khd.Core.Wpf.Form inventoryTaskForm.ShowDialog(); } - + //选择出库 private void SelectOutBtn_Click(object sender, RoutedEventArgs e) { - SelectOutRawForm selectOutRawForm=new SelectOutRawForm(this._host); + SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host); selectOutRawForm.ShowDialog(); } }