diff --git a/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs b/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs index 01825f8..e45811f 100644 --- a/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs +++ b/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -11,8 +12,6 @@ namespace Khd.Core.Domain.Dto.agv [Table("wcs_agv_status")] public class WcsAgvStatus { - [Column("id")] - public int Id { get; set; } [Column("battery")] public string Battery { get; set; } [Column("exclType")] @@ -22,7 +21,33 @@ namespace Khd.Core.Domain.Dto.agv [Column("online")] public string Online { get; set; } [Column("path")] - public string Path { get; set; } + public string? Path2 + { + get + { + if (path != null&&path.Length>0) + { + string json = JsonConvert.SerializeObject(path); + return json; + } + else + { + return ""; + } + } + set + { + if (value != null && value.Length > 0) + { + path = JsonConvert.DeserializeObject(value); + } + else + { + path = null; + } + } + } + public string[] path; [Column("podCode")] public string PodCode { get; set; } [Column("podDir")] @@ -45,6 +70,6 @@ namespace Khd.Core.Domain.Dto.agv [Column("stop")] public string Stop { get; set; } [Column("timestamp")] - public DateTime Timestamp { get; set; } + public DateTime? DateNow { get; set; } } } diff --git a/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs b/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs index 29efb21..8f3350a 100644 --- a/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs +++ b/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs @@ -1,11 +1,12 @@ -using System.Collections.Generic; +using Khd.Core.Domain.Dto.agv; +using System.Collections.Generic; namespace Khd.Core.Domain.Dto.webapi { public class AgvStatusDto { public string code { get; set; } - public List data { get; set; } + public List data { get; set; } } public class cardStatus diff --git a/src/Khd.Core.Domain/Models/WmsRawInstockDetail.cs b/src/Khd.Core.Domain/Models/WmsRawInstockDetail.cs index 1a34abd..db87a7a 100644 --- a/src/Khd.Core.Domain/Models/WmsRawInstockDetail.cs +++ b/src/Khd.Core.Domain/Models/WmsRawInstockDetail.cs @@ -56,7 +56,7 @@ namespace Khd.Core.Domain.Models /// 物料ID /// [Column("material_id")] - public long materialId { get; set; } + public long? materialId { get; set; } /// /// 采购订单号,入库扫描条码时获取唯一条码 diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs index 5a9e706..6c92f67 100644 --- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs +++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs @@ -1,4 +1,5 @@ using Khd.Core.Domain.Auth; +using Khd.Core.Domain.Dto.agv; using Khd.Core.Domain.Models; using Microsoft.EntityFrameworkCore; @@ -12,6 +13,7 @@ namespace Khd.Core.EntityFramework public DbSet SysUser { get; set; } public DbSet SysRole { get; set; } public DbSet SysMenu { get; set; } + public DbSet WcsAgvStatus { get; set; } public DbSet MesBaseMaterialInfo { get; set; } public DbSet WmsRawReturn { get; set; } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 4e6c9e7..8faad72 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,6 +1,7 @@ using Khd.Core.EntityFramework; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; +using Masuit.Tools; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -45,6 +46,7 @@ namespace Khd.Core.Wcs //设置默认去向=>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(); @@ -56,7 +58,7 @@ namespace Khd.Core.Wcs plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); try { - //plc.Open(); + plc.Open(); Console.WriteLine(DateTime.Now + ":连接到PLC:" + plcConfig.IP); } catch @@ -68,9 +70,9 @@ namespace Khd.Core.Wcs } SystemTimer systemTimer = new SystemTimer(_host); systemTimer.Start(); - //创建任务 - CreateTaskByRecord createTaskByRecord = new(_host); - createTaskByRecord.StartPoint(); + ////创建任务 + //CreateTaskByRecord createTaskByRecord = new(_host); + //createTaskByRecord.StartPoint(); ////一楼提升机以及接驳位 //FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); @@ -78,51 +80,46 @@ namespace Khd.Core.Wcs ////二层接驳位 //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); - //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value, SecondBaseFloorEquip.equipNo); + //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, SecondFloorAgvEquip.equipNo); + //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value); //secondFloorAGV.StartPoint(); ////二楼线体 //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First(); - //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[0], SecondFloorLineEquip.floorNo.Value, SecondFloorLineEquip.equipNo); + //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[0], 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, ThirdBaseFloorEquip.equipNo); + //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[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo); - thirdFloorAGV.StartPoint(); + ////三层AGV + //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); + //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], 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, FifthBaseFloorEquip.equipNo); + //FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value); //fifthFloorPoint.StartPoint(); - ////五层线体 - //var FiveFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 4 && t.equipType == 3).First(); - //FiveFloorLine fiveFloorLine = new(_host, StaticData.PlcDic[0], FiveFloorLineEquip.floorNo.Value, FiveFloorLineEquip.equipNo); - //fiveFloorLine.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, FiveFloorCTUEquip.equipNo); + //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(); - //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value, FifthFloorAgvEquip.equipNo); + //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value); //fifthFloorAGV.StartPoint(); - //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid==28).First(); - //FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo); + //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First(); + //FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value); //fiveFloorBearAgv.StartPoint(); } catch (Exception ex) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index f1298d6..f0da00e 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -227,6 +227,48 @@ namespace Khd.Core.Wcs.Wcs } } + private void BackReturnTaskLogic() + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.taskType == 28).FirstOrDefault(); + if(wcsTask != null) + { + WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.instockType == "2" && t.warehouseId == 511 && t.executeStatus == "0").FirstOrDefault(); + if (wmsRawInstock != null) + { + wcsTask.useFlag = 1; + wcsTask.createTime = DateTime.Now; + wmsRawInstock.executeStatus = "1"; + wmsRawInstock.beginTime = DateTime.Now; + WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail() + { + rawInstockDetailId = StaticData.SnowId.NextId(), + rawInstockId=wmsRawInstock.rawInstockId, + instockWay = "2", + activeFlag="1", + stackAmount = 1, + createBy = "WCS", + createDate = DateTime.Now, + materialId = wmsRawInstock.materialId, + instockAmount = 1, + executeStatus="0", + }; + dbContext.Update(wmsRawInstock); + dbContext.Update(wcsTask); + dbContext.SaveChanges(); + } + } + } + catch + { + + } + } + /// /// 半成品入库 /// @@ -691,17 +733,17 @@ namespace Khd.Core.Wcs.Wcs }; if (location.locDeep == 1) { - int? column = 0; - if (location.locColumn % 2 == 1) + int? row = 0; + if (location.locRow % 2 == 1) { - column = location.locColumn + 1; + row = location.locRow + 1; } else { - column = location.locColumn - 1; + row = location.locRow - 1; } - WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) - .Where(t => t.locRow == location.locRow) + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.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)) { @@ -921,17 +963,17 @@ namespace Khd.Core.Wcs.Wcs }; if (location.locDeep == 1) { - int? column = 0; - if (location.locColumn % 2 == 1) + int? row = 0; + if (location.locRow % 2 == 1) { - column = location.locColumn + 1; + row = location.locRow + 1; } else { - column = location.locColumn - 1; + row = location.locRow - 1; } - WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) - .Where(t => t.locRow == location.locRow) + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.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)) { @@ -1470,17 +1512,17 @@ namespace Khd.Core.Wcs.Wcs { if (location.locDeep == 1) { - int? column = 0; - if (location.locColumn % 2 == 1) + int? row = 0; + if (location.locRow % 2 == 1) { - column = location.locColumn + 1; + row = location.locRow + 1; } else { - column = location.locColumn - 1; + row = location.locRow - 1; } - WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) - .Where(t => t.locRow == location.locRow) + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.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)) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 97e40ca..b5b7955 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -17,36 +17,17 @@ namespace Khd.Core.Wcs.Wcs /// public class FiveFloorAGV { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; - private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; int FloorNo { get; set; } - private readonly string EquipNo = ""; int agvID = 28; - public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } + this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal05"); } /// /// 启动上件扫描监听 @@ -84,66 +65,7 @@ namespace Khd.Core.Wcs.Wcs if (item.taskStatus == 0)//下发任务 { BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); - if (item.taskType == 37)//入库任务 - { - //WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); - //BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - //WcsCmd wcsCmd = new() - //{ - // objid = StaticData.SnowId.NextId(), - // cmdStatus = 0, - // taskId = item.objid, - // useFlag = 1, - // cmdType = item.taskType, - // containerNo = item.containerNo, - // createTime = DateTime.Now, - // createBy = FloorNo + "楼AGV", - // currPointId = item.currPointId, - // currPointNo = currentEquip.agvPositionCode, - // nextPointId = item.endPointId, - // nextPointNo = wmsBaseLocation.agvPositionCode, - //}; - //var agvTask = new RequestAGVTaskDto - //{ - // reqCode = wcsCmd.objid.ToString(), - // positionCodePath = new List - // { - // new () - // { - // positionCode=wcsCmd.currPointNo, - // type="00" - // }, - // new () - // { - // positionCode=wcsCmd.nextPointNo, - // type="00" - // } - // }, - // taskTyp = baseDictionary.dicValue, - // ctnrTyp = "2", - //}; - //string message = JsonConvert.SerializeObject(agvTask); - //string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); - //var reponseMessage = JsonConvert.DeserializeObject(result); - //if (reponseMessage != null && reponseMessage.message == "成功") - //{ - // LogManager.Info("五楼Agv下发任务成功:" + message); - // wcsCmd.taskCode = reponseMessage.data; - // wcsCmd.cmdStatus = 1; - // item.taskStatus = 1; - // dbContext.Update(item); - // dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); - // WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); - // dbContext.Add(wcsCmdLog); - // dbContext.Add(wcsCmd); - // dbContext.SaveChanges(); - //} - //else - //{ - // LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); - //} - } - else if (item.taskType == 38)//出库任务 + if (item.taskType == 38)//出库任务 { BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any(); @@ -639,45 +561,6 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(toBaseLocation); dbContext.SaveChanges(); } - else if (item.taskType == 37)//入库 - { - - //WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation - // .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5); - //wmsBaseLocation.locationStatus = "1"; - //wmsBaseLocation.instockFlag = "0"; - //wmsBaseLocation.containerCode = item.containerNo; - //wmsBaseLocation.updateTime = DateTime.Now; - //wmsBaseLocation.updateBy = "WCS"; - //MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault(); - //if (mesBasePalletInfo != null) - //{ - // WmsProductStock wmsProductStock = new WmsProductStock() - // { - // productBatch = mesBasePalletInfo.materialBarcode, - // palletInfoCode = mesBasePalletInfo.palletInfoCode, - // activeFlag = "1", - // createBy = "WCS", - // createDate = DateTime.Now, - // frozenAmount = 0, - // instockDate = DateTime.Now, - // locationCode = wmsBaseLocation.locationCode, - // occupyAmount = 0, - // warehouseFloor = 5, - // saleorderCode = mesBasePalletInfo.materialBarcode, - // stockType = "3", - // totalAmount = 1, - - // }; - // dbContext.Update(wmsBaseLocation); - // dbContext.WcsTask.Where(t => t.objid == item.objid).Delete(); - // dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); - // dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); - // dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); - // dbContext.SaveChanges(); - //} - - } else if (item.taskType == 38)//出库 { var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId); @@ -815,6 +698,28 @@ namespace Khd.Core.Wcs.Wcs wmsRawStock.updateBy = "WCS"; dbContext.Update(wmsRawStock); dbContext.Update(wmsBaseLocation); + if (wmsBaseLocation.locDeep == 1) + { + int? locRow = 0; + if (wmsBaseLocation.locRow % 2 == 1) + { + locRow = wmsBaseLocation.locRow + 1; + } + else + { + locRow = wmsBaseLocation.locRow - 1; + } + WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => t.warehouseId == wmsBaseLocation.warehouseId) + .FirstOrDefault(); + if (deepWmsLocation != null) + { + deepWmsLocation.instockFlag = "1"; + deepWmsLocation.locationStatus = "2"; + dbContext.Update(deepWmsLocation); + } + } WcsTask newTask = CoreMapper.Map(item); newTask.objid = StaticData.SnowId.NextId(); var currPointId = item.currPointId; @@ -858,6 +763,28 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(startEquip); dbContext.Update(wmsRawStock); dbContext.Update(wmsBaseLocation); + if (wmsBaseLocation.locDeep == 1) + { + int? locRow = 0; + if (wmsBaseLocation.locRow % 2 == 1) + { + locRow = wmsBaseLocation.locRow + 1; + } + else + { + locRow = wmsBaseLocation.locRow - 1; + } + WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => t.warehouseId == wmsBaseLocation.warehouseId) + .FirstOrDefault(); + if (deepWmsLocation != null) + { + deepWmsLocation.instockFlag = "0"; + deepWmsLocation.locationStatus = "1"; + dbContext.Update(deepWmsLocation); + } + } dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.SaveChanges(); @@ -928,6 +855,5 @@ namespace Khd.Core.Wcs.Wcs } } - } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs index 0f57ea7..4cbcfcf 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs @@ -18,36 +18,15 @@ namespace Khd.Core.Wcs.Wcs public class FiveFloorBearAgv { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; - private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; - private readonly BasePlcpoint LineSignal; int FloorNo { get; set; } - private readonly string EquipNo = ""; int agvID = 10; - public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } } /// /// 启动上件扫描监听 diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 668540c..9bdbdea 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -27,35 +27,19 @@ namespace Khd.Core.Wcs.Wcs private readonly BasePlcpoint canReceive; private readonly BasePlcpoint ReceiveMaterial; private readonly BasePlcpoint CtuLineWaring; - private bool isWait = false; - private bool isSendWait = false; int FloorNo { get; set; } - string EquipNo = ""; int CTUID = 11; - public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID5001")); - this.isarrive = this.ScanPoint.First(t => t.plcpointNo.Contains("isarrive")); - this.isput = this.ScanPoint.First(t => t.plcpointNo.Contains("isput")); - this.canReceive = this.ScanPoint.First(t => t.plcpointNo.Contains("canReceive")); - this.ReceiveMaterial = this.ScanPoint.First(t => t.plcpointNo.Contains("ReceiveMaterial")); - this.CtuLineWaring = this.ScanPoint.First(t => t.plcpointNo.Contains("CTULineWaring")); - //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } + this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID5001"); + this.isarrive = StaticData.BasePlcpointList.First(t => t.plcpointNo == "isarrive"); + this.isput = StaticData.BasePlcpointList.First(t => t.plcpointNo == "isput"); + this.canReceive = StaticData.BasePlcpointList.First(t => t.plcpointNo == "canReceive"); + this.ReceiveMaterial = StaticData.BasePlcpointList.First(t => t.plcpointNo == "ReceiveMaterial"); + this.CtuLineWaring = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CtuLineWaring"); } /// @@ -485,7 +469,7 @@ namespace Khd.Core.Wcs.Wcs wcsOutstockLock.qty = 0; wcsOutstockLock.boxStatus = 0; dbContext.Update(wcsOutstockLock); - isWait = false; + //isWait = false; } } dbContext.SaveChanges(); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index 9325f72..30704db 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -14,36 +14,21 @@ namespace Khd.Core.Wcs.Wcs /// public class FiveFloorPoint { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private Plc.S7.Plc _plc; private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; int FloorNo { get; set; } string EquipNo = ""; - public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID005")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); + this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID005"); + this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal05"); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } } /// /// 启动上件扫描监听 diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index c14b3ac..15aefe5 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -18,15 +18,13 @@ namespace Khd.Core.Wcs.Wcs private readonly IHost _host; private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint WcsRun; public FourthFloorPoint(int floor, Plc.S7.Plc plc, IHost host) { Floor = floor; _plc = plc; this._host = host; - this.LineRFID = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("RFID")); - this.LineSignal = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("signal")); - this.WcsRun = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("wcsrun")); + this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID004"); + this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo.Contains("linesignal04")); } public void StartPoint() diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 0fba2d8..83b0aec 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -17,43 +17,18 @@ namespace Khd.Core.Wcs.Wcs /// public class SecondFloorAGV { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; - private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; - private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; + int FloorNo { get; set; } - string EquipNo = ""; int EquipID = 8; //2楼AGV - List taskInType = new List { 1, 3, 5, 7 }; - List taskOutType = new List { 2, 4, 6, 8 }; - public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + + public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); - - //var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } + } /// /// 启动上件扫描监听 @@ -87,11 +62,6 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); foreach (var item in taskList) { - if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any()) - { - LogManager.Info($"2楼AGV线程:有其他任务正在执行,跳过当前任务{item.objid}"); - continue; - } if (item.taskStatus == 0)//下发任务 { BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); @@ -627,6 +597,66 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } + else if(item.taskType == 59)//周转位-小包入口 + { + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + WcsCmd wcsCmd = new WcsCmd() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = startEquip.agvPositionCode, + nextPointId = item.endPointId, + nextPointNo = endEquip.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = wcsCmd.objid.ToString(), + positionCodePath = new List + { + new () + { + positionCode=wcsCmd.currPointNo, + type="00" + }, + new () + { + positionCode=wcsCmd.nextPointNo, + type="00" + } + }, + taskTyp = baseDictionary.dicValue, + ctnrTyp = "2", + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); + WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); + dbContext.Add(wcsCmdLog); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } + else + { + LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); + } + } } else { @@ -888,6 +918,11 @@ namespace Khd.Core.Wcs.Wcs { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + endEquip.equipStatus = 1; + endEquip.emptyCount = 1; + endEquip.containerNo = item.containerNo; + dbContext.Update(endEquip); dbContext.Update(startEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); @@ -908,6 +943,16 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 54) { + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + startEquip.equipStatus = 0; + startEquip.emptyCount = 0; + startEquip.containerNo = null; + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + endEquip.equipStatus = 1; + endEquip.emptyCount = 1; + endEquip.containerNo = item.containerNo; + dbContext.Update(startEquip); + dbContext.Update(endEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); @@ -956,6 +1001,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); endEquip.emptyCount = 1; endEquip.equipStatus = 2; + endEquip.containerNo = item.containerNo; dbContext.Remove(item); dbContext.Update(wasteEquip); dbContext.Remove(wcsCmd); @@ -968,6 +1014,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); emptyEquip.emptyCount = 0; emptyEquip.equipStatus = 0; + emptyEquip.containerNo = null; item.taskStatus = 8; dbContext.Update(item); dbContext.Update(emptyEquip); @@ -976,9 +1023,23 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); dbContext.SaveChanges(); } + else if (item.taskType == 59) + { + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + startEquip.equipStatus = 0; + startEquip.emptyCount = 0; + startEquip.containerNo = null; + dbContext.Update(startEquip); + dbContext.Remove(item); + dbContext.Remove(wcsCmd); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); + dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); + dbContext.SaveChanges(); + } } } } + break; } } catch (Exception ex) diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index bc12df6..bdae9f0 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -14,29 +14,15 @@ namespace Khd.Core.Wcs.Wcs /// public class SecondFloorPoint { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; int FloorNo { get; set; } - string EquipNo = ""; - public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } } /// /// 启动上件扫描监听 diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 5dad6b0..121608c 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -13,29 +13,18 @@ namespace Khd.Core.Wcs.Wcs /// public class SecondFloorLine { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private Plc.S7.Plc _plc; private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; int FloorNo { get; set; } - string EquipNo = ""; - int EquipID = 2; - public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); + this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002"); + this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal04"); //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); try @@ -220,7 +209,7 @@ namespace Khd.Core.Wcs.Wcs newTask.containerNo = palletNo; newTask.currPointId = lineEquip.objid; newTask.currPointNo = lineEquip.equipNo; - newTask.taskType = 54; + newTask.taskType = 53; newTask.useFlag = 1; dbContext.WcsTask.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index d444da0..5ff0df7 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -21,7 +21,7 @@ namespace Khd.Core.Wcs.Wcs { private readonly IHost host; private Plc.S7.Plc Plc30 = StaticData.PlcDic[0]; - private Plc.S7.Plc Plc31 = StaticData.PlcDic[1]; + private Plc.S7.Plc Plc31 = StaticData.PlcDic[0]; private Plc.S7.Plc Plc220 = StaticData.PlcDic[2]; public SystemTimer(IHost host) @@ -201,12 +201,13 @@ namespace Khd.Core.Wcs.Wcs using var dbContext = scope.ServiceProvider.GetRequiredService(); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); HositerLogic(); - CtuLineLogic(); + //CtuLineLogic(); ThirdAgvLogic(dbContext); FiveAgvLogic(dbContext); FiveBearAgvLogic(dbContext); CtuCmdLogic(dbContext); - //SecondAgvLogic(dbContext); + SecondAgvLogic(dbContext); + UpdatePlcPointValue(dbContext); } catch (Exception ex) { @@ -233,6 +234,23 @@ namespace Khd.Core.Wcs.Wcs } } + private void UpdatePlcPointValue(DefaultDbContext dbContext) + { + try + { + foreach (var item in StaticData.basePlcs) + { + item.Value = StaticData.PlcDic[2].Read(item.Address)?.ToString(); + } + dbContext.UpdateRange(StaticData.basePlcs); + dbContext.SaveChanges(); + } + catch + { + + } + } + /// /// 定时更新三楼AGV信息 /// @@ -251,13 +269,16 @@ namespace Khd.Core.Wcs.Wcs var reponse = JsonConvert.DeserializeObject(result); if (reponse != null && reponse.code == "0") { - cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2032"); + var cardStatus = reponse.data.First(t => t.RobotCode == "2032"); + cardStatus.DateNow = DateTime.Now; + dbContext.Update(cardStatus); + dbContext.SaveChanges(); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); - this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); + this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); var XPlc = basePlcs.First(t => t.Name.Contains('X')); var Ylc = basePlcs.First(t => t.Name.Contains('Y')); - this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); - this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); + this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type); + this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); } } @@ -279,13 +300,16 @@ namespace Khd.Core.Wcs.Wcs var reponse = JsonConvert.DeserializeObject(result); if (reponse != null && reponse.code == "0") { - cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2033"); + var cardStatus = reponse.data.First(t => t.RobotCode == "2033"); + cardStatus.DateNow = DateTime.Now; + dbContext.Update(cardStatus); + dbContext.SaveChanges(); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); - this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); + this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); var XPlc = basePlcs.First(t => t.Name.Contains('X')); var Ylc = basePlcs.First(t => t.Name.Contains('Y')); - this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); - this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); + this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); + this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); } } @@ -329,29 +353,40 @@ namespace Khd.Core.Wcs.Wcs var reponse = JsonConvert.DeserializeObject(result); if (reponse != null && reponse.code == "0") { - cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2034"); + var cardStatus = reponse.data.First(t => t.RobotCode == "2034"); + cardStatus.DateNow = DateTime.Now; + dbContext.Update(cardStatus); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); - this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); + this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); var XPlc = basePlcs.First(t => t.Name.Contains('X')); var Ylc = basePlcs.First(t => t.Name.Contains('Y')); - this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); - this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); + this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); + this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); - cardStatus = reponse.data.First(t => t.robotCode == "6011"); + + basePlcs= StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList(); + cardStatus = reponse.data.First(t => t.RobotCode == "6011"); + cardStatus.DateNow = DateTime.Now; quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); - this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); + this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); XPlc = basePlcs.First(t => t.Name.Contains('X')); Ylc = basePlcs.First(t => t.Name.Contains('Y')); - this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); - this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); + this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); + this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); + dbContext.Update(cardStatus); - cardStatus = reponse.data.First(t => t.robotCode == "8161"); + + basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList(); + cardStatus = reponse.data.First(t => t.RobotCode == "8161"); + cardStatus.DateNow = DateTime.Now; quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); - this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); + this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); XPlc = basePlcs.First(t => t.Name.Contains("X")); Ylc = basePlcs.First(t => t.Name.Contains("Y")); - this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); - this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); + this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); + this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); + dbContext.Update(cardStatus); + dbContext.SaveChanges(); } } diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 1459285..633124b 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -16,43 +16,16 @@ namespace Khd.Core.Wcs.Wcs /// public class ThirdFloorAGV { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; - private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; - private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; int FloorNo { get; set; } - string EquipNo = ""; - int EquipID = 9; //3楼AGV - List taskInType = new List { 1, 3, 5, 7 }; - List taskOutType = new List { 2, 4, 6, 8 }; - public ThirdFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public ThirdFloorAGV(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); - //var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } + } /// /// 启动上件扫描监听 @@ -77,7 +50,7 @@ namespace Khd.Core.Wcs.Wcs { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv - var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).OrderBy(t => t.createTime).ToList(); + var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList(); foreach (var item in taskList) { if (item.taskStatus == 0) @@ -142,7 +115,7 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } - if (item.taskType == 39) + else if (item.taskType == 39)//提升机-库位 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); @@ -200,9 +173,9 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 41) + else if (item.taskType == 41)//库位-翻转机 { - WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1"); + WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == item.orderId && t.executeStatus == "1"); if (wmsRawOutstockDetail != null) { wmsRawOutstockDetail.executeStatus = "1"; @@ -265,7 +238,7 @@ namespace Khd.Core.Wcs.Wcs } } } - else if (item.taskType == 40) + else if (item.taskType == 40)//周转位-收集架 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); @@ -324,7 +297,7 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 42) + else if (item.taskType == 42)//翻转机-收集架 { //var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); @@ -384,7 +357,7 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 43) + else if (item.taskType == 43)//收集架-周转区 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); @@ -443,7 +416,7 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 44) + else if (item.taskType == 44)//周转区-提升机 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index e13a860..76bfa3e 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -14,41 +14,18 @@ namespace Khd.Core.Wcs.Wcs /// public class ThirdFloorPoint { - List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; int FloorNo { get; set; } - int EquipID = 3; - string EquipNo = ""; - public ThirdFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) + public ThirdFloorPoint(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; this._plc = plc; FloorNo = floor; - EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); - - //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } + this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002"); + this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal02"); } /// /// 启动上件扫描监听 diff --git a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs deleted file mode 100644 index 2d5d5f6..0000000 --- a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Khd.Core.Wcs.Wcs -{ - public class WcsToWms - { - - } -} diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index 1b7381e..852bfab 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -14,14 +14,14 @@ "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 + //}, { "IP": "192.168.2.220", "Port": 102, //102是默认端口 diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index b74a0b0..2864b0d 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -390,7 +390,7 @@ - + + - + @@ -2096,7 +2104,7 @@ Margin="60,0,0,0" Source="..\Resources\chanpintiaoma.png" Visibility="Visible"/> - /// /// - private void btnRefreshPlc_Click(object sender, RoutedEventArgs e) + private void RefreshPlc() { - try - { - for (int i = 1; i <= 5; i++) - { - BasePlcpoint rfid = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{i}"); - BasePlcpoint linesignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"linesignal0{i}"); - BasePlcpoint wcsrun = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"wcsrun0{i}"); - var textBlock = FindName(rfid.plcpointNo) as TextBlock; - if (textBlock != null) - { - textBlock.Text = SystemData.PlcDic[0].ReadRFID(rfid.plcpointAddress); - } - textBlock = FindName(linesignal.plcpointNo) as TextBlock; - if (textBlock != null) - { - textBlock.Text = SystemData.PlcDic[0].Read(linesignal.plcpointAddress)?.ToString(); - } - textBlock = FindName(wcsrun.plcpointNo) as TextBlock; - if (textBlock != null) - { - textBlock.Text = SystemData.PlcDic[0].Read(wcsrun.plcpointAddress)?.ToString(); - } - } - } - catch (Exception ex) + while (true) { try { - if (ex is PlcException) + var points = SystemData.BasePlcpoints.OrderBy(t => t.definefield3).ToList(); + foreach (var item in points) { - foreach (var item in SystemData.PlcDic) + if (!string.IsNullOrEmpty(item.plcpointAddress)) { - if (item.Value.IP == ex.Message) + TextBlock? textBlock = null; + Dispatcher.Invoke(() => { - SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack); - SystemData.PlcDic[item.Key].Open(); - break; + textBlock = this.FindName(item.plcpointNo) as TextBlock; + }); + if (textBlock != null) + { + var plc = SystemData.PlcDic.Values.Where(t => t.IP == item.definefield3).FirstOrDefault(); + if (plc != null) + { + try + { + string? result = ""; + if (item.plcpointNo.Contains("RFID")) + { + result = plc.ReadRFID(item.plcpointAddress)?.ToString(); + } + else + { + result = plc.Read(item.plcpointAddress)?.ToString(); + } + Dispatcher.Invoke(() => + { + textBlock.Text = result == null ? "" : result; + }); + } + catch (Exception ex) + { + try + { + if (ex is PlcException) + { + foreach (var item2 in SystemData.PlcDic) + { + if (item2.Value.IP == ex.Message) + { + SystemData.PlcDic[item2.Key] = new Plc.S7.Plc(item2.Value.CPU, item2.Value.IP, item2.Value.Port, item2.Value.Slot, item2.Value.Rack); + SystemData.PlcDic[item2.Key].Open(); + break; + } + } + } + } + catch + { + points.RemoveAll(t => t.definefield3 == ex.Message); + } + } + } } } } } catch { - MessageBox.Show("提升机PLC连接失败!"); } - } - try - { - BasePlcpoint RFID5001 = SystemData.BasePlcpoints.First(t => t.plcpointNo == "RFID5001"); - BasePlcpoint isarrive = SystemData.BasePlcpoints.First(t => t.plcpointNo == "isarrive"); - BasePlcpoint isput = SystemData.BasePlcpoints.First(t => t.plcpointNo == "isput"); - var CtuTextBlock = FindName(RFID5001.plcpointNo) as TextBlock; - if (CtuTextBlock != null) - { - CtuTextBlock.Text = SystemData.PlcDic[1].ReadRFID(RFID5001.plcpointAddress); - } - CtuTextBlock = FindName(isarrive.plcpointNo) as TextBlock; - if (CtuTextBlock != null) - { - CtuTextBlock.Text = SystemData.PlcDic[1].Read(isarrive.plcpointAddress)?.ToString(); - } - CtuTextBlock = FindName(isput.plcpointNo) as TextBlock; - if (CtuTextBlock != null) - { - CtuTextBlock.Text = SystemData.PlcDic[1].Read(isput.plcpointAddress)?.ToString(); - } - } - catch (Exception ex) - { - try - { - if (ex is PlcException) - { - foreach (var item in SystemData.PlcDic) - { - if (item.Value.IP == ex.Message) - { - SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack); - SystemData.PlcDic[item.Key].Open(); - break; - } - } - } - } - catch - { - MessageBox.Show("U型线PLC连接失败!"); - } - + Thread.Sleep(3000); } } diff --git a/src/Khd.Core.Wpf/appsettings.json b/src/Khd.Core.Wpf/appsettings.json index 672be66..d931238 100644 --- a/src/Khd.Core.Wpf/appsettings.json +++ b/src/Khd.Core.Wpf/appsettings.json @@ -3,9 +3,9 @@ //mysql 本地 //"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True" //khd服务器 - "DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" + //"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" //"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True" - //"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" + "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" }, "PlcConfigs": [ { @@ -24,14 +24,14 @@ "Slot": 1, "Code": 1 }, - //{ - // "IP": "192.168.2.220", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 2 - //} + { + "IP": "192.168.2.220", + "Port": 102, //102是默认端口 + "CpuType": 40, + "Rack": 0, + "Slot": 1, + "Code": 2 + } ], "PLCSetting": { "Mode": "0",