¶Ô±ÈÐÂÎļþ |
| | |
| | | using HslCommunication; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Globalization; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Xml.Linq; |
| | | using WIDESEA_Comm; |
| | | using WIDESEA_Comm.LogInfo; |
| | | using WIDESEA_Core.BaseProvider; |
| | | using WIDESEA_Core.EFDbContext; |
| | | using WIDESEA_Entity.DomainModels; |
| | | using WIDESEA_WCS.IRepositories; |
| | | using WIDESEA_WCS.JobsPart.Common; |
| | | using WIDESEA_WCS.Repositories; |
| | | using WIDESEA_WCS.WCSClient; |
| | | using WIDESEA_WMS.IRepositories; |
| | | using WIDESEA_WMS.Repositories; |
| | | using static System.Collections.Specialized.BitVector32; |
| | | |
| | | namespace WIDESEA_WCS |
| | | { |
| | | public class Gantry2 |
| | | { |
| | | #region è§è§æ£æµè¿½æº¯è½¦è½®ä¿¡æ¯ |
| | | /// <summary> |
| | | /// è§è§æ£æµè¿½æº¯è½¦è½®ä¿¡æ¯ |
| | | /// </summary> |
| | | /// <param name="client"></param> |
| | | public void QuerySJSN(PLCClient client) |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_info_traceRepository traceRepository = new dt_info_traceRepository(Context); |
| | | List<string> names = new List<string>() { "è§è§æ£æµ1", "è§è§æ£æµ2", "è§è§æ£æµ3", "è§è§æ£æµ4" }; |
| | | foreach (string name in names) |
| | | { |
| | | try |
| | | { |
| | | var Read_Load = client.ReadByOrder<bool>("Read_Load", name);//è§è§æ£æµå¼å§ä¿¡å· |
| | | if (Read_Load) |
| | | { |
| | | var PartID_Load = client.ReadByOrder<string>("PartID_Load", name);//车轮SNå· |
| | | var State_Load = client.ReadByOrder<Int16>("State_Load ", name);//è½¦è½®ç¶æ |
| | | var LoadTime = client.ReadByOrder<string>("LoadTime ", name);//è§è§æ£æµå¼å§æ¶é´ |
| | | var time = DateTime.ParseExact(LoadTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture); |
| | | var info_trace = traceRepository.Find(x => x.trace_SN == PartID_Load).FirstOrDefault(); |
| | | if (info_trace != null) |
| | | { |
| | | info_trace.trace_tcvm_number = name; |
| | | info_trace.trace_tcvm_start_time = time; |
| | | traceRepository.Update(info_trace, x => new { x.trace_tcvm_number, x.trace_tcvm_start_time }, true); |
| | | } |
| | | client.WriteByOrder("ReadFinished_Load", true, name); |
| | | } |
| | | else |
| | | client.WriteByOrder("ReadFinished_Load", false, name); |
| | | var Read_Unload = client.ReadByOrder<bool>("Read_Unload", name);//è§è§æ£æµå®æä¿¡å· |
| | | if (Read_Unload) |
| | | { |
| | | var PartID_Unload = client.ReadByOrder<string>("PartID_Unload", name);//车轮SNå· |
| | | var State_Unload = client.ReadByOrder<Int16>("State_Unload ", name);//è½¦è½®ç¶æ |
| | | var UnloadTime = client.ReadByOrder<string>("UnloadTime ", name);//è§è§æ£æµå¼å§æ¶é´ |
| | | var info_trace = traceRepository.Find(x => x.trace_SN == PartID_Unload).FirstOrDefault(); |
| | | var time = DateTime.ParseExact(UnloadTime, "yyyyMMddHHmmss", CultureInfo.CurrentCulture); |
| | | if (info_trace != null) |
| | | { |
| | | info_trace.trace_tcvm_finish_time = time; |
| | | info_trace.trace_tcvm_statu = State_Unload; |
| | | traceRepository.Update(info_trace, x => new { x.trace_tcvm_finish_time, x.trace_tcvm_statu }, true); |
| | | } |
| | | client.WriteByOrder("ReadFinished_Unload", true, name); |
| | | } |
| | | else |
| | | client.WriteByOrder("ReadFinished_Unload", false, name); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("æ¥éæ¥å¿", name, "é误信æ¯ï¼", $"é误信æ¯ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 模å¼2æ¥è¯¢è½¦è½®è®¢ååè½¦è½®åæ° |
| | | /// <summary> |
| | | /// 模å¼2æ¥è¯¢è½¦è½®è®¢ååè½¦è½®åæ° |
| | | /// </summary> |
| | | /// <param name="client"></param> |
| | | public void QueryWheelOrderData(PLCClient client) |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); |
| | | IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); |
| | | List<string> names = new List<string>() { "1åå
ç³è¯·æ¥è¯¢è®¢ååè½¦è½®åæ°", "2åå
ç³è¯·æ¥è¯¢è®¢ååè½¦è½®åæ°", "æ£æµä¸æç³è¯·æ¥è¯¢è®¢ååè½¦è½®åæ°" }; |
| | | foreach (var name in names) |
| | | { |
| | | try |
| | | { |
| | | var oi_on = client.ReadByOrder<Byte>("oi_on", name); //ç³è¯· |
| | | |
| | | if (oi_on == 1) |
| | | { |
| | | var wp_id = client.ReadByOrder<string>("o_wp_id", name); |
| | | |
| | | #region SNå·ä¸è½ä¸ºç©º |
| | | if (string.IsNullOrEmpty(wp_id)) |
| | | { |
| | | client.WriteByOrder("i_status", (byte)0, name); |
| | | WriteLog.Write_Log(name, wp_id, "é误信æ¯ï¼", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{wp_id}\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\ni_statusï¼2\noi_onï¼0\n\n车轮SNå·ä¸ºç©º"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | #region å·¥åä¸è½ä¸ºç©º |
| | | var Work = workinfoRepository.Find(x => x.SN == wp_id && (name.Contains("æ£æµä¸æ") ? x.processCode == "28" : x.processCode == "17")).OrderByDescending(x => x.CreateTime).FirstOrDefault(); |
| | | if (Work == null) |
| | | { |
| | | client.WriteByOrder("i_status", (byte)2, name); |
| | | WriteLog.Write_Log(name, wp_id, "é误信æ¯ï¼", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{wp_id}\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\ni_statusï¼2\noi_onï¼0\n\næªæ¥è¯¢å°å·¥å详æ
"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | #region è½¦è½®åæ°ä¸è½ä¸ºç©º |
| | | var geometry = Pipeline.QueryMateriel(Work.drawingNo); |
| | | if (geometry == null) |
| | | { |
| | | client.WriteByOrder("i_status", (byte)3, name); |
| | | WriteLog.Write_Log(name, wp_id, "é误信æ¯ï¼", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{wp_id}\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\ni_statusï¼3\noi_onï¼0\n\nå¾å·ï¼{Work.drawingNo}æªæ¥è¯¢å°è½¦è½®ä¿¡æ¯åæ°"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | #region åå
¥åæ° |
| | | client.WriteByOrder("i_stackNoRange", geometry.stackNoRange, name);//æå
æ°é |
| | | client.WriteByOrder("i_drawing_id", Work.drawingNo, name);//å¾å· |
| | | client.WriteByOrder("i_job_id", Work.jobID, name);//å·¥åç¼å· |
| | | client.WriteByOrder("i_heat_id", Work.heatID, name);//çä»£å· |
| | | client.WriteByOrder("i_batch_id", Work.heatBatchID, name);//çå¤çæ¹æ¬¡ |
| | | |
| | | client.WriteByOrder("i_parameter_a", (float)geometry.a, name); |
| | | client.WriteByOrder("i_parameter_b", (float)geometry.b, name); |
| | | client.WriteByOrder("i_parameter_c", (float)geometry.c, name); |
| | | client.WriteByOrder("i_parameter_d", (float)geometry.d, name); |
| | | client.WriteByOrder("i_parameter_e", (float)geometry.e, name); |
| | | client.WriteByOrder("i_parameter_f", (float)geometry.f, name); |
| | | client.WriteByOrder("i_parameter_g", (float)geometry.g, name); |
| | | client.WriteByOrder("i_parameter_h", (float)geometry.h, name); |
| | | |
| | | client.WriteByOrder("i_status", (byte)1, name); |
| | | client.WriteByOrder("i_wp_id", wp_id, name); |
| | | #endregion |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("æ¥éæ¥å¿", name, "é误信æ¯ï¼", $"é误信æ¯ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 模å¼2åæ¾æå®æ |
| | | /// <summary> |
| | | /// 模å¼2åæ¾æå®æ |
| | | /// </summary> |
| | | /// <param name="client"></param> |
| | | public void Finished(PLCClient client) |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); |
| | | Idt_mes_detailRepository mes_DetailRepository = new dt_mes_detailRepository(Context); |
| | | List<string> names = new List<string>() { "1åå
åææ¾æ", "2åå
åææ¾æ" }; |
| | | foreach (string name in names) |
| | | { |
| | | try |
| | | { |
| | | var areaCode = Pipeline.area_code(name.Contains("1åå
") ? "1åå
䏿åº" : "2åå
䏿åº"); |
| | | |
| | | |
| | | var R_Finished = client.ReadByOrder<Int16>("R_Finished", name); //1ï¼åæå®æï¼2ï¼æ¾æå®æ |
| | | var W_Update_Finished = client.ReadByOrder<Int16>("W_Update_Finished", name);//1ï¼åæå®æï¼2ï¼æ¾æå®æ |
| | | |
| | | #region å¤ä½å®æä¿¡å· |
| | | if (R_Finished != 1 && W_Update_Finished == 1 || R_Finished != 2 && W_Update_Finished == 2) |
| | | { |
| | | client.WriteByOrder("W_Update_Finished", (Int16)0, name); |
| | | } |
| | | #endregion |
| | | |
| | | #region åæå®æ |
| | | if (R_Finished == 1 && W_Update_Finished != 1) |
| | | { |
| | | var R_Wheel_id = client.ReadByOrder<string>("R_Wheel_id", name);//车轮SNå· |
| | | var R_In_Clamp_Area = client.ReadByOrder<Int16>("R_In_Clamp_Area", name);//䏿ä½å· |
| | | var R_IndexNr = client.ReadByOrder<Int16>("R_IndexNr", name); //æçä¸ç第å 个车轮 |
| | | var station = stationinfoRepository.Find(x => x.area == areaCode && x.stationCode.Substring(x.stationCode.Length - 1, 1) == R_In_Clamp_Area.ToString()).FirstOrDefault(); |
| | | if (station != null) |
| | | { |
| | | if (!station.bindSN.Contains(R_Wheel_id)) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"åæå®æå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\nå第å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼å½å䏿使 æ¤è½¦è½®ï¼"); |
| | | } |
| | | var bindSNS = station.bindSN.Split(","); |
| | | Updatemes(R_Wheel_id, name); |
| | | station.bindSN = OperStr(bindSNS, R_Wheel_id); |
| | | var billets = station.billetID.Split(","); |
| | | station.billetID = OperStr(billets); |
| | | station.quantity = station.quantity - 1; |
| | | if (station.quantity <= 0) |
| | | { |
| | | station.stationType = string.Empty; |
| | | station.Number = string.Empty; |
| | | station.heatNumber = string.Empty; |
| | | station.tray_status = TrayStateEnum.EmptyTray.ToString(); |
| | | } |
| | | var count = stationinfoRepository.Update(station, true); |
| | | if (count < 1) throw new Exception($"åæå®æä¿¡æ¯æ´æ°å¤±è´¥ï¼ä¸æä½ç¼å·ï¼{station.stationCode}"); |
| | | |
| | | client.WriteByOrder("W_Update_Finished", (Int16)1, name);//1ï¼åææ´æ°å®æï¼2ï¼æ¾ææ´æ°å®æ |
| | | client.WriteByOrder("W_In_Clamp_Area", R_In_Clamp_Area, name);//䏿ä½å· |
| | | client.WriteByOrder("W_IndexNr", R_IndexNr, name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | } |
| | | WriteLog.Write_Log("模å¼2" + name + "åæå®æ", station.stationCode, $"车轮SNå·ï¼{R_Wheel_id}", $"䏿ä½å·ï¼{R_In_Clamp_Area}"); |
| | | } |
| | | #endregion |
| | | |
| | | #region æ¾æå®æ |
| | | else if (R_Finished == 2 && W_Update_Finished != 2) |
| | | { |
| | | var R_Wheel_id = client.ReadByOrder<string>("R_Wheel_id", name);//车轮SNå· |
| | | var R_In_Clamp_Area = client.ReadByOrder<Int16>("R_In_Clamp_Area", name);//䏿ä½å· |
| | | var R_IndexNr = client.ReadByOrder<Int16>("R_IndexNr", name); //æçä¸ç第å 个车轮 |
| | | var station = stationinfoRepository.Find(x => x.area == areaCode && x.stationCode.Substring(x.stationCode.Length - 1, 1) == R_In_Clamp_Area.ToString()).FirstOrDefault(); |
| | | if (station != null) |
| | | { |
| | | if (!string.IsNullOrEmpty(station.bindSN)) |
| | | { |
| | | if (station.bindSN.Contains(R_Wheel_id)) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"æ¾æå®æå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\næ¾ç¬¬å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼å·²åå¨è½¦è½®SNå·ï¼"); |
| | | } |
| | | } |
| | | var Mes_Work = workinfoRepository.Find(x => x.SN == R_Wheel_id && x.processCode == "17").OrderByDescending(x => x.CreateTime).FirstOrDefault(); |
| | | #region è´§ä½ç¶ææ´æ° |
| | | station.bindSN = string.IsNullOrEmpty(station.bindSN) ? R_Wheel_id : station.bindSN + "," + R_Wheel_id; |
| | | station.billetID = string.IsNullOrEmpty(station.billetID) ? Mes_Work.billetID.ToString() : station.billetID + "," + Mes_Work.billetID; |
| | | station.quantity++; |
| | | if (station.quantity == 1) |
| | | { |
| | | station.stationType = Mes_Work.drawingNo; |
| | | station.Number = Mes_Work.workOrder; |
| | | station.heatNumber = Mes_Work.heatID; |
| | | station.tray_status = TrayStateEnum.StrogeTray.ToString(); |
| | | } |
| | | var count = stationinfoRepository.Update(station, true); |
| | | if (count < 1) |
| | | throw new Exception($"æ¾æå®æä¿¡æ¯æ´æ°å¤±è´¥ï¼ä¸æä½ç¼å·ï¼{station.stationCode}"); |
| | | #endregion |
| | | |
| | | #region ä¿®æ¹å·¥åç¶æ |
| | | var Detail = mes_DetailRepository.FindFirst(x => x.jobID == Mes_Work.jobID && x.SN == Mes_Work.SN); |
| | | Detail.Status = "ä¸çº¿"; |
| | | Detail.FinishTime = DateTime.Now; |
| | | count = mes_DetailRepository.Update(Detail, x => new { x.Status, x.FinishTime }, true); |
| | | if (count < 1) |
| | | throw new Exception($"å·¥ååè¡¨ä¿¡æ¯æ´æ°å¤±è´¥ï¼è½¦è½®SNå·ï¼{Detail.SN}"); |
| | | #endregion |
| | | |
| | | client.WriteByOrder("W_Update_Finished", (Int16)2, name);//1ï¼åææ´æ°å®æï¼2ï¼æ¾ææ´æ°å®æ |
| | | client.WriteByOrder("W_In_Clamp_Area", R_In_Clamp_Area, name);//䏿ä½å· |
| | | client.WriteByOrder("W_IndexNr", R_IndexNr, name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | } |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æ", station.stationCode, $"车轮SNå·ï¼{R_Wheel_id}", $"䏿ä½å·ï¼{R_In_Clamp_Area}"); |
| | | } |
| | | #endregion |
| | | |
| | | var R_Request = client.ReadByOrder<Int16>("R_Request", name);//1ï¼åæï¼2ï¼æ¾æ |
| | | #region åæ |
| | | if (R_Request == 1) |
| | | { |
| | | var R_Wheel_id = client.ReadByOrder<string>("R_Wheel_id", name);//车轮SNå· |
| | | var R_In_Clamp_Area = client.ReadByOrder<Int16>("R_In_Clamp_Area", name);//䏿ä½å· |
| | | var R_IndexNr = client.ReadByOrder<Int16>("R_IndexNr", name); //æçä¸ç第å 个车轮 |
| | | var station = stationinfoRepository.Find(x => x.area == areaCode && x.stationCode.Substring(x.stationCode.Length - 1, 1) == R_In_Clamp_Area.ToString()).FirstOrDefault(); |
| | | if (station != null) |
| | | { |
| | | var Work = workinfoRepository.Find(x => x.SN == R_Wheel_id && x.processCode == "28").OrderByDescending(x => x.CreateTime).FirstOrDefault(); |
| | | if (Work == null) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·åæå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\nå第å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼æªæ¥è¯¢å°æ£æµå·¥åä¿¡æ¯ï¼"); |
| | | } |
| | | if (!station.bindSN.Contains(R_Wheel_id)) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·åæå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\nå第å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼å½å䏿使 æ¤è½¦è½®ï¼"); |
| | | } |
| | | if (station.location_state != LocationStateEnum.Stroge.ToString()) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)4, name);//åæä¸å
许 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·åæå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{4}\n车轮SNå·ï¼{R_Wheel_id}\nå第å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼ä¸æä½è´§ä½ç¶æä¸ä¸ºæè´§ï¼"); |
| | | } |
| | | if (station.quantity != R_IndexNr) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·åæå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\nå第å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼æºæ¢°ææå车轮ä¸ä¸æä½æ°éä¸å¹é
ï¼"); |
| | | } |
| | | client.WriteByOrder("W_In_Clamp_Area", (Int16)R_In_Clamp_Area, name); |
| | | client.WriteByOrder("W_IndexNr", (Int16)R_IndexNr, name); |
| | | client.WriteByOrder("W_IsError", (Int16)3, name);//åæå
许 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | } |
| | | else |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·åæå¤±è´¥ï¼ä¸æä½å·ï¼{R_In_Clamp_Area}ï¼W_IsErrorï¼{5},æªå¹é
å°ä¸æä½å·ï¼"); |
| | | } |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·åæ", station.stationCode, $"W_IsErrorï¼{3},车轮SNå·ï¼{R_Wheel_id}", $"䏿ä½å·ï¼{R_In_Clamp_Area}\nå第å 个车轮ï¼{R_IndexNr}ï¼\n䏿ä½è½¦è½®æ°ï¼{station.quantity}"); |
| | | } |
| | | #endregion |
| | | |
| | | #region æ¾æ |
| | | else if (R_Request == 2) |
| | | { |
| | | var R_Wheel_id = client.ReadByOrder<string>("R_Wheel_id", name);//车轮SNå· |
| | | var R_In_Clamp_Area = client.ReadByOrder<Int16>("R_In_Clamp_Area", name);//䏿ä½å· |
| | | var R_IndexNr = client.ReadByOrder<Int16>("R_IndexNr", name); //æçä¸ç第å 个车轮 |
| | | var R_PartStatus = client.ReadByOrder<Int16>("R_PartStatus", name);//è½¦è½®ç¶æ |
| | | var station = stationinfoRepository.Find(x => x.area == areaCode && x.stationCode.Substring(x.stationCode.Length - 1, 1) == R_In_Clamp_Area.ToString()).FirstOrDefault(); |
| | | if (station != null) |
| | | { |
| | | if (!string.IsNullOrEmpty(station.bindSN)) |
| | | { |
| | | if (station.bindSN.Contains(R_Wheel_id)) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·æ¾æå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\næ¾ç¬¬å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼å·²åå¨è½¦è½®SNå·ï¼"); |
| | | } |
| | | } |
| | | if (station.location_state != LocationStateEnum.Stroge.ToString()) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)2, name);//æ¾æä¸å
许 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·æ¾æå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{2}\n车轮SNå·ï¼{R_Wheel_id}\næ¾ç¬¬å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼ä¸æä½è´§ä½ç¶æä¸ä¸ºæè´§ï¼"); |
| | | } |
| | | if (station.quantity + 1 != R_IndexNr) |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·æ¾æå¤±è´¥ï¼ä¸æä½å·ï¼{station.stationCode}\nW_IsErrorï¼{5}\n车轮SNå·ï¼{R_Wheel_id}\næ¾ç¬¬å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\né误信æ¯ï¼æºæ¢°ææ¾æè½¦è½®ä¸ä¸æä½æ°éä¸å¹é
ï¼"); |
| | | } |
| | | client.WriteByOrder("W_In_Clamp_Area", (Int16)R_In_Clamp_Area, name); |
| | | client.WriteByOrder("W_IndexNr", (Int16)R_IndexNr, name); |
| | | client.WriteByOrder("W_IsError", (Int16)1, name);//æ¾æå
许 |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | } |
| | | else |
| | | { |
| | | client.WriteByOrder("W_IsError", (Int16)5, name);//æ¥è¦ |
| | | client.WriteByOrder("W_Wheel_id", R_Wheel_id, name);//车轮SNå· |
| | | throw new Exception($"ç³è¯·æ¾æå¤±è´¥ï¼ä¸æä½å·ï¼{R_In_Clamp_Area}ï¼æªå¹é
å°ä¸æä½å·ï¼"); |
| | | } |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æ", station.stationCode, $"W_IsErrorï¼{1},车轮SNå·ï¼{R_Wheel_id}", $"䏿ä½å·ï¼{R_In_Clamp_Area}\næ¾ç¬¬å 个车轮ï¼{R_IndexNr}\n䏿ä½è½¦è½®æ°ï¼{station.quantity}\nè½¦è½®ç¶æï¼{R_PartStatus}"); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("æ¥éæ¥å¿", name, "é误信æ¯ï¼", $"é误信æ¯ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 模å¼2NGè½¦è½®ä¸æ |
| | | /// <summary> |
| | | /// 模å¼2NGè½¦è½®ä¸æ(åå¹¶å°æ¨¡å¼2åæ¾æå®æ) |
| | | /// </summary> |
| | | /// <param name="client"></param> |
| | | public void NGLayofflevel(PLCClient client) |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | Idt_mes_detailRepository mes_DetailRepository = new dt_mes_detailRepository(Context); |
| | | Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); |
| | | Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); |
| | | IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); |
| | | var Pipeline_client = PLCClient.Clients.FirstOrDefault(t => t.PLCName == "龿¡æº"); |
| | | if (Pipeline_client == null) throw new Exception("龿¡æºè°åº¦æå¡æªå¼å¯ï¼"); |
| | | if (!Pipeline_client.IsConnected) throw new Exception("ä¸é¾æ¡æºè¿æ¥è¶
æ¶ï¼"); |
| | | var Pipelineplc = repository.FindFirst(x => x.plcinfo_name == Pipeline_client.PLCName); |
| | | List<string> names = new List<string>() { "X01001003", "X02001003" }; |
| | | foreach (var name in names) |
| | | { |
| | | try |
| | | { |
| | | var Area = name == "X01001003" ? "5" : "6"; |
| | | #region 䏿宿 |
| | | var finished = client.ReadByOrder<Boolean>("o_load_finished ", name);//æ¾æå®æ |
| | | var updatefinished = client.ReadByOrder<Boolean>("i_storage_update ", name);//è´§ä½ç¶ææ´æ° |
| | | |
| | | #region è´§ä½ç¶ææ´æ°å¤ä½ |
| | | if (!finished && updatefinished) |
| | | { |
| | | client.WriteByOrder("i_storage_update", false, name);//è´§ä½ç¶ææ´æ° |
| | | #region æ¥å¿è®°å½ |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æ", name + "è´§ä½ç¶ææ´æ°ä¿¡å·å¤ä½", "æåï¼", |
| | | $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\næ¾æå®æä¿¡å·ï¼{finished}\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\nè´§ä½ç¶ææ´æ°ä¿¡å·ï¼{false}"); |
| | | #endregion |
| | | } |
| | | #endregion |
| | | |
| | | if (finished && !updatefinished) |
| | | { |
| | | client.WriteByOrder("i_enabl_load", false, name);//æ¯å¦å
许 |
| | | |
| | | #region è¯»åæ¡æ¶ä¿¡æ¯ |
| | | var WheelType = client.ReadByOrder<Int16>("o_wheel_type ", name); //车轮类å |
| | | var Wheel_SN = client.ReadByOrder<string>("o_wheel_id", name);//车轮SNå· |
| | | if (string.IsNullOrEmpty(Wheel_SN)) |
| | | { |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æåºé", "车轮SNå·ä¸ºç©º", "è¯»åæ¡æ¶ä¿¡æ¯ï¼", $"车轮SNå·ï¼{Wheel_SN}为空"); |
| | | continue; |
| | | } |
| | | |
| | | var Mes_Work = workinfoRepository.Find(x => x.SN == Wheel_SN && x.processCode == "17").OrderByDescending(x => x.CreateTime).FirstOrDefault(); |
| | | if (Mes_Work == null) |
| | | { |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æåºé", Wheel_SN, "è¯»åæ¡æ¶ä¿¡æ¯ï¼", $"车轮SNå·ï¼{Wheel_SN}æªæ¥è¯¢å°å·¥åä¿¡æ¯"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | var AreaNr = client.ReadByOrder<Int16>("i_areaNr", name); |
| | | if (AreaNr == 0) |
| | | { |
| | | client.WriteByOrder("i_storage_update", true, name);//è´§ä½ç¶ææ´æ° |
| | | continue; |
| | | } |
| | | |
| | | #region 夿åºåå·æ¯å¦ä¸è´ |
| | | var area = client.ReadByOrder<Int16>("o_place_prog", name);//æ¾æå®æçåºåå· |
| | | |
| | | if (AreaNr != area) |
| | | { |
| | | Pipeline_client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//æ¥è¦ |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æåºé", Wheel_SN, "夿åºåå·æ¯å¦ä¸è´", $"PCSåºåå·ï¼{AreaNr}ï¼\næ¡æ¶åºåå·ï¼{area}\né误信æ¯ï¼PCSåºåå·ä¸æ¡æ¶åºåå·ä¸ä¸è´ï¼"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | var station = stationinfoRepository.Find(x => x.stationCode == name && x.stationCode.Substring(x.stationCode.Length - 1, 1) == AreaNr.ToString() && x.enable).FirstOrDefault(); |
| | | if (station != null) |
| | | { |
| | | #region å¤æè½¦è½®æ°éæ¯å¦ä¸è´ |
| | | var quantity = client.ReadByOrder<Int16>("o_pos_prog", name);//æ¡æ¶è®°å½ç车轮æ°é |
| | | |
| | | if (quantity != station.quantity + 1) |
| | | { |
| | | Pipeline_client.WriteByOrder("W_AlarmSignal", (Int16)2, name);//æ¥è¦ |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æåºé", Wheel_SN, "å¤æè½¦è½®æ°éæ¯å¦ä¸è´", $"åºåå·ï¼{AreaNr}ï¼\næ¡æ¶è½¦è½®æ°ï¼{quantity}\nPCS车轮æ°ï¼{station.quantity + 1}\né误信æ¯ï¼PCSåºåå·ä¸æ¡æ¶åºåå·ä¸ä¸è´ï¼"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | if (!string.IsNullOrEmpty(station.bindSN)) |
| | | { |
| | | if (station.bindSN.Contains(Wheel_SN)) |
| | | throw new Exception($"{station.stationCode}å·²åå¨è½¦è½®SNå·ï¼{Wheel_SN}"); |
| | | } |
| | | |
| | | #region æ¸
ç©ºç»æ¡æ¶çä¸æä¿¡æ¯ |
| | | client.WriteByOrder("i_indexNr", (Int16)0, name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("i_storage_type", (Int16)0, name);//æçç±»å1-横æ¾;2-ç«æ¾(ææ¶åªææ¨ªæ¾æç) |
| | | client.WriteByOrder("i_areaNr", (Int16)0, name);//åºåè´§ä½å· |
| | | client.WriteByOrder("i_storage_update", true, name);//è´§ä½ç¶ææ´æ° |
| | | WriteLog.Write_Log("模å¼2" + name + "æ¾æå®æ", Wheel_SN, "æåï¼", |
| | | $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\næ¾æå®æä¿¡å·ï¼{finished}\n车轮SNï¼{Wheel_SN}\nè½®åIDï¼{WheelType}\n䏿ä½å·ï¼{AreaNr}\n\n" + |
| | | $"å¤çåå
¥æ¡æ¶ä¿¡æ¯ï¼\nåºåè´§ä½å·ï¼{0}\næçä¸ç第å 个车轮ï¼{0}\næçç±»åï¼{0}\n\n" + |
| | | $"åå
¥æ¡æ¶ä¿¡æ¯ï¼\nè´§ä½ç¶ææ´æ°ä¿¡å·ï¼{true}\næ¯å¦å
è®¸ä¸æï¼{false}"); |
| | | #endregion |
| | | |
| | | #region è´§ä½ç¶ææ´æ° |
| | | station.bindSN = string.IsNullOrEmpty(station.bindSN) ? Wheel_SN : station.bindSN + "," + Wheel_SN; |
| | | station.billetID = string.IsNullOrEmpty(station.billetID) ? Mes_Work.billetID.ToString() : station.billetID + "," + Mes_Work.billetID; |
| | | station.quantity++; |
| | | if (station.quantity == 1) |
| | | { |
| | | station.stationType = Mes_Work.drawingNo; |
| | | station.Number = Mes_Work.workOrder; |
| | | 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}"); |
| | | #endregion |
| | | |
| | | #region ä¿®æ¹å·¥åç¶æ |
| | | var Detail = mes_DetailRepository.FindFirst(x => x.jobID == Mes_Work.jobID && x.SN == Mes_Work.SN); |
| | | Detail.Status = "ä¸çº¿"; |
| | | Detail.FinishTime = DateTime.Now; |
| | | count = mes_DetailRepository.Update(Detail, x => new { x.Status, x.FinishTime }, true); |
| | | if (count < 1) |
| | | throw new Exception($"å·¥ååè¡¨ä¿¡æ¯æ´æ°å¤±è´¥ï¼è½¦è½®SNå·ï¼{Detail.SN}"); |
| | | #endregion |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 䏿使°éä¼ ç»æ¡æ¶ |
| | | var Stations = stationinfoRepository.Find(x => x.area == Area).ToList(); |
| | | foreach (var station in Stations) |
| | | { |
| | | client.WriteByOrder(station.stationCode, (Int16)station.quantity, name); |
| | | } |
| | | #endregion |
| | | var Station = Stations.Where(x => x.stationCode == name).FirstOrDefault(); |
| | | //if (Station.enable) |
| | | // client.WriteByOrder(Station.stationCode, Station.location_state != LocationStateEnum.Stroge.ToString(), name); |
| | | |
| | | #region ç³è¯·ä¸æ |
| | | var Request_Load = client.ReadByOrder<Boolean>("o_request_load ", name);//䏿ç³è¯· |
| | | if (Request_Load) |
| | | { |
| | | #region è¯»åæ¡æ¶ä¿¡æ¯ |
| | | var Wheel_Type = client.ReadByOrder<Int16>("o_wheel_type", name);//车轮类å |
| | | var Wheel_id = client.ReadByOrder<string>("o_wheel_id", name);//车轮SNå· |
| | | if (string.IsNullOrEmpty(Wheel_id)) |
| | | { |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æå¼å¸¸", "车轮SNå·ä¸ºç©º", "", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNå·ï¼{Wheel_id}为空"); |
| | | continue; |
| | | } |
| | | var Work = workinfoRepository.Find(x => x.SN == Wheel_id && x.processCode == "17").OrderByDescending(x => x.CreateTime).FirstOrDefault(); |
| | | if (Work == null) |
| | | { |
| | | client.WriteByOrder("i_enabl_load", false, name);//ä¿¡å·ä¸ºfalseæ¡æ¶åæ¢è¿å
¥ |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æå¼å¸¸", Wheel_id, "æ¥è¯¢æºå 工工å", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNå·ï¼{Wheel_id}æªæ¥è¯¢å°å·¥åä¿¡æ¯\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\næ¯å¦å
è®¸ä¸æï¼{false}"); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | var wheel = Pipeline.QueryMateriel(Work.drawingNo); |
| | | if (wheel == null) |
| | | { |
| | | client.WriteByOrder("i_enabl_load", false, name);//ä¿¡å·ä¸ºfalseæ¡æ¶åæ¢è¿å
¥ |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æå¼å¸¸", Wheel_id, $"æ¥è¯¢{Work.drawingNo}è½¦è½®åæ°", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNå·ï¼{Wheel_id}æªæ¥è¯¢å°å·¥åä¿¡æ¯\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\næ¯å¦å
è®¸ä¸æï¼{false}"); |
| | | continue; |
| | | } |
| | | |
| | | #region æ¢å¾å·,䏿å£å
¶ä»å¾å·æçå
¨é¨å
¥åº |
| | | if (Station.enable && Station.location_state == LocationStateEnum.Stroge.ToString() && Station.quantity > 0 && Station.stationType != Work.drawingNo) |
| | | { |
| | | agvtask(stationinfoRepository, Station, Work, "TaskType_OutsourceInbound"); |
| | | continue; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region æçç±»åä¸ä¸è´éæ´æ¢æç |
| | | if (Station.enable && Station.tray_type != "LargeTray" && wheel.e > 1100) |
| | | { |
| | | client.WriteByOrder("i_enabl_load", false, name);//ä¿¡å·ä¸ºfalseæ¡æ¶åæ¢è¿å
¥ |
| | | Station.location_state = LocationStateEnum.Trayswitching.ToString(); |
| | | stationinfoRepository.Update(Station, x => new { x.location_state }, true); |
| | | continue; |
| | | } |
| | | #endregion |
| | | |
| | | var PartStatus = client.ReadByOrder<Int16>("o_partstatus ", name);//1:ok;2:nok |
| | | |
| | | var load_zone = client.ReadByOrder<Boolean>("o_load_zone ", name);// è¿å
¥ä¸æåº |
| | | if (load_zone) continue; |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æ", Wheel_id, "ç³è¯·æ¾æ", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{Wheel_id}\nè½®åIDï¼{Wheel_Type}\nè½¦è½®ç¶æï¼{PartStatus}\næ¯å¦è¿å
¥ä¸æåºï¼{load_zone}"); |
| | | |
| | | if ((Int16)PartStatus == 2) |
| | | { |
| | | if (!(Station.enable && Station.location_state == LocationStateEnum.Stroge.ToString() && Station.quantity < wheel.stackNoRange && Station.stationType == Work.drawingNo)) |
| | | { |
| | | if (Station.enable && Station.location_state == LocationStateEnum.Stroge.ToString() && Station.quantity > 0) |
| | | { |
| | | agvtask(stationinfoRepository, Station, Work, "TaskType_OutsourceInbound"); |
| | | continue; |
| | | } |
| | | if (!(Station.enable && Station.location_state == LocationStateEnum.Stroge.ToString() && Station.quantity == 0)) continue; |
| | | } |
| | | var Pipelinedetails = plcRepository.Find(x => x.plcdetail_iotype == Pipelineplc.plcinfo_iotyep && x.plcdetail_number == Station.stationCode).ToList(); |
| | | var PalletSignal = (Int16)DBExtension.Read(Pipelinedetails.Where(x => x.plcdetail_name == "R_PalletSignal").First(), Pipeline_client);//读åæçä¿¡å·:1:æ,2æ |
| | | var MaterialSignal = (Int16)DBExtension.Read(Pipelinedetails.Where(x => x.plcdetail_name == "R_MaterialSignal").First(), Pipeline_client);//读åè´§ç©ä¿¡å·:1:æ,2æ |
| | | if (PalletSignal == 1) |
| | | { |
| | | List<string> list = new List<string>(); |
| | | if (Station.bindSN != null) |
| | | { |
| | | var SNS = Station.bindSN.Split(","); |
| | | foreach (var SN in SNS) |
| | | { |
| | | if (!string.IsNullOrEmpty(SN)) |
| | | list.Add(SN); |
| | | } |
| | | } |
| | | |
| | | |
| | | //ç¼åæ¶ä¸è½¦è½®æ°éä¸SNå·æ°éä¸ä¸è´ |
| | | if (list.Count != Station.quantity) |
| | | { |
| | | Station.location_state = LocationStateEnum.Abnormal.ToString(); |
| | | Station.remark = "车轮æ°éä¸SNå·æ°éä¸ä¸è´"; |
| | | stationinfoRepository.Update(Station, x => new { x.location_state, x.remark }, true); |
| | | continue; |
| | | } |
| | | var area = Convert.ToInt16(Station.stationCode.Substring(Station.stationCode.Length - 1, 1)); |
| | | client.WriteByOrder("i_areaNr", (Int16)area, name);//åºåè´§ä½å· |
| | | client.WriteByOrder("i_indexNr", (Int16)(Station.quantity + 1), name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("i_storage_type", (Int16)1, name);//æçç±»å1-横æ¾;2-ç«æ¾(ææ¶åªææ¨ªæ¾æç) |
| | | client.WriteByOrder("i_enabl_load", true, name);//æ¯å¦å
许 |
| | | Station.remark = "æ¡æ¶ä¸æ"; |
| | | stationinfoRepository.Update(Station, x => new { x.remark }, true); |
| | | #region æ¥å¿è®°å½ |
| | | WriteLog.Write_Log("模å¼2" + name + "ç³è¯·æ¾æ", Wheel_id, "å
è®¸æ¾æ", |
| | | $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{Wheel_id}\nè½®åIDï¼{Wheel_Type}\nè½¦è½®ç¶æï¼åæ ¼" + |
| | | $"\n读åæçå
çµä¿¡å·ï¼{PalletSignal}" + |
| | | $"\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\n䏿ä½å·ï¼{area}\n第å 个车轮ï¼{(Station.quantity + 1)}\næçç±»åï¼1\næ¯å¦å
è®¸ä¸æï¼true"); |
| | | #endregion |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("æ¥éæ¥å¿", "模å¼2NGè½¦è½®ä¸æ", name, $"é误信æ¯ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | public static string OperStr(string[] strArrty, string SN) |
| | | { |
| | | string[] newstr = strArrty.Where(x => x != SN).ToArray(); |
| | | string Newsn = string.Join(",", newstr); |
| | | |
| | | return Newsn; |
| | | } |
| | | |
| | | public string OperStr(string[] strArrty) |
| | | { |
| | | string[] newstr = strArrty.RemoveLast(1); |
| | | string Newsn = string.Join(",", newstr); |
| | | |
| | | return Newsn; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ´æ¹å·¥åç¶æ |
| | | /// </summary> |
| | | /// <param name="SN"></param> |
| | | public static void Updatemes(string SN, string name) |
| | | { |
| | | 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_Work = workinfoRepository.Find(x => x.SN == SN && (name.Contains("2åå
åææ¾æ") ? x.processCode == "28" : x.processCode == "17")).FirstOrDefault(); |
| | | if (Mes_Work != null) |
| | | { |
| | | 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; |
| | | mes_DetailRepository.Update(mes_Detail, x => new { x.Status, x.FinishTime }, true); |
| | | var mes_Head = mes_HeadRepository.Find(x => x.jobID == mes_Detail.jobID).FirstOrDefault(); |
| | | if (mes_Head != null) |
| | | { |
| | | mes_Head.finishNum++; |
| | | if (mes_Head.finishNum == mes_Head.quantity) mes_Head.FinishTime = DateTime.Now; |
| | | mes_HeadRepository.Update(mes_Head, x => new { x.finishNum, x.FinishTime }, true); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #region 䏿使·»å éåä»»å¡ |
| | | public void agvtask(Idt_stationinfoRepository stationinfoRepository, dt_stationinfo stationinfo, VV_Mes_Workinfo Work, string tasktype) |
| | | { |
| | | 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)) |
| | | tasktype = "TaskType_OutsourceInbound"; |
| | | AGVTask.AddQueueTask(stationinfoRepository, agvtaskRepository, stationinfo, tasktype, Work); |
| | | } |
| | | #endregion |
| | | } |
| | | } |