using HslCommunication;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using WIDESEA_Common;
|
using WIDESEA_Common.TaskEnum;
|
using WIDESEA_Common.Tools;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_Entity.DomainModels;
|
using WIDESEA_Services;
|
using WIDESEA_Services.IRepositories;
|
using WIDESEA_Services.Repositories;
|
using WIDESEA_Services.Services;
|
using WIDESEA_WCS.WCSClient;
|
|
namespace WIDESEA_WCS.Jobs.ConveyorLine.OutboundArea
|
{
|
public partial class OutboundAreaDispatch
|
{
|
|
public static void OutboundCZ_PLC(IDt_TaskWCSinfoRepository taskWCSinfoRepository,IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
|
{
|
//车轴在出库口下发输送线任务
|
Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
|
&& (OutboundStationLayerNo.Contains(r.wcstask_startPoint)));
|
if (null != hisTask)
|
{
|
if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
|
{
|
OutboundRequestAction(taskWCSinfoRepository, client);
|
}
|
|
|
}
|
}
|
|
/// <summary>
|
/// 出库区空托盘出库
|
/// </summary>
|
/// <param name="taskWCSinfoRepository"></param>
|
/// <param name="client"></param>
|
public static bool OutboundRequestAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client)
|
{
|
string lineCode = "OutboundArea";
|
try
|
{
|
string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
|
//查询出库待任务
|
Dt_TaskWCSinfo wcsInfo = null;
|
if (!string.IsNullOrEmpty(rfidResult) && !"0".Equals(rfidResult))
|
wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && (r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()
|
|| r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString()));
|
//wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && r.wcstask_state == TaskState.TaskState_Assigned.ToString());
|
else
|
{
|
wcsInfo = taskWCSinfoRepository.Find(r => r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString()
|
&& OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).FirstOrDefault();
|
}
|
if (null == wcsInfo)
|
return false;
|
|
//读取逻辑控制值 查看线体状态,准备给线体下发任务信息
|
int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), lineCode).ToString());
|
//说明工位在等待调度,准备下发任务
|
if (logicValue == 1 || logicValue == 2)
|
{
|
if (!wcsInfo.wcstask_state.Contains("Executing"))
|
{
|
//写入托盘条码
|
bool writeTaskNumber = client.WriteValue(CLineInfoDBName.W_Line_TaskNumber.ToString(), wcsInfo.wcstask_startPoint, wcsInfo.wcstask_taskNumber);
|
bool writeBarcode = client.WriteValue(CLineInfoDBName.W_Line_Barcode.ToString(), wcsInfo.wcstask_startPoint, wcsInfo.wcstask_barcode);
|
WriteTaskInfo.WriteTaskInfoAction(wcsInfo, client, lineCode);
|
}
|
}
|
else if (logicValue == 3)
|
{
|
//启动任务
|
bool plclogicbool=client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);
|
if(plclogicbool)
|
{
|
string state = TaskState.TaskState_HoisterExecuting.ToString();
|
if (wcsInfo.wcstask_state == state)
|
return true;
|
wcsInfo.wcstask_state = state;
|
wcsInfo.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(wcsInfo, true);
|
}
|
|
}
|
else if (logicValue == 4 || logicValue == 5)
|
{
|
string taskplc_Result = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
|
if(taskplc_Result== wcsInfo.wcstask_barcode)
|
{
|
string state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
|
if (wcsInfo.wcstask_state == state)
|
return true;
|
wcsInfo.wcstask_state = state;
|
wcsInfo.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(wcsInfo, true);
|
}
|
else
|
{
|
Dt_TaskWCSinfo wcsInfoPLC = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString());
|
if (wcsInfoPLC != null)
|
{
|
string state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
|
if (wcsInfoPLC.wcstask_state == state)
|
return true;
|
wcsInfoPLC.wcstask_state = state;
|
wcsInfoPLC.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(wcsInfoPLC, true);
|
}
|
}
|
|
|
}
|
}
|
catch (Exception ex)
|
{
|
WriteLog.Info(lineCode).Write($"{ DateTime.Now }出库站台调度失败:{ex.Message}", lineCode);
|
}
|
return true;
|
}
|
}
|
}
|