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 bool InsertMQCUpdateRealtime(DataMQC data, string Line, bool Isreset) { try { if (Isreset) { if (data.PLC_Barcode.Length == 26) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "OUTPUT", data.Good_Products_Total.ToString(), "OP", 1); for (int i = 1; i < 39; i++) { if (data.NG_Products_NG_[i - 1] > 0) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "NG" + i.ToString(), data.NG_Products_NG_[i - 1].ToString(), "NG", 1); } } for (int i = 1; i < 39; i++) { if (data.RW_Products_NG_[i - 1] > 0) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "RW" + i.ToString(), data.RW_Products_NG_[i - 1].ToString(), "RW", 1); } } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode wrong formart ", data.PLC_Barcode); } } else { if (data.PLC_Barcode.Length == 26) { if (data.Good_Products_Total > 0) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "OUTPUT", data.Good_Products_Total.ToString(), "OP", 0); } if (data.NG_Products_Total > 0) { for (int i = 1; i < 39; i++) { if (data.NG_Products_NG_[i - 1] > 0) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "NG" + i.ToString(), data.NG_Products_NG_[i - 1].ToString(), "NG", 0); } } } if (data.RW_Products_Total > 0) { for (int i = 1; i < 39; i++) { if (data.RW_Products_NG_[i - 1] > 0) { InsertToMQC_Realtime(data.PLC_Barcode, Line, "RW" + i.ToString(), data.RW_Products_NG_[i - 1].ToString(), "RW", 0); } } } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "Barcode wrong formart ", data.PLC_Barcode); } } } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.Err, "InsertMQCUpdateRealtime (DataMQC data, string Line, bool Isreset)", ex.Message); return(false); } return(true); }
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>(); foreach (var machine in ListMachines) { try { DataMQC MQCIPOld = keyValuePairsOld[machine.IP]; DataMQC mQCIP = new DataMQC(); mQCIP = GetDataMQCRealtime(machine.IP, machine.Line, MQCIPOld); if (mQCIP != null) { Uploaddata uploaddata = new Uploaddata(); UploadLocalPLCDB uploadLocalPLCDB = new UploadLocalPLCDB(); bool ischange = false; DataMQC mQCIPChanged = new DataMQC(); mQCIPChanged = uploaddata.ChangeMQCData(MQCIPOld, mQCIP, out ischange); if (mQCIP.PLC_Barcode != null) { if (mQCIP.PLC_Barcode.Contains("0010;B01;B01") || mQCIP.PLC_Barcode.Contains("0010;B01;B02")) { if (ischange) { if (SettingClass.usingOfftlineServer) { DateTime FromDate = DateTime.Now; var InsertLocal = uploadLocalPLCDB.InsertMQCUpdateRealtime(mQCIPChanged, machine.Line, false, SettingClass); if (InsertLocal == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "Insert local data fail", machine.Line); } else { keyValuePairsOld[machine.IP] = mQCIP; DateTime ToDate = DateTime.Now; LocalToServer localToServer = new LocalToServer(); var Result = localToServer.UploadLocalServertoFactoryDB(mQCIPChanged.PLC_Barcode, FromDate, ToDate, SettingClass); if (Result == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "insert to local data not success", machine.Line); } } //var InsertDb = uploaddata.InsertMQCUpdateRealtime(mQCIPChanged, machine.Line, false); //if (InsertDb == false) //{ // SystemLog.Output(SystemLog.MSG_TYPE.War, "Insert remote data fail", machine.Line); //} } else { var InsertDb = uploaddata.InsertMQCUpdateRealtime(mQCIPChanged, machine.Line, false); if (InsertDb == false) { SystemLog.Output(SystemLog.MSG_TYPE.War, "Insert remote data fail", machine.Line); } else { keyValuePairsOld[machine.IP] = mQCIP; } } } var StockAvaiable = uploaddata.QuantityCanRun(mQCIPChanged.PLC_Barcode); if (StockAvaiable > 0) { Plc.Instance.Write("DB151.DBW0", (uint)StockAvaiable); } else { Plc.Instance.Write("DB151.DBW4", (uint)Math.Abs(StockAvaiable)); } } else { Plc.Instance.Write("DB151.DBW0", (uint)0); SystemLog.Output(SystemLog.MSG_TYPE.War, "Line : " + machine.Line, "Barcode Wrong Format- Write stock available = 0 " + mQCIP.PLC_Barcode); } } else { Plc.Instance.Write("DB151.DBW0", (uint)0); SystemLog.Output(SystemLog.MSG_TYPE.War, "Line : " + machine.Line, "Barcode == null - Write stock available = 0 " + mQCIP.PLC_Barcode); } } else { SystemLog.Output(SystemLog.MSG_TYPE.War, "Line : " + machine.Line, " DATA MQC = NULL "); } } 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); }
public DataMQC ChangeMQCData(DataMQC dataOld, DataMQC dataNew, out bool IsChange) { DataMQC _dataRaise = new DataMQC(); bool _ischange = false; _dataRaise.strQRID = dataOld.strQRID; _dataRaise.strQRMES = dataOld.strQRMES; try { dataNew.DateTimeReset = dataOld.DateTimeReset; if (dataNew.Good_Products_Total > dataOld.Good_Products_Total || dataNew.NG_Products_Total > dataOld.NG_Products_Total || dataNew.RW_Products_Total > dataOld.RW_Products_Total) { _ischange = true; _dataRaise.Good_Products_Total = dataNew.Good_Products_Total - dataOld.Good_Products_Total; _dataRaise.NG_Products_Total = dataNew.NG_Products_Total - dataOld.NG_Products_Total; _dataRaise.RW_Products_Total = dataNew.RW_Products_Total - dataOld.RW_Products_Total; _dataRaise.PLC_Barcode = dataNew.PLC_Barcode != "" ? dataNew.PLC_Barcode : dataOld.PLC_Barcode; for (int i = 0; i < 38; i++) { if (_dataRaise.NG_Products_Total > 0) { _dataRaise.NG_Products_NG_[i] = dataNew.NG_Products_NG_[i] - dataOld.NG_Products_NG_[i]; } if (_dataRaise.RW_Products_Total > 0) { _dataRaise.RW_Products_NG_[i] = dataNew.RW_Products_NG_[i] - dataOld.RW_Products_NG_[i]; } } } //else if(dataNew.STARTSTOP != dataOld.STARTSTOP) //{ // _ischange = true; // _dataRaise.Good_Products_Total = dataNew.Good_Products_Total - dataOld.Good_Products_Total; // _dataRaise.NG_Products_Total = dataNew.NG_Products_Total - dataOld.NG_Products_Total; // _dataRaise.RW_Products_Total = dataNew.RW_Products_Total - dataOld.RW_Products_Total; // _dataRaise.PLC_Barcode = dataNew.PLC_Barcode != "" ? dataNew.PLC_Barcode : dataOld.PLC_Barcode; // for (int i = 0; i < 38; i++) // { // if (_dataRaise.NG_Products_Total > 0) // { // _dataRaise.NG_Products_NG_[i] = dataNew.NG_Products_NG_[i] - dataOld.NG_Products_NG_[i]; // } // if (_dataRaise.RW_Products_Total > 0) // { // _dataRaise.RW_Products_NG_[i] = dataNew.RW_Products_NG_[i] - dataOld.RW_Products_NG_[i]; // } // } //} else { _ischange = false; _dataRaise = dataNew; } IsChange = _ischange; } catch (Exception ex) { SystemLog.Output(SystemLog.MSG_TYPE.War, "ChangeMQCData :" + dataOld.PLC_Barcode, ex.Message); IsChange = false; } return(_dataRaise); }