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
|
{
|
|
/// <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_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;
|
}
|
}
|
}
|