|
|
|
@ -85,7 +85,7 @@ namespace SlnMesnac.Business
|
|
|
|
|
|
|
|
|
|
_configInfoBusiness = configInfoBusiness;
|
|
|
|
|
|
|
|
|
|
TestTran();
|
|
|
|
|
// TestTran();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -204,34 +204,48 @@ namespace SlnMesnac.Business
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!plc.readBoolByAddress(GetPlcAddressByConfigKey("设备叫料")))
|
|
|
|
|
{
|
|
|
|
|
// RefreshMessage("3F等待设备叫料信号触发......");
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesProductPlan prodPlan = _mesProductPlanService.GetStartedProdPlan(out MesProductPlanDto productPlanDto);
|
|
|
|
|
if (prodPlan == null || productPlanDto == null)
|
|
|
|
|
{
|
|
|
|
|
//throw new ArgumentException($"未获取到需要执行的生产计划");
|
|
|
|
|
RefreshMessage($"未获取到需要执行的生产计划");
|
|
|
|
|
RefreshMessage($"3F未获取到需要执行的生产计划");
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BaseRealTask task = _baseRealTaskService.GetExeTask();
|
|
|
|
|
if (task != null)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WcsTaskManual wcsTaskManual = sqlSugarClient.AsTenant().GetConnection("mes").Queryable<WcsTaskManual>().Where(x=>x.TaskType==999).First();
|
|
|
|
|
WcsTask wcsTask = sqlSugarClient.AsTenant().GetConnection("mes").Queryable<WcsTask>().Where(x=>x.NextPointId==9 && x.TaskType==41).First();
|
|
|
|
|
if(wcsTaskManual!=null || wcsTask != null)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("已经叫料,请等待AGV送料......");
|
|
|
|
|
RefreshMessage("3F已经叫料,请等待AGV送料......");
|
|
|
|
|
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!plc.readBoolByAddress(GetPlcAddressByConfigKey("设备叫料")))
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("等待设备叫料信号触发......");
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//BaseRealTask task = _baseRealTaskService.GetExeTask();
|
|
|
|
|
//if (task != null)
|
|
|
|
|
//{
|
|
|
|
|
// RefreshMessage("已经叫料,请等待AGV送料......");
|
|
|
|
|
|
|
|
|
|
// Thread.Sleep(5000);
|
|
|
|
|
// continue;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
RefreshMessage("设备要料信号触发成功");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RefreshMessage("3F设备要料信号触发成功");
|
|
|
|
|
|
|
|
|
|
RefreshProdPlanExecEvent?.Invoke(prodPlan);
|
|
|
|
|
|
|
|
|
@ -253,17 +267,17 @@ namespace SlnMesnac.Business
|
|
|
|
|
if (ApplyDeliveryHandle(wmsRaw.rawOutstockId.ToString()))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
RefreshMessage("根据计划自动申请叫料成功");
|
|
|
|
|
RefreshMessage("3F根据计划自动申请叫料成功");
|
|
|
|
|
#region 本地创建一个叫料任务
|
|
|
|
|
BaseRealTask realTask = new BaseRealTask();
|
|
|
|
|
realTask.PlanCode = prodPlan.PlanCode;
|
|
|
|
|
realTask.PlanAmount = prodPlan.PlanAmount;
|
|
|
|
|
realTask.PlanComplete = prodPlan.CompleteAmount;
|
|
|
|
|
realTask.MaterialId = prodPlan.MaterialId;
|
|
|
|
|
realTask.Status = 1;
|
|
|
|
|
realTask.CreateTime = DateTime.Now;
|
|
|
|
|
realTask.UpdateTime = DateTime.Now;
|
|
|
|
|
_baseRealTaskService.InsertTask(realTask);
|
|
|
|
|
//BaseRealTask realTask = new BaseRealTask();
|
|
|
|
|
//realTask.PlanCode = prodPlan.PlanCode;
|
|
|
|
|
//realTask.PlanAmount = prodPlan.PlanAmount;
|
|
|
|
|
//realTask.PlanComplete = prodPlan.CompleteAmount;
|
|
|
|
|
//realTask.MaterialId = prodPlan.MaterialId;
|
|
|
|
|
//realTask.Status = 1;
|
|
|
|
|
//realTask.CreateTime = DateTime.Now;
|
|
|
|
|
//realTask.UpdateTime = DateTime.Now;
|
|
|
|
|
//_baseRealTaskService.InsertTask(realTask);
|
|
|
|
|
#endregion
|
|
|
|
|
plc.writeBoolByAddress(GetPlcAddressByConfigKey("设备叫料"), false);
|
|
|
|
|
}
|
|
|
|
@ -297,34 +311,44 @@ namespace SlnMesnac.Business
|
|
|
|
|
//mes计划
|
|
|
|
|
MesProductPlan prodPlan = null;
|
|
|
|
|
//本地叫料任务
|
|
|
|
|
BaseRealTask localPlan = null;
|
|
|
|
|
// BaseRealTask localPlan = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
localPlan = _baseRealTaskService.GetExeTask();
|
|
|
|
|
// localPlan = _baseRealTaskService.GetExeTask();
|
|
|
|
|
|
|
|
|
|
if (localPlan == null)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("本地未获取到叫料任务......");
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//if (localPlan == null)
|
|
|
|
|
//{
|
|
|
|
|
// RefreshMessage("本地未获取到叫料任务......");
|
|
|
|
|
// Thread.Sleep(3000);
|
|
|
|
|
// continue;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (plc == null)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("读取物料到位信号,PLC连接信息为空......");
|
|
|
|
|
// RefreshMessage("读取物料到位信号,PLC连接信息为空......");
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断请求翻转信号
|
|
|
|
|
if (!plc.readBoolByAddress(GetPlcAddressByConfigKey("物料到位")))
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("等待物料到位信号触发......");
|
|
|
|
|
// RefreshMessage("等待物料到位信号触发......");
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WcsTask wcsTask = sqlSugarClient.AsTenant().GetConnection("mes").Queryable<WcsTask>().Where(x => x.NextPointId == 9 && (x.TaskType == 41 || x.TaskType == 42)).First();
|
|
|
|
|
if (wcsTask == null)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage("3F到位信号触发,但是未检测到有原材料出库任务......");
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO 投料时间校验
|
|
|
|
|
bool timeCheck = JudgeProductTime();
|
|
|
|
|
if (!timeCheck)
|
|
|
|
@ -332,13 +356,13 @@ namespace SlnMesnac.Business
|
|
|
|
|
Thread.Sleep(1000 * 15);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
RefreshMessage($"投料时间校验通过");
|
|
|
|
|
RefreshMessage($"3F投料时间校验通过");
|
|
|
|
|
|
|
|
|
|
// 调用调度接口,判断AGV小车是否已经离开到位,否则不允许投料
|
|
|
|
|
bool positionCheck = JudgeAgvPosition();
|
|
|
|
|
if (!positionCheck)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage($"收到物料到位信号,但是AGV还未离开,禁止投料");
|
|
|
|
|
RefreshMessage($"3F收到物料到位信号,但是AGV还未离开,禁止投料");
|
|
|
|
|
Thread.Sleep(1000 * 5);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
@ -348,7 +372,7 @@ namespace SlnMesnac.Business
|
|
|
|
|
|
|
|
|
|
if (productPlanDto == null || prodPlan == null)
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage($"收到物料到位信号,未获取到正在执行的生产计划,请开始执行计划");
|
|
|
|
|
RefreshMessage($"3F收到物料到位信号,未获取到正在执行的生产计划,请开始执行计划");
|
|
|
|
|
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
continue;
|
|
|
|
@ -396,21 +420,17 @@ namespace SlnMesnac.Business
|
|
|
|
|
|
|
|
|
|
sqlSugarClient.AsTenant().BeginTran();
|
|
|
|
|
//1.完成本地计划
|
|
|
|
|
if (localPlan != null)
|
|
|
|
|
{
|
|
|
|
|
List<BaseRealTask> localList = _baseRealTaskService.Query(x => x.Status != 2);
|
|
|
|
|
foreach (var item in localList)
|
|
|
|
|
{
|
|
|
|
|
item.Status = 2;
|
|
|
|
|
item.UpdateTime = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
sqlSugarClient.AsTenant().GetConnection("local").Updateable(localList).ExecuteCommand();
|
|
|
|
|
//localPlan.Status = 2;
|
|
|
|
|
//localPlan.UpdateTime = DateTime.Now;
|
|
|
|
|
//sqlSugarClient.AsTenant().GetConnection("local").Updateable(localPlan).ExecuteCommand();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//if (localPlan != null)
|
|
|
|
|
//{
|
|
|
|
|
// List<BaseRealTask> localList = _baseRealTaskService.Query(x => x.Status != 2);
|
|
|
|
|
// foreach (var item in localList)
|
|
|
|
|
// {
|
|
|
|
|
// item.Status = 2;
|
|
|
|
|
// item.UpdateTime = DateTime.Now;
|
|
|
|
|
// }
|
|
|
|
|
// sqlSugarClient.AsTenant().GetConnection("local").Updateable(localList).ExecuteCommand();
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
//2.生成小包条码
|
|
|
|
|
GenerateBarcode(40);
|
|
|
|
|
|
|
|
|
@ -604,7 +624,7 @@ namespace SlnMesnac.Business
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RefreshMessage($"收到物料到位请求投料信号,但是距离上次投料不满20min,禁止投料");
|
|
|
|
|
RefreshMessage($"收到物料到位请求投料信号,投料间隔:{IntervalMin}min,距上次投料:{systemRunTime}min,禁止投料");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|