From 6f65b696b8c3019862b12cde466d20844c675c63 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期二, 07 五月 2024 16:23:01 +0800 Subject: [PATCH] 修改错误信息日志记录方式 --- 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs | 18 代码管理/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/PipelineJob.cs | 578 --------------------------- 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs | 606 ++++++++++++++++++++++------ 3 files changed, 483 insertions(+), 719 deletions(-) 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 48cf3b6..e5df10a 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" @@ -207,7 +207,7 @@ catch (Exception ex) { //WriteDBLog.Error("鏌ヨ杞﹁疆鏁版嵁", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); - WriteLog.Write_Log(namea, namea + "鎶ラ敊", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", namea, "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); } } #endregion @@ -388,7 +388,7 @@ catch (Exception ex) { //WriteDBLog.Error("鏌ヨ杞﹁疆璁㈠崟", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); - WriteLog.Write_Log(namea, namea + "鎶ラ敊", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", namea, "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); } } #endregion @@ -444,7 +444,7 @@ } #endregion - var Stations = stationinfoRepository.Find(x => x.area == PipelineJob.area_code(name)).OrderBy(x => x.lastUpdateTime).ToList(); + var Stations = stationinfoRepository.Find(x => x.area == Pipeline.area_code(name)).OrderBy(x => x.lastUpdateTime).ToList(); #region 涓嬫枡浣嶆槸鍚︿负绌虹姸鎬佸悓姝ョ粰妗佹灦 foreach (var station in Stations) @@ -499,7 +499,7 @@ } #endregion - var areaCode = PipelineJob.area_code(name); //鏍规嵁涓嬫枡鍙e崟鍏冨悕鑾峰彇鍖哄煙浠g爜 + var areaCode = Pipeline.area_code(name); //鏍规嵁涓嬫枡鍙e崟鍏冨悕鑾峰彇鍖哄煙浠g爜 var station = stationinfoRepository.Find(x => x.area == areaCode && x.stationCode.Substring(x.stationCode.Length - 1, 1) == AreaNr.ToString()).FirstOrDefault(); if (station != null) { @@ -610,8 +610,8 @@ #endregion - var wheel = PipelineJob.QueryMateriel(Work.drawingNo); - var wheel1 = PipelineJob.QueryMateriel1(Work.drawingNo); + var wheel = Pipeline.QueryMateriel(Work.drawingNo); + var wheel1 = Pipeline.QueryMateriel1(Work.drawingNo); if (wheel == null && wheel1 == null) { #region 鏃ュ織璁板綍 @@ -892,13 +892,15 @@ } catch (Exception ex) { - WriteDBLog.Error(name, $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + //WriteDBLog.Error(name, $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", name, "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); } } } catch (Exception ex) { - WriteDBLog.Error("涓嬫枡鍖�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + //WriteDBLog.Error("涓嬫枡鍖�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", "涓嬫枡鍖�", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); } } #endregion diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs" index 0fd93d7..6cbb4af 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs" @@ -13,16 +13,19 @@ using WIDESEA_WMS.Repositories; using HslCommunication; using WIDESEA_Entity.DomainModels; +using WIDESEA_Comm.TaskNo; +using WIDESEA_WCS.JobsPart.Common; +using System.Xml.Linq; namespace WIDESEA_WCS { public class Pipeline { + /// <summary> /// 涓婃枡鍖� /// </summary> /// <param name="client"></param> - /// <param name="number"></param> public void Loadinglevel(PLCClient client, string number = "涓婃枡鍖�") { try @@ -30,7 +33,6 @@ VOLContext Context = new VOLContext(); Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); - Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); var Gantry_client = PLCClient.Clients.FirstOrDefault(t => t.PLCName == "妗佹灦"); @@ -39,126 +41,141 @@ var Gantryplc = repository.FindFirst(x => x.plcinfo_name == Gantry_client.PLCName); - ///鏌ユ壘涓婃枡鍖虹殑璐т綅 - var Stations = stationinfoRepository.Find(x => x.area == area_code(number)).OrderBy(x => x.lastUpdateTime);//鏍规嵁鏃堕棿鍏堝悗鎺掑簭 + #region 涓婃枡瀹屾垚 - var Station = Stations?.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.quantity).FirstOrDefault(); - if (Station != null) + var AreaNr = Gantry_client.ReadByOrder<Int16>("W_AreaNr", number);//璇诲彇璐т綅鍙蜂俊鎭� + if (AreaNr != 0) { - - var SNS = Station.bindSN.Split(","); - - var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); - var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - #region 涓婃枡瀹屾垚 - var Gantrydetails = plcRepository.Find(x => x.plcdetail_iotype == Gantryplc.plcinfo_iotyep && x.plcdetail_number == number).ToList(); - var Gantry_Out_of_Area = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Gantry_Out_of_Area").First(), Gantry_client);//妗佹灦鏄惁鍦ㄥ尯鍩熷唴 - - var QueryDate = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_QueryDate").First(), Gantry_client);//淇℃伅鏌ヨ - if (QueryDate) + var station = stationinfoRepository.Find(x => x.area == area_code(number) && x.stationCode.Substring(x.stationCode.Length - 1, 1) == AreaNr.ToString()).FirstOrDefault(); + if (station != null) { - var Date_Vaild = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Date_Vaild").First(), Gantry_client);//淇℃伅纭 - if (!Date_Vaild)//淇℃伅鏈夎锛岃褰曟棩蹇� + var bindSNS = station.bindSN.Split(","); + var Gantrydetails = plcRepository.Find(x => x.plcdetail_iotype == Gantryplc.plcinfo_iotyep && x.plcdetail_number == number).ToList(); + + #region 淇℃伅鏌ヨ纭 + var QueryDate = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_QueryDate").First(), Gantry_client);//淇℃伅鏌ヨ + if (QueryDate) { + var Date_Vaild = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Date_Vaild").First(), Gantry_client);//淇℃伅纭 + if (!Date_Vaild)//淇℃伅鏈夎锛岃褰曟棩蹇� + { + Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + station.location_state = LocationStateEnum.Abnormal.ToString(); + station.remark = $"鏈煡璇㈠埌SN鍙凤細{bindSNS[bindSNS.Length - 1]}鐨勮鍗�"; + stationinfoRepository.Update(station, true); + WriteDBLog.Error("涓婃枡鍖轰俊鎭煡璇�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{station.stationCode}鏈煡璇㈠埌SN鍙凤細{bindSNS[bindSNS.Length - 1]}鐨勮鍗�", "PCS"); + return; + } + } + #endregion + + #region 璐т綅鐘舵�佹洿鏂板浣� + var finished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Unlod_finished").First(), Gantry_client);//澶瑰彇瀹屾垚 + var updatefinished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "W_Storage_update").First(), Gantry_client);//璐т綅鐘舵�佹洿鏂� + if (!finished && updatefinished) + { + Gantry_client.WriteByOrder("W_Storage_update", false, number);//璐т綅鐘舵�佹洿鏂� + WriteLog.Write_Log(number + "涓婃枡瀹屾垚", number + "璐т綅鐘舵�佹洿鏂颁俊鍙峰浣�", "鎴愬姛锛�", + $"璇诲彇妗佹灦淇℃伅锛歕n涓婃枡瀹屾垚淇″彿锛歿finished}\n\n鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂颁俊鍙凤細{false}"); + } + #endregion + + if (finished && !updatefinished) + { + + #region 鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷� + var area = Gantry_client.ReadByOrder<Int16>("place_prog", number);//鏀炬枡瀹屾垚鐨勫尯鍩熷彿 + + WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); + //if (AreaNr != area) + //{ + // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ + // //WriteDBLog.Error(name + "鎶ヨ", $"PCS鍖哄煙鍙凤細{AreaNr}锛涙鏋跺尯鍩熷彿锛歿area}閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒", "PCS"); + // WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); + // return; + //} + #endregion + + #region 鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷� + var quantity = Gantry_client.ReadByOrder<Int16>("pos_prog", number);//妗佹灦璁板綍鐨勮溅杞暟閲� + + WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); + //if (quantity != station.quantity) + //{ + // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ + // WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); + // return; + //} + #endregion + + Updatemes(bindSNS[bindSNS.Length - 1]); + station.quantity = station.quantity - 1; + station.bindSN = OperStr(bindSNS); + if (station.quantity <= 0) + { + station.stationType = string.Empty; + station.Number = string.Empty; + station.heatNumber = string.Empty; + station.tray_status = "EmptyTray"; + } + var count = stationinfoRepository.Update(station, true); + if (count < 1) + { + WriteDBLog.Error("鍙栨枡瀹屾垚", $"涓婃枡浣嶄俊鎭洿鏂板け璐ワ紒涓婃枡浣嶇紪鍙凤細{station.stationCode}", "PCS"); + return; + } + + Gantry_client.WriteByOrder("W_Storage_update", true, number);//璐т綅鐘舵�佹洿鏂� Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = $"鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�"; - stationinfoRepository.Update(Station, true); - WriteDBLog.Error("涓婃枡鍖轰俊鎭煡璇�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�", "PCS"); - return; + + #region 娓呯┖淇℃伅 + Gantry_client.WriteByOrder("W_AreaNr", (Int16)0, number);//鍖哄煙璐т綅鍙� + Gantry_client.WriteByOrder("W_IndexNr", (Int16)0, number);//鎵樼洏涓婄殑绗嚑涓溅杞� + Gantry_client.WriteByOrder("W_Storage_Type", (Int16)0, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 + Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)0, number);//杞﹁疆绫诲瀷 + #endregion + + #region 鏃ュ織璁板綍 + WriteDBLog.Success("鍙栨枡瀹屾垚", $"鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂帮細{true}\nW_RequestUnload锛歿false}", "PCS"); + #endregion } } - var finished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Unlod_finished").First(), Gantry_client);//澶瑰彇瀹屾垚 - var updatefinished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "W_Storage_update").First(), Gantry_client);//璐т綅鐘舵�佹洿鏂� - if (!finished && updatefinished) - Gantry_client.WriteByOrder("W_Storage_update", false, number);//璐т綅鐘舵�佹洿鏂� - if (finished && !updatefinished) + } + + #endregion + + #region 鐢宠涓婃枡 + + if (!Gantry_client.ReadByOrder<bool>("W_RequestUnload", number)) + { + var Station = stationinfoRepository.Find(x => x.area == area_code(number) && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); + if (Station != null) { - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - Updatemes(SNS[SNS.Length - 1]); - Station.quantity = Station.quantity - 1; - Station.bindSN = OperStr(SNS); - if (Station.quantity <= 0) + var SNS = Station.bindSN.Split(","); + List<string> list = new List<string>(); + foreach (var SN in SNS) { - Station.stationType = string.Empty; - Station.Number = string.Empty; - Station.heatNumber = string.Empty; - Station.tray_status = "EmptyTray"; + if (!string.IsNullOrEmpty(SN)) + list.Add(SN); } - var count = stationinfoRepository.Update(Station, true); - if (count < 1) + //缂撳瓨鏋朵笂杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷� + if (list.Count != Station.quantity) { - WriteDBLog.Error("鍙栨枡瀹屾垚", $"涓婃枡浣嶄俊鎭洿鏂板け璐ワ紒涓婃枡浣嶇紪鍙凤細{Station.stationCode}", "PCS"); + Station.location_state = LocationStateEnum.Abnormal.ToString(); + Station.remark = "杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�"; + stationinfoRepository.Update(Station, true); + Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + #region 鏃ュ織璁板綍 + WriteDBLog.Error("涓婃枡鍖�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�", "PCS"); + #endregion return; } - #region 娓呯┖淇℃伅 - Gantry_client.WriteByOrder("W_AreaNr", (Int16)0, number);//鍖哄煙璐т綅鍙� - Gantry_client.WriteByOrder("W_IndexNr", (Int16)0, number);//鎵樼洏涓婄殑绗嚑涓溅杞� - Gantry_client.WriteByOrder("W_Storage_Type", (Int16)0, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 - Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)0, number);//杞﹁疆绫诲瀷 - #endregion + var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); + var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� + var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - Gantry_client.WriteByOrder("W_Storage_update", true, number);//璐т綅鐘舵�佹洿鏂� - #region 鏃ュ織璁板綍 - WriteDBLog.Success("鍙栨枡瀹屾垚", $"鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂帮細{true}\nW_RequestUnload锛歿false}", "PCS"); - #endregion - - PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - if (Station.quantity > 0 && (PalletSignal != 1 || MaterialSignal != 1)) - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = "杞﹁疆鏁伴噺澶т簬0锛屽厜鐢垫娴嬫棤鎵樼洏鎴栨棤杞﹁疆"; - stationinfoRepository.Update(Station, true); - client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - } - else if (Station.quantity < 1 && MaterialSignal == 1) - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = "杞﹁疆鏁伴噺灏忎簬0锛屽厜鐢垫娴嬫湁杞﹁疆"; - stationinfoRepository.Update(Station, true); - client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - } - } - #endregion - - #region 鐢宠涓婃枡 - //var SNS = Station.bindSN.Split(","); - if (Gantry_client.ReadByOrder<bool>("W_RequestUnload", number)) return; - - Station = stationinfoRepository.Find(x => x.stationCode == Station.stationCode).FirstOrDefault(); - if (Station.quantity < 1) return; - List<string> list = new List<string>(); - SNS = Station.bindSN.Split(","); - foreach (var SN in SNS) - { - if (!string.IsNullOrEmpty(SN)) - list.Add(SN); - } - //缂撳瓨鏋朵笂杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷� - if (list.Count != Station.quantity) - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = "杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�"; - stationinfoRepository.Update(Station, true); - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - #region 鏃ュ織璁板綍 - WriteDBLog.Error("涓婃枡鍖�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�", "PCS"); - #endregion - return; - } - //var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); - PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - - var AreaNr = Gantry_client.ReadByOrder<Int16>("W_AreaNr", number);//璇诲彇璐т綅鍙蜂俊鎭� - if (PalletSignal == 1 && MaterialSignal == 1) - { - if (AreaNr == 0) + if (PalletSignal == 1 && MaterialSignal == 1) { Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)Convert.ToInt16(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId), number);//杞﹁疆绫诲瀷 var area = Convert.ToInt16(Station.stationCode.Substring(Station.stationCode.Length - 1, 1)); @@ -169,43 +186,360 @@ Gantry_client.WriteByOrder("W_RequestUnload", true, number); #region 鏃ュ織璁板綍 WriteDBLog.Success("涓婃枡鍖虹敵璇�", $"璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}\n璇诲彇绗竴涓溅杞厜鐢典俊鍙凤細{MaterialSignal}\n\n" + - $"鍐欏叆妗佹灦淇℃伅锛歕n鍖哄煙璐т綅鍙凤細{area}\n鎵樼洏涓婄殑绗嚑涓溅杞細{SNS.Length}\n鎵樼洏绫诲瀷锛歿1}\n杞﹁疆绫诲瀷锛歿(QueryMateriel(Station.stationType).TypeId == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId)}" + + $"鍐欏叆妗佹灦淇℃伅锛歕n鍖哄煙璐т綅鍙凤細{area}\n鎵樼洏涓婄殑绗嚑涓溅杞細{SNS.Length}\n鎵樼洏绫诲瀷锛歿1}\n杞﹁疆绫诲瀷锛歿(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId)}" + $"\n杞﹁疆SN鍙凤細{SNS[SNS.Length - 1]}\nW_RequestUnload锛歵rue", "PCS"); #endregion } - } - else - { - Gantry_client.WriteByOrder("W_RequestUnload", false, number); - } - #endregion - - #region 鏇存柊涓�涓娴嬩笂鏂欎换鍔� - Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); - if (!agvtaskService.Find(x => x.agv_toaddress == Station.stationCode).Any()) - { - var task = agvtaskService.Find(x => x.agv_taskstate == "Queue" && (x.agv_tasktype == "TaskType_OutsourceOutbound" || x.agv_tasktype == "TaskType_Outbound") && x.agv_toaddress == "").OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); - if (task != null) + else { - task.agv_taskstate = "Create"; - task.agv_toaddress = Station.stationCode; - agvtaskService.Update(task, true); - WriteDBLog.Success("鏇存柊涓�涓娴嬩笂鏂欎换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}", "PCS"); + Gantry_client.WriteByOrder("W_RequestUnload", false, number); } - } - #endregion + #region 鏇存柊涓�涓娴嬩笂鏂欎换鍔� + Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); + if (!agvtaskService.Find(x => x.agv_toaddress == Station.stationCode).Any()) + { + var task = agvtaskService.Find(x => x.agv_taskstate == "Queue" && (x.agv_tasktype == "TaskType_OutsourceOutbound" || x.agv_tasktype == "TaskType_Outbound") && x.agv_toaddress == "").OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); + if (task != null) + { + task.agv_taskstate = "Create"; + task.agv_toaddress = Station.stationCode; + agvtaskService.Update(task, true); + WriteDBLog.Success("鏇存柊涓�涓娴嬩笂鏂欎换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}", "PCS"); + } + } + #endregion + } } - else - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + + #endregion + + + #region MyRegion + + /////鏌ユ壘涓婃枡鍖虹殑璐т綅 + //var Stations = stationinfoRepository.Find(x => x.area == area_code(number)).OrderBy(x => x.lastUpdateTime);//鏍规嵁鏃堕棿鍏堝悗鎺掑簭 + // //闇�娴嬭瘯涓�涓� + //var Station = Stations?.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.quantity).FirstOrDefault(); + + //if (Station != null) + //{ + // var SNS = Station.bindSN.Split(","); + // List<string> list = new List<string>(); + // foreach (var SN in SNS) + // { + // if (!string.IsNullOrEmpty(SN)) + // list.Add(SN); + // } + // //缂撳瓨鏋朵笂杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷� + // if (list.Count != Station.quantity) + // { + // Station.location_state = LocationStateEnum.Abnormal.ToString(); + // Station.remark = "杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�"; + // stationinfoRepository.Update(Station, true); + // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + // #region 鏃ュ織璁板綍 + // WriteDBLog.Error("涓婃枡鍖�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�", "PCS"); + // #endregion + // return; + // } + // var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); + // var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� + // var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� + + // var AreaNr = Gantry_client.ReadByOrder<Int16>("W_AreaNr", number);//璇诲彇璐т綅鍙蜂俊鎭� + // if (PalletSignal == 1 && MaterialSignal == 1) + // { + // if (AreaNr == 0) + // { + // Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)Convert.ToInt16(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId), number);//杞﹁疆绫诲瀷 + // var area = Convert.ToInt16(Station.stationCode.Substring(Station.stationCode.Length - 1, 1)); + // Gantry_client.WriteByOrder("W_AreaNr", (Int16)area, number);//鍖哄煙璐т綅鍙� + // Gantry_client.WriteByOrder("W_IndexNr", (Int16)SNS.Length, number);//鎵樼洏涓婄殑绗嚑涓溅杞� + // Gantry_client.WriteByOrder("W_Storage_Type", (Int16)1, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 + // Gantry_client.WriteByOrder("W_Wheel_id", SNS[SNS.Length - 1], number);//杞﹁疆SN鍙� + // Gantry_client.WriteByOrder("W_RequestUnload", true, number); + // #region 鏃ュ織璁板綍 + // WriteDBLog.Success("涓婃枡鍖虹敵璇�", $"璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}\n璇诲彇绗竴涓溅杞厜鐢典俊鍙凤細{MaterialSignal}\n\n" + + // $"鍐欏叆妗佹灦淇℃伅锛歕n鍖哄煙璐т綅鍙凤細{area}\n鎵樼洏涓婄殑绗嚑涓溅杞細{SNS.Length}\n鎵樼洏绫诲瀷锛歿1}\n杞﹁疆绫诲瀷锛歿(QueryMateriel(Station.stationType).TypeId == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId)}" + + // $"\n杞﹁疆SN鍙凤細{SNS[SNS.Length - 1]}\nW_RequestUnload锛歵rue", "PCS"); + // #endregion + // } + // } + // else + // { + // Gantry_client.WriteByOrder("W_RequestUnload", false, number); + // } + + // var Gantrydetails = plcRepository.Find(x => x.plcdetail_iotype == Gantryplc.plcinfo_iotyep && x.plcdetail_number == number).ToList(); + // var Gantry_Out_of_Area = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Gantry_Out_of_Area").First(), Gantry_client);//妗佹灦鏄惁鍦ㄥ尯鍩熷唴 + + // var QueryDate = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_QueryDate").First(), Gantry_client);//淇℃伅鏌ヨ + // if (QueryDate) + // { + // var Date_Vaild = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Date_Vaild").First(), Gantry_client);//淇℃伅纭 + // if (!Date_Vaild)//淇℃伅鏈夎锛岃褰曟棩蹇� + // { + // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + // Station.location_state = LocationStateEnum.Abnormal.ToString(); + // Station.remark = $"鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�"; + // stationinfoRepository.Update(Station, true); + // WriteDBLog.Error("涓婃枡鍖轰俊鎭煡璇�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�", "PCS"); + // return; + // } + // } + // var finished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Unlod_finished").First(), Gantry_client);//澶瑰彇瀹屾垚 + // var updatefinished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "W_Storage_update").First(), Gantry_client);//璐т綅鐘舵�佹洿鏂� + // if (!finished && updatefinished) + // Gantry_client.WriteByOrder("W_Storage_update", false, number);//璐т綅鐘舵�佹洿鏂� + // if (finished && !updatefinished) + // { + // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + // Updatemes(SNS[SNS.Length - 1]); + // Station.quantity = Station.quantity - 1; + // Station.bindSN = OperStr(SNS); + // if (Station.quantity <= 0) + // { + // Station.stationType = string.Empty; + // Station.Number = string.Empty; + // Station.heatNumber = string.Empty; + // Station.tray_status = "EmptyTray"; + // } + // var count = stationinfoRepository.Update(Station, true); + // if (count < 1) + // { + // WriteDBLog.Error("鍙栨枡瀹屾垚", $"涓婃枡浣嶄俊鎭洿鏂板け璐ワ紒涓婃枡浣嶇紪鍙凤細{Station.stationCode}", "PCS"); + // return; + // } + + // #region 娓呯┖淇℃伅 + // Gantry_client.WriteByOrder("W_AreaNr", (Int16)0, number);//鍖哄煙璐т綅鍙� + // Gantry_client.WriteByOrder("W_IndexNr", (Int16)0, number);//鎵樼洏涓婄殑绗嚑涓溅杞� + // Gantry_client.WriteByOrder("W_Storage_Type", (Int16)0, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 + // Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)0, number);//杞﹁疆绫诲瀷 + // #endregion + + // Gantry_client.WriteByOrder("W_Storage_update", true, number);//璐т綅鐘舵�佹洿鏂� + // #region 鏃ュ織璁板綍 + // WriteDBLog.Success("鍙栨枡瀹屾垚", $"鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂帮細{true}\nW_RequestUnload锛歿false}", "PCS"); + // #endregion + + // #region 鎶ヨ + // PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� + // MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� + // if (Station.quantity > 0 && (PalletSignal != 1 || MaterialSignal != 1)) + // { + // Station.location_state = LocationStateEnum.Abnormal.ToString(); + // Station.remark = "杞﹁疆鏁伴噺澶т簬0锛屽厜鐢垫娴嬫棤鎵樼洏鎴栨棤杞﹁疆"; + // stationinfoRepository.Update(Station, true); + // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ + // WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); + // } + // else if (Station.quantity < 1 && MaterialSignal == 1) + // { + // Station.location_state = LocationStateEnum.Abnormal.ToString(); + // Station.remark = "杞﹁疆鏁伴噺灏忎簬0锛屽厜鐢垫娴嬫湁杞﹁疆"; + // stationinfoRepository.Update(Station, true); + // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ + // WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); + // } + // #endregion + + + // } + //} + //else + // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 + #endregion } catch (Exception ex) { - WriteDBLog.Error("涓婃枡鍖�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + //WriteDBLog.Error("涓婃枡鍖�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", number, "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); + } + } + /// <summary> + /// 鑷姩鍙栫┖鎵� + /// </summary> + /// <param name="client"></param> + public void AutoEmptyTray(PLCClient client) + { + try + { + VOLContext Context = new VOLContext(); + Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); + Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); + Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); + Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); + var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); + List<string> stationCodes = new List<string>() { "S01001001", "S01001002", "W01001001", "W01001002", "W01001003" }; + string remark = ""; + foreach (var stationCode in stationCodes) + { + try + { + remark = "鏌ヨ绔欏彴"; + var station = stationinfoRepository.Find(x => x.stationCode == stationCode && x.enable).FirstOrDefault(); + if (station == null) continue; + remark = "鏌ヨ璧风偣鏄惁瀛樺湪浠诲姟"; + if (stationCode.Contains("W") && agvtaskService.Find(x => x.agv_fromaddress == stationCode || x.agv_toaddress == stationCode).Any()) continue; + else + { + if (agvtaskService.Find(x => x.agv_fromaddress == stationCode).Any()) continue; + } + remark = "璇诲彇鍏夌數淇″彿"; + var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == stationCode).ToList(); + var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� + var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� + if (PalletSignal == 1 && MaterialSignal == 2 && (station.stationCode.Contains("S0100100") ? station.tray_status == "EmptyTray" : true)) + { + var area = station.tray_type == "SmallTray" ? "11" : "10"; + remark = "鏌ヨ鏄惁瀛樺湪琛ョ┖鎵橀槦鍒椾换鍔�"; + var task = agvtaskService.Find(x => (x.agv_toaddress.Contains("W") || x.agv_toaddress.Contains("X")) && x.agv_taskstate == "Queue" && x.agv_tasktype == "TaskType_EmptyPallet" && x.agv_Traytype == station.tray_type).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}", "PCS"); + continue; + } + remark = "鏌ヨ绌烘墭鍙犵洏浣�"; + #region 绌烘墭鍙犵洏 + var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); + var EmptyStation = EmptyStations.Where(x => x.tray_type == station.tray_type && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); + if (EmptyStation == null) + EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); + #endregion + remark = "鏌ユ壘搴撳唴绌烘墭浣�"; + if (EmptyStation == null)//鏌ユ壘搴撳唴绌烘墭鐩� + EmptyStation = GetStation.EmptyPalletStation(area); + + + if (EmptyStation != null) + { + #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔� + remark = "鏌ヨ绌烘墭浣嶆槸鍚﹀瓨鍦ㄤ换鍔�"; + if (agvtaskService.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) + return; + #endregion + dt_agvtask agvtask = new dt_agvtask() + { + agv_fromaddress = station.stationCode, + agv_id = Guid.NewGuid(), + agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + agv_grade = station.stationCode.Contains("S0100100") ? 3 : 1, + agv_createtime = DateTime.Now, + agv_taskstate = "Create", + //agv_materielid = station.stationType, + agv_qty = 1, + StarQuantity = 0, + EndQuantity = EmptyStation.quantity, + agv_tasktype = "TaskType_EmptyPallet", + agv_toaddress = EmptyStation.stationCode, + agv_userid = "绯荤粺", + agv_TrayStatus = "EmptyTray",//station.tray_status, + agv_Traytype = station.tray_type, + }; + agvtaskService.Add(agvtask, true); + station.location_state = LocationStateEnum.Busy.ToString(); + stationinfoRepository.Update(station, true); + EmptyStation.location_state = LocationStateEnum.Busy.ToString(); + stationinfoRepository.Update(EmptyStation, true); + WriteDBLog.Success("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS"); + } + } + } + catch (Exception ex) + { + //WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}", "PCS"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", "閿欒淇℃伅锛�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}"); + } + } + } + catch (Exception ex) + { + //WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); + WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}"); } } - private string OperStr(string[] strArrty) + /// <summary> + /// 妫�娴嬪厜鐢电姸鎬佷笌绯荤粺璐т綅鐘舵�佹槸鍚︿竴鑷� + /// </summary> + /// <param name="client"></param> + public void StationState(PLCClient client) + { + + List<string> names = new List<string>() { "1鍗曞厓涓嬫枡鍖�", "2鍗曞厓涓嬫枡鍖�", "3鍗曞厓涓嬫枡鍖�" };/*, "涓婃枡鍖�"*/ + foreach (var name in names) + { + VOLContext Context = new VOLContext(); + Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); + var Stations = stationinfoRepository.Find(x => x.area == area_code(name) && x.enable && !x.location_state.Contains("Busy") && x.location_state != LocationStateEnum.Abnormal.ToString()); + foreach (var Station in Stations) + { + try + { + var PalletSignal = client.ReadByOrder<Int16>("R_PalletSignal", Station.stationCode);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� + var MaterialSignal = client.ReadByOrder<Int16>("R_MaterialSignal", Station.stationCode);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� + if (Station.quantity > 0 && (PalletSignal != 1 || MaterialSignal != 1))//绯荤粺璐т綅鏈夎溅杞紝鍏夌數妫�娴嬫棤杞﹁疆 + { + Station.location_state = LocationStateEnum.Abnormal.ToString(); + Station.remark = $"杞﹁疆鏁伴噺澶т簬0锛屾墭鐩樺厜鐢典俊鍙蜂负锛歿PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; + stationinfoRepository.Update(Station, true); + client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ + WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); + continue; + } + if (Station.location_state == LocationStateEnum.Stroge.ToString() && PalletSignal != 1) + { + Station.location_state = LocationStateEnum.Abnormal.ToString(); + Station.remark = $"璐т綅鐘舵�佷负鏈夎揣锛屾墭鐩樺厜鐢典俊鍙蜂负锛歿PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; + stationinfoRepository.Update(Station, true); + client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ + WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); + continue; + } + if (Station.location_state == LocationStateEnum.Empty.ToString() && (PalletSignal == 1 || MaterialSignal == 1))//绯荤粺璐т綅涓虹┖锛屽厜鐢垫娴嬫湁鏂� + { + Station.location_state = LocationStateEnum.Abnormal.ToString(); + Station.remark = $"璐т綅鐘舵�佷负绌鸿揣浣嶏紝鎵樼洏鍏夌數淇″彿涓猴細{PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; + stationinfoRepository.Update(Station, true); + client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ + WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); + continue; + } + //if (Station.quantity < 1 && MaterialSignal == 1)//绯荤粺璐т綅鏃犺溅杞紝鍏夌數妫�娴嬫湁杞﹁疆 + //{ + // Station.location_state = LocationStateEnum.Abnormal.ToString(); + // Station.remark = "璐т綅鏃犺溅杞紝鍏夌數妫�娴嬫湁杞﹁疆"; + // stationinfoRepository.Update(Station, true); + // client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ + // continue; + //} + } + catch (Exception ex) + { + WriteLog.Write_Log("鎶ラ敊鏃ュ織", name + "妫�娴嬪厜鐢垫姤閿�", "閿欒淇℃伅锛�", $"{Station.stationCode}锛氶敊璇俊鎭細{ex.Message}"); + } + } + } + } + public static string area_code(string area_name) + { + VOLContext Context = new VOLContext(); + Idt_areainfoRepository areainfoRepository = new dt_areainfoRepository(Context); + var areainfo = areainfoRepository.Find(x => x.area_name == area_name).FirstOrDefault(); + return areainfo.area_code.ToString(); + } + + public string OperStr(string[] strArrty) { string[] newstr = strArrty.RemoveLast(1); string Newsn = string.Join(",", newstr); @@ -226,15 +560,13 @@ var materielinfo1 = detectionlineRepository.Find(x => x.Description == type).OrderBy(x => x.TypeId).FirstOrDefault(); return materielinfo1; } - - public static string area_code(string area_name) + public static string QueryMateriel(int typeId) { VOLContext Context = new VOLContext(); - Idt_areainfoRepository areainfoRepository = new dt_areainfoRepository(Context); - var areainfo = areainfoRepository.Find(x => x.area_name == area_name).FirstOrDefault(); - return areainfo.area_code.ToString(); + Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); + var materielinfo = dataRepository.FindFirst(x => x.TypeId == typeId); + return materielinfo.Description; } - /// <summary> /// 鏇存敼宸ュ崟鐘舵�� /// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/PipelineJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/PipelineJob.cs" index a01ca75..084430e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/PipelineJob.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/equipment/PipelineJob.cs" @@ -54,580 +54,10 @@ return; } client.WriteByOrder("W_Palpitate", client.ReadByOrder<bool>("R_Palpitate", "蹇冭烦")); - Loadinglevel(client); - AutoEmptyTray(client); - StationState(client); - } - /// <summary> - /// 涓婃枡鍖� - /// </summary> - /// <param name="client"></param> - private void Loadinglevel(PLCClient client, string number = "涓婃枡鍖�") - { - try - { - VOLContext Context = new VOLContext(); - Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); - Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); - Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); - var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); - var Gantry_client = PLCClient.Clients.FirstOrDefault(t => t.PLCName == "妗佹灦"); - if (Gantry_client == null) throw new Exception("妗佹灦璋冨害鏈嶅姟鏈紑鍚紒"); - if (!Gantry_client.IsConnected) throw new Exception("涓庢鏋惰繛鎺ヨ秴鏃讹紒"); - var Gantryplc = repository.FindFirst(x => x.plcinfo_name == Gantry_client.PLCName); - - - #region 涓婃枡瀹屾垚 - - var AreaNr = Gantry_client.ReadByOrder<Int16>("W_AreaNr", number);//璇诲彇璐т綅鍙蜂俊鎭� - if (AreaNr != 0) - { - var station = stationinfoRepository.Find(x => x.area == area_code(number) && x.stationCode.Substring(x.stationCode.Length - 1, 1) == AreaNr.ToString()).FirstOrDefault(); - if (station != null) - { - var bindSNS = station.bindSN.Split(","); - var Gantrydetails = plcRepository.Find(x => x.plcdetail_iotype == Gantryplc.plcinfo_iotyep && x.plcdetail_number == number).ToList(); - - #region 淇℃伅鏌ヨ纭 - var QueryDate = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_QueryDate").First(), Gantry_client);//淇℃伅鏌ヨ - if (QueryDate) - { - var Date_Vaild = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Date_Vaild").First(), Gantry_client);//淇℃伅纭 - if (!Date_Vaild)//淇℃伅鏈夎锛岃褰曟棩蹇� - { - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - station.location_state = LocationStateEnum.Abnormal.ToString(); - station.remark = $"鏈煡璇㈠埌SN鍙凤細{bindSNS[bindSNS.Length - 1]}鐨勮鍗�"; - stationinfoRepository.Update(station, true); - WriteDBLog.Error("涓婃枡鍖轰俊鎭煡璇�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{station.stationCode}鏈煡璇㈠埌SN鍙凤細{bindSNS[bindSNS.Length - 1]}鐨勮鍗�", "PCS"); - return; - } - } - #endregion - - #region 璐т綅鐘舵�佹洿鏂板浣� - var finished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Unlod_finished").First(), Gantry_client);//澶瑰彇瀹屾垚 - var updatefinished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "W_Storage_update").First(), Gantry_client);//璐т綅鐘舵�佹洿鏂� - if (!finished && updatefinished) - { - Gantry_client.WriteByOrder("W_Storage_update", false, number);//璐т綅鐘舵�佹洿鏂� - WriteLog.Write_Log(number + "涓婃枡瀹屾垚", number + "璐т綅鐘舵�佹洿鏂颁俊鍙峰浣�", "鎴愬姛锛�", - $"璇诲彇妗佹灦淇℃伅锛歕n涓婃枡瀹屾垚淇″彿锛歿finished}\n\n鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂颁俊鍙凤細{false}"); - } - #endregion - - if (finished && !updatefinished) - { - - #region 鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷� - var area = Gantry_client.ReadByOrder<Int16>("place_prog", number);//鏀炬枡瀹屾垚鐨勫尯鍩熷彿 - - WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); - //if (AreaNr != area) - //{ - // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - // //WriteDBLog.Error(name + "鎶ヨ", $"PCS鍖哄煙鍙凤細{AreaNr}锛涙鏋跺尯鍩熷彿锛歿area}閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒", "PCS"); - // WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); - // return; - //} - #endregion - - #region 鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷� - var quantity = Gantry_client.ReadByOrder<Int16>("pos_prog", number);//妗佹灦璁板綍鐨勮溅杞暟閲� - - WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); - //if (quantity != station.quantity) - //{ - // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - // WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒"); - // return; - //} - #endregion - - Updatemes(bindSNS[bindSNS.Length - 1]); - station.quantity = station.quantity - 1; - station.bindSN = OperStr(bindSNS); - if (station.quantity <= 0) - { - station.stationType = string.Empty; - station.Number = string.Empty; - station.heatNumber = string.Empty; - station.tray_status = "EmptyTray"; - } - var count = stationinfoRepository.Update(station, true); - if (count < 1) - { - WriteDBLog.Error("鍙栨枡瀹屾垚", $"涓婃枡浣嶄俊鎭洿鏂板け璐ワ紒涓婃枡浣嶇紪鍙凤細{station.stationCode}", "PCS"); - return; - } - - Gantry_client.WriteByOrder("W_Storage_update", true, number);//璐т綅鐘舵�佹洿鏂� - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - - #region 娓呯┖淇℃伅 - Gantry_client.WriteByOrder("W_AreaNr", (Int16)0, number);//鍖哄煙璐т綅鍙� - Gantry_client.WriteByOrder("W_IndexNr", (Int16)0, number);//鎵樼洏涓婄殑绗嚑涓溅杞� - Gantry_client.WriteByOrder("W_Storage_Type", (Int16)0, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 - Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)0, number);//杞﹁疆绫诲瀷 - #endregion - - #region 鏃ュ織璁板綍 - WriteDBLog.Success("鍙栨枡瀹屾垚", $"鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂帮細{true}\nW_RequestUnload锛歿false}", "PCS"); - #endregion - } - } - } - - #endregion - - #region 鐢宠涓婃枡 - - if (!Gantry_client.ReadByOrder<bool>("W_RequestUnload", number)) - { - var Station = stationinfoRepository.Find(x => x.area == area_code(number) && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); - if (Station != null) - { - var SNS = Station.bindSN.Split(","); - List<string> list = new List<string>(); - foreach (var SN in SNS) - { - if (!string.IsNullOrEmpty(SN)) - list.Add(SN); - } - //缂撳瓨鏋朵笂杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷� - if (list.Count != Station.quantity) - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = "杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�"; - stationinfoRepository.Update(Station, true); - Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - #region 鏃ュ織璁板綍 - WriteDBLog.Error("涓婃枡鍖�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�", "PCS"); - #endregion - return; - } - - var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); - var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - - if (PalletSignal == 1 && MaterialSignal == 1) - { - Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)Convert.ToInt16(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId), number);//杞﹁疆绫诲瀷 - var area = Convert.ToInt16(Station.stationCode.Substring(Station.stationCode.Length - 1, 1)); - Gantry_client.WriteByOrder("W_AreaNr", (Int16)area, number);//鍖哄煙璐т綅鍙� - Gantry_client.WriteByOrder("W_IndexNr", (Int16)SNS.Length, number);//鎵樼洏涓婄殑绗嚑涓溅杞� - Gantry_client.WriteByOrder("W_Storage_Type", (Int16)1, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 - Gantry_client.WriteByOrder("W_Wheel_id", SNS[SNS.Length - 1], number);//杞﹁疆SN鍙� - Gantry_client.WriteByOrder("W_RequestUnload", true, number); - #region 鏃ュ織璁板綍 - WriteDBLog.Success("涓婃枡鍖虹敵璇�", $"璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}\n璇诲彇绗竴涓溅杞厜鐢典俊鍙凤細{MaterialSignal}\n\n" + - $"鍐欏叆妗佹灦淇℃伅锛歕n鍖哄煙璐т綅鍙凤細{area}\n鎵樼洏涓婄殑绗嚑涓溅杞細{SNS.Length}\n鎵樼洏绫诲瀷锛歿1}\n杞﹁疆绫诲瀷锛歿(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId)}" + - $"\n杞﹁疆SN鍙凤細{SNS[SNS.Length - 1]}\nW_RequestUnload锛歵rue", "PCS"); - #endregion - } - else - { - Gantry_client.WriteByOrder("W_RequestUnload", false, number); - } - - #region 鏇存柊涓�涓娴嬩笂鏂欎换鍔� - Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); - if (!agvtaskService.Find(x => x.agv_toaddress == Station.stationCode).Any()) - { - var task = agvtaskService.Find(x => x.agv_taskstate == "Queue" && (x.agv_tasktype == "TaskType_OutsourceOutbound" || x.agv_tasktype == "TaskType_Outbound") && x.agv_toaddress == "").OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); - if (task != null) - { - task.agv_taskstate = "Create"; - task.agv_toaddress = Station.stationCode; - agvtaskService.Update(task, true); - WriteDBLog.Success("鏇存柊涓�涓娴嬩笂鏂欎换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}", "PCS"); - } - } - #endregion - } - } - - #endregion - - - #region MyRegion - - /////鏌ユ壘涓婃枡鍖虹殑璐т綅 - //var Stations = stationinfoRepository.Find(x => x.area == area_code(number)).OrderBy(x => x.lastUpdateTime);//鏍规嵁鏃堕棿鍏堝悗鎺掑簭 - // //闇�娴嬭瘯涓�涓� - //var Station = Stations?.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.quantity).FirstOrDefault(); - - //if (Station != null) - //{ - // var SNS = Station.bindSN.Split(","); - // List<string> list = new List<string>(); - // foreach (var SN in SNS) - // { - // if (!string.IsNullOrEmpty(SN)) - // list.Add(SN); - // } - // //缂撳瓨鏋朵笂杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷� - // if (list.Count != Station.quantity) - // { - // Station.location_state = LocationStateEnum.Abnormal.ToString(); - // Station.remark = "杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�"; - // stationinfoRepository.Update(Station, true); - // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - // #region 鏃ュ織璁板綍 - // WriteDBLog.Error("涓婃枡鍖�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}杞﹁疆鏁伴噺涓嶴N鍙锋暟閲忎笉涓�鑷�", "PCS"); - // #endregion - // return; - // } - // var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); - // var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - // var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - - // var AreaNr = Gantry_client.ReadByOrder<Int16>("W_AreaNr", number);//璇诲彇璐т綅鍙蜂俊鎭� - // if (PalletSignal == 1 && MaterialSignal == 1) - // { - // if (AreaNr == 0) - // { - // Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)Convert.ToInt16(QueryMateriel(Station.stationType) == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId), number);//杞﹁疆绫诲瀷 - // var area = Convert.ToInt16(Station.stationCode.Substring(Station.stationCode.Length - 1, 1)); - // Gantry_client.WriteByOrder("W_AreaNr", (Int16)area, number);//鍖哄煙璐т綅鍙� - // Gantry_client.WriteByOrder("W_IndexNr", (Int16)SNS.Length, number);//鎵樼洏涓婄殑绗嚑涓溅杞� - // Gantry_client.WriteByOrder("W_Storage_Type", (Int16)1, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 - // Gantry_client.WriteByOrder("W_Wheel_id", SNS[SNS.Length - 1], number);//杞﹁疆SN鍙� - // Gantry_client.WriteByOrder("W_RequestUnload", true, number); - // #region 鏃ュ織璁板綍 - // WriteDBLog.Success("涓婃枡鍖虹敵璇�", $"璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}\n璇诲彇绗竴涓溅杞厜鐢典俊鍙凤細{MaterialSignal}\n\n" + - // $"鍐欏叆妗佹灦淇℃伅锛歕n鍖哄煙璐т綅鍙凤細{area}\n鎵樼洏涓婄殑绗嚑涓溅杞細{SNS.Length}\n鎵樼洏绫诲瀷锛歿1}\n杞﹁疆绫诲瀷锛歿(QueryMateriel(Station.stationType).TypeId == null ? QueryMateriel1(Station.stationType).TypeId : QueryMateriel(Station.stationType).TypeId)}" + - // $"\n杞﹁疆SN鍙凤細{SNS[SNS.Length - 1]}\nW_RequestUnload锛歵rue", "PCS"); - // #endregion - // } - // } - // else - // { - // Gantry_client.WriteByOrder("W_RequestUnload", false, number); - // } - - // var Gantrydetails = plcRepository.Find(x => x.plcdetail_iotype == Gantryplc.plcinfo_iotyep && x.plcdetail_number == number).ToList(); - // var Gantry_Out_of_Area = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Gantry_Out_of_Area").First(), Gantry_client);//妗佹灦鏄惁鍦ㄥ尯鍩熷唴 - - // var QueryDate = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_QueryDate").First(), Gantry_client);//淇℃伅鏌ヨ - // if (QueryDate) - // { - // var Date_Vaild = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Date_Vaild").First(), Gantry_client);//淇℃伅纭 - // if (!Date_Vaild)//淇℃伅鏈夎锛岃褰曟棩蹇� - // { - // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - // Station.location_state = LocationStateEnum.Abnormal.ToString(); - // Station.remark = $"鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�"; - // stationinfoRepository.Update(Station, true); - // WriteDBLog.Error("涓婃枡鍖轰俊鎭煡璇�", $"鍐欏叆妗佹灦淇℃伅锛歕nW_RequestUnload锛歠alse\n\n{Station.stationCode}鏈煡璇㈠埌SN鍙凤細{SNS[SNS.Length - 1]}鐨勮鍗�", "PCS"); - // return; - // } - // } - // var finished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "R_Unlod_finished").First(), Gantry_client);//澶瑰彇瀹屾垚 - // var updatefinished = (bool)DBExtension.Read(Gantrydetails.Where(x => x.plcdetail_name == "W_Storage_update").First(), Gantry_client);//璐т綅鐘舵�佹洿鏂� - // if (!finished && updatefinished) - // Gantry_client.WriteByOrder("W_Storage_update", false, number);//璐т綅鐘舵�佹洿鏂� - // if (finished && !updatefinished) - // { - // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - // Updatemes(SNS[SNS.Length - 1]); - // Station.quantity = Station.quantity - 1; - // Station.bindSN = OperStr(SNS); - // if (Station.quantity <= 0) - // { - // Station.stationType = string.Empty; - // Station.Number = string.Empty; - // Station.heatNumber = string.Empty; - // Station.tray_status = "EmptyTray"; - // } - // var count = stationinfoRepository.Update(Station, true); - // if (count < 1) - // { - // WriteDBLog.Error("鍙栨枡瀹屾垚", $"涓婃枡浣嶄俊鎭洿鏂板け璐ワ紒涓婃枡浣嶇紪鍙凤細{Station.stationCode}", "PCS"); - // return; - // } - - // #region 娓呯┖淇℃伅 - // Gantry_client.WriteByOrder("W_AreaNr", (Int16)0, number);//鍖哄煙璐т綅鍙� - // Gantry_client.WriteByOrder("W_IndexNr", (Int16)0, number);//鎵樼洏涓婄殑绗嚑涓溅杞� - // Gantry_client.WriteByOrder("W_Storage_Type", (Int16)0, number); //鎵樼洏绫诲瀷1-妯斁;2-绔栨斁 - // Gantry_client.WriteByOrder("W_Wheel_Type", (Int16)0, number);//杞﹁疆绫诲瀷 - // #endregion - - // Gantry_client.WriteByOrder("W_Storage_update", true, number);//璐т綅鐘舵�佹洿鏂� - // #region 鏃ュ織璁板綍 - // WriteDBLog.Success("鍙栨枡瀹屾垚", $"鍐欏叆妗佹灦淇℃伅锛歕n璐т綅鐘舵�佹洿鏂帮細{true}\nW_RequestUnload锛歿false}", "PCS"); - // #endregion - - // #region 鎶ヨ - // PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - // MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - // if (Station.quantity > 0 && (PalletSignal != 1 || MaterialSignal != 1)) - // { - // Station.location_state = LocationStateEnum.Abnormal.ToString(); - // Station.remark = "杞﹁疆鏁伴噺澶т簬0锛屽厜鐢垫娴嬫棤鎵樼洏鎴栨棤杞﹁疆"; - // stationinfoRepository.Update(Station, true); - // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - // WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - // } - // else if (Station.quantity < 1 && MaterialSignal == 1) - // { - // Station.location_state = LocationStateEnum.Abnormal.ToString(); - // Station.remark = "杞﹁疆鏁伴噺灏忎簬0锛屽厜鐢垫娴嬫湁杞﹁疆"; - // stationinfoRepository.Update(Station, true); - // client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ - // WriteDBLog.Error(number + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - // } - // #endregion - - - // } - //} - //else - // Gantry_client.WriteByOrder("W_RequestUnload", false, number);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆 - #endregion - } - catch (Exception ex) - { - WriteDBLog.Error("涓婃枡鍖�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); - } - } - /// <summary> - /// 鑷姩鍙栫┖鎵� - /// </summary> - /// <param name="client"></param> - private void AutoEmptyTray(PLCClient client) - { - try - { - VOLContext Context = new VOLContext(); - Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); - Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); - Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); - Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); - var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); - List<string> stationCodes = new List<string>() { "S01001001", "S01001002", "W01001001", "W01001002", "W01001003" }; - string remark = ""; - foreach (var stationCode in stationCodes) - { - try - { - remark = "鏌ヨ绔欏彴"; - var station = stationinfoRepository.Find(x => x.stationCode == stationCode && x.enable).FirstOrDefault(); - if (station == null) continue; - remark = "鏌ヨ璧风偣鏄惁瀛樺湪浠诲姟"; - if (stationCode.Contains("W") && agvtaskService.Find(x => x.agv_fromaddress == stationCode || x.agv_toaddress == stationCode).Any()) continue; - else - { - if (agvtaskService.Find(x => x.agv_fromaddress == stationCode).Any()) continue; - } - remark = "璇诲彇鍏夌數淇″彿"; - var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == stationCode).ToList(); - var PalletSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - var MaterialSignal = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), client);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - if (PalletSignal == 1 && MaterialSignal == 2 && (station.stationCode.Contains("S0100100") ? station.tray_status == "EmptyTray" : true)) - { - var area = station.tray_type == "SmallTray" ? "11" : "10"; - remark = "鏌ヨ鏄惁瀛樺湪琛ョ┖鎵橀槦鍒椾换鍔�"; - var task = agvtaskService.Find(x => (x.agv_toaddress.Contains("W") || x.agv_toaddress.Contains("X")) && x.agv_taskstate == "Queue" && x.agv_tasktype == "TaskType_EmptyPallet" && x.agv_Traytype == station.tray_type).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}", "PCS"); - continue; - } - remark = "鏌ヨ绌烘墭鍙犵洏浣�"; - #region 绌烘墭鍙犵洏 - var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); - var EmptyStation = EmptyStations.Where(x => x.tray_type == station.tray_type && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); - if (EmptyStation == null) - EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); - #endregion - remark = "鏌ユ壘搴撳唴绌烘墭浣�"; - if (EmptyStation == null)//鏌ユ壘搴撳唴绌烘墭鐩� - EmptyStation = GetStation.EmptyPalletStation(area); - - - if (EmptyStation != null) - { - #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔� - remark = "鏌ヨ绌烘墭浣嶆槸鍚﹀瓨鍦ㄤ换鍔�"; - if (agvtaskService.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) - return; - #endregion - dt_agvtask agvtask = new dt_agvtask() - { - agv_fromaddress = station.stationCode, - agv_id = Guid.NewGuid(), - agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), - agv_grade = station.stationCode.Contains("S0100100") ? 3 : 1, - agv_createtime = DateTime.Now, - agv_taskstate = "Create", - //agv_materielid = station.stationType, - agv_qty = 1, - StarQuantity = 0, - EndQuantity = EmptyStation.quantity, - agv_tasktype = "TaskType_EmptyPallet", - agv_toaddress = EmptyStation.stationCode, - agv_userid = "绯荤粺", - agv_TrayStatus = "EmptyTray",//station.tray_status, - agv_Traytype = station.tray_type, - }; - agvtaskService.Add(agvtask, true); - station.location_state = LocationStateEnum.Busy.ToString(); - stationinfoRepository.Update(station, true); - EmptyStation.location_state = LocationStateEnum.Busy.ToString(); - stationinfoRepository.Update(EmptyStation, true); - WriteDBLog.Success("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS"); - } - } - } - catch (Exception ex) - { - WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}", "PCS"); - } - } - } - catch (Exception ex) - { - WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); - } - } - - /// <summary> - /// 妫�娴嬪厜鐢电姸鎬佷笌绯荤粺璐т綅鐘舵�佹槸鍚︿竴鑷� - /// </summary> - /// <param name="client"></param> - private void StationState(PLCClient client) - { - try - { - List<string> names = new List<string>() { "1鍗曞厓涓嬫枡鍖�", "2鍗曞厓涓嬫枡鍖�", "3鍗曞厓涓嬫枡鍖�" };/*, "涓婃枡鍖�"*/ - foreach (var name in names) - { - VOLContext Context = new VOLContext(); - Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); - var Stations = stationinfoRepository.Find(x => x.area == area_code(name) && x.enable && !x.location_state.Contains("Busy") && x.location_state != LocationStateEnum.Abnormal.ToString()); - foreach (var Station in Stations) - { - var PalletSignal = client.ReadByOrder<Int16>("R_PalletSignal", Station.stationCode);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃� - var MaterialSignal = client.ReadByOrder<Int16>("R_MaterialSignal", Station.stationCode);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃� - if (Station.quantity > 0 && (PalletSignal != 1 || MaterialSignal != 1))//绯荤粺璐т綅鏈夎溅杞紝鍏夌數妫�娴嬫棤杞﹁疆 - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = $"杞﹁疆鏁伴噺澶т簬0锛屾墭鐩樺厜鐢典俊鍙蜂负锛歿PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; - stationinfoRepository.Update(Station, true); - client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ - WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - continue; - } - if (Station.location_state == LocationStateEnum.Stroge.ToString() && PalletSignal != 1) - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = $"璐т綅鐘舵�佷负鏈夎揣锛屾墭鐩樺厜鐢典俊鍙蜂负锛歿PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; - stationinfoRepository.Update(Station, true); - client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ - WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - continue; - } - if (Station.location_state == LocationStateEnum.Empty.ToString() && (PalletSignal == 1 || MaterialSignal == 1))//绯荤粺璐т綅涓虹┖锛屽厜鐢垫娴嬫湁鏂� - { - Station.location_state = LocationStateEnum.Abnormal.ToString(); - Station.remark = $"璐т綅鐘舵�佷负绌鸿揣浣嶏紝鎵樼洏鍏夌數淇″彿涓猴細{PalletSignal}锛岃揣鐗╁厜鐢典俊鍙蜂负锛歿MaterialSignal}"; - stationinfoRepository.Update(Station, true); - client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ - WriteDBLog.Error(name + "鎶ヨ", $"璐т綅缂栧彿锛歿Station.stationCode}锛涢敊璇俊鎭細{Station.remark}", "PCS"); - continue; - } - //if (Station.quantity < 1 && MaterialSignal == 1)//绯荤粺璐т綅鏃犺溅杞紝鍏夌數妫�娴嬫湁杞﹁疆 - //{ - // Station.location_state = LocationStateEnum.Abnormal.ToString(); - // Station.remark = "璐т綅鏃犺溅杞紝鍏夌數妫�娴嬫湁杞﹁疆"; - // stationinfoRepository.Update(Station, true); - // client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//鎶ヨ - // continue; - //} - } - } - } - catch (Exception ex) - { - - //throw; - } - } - public static string area_code(string area_name) - { - VOLContext Context = new VOLContext(); - Idt_areainfoRepository areainfoRepository = new dt_areainfoRepository(Context); - var areainfo = areainfoRepository.Find(x => x.area_name == area_name).FirstOrDefault(); - return areainfo.area_code.ToString(); - } - - private string OperStr(string[] strArrty) - { - string[] newstr = strArrty.RemoveLast(1); - string Newsn = string.Join(",", newstr); - - return Newsn; - } - public static dt_geometry_data QueryMateriel(string type) - { - VOLContext Context = new VOLContext(); - Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); - var materielinfo = dataRepository.Find(x => x.Description == type).OrderBy(x => x.TypeId).FirstOrDefault(); - return materielinfo; - } - public static dt_geometry_data_detectionline QueryMateriel1(string type) - { - VOLContext Context = new VOLContext(); - Idt_geometry_data_detectionlineRepository detectionlineRepository = new dt_geometry_data_detectionlineRepository(Context); - var materielinfo1 = detectionlineRepository.Find(x => x.Description == type).OrderBy(x => x.TypeId).FirstOrDefault(); - return materielinfo1; - } - public static string QueryMateriel(int typeId) - { - VOLContext Context = new VOLContext(); - Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); - var materielinfo = dataRepository.FindFirst(x => x.TypeId == typeId); - return materielinfo.Description; - } - /// <summary> - /// 鏇存敼宸ュ崟鐘舵�� - /// </summary> - /// <param name="SN"></param> - public static void Updatemes(string SN) - { - VOLContext Context = new VOLContext(); - Idt_mes_detailRepository mes_DetailRepository = new dt_mes_detailRepository(Context); - Idt_mes_headRepository mes_HeadRepository = new dt_mes_headRepository(Context); - IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); - //var mes_Detail = freeDB.Select<dt_mes_detail>().Where(x => x.SN == SN).First(); - var Mes_Work = workinfoRepository.Find(x => x.SN == SN && x.processCode == "28").FirstOrDefault(); - var mes_Detail = mes_DetailRepository.Find(x => x.SN == SN && x.jobID == Mes_Work.jobID).FirstOrDefault(); - if (mes_Detail != null) - { - mes_Detail.Status = "涓婄嚎"; - mes_Detail.FinishTime = DateTime.Now; - //freeDB.DataBase.Update<dt_mes_detail>().SetSource(mes_Detail).UpdateColumns(x => new { x.Status, x.FinishTime }).ExecuteAffrows(); - mes_DetailRepository.Update(mes_Detail, true); - //var mes_Head = freeDB.Select<dt_mes_head>().Where(x => x.jobID == mes_Detail.jobID).First(); - var mes_Head = mes_HeadRepository.Find(x => x.jobID == mes_Detail.jobID).FirstOrDefault(); - if (mes_Head != null) - { - mes_Head.finishNum = mes_Head.finishNum + 1; - //freeDB.DataBase.Update<dt_mes_head>().SetSource(mes_Head).UpdateColumns(x => new { x.finishNum }).ExecuteAffrows(); - mes_HeadRepository.Update(mes_Head, true); - } - } + Pipeline pipeline = new Pipeline(); + pipeline.Loadinglevel(client); + pipeline.AutoEmptyTray(client); + pipeline.StationState(client); } } } -- Gitblit v1.9.3