using HslCommunication;
|
using Microsoft.EntityFrameworkCore;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
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;
|
|
namespace WIDESEA_WCS
|
{
|
public partial class StackerExecutor
|
{
|
public static object requestFJGF = new object();//requestZJJK
|
private static int _readGFBDOWNSignalsoF = 0;//_readZTBUPSignalso
|
/// <summary>
|
/// 负极辊分下料工作逻辑
|
/// </summary>
|
/// <param name="client"></param>
|
public static void F_GFSB_DownTask()
|
{
|
|
if (Interlocked.Exchange(ref _readGFBDOWNSignalsoF, 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<string> GFSBS = new List<string> { "辊分机负极1", "辊分机负极2", "辊分机负极3", "辊分机负极4" };
|
foreach (var GFSB in GFSBS)
|
{
|
//string SBID = GFSB.Replace("辊分机正极", "");//设备号
|
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == GFSB);
|
if (plc == null)
|
{
|
//WriteLog.GetLog("GFF下料呼叫").Write($"设备:{GFSB} 内容:未连接PLC 时间记录:{DateTime.Now}", "GFF下料呼叫");
|
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<bool> GYC_RFX1 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5693.0");
|
if (!GYC_RFX1.IsSuccess)
|
{
|
continue;
|
}
|
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
|
{
|
#region 记录下料请求信号
|
WriteLog.GetLog().Write($"下料口1请求:{GYC_RFX1.Content}---{DateTime.Now}", $"{plc.PLCName}下料请求");
|
#endregion
|
List<base_routing_table> 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.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.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;
|
}
|
}
|
//}
|
}
|
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<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int fone = locRepository.Update(Location, d => new { d.task, d.logic_col }, true);
|
if (fone == 1)
|
{
|
agvRepository.Add(agvtask, true);
|
}
|
break;
|
}
|
}
|
|
}//代表有这个设备绑定的货架
|
else //代表没有这个设备绑定的货架,进行找一个没有设备绑定的货架进行绑定,来给这台设备装料
|
{
|
List<base_ware_location> loctionList = new List<base_ware_location>();
|
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<base_ware_location> 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<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int fone = locRepository.Update(xLocation, d => new { d.task, d.light_color, d.logic_col }, true);
|
if (fone == 1)
|
{
|
agvRepository.Add(agvtask, true);
|
}
|
|
break;
|
}
|
|
}
|
|
}
|
|
}
|
}
|
}
|
OperateResult<bool> GYC_RFX2 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5893.0");
|
if (!GYC_RFX2.IsSuccess)
|
{
|
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<base_routing_table> 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.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.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<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int ftwo = locRepository.Update(Location, d => new { d.task, d.logic_col }, true);
|
if (ftwo == 1)
|
{
|
agvRepository.Add(agvtask, true);
|
}
|
break;
|
}
|
}
|
else
|
{
|
//代表这个货架无法装下料1口的料了,但是下料2口还可以装料在这个货架上,货架不能取消设备绑定
|
}
|
}//代表有这个设备绑定的货架
|
else //代表没有这个设备绑定的货架,进行找一个没有设备绑定的货架进行绑定,来给这台设备装料
|
{
|
List<base_ware_location> loctionList = new List<base_ware_location>();
|
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<base_ware_location> 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 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 (xLocation.gd3 == 1 && xLocation.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;
|
xLocation.task = 1;
|
xLocation.logic_col = 0;
|
xLocation.light_color = plc.PLCName;
|
var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int ftwo = locRepository.Update(xLocation, d => new { d.task, d.light_color, d.logic_col }, true);
|
if (ftwo == 1)
|
{
|
agvRepository.Add(agvtask, true);
|
}
|
break;
|
}
|
|
}
|
}
|
|
}
|
}
|
}
|
|
}
|
|
}
|
catch (Exception ex)
|
{
|
WriteLog.GetLog().Write($"负极棍分下料:{DateTime.Now} --------------{ex}", $"负极棍分下料调度");
|
}
|
finally
|
{
|
Interlocked.Exchange(ref _readGFBDOWNSignalsoF, 0);
|
|
}
|
});
|
|
}
|
}
|
|
}
|
}
|
#region MyRegion
|
//foreach (var GFSB in GFSBS)
|
//{
|
// string SBID = GFSB.Replace("辊分机正极", "");//设备号
|
// if (WCSService.Clients == null)
|
// {
|
// return;
|
// }
|
// PLCClient plc = WCSService.Clients.Find(v => v.PLCName == GFSB);
|
// if (plc == null)
|
// {
|
// //WriteLog.GetLog("GFF上料呼叫").Write($"设备:{GFSB} 内容:未连接PLC 时间记录: DateTime.Now", "GFF上料呼叫");
|
// continue;
|
// }
|
// 当前设备有没有上料请求
|
// bool isSBWork1 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest1".ToString(), plc.PLCDescroption));//出料口1
|
|
// OperateResult<bool> GYC_RFX1 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5693.0");
|
// OperateResult<bool> GYC_RFX2 = plc.MelsecPLCClient.MelsecMcNetClient.ReadBool("D5893.0");
|
// bool GYC_RFX1 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest1".ToString(), plc.PLCDescroption));
|
// bool GYC_RFX2 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest2".ToString(), plc.PLCDownLoc));
|
// bool isSBWork2 = Convert.ToBoolean(plc.ReadValue("R_Feedingrequest2".ToString(), plc.PLCDescroption));//出料口2
|
// 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<base_routing_table> Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDescroption);
|
// List<base_ware_location> loctionList = new List<base_ware_location>();
|
// 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.location_state == LoctionStateEnum.GFBlanking.ToString() && d.status == 1) && d.tpgd == 1 && d.gd1 == 0);
|
// if (ware_Locations == null)
|
// {
|
// continue;
|
// }
|
// loctionList.Add(ware_Locations);
|
// }
|
|
// if (loctionList.Count != 0)
|
// {
|
// List<base_ware_location> 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.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 != "")
|
// {
|
// 生成辊分机下料任务
|
// 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<base_ware_location>().FirstOrDefault();
|
// if (entry != null)
|
// {
|
// entry.State = EntityState.Detached;
|
// }
|
// locRepository.Update(Location, d => new { d.task, d.logic_col }, true);
|
// //WriteLog.GetLog("GFF下料呼叫").Write($"设备:{GFSB}, 内容:呼叫成功,任务生成 时间记录:{DateTime.Now}", "GFF下料呼叫");
|
// break;
|
|
// }
|
|
// }
|
// }
|
// else
|
// {
|
// //WriteLog.GetLog("GFF下料呼叫").Write($"设备:{GFSB} 内容:负极辊分机下料呼叫,未找到满足搬运条件的货架,任务生成失败 时间记录:{DateTime.Now}", "GFF下料呼叫");
|
// }
|
// }
|
|
// }
|
// else
|
// {
|
|
// //WriteLog.GetLog("GFF下料呼叫").Write($"设备:{GFSB} 内容:无呼叫请求 时间记录:{DateTime.Now}", "GFF下料呼叫");
|
// }
|
// 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<base_routing_table> Routing_Table = routingRepository.Find(d => d.route_began == plc.PLCDownLoc);
|
// List<base_ware_location> loctionList = new List<base_ware_location>();
|
// 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 && d.task == 2);
|
// if (ware_Locations == null)
|
// {
|
// continue;
|
// }
|
// loctionList.Add(ware_Locations);
|
// }
|
|
// if (loctionList.Count != 0)
|
// {
|
// List<base_ware_location> 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)//内侧外侧都没有料优先放内侧
|
// {
|
// 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 == 0 && Location.gd1 == 1)//内侧有料时放外侧
|
// {
|
// 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 == "")
|
// {
|
// a = tasknum;
|
// }
|
// }
|
// }
|
// if (Location.gd4 == 0 && Location.gd3 == 0)
|
// {
|
// 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 == "")
|
// {
|
// a = tasknum;
|
// }
|
// }
|
// }
|
// if (Location.gd3 == 0 && Location.gd4 == 1)
|
// {
|
// 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 == "")
|
// {
|
// 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_barcode = "",
|
// agv_qty = 1,
|
// agv_createtime = DateTime.Now,
|
// agv_grade = 0,//任务优先级
|
// agv_userid = "WCS",
|
// };
|
// agvRepository.Add(agvtask, true);
|
// Location.task = 1;
|
// Location.logic_col = 0;
|
// var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().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
|