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