public static bool dbDownload() { #region DESCARGA INFORMACION DE MYSQL Log.system.verbose("Iniciando descarga de datos MySql"); try { Faultcode.Download(); Machine.Download(); PcbInfo.Download(); Log.system.notify("Faultcodes: " + Faultcode.Total()); Log.system.notify("Maquinas: " + Machine.Total()); Log.system.notify("PcbInfo: " + PcbInfo.Total()); dbDownloadComplete = true; } catch (Exception ex) { dbDownloadComplete = false; Log.system.error(ex.Message); } #endregion return(dbDownloadComplete); }
private void UpdateDate(PcbInfo pcbInfo, string fechaModificacion) { // El HASH no ha cambiado. aoi.aoiLog.verbose("-- Fecha modificada " + pcbInfo.nombre + " | No hay cambios."); pcbInfo.fechaModificacion = fechaModificacion; PcbInfo.Update(pcbInfo); }
/// <summary> /// Verifica si hay cambios en los archivos PCB de AOI /// </summary> public bool CheckPcbFiles() { bool complete = false; //aoiLog.verbose("CheckPcbFiles() " + aoiConfig.dataProgPath); if (UseCredential()) { aoiLog.debug("Verificando cambios en PCB Files"); try { PcbData pcbData = new PcbData(this); bool reload = pcbData.VerifyPcbFiles(); if (reload) { aoiLog.notify("Actualizando lista de PCB Files en memoria"); PcbInfo.Download(aoiConfig.machineNameKey); } aoiLog.debug("Verificacion de PCB Files completa"); complete = true; } catch (Exception ex) { aoiLog.stack(ex.Message, this, ex); complete = false; } } aoiReady = complete; return(complete); }
private void CreateInspectionObject(DataRow r, Machine inspMachine) { programa = r["programa"].ToString(); fecha = r["aoi_fecha"].ToString(); hora = r["aoi_hora"].ToString(); inspFecha = r["insp_fecha"].ToString(); inspHora = r["insp_hora"].ToString(); // Si no tengo fecha de inspeccion, el panel se encuentra pendiente de inspeccion. if (inspFecha.Equals("")) { pendiente = true; } machine = inspMachine; maquina = inspMachine.maquina; barcode = r["barcode"].ToString(); BarcodeValidate(); //inspection.validateBarcode(); panelNro = int.Parse(r["pcb_no"].ToString()); revisionIns = "NG"; revisionAoi = r["test_result"].ToString(); // Si AOI no tiene errores las placas estan bien. if (revisionAoi.Equals("")) { revisionAoi = "OK"; pendiente = false; } // insp.revision_ins = r["revise_result"].ToString(); // Informacion especifica para maquinas tipo vtwin vtwinProgramNameId = int.Parse(r["program_name_id"].ToString()); vtwinSaveMachineId = int.Parse(r["saved_machine_id"].ToString()); vtwinRevisionNo = int.Parse(r["revision_no"].ToString()); vtwinSerialNo = int.Parse(r["serial_no"].ToString()); vtwinLoadCount = int.Parse(r["load_count"].ToString()); // Adjunto informacion del PCB usado para inspeccionar, contiene numero de bloques y block_id entre otros datos. PcbInfo pcb_info = PcbInfo.list.Find(obj => obj.nombre.Equals(programa) && obj.tipoMaquina.Equals(machineNameKey)); if (pcb_info != null) { pcbInfo = pcb_info; } // Obtiene detalle de errores del panel completo detailList = GetInspectionDetail(); // Lista de BLOCK_ID de ORACLE, adjunta Barcodes de cada bloque // En caso de tener varios bloques, y una sola etiqueta, genera etiquetas virtuales para el resto de los bloques bloqueList = GetBloquesFromOracle(); MakeRevisionToAll(); }
private void CreateInspectionObject(DataRow r, Machine inspMachine) { // Informacion especifica para este tipo de maquinas zenithPcbguid = r["PCBGuid"].ToString(); zenithImageDb = r["ImageDBName"].ToString(); zenithResultDb = r["ResultDBName"].ToString(); zenithPcbRepair = r["PcbRepair"].ToString(); //---------------------------------------------- programa = r["programa"].ToString(); fecha = r["aoi_fecha"].ToString(); if (!fecha.Equals("")) { fecha = fecha.Split(' ')[0]; } hora = r["aoi_hora"].ToString(); inspFecha = r["insp_fecha"].ToString(); inspHora = r["insp_hora"].ToString(); machine = inspMachine; maquina = inspMachine.maquina; barcode = r["barcode"].ToString(); BarcodeValidate(); revisionAoi = r["revision_aoi"].ToString(); revisionIns = r["revision_ins"].ToString(); // Si no tengo fecha de inspeccion, el panel se encuentra pendiente de inspeccion. if (revisionIns.Equals("NG") && zenithPcbRepair.Equals("0")) { pendiente = true; } // Adjunto informacion del PCB usado para inspeccionar, contiene numero de bloques y block_id entre otros datos. PcbInfo pcb_info = new PcbInfo(); pcbInfo.bloques = Convert.ToInt32(r["bloques"]); pcbInfo.tipoMaquina = "Z"; pcbInfo.programa = r["programa"].ToString(); // Obtiene detalle de errores del panel completo if (revisionAoi.Equals("NG") || revisionIns.Equals("NG")) { detailList = GetInspectionDetail(); } // Lista de BLOCK_ID de ORACLE, adjunta Barcodes de cada bloque // En caso de tener varios bloques, y una sola etiqueta, genera etiquetas virtuales para el resto de los bloques bloqueList = GetBloquesFromDatabase(); MakeRevisionToAll(); }
private PcbInfo CreatePCBInfo() { string query = OracleQuery.ListBlocks(this); DataTable dt = _oracle.Query(query); int totalRows = dt.Rows.Count; int bloques = (from DataRow r in dt.Rows select int.Parse(r["seg_no"].ToString())).Distinct().Count(); //var segmentos = (from DataRow r in dt.Rows select int.Parse(r["seg_id"].ToString())).Distinct(); PcbInfo pcb = new PcbInfo(); pcb.bloques = bloques; pcb.nombre = programa; pcb.programa = programa; pcb.id = vtsOraclePgItemId; pcb.tipoMaquina = machineNameKey; return(pcb); }
private void Insert(FileInfo pcb, string fechaModificacion) { // Si no existe genero un Hash que identifica el contenido del archivo. // mas adelante se compara el hash nuevo con el anterior para verificar // si se modifico alguna linea. string pcbContent = FilesHandler.ReadFile(pcb.FullName); string newHash = PcbInfo.Hash(pcb.FullName); List <string> buildSegmentos = BuildSegment(pcbContent); int totalBloques = buildSegmentos.Count; string segmentos = string.Join(",", buildSegmentos.ToArray()); PcbInfo pcbInfo = new PcbInfo(); pcbInfo.programa = pcb.Name; pcbInfo.bloques = totalBloques; pcbInfo.segmentos = segmentos; pcbInfo.hash = newHash; pcbInfo.tipoMaquina = aoi.aoiConfig.machineNameKey; pcbInfo.fechaModificacion = fechaModificacion; PcbInfo.Insert(pcbInfo); }
private void Update(FileInfo pcb, PcbInfo pcbInfo, string newHash, string fechaModificacion) { // El HASH es diferente, hay cambios. string pcbContent = FilesHandler.ReadFile(pcb.FullName); List <string> buildSegmentos = BuildSegment(pcbContent); int totalBloques = buildSegmentos.Count; string segmentos = string.Join(",", buildSegmentos.ToArray()); string libraryName = LibraryName(pcbContent); int totalEtiquetas = EtiquetasEnPrograma(pcbContent); int totalPcbId = EtiquetaPcbIdEnPrograma(pcbContent); // No hay etiquetas en bloques, pero si tengo etiqueta de pcb id if (totalEtiquetas == 0 && totalPcbId > 0) { totalEtiquetas = 1; // Probablemente se trate de una placa secundaria si tiene varios bloques if (totalBloques > 1) { pcbInfo.secundaria = 1; } } aoi.aoiLog.verbose("-- Actualizando informacion de: " + pcb.Name); pcbInfo.programa = pcb.Name; pcbInfo.bloques = totalBloques; pcbInfo.segmentos = segmentos; pcbInfo.hash = newHash; pcbInfo.fechaModificacion = fechaModificacion; pcbInfo.libreria = libraryName; pcbInfo.etiquetas = totalEtiquetas; PcbInfo.Update(pcbInfo); }
private void CreateInspectionObject() { DataTable contenidoCsv = null; #region ABRE Y LEE TODAS LAS FILAS DEL ARCHIVO CSV try { rnsi.aoiLog.debug("Leyendo: " + csvFilePath.FullName); contenidoCsv = FilesHandler.FileToTable(csvFilePath.FullName, ','); } catch (Exception ex) { rnsi.aoiLog.stack("No fue posible leer: " + csvFilePath.FullName, this, ex); } #endregion // Solo si el archivo tiene al menos una fila de informacion if (contenidoCsv != null) { if (contenidoCsv.Rows.Count > 0) { #region LEE COLUMNAS DE ARCHIVO CSV Y VALIDA BARCODE DataRow info = contenidoCsv.Rows[0]; csvFile = csvFilePath.Name; csvDatetime = csvFilePath.LastWriteTime; csvDateSaved = DateTime.Parse(info[15].ToString().Replace("U", "")); csvDateCreate = DateTime.Parse(info[18].ToString().Replace("U", "")); fecha = csvDatetime.ToString("yyyy-MM-dd"); hora = csvDatetime.ToString("HH:mm:ss"); maquina = info[5].ToString().Replace("\"", "").Trim(); programa = info[7].ToString().Replace("\"", "").Trim(); barcode = info[36].ToString().Replace("\"", "").Trim(); BarcodeValidate(); string panelNroReemp = info[38].ToString().Replace("\"", "").Trim(); if (!panelNroReemp.Equals("")) { panelNro = int.Parse(panelNroReemp); } #endregion if (!barcode.Equals("")) { // Adjunto informacion de maquina machine = Machine.list.Where(obj => obj.maquina == maquina).FirstOrDefault(); if (machine == null) { machine.LogBroadcast("warning", string.Format("No existe la maquina: {0} en la base de datos MySQL", machine.maquina) ); } else { string proceso = ""; rnsi.DynamicTab(machine); if (machine.proceso == "B") { proceso = "BPR"; barcode = barcode + "-B"; } else { proceso = "SMT"; } machine.LogBroadcast("info", string.Format("{0} | Maquina {1} | Ultima inspeccion {2} | Proceso {3}", machine.smd, machine.line_barcode, machine.ultima_inspeccion, proceso ) ); // Adjunto informacion del PCB usado para inspeccionar, contiene numero de bloques y block_id entre otros datos. PcbInfo pcb_info = PcbInfo.list.Find(obj => obj.nombre.Equals(programa) && obj.tipoMaquina.Equals(rnsi.aoiConfig.machineNameKey)); if (pcb_info != null) { pcbInfo = pcb_info; } if (!Config.isByPassMode(machine)) { // Adhiere las rutas a las carpetas de inspecciones InspectionResult inspResult = new InspectionResult(this, rnsi); if (inspResult.located) { detailList = GetInspectionDetail(contenidoCsv); bloqueList = inspResult.GetBlockBarcodes(machine.proceso); MakeRevisionToAll(); machine.LogBroadcast("info", string.Format("Programa: [{0}] | Barcode: {1} | Bloques: {2}", programa, barcode, totalBloques ) ); } } } } else { rnsi.aoiLog.warning("El archivo no tiene codigo de panel"); } } else { rnsi.aoiLog.warning("El archivo " + csvFilePath.FullName + " no tiene filas"); } } }
/// <summary> /// Verifica y actualiza si es necesario la informacion de todas las PCB de VTWIN y RNS /// </summary> public bool VerifyPcbFiles() { // Verifico archivos PCB IOrderedEnumerable <FileInfo> pcbList = FilesHandler.GetFiles("*.pcb", aoi.aoiConfig.dataProgPath); int totalPcb = pcbList.Count(); bool reload = false; aoi.aoiWorker.SetProgressTotal(totalPcb); #region PCBLIST_FILES_DETECTED if (totalPcb > 0) { int countPcb = 0; foreach (FileInfo pcb in pcbList) { //if (pcb.Name.Equals("NT1010E-M-BOT-SBAST-LR.pcb")) //{ // countPcb = 12344; //} countPcb++; string fechaModificacion = pcb.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"); // Verifico si existe el pcb en la base de datos. PcbInfo pcbInfo = PcbInfo.list.Find(o => o.programa.Equals(pcb.Name) && o.tipoMaquina.Equals(aoi.aoiConfig.machineNameKey) ); if (pcbInfo == null) { // Si no existe en DB, lo inserto Insert(pcb, fechaModificacion); reload = true; } else { string newHash = ""; // Si existe, verifico que la fecha sea diferente if (!pcbInfo.fechaModificacion.Equals(fechaModificacion)) { // Si la fecha de modificacion en SQL no es igual a la fecha de modificacion actual. // Comparo HASH de archivo, contra el guardado en la DB newHash = PcbInfo.Hash(pcb.FullName); if (pcbInfo.hash.Equals(newHash)) { // Si el hash es similar, no hay cambios en el archivo, solo cambia la fecha UpdateDate(pcbInfo, fechaModificacion); reload = true; } else { // Actualizo la informacion del PCB Update(pcb, pcbInfo, newHash, fechaModificacion); reload = true; } } } aoi.aoiWorker.SetProgressWorking(countPcb); } // END FOREACH } else { aoi.aoiLog.warning("No se encontraron archivos PCB en: " + aoi.aoiConfig.dataProgPath); } #endregion return(reload); }