Beispiel #1
0
        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);
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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");
                }
            }
        }
Beispiel #10
0
        /// <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);
        }