using HslCommunication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using WIDESEA_Common;
using WIDESEA_Common.LogEnum;
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.Find(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())
.Where(r => OutboundStationLayerNo.Contains(r.wcstask_startPoint)
&& (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))).OrderBy(x => x.wcstask_dispatcherTime).FirstOrDefault();
if (null != hisTask)
{
OutboundRequestAction(taskWCSinfoRepository, client);
}
}
///
/// 出库区空托盘/实托出库
///
///
///
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() || r.wcstask_state == TaskState.TaskState_Empty_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()
|| r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString()
|| r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
&& OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).FirstOrDefault();
}
if (null == wcsInfo)
return false;
// 这里加一个判断90201 判断托盘是否为0,判断是否空载
int Barcode = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), 90201.ToString()).ToString());
bool LoadSleep = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), 90201.ToString()).ToString());
if (Barcode != 0 || LoadSleep)
{
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 == 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_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
{
state = TaskState.TaskState_Empty_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_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
{
state = TaskState.TaskState_Empty_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;
}
}
}