using HslCommunication; using Microsoft.CodeAnalysis; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Security.Policy; using System.Threading; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Common.LoctionEnum; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Entity.DomainModels; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; using WIDESEA_WCS.WCSClient; using static FreeSql.Internal.GlobalFilter; namespace WIDESEA_WCS { public partial class StackerExecutor { public static object requestZJGF = new object();//requestZJJK private static int _readGFBUPSignalso = 0;//_readZTBUPSignalso /// /// 正级辊分机下料工作逻辑 /// /// public static void Z_GFSB_DownTask() { if (Interlocked.Exchange(ref _readGFBUPSignalso, 1) == 0) { Task.Run(() => { try { VOLContext Context = new VOLContext(); Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context); Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context); Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context); Idt_agvtask_htyRepository agvhtyRepository = new dt_agvtask_htyRepository(Context); List GFSBS = new List { "辊分机正极1", "辊分机正极2", "辊分机正极3", "辊分机正极4" }; //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"--------------开始----------- 时间记录:{DateTime.Now}", $"{GFSBS}下料呼叫"); foreach (var GFSB in GFSBS) { //string SBID = GFSB.Replace("辊分机正极", "");//设备号 PLCClient plc = WCSService.Clients.Find(v => v.PLCName == GFSB); if (plc == null) { //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"设备:{GFSB} 内容:未连接PLC 时间记录:{DateTime.Now}", $"{GFSBS}下料呼叫"); //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"--------------结束----------- 时间记录:{DateTime.Now}{Environment.NewLine}", $"{GFSBS}下料呼叫"); continue; } //bool GYC_RFX1 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest1".ToString(), plc.PLCDescroption));//下料口一下料信号 //bool GYC_RFX2 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest2".ToString(), plc.PLCDownLoc));//下料口二下料信号 OperateResult GYC_RFX1 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5693.0"); if (!GYC_RFX1.IsSuccess) { //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"{GFSBS}下料一口断开连接 时间:{DateTime.Now} -------------- {Environment.NewLine}", $"{GFSBS}下料呼叫"); continue; } if (GYC_RFX1.Content) { //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"读取 设备:{GFSB}下料一口 DB偏移值:D5693.0,读取值:{GYC_RFX1.Content} 时间记录:{DateTime.Now}", $"{GFSBS}下料呼叫"); //查看当前辊分机设备是否有AGV任务 var SBtask = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDescroption && (f.agv_taskstate == AGVTaskStateEnum.Create.ToString() || f.agv_taskstate == AGVTaskStateEnum.SendOut.ToString() || f.agv_taskstate == AGVTaskStateEnum.Executing.ToString() || f.agv_taskstate == AGVTaskStateEnum.Complete.ToString())); //有结束本次循环 if (SBtask != null) { //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"读取 设备:{GFSB}下料一口,AGV任务列表中存在任务,无法继续下发任务,时间记录:{DateTime.Now}", $"{GFSBS}下料呼叫"); } else { #region 记录下料请求信号 WriteLog.GetLog().Write($"下料口1请求:{GYC_RFX1.Content}---{DateTime.Now}", $"{plc.PLCName}下料请求"); #endregion List Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDescroption); base_ware_location Location = null; //绑定设备的货架 foreach (var item in Routing_Table) { //查找绑定设备的货架 base_ware_location ware_Locations = locRepository.FindFirst(d => d.down_code == item.route_end && d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.status == 1 && d.light_color == plc.PLCName.ToString()); if (ware_Locations != null) { Location = ware_Locations; break; } } if (Location != null) { if (Location.gd1 == 1 && Location.gd4 == 1)//代表下料1,2口下的料无法在这个货架装料了,货架就取消设备绑定 { var upper_code = Location.upper_code.Split('-'); string tasknum = upper_code[0] + "-" + upper_code[1]; var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress.Contains(tasknum)); if (loctionNUM == null) { Location.light_color = "无"; locRepository.Update(Location, d => d.light_color, true); } } else if (Location.gd1 == 0)//代表这个货架还能给下料1口装料 { var a = ""; var upper_code = Location.upper_code.Split('-'); if (Location.gd1 == 0 && Location.gd2 == 0 && a == "")//内侧外侧都没有料优先放内侧 { //string tasknumwc = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-1 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致外侧任务未完成,就下发内侧任务) //var loctionwc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumwc); //if (loctionwc == null) //{ string WCtasknum = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-2 var WCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == WCtasknum); if (WCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } //} } else if (Location.gd2 == 1 && Location.gd1 == 0 && a == "")//内侧有料时放外侧 { string NCtasknum = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 var NCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == NCtasknum); if (NCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-2 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } } if (a != "") { dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == a && d.agv_taskstate == AGVTaskStateEnum.TaskState_Finished.ToString()).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault(); if (agvtask_Hty != null) { bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 100; if (interval) { continue; } } //生成辊分机下料任务 dt_agvtask agvtask = new dt_agvtask() { agv_id = Guid.NewGuid(), agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), agv_fromaddress = plc.PLCDescroption, agv_toaddress = a, agv_code = "组装AGV调度", agv_remark = "辊分下料任务", agv_taskstate = AGVTaskStateEnum.Create.ToString(), agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), agv_worktype = 1,//工作类型 agv_materielid = "", agv_qty = 1, agv_createtime = DateTime.Now, agv_grade = 0,//任务优先级 agv_userid = "WCS", agv_barcode = "", }; //Location.update_time = DateTime.Now; Location.task = 1; Location.logic_col = 0; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int zone = locRepository.Update(Location, d => new { d.task, d.logic_col }, true); if (zone == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"【{GFSB}】下料一口任务生成").Write($"生成任务:{agvtask.agv_tasknum},终点货位【{a}】状态:托盘光电检测:{Location.tpgd},-1光电:{Location.gd2},-2光电:{Location.gd1},-3光电:{Location.gd4},-4光电:{Location.gd3},状态:{Location.location_state},设备绑定:{Location.light_color},更新时间:{Location.wireless_time}", $"【{GFSB}】下料一口任务生成"); //WriteDBLog.Info($"【{GFSB}】下料一口任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"【{GFSB}】下料一口任务生成"); } break; } } else { //代表这个货架无法装下料1口的料了,但是下料2口还可以装料在这个货架上,货架不能取消设备绑定 } }//代表有这个设备绑定的货架 else //代表没有这个设备绑定的货架,进行找一个没有设备绑定的货架进行绑定,来给这台设备装料 { List loctionList = new List(); foreach (var item in Routing_Table) { base_ware_location ware_Locations = locRepository.FindFirst(d => d.down_code == item.route_end && d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.status == 1 && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.light_color == "无"); if (ware_Locations == null) { continue; } loctionList.Add(ware_Locations); } if (loctionList.Count != 0) { List Locationlist = loctionList.OrderBy(d => d.update_time).ToList(); foreach (var xLocation in Locationlist) { var a = ""; var upper_code = xLocation.upper_code.Split('-'); if (xLocation.gd1 == 0 && xLocation.gd2 == 0 && a == "")//内侧外侧都没有料优先放内侧 { string WCtasknum = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-2 var WCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == WCtasknum); if (WCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } } if (xLocation.gd2 == 1 && xLocation.gd1 == 0 && a == "")//内侧有料时放外侧 { string NCtasknum = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 var NCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == NCtasknum); if (NCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-2 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } } if (a != "") { dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == a && d.agv_taskstate == AGVTaskStateEnum.TaskState_Finished.ToString()).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault(); if (agvtask_Hty != null) { bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 100; if (interval) { continue; } } //生成辊分机下料任务 dt_agvtask agvtask = new dt_agvtask() { agv_id = Guid.NewGuid(), agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), agv_fromaddress = plc.PLCDescroption, agv_toaddress = a, agv_code = "组装AGV调度", agv_remark = "辊分下料任务", agv_taskstate = AGVTaskStateEnum.Create.ToString(), agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), agv_worktype = 1,//工作类型 agv_materielid = "", agv_qty = 1, agv_createtime = DateTime.Now, agv_grade = 0,//任务优先级 agv_userid = "WCS", agv_barcode = "", }; //Location.update_time = DateTime.Now; xLocation.task = 1; xLocation.logic_col = 0; xLocation.light_color = plc.PLCName; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int zone = locRepository.Update(xLocation, d => new { d.task, d.light_color, d.logic_col }, true); if (zone == 1) { agvRepository.Add(agvtask, true); ////WriteDBLog.Info($"【{GFSB}】下料一口任务生成").Write($"生成任务:{agvtask.agv_tasknum},终点货位【{a}】状态:托盘光电检测:{xLocation.tpgd},-1光电:{xLocation.gd2},-2光电:{xLocation.gd1},-3光电:{xLocation.gd4},-4光电:{xLocation.gd3},状态:{xLocation.location_state},设备绑定:{xLocation.light_color},更新时间:{Location.wireless_time}", $"【{GFSB}】下料一口任务生成"); //WriteDBLog.Info($"【{GFSB}】下料一口任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"【{GFSB}】下料一口任务生成"); } break; } } } } } } OperateResult GYC_RFX2 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5893.0"); if (!GYC_RFX2.IsSuccess) { //WriteLog.GetLog($"{GFSBS}下料呼叫").Write($"{GFSBS}二口断开连接 时间:{DateTime.Now} -------------- {Environment.NewLine}", $"{GFSBS}下料呼叫"); continue; } if (GYC_RFX2.Content) { //查看当前辊分机设备是否有AGV任务 var SBtask = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDownLoc && (f.agv_taskstate == AGVTaskStateEnum.Create.ToString() || f.agv_taskstate == AGVTaskStateEnum.SendOut.ToString() || f.agv_taskstate == AGVTaskStateEnum.Executing.ToString() || f.agv_taskstate == AGVTaskStateEnum.Complete.ToString())); //有结束本次循环 if (SBtask != null) { } else { #region 记录下料请求信号 WriteLog.GetLog().Write($"下料口2请求:{GYC_RFX2.Content}---{DateTime.Now}", $"{plc.PLCName}下料请求"); #endregion List Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDownLoc); base_ware_location Location = null; //找绑定设备的货架 foreach (var item in Routing_Table) { //绑定设备的货架 base_ware_location ware_Locations = locRepository.FindFirst(d => d.upper_code == item.route_end && d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.status == 1 && d.light_color == plc.PLCName.ToString()); if (ware_Locations != null) { Location = ware_Locations; break; } } if (Location != null) { if (Location.gd1 == 1 && Location.gd4 == 1)//代表下料1,2口下的料无法在这个货架装料了,货架就取消设备绑定 { var upper_code = Location.upper_code.Split('-'); string tasknum = upper_code[0] + "-" + upper_code[1]; var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress.Contains(tasknum)); if (loctionNUM == null) { Location.light_color = "无"; locRepository.Update(Location, d => d.light_color, true); } } else if (Location.gd4 == 0)//代表这个货架还能给下料1口装料 { var a = ""; var upper_code = Location.upper_code.Split('-'); if (Location.gd4 == 0 && Location.gd3 == 0 && a == "") { string WCtasknum = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 var WCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == WCtasknum); if (WCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } //} } if (Location.gd3 == 1 && Location.gd4 == 0 && a == "") { string NCtasknum = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 var NCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == NCtasknum); if (NCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } } if (a != "") { dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == a && d.agv_taskstate == AGVTaskStateEnum.TaskState_Finished.ToString()).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault(); if (agvtask_Hty != null) { bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 100; if (interval) { continue; } } //生成辊分机下料任务 dt_agvtask agvtask = new dt_agvtask() { agv_id = Guid.NewGuid(), agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), agv_fromaddress = plc.PLCDownLoc, agv_toaddress = a, agv_code = "组装AGV调度", agv_remark = "辊分下料任务", agv_taskstate = AGVTaskStateEnum.Create.ToString(), agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), agv_worktype = 1,//工作类型 agv_materielid = "", agv_qty = 1, agv_createtime = DateTime.Now, agv_grade = 0,//任务优先级 agv_userid = "WCS", agv_barcode = "", }; //Location.update_time = DateTime.Now; Location.task = 1; Location.logic_col = 0; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int ztwo = locRepository.Update(Location, d => new { d.task, d.logic_col }, true); if (ztwo == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"【{GFSB}】下料二口任务生成").Write($"生成任务:{agvtask.agv_tasknum},终点货位【{a}】状态:托盘光电检测:{Location.tpgd},-1光电:{Location.gd2},-2光电:{Location.gd1},-3光电:{Location.gd4},-4光电:{Location.gd3},状态:{Location.location_state},设备绑定:{Location.light_color},更新时间:{Location.wireless_time}", $"【{GFSB}】下料二口任务生成"); //WriteDBLog.Info($"【{GFSB}】下料二口任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"【{GFSB}】下料二口任务生成"); } break; } } }//代表有这个设备绑定的货架 else //代表没有这个设备绑定的货架,进行找一个没有设备绑定的货架进行绑定,来给这台设备装料 { List loctionList = new List(); foreach (var item in Routing_Table) { base_ware_location ware_Locations = locRepository.FindFirst(d => d.down_code == item.route_end && d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.status == 1 && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.light_color == "无"); if (ware_Locations == null) { continue; } loctionList.Add(ware_Locations); } if (loctionList.Count != 0) { List Locationlist = loctionList.OrderBy(d => d.update_time).ToList(); foreach (var xLocation in Locationlist) { var a = ""; var upper_code = xLocation.upper_code.Split('-'); if (xLocation.gd4 == 0 && xLocation.gd3 == 0 && a == "") { string NCtasknum = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 var NCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == NCtasknum); if (NCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } //} } if (xLocation.gd3 == 1 && xLocation.gd4 == 0 && a == "") { string WCtasknum = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 var WCloctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == WCtasknum); if (WCloctionNUM == null) { string tasknum = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); if (loctionNUM == null) { a = tasknum; } } } if (a != "") { dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == a && d.agv_taskstate == AGVTaskStateEnum.TaskState_Finished.ToString()).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault(); if (agvtask_Hty != null) { bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 100; if (interval) { continue; } } //生成辊分机下料任务 dt_agvtask agvtask = new dt_agvtask() { agv_id = Guid.NewGuid(), agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), agv_fromaddress = plc.PLCDownLoc, agv_toaddress = a, agv_code = "组装AGV调度", agv_remark = "辊分下料任务", agv_taskstate = AGVTaskStateEnum.Create.ToString(), agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), agv_worktype = 1,//工作类型 agv_materielid = "", agv_qty = 1, agv_createtime = DateTime.Now, agv_grade = 0,//任务优先级 agv_userid = "WCS", agv_barcode = "", }; //Location.update_time = DateTime.Now; xLocation.task = 1; xLocation.logic_col = 0; xLocation.light_color = plc.PLCName; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int ztwo = locRepository.Update(xLocation, d => new { d.task, d.light_color, d.logic_col }, true); if (ztwo == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"【{GFSB}】下料二口任务生成").Write($"生成任务:{agvtask.agv_tasknum},终点货位【{a}】状态:托盘光电检测:{xLocation.tpgd},-1光电:{xLocation.gd2},-2光电:{xLocation.gd1},-3光电:{xLocation.gd4},-4光电:{xLocation.gd3},状态:{xLocation.location_state},设备绑定:{xLocation.light_color},更新时间:{xLocation.wireless_time}", $"【{GFSB}】下料二口任务生成"); //base_ware_location ware_Locations = locRepository.FindFirst(d => d.down_code == xLocation.upper_code ); //if (ware_Locations!=null) //{ // //WriteDBLog.Info($"【{GFSB}】下料任务生成").Write($"货位【{ware_Locations.upper_code}】:货位任务状态:{ware_Locations.task}", $"【{GFSB}】下料任务生成"); //} //WriteDBLog.Info($"【{GFSB}】下料二口任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"【{GFSB}】下料二口任务生成"); } break; } } } } } } } } catch (Exception ex) { WriteLog.GetLog().Write($"正极棍分下料:{DateTime.Now} --------------{ex}", $"正极棍分下料"); } finally { Interlocked.Exchange(ref _readGFBUPSignalso, 0); } }); } } } } #region MyRegion //foreach (var GFSB in GFSBS) //{ // //string SBID = GFSB.Replace("辊分机正极", "");//设备号 // PLCClient plc = WCSService.Clients.Find(v => v.PLCName == GFSB); // if (plc == null) // { // //WriteLog.GetLog("GFZ下料呼叫").Write($"设备:{GFSB} 内容:未连接PLC 时间记录:{DateTime.Now}", "GFZ下料呼叫"); // continue; // } // //bool GYC_RFX1 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest1".ToString(), plc.PLCDescroption));//下料口一下料信号 // //bool GYC_RFX2 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest2".ToString(), plc.PLCDownLoc));//下料口二下料信号 // OperateResult GYC_RFX1 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5693.0"); // OperateResult GYC_RFX2 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5893.0"); // if (GYC_RFX1.Content) // { // //查看当前辊分机设备是否有AGV任务 // var SBtask = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDescroption && (f.agv_taskstate == AGVTaskStateEnum.Create.ToString() || f.agv_taskstate == AGVTaskStateEnum.SendOut.ToString() || f.agv_taskstate == AGVTaskStateEnum.Executing.ToString() || f.agv_taskstate == AGVTaskStateEnum.Complete.ToString())); // //有结束本次循环 // if (SBtask != null) { } // else // { // List Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDescroption); // List loctionList = new List(); // foreach (var item in Routing_Table) // { // base_ware_location ware_Locations = locRepository.FindFirst(d => d.down_code == item.route_end && d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.status == 1 && d.gd1 == 0); // if (ware_Locations == null) // { // continue; // } // loctionList.Add(ware_Locations); // } // if (loctionList.Count != 0) // { // List Locationlist = loctionList.OrderBy(d => d.update_time).ToList(); // foreach (var Location in Locationlist) // { // ////WriteLog.GetLog("GFZ上料呼叫").Write($"设备:{TBSB} 内容:呼叫执行中,缓存架黄灯开灯成功", "时间记录:" + DateTime.Now, "GFZ上料呼叫"); // var a = ""; // //var upper_code = Location.upper_code.Remove(10); // var upper_code = Location.upper_code.Split('-'); // if (Location.gd1 == 0 && Location.gd2 == 0 && a == "")//内侧外侧都没有料优先放内侧 // { // //string tasknumwc = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-1 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致外侧任务未完成,就下发内侧任务) // //var loctionwc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumwc); // //if (loctionwc == null) // //{ // string tasknum = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // if (loctionNUM == null) // { // a = tasknum; // } // //} // } // if (Location.gd2 == 1 && Location.gd1 == 0 && a == "")//内侧有料时放外侧 // { // //string tasknumnc = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致内侧任务未完成,就下发外侧任务) // //var loctionnc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumnc); // //if (loctionnc == null) // //{ // string tasknum = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-2 // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // if (loctionNUM == null) // { // a = tasknum; // } // //} // } // // if (Location.gd4 == 0 && Location.gd3 == 0 && a == "") // //{ // // string tasknumwc = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 1-3 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致外侧任务未完成,就下发内侧任务) // // var loctionwc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumwc); // // if (loctionwc==null) // // { // // string tasknum = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 // // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // // if (loctionNUM == null ) // // { // // a = tasknum; // // } // // } // //} // // if (Location.gd3 == 1 && Location.gd4 == 0 && a == "") // //{ // // string tasknumnc = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 1-4 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致内侧任务未完成,就下发外侧任务) // // var loctionnc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumnc); // // if (loctionnc==null) // // { // // string tasknum= upper_code[0] + "-" + upper_code[1] + "-3";//外侧 // // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // // if (loctionNUM == null ) // // { // // a = tasknum; // // } // // } // //} // if (a != "") // { // //生成辊分机下料任务 // dt_agvtask agvtask = new dt_agvtask() { // agv_id = Guid.NewGuid(), // agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), // agv_fromaddress = plc.PLCDescroption, // agv_toaddress = a, // agv_code = "组装AGV调度", // agv_remark = "辊分下料任务", // agv_taskstate = AGVTaskStateEnum.Create.ToString(), // agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), // agv_worktype = 1,//工作类型 // agv_materielid = "", // agv_qty = 1, // agv_createtime = DateTime.Now, // agv_grade = 0,//任务优先级 // agv_userid = "WCS", // agv_barcode = "", // }; // agvRepository.Add(agvtask, true); // //Location.update_time = DateTime.Now; // Location.task = 1; // Location.logic_col = 0; // var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); // if (entry != null) // { // entry.State = EntityState.Detached; // } // locRepository.Update(Location, d => new { d.task, d.logic_col }, true); // //WriteLog.GetLog("GFZ下料呼叫").Write($"设备:{GFSB}, 内容:呼叫成功,任务生成 时间记录:{DateTime.Now}", "GFZ下料呼叫"); // break; // } // } // } // else // { // //WriteLog.GetLog("GFZ下料呼叫").Write($"设备:{GFSB} 内容:正极辊分机下料呼叫,未找到满足搬运条件的货架,任务生成失败 时间记录:{DateTime.Now}", "GFZ下料呼叫"); // } // } // } // else // { // //WriteLog.GetLog("GFZ上料呼叫").Write($"设备:{GFSB} 内容:无呼叫请求 时间记录:{DateTime.Now}", "GFZ上料呼叫"); // } // if (GYC_RFX2.Content) // { // //查看当前辊分机设备是否有AGV任务 // var SBtask = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDownLoc && (f.agv_taskstate == AGVTaskStateEnum.Create.ToString() || f.agv_taskstate == AGVTaskStateEnum.SendOut.ToString() || f.agv_taskstate == AGVTaskStateEnum.Executing.ToString() || f.agv_taskstate == AGVTaskStateEnum.Complete.ToString())); // //有结束本次循环 // if (SBtask != null) { continue; } // List Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDownLoc); // List loctionList = new List(); // foreach (var item in Routing_Table) // { // base_ware_location ware_Locations = locRepository.FindFirst(d => d.upper_code == item.route_end &&d.location_state == LoctionStateEnum.LocationState_Stored.ToString() && d.status == 1 && d.tpgd==1 && d.gd4 == 0); // if (ware_Locations == null) // { // continue; // } // loctionList.Add(ware_Locations); // } // if (loctionList.Count != 0) // { // List Locationlist = loctionList.OrderBy(d => d.update_time).ToList(); // foreach (var Location in Locationlist) // { // var a = ""; // //var upper_code = Location.upper_code.Remove(10); // var upper_code = Location.upper_code.Split('-'); // //if (Location.gd1 == 0 && Location.gd2 == 0 && a == "")//内侧外侧都没有料优先放内侧 // //{ // // string tasknumwc = upper_code[0] + "-" + upper_code[1] + "-2";//外侧 1-1 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致外侧任务未完成,就下发内侧任务) // // var loctionwc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumwc); // // if (loctionwc==null) // // { // // string tasknum= upper_code[0] + "-" + upper_code[1] + "-1";//外侧 // // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // // if (loctionNUM == null ) // // { // // a = tasknum; // // } // // } // //} // // if (Location.gd2 == 1 && Location.gd1 == 0 && a == "")//内侧有料时放外侧 // //{ // // string tasknumnc = upper_code[0] + "-" + upper_code[1] + "-1";//内侧 1-1 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致内侧任务未完成,就下发外侧任务) // // var loctionnc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumnc); // // if (loctionnc==null) // // { // // string tasknum = upper_code[0] + "-" + upper_code[1] + "-2";//内侧 // // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // // if (loctionNUM == null) // // { // // a = tasknum; // // } // // } // //} // if (Location.gd4 == 0 && Location.gd3 == 0 && a == "") // { // //string tasknumwc = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 1-3 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致外侧任务未完成,就下发内侧任务) // //var loctionwc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumwc); // //if (loctionwc==null) // //{ // string tasknum= upper_code[0] + "-" + upper_code[1] + "-4";//内侧 // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // if (loctionNUM == null ) // { // a = tasknum; // } // //} // } // if (Location.gd3 == 1 && Location.gd4 == 0 && a == "") // { // //string tasknumnc = upper_code[0] + "-" + upper_code[1] + "-4";//内侧 1-4 防止异常情况(AGV执行中异常,把光电挡了或手动送料在这个工位上,导致内侧任务未完成,就下发外侧任务) // //var loctionnc = agvRepository.FindFirst(f => f.agv_toaddress == tasknumnc); // //if (loctionnc==null) // //{ // string tasknum = upper_code[0] + "-" + upper_code[1] + "-3";//外侧 // var loctionNUM = agvRepository.FindFirst(f => f.agv_toaddress == tasknum); // if (loctionNUM == null) // { // a = tasknum; // } // //} // } // if (a!="") // { // //WriteLog.GetLog("GFZ上料呼叫").Write($"设备:{GFSB} 内容:呼叫执行中,缓存架黄灯开灯成功 时间记录:{DateTime.Now}", "GFZ上料呼叫"); // //生成辊分机下料任务 // dt_agvtask agvtask = new dt_agvtask() { // agv_id = Guid.NewGuid(), // agv_tasknum = "KH-" + IdenxManager.GetTaskNo(), // agv_fromaddress = plc.PLCDownLoc, // agv_toaddress = a, // agv_code = "组装AGV调度", // agv_remark = "辊分下料任务", // agv_taskstate = AGVTaskStateEnum.Create.ToString(), // agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(), // agv_worktype = 1,//工作类型 // agv_materielid = "", // agv_qty = 1, // agv_createtime = DateTime.Now, // agv_grade = 0,//任务优先级 // agv_userid = "WCS", // agv_barcode = "", // }; // agvRepository.Add(agvtask, true); // //Location.update_time = DateTime.Now; // Location.task = 1; // Location.logic_col = 0; // var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); // if (entry != null) // { // entry.State = EntityState.Detached; // } // locRepository.Update(Location, d => new { d.task, d.logic_col }, true); // //WriteLog.GetLog("GFZ下料呼叫").Write($"设备:{GFSB}, 内容:呼叫成功,任务生成 时间记录:{DateTime.Now}", "GFZ下料呼叫"); // break; // } // else // { // continue; // } // } // } // else // { // //WriteLog.GetLog("GFZ下料呼叫").Write($"设备:{GFSB} 内容:正极辊分机下料呼叫,未找到满足搬运条件的货架,任务生成失败 时间记录:{DateTime.Now}", "GFZ上料呼叫"); // } // } // else // { // //WriteLog.GetLog("GFZ上料呼叫").Write($"设备:{GFSB} 内容:无呼叫请求 时间记录:{DateTime.Now}", "GFZ上料呼叫"); // } //} #endregion