using HslCommunication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using WIDESEA_Common;
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 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_RGV_Received.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_RGV_Received.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"))
WriteTaskInfo.WriteTaskInfoAction(wcsInfo, client, lineCode);
}
rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
if (!wcsInfo.wcstask_barcode.Equals(rfidResult))
return true;
logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), lineCode).ToString());
//说明站台已经收到任务数据,等待WCS的启动指令
if (logicValue == 3)
{
//启动任务
client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);
}
else if (logicValue == 4 || logicValue == 5)
{
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);
}
}
catch (Exception ex)
{
WriteLog.Info(lineCode).Write($"{ DateTime.Now }出库站台调度失败:{ex.Message}", lineCode);
}
return true;
}
}
}