From 429bb4abbaea6fd6be33dcf62735d4ada5070b63 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期日, 19 五月 2024 17:51:03 +0800 Subject: [PATCH] 优化逻辑提高AGV任务效率 --- 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs | 60 ++++ 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs | 4 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/新文件夹/GetLocation.cs | 6 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs | 71 ++-- 代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs | 2 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs | 41 ++ 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs | 28 + 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs | 100 ++++--- 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs | 2 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs | 47 ++ 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs | 46 +++ 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs | 1 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs | 4 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs | 24 + 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs | 104 ++++++ 代码管理/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json | 3 代码管理/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json | 4 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs | 108 +++++++ 代码管理/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs | 6 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs | 15 代码管理/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs | 116 ++++++++ 代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs | 17 22 files changed, 665 insertions(+), 144 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs" index 2e3dab7..e2c7715 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs" @@ -31,6 +31,10 @@ /// <summary> /// 寮傚父 /// </summary> - Abnormal + Abnormal, + /// <summary> + /// 妗佹灦涓嬫枡 + /// </summary> + Load } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs" index ed61b2b..c1ad6b1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs" @@ -12,6 +12,7 @@ using WIDESEA_Comm.LogInfo; using WIDESEA_Comm.TaskNo; using WIDESEA_Core.EFDbContext; +using WIDESEA_Core.Extensions; using WIDESEA_Core.FreeDB; using WIDESEA_Entity.DomainModels; using WIDESEA_WCS.IRepositories; @@ -544,7 +545,7 @@ station.heatNumber = Mes_Work.heatID; station.tray_status = "StrogeTray"; } - + station.remark = ""; var count = stationinfoRepository.Update(station, true); if (count < 1) throw new Exception($"涓嬫枡浣嶄俊鎭洿鏂板け璐ワ紒涓嬫枡浣嶇紪鍙凤細{station.stationCode}"); @@ -580,8 +581,6 @@ var Request = (bool)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Request_Load").First(), client); if (!Request) continue; - //var Area = client.ReadByOrder<Int16>("W_AreaNr", name);//璇诲彇璐т綅鍙蜂俊鎭� - //if (Area != 0) continue; #region 璇诲彇妗佹灦淇℃伅 var Wheel_Type = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Wheel_Type").First(), client);//杞﹁疆绫诲瀷 @@ -599,6 +598,7 @@ client.WriteByOrder("W_Enabl_Load", false, name);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 //WriteDBLog.Error(name, $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n\n鏈煡璇㈠埌宸ュ崟淇℃伅", "PCS"); WriteLog.Write_Log(name + "鐢宠鏀炬枡寮傚父", Wheel_id, "鏌ヨ鏈哄姞宸ュ伐鍗�", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN鍙凤細{Wheel_id}鏈煡璇㈠埌宸ュ崟淇℃伅\n鍐欏叆妗佹灦淇℃伅锛歕n鏄惁鍏佽涓嬫枡锛歿false}"); + continue; } @@ -615,6 +615,8 @@ #endregion + + var wheel = Pipeline.QueryMateriel(Work.drawingNo); var wheel1 = Pipeline.QueryMateriel1(Work.drawingNo); if (wheel == null && wheel1 == null) @@ -626,6 +628,17 @@ #endregion continue; } + + #region 鎹㈠浘鍙�,涓嬫枡鍙e叾浠栧浘鍙锋墭鐩樺叏閮ㄥ叆搴� + var stations = Stations.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).ToList(); + foreach (var station in stations) + { + if (station.stationCode == NGStation || name == "3鍗曞厓涓嬫枡鍖�") + agvtask(stationinfoRepository, station, Work, "TaskType_OutsourceInbound"); + else + agvtask(stationinfoRepository, station, Work, "TaskType_Inbound"); + } + #endregion var PartStatus = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PartStatus").First(), client);//1:ok;2:nok @@ -669,12 +682,9 @@ if (Stationinfo == null) { #region 瑙﹀彂NG浠诲姟 - var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).FirstOrDefault(); + var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.Number != Work.workOrder && x.quantity > 0).FirstOrDefault(); if (NG != null) - { - if (NG.stationType != Work.drawingNo || NG.Number != Work.workOrder) - agvtask(stationinfoRepository, NG, Work, "TaskType_OutsourceInbound"); - } + agvtask(stationinfoRepository, NG, Work, "TaskType_OutsourceInbound"); #endregion Stationinfo = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 0).FirstOrDefault(); @@ -685,9 +695,9 @@ { #region 鎹㈢被鍨嬬洿鎺ュ叆搴� - var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault(); - if (stationinfo1 != null) - agvtask(stationinfoRepository, stationinfo1, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); + //var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault(); + //if (stationinfo1 != null) + // agvtask(stationinfoRepository, stationinfo1, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); #endregion #region 鎵樼洏杞﹁疆鍫嗗灈绗洓涓椂涓嬪彂鍙﹀涓�涓倝鍙风殑鍏ュ簱浠诲姟 @@ -769,6 +779,8 @@ client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//鎵樼洏涓婄殑绗嚑涓溅杞� client.WriteByOrder("W_Storage_Type", (Int16)1, name);//鎵樼洏绫诲瀷1-妯斁;2-绔栨斁(鏆傛椂鍙湁妯斁鎵樼洏) client.WriteByOrder("W_Enabl_Load", true, name);//鏄惁鍏佽 + Stationinfo.remark = "妗佹灦涓嬫枡"; + stationinfoRepository.Update(Stationinfo, true); #region 鏃ュ織璁板綍 //WriteDBLog.Success(name + "鍏佽鏀炬枡", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n杞瀷ID锛歿Wheel_Type}\n杞﹁疆鐘舵�侊細OK" +$"\n璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}" + // $"\n\n鍐欏叆妗佹灦淇℃伅锛歕n涓嬫枡浣嶅彿锛歿area}\n绗嚑涓溅杞細{(Stationinfo.quantity + 1)}\n鎵樼洏绫诲瀷锛�1\nW_Enabl_Load锛歵rue", "PCS"); @@ -785,7 +797,7 @@ #region 娌℃墭鐩樺彲鐢�,瑙﹀彂鍏ュ簱浠诲姟 if (!Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state != LocationStateEnum.Stroge.ToString()).Any()) { - var station = Stations.Where(x => x.enable && x.stationCode != NGStation).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); + var station = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString()).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); agvtask(stationinfoRepository, station, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); } #endregion @@ -827,6 +839,7 @@ Stationinfo.tray_type = Stationinfo.tray_type == "SmallTray" ? "SmallTray/LargeTray" : "LargeTray/SmallTray"; Stationinfo.remark = "鎵樼洏绫诲瀷涓嶄竴鑷撮渶鏇存崲鎵樼洏"; stationinfoRepository.Update(Stationinfo, true); + continue; } #endregion var Pipelinedetails = plcRepository.Find(x => x.plcdetail_iotype == Pipelineplc.plcinfo_iotyep && x.plcdetail_number == Stationinfo.stationCode).ToList(); @@ -880,6 +893,8 @@ client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//鎵樼洏涓婄殑绗嚑涓溅杞� client.WriteByOrder("W_Storage_Type", (Int16)1, name);//鎵樼洏绫诲瀷1-妯斁;2-绔栨斁(鏆傛椂鍙湁妯斁鎵樼洏) client.WriteByOrder("W_Enabl_Load", true, name);//鏄惁鍏佽 + Stationinfo.remark = "妗佹灦涓嬫枡"; + stationinfoRepository.Update(Stationinfo, true); #region 鏃ュ織璁板綍 //WriteDBLog.Success(name + "鍏佽鏀炬枡", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n杞瀷ID锛歿Wheel_Type}\n杞﹁疆鐘舵�侊細NG" +$"\n璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}" + // $"\n\n鍐欏叆妗佹灦淇℃伅锛歕n涓嬫枡浣嶅彿锛歿area}\n绗嚑涓溅杞細{(Stationinfo.quantity + 1)}\n鎵樼洏绫诲瀷锛�1\nW_Enabl_Load锛歵rue", "PCS"); @@ -914,6 +929,8 @@ { VOLContext Context = new VOLContext(); Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); + IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); + Work = workinfoRepository.Find(x => x.workOrder == stationinfo.Number && x.processCode == "17").FirstOrDefault(); var task = agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).FirstOrDefault(); if (task != null) return; if (!string.IsNullOrEmpty(Work.area)) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs" index c67fabd..4870fd0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs" @@ -35,16 +35,19 @@ Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); List<string> strings = new List<string>() { }; var stations = stationinfoRepository.Find(x => x.stationCode.Contains("X") || x.stationCode.Contains("W01001004") || x.stationCode.Contains("W01001005")).ToList(); - stations = stations.Where(x => x.location_state == "Empty" && x.enable).ToList(); + stations = stations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable).ToList(); foreach (var station in stations) { if (agvtaskRepository.Find(x => x.agv_toaddress == station.stationCode).Any()) continue; var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", station.stationCode);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� var MaterialSignal = Pipeline_client.ReadByOrder<Int16>("R_MaterialSignal", station.stationCode);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� + if (PalletSignal == 2 && MaterialSignal == 2) { - var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); + if (station.remark == TrayTypeEnum.SmallTray.ToString() || station.remark == TrayTypeEnum.LargeTray.ToString()) station.tray_type = station.remark; + + var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress) && x.agv_Traytype == station.tray_type).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); if (agv_task != null) { agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); @@ -64,12 +67,12 @@ agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), agv_grade = station.stationCode.Contains("W0100100") ? 3 : 2, agv_createtime = DateTime.Now, - agv_taskstate = "Queue", + agv_taskstate = AGVTaskStateEnum.Queue.ToString(), agv_qty = 1, - agv_tasktype = "TaskType_EmptyPallet", + agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(), agv_toaddress = station.stationCode, agv_userid = "绯荤粺", - agv_TrayStatus = "EmptyTray",// station.tray_status, + agv_TrayStatus = TrayStateEnum.EmptyTray.ToString(),// station.tray_status, agv_Traytype = station.tray_type }; station.location_state = LocationStateEnum.Busy.ToString(); @@ -77,7 +80,7 @@ agvtaskRepository.Add(taskPart, true); WriteDBLog.Success("鍒涘缓琛ョ┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿taskPart.agv_tasknum}", "PCS"); } - + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs" index e1bb7ba..182dbce 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs" @@ -76,7 +76,15 @@ VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); - OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + if (station.area == "10" || station.area == "11") + { + OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + } + else + { + OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + } + } catch (Exception ex) { @@ -124,25 +132,40 @@ var area = task.agv_Traytype == "SmallTray" ? "11" : "10"; #region 浼樺厛鍑�3搴撳尯鍐呯┖鎵樼洏 + //if (area == "11") + //{ + // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); + // if (EmptyStation == null) + // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); + // if (EmptyStation != null) + // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); + // if (EmptyStation != null)//绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔� + // if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; + // //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; + //} + #endregion + + #region 鏌ユ壘AB搴撳尯鍙嚭搴撶┖鎵樿揣浣� if (area == "11") { - EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); - if (EmptyStation == null) - EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); - if (EmptyStation != null) - EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); - if (EmptyStation != null)//绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔� - if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; - //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; + //EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault(); + EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.area).ThenBy(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); + if (EmptyStation != null)//蹇呴』鍑哄畬AB搴撶┖鎵樻墠鑳藉嚭绌烘墭鍖� + if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) return;// EmptyStation = null; } #endregion #region 鏌ユ壘绌烘墭搴撳尯 if (EmptyStation == null) - EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderBy(x => x.column).FirstOrDefault(); + EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); + #endregion + + #region 绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔� if (EmptyStation != null) - if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; - //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; + if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; + #endregion + + #region 鏇存柊琛ョ┖鎵橀槦鍒椾换鍔� if (EmptyStation != null) { var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", task.agv_toaddress);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" index 02427d5..ca16830 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" @@ -34,7 +34,7 @@ Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); - var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderBy(x => x.CreateTime).ToList(); + var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderByDescending(x => x.CreateTime).ToList(); foreach (var Mes_Work in Mes_Works) { var inventory = inventoryRepository.Find(x => x.SN == Mes_Work.SN).FirstOrDefault(); @@ -53,6 +53,8 @@ stationinfo = stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.column).FirstOrDefault(); if (stationinfo != null) { + if (agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).Any()) continue; + if (stationinfoRepository.Find(x => x.line == stationinfo.line && x.area == stationinfo.area && x.column > stationinfo.column && !x.enable).Any()) continue; if (string.IsNullOrEmpty(stationinfo.bindSN)) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs" index 393c991..444ca4f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs" @@ -49,7 +49,7 @@ #endregion /// <summary> - /// 鍒涘缓鏇存崲鎵樼洏浠诲姟 + /// 鍒涘缓鏇存崲鎵樼洏浠诲姟,闇�淇敼 /// </summary> public static void ReplaceTrayTask() { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs" index 12e45aa..385af08 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs" @@ -172,7 +172,6 @@ else GetStation.EmptyPalletStation(agvtask); } - WriteDBLog.Success("鏇存柊绌烘墭闃熷垪浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS"); } else if (agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() || agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString())//澶栧崗搴撳叆搴�/AB搴撳叆搴� { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs" index 7c0a658..9722c24 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs" @@ -39,7 +39,7 @@ dt_stationinfo TargetLocation = null; #region 瀵绘壘宸插垎閰嶅悓鍥惧彿鍏ュ簱浠诲姟搴撲綅 - TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3")).FirstOrDefault(); + TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.enable && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3") && x.enable).FirstOrDefault(); if (TargetLocation != null) { TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault(); @@ -132,11 +132,11 @@ #region 鏈壘鍒板簱瀛樻垨褰撳墠搴撳瓨琛屽凡婊�,瀵绘壘鏂扮殑涓�琛� var area = GetArea(mesinfo.quantity, agvtask.agv_Traytype); - TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault(); + TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault(); if (TargetLocation == null && area != "4") { area = area == "2" ? "3" : "2"; - TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault(); + TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault(); } #region 鏌ョ湅褰撳墠绌鸿揣浣嶅悗鏄惁瀛樺湪鏈夋枡 diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json" index 1ecb410..1d06fa1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json" @@ -16,8 +16,8 @@ "Connection": { "DBType": "MsSql", //MySql/MsSql/PgSql //鏁版嵁搴撶被鍨嬶紝濡傛灉浣跨敤鐨勬槸sqlserver姝ゅ搴旇缃负MsSql //sqlserver杩炴帴瀛楃涓睵@ssw0rd - "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", - //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", + //"DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", + "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", //mysql杩炴帴瀛楃涓�(鍗囩骇EFCore3.1鍒版椂宸插皢mysql杩炴帴瀛楃涓蹭慨鏀�,2019-12-20) // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs" index a236cdb..9782528 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs" @@ -65,6 +65,122 @@ #endregion } /// <summary> + /// 璧风偣浠诲姟涓嬪彂淇℃伅 + /// </summary> + public class RequestFromTask + { + /// <summary> + /// 浣滀笟浠诲姟鍙� + /// </summary> + public string TASK_NO { get; set; } + /// <summary> + /// 璧风偣 + /// </summary> + public string FROM_POSITION { get; set; } + /// <summary> + /// 缁堢偣 + /// </summary> + //public string TO_POSITION { get; set; } + /// <summary> + /// 浠诲姟绛夌骇 + /// </summary> + public int? Grade { get; set; } = 0; + /// <summary> + /// 鏁伴噺 + /// </summary> + public int Quantity { get; set; } + + ///<summary> + /// 杞繍鎵樼洏鏃讹紝璧风偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1 + ///</summary> + public int StarQuantity { get; set; } + + ///<summary> + /// 杞繍鎵樼洏鏃讹紝缁堢偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1 + ///</summary> + public int EndQuantity { get; set; } + /// <summary> + /// 鎵樼洏绫诲瀷 1灏忔墭鐩橈紝2澶ф墭鐩� + /// </summary> + public int TrayType { get; set; } + /// <summary> + /// 浠诲姟绫诲瀷 1杞繍杞﹁疆浠诲姟锛�2杞繍绌烘墭鐩樹换鍔� + /// </summary> + public int TaskType { get; set; } + /// <summary> + /// 鐗╂枡淇℃伅 + /// </summary> + public string Material { get; set; } + #region 杞﹁疆鏁版嵁 + public float A { get; set; } + public float B { get; set; } + public float C { get; set; } + public float D { get; set; } + public float E { get; set; } + public float F { get; set; } + public float G { get; set; } + public float H { get; set; } + #endregion + } + /// <summary> + /// 缁堢偣浠诲姟涓嬪彂淇℃伅 + /// </summary> + public class RequestToaddTask + { + /// <summary> + /// 浣滀笟浠诲姟鍙� + /// </summary> + public string TASK_NO { get; set; } + /// <summary> + /// 璧风偣 + /// </summary> + //public string FROM_POSITION { get; set; } + /// <summary> + /// 缁堢偣 + /// </summary> + public string TO_POSITION { get; set; } + /// <summary> + /// 浠诲姟绛夌骇 + /// </summary> + public int? Grade { get; set; } = 0; + /// <summary> + /// 鏁伴噺 + /// </summary> + public int Quantity { get; set; } + + ///<summary> + /// 杞繍鎵樼洏鏃讹紝璧风偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1 + ///</summary> + public int StarQuantity { get; set; } + + ///<summary> + /// 杞繍鎵樼洏鏃讹紝缁堢偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1 + ///</summary> + public int EndQuantity { get; set; } + /// <summary> + /// 鎵樼洏绫诲瀷 1灏忔墭鐩橈紝2澶ф墭鐩� + /// </summary> + public int TrayType { get; set; } + /// <summary> + /// 浠诲姟绫诲瀷 1杞繍杞﹁疆浠诲姟锛�2杞繍绌烘墭鐩樹换鍔� + /// </summary> + public int TaskType { get; set; } + /// <summary> + /// 鐗╂枡淇℃伅 + /// </summary> + public string Material { get; set; } + #region 杞﹁疆鏁版嵁 + public float A { get; set; } + public float B { get; set; } + public float C { get; set; } + public float D { get; set; } + public float E { get; set; } + public float F { get; set; } + public float G { get; set; } + public float H { get; set; } + #endregion + } + /// <summary> /// AGV鍙嶉淇℃伅 /// </summary> public class Respone diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs" index a5a9f3f..e55620e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs" @@ -25,23 +25,24 @@ /// </summary> public static void SendAgvTask() { - WriteLog.Write_Log("鑷姩涓嬪彂浠诲姟", "SendAgvTask",""); + WriteLog.Write_Log("鑷姩涓嬪彂浠诲姟", "SendAgvTask", ""); Respone respone = new Respone(); RequestTask requestTask = new RequestTask(); string postJson = string.Empty; string report = string.Empty; - try + + VOLContext Context = new VOLContext(); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); + var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade) + .ThenBy(x => x.agv_createtime).ToList(); + if (agv_tasks.Count < 1) + agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && !string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade) + .ThenBy(x => x.agv_createtime).ToList(); + if (agv_tasks.Count > 0) { - VOLContext Context = new VOLContext(); - Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); - var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade) - .ThenBy(x => x.agv_createtime).ToList(); - if (agv_tasks.Count < 1) - agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && !string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade) - .ThenBy(x => x.agv_createtime).ToList(); - if (agv_tasks.Count > 0) + foreach (var agv_task in agv_tasks) { - foreach (var agv_task in agv_tasks) + try { var Materiel = QueryData.QueryMateriel(agv_task.agv_materielid);//鏌ユ壘杞﹁疆鏁版嵁 var Materiel1 = QueryData.QueryMateriel1(agv_task.agv_materielid);//鏌ユ壘杞﹁疆鏁版嵁 @@ -75,32 +76,34 @@ requestTask.H = Materiel == null ? Materiel1.h : Materiel.h; } postJson = JsonConvert.SerializeObject(requestTask); - report = Request.RequestData(postJson, "http://192.168.12.204:5000/api/TaskCreat/CreatTask"); - respone = JsonConvert.DeserializeObject<Respone>(report); - if (respone.Success) - { - agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); - agv_task.agv_realesstime = DateTime.Now; - agvtaskRepository.Update(agv_task, true); - WriteWMSLog.LogAdd(requestTask.TASK_NO, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); - } - else - { - agv_task.agv_remark = respone.Msg; - var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists - if (task == null) - agvtaskRepository.Update(agv_task, true); - WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); - } + //report = Request.RequestData(postJson, AGVAPIAddress.IPAddress_AGVTask);//"http://192.168.12.204:5000/api/TaskCreat/CreatTask" + RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVTask); + //respone = JsonConvert.DeserializeObject<Respone>(report); + //if (respone.Success) + //{ + // agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); + // agv_task.agv_realesstime = DateTime.Now; + // agvtaskRepository.Update(agv_task, true); + // WriteWMSLog.LogAdd(requestTask.TASK_NO, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); + //} + //else + //{ + // agv_task.agv_remark = respone.Msg; + // var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists + // if (task == null) + // agvtaskRepository.Update(agv_task, true); + // WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); + //} + } + catch (Exception ex) + { + respone.Success = false; + respone.Msg = ex.Message; + WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); } } } - catch (Exception ex) - { - respone.Success = false; - respone.Msg = ex.Message; - WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); - } + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs" index 1f184fa..ea0743b 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs" @@ -29,61 +29,75 @@ Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); - #region 鍙犵洏鍖烘弧5涓叆搴� + #region 鍙犵洏鍖烘弧5涓叆搴� 闇�浼樺寲 var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.enable).ToList(); var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 5).FirstOrDefault(); if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); + //EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0&&x.lastUpdateTime.).FirstOrDefault();//鏃堕棿瓒呰繃6灏忔椂鍏ュ簱 #endregion - var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); - if (agv_task != null) + + var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); + foreach (var agv_task in agv_tasks) { - tasknum = agv_task.agv_tasknum; - #region MyRegion - //var task = agvtaskRepository.Find(x => (x.agv_toaddress.Contains("W") || x.agv_toaddress.Contains("X")) && x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); - //if (task != null) - //{ - // task.agv_fromaddress = station.stationCode; - // task.StarQuantity = 0; - // task.agv_taskstate = "Create"; - // if (station.stationCode.Contains("S0100100")) - // task.agv_grade = 3; - // agvtaskService.Update(task, true); - // station.location_state = LocationStateEnum.Busy.ToString(); - // stationinfoRepository.Update(station, true); - // WriteDBLog.Success("鏇存柊琛ョ┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "WMS"); - // return; - //} - #endregion - dt_stationinfo EmptyStation = null; - #region 妫�娴嬩笂鏂欑殑绌烘墭鍙犵洏 - if (agv_task.agv_fromaddress.Contains("S")) + try { - //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); - EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); - if (EmptyStation == null) - EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); - if (EmptyStation == null) + tasknum = agv_task.agv_tasknum; + #region MyRegion + //var task = agvtaskRepository.Find(x => (x.agv_toaddress.Contains("W") || x.agv_toaddress.Contains("X")) && x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); + //if (task != null) + //{ + // task.agv_fromaddress = station.stationCode; + // task.StarQuantity = 0; + // task.agv_taskstate = "Create"; + // if (station.stationCode.Contains("S0100100")) + // task.agv_grade = 3; + // agvtaskService.Update(task, true); + // station.location_state = LocationStateEnum.Busy.ToString(); + // stationinfoRepository.Update(station, true); + // WriteDBLog.Success("鏇存柊琛ョ┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "WMS"); + // return; + //} + #endregion + #region MyRegion + //dt_stationinfo EmptyStation = null; + //#region 妫�娴嬩笂鏂欑殑绌烘墭鍙犵洏 + //if (agv_task.agv_fromaddress.Contains("S")) + //{ + // //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); + // EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); + // if (EmptyStation == null) + // EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); + // if (EmptyStation == null) + // { + // EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); + // if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); + // } + //} + //#endregion + //else + //{ + // EmptyStation = GetStation.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); + //} + + #endregion + + var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task); + if (EmptyStation != null) { - EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); - if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); + agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); + agv_task.EndQuantity = EmptyStation.quantity; + agv_task.agv_toaddress = EmptyStation.stationCode; + agvtaskRepository.Update(agv_task, true); + EmptyStation.location_state = LocationStateEnum.Busy.ToString(); + stationinfoRepository.Update(EmptyStation, true); + WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS"); } } - #endregion - else + catch (Exception ex) { - EmptyStation = GetStation.EmptyPalletStation(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", "閿欒淇℃伅锛�", $"{tasknum}锛涢敊璇俊鎭細{ex.Message}"); } - if (EmptyStation != null) - { - agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); - agv_task.EndQuantity = EmptyStation.quantity; - agv_task.agv_toaddress = EmptyStation.stationCode; - agvtaskRepository.Update(agv_task, true); - EmptyStation.location_state = LocationStateEnum.Busy.ToString(); - stationinfoRepository.Update(EmptyStation, true); - WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS"); - } } } catch (Exception ex) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs" index 671fc19..9d475f9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs" @@ -164,11 +164,10 @@ { VOLContext context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); - var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress); - var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress); if (task.agv_taskstate == AGVTaskStateEnum.Complete1.ToString()) { + var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress); ////绌烘墭浠诲姟闇�淇敼閫昏緫 if (station2.stationCode.Contains("X")) station2.quantity = 0;// task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 0 : task.agv_qty; //task.agv_qty; @@ -188,6 +187,7 @@ } else if (task.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) { + var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress); #region MyRegion //if (station1.stationCode.Contains("S")) // station1.quantity = 0; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs" new file mode 100644 index 0000000..e09a3e4 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs" @@ -0,0 +1,46 @@ +锘縰sing Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Comm.LogInfo; +using WIDESEA_Common; +using WIDESEA_Entity.DomainModels; +using WIDESEA_Entity.ToAGV; +using WIDESEA_WMS.IRepositories; + +namespace WIDESEA_WMS.Common +{ + public partial class AGVServer + { + /// <summary> + /// 鍚慉GV璇锋眰 + /// </summary> + public static Respone RequestAGV(Idt_agvtaskRepository agvtaskRepository, dt_agvtask agv_task, string postJson, string IP) + { + var report = Request.RequestData(postJson, IP); + var respone = JsonConvert.DeserializeObject<Respone>(report); + if (respone.Success) + { + if (agv_task.agv_taskstate != AGVTaskStateEnum.Complete.ToString()) + agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); + if (agv_task.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) + agv_task.agv_completeBeginTime = DateTime.Now; + else + agv_task.agv_realesstime = DateTime.Now; + agvtaskRepository.Update(agv_task, true); + WriteWMSLog.LogAdd(agv_task.agv_tasknum, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); + } + else + { + if (agv_task.agv_remark != respone.Msg) + agv_task.agv_remark = respone.Msg; + agvtaskRepository.Update(agv_task, true); + WriteWMSLog.LogAdd(agv_task.agv_tasknum, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg); + } + return respone; + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs" new file mode 100644 index 0000000..f767587 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs" @@ -0,0 +1,60 @@ +锘縰sing Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Comm.LogInfo; +using WIDESEA_Common; +using WIDESEA_Core.EFDbContext; +using WIDESEA_Entity.ToAGV; +using WIDESEA_WMS.IRepositories; +using WIDESEA_WMS.Repositories; + +namespace WIDESEA_WMS.Common +{ + public partial class AGVServer + { + /// <summary> + /// 涓嬪彂璧风偣浠诲姟 + /// </summary> + public static void SendFromaddress() + { + try + { + VOLContext Context = new VOLContext(); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); + RequestFromTask requestFromTask = new RequestFromTask(); + var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); + foreach (var agv_task in agv_tasks) + { + try + { + requestFromTask.TASK_NO = agv_task.agv_tasknum; + requestFromTask.FROM_POSITION = agv_task.agv_fromaddress; + requestFromTask.Material = agv_task.agv_materielid; + requestFromTask.Grade = agv_task.agv_grade; + requestFromTask.Quantity = agv_task.agv_qty; + requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; + requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; + #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊 + requestFromTask.StarQuantity = agv_task.StarQuantity; + requestFromTask.EndQuantity = agv_task.EndQuantity; + #endregion + var postJson = JsonConvert.SerializeObject(requestFromTask); + RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVFromaddTask); + } + catch (Exception ex) + { + + } + } + } + catch (Exception ex) + { + + } + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs" new file mode 100644 index 0000000..68ad08c --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs" @@ -0,0 +1,108 @@ +锘縰sing Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Comm.LogInfo; +using WIDESEA_Comm; +using WIDESEA_Common; +using WIDESEA_Core.EFDbContext; +using WIDESEA_Entity.ToAGV; +using WIDESEA_WCS.JobsPart.Common; +using WIDESEA_WMS.IRepositories; +using WIDESEA_WMS.Repositories; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; + +namespace WIDESEA_WMS.Common +{ + public partial class AGVServer + { + /// <summary> + /// 涓嬪彂缁堢偣浠诲姟 + /// </summary> + public static void SendToaddress() + { + VOLContext Context = new VOLContext(); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); + Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); + RequestToaddTask requestFromTask = new RequestToaddTask(); + var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Complete.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); + foreach (var agv_task in agv_tasks) + { + try + { + #region 鏌ユ壘婊¤冻鏉′欢鐨勮ˉ绌烘墭浠诲姟 + var task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype && string.IsNullOrEmpty(x.agv_fromaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); + if (task != null) + { + requestFromTask.TASK_NO = agv_task.agv_tasknum; + requestFromTask.TO_POSITION = task.agv_toaddress; + requestFromTask.Material = agv_task.agv_materielid; + requestFromTask.Grade = agv_task.agv_grade; + requestFromTask.Quantity = agv_task.agv_qty; + requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; + requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; + #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊 + requestFromTask.StarQuantity = agv_task.StarQuantity; + requestFromTask.EndQuantity = task.EndQuantity; + #endregion + var postJson = JsonConvert.SerializeObject(requestFromTask); + var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask); + if (respone.Success) + { + agv_task.EndQuantity = task.EndQuantity; + agv_task.agv_toaddress = task.agv_toaddress; + agvtaskRepository.Update(agv_task, true); + agvtaskRepository.Delete(task, true); + } + else + throw new Exception(respone.Msg); + WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS"); + } + #endregion + else + { + #region 鏌ユ壘婊¤冻浠诲姟鏉′欢鐨勫湴鍧� + var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task); + if (EmptyStation != null) + { + //agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); + //agvtaskRepository.Update(agv_task, true);//鏌ョ湅AGV浠诲姟鏁版嵁鏄惁鍦ㄥ彟涓�涓柟娉曞唴杩涜浜嗘暟鎹洿鏂� + + requestFromTask.TASK_NO = agv_task.agv_tasknum; + requestFromTask.TO_POSITION = EmptyStation.stationCode; + requestFromTask.Material = agv_task.agv_materielid; + requestFromTask.Grade = agv_task.agv_grade; + requestFromTask.Quantity = agv_task.agv_qty; + requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; + requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; + #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊 + requestFromTask.StarQuantity = agv_task.StarQuantity; + requestFromTask.EndQuantity = EmptyStation.quantity; + #endregion + var postJson = JsonConvert.SerializeObject(requestFromTask); + var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask); + if (respone.Success) + { + agv_task.EndQuantity = EmptyStation.quantity; + agv_task.agv_toaddress = EmptyStation.stationCode; + agvtaskRepository.Update(agv_task, true); + EmptyStation.location_state = LocationStateEnum.Busy.ToString(); + stationinfoRepository.Update(EmptyStation, true); + } + else + throw new Exception(respone.Msg); + WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS"); + } + #endregion + } + } + catch (Exception ex) + { + WriteDBLog.Error("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}锛涢敊璇俊鎭細{ex.Message}", "WMS"); + } + } + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs" new file mode 100644 index 0000000..1a9b536 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs" @@ -0,0 +1,24 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_WMS.Common +{ + public class AGVAPIAddress + { + /// <summary> + /// 瀹屾暣AGV浠诲姟涓嬪彂鍦板潃 + /// </summary> + public const string IPAddress_AGVTask = "http://192.168.12.204:5000/api/TaskCreat/CreatTask"; + /// <summary> + /// AGV璧风偣浠诲姟涓嬪彂鍦板潃 + /// </summary> + public const string IPAddress_AGVFromaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatGetPalletTask"; + /// <summary> + /// AGV缁堢偣浠诲姟涓嬪彂鍦板潃 + /// </summary> + public const string IPAddress_AGVToaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatPutPalletTask"; + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" index 4d45e09..93cdff5 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" @@ -73,7 +73,14 @@ VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); - OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + if (station.area == "10" || station.area == "11") + { + OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + } + else + { + OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); + } } catch (Exception ex) { @@ -102,7 +109,12 @@ } } - + /// <summary> + /// 鏌ユ壘褰撳墠琛屽彲鍏ュ簱绌鸿揣浣� + /// </summary> + /// <param name="EmptyStation"></param> + /// <param name="stationinfoRepository"></param> + /// <returns></returns> public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository) { dt_stationinfo stationinfo = null; @@ -113,21 +125,88 @@ stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.quantity > 0 && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); if (stationinfo != null) - { if (stationinfo.quantity < 5) return stationinfo; - else - stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); - } - else - { - stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); - } - //if (stationinfo == null) + + stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); } catch (Exception ex) { + } + return stationinfo; + } + + /// <summary> + /// 绌烘墭鍙叆搴撹揣浣� + /// </summary> + /// <param name="area"></param> + /// <returns></returns> + public static dt_stationinfo EmptyPalletStation1(string area) + { + dt_stationinfo stationinfo = null; + try + { + VOLContext Context = new VOLContext(); + Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); + Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); + + #region 鏌ユ壘AB搴撳彲鍏ョ┖鎵樼┖璐т綅 + if (area == "11" && stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) + { + #region MyRegion + var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); + #endregion + + #region 鏌ユ壘搴撳尯2鍜屽簱鍖�3鐨勭┖鎵樿揣浣� + //var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") + // && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault(); + + if (EmptyStation != null) + { + stationinfo = Station(EmptyStation, stationinfoRepository); + if (stationinfo != null) + if (!QueueStation(stationinfo.stationCode)) return stationinfo; + + EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); + if (EmptyStation.quantity != 5) return null; + } + #endregion + + #region 鏈壘鍒扮┖鎵樿揣浣嶆垨褰撳墠琛屽凡婊�,瀵绘壘鏂扮殑涓�琛� + stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); + if (stationinfo == null) + stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); + #endregion + } + #endregion + + #region 鏌ユ壘绌烘墭搴撳尯 + else + { + if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo; + stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault(); + if (stationinfo != null) + if (!QueueStation(stationinfo.stationCode) && stationinfo.quantity < 5) return stationinfo; + stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); + + } + #endregion + + #region 鏌ョ湅褰撳墠绌鸿揣浣嶅悗鏄惁瀛樺湪鏈夋枡 + if (stationinfo != null) + if (GetStation.QueueStation(stationinfo.stationCode)) stationinfo = null; + #endregion + + #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟 + if (stationinfo != null) + if (agvtaskService.Find(x => x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; + #endregion + + } + catch (Exception ex) + { + throw; } return stationinfo; } @@ -146,7 +225,6 @@ Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); #region 鏌ユ壘绌烘墭鐩樺簱鍖� - //if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any() && area != "10") if (stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) { var EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01005002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault(); @@ -190,7 +268,7 @@ #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟 if (stationinfo != null) - if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; + if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; #endregion } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs" index f8a976b..8c7b8b2 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs" @@ -36,6 +36,32 @@ } } /// <summary> + /// 鑾峰彇鍙叆绌烘墭璐т綅 + /// </summary> + public static dt_stationinfo GetEmptyTrayStation(Idt_stationinfoRepository stationinfoRepository,dt_agvtask agv_task) + { + dt_stationinfo EmptyStation = null; + #region 妫�娴嬩笂鏂欑殑绌烘墭鍙犵洏 + if (agv_task.agv_fromaddress.Contains("S")) + { + var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); + EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); + if (EmptyStation == null) + EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); + if (EmptyStation == null) + { + var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); + if (EmptyD != null) CreateEmptyTrayIn(stationinfoRepository, EmptyD); + } + } + #endregion + else + { + EmptyStation = GetStation.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); + } + return EmptyStation; + } + /// <summary> /// 鍒涘缓绌烘墭鍙犵洏鍏ュ簱浠诲姟 /// </summary> /// <param name="stationinfoRepository"></param> @@ -48,7 +74,7 @@ { if (agvtaskRepository.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) return; var area = EmptyStation.tray_type == "SmallTray" ? "11" : "10"; - var toEmptyStation = GetStation.EmptyPalletStation(area); + var toEmptyStation = GetStation.EmptyPalletStation1(area); if (toEmptyStation != null) { #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔� diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs" index dfc9c30..b40fa60 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs" @@ -42,6 +42,8 @@ if (station2 == null) return content.Error("璇疯緭鍏ユ纭殑璧风偣鍦板潃锛�"); if (!station1.tray_type.Contains("Small") && station2.area != "4") throw new Exception($"澶ф墭鐩樺彧鑳藉瓨鏀惧湪搴撳尯4锛�"); + if (station1.tray_type.Contains("Small") && station2.area != "3" && station2.area != "2") + throw new Exception($"灏忔墭鐩樺彧鑳藉瓨鏀惧湪搴撳尯2/搴撳尯3锛�"); if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(from_address) || x.agv_toaddress.Contains(from_address)).Any()) throw new Exception($"璧风偣{from_address}宸插瓨鍦ㄤ换鍔★紒"); if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(to_address) || x.agv_toaddress.Contains(to_address)).Any()) @@ -52,17 +54,9 @@ throw new Exception($"缁堢偣{to_address}涓嶆槸绌鸿揣浣嶏紒"); if (string.IsNullOrEmpty(station1.stationType)) throw new Exception($"璧风偣{from_address}鏈粦瀹氱墿鏂欑被鍨嬶紒"); - - if (station2.area == "1") - { - if (stationinfoRepository.Find(x => x.area == station2.area && x.column == station2.column && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) - throw new Exception($"缁堢偣{to_address}鍚屽垪瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�"); - } - else - { - if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) - throw new Exception($"缁堢偣{to_address}鍚岃瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�"); - } + + if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.enable && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) + throw new Exception($"缁堢偣{to_address}鍚岃瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�"); var inventory = inventoryRepository.Find(x => x.stationCode == station1.stationCode).FirstOrDefault(); if (inventory == null) throw new Exception($"璧风偣{from_address}鏈壘鍒板簱瀛樹俊鎭紒"); @@ -92,6 +86,7 @@ station2.location_state = LocationStateEnum.InBusy.ToString(); station2.heatNumber = station1.heatNumber; station2.Number = station1.Number; + station2.billetID = station1.billetID; station2.stationType = station1.stationType; stationinfoRepository.Update(station2, true); content.OK(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs" index 9d6b117..80480a7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs" @@ -14,6 +14,8 @@ { AGVServer.UpdateEmptyPalletTask(); AGVServer.SendAgvTask(); + AGVServer.SendFromaddress(); + AGVServer.SendToaddress(); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json" index 9bfab82..ee645d9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json" @@ -16,7 +16,8 @@ "Connection": { "DBType": "MsSql", //MySql/MsSql/PgSql //鏁版嵁搴撶被鍨嬶紝濡傛灉浣跨敤鐨勬槸sqlserver姝ゅ搴旇缃负MsSql //sqlserver杩炴帴瀛楃涓� - "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", + "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", + //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", //mysql杩炴帴瀛楃涓�(鍗囩骇EFCore3.1鍒版椂宸插皢mysql杩炴帴瀛楃涓蹭慨鏀�,2019-12-20) // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;", -- Gitblit v1.9.3