void operatMachine(Func <ProgressToken> operation, Machine m, string operationDescription, MachineOperationToken successfulOperations, Logging.MachineControllerEventIds eventId, Logging.MachineControllerEventIds failEventId) { try { ProgressToken t = operation.Invoke(); estimateAndAnnounceTimeForProgressToken(t, successfulOperations); MachineOperation op = new MachineOperation(m, t, operationDescription, eventId); op.Execute(successfulOperations, Logging.MachineControllerEventIds.MachineStartupFailed); } catch (Exception ex) { _log.TraceEvent(TraceEventType.Error, (int)failEventId, "{0} on machine {1} resulted in an error: {2}", operationDescription, m.Name, ex.ToString()); //no rethrow, because we do not want to interrupt the other processes } }
/// <summary> /// Await ACPI-Shutdowns according to specified timeouts /// </summary> void awaitAcpiShutdowns(IEnumerable <MachineProgressTokenTuple> shutdownsInProgress, MachineOperationToken successfulOperations) { IEnumerable <MachineProgressTokenTuple> unfinishedAcpiShutdowns = shutdownsInProgress.Where(x => !x.Token.Finished); if (unfinishedAcpiShutdowns.Count() > 0) { foreach (var activeShutdown in unfinishedAcpiShutdowns) { estimateAndAnnounceTimeForProgressToken(activeShutdown.Token, successfulOperations); MachineOperation op = new MachineOperation(activeShutdown.Machine, activeShutdown.Token, "Await ACPI-Shutdown", Logging.MachineControllerEventIds.MachineShutdown); op.Execute(successfulOperations, Logging.MachineControllerEventIds.MachineShutdownFailed); } foreach (var activeShutdown in unfinishedAcpiShutdowns) { _log.TraceEvent(TraceEventType.Warning, (int)Logging.MachineControllerEventIds.MachineShutdownFailed, "Machine {0} took to long to properly shutdown after ACPI-Command", activeShutdown.Machine.Name); } } }
public void SuccessfullyOperatedMachine(MachineOperation m) { _successfullyOperatedMachines.Add(m); }
private DataMQC GetDataMQCRealtime(string IP, string line, DataMQC dataOld) { DataMQC dataMQC = null; try { Plc.Instance.Connect(IP, SettingClass.PLCTimeOut); if (Plc.Instance.ConnectionState == ConnectionStates.Online) {// doc barcode truoc var ListTag = Plc.Instance.ReadTags(tags); if (ListTag.Count == 4) { MachineOperation ma1 = new MachineOperation(); ma1.Line = line; ma1.IP = IP; ma1.Output = (ListTag[0].ItemValue.ToString() != null) ? double.Parse(ListTag[0].ItemValue.ToString()) : 0; ma1.NG = (ListTag[1].ItemValue.ToString() != null) ? double.Parse(ListTag[1].ItemValue.ToString()) : 0; ma1.Rework = (ListTag[2].ItemValue.ToString() != null) ? double.Parse(ListTag[2].ItemValue.ToString()) : 0; ma1.ONOFF = (ListTag[3].ItemValue.ToString() != null) ? ListTag[3].ItemValue.ToString() : ""; ma1.Status = Plc.Instance.ConnectionState.ToString(); if (dataOld != null) { #region Running if (dataOld.STARTSTOP == "False" && ma1.ONOFF == "False") { dataMQC = new DataMQC(); ma1.Lot = dataOld.PLC_Barcode; dataMQC.PLC_Barcode = dataOld.PLC_Barcode; dataMQC.Good_Products_Total = ma1.Output; dataMQC.NG_Products_Total = ma1.NG; dataMQC.RW_Products_Total = ma1.Rework; dataMQC.STARTSTOP = ma1.ONOFF; if (dataOld.PLC_Barcode != null && (dataOld.PLC_Barcode.Contains("0010;B01;B01") || dataOld.PLC_Barcode.Contains("0010;B01;B02"))) { dataMQC.NG_Products_NG_ = new int[38]; int CountNG = 0; int CountRW = 0; if (dataMQC.NG_Products_Total > dataOld.NG_Products_Total) { var ListNG = Plc.Instance.ReadTags(tagsError); foreach (var item in ListNG) { dataMQC.NG_Products_NG_[CountNG] = int.Parse(item.ItemValue.ToString()); CountNG++; } } else { dataMQC.NG_Products_NG_ = dataOld.NG_Products_NG_; } dataMQC.RW_Products_NG_ = new int[38]; if (dataMQC.RW_Products_Total > dataOld.RW_Products_Total) { var ListRW = Plc.Instance.ReadTags(tagsRework); foreach (var item in ListRW) { dataMQC.RW_Products_NG_[CountRW] = int.Parse(item.ItemValue.ToString()); CountRW++; } } else { dataMQC.RW_Products_NG_ = dataOld.RW_Products_NG_; } } else { var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); dataMQC.PLC_Barcode = barcode; ma1.Lot = barcode; SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode is wrong format: IPMachine :", IP); } if (dataMQC.Good_Products_Total == 0 && dataMQC.NG_Products_Total == 0 && dataMQC.RW_Products_Total == 0) { var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); dataMQC.PLC_Barcode = barcode; ma1.Lot = barcode; } machineOperations.Add(ma1); } #endregion #region chuyen giao giua chay va reset else if (dataOld.STARTSTOP == "False" && ma1.ONOFF == "True") { var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); ma1.Lot = barcode; if (dataOld.PLC_Barcode != null && (dataOld.PLC_Barcode.Contains("0010;B01;B01") || dataOld.PLC_Barcode.Contains("0010;B01;B02"))) { dataMQC = new DataMQC(); ma1.Lot = barcode; dataMQC.PLC_Barcode = barcode; dataMQC.Good_Products_Total = ma1.Output; dataMQC.NG_Products_Total = ma1.NG; dataMQC.RW_Products_Total = ma1.Rework; dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.NG_Products_NG_ = new int[38]; int CountNG = 0; int CountRW = 0; if (dataMQC.NG_Products_Total > dataOld.NG_Products_Total) { var ListNG = Plc.Instance.ReadTags(tagsError); foreach (var item in ListNG) { dataMQC.NG_Products_NG_[CountNG] = int.Parse(item.ItemValue.ToString()); CountNG++; } } else { dataMQC.NG_Products_NG_ = dataOld.NG_Products_NG_; } dataMQC.RW_Products_NG_ = new int[38]; if (dataMQC.RW_Products_Total > dataOld.RW_Products_Total) { var ListRW = Plc.Instance.ReadTags(tagsRework); foreach (var item in ListRW) { dataMQC.RW_Products_NG_[CountRW] = int.Parse(item.ItemValue.ToString()); CountRW++; } } else { dataMQC.RW_Products_NG_ = dataOld.RW_Products_NG_; } Uploaddata uploaddata = new Uploaddata(); uploaddata.InsertToMQC_Realtime(dataOld.PLC_Barcode, line, "", "0", "Reset", 0); if (SettingClass.usingOfftlineServer) { UploadLocalPLCDB uploadLocalPLCDB = new UploadLocalPLCDB(); uploadLocalPLCDB.InsertToMQC_Realtime(dataOld.PLC_Barcode, line, "", "0", "Reset", 0, SettingClass); } } else { dataMQC = dataOld; SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode is wrong format: IPMachine :", IP); } try { if (dataOld != null) { Uploaddata uploaddata = new Uploaddata(); string model = uploaddata.GetModelFromLot(dataOld.PLC_Barcode); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Line: " + line + " QR code: " + dataOld.PLC_Barcode + " Model: " + model, " Reset "); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Line: " + line + " QR code: " + dataOld.PLC_Barcode + " Model: " + model, " OP " + dataOld.Good_Products_Total); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Line: " + line + " QR code: " + dataOld.PLC_Barcode + " Model: " + model, " NG " + dataOld.NG_Products_Total); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Line: " + line + " QR code: " + dataOld.PLC_Barcode + " Model: " + model, " RW " + dataOld.RW_Products_Total); } } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "Write record reset not succesfull" + " Line: " + line + " QR code: " + dataOld.PLC_Barcode, ex.Message); } machineOperations.Add(ma1); } #endregion else if (dataOld.STARTSTOP == "True" && ma1.ONOFF == "True") { var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); ma1.Lot = barcode; machineOperations.Add(ma1); dataMQC = new DataMQC(); dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.PLC_Barcode = barcode; } else if (dataOld.STARTSTOP == "True" && ma1.ONOFF == "False") { var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); ma1.Lot = barcode; machineOperations.Add(ma1); dataMQC = new DataMQC(); dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.PLC_Barcode = barcode; } else { if (dataOld.STARTSTOP == null) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "dataOld.STARTSTOP == null", ma1.Lot); } else if (ma1.ONOFF == null) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "ma1.ONOFF == null", ma1.Lot); } var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); ma1.Lot = barcode; machineOperations.Add(ma1); if (barcode != null && (barcode.Contains("0010;B01;B01") || barcode.Contains("0010;B01;B02"))) { dataMQC = new DataMQC(); ma1.Lot = barcode; dataMQC.PLC_Barcode = barcode; dataMQC.Good_Products_Total = ma1.Output; dataMQC.NG_Products_Total = ma1.NG; dataMQC.RW_Products_Total = ma1.Rework; dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.NG_Products_NG_ = new int[38]; int CountNG = 0; int CountRW = 0; if (dataMQC.NG_Products_Total > dataOld.NG_Products_Total) { var ListNG = Plc.Instance.ReadTags(tagsError); foreach (var item in ListNG) { dataMQC.NG_Products_NG_[CountNG] = int.Parse(item.ItemValue.ToString()); CountNG++; } } else { dataMQC.NG_Products_NG_ = dataOld.NG_Products_NG_; } dataMQC.RW_Products_NG_ = new int[38]; if (dataMQC.RW_Products_Total > dataOld.RW_Products_Total) { var ListRW = Plc.Instance.ReadTags(tagsRework); foreach (var item in ListRW) { dataMQC.RW_Products_NG_[CountRW] = int.Parse(item.ItemValue.ToString()); CountRW++; } } else { dataMQC.RW_Products_NG_ = dataOld.RW_Products_NG_; } } else { dataMQC = dataOld; SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode is wrong format: IPMachine :", IP); } } } else { dataMQC = new DataMQC(); var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); ma1.Lot = barcode; dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.PLC_Barcode = barcode; dataMQC.Good_Products_Total = ma1.Output; dataMQC.NG_Products_Total = ma1.NG; dataMQC.RW_Products_Total = ma1.Rework; dataMQC.STARTSTOP = ma1.ONOFF; machineOperations.Add(ma1); SystemLog.Output(SystemLog.MSG_TYPE.War, "Data old = null: IPMachine :", IP); } } else { MachineOperation ma1 = new MachineOperation(); ma1.Line = line; ma1.IP = IP; ma1.Status = Plc.Instance.ConnectionState.ToString(); machineOperations.Add(ma1); dataMQC = dataOld; SystemLog.Output(SystemLog.MSG_TYPE.War, "Readtag fail: IPMachine ", IP); } } else { MachineOperation ma1 = new MachineOperation(); ma1.Line = line; ma1.IP = IP; ma1.Status = Plc.Instance.ConnectionState.ToString(); machineOperations.Add(ma1); dataMQC = dataOld; SystemLog.Output(SystemLog.MSG_TYPE.War, "Machine is offline", IP); } } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "DataMQC GetDataMQCRealtime line " + line, ex.Message); } return(dataMQC); }
public void LoadDataMQCStarting() { stopwatch = new Stopwatch(); try { stopwatch.Start(); if (ListMachines != null) { foreach (var machine in ListMachines) { Plc.Instance.Connect(machine.IP, SettingClass.PLCTimeOut); DataMQC dataMQC = null; if (Plc.Instance.ConnectionState == ConnectionStates.Online) {// doc barcode truoc var barcode = Plc.Instance.ReadTagsToString(tagsbarcode); dataMQC = new DataMQC(); dataMQC.PLC_Barcode = barcode; var ListTag = Plc.Instance.ReadTags(tags); if (ListTag != null && ListTag.Count == 4) { MachineOperation ma1 = new MachineOperation(); ma1.Line = machine.Line; ma1.IP = machine.IP; ma1.Output = (ListTag[0].ItemValue.ToString() != null) ? double.Parse(ListTag[0].ItemValue.ToString()) : 0; ma1.NG = (ListTag[1].ItemValue.ToString() != null) ? double.Parse(ListTag[1].ItemValue.ToString()) : 0; ma1.Rework = (ListTag[2].ItemValue.ToString() != null) ? double.Parse(ListTag[2].ItemValue.ToString()) : 0; ma1.ONOFF = (ListTag[3].ItemValue.ToString() != null) ? ListTag[3].ItemValue.ToString() : ""; ma1.Status = Plc.Instance.ConnectionState.ToString(); ma1.Lot = barcode; dataMQC.DateTimeReset = DateTime.Now; dataMQC.Good_Products_Total = ma1.Output; dataMQC.NG_Products_Total = ma1.NG; dataMQC.RW_Products_Total = ma1.Rework; dataMQC.STARTSTOP = ma1.ONOFF; dataMQC.NG_Products_NG_ = new int[38]; int CountNG = 0; int CountRW = 0; machineOperations.Add(ma1); if (dataMQC.NG_Products_Total > 0) { var ListNG = Plc.Instance.ReadTags(tagsError); foreach (var item in ListNG) { dataMQC.NG_Products_NG_[CountNG] = int.Parse(item.ItemValue.ToString()); CountNG++; } } dataMQC.RW_Products_NG_ = new int[38]; if (dataMQC.RW_Products_Total > 0) { var ListRW = Plc.Instance.ReadTags(tagsRework); foreach (var item in ListRW) { dataMQC.RW_Products_NG_[CountRW] = int.Parse(item.ItemValue.ToString()); CountRW++; } } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "PLC readtag fail :", machine.IP); } if (dataMQC != null) { UploadLocalPLCDB uploadLocalPLCDB = new UploadLocalPLCDB(); if (dataMQC.PLC_Barcode.Contains("0010;B01;B01") || dataMQC.PLC_Barcode.Contains("0010;B01;B02")) { Uploaddata uploaddata = new Uploaddata(); if (CountRun == 0 && cb_GetFirstValues.IsChecked == true) { if (SettingClass.usingOfftlineServer) { DateTime FromDate = DateTime.Now; var InsertLocal = uploadLocalPLCDB.InsertMQCUpdateRealtime(dataMQC, machine.Line, false, SettingClass); if (InsertLocal == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "Insert local data fail", ""); } else { DateTime ToDate = DateTime.Now; LocalToServer localToServer = new LocalToServer(); var Result = localToServer.UploadLocalServertoFactoryDB(dataMQC.PLC_Barcode, FromDate, ToDate, SettingClass); if (Result == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "insert to local data not success", machine.Line); } } } else { var InsertResult = uploaddata.InsertMQCUpdateRealtime(dataMQC, machine.Line, false); if (InsertResult == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "InsertMQCUpdateRealtime", ""); } } } var StockAvaiable = uploaddata.QuantityCanRun(dataMQC.PLC_Barcode); if (StockAvaiable > 0) { Plc.Instance.Write("DB151.DBW0", (uint)StockAvaiable); } else { Plc.Instance.Write("DB151.DBW4", (uint)Math.Abs(StockAvaiable)); } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode wrong format :", dataMQC.PLC_Barcode); } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "Data MQC = null :", machine.IP); } } else { MachineOperation ma1 = new MachineOperation(); ma1.Line = machine.Line; ma1.IP = machine.IP; ma1.Status = Plc.Instance.ConnectionState.ToString(); machineOperations.Add(ma1); SystemLog.Output(SystemLog.MSG_TYPE.War, "machine is not online", machine.IP); } keyValuePairsOld.Add(machine.IP, dataMQC); } datagridMachines.ItemsSource = machineOperations; } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "list machine = null", ""); } stopwatch.Stop(); } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "Read PLC fail", ex.Message); } }
public void LoadDataMQCStarting() { try { stopwatch.Start(); LoadAdress(); if (ListMachines.Count > 0) { DicMQCVariableIP = new Dictionary <string, MQCVariable>(); foreach (var machine in ListMachines) { int ConnectionPLC = -1; MQCVariable mQCVariable = new MQCVariable(); QRMQC_MES qRMQC_MES = new QRMQC_MES(); QRIDMES qRIDMES = new QRIDMES(); Sharp.ReadVariablePLC pLC = new Sharp.ReadVariablePLC(machine.IP, 0, 0, out ConnectionPLC); mQCVariable.Connection = ConnectionPLC; if (ConnectionPLC == 0) { Dictionary <string, bool> DicStatusPLC = new Dictionary <string, bool>(); DicStatusPLC = pLC.ReadStatusPLCMQC(); mQCVariable.DicSPLCtatus = DicStatusPLC; if (DicStatusPLC.Count == 4) { if (DicStatusPLC[VariablePLC.FlagKT]) { string QRMES = pLC.ReadAreaByteToString(181, 100, 100); mQCVariable.QRMES = QRMES; string QRID = pLC.ReadAreaByteToString(181, 0, 100); mQCVariable.QRID = QRID; var ResultValidationQRCode = SubFunction.IsValidationQRCode(QRMES, QRID); pLC.WriteDinttoPLC(ResultValidationQRCode, 181, 206, 2);//write message error to PLC if (ResultValidationQRCode == 0) { pLC.WritebittoPLC(true, 181, 204, 1);//Write FlagKT to PLC } else { pLC.WritebittoPLC(false, 181, 204, 1);//Write FlagKT to PLC } qRMQC_MES = QRSpilittoClass.QRstring2MQCFormat(mQCVariable.QRMES); // get values from db and write value PLC SQLUpload.SQLQRUpdate sQLQR = new SQLQRUpdate(); DataTable dtQRRecord = sQLQR.GetQuanityFromQRMES(mQCVariable.QRMES); if (dtQRRecord.Rows.Count == 1) { var OutputQty = Int16.Parse(dtQRRecord.Rows[0]["OutputQty"].ToString()); var NGQty = Int16.Parse(dtQRRecord.Rows[0]["NGQty"].ToString()); var RWQty = Int16.Parse(dtQRRecord.Rows[0]["RWQty"].ToString()); var Total = Int16.Parse(dtQRRecord.Rows[0]["TotalQty"].ToString()); if (qRMQC_MES.quantity > (OutputQty + NGQty + RWQty) && qRMQC_MES.quantity > Total) { pLC.WriteMQCProducedQuantitytoPLC(OutputQty, NGQty, RWQty); } else { //Write to PLC values to know QR production finished pLC.WriteDinttoPLC(4, 181, 206, 2);//Completed QR MES } } else if (dtQRRecord.Rows.Count == 0) { pLC.WriteMQCProducedQuantitytoPLC(0, 0, 0); } List <int> ListMQCQty = pLC.ReadQuantityMQC(); mQCVariable.ListMQCQty = ListMQCQty; List <int> ListMQCProduced = pLC.ReadQuantityMQCProduced(); mQCVariable.ListQtyProduced = ListMQCProduced; List <int> ListNG38 = pLC.ReadAreaIntToListInt(3, 4, 76); mQCVariable.ListNG38 = ListNG38; List <int> ListRW38 = pLC.ReadAreaIntToListInt(4, 4, 76); mQCVariable.ListRW38 = ListRW38; } } } DicMQCVariableIP.Add(machine.IP, mQCVariable); pLC.Diconnect(); qRMQC_MES = new QRMQC_MES(); qRMQC_MES = QRSpilittoClass.QRstring2MQCFormat(mQCVariable.QRMES); qRIDMES = QRSpilittoClass.QRstring2IDFormat(mQCVariable.QRID); MachineOperation operation = new MachineOperation(); operation.IP = machine.IP; operation.Line = machine.Line; operation.Lot = qRMQC_MES.PO; operation.Inspector = qRIDMES.FullName; operation.product = qRMQC_MES.Product; if (mQCVariable.ListMQCQty.Count == 3) { operation.Output = mQCVariable.ListMQCQty[0]; operation.NG = mQCVariable.ListMQCQty[1]; operation.Rework = mQCVariable.ListMQCQty[2]; operation.Status = "Updating"; } else if (mQCVariable.ListMQCQty.Count == 0) { operation.Output = 0; operation.NG = 0; operation.Rework = 0; operation.Status = "Waiting"; } machineOperations.Add(operation); } datagridMachines.ItemsSource = machineOperations; } } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "Read PLC fail", ex.Message); } }
void bg_DoWork(object sender, DoWorkEventArgs e) { // does a job like writing to serial communication, webservices etc var worker = sender as BackgroundWorker; stopwatch = new Stopwatch(); try { stopwatch.Start(); // if (ListMachines != null) { machineOperations = new List <MachineOperation>(); //MachineItem machine = new MachineItem(); //machine.IP = "172.16.1.145"; //machine.Line = "L03"; LoadAdress();//load list PLC machine foreach (var machine in ListMachines) { try { // machine.IP = MQCVariable mQCOld = new MQCVariable(); if (DicMQCVariableIP.ContainsKey(machine.IP)) { mQCOld = DicMQCVariableIP[machine.IP]; } MQCVariable mQCPLC = GetMQCVariableRealtime(machine.IP, mQCOld); MQCVariable mQCChanged = new MQCVariable(); if (mQCPLC.Connection == 0) { bool isChanged = false; List <string> listChanged = new List <string>(); // if (mQCPLC.DicSPLCtatus[VariablePLC.FlagKT] == true) { mQCChanged = GetMQCVariableDisCrepancy(mQCPLC, mQCOld, ref isChanged, ref listChanged); if (DicMQCVariableIP.ContainsKey(machine.IP)) { DicMQCVariableIP[machine.IP] = mQCPLC; } else { DicMQCVariableIP.Add(machine.IP, mQCPLC); } if (listChanged.Contains("Reset")) { //MachineOperation operation = new MachineOperation(); //operation.IP = machine.IP; //operation.Line = machine.Line; //operation.Lot = qRMQC_MES.PO; //operation.Inspector = qRIDMES.FullName; //operation.product = qRMQC_MES.Product; //operation.Output = mQCPLC.ListMQCQty[0]; //operation.NG = mQCPLC.ListMQCQty[1]; //operation.Rework = mQCPLC.ListMQCQty[2]; //operation.Status = "Reset"; SQLUpload.SQLQRUpdate sQLQRUpdate = new SQLQRUpdate(); sQLQRUpdate.UpdateOrInsertQRRecordTable(mQCOld, machine.Line); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "QR MES Reset", mQCOld.QRMES); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "QR Inspector", mQCOld.QRID); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Ouput Quantity", mQCOld.ListMQCQty[0].ToString()); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "NG Quantity", mQCOld.ListMQCQty[1].ToString()); SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "RW Quantity", mQCOld.ListMQCQty[2].ToString()); return; } UploadPLCtoDatabase(mQCChanged, listChanged, machine.Line); QRMQC_MES qRMQC_MES = QRSpilittoClass.QRstring2MQCFormat(mQCPLC.QRMES); QRIDMES qRIDMES = QRSpilittoClass.QRstring2IDFormat(mQCPLC.QRID); MachineOperation operation = new MachineOperation(); operation.IP = machine.IP; operation.Line = machine.Line; operation.Lot = qRMQC_MES.PO; operation.Inspector = qRIDMES.FullName; operation.product = qRMQC_MES.Product; if (mQCPLC.ListMQCQty.Count == 3) { operation.Output = mQCPLC.ListMQCQty[0]; operation.NG = mQCPLC.ListMQCQty[1]; operation.Rework = mQCPLC.ListMQCQty[2]; operation.Status = "Updating"; } else if (mQCPLC.ListMQCQty.Count == 0) { operation.Output = 0; operation.NG = 0; operation.Rework = 0; operation.Status = "Waiting"; } //if (listChanged.Contains("Reset")) //{ // operation.Status = "Reset"; // //SQLUpload.SQLQRUpdate sQLQRUpdate = new SQLQRUpdate(); // //sQLQRUpdate.UpdateOrInsertQRRecordTable(mQCPLC, machine.Line); // SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "QR MES Reset", mQCPLC.QRMES); // SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "QR Inspector", mQCPLC.QRID); // SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "Ouput Quantity", mQCPLC.ListMQCQty[0].ToString()); // SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "NG Quantity", mQCPLC.ListMQCQty[1].ToString()); // SystemRecord.Output(SystemRecord.MSG_TYPE.Nor, "RW Quantity", mQCPLC.ListMQCQty[2].ToString()); //} //else //{ // operation.Status = "Updating"; //} machineOperations.Add(operation); } } else { MachineOperation operation = new MachineOperation(); operation.IP = machine.IP; operation.Line = machine.Line; Sharp7.S7Client client = new Sharp7.S7Client(); operation.Status = client.ErrorText(mQCPLC.Connection); machineOperations.Add(operation); } } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "PLC IP : " + machine.IP, ex.Message); } } } stopwatch.Stop(); } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "Read PLC fail", ex.Message); } System.Threading.Thread.Sleep(100); }