From fbe597f9faa577dee9684c29d76bc6b4d75af45e Mon Sep 17 00:00:00 2001 From: "LAPTOP-NLSJV9RB\\91647" <916477576@qq.com> Date: Sun, 7 Apr 2024 13:52:52 +0800 Subject: [PATCH] .. --- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 76 +++++++++++++----- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 71 ++++++----------- src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs | 102 +++++++------------------ src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 21 ----- 4 files changed, 107 insertions(+), 163 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index aa6cfd7..e4b9afd 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs { @@ -31,6 +32,7 @@ namespace Khd.Core.Wcs.Wcs Thread FlowPointThread; int FloorNo { get; set; } string EquipNo = ""; + int agvID = 10; public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { this._host = host; @@ -64,18 +66,19 @@ namespace Khd.Core.Wcs.Wcs { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); + List taskType = new() { 1,2,3, 7, 8 }; while (true) { try { - var taskList = GetTask(FloorNo, EquipNo); + var taskList = dbContext.WcsTask.Where(t => t.nextPointId == agvID && taskType.Contains(t.taskType) ).ToList() ; if (taskList.Count == 0) { LogManager.Info(FloorNo + "楼AGV无任务"); } foreach (var item in taskList) { - SendTask(item); + SendAndUpdateTask(item); } } catch (Exception ex) @@ -114,29 +117,49 @@ namespace Khd.Core.Wcs.Wcs } return wcsTask; } - /// - /// 下发任务 - /// - /// - public void SendTask(WcsTask task) + + public void SendAndUpdateTask(WcsTask task) { + //获取 + if (task == null) return; using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - //获取 - if (task == null) - { - return; - } - //首先判断是否已下发指令 - var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault(); - //指令表存在说明已下发 - if (cmd != null) return; - //获取下发agv指令 + WcsToWms wcsToWms = new WcsToWms(); + //首先判断是否已下发指令 + var cmd = dbContext.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault(); + var locList = dbContext.WmsBaseLocation.Where(t => t.activeFlag == "1").ToList(); + if (locList.Count == 0) return; + //指令表存在说明已下发 + if (cmd == null) + { //获取下发agv指令 string ip = ""; int port = 0; string url = ""; RequestAGVTaskDto agvtask = new RequestAGVTaskDto(); - agvtask.reqCode = task.serialNo.ToString(); - var json = JsonConvert.SerializeObject(agvtask); - HttpHelper.SendPostMessage(ip, port, url, json); + agvtask.reqCode = task.objid.ToString(); + //var json = JsonConvert.SerializeObject(agvtask); + //HttpHelper.SendPostMessage(ip, port, url, json); + agvtask.positionCodePath = new List(); + Position p = new Position(); + WmsBaseLocation putPos = new WmsBaseLocation(); //放料点 + WmsBaseLocation setPos = new WmsBaseLocation(); //取料点 + if (task.taskType == 5) //入库 + { + setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault(); + } + else + { + setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault(); + } + putPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault(); + p.podCode = setPos?.agvPositionCode; + p.podTyp = ""; + agvtask.positionCodePath.Add(p); + p.podCode = putPos?.agvPositionCode; + p.podTyp = ""; + //取料点 + agvtask.positionCodePath.Add(p); + agvtask.taskTyp = ""; + //给agv创建任务 + wcsToWms.genAgvSchedulingTask(agvtask); //未下发给agv下发指令 WcsCmd taskCmd = new WcsCmd() { @@ -145,11 +168,22 @@ namespace Khd.Core.Wcs.Wcs serialNo = task.serialNo, equipmentNo = task.equipmentNo, cmdStatus = 1, - createBy = FloorNo+"楼AGV", + createBy = FloorNo + "楼AGV", createTime = DateTime.Now, }; dbContext.Add(taskCmd); dbContext.SaveChanges(); + //更新任务表 + dbContext.WcsTask.Where(t => t.objid == task.objid).Update(t => new WcsTask() + { + currPointId = task.currPointId, + currPointNo = task.currPointNo, + nextPointId = task.nextPointId, + nextPointNo = task.nextPointNo, + updateTime = DateTime.Now, + updateBy = "agv出库", + }); + } } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index fe6fcd9..2c24f21 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -31,6 +31,7 @@ namespace Khd.Core.Wcs.Wcs Thread FlowPointThread; int FloorNo { get; set; } string EquipNo = ""; + int CTUID = 11; public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { this._host = host; @@ -68,14 +69,15 @@ namespace Khd.Core.Wcs.Wcs { try { - var taskList = GetTask(FloorNo, EquipNo); + var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID &&( t.taskType==7 || t.taskType == 8)).GroupBy(t=>t.orderId).ToList(); if (taskList.Count == 0) { LogManager.Info(FloorNo + "楼CTU无任务"); } foreach (var item in taskList) { - + + SendTask(item.FirstOrDefault().orderId); } } catch (Exception ex) @@ -89,67 +91,44 @@ namespace Khd.Core.Wcs.Wcs } } - public List GetTask(int floorNo, string equipNo) - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - List wcsTask = new List(); - var wareHouseList = StaticData.WmsBaseWarehouse.ToList(); - var equip = StaticData.BaseEquip.Where(t=>t.floorNo==floorNo && t.equipType==4).FirstOrDefault(); - //入库类型 - List taskInType = new List { 1, 3, 5, 7 }; - List taskOutType = new List { 2, 4, 6, 8 }; - try - { - //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv - var taskList = StaticData.WcsTask.Where(t => t.nextPointId == equip.objid).ToList(); - if (taskList.Count() == 0) - { return null; } - wcsTask = taskList; - } - catch (Exception ex) - { - LogManager.Info(floorNo + "楼CTU异常" + ex.Message); - throw; - } - return wcsTask; - } /// /// 下发任务 /// /// - public void SendTask(WcsTask task) + public void SendTask(long? orderId) { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); + var taskList = dbContext.WcsTask.Where(t => t.orderId == orderId).ToList(); //获取 - if (task == null) - { + if (taskList.Count == 0) return; - } - //首先判断是否已下发指令 - var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault(); - //指令表存在说明已下发 - if (cmd != null) return; - //获取下发agv指令 - string ip = ""; int port = 0; string url = ""; - RequestAGVTaskDto agvtask = new RequestAGVTaskDto(); - agvtask.reqCode = task.serialNo.ToString(); - var json = JsonConvert.SerializeObject(agvtask); - HttpHelper.SendPostMessage(ip, port, url, json); + //首先判断是否已下发指令 + var cmd = dbContext.WcsCmd.Where(t => taskList.Select(t => t.objid).ToList().Contains(t.taskId.GetValueOrDefault())).FirstOrDefault(); + //指令表存在说明已下发 + if (cmd != null) return; + //获取下发agv指令 + string ip = ""; int port = 0; string url = ""; + RequestAGVTaskDto agvtask = new RequestAGVTaskDto(); + agvtask.reqCode = orderId.ToString(); + var json = JsonConvert.SerializeObject(agvtask); + HttpHelper.SendPostMessage(ip, port, url, json); + foreach (var item in taskList) + { //未下发给agv下发指令 WcsCmd taskCmd = new WcsCmd() { - taskId = task.objid, - cmdType = task.taskType, - serialNo = task.serialNo, - equipmentNo = task.equipmentNo, + taskId = item.objid, + cmdType = item.taskType, + serialNo = item.serialNo, + equipmentNo = item.equipmentNo, cmdStatus = 1, - createBy = FloorNo+"楼AGV", + createBy = FloorNo + "楼CTU", createTime = DateTime.Now, }; dbContext.Add(taskCmd); dbContext.SaveChanges(); + } } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs index 40e1d36..86789a6 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs @@ -29,6 +29,7 @@ namespace Khd.Core.Wcs.Wcs Thread FlowPointThread; int FloorNo { get; set; } string EquipNo = ""; + int CTUID = 11; public FiveFloorLine(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { this._host = host; @@ -75,71 +76,40 @@ namespace Khd.Core.Wcs.Wcs var isarrive = this._plc.Read(IsArrive.plcpointAddress); //获取条码信息 var palletNo = Convert.ToString(rfid); - var wcsTaskList = GetTask( FloorNo, EquipNo); - foreach (var item in wcsTaskList) - { - if (item.taskStatus == 3) - { - if (item.taskType == 7) - { - //更新任务 - dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() - { - currPointId = 7, - currPointNo = "F06", - updateTime = DateTime.Now, - updateBy = "五楼回转输送线", - }); - } - else - { - var palletInfo = StaticData.MesBasePalletInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault(); - //自动获取id - Jc.SnowId.JcSnowId id = new Jc.SnowId.JcSnowId(1, 1); - var objid = id.NextId(); - WcsTask newTask = new() - { - objid = objid, - taskType =7, - containerNo = item.containerNo, - taskStatus = 0, - materialId = item.materialId, - qty = Convert.ToInt32(palletInfo.bindAmount), - startPointId =7, - startPointNo = "F06", - currPointId = 7, - currPointNo = "F06", - nextPointId=11, - nextPointNo= "AGV04", - endPointId =16, - endPointNo = "WH0502", - createBy="回转输送线", - createTime = DateTime.Now, - - }; - dbContext.Add(newTask); - dbContext.SaveChanges(); - - } - - } - } + var taskid = 0; + WcsToWms wcsToWms = new WcsToWms(); + continueTaskDto agvtask = new continueTaskDto(); + //入库:待取料 if (rfid != null && isarrive != null) { //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 if (Convert.ToInt32(isarrive) ==1) { - //获取辅料料箱回库任务 - dbContext.WcsTask.Where(t => t.containerNo == palletNo&& t.currPointId==7).Update(t => new WcsTask() + var wcsTaskList = dbContext.WcsTask.Where(t => t.taskType == 7 ).ToList(); + var cmd= dbContext.WcsCmd.Where(t => t.containerNo== rfid && t.cmdStatus==14).FirstOrDefault(); + if (cmd != null) { - nextPointId = 11, - nextPointNo = "AGV04", - updateTime = DateTime.Now, - updateBy = "五楼回转输送线", - }); + agvtask.reqCode = cmd.taskId.ToString(); + //给ctu下发继续任务指令 + wcsToWms.continueTask(agvtask); + } + } + } + //出库:取料完成待放料 + if (IsPut != null) + { + var cmdList = dbContext.WcsCmd.Where(t => t.cmdStatus == 15).ToList(); + if (cmdList == null) return; + foreach (var item in cmdList) + { + if (item != null) + { + agvtask.reqCode = item.taskId.ToString(); + //给ctu下发继续任务指令 + wcsToWms.continueTask(agvtask); + } } } - } catch (Exception ex) { @@ -151,23 +121,5 @@ namespace Khd.Core.Wcs.Wcs } } } - - public List GetTask(int floorNo, string equipNo) - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - List wcsTask = new List(); - var wareHouseList = StaticData.WmsBaseWarehouse.ToList(); - try - { - wcsTask = StaticData.WcsTask.Where(t => t.taskType == 7 && t.floorNo==5).ToList(); - } - catch (Exception ex) - { - LogManager.Info(floorNo + "楼接驳位异常"+ ex.Message); - throw; - } - return wcsTask; - } } } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index ee3745f..84295bc 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -311,26 +311,5 @@ namespace Khd.Core.Wcs.Wcs updateBy = "agv出库", }); } - //public List GetTask(int floorNo, string equipNo) - //{ - // using var scope = _host.Services.CreateScope(); - // using var dbContext = scope.ServiceProvider.GetRequiredService(); - // List wcsTask = new List(); - // var equip = StaticData.BaseEquip.Where(t => t.floorNo == floorNo && t.equipType == 4).FirstOrDefault(); - // try - // { - // //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv - // var taskList = StaticData.WcsTask.Where(t => t.nextPointId == equip.objid && t.currPointId != equip.objid && (t.taskType==1|| t.taskType == 2|| t.taskType == 5 || t.taskType == 6)).ToList(); - // if (taskList.Count() == 0) - // { return null; } - // wcsTask = taskList; - // } - // catch (Exception ex) - // { - // LogManager.Info(floorNo + "楼AGV异常" + ex.Message); - // throw; - // } - // return wcsTask; - //} } }