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; } } }