using AutoMapper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Communicator; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.AGVInfo; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_Tasks.ConveyorLineJob.ConveyorLineExtend; using WIDESEAWCS_Tasks.ProductionLineJob; namespace WIDESEAWCS_Tasks { public partial class AGVsignal { /// /// AGV与输送线交互 /// /// /// public static WebResponseContent AGVRequestin(ConveyorLineDTO conveyor) { WebResponseContent content = new WebResponseContent(); try { if (conveyor == null) throw new Exception("请求数据为空"); if (string.IsNullOrEmpty(conveyor.Station)) throw new Exception("站点编号为空"); switch (conveyor.Station) { case "1001": case "1008": content = AGVRequestinConveyorLine(conveyor); break; case "MDX01": content = AGVRequestinProductionLine(conveyor); break; default: throw new Exception($"未定义站台号[Station:{conveyor.Station}]"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// AGV和输送线交互 /// /// public static WebResponseContent AGVRequestinConveyorLine(ConveyorLineDTO conveyor) { WebResponseContent content = new WebResponseContent(); try { CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceName == "输送线") as CommonConveyorLine; if (conveyorLine == null) throw new Exception("未找到输送线设备信息"); if (!conveyorLine.IsConnected) throw new Exception($"输送线设备通讯异常"); switch (conveyor.Type) { case 1: { if (conveyor.Station == "1001") { content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, true, conveyor.Station); if (content.Status) content.Status = conveyorLine.GetValue(ConveyorLine_AGV.ConveyorLinePermitPut, conveyor.Station); } else { content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, true, conveyor.Station); if (content.Status) content.Status = conveyorLine.GetValue(ConveyorLine_AGV.ConveyorLinePermitTake, conveyor.Station); } } break; case 2: break; case 3: { if (conveyor.Station == "1001") { content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, true, conveyor.Station); //if (content.Status) //{ // Thread.Sleep(1000); // conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, false, conveyor.Station); // conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, false, conveyor.Station); //} } else { content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, true, conveyor.Station); //if (content.Status) //{ // Thread.Sleep(1000); // conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, false, conveyor.Station); // conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, false, conveyor.Station); //} } } break; case 4: break; default: throw new Exception($"类型有误[Type:{conveyor.Type}]"); } content = content.Status ? content.OK() : content.Error(); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// AGV和产线交互 /// /// public static WebResponseContent AGVRequestinProductionLine(ConveyorLineDTO conveyor) { WebResponseContent content = new WebResponseContent(); try { OtherDevice? ProductionLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == conveyor.Station) as OtherDevice; if (ProductionLine == null) throw new Exception("未找到产线设备信息"); if (!ProductionLine.IsConnected) throw new Exception($"产线设备通讯异常"); content.Status = ProductionLine.SetValue(ProductionLineDBName.WagvState, conveyor.Type); if (!content.Status) throw new Exception("写入AGV信号失败"); var agvState = ProductionLine.GetValue(ProductionLineDBName.agvState); if (agvState == 3) throw new Exception("产线设备异常"); switch (conveyor.Type) { case 1: if (agvState != conveyor.Type) throw new Exception("产线不允许进入作业"); content.OK(); break; case 2: //if (agvState != conveyor.Type) throw new Exception("产线不允许离开"); content.OK(); break; case 3: content.Status = ProductionLine.SetValue(ProductionLineDBName.Wrequest, 2); //if (content.Status) content.Status = ProductionLine.SetValue(ProductionLineDBName.WagvState, 3); break; } content = content.Status ? content.OK() : content.Error("写入失败"); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 入库输送线人工放货完成 /// /// public static WebResponseContent ReleaseCompleted() { try { CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceName == "输送线") as CommonConveyorLine; if (conveyorLine == null) throw new Exception("未找到输送线设备信息"); if (!conveyorLine.IsConnected) throw new Exception($"输送线设备通讯异常"); conveyorLine.SetValue(ConveyorLine_AGV.WriteRGPutComplete, true, "1001");//人工放货完成 return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } } }