diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs index 2ca2be2..80cd444 100644 --- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs +++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs @@ -19,7 +19,7 @@ namespace Khd.Core.Api.Controllers } /// - /// 接收agv接收任务通知接口 + /// 接收agv接收任务通知接口,三楼和五楼Agv接口 /// /// /// @@ -33,7 +33,7 @@ namespace Khd.Core.Api.Controllers } /// - /// 接收agv接收任务通知接口 + /// 接收agv接收任务通知接口,二楼Agv接口 /// /// /// diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs index 933d412..d531f1d 100644 --- a/src/Khd.Core.Domain/Models/WcsTask.cs +++ b/src/Khd.Core.Domain/Models/WcsTask.cs @@ -29,31 +29,31 @@ namespace Khd.Core.Domain.Models /// wcs_warehouse_order 主键id /// [Column("master_id")] - public long? masterId { get; set; } + public long? masterId { get; set; }//暂时不用 /// /// wms出入库记录表id /// [Column("order_id")] - public long? orderId { get; set; } + public long? orderId { get; set; }//申请单的主键id /// /// 流水号 /// [Column("serial_no")] - public long? serialNo { get; set; } + public long? serialNo { get; set; }//提升机专用流水号 /// /// 设备编号 /// [Column("equipment_no")] - public string equipmentNo { get; set; } + public string equipmentNo { get; set; }//设备编号 /// /// 容器号(托盘或者箱号) /// [Column("container_no")] - public string containerNo { get; set; } + public string containerNo { get; set; }//RFID,料箱号 /// /// 任务类型,字典表 @@ -70,11 +70,9 @@ namespace Khd.Core.Domain.Models /// 38成品区-提升机输送线对接点 /// 46原材料-柜体拆分区 /// 47接驳位-原材料周转区 - /// - /// /// [Column("task_type")] - public int? taskType { get; set; } + public int? taskType { get; set; }//对照数据库wcs_base_dictionary表的主键27开始 /// /// 任务状态,字典表 diff --git a/src/Khd.Core.Library/Mapper/CoreMapper.cs b/src/Khd.Core.Library/Mapper/CoreMapper.cs index 6c65e7e..4f8c121 100644 --- a/src/Khd.Core.Library/Mapper/CoreMapper.cs +++ b/src/Khd.Core.Library/Mapper/CoreMapper.cs @@ -29,7 +29,7 @@ namespace Khd.Core.Library.Mapper config.NewConfig().MapWith(dest => dest.Trim()); // config.ForType().Map(member: guid => guid, source: @string => string.IsNullOrEmpty(@string) ? Guid.Empty : new Guid(@string)); // config.ForType().Map(member: @string => @string, source: guid => ("wode")); - config.Default.IgnoreNullValues(true);//忽略null + config.Default.IgnoreNullValues(true);//忽略null,原本的类字段的值是null,映射出来是"",int? null config.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略大小写 var destination = source.Adapt(config); return destination; diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs index 98f67df..b2733df 100644 --- a/src/Khd.Core.Plc/StaticPlcHelper.cs +++ b/src/Khd.Core.Plc/StaticPlcHelper.cs @@ -45,15 +45,16 @@ namespace Khd.Core.Plc return null; } string res = Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim(); - + if (res.Contains("JYHB")) { return res[res.IndexOf('J')..]; } - else if(res.Contains('C')) + else if (res.Contains('C')) { return res[res.IndexOf('C')..]; - }else + } + else { return ""; } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 3114634..602471e 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,5 +1,4 @@ -using Khd.Core.Domain.Models; -using Khd.Core.EntityFramework; +using Khd.Core.EntityFramework; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; using Masuit.Tools.Logging; @@ -35,21 +34,13 @@ namespace Khd.Core.Wcs using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - using var dbContextTransaction = dbContext.Database.BeginTransaction(); try { - //加载配置项 - //设置程序启动时清空点位的数据=>0为 Int16位 - QingKongDianWei = StaticPlcHelper.GetValue("2", "0"); - //设置默认处理完成=>1为 Int16位 - WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1"); - //设置默认去向=>1为 Int16位 - WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); - StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); - StaticData.basePlcs = dbContext.BasePlc.ToList(); - StaticData.BaseEquip = dbContext.BaseEquip.ToList(); - StaticData.BaseDictionary = dbContext.BaseDictionary.ToList(); - + StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用 + StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送 + StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 + StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板 + foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) @@ -68,8 +59,8 @@ namespace Khd.Core.Wcs StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } - //SystemTimer systemTimer = new SystemTimer(_host); - //systemTimer.Start(); + SystemTimer systemTimer = new SystemTimer(_host); + systemTimer.Start(); //创建任务 CreateTaskByRecord createTaskByRecord = new(_host); createTaskByRecord.StartPoint(); @@ -78,40 +69,40 @@ namespace Khd.Core.Wcs FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); firstFloor.StartPoint(); - ////二层接驳位 - //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); - //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value); - //secondFloorPoint.StartPoint(); + //二层接驳位 + var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); + SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value); + secondFloorPoint.StartPoint(); - ////二层AGV - //var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); - //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value); - //secondFloorAGV.StartPoint(); + //二层AGV + var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); + SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value); + secondFloorAGV.StartPoint(); - ////二楼线体 - //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First(); - //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value); - //secondFloorLine.StartPoint(); + //二楼线体 + var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First(); + SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value); + secondFloorLine.StartPoint(); - ////三层接驳位 - //var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First(); - //ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value); - //thirdFloorPoint.StartPoint(); + //三层接驳位 + var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First(); + ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value); + thirdFloorPoint.StartPoint(); - ////三层AGV - //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); - //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); - //thirdFloorAGV.StartPoint(); + //三层AGV + var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); + ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); + thirdFloorAGV.StartPoint(); //五层接驳位 var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value); fifthFloorPoint.StartPoint(); - ////五层CTU - //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); - //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value); - //fiveFloorCTU.StartPoint(); + //五层CTU + var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); + FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value); + fiveFloorCTU.StartPoint(); //五层AGV var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); @@ -125,7 +116,6 @@ namespace Khd.Core.Wcs } catch (Exception ex) { - dbContextTransaction.Rollback(); Console.WriteLine(ex.Message); LogManager.Error(ex); } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 11c7d34..bde643b 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -29,9 +29,9 @@ namespace Khd.Core.Wcs.Wcs /// public void StartPoint() { - ////背负式Agv返库任务 - //var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); - //createBearAgvReturnThread.Start(); + //背负式Agv返库任务 + var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); + createBearAgvReturnThread.Start(); //五楼半成品入库任务 var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic); createFiveProductInTaskThread.Start(); @@ -44,18 +44,18 @@ namespace Khd.Core.Wcs.Wcs //五楼柜体拆分返库任务 var createRawInThread = new Thread(CreateRawInTaskLogic); createRawInThread.Start(); - ////三楼去翻转机任务 - //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); - //createThirdOutTaskThread.Start(); - ////二楼成品出库任务 - //var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); - //CreateSecondProductTaskThread.Start(); - ////三楼托盘收集架满5个或10个时出库合盘任务 - //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); - //createEmptyTrayThread.Start(); - ////二楼废品区人工调度任务 - //var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic); - //createThirdWasterTaskThread.Start(); + //三楼去翻转机任务 + var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); + createThirdOutTaskThread.Start(); + //二楼成品出库任务 + var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); + CreateSecondProductTaskThread.Start(); + //三楼托盘收集架满5个或10个时出库合盘任务 + var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); + createEmptyTrayThread.Start(); + //二楼废品区人工调度任务 + var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic); + createThirdWasterTaskThread.Start(); Console.WriteLine(DateTime.Now + ":出库任务监听启动成功"); LogManager.Info("出库任务监听启动成功"); @@ -1481,7 +1481,7 @@ namespace Khd.Core.Wcs.Wcs int qty = 0; if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 { - needNumber-= stock.totalAmount - stock.frozenAmount; + needNumber -= stock.totalAmount - stock.frozenAmount; RealOutNumber += stock.totalAmount - stock.frozenAmount; qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); stock.updateDate = DateTime.Now; diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 8deecdf..fa22d9c 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -64,7 +64,6 @@ namespace Khd.Core.Wcs.Wcs this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001")); //到位信号 读 this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01")); - //一楼提升机流水号 读 this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06")); this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose")); @@ -87,27 +86,19 @@ namespace Khd.Core.Wcs.Wcs /// public void StartPoint() { - Thread firstFloorLine = new(FirstFloorLine) + Thread firstFloorLine = new(FirstFloorLine)//一楼接驳位线程 { IsBackground = true }; firstFloorLine.Start(); - Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功"); - LogManager.Info("一楼接驳位线程启动成功"); - Thread firstFloorHoister = new(FirstFloorHoister) + Thread firstFloorHoister = new(FirstFloorHoister)//提升机 { IsBackground = true }; firstFloorHoister.Start(); - //Thread CallEmptyThread = new Thread(CallEmpty) - //{ - // IsBackground = true - //}; - //CallEmptyThread.Start(); - - Thread equipStatusThread = new Thread(EquipStatusLogic) + Thread equipStatusThread = new Thread(EquipStatusLogic)//设备状态,1-5楼接驳位能不能送货,提升机和小车任务 { IsBackground = true }; @@ -134,28 +125,28 @@ namespace Khd.Core.Wcs.Wcs if (Convert.ToInt32(lineSignal) == 1) { BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); - if (baseEquip.equipStatus != 1) + if (baseEquip.equipStatus != 1)//不是忙碌状态,改为忙碌状态 { baseEquip.equipStatus = 1; dbContext.Update(baseEquip); dbContext.SaveChanges(); } - else - { - bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any(); - if (!hasTask) - { - baseEquip.equipStatus = 0; - dbContext.Update(baseEquip); - dbContext.SaveChanges(); - } - } + //else + //{ + // bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any(); + // if (!hasTask) + // { + // baseEquip.equipStatus = 0; + // dbContext.Update(baseEquip); + // dbContext.SaveChanges(); + // } + //} } else { BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); - bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any(); - bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any(); + bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务 + bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的 if (!hasCmd || !hasTask) { baseEquip.containerNo = null; @@ -163,7 +154,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(baseEquip); dbContext.SaveChanges(); } - else + else//接驳位改为忙碌状态 { baseEquip.containerNo = null; baseEquip.equipStatus = 1; @@ -305,7 +296,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());//上次查出1,不加这行,数据库实际2,查出1 var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读 var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读 //正常读到plc值 @@ -400,7 +391,7 @@ namespace Khd.Core.Wcs.Wcs } else { - if (string.IsNullOrEmpty(task.containerNo)) + if (string.IsNullOrEmpty(task.containerNo))//人工调出 { if (task.useFlag == 1) { @@ -514,7 +505,7 @@ namespace Khd.Core.Wcs.Wcs BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致 { wcsTask.taskStatus = 2; wcsTask.updateBy = "提升机线程"; @@ -531,7 +522,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(lineEquip); dbContext.SaveChanges(); } - else + else//当前楼层和起始楼层不一致 { wcsTask.taskStatus = 1; wcsTask.updateBy = "提升机线程"; @@ -589,20 +580,20 @@ namespace Khd.Core.Wcs.Wcs } if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 { - if (wcsTask.floorNo == 1) + if (wcsTask.floorNo == 1)//目的楼层是1 { - if (ReadEmptyLocation()) + if (ReadEmptyLocation())//托盘库是否有任务,没有任务返回true { var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress); - if (linesignal != null && Convert.ToInt32(linesignal) == 0) + if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西 { BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); - if (clearPoint != null && Convert.ToBoolean(clearValue) == true) + if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警 { Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令"); LogManager.Info("提升机下发报警消除指令"); - StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString()); + StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警 } wcsTask.taskStatus = 4; wcsTask.updateBy = "提升机线程"; @@ -616,11 +607,11 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } - else + else//接驳位外侧有东西 { BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); - if (clearPoint != null && Convert.ToBoolean(clearValue)==false) + if (clearPoint != null && Convert.ToBoolean(clearValue) == false) { StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString()); } @@ -651,16 +642,16 @@ namespace Khd.Core.Wcs.Wcs } else { - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}"); + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); } } } - else if (wcsTask.taskStatus == 4) + else if (wcsTask.taskStatus == 4)//提升机任务结束 { BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun")); var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress); - if (wcsRun != null && Convert.ToInt32(wcsRun) == 0) + if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态,wcsrrun如果是1代表入库,2是出库,0是空闲 { BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); wcsTask.nextPointId = floorEquip.objid; @@ -683,7 +674,7 @@ namespace Khd.Core.Wcs.Wcs } } } - else + else//同步楼层,屏蔽状态 { if (currentfloor06Value != null && targetfloor06Value != null) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index ed25ad7..4520082 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -9,7 +9,6 @@ using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using System.Transactions; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 8f2fc28..cb483e5 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -417,12 +417,12 @@ namespace Khd.Core.Wcs.Wcs new() { positionCode = wcsCmd.currPointNo, - type = "05" + type = "05"//05库位 }, new() { positionCode = wcsCmd.nextPointNo, - type = "00" + type = "00"//设备 }, }, ctnrTyp = "1", @@ -479,12 +479,12 @@ namespace Khd.Core.Wcs.Wcs new() { positionCode = wcsCmd.currPointNo, - type = "05" + type = "05"//设备 }, new() { positionCode = wcsCmd.nextPointNo, - type = "05" + type = "05"//库位 }, }, ctnrTyp = "1", diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 0d4a0c4..b7c655e 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -873,7 +873,7 @@ namespace Khd.Core.Wcs.Wcs { var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); - wmsProductOutstock.outstockQty ++; + wmsProductOutstock.outstockQty++; if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty) { wmsProductOutstock.endTime = DateTime.Now; diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 64faf36..c9b2a31 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -40,12 +40,12 @@ namespace Khd.Core.Wcs.Wcs { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36); - BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2); - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); - BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6); - var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); + BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);//小包入口 + BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);//小包出口 + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);//二楼接驳位 + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);//二楼叉车 + BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6);//提升机 + var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);//二楼小包入口点位 while (true) { try @@ -54,8 +54,7 @@ namespace Khd.Core.Wcs.Wcs //入库任务 var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress); var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); - //var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); - var agvPutValue = ""; + var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); if (rfid != null && isSignal != null) { @@ -64,30 +63,29 @@ namespace Khd.Core.Wcs.Wcs { //获取条码信息 BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 2); - var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime) - .FirstOrDefault(); + var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime).FirstOrDefault(); if (wcsTask != null) { if (wcsTask.taskStatus == 5 && (wcsTask.nextPointId == 6 || wcsTask.nextPointId == 2))//入托盘入口,提升机任务是完成状态 { - if (wcsTask.taskType != 99) + if (wcsTask.taskType != 99)//不是人工任务 { if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)//小包入口要料 { - dbContext.WcsTask.Remove(wcsTask); + dbContext.WcsTask.Remove(wcsTask);//删除原本的任务 WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); - newTask.nextPointId = agvEquip.objid; + newTask.nextPointId = agvEquip.objid;//小车执行该任务 newTask.nextPointNo = agvEquip.equipNo; newTask.createTime = DateTime.Now; newTask.updateTime = DateTime.Now; - newTask.containerNo = rfid; - newTask.currPointId = lineEquip.objid; + newTask.containerNo = rfid;//容器号 + newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位 newTask.currPointNo = lineEquip.equipNo; - newTask.endPointId = inEquip.objid; + newTask.endPointId = inEquip.objid;//终点为小包入口 newTask.endPointNo = inEquip.equipNo; - newTask.taskType = 51;//到小包入口 + newTask.taskType = 51;//提升机到小包入口的任务类型 newTask.useFlag = 1; dbContext.WcsTask.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); @@ -98,23 +96,23 @@ namespace Khd.Core.Wcs.Wcs } else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1) { - BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); + BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//二楼周转位 if (endEquip != null) { - dbContext.WcsTask.Remove(wcsTask); + dbContext.WcsTask.Remove(wcsTask);//删除原本的任务 WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); - newTask.nextPointId = agvEquip.objid; + newTask.nextPointId = agvEquip.objid;//小车执行该任务 newTask.nextPointNo = agvEquip.equipNo; newTask.createTime = DateTime.Now; newTask.updateTime = DateTime.Now; - newTask.containerNo = rfid; - newTask.currPointId = lineEquip.objid; + newTask.containerNo = rfid;//容器号 + newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位 newTask.currPointNo = lineEquip.equipNo; - newTask.endPointId = endEquip.objid; + newTask.endPointId = endEquip.objid;//终点为周转位 newTask.endPointNo = endEquip.equipNo; - newTask.taskType = 58;//到周转位 + newTask.taskType = 58;//提升机到周转位的任务类型 newTask.useFlag = 1; dbContext.WcsTask.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); @@ -127,7 +125,7 @@ namespace Khd.Core.Wcs.Wcs } else { - if (wcsTask.endPointId == 36) + if (wcsTask.endPointId == 36)//目的地是小包入口 { if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料 { @@ -182,10 +180,10 @@ namespace Khd.Core.Wcs.Wcs } } } - else if (wcsTask.endPointId == 38) + else if (wcsTask.endPointId == 38)//目的地是废料区 { - var endEquip = dbContext.BaseEquip.First(t => t.objid == 38); - if (endEquip.emptyCount == 0) + var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);//废料区 + if (endEquip.emptyCount == 0)//废料区没有托盘 { dbContext.WcsTask.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); @@ -209,7 +207,7 @@ namespace Khd.Core.Wcs.Wcs } else { - endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); + endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//周转位 if (endEquip != null) { dbContext.WcsTask.Remove(wcsTask); diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index 7dad077..88f50b2 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -29,25 +29,19 @@ namespace Khd.Core.Wcs.Wcs { IsBackground = true }; - messageSynchronousThread.Start(); + messageSynchronousThread.Start();//陈工设备信息推送 - //var baseEquipThread = new Thread(BaseEquipLogic) - //{ - // IsBackground = true - //}; - //baseEquipThread.Start(); - - //var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic) - //{ - // IsBackground = true - //}; - //PlcHeartBeat30Thread.Start(); + var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic) + { + IsBackground = true + }; + PlcHeartBeat30Thread.Start();//脉冲 var PlcHeartBeat31Thread = new Thread(PlcHeartBeat31Logic) { IsBackground = true }; - PlcHeartBeat31Thread.Start(); + PlcHeartBeat31Thread.Start();//脉冲 Console.WriteLine($"{DateTime.Now}: SystemTimer started"); } @@ -192,7 +186,6 @@ namespace Khd.Core.Wcs.Wcs { try { - HositerLogic(); CtuLineLogic(); ThirdAgvLogic(); diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 858678e..24c1f3e 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -747,7 +747,7 @@ namespace Khd.Core.Wcs.Wcs { rawStockId = StaticData.SnowId.NextId(), activeFlag = "1", - saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId, + saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId, stockType = "1", supplierId = mesBaseBarcodeInfo.manufacturerId, qualityStatus = "1", diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index a0f1046..0d972a6 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -13,15 +13,15 @@ "Rack": 0, "Slot": 1, "Code": 0 - }, - //{ - // "IP": "192.168.2.31", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 1 - //}, + },//提升机,接驳位 + { + "IP": "192.168.2.31", + "Port": 102, //102是默认端口 + "CpuType": 40, + "Rack": 0, + "Slot": 1, + "Code": 1 + },//U型线 { "IP": "192.168.2.220", "Port": 102, //102是默认端口 @@ -29,7 +29,7 @@ "Rack": 0, "Slot": 1, "Code": 2 - } + }//二楼三楼设备,陈工提供。 ], "PLCSetting": { "Mode": "0", diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index b927399..9310438 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -2902,7 +2902,7 @@ namespace Khd.Core.Wpf.Form private void SelectOutBtn_Click(object sender, RoutedEventArgs e) { - SelectOutRawForm selectOutRawForm=new SelectOutRawForm(this._host); + SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host); selectOutRawForm.ShowDialog(); } }