El modelado de la capacidad de las fábricas de semiconductores implica el mantenimiento de los valores de rendimiento (en piezas por hora [PPH]) para miles de recetas de proceso. Los datos de procesamiento se almacenan para cada ejecución, lo que proporciona un amplio conjunto de datos históricos que pueden utilizarse para determinar los valores de PPH. En el modelado de la capacidad, las ineficiencias que degradan la capacidad se aíslan del rendimiento, por lo que el PPH modelado debe representar el máximo rendimiento posible en funcionamiento continuo. Estos requisitos complican el proceso de cribado de datos históricos, y los expertos en procesos deben ser especialmente cuidadosos para identificar las ejecuciones no estacionarias que deben excluirse del análisis.
Utilizando JSL, se creó una herramienta interactiva para facilitar el análisis de datos históricos de rendimiento y evaluar, seleccionar y documentar los PPH por receta para su uso en el modelado de capacidad. El script construye una aplicación de panel de control totalmente interactiva e independiente que utiliza plataformas optimizadas con JSL y controles personalizados para explorar las fuentes de variación y aislar las ejecuciones en estado estacionario. La selección de valores de PPH se realiza y documenta directamente en el panel de control. Finalmente, se puede exportar un resumen de los valores y distribuciones seleccionados a PowerPoint para obtener un informe de análisis completo.
Esta presentación incluye una demostración de la herramienta del panel de control y recorre partes del script.
Hola, me llamo Michelle Terwilliger. Soy ingeniera industrial en Texas Instruments, nuestra sede en South Portland, Maine. Hoy les hablaré sobre una herramienta interactiva para explorar datos históricos de rendimiento, creada con scripts en JSL.
Antes de hablar sobre mi script, quiero compartir brevemente sobre el modelado de capacidad de fábrica, para brindar información sobre cómo usamos JMP. Comenzamos con la información sobre el conjunto de herramientas para el que queremos modelar la capacidad, incluyendo el rendimiento por receta y las horas totales de ese conjunto.
Luego aplicamos un perfil de inicio que estamos considerando ejecutar en la fábrica, encontramos nuestros pases por receta y agregamos eso a través del rendimiento por receta para obtener las horas de producción requeridas para ejecutar ese material.
Luego, tomamos las ineficiencias previstas para el conjunto de herramientas y las usamos para escalar el total de horas del conjunto de herramientas, lo que nos da las horas de producción reales planificadas. La relación entre estos dos valores nos da el porcentaje de carga. Esto nos indica si podemos ejecutar el perfil planificado o si necesitamos añadir o quitar obleas.
En esta presentación, hablaré sobre el rendimiento por receta. Esto se mide en partes por hora (PPH). Me lo dirán varias veces. Los valores de rendimiento se almacenan para prácticamente todas las recetas que tenemos en la fábrica. Son miles de recetas individuales. Como pueden imaginar, es una cantidad considerable que almacenar, mantener y actualizar con el tiempo.
También quiero señalar que las ineficiencias están completamente aisladas de ese rendimiento. Al considerar los valores de rendimiento del modelo, buscamos capturar valores que representen el máximo rendimiento posible que esa receta puede mantener, modelándola así sin ineficiencias.
Al seleccionar los valores del modelo, debemos tener en cuenta algunas condiciones. Buscamos el máximo rendimiento posible, sin ineficiencias. Queremos representar condiciones de estado estable en funcionamiento continuo. Cabe recordar que las ineficiencias se representan en otras partes del modelo, por lo que no las ignoramos.
Ahora bien, esto es muy difícil o imposible de replicar en un entorno de fabricación. En lugar de intentar ejecutar pruebas que reproduzcan este escenario, utilizamos datos históricos de producción para intentar comprender qué valores podrían obtenerse si lo hiciéramos. Aquí es donde entra en juego JMP.
Utilizamos JMP para visualizar y explorar las fuentes de variación. Lo utilizamos para excluir ejecuciones con ineficiencias conocidas, aislar las ejecuciones representativas de condiciones de estado estacionario y documentar los resultados.
Al revisar un conjunto de datos, tendremos una muestra de mediciones de rendimiento para una receta determinada, y podemos asumir que, dentro de esta, habrá pérdidas de diversas fuentes, como diferencias en las herramientas o entre recetas. La influencia de una ejecución anterior puede tener un gran impacto en el resultado de la siguiente ejecución: tiempo de carga, número de cámaras utilizadas, etc.
Dado esto, también deberíamos tener mediciones que indiquen que esas pérdidas se acercan a cero. Si esto sucede, debería resultar en un límite superior para el rendimiento observado cuando todas las pérdidas estén lo más cerca posible de cero. Resulta que este es el caso. Realmente observamos una meseta bastante significativa en nuestros datos en un límite superior. Esto es lo que buscamos para ese alto rendimiento óptimo que buscamos para fines de modelado.
Hay un proceso para seleccionar PPH. Comenzaremos aislando las ejecuciones en estado estacionario, teniendo en cuenta que algunas ejecuciones pueden parecer más rápidas, pero ocurren en situaciones que no se pueden mantener durante varias ejecuciones, por lo que no son de estado estacionario.
Luego, queremos eliminar las ejecuciones con fuentes identificables de pérdidas de rendimiento, como los elementos que vemos aquí arriba. Queremos seleccionar un valor de PPH para el modelo según el límite superior observado. Solemos usar el percentil 98 como sugerencia, pero obviamente hay margen de maniobra.
Luego repetimos esto para todas las recetas y exportamos un informe con los resultados. Voy a pasar a una demostración. Esta es una tabla de ejemplo que exportaríamos para los datos de ejecución de un conjunto de herramientas. Verán que cada fila representa una ejecución de varias recetas en diversas herramientas. Tenemos algunas mediciones de PPH tomadas con un par de metodologías diferentes. Además, más adelante, se muestran algunos de los factores que influyen en la variabilidad.
Ejecutaré mi herramienta PPH y comenzaremos con este selector de columnas. Usaré Takt PPH para este conjunto de herramientas, y mis fuentes de variación están agrupadas aquí. Analizaremos la herramienta, el total de obleas, el recuento de cámaras y la especificación de la receta anterior.
Voy a ejecutar esto. Esta es la vista principal de nuestro panel. Arriba, tenemos algunos controles globales. Este panel contiene las distribuciones de cada especificación de receta. Debajo de cada una, verás que tengo algunos controles personalizados que se aplican directamente a la especificación de receta que está encima. Aquí abajo, tengo una tabla de resumen con información de cada receta, que se irá completando a medida que la revisemos.
Este panel es para análisis. Ahora mismo está bastante vacío, pero verás que se llenará al hacer clic en algunas de estas opciones. Tengo gráficos de tiempo para cada receta y, finalmente, filtros de datos. Empezaremos con esta primera receta.
Lo primero que haré será filtrarlo. Notarán que el análisis de predictores cambió al hacerlo. Ahora podemos ver que, para esta receta, el factor que más contribuye a la variabilidad de esta herramienta es... Haré clic en él y luego en "Gráfico de variabilidad" para colorear según lo seleccionado.
Ahora podemos ver en este conjunto de datos cómo varía según la herramienta. Observo que prácticamente todas las herramientas pueden alcanzar el límite superior que observamos. Me sentiría bastante cómodo colocando el valor PPH de mi modelo en este límite.
Debo señalar que, en este ejemplo, tengo una línea para el modelo PPH. Este sería el valor que modelábamos anteriormente para este conjunto de herramientas. En este caso, estamos subestimando considerablemente la capacidad de esta herramienta. Decimos que puede funcionar a 35,1, pero en realidad es capaz a 37,48.
Existe una gran brecha en la comprensión de la capacidad de la fábrica cuando esta no está configurada correctamente. Es importante encontrar el valor correcto para poder modelar la capacidad correcta de la fábrica.
Cuando pienso en seleccionar este valor, otra opción que tengo, si hay algunos puntos aquí que parecen volantes que desea eliminar de los datos, tengo un botón llamado recortar, que quitará el 1% superior e inferior de los datos.
Podemos seleccionar el PPH del modelo o el PPH recomendado del 98 %, o podemos introducir un valor personalizado que puede escribir y mover hacia arriba y hacia abajo con estos botones. Una vez que encuentre el valor deseado, selecciónelo aquí, haga clic allí y pulse "Seleccionar". Verá que se completa en la tabla de resumen. También podemos añadir notas si lo desea, que se completarán aquí.
Ahora pasaré a una especificación de receta un poco más compleja para mostrar cómo es realmente analizar datos como estos. Empezaré filtrando. Verán que este panel se actualizó. Nuestro principal factor que contribuye a la variabilidad en este conjunto de datos son las especificaciones de recetas anteriores. ¿Qué se estaba ejecutando antes de cargar este lote de obleas?
Observaré ese gráfico de variabilidad y lo colorearé. En mi opinión, este destaca bastante. Se ejecuta más rápido cuando se ejecuta después de la receta B. Notaremos que, en realidad, estamos viendo la receta B. Esta cumple la condición de estado estable. Estamos ejecutando la misma receta una tras otra. Esa es la forma más eficiente de ejecutar esta receta. Eso es lo que queremos capturar en el modelo.
Voy a seleccionar el resto y usaré este botón para ocultar y excluir, de modo que podamos eliminar la fuente de variación conocida e identificada. Ahora bien, analizar nuestra herramienta de cribado de predictores es, una vez más, el factor que más contribuye.
Echaré un vistazo. Me parece que la mayoría de las herramientas son capaces de alcanzar ese valor tan alto. Me sentiría bastante cómodo, una vez más, seleccionando este valor recomendado del 98 %. Observo que la herramienta 6 tiene una cola bastante significativa en comparación con las demás. Quizás debería tomar nota para hablar con un ingeniero de equipos de procesamiento y ver si necesitan comprobar algo en esa herramienta. Anotaré esa nota y seleccionaré mi valor del 98 %.
Ahora, supongamos que está realizando esta revisión y desea revisar una revisión anterior que realizó o que no terminó, e importar un resumen parcialmente terminado. Podemos hacer clic en este botón para importar una tabla de resumen, que sería una versión guardada de esta tabla. Esta tabla se rellenará con todos sus valores anteriores y actualizará todos los valores seleccionados en la distribución. Puede simplemente volver a una revisión que haya realizado previamente.
Finalmente, cuando haya terminado y esté listo para exportar los resultados, este botón creará una presentación de PowerPoint con una tabla con todos los valores seleccionados, sus notas, su procedencia y miniaturas de las especificaciones de cada receta. Puede usarlas en otra importación y, a continuación, importar esta tabla directamente al modelo.
Volviendo a mi presentación. En lugar de explicar paso a paso todo el script de esta herramienta, que es bastante extenso, me centraré en tres características distintivas que, en mi opinión, lo unifican todo y lo hacen posible.
En primer lugar, al trabajar con elementos de visualización creados con una variable "by", puede resultar complicado interactuar con elementos específicos del grupo. Esta sería mi lista de distribuciones por receta. ¿Cómo selecciono con cuál quiero interactuar?
Mi solución es, al crear la distribución, asignarle un nombre, lo que me da una lista de referencias a cada elemento de visualización. Puedo usar esto con un bucle o referenciarlos directamente por índice.
En segundo lugar, está la gestión de datos. Hay muchos valores diferentes asociados con las especificaciones de recetas o diferentes aspectos de este informe que deben mantenerse y transferirse entre los elementos de visualización y otros lugares. La solución es otra lista de índices por nombre de receta que se asigna directamente a la lista de índices que teníamos aquí y utiliza matrices asociativas para almacenar los datos por nombre.
En tercer lugar, los elementos interactivos deben identificar con qué parte de la distribución se desea que interactúen al hacer clic en ellos o al interactuar con ellos. Deben estar vinculados a la especificación de la receta específica. Al crearlos en un bucle, no conservan el valor del índice con el que se crearon.
La solución es darles la capacidad de autoidentificar su contexto almacenando una referencia al elemento padre y luego usando el comando X path para extraer el valor del índice donde residen. Presentaré algunos ejemplos de todo esto para que quede más claro.
Aquí están mis distribuciones creadas con una variable, "Por especificación de receta", y verán que la llamé dist_right_here. Esto contiene una lista de todos los elementos de distribución que componen esta visualización. Además, tengo los nombres de mis recetas almacenados en una lista que se asigna directamente a estos.
Puedes iterar. Voy a iterar por esta lista de distribuciones y, por ejemplo, rellenar los datos según la especificación de la receta. Aquí mismo, tengo una matriz asociativa y la estoy rellenando usando la cuarta columna de mi tabla de datos de resumen.
Esto me da mis cuantiles, y pueden ver que cada nombre de receta individual apunta a un valor. También pueden interactuar con elementos del gráfico dentro del mismo bucle. Aquí estoy realizando algunos cambios en el acceso y, en este caso, estoy añadiendo una línea de referencia.
Para ello, utilizo una convención de nombres anidada. Mi lista de recetas almacena el nombre, que se anida dentro del array asociativo. Este hace referencia al nombre y proporciona el valor. Esta técnica anidada es fundamental para poder intercambiar datos entre todos los lugares que necesitan acceder a ese valor.
A continuación, los elementos interactivos se crean dentro del mismo bucle del que acabamos de hablar. Se añaden como elementos hermanos a cada uno de los elementos de distribución individuales, a los que hago referencia aquí con un índice.
Aquí hay un ejemplo del botón Seleccionar. Hay mucho código, pero comienza con esta ruta que verifica la ruta de visualización de vuelta al cuadro de distribución. Tengo una referencia almacenada al contenedor principal que contiene la distribución cuando se creó, de modo que esta función pueda retroceder a ella y generar un texto con un número que coincidirá con el índice donde se encuentra ese elemento de visualización.
Al hacer clic en el botón Seleccionar, se verifica su ubicación y se genera un índice que indica: "Bien, quiero seleccionar esto para la receta A". Esa receta, ya sea el índice o el nombre, se puede transferir a otras funciones. Se pueden interactuar con filas específicas de la tabla de resumen mediante el nombre de la receta, cambiar los elementos de visualización y acceder a los valores de los datos. Todo lo que se necesite con el nombre de la receta se puede hacer en otras funciones una vez que se haya identificado su propósito al hacer clic en ella.
De hecho, tengo otra demostración que voy a repasar. Se trata de un ejemplo más pequeño y breve, creado con datos de muestra de JMP, para mostrar un ejemplo más sencillo que realiza algunas de las mismas funciones que el script más grande. Quiero destacar que es mucho más sencillo de lo que parece. Solo tiene 73 líneas de código, si se elimina el espacio en los comentarios. Lo explicaré paso a paso.
Comenzaré ejecutando el script. Abre estos datos de muestra de precios al consumidor. Tenemos una tabla resumen con cada uno de nuestros artículos, el precio medio y un precio seleccionado. Debajo de cada distribución, hay un pequeño elemento interactivo.
Puedes usar el valor medio por defecto y moverlo hacia arriba y hacia abajo, o seleccionar un valor y luego el precio, que se rellenará aquí. Un pequeño ejemplo para mostrar algo similar a lo que hice en el script más grande.
Repasemos este script paso a paso. Empecemos con lo básico. Tengo declaraciones que son mi lista de artículos, mis matrices asociativas para el precio medio, un precio temporal que sirve como marcador de posición para registrar el contenido de este valor. Luego, mi precio seleccionado, que se usa para obtener el valor seleccionado y rellenarlo en la tabla de resumen.
Empiezo creando la tabla resumen, modificando el formato y añadiendo una nueva columna. Luego, creo una ventana de visualización. Dentro de este cuadro H-Splitter, tengo una referencia a la tabla resumen que acabamos de crear, y ahora estoy creando mis distribuciones allí mismo. Observarán, de nuevo, esta referencia principal al cuadro de desplazamiento que contiene las distribuciones mencionadas en una referencia. Esto es todo lo que se utiliza para crear el cuadro de visualización que ven.
Ahora, justo después, crearé mi lista de artículos, que se asignará a los elementos de visualización individuales dentro de esta lista de distribuciones. Ahora ejecutaré mi bucle, que es el mismo bucle del que hablamos antes. Empezaré rellenando el precio medio, que proviene directamente de la tabla de resumen, y luego el precio temporal será el mismo.
Ahora cambiaré los formatos de acceso para cada uno y añadiré líneas de referencia a ese valor medio usando la técnica anidada que mencionamos. Añadiré como hermano a cada una de las distribuciones. Tengo varios contenedores aquí solo para espaciar, y luego mi cuadro de edición de números, que es el cuadro donde se puede escribir y mover.
Al interactuar con él, se ejecutará la función que contiene. Lo primero que hace es comprobar su ruta. La he configurado para que muestre los valores. Si seleccionamos uno y lo modificamos, como pueden ver en el registro, mostrará la ruta X. Extraerá el índice y le asignará el nombre.
Al crear diferentes líneas, puedes ver que se asignan nombres diferentes según el clic. Después, solo se accede al cuadro de acceso para interactuar con él. Eliminamos las líneas de referencia antiguas para asegurarnos de no duplicarlas cada vez, y volvemos a agregar las que se hayan eliminado para evitar que, si alguna línea se superpusiera, se superpusiera con la anterior. Eso es lo que ocurre aquí.
El precio temporal se actualizará por nombre de artículo con el valor dentro del cuadro de número. Agregaremos una línea de referencia específica para el valor que estás seleccionando. Este es el código del botón "Seleccionar". Al igual que con el cuadro de número, revisamos la ruta para extraer el nombre del artículo y el índice.
Eliminaremos las líneas de acceso seleccionadas previamente, agregaremos las que se hayan eliminado y actualizaremos el precio seleccionado con el precio temporal que creamos al interactuar con el cuadro. Luego, actualizaremos la tabla de resumen con el precio seleccionado y crearemos una línea verde en negrita para indicar que ese era el valor seleccionado.
Eso es todo. Espero que no haya parecido demasiado complicado. Creo que la mayor parte consiste simplemente en interactuar con el acceso y añadir líneas de referencia, y todo lo que crea la funcionalidad de los elementos interactivos es bastante sencillo.
Este script, así como los datos de muestra y el script más completo de la herramienta PPH, se subirán junto con el contenido de mi presentación. Deberían estar disponibles para que puedas experimentar con ellos o profundizar en su funcionamiento.
Para concluir, compartiré algunos aprendizajes que he adquirido durante este proceso de creación y uso de la herramienta PPH. El primero es que añadir elementos interactivos a las plataformas en JMP amplía enormemente la capacidad de análisis.
Se trata de cosas como esas, solo la opción de seleccionar un valor y completarlo en otro lugar, o en la herramienta PPH, la selección de predictores y luego poder seleccionar valores desde allí y luego expandirlos aún más con un gráfico de variabilidad.
A continuación, está la capacidad de documentar los hallazgos de las exportaciones, lo que realmente ayuda a agilizar el proceso de comunicación. Partimos de datos sin procesar, terminamos con alguien que realiza un análisis y luego pueden exportarlos a una tabla que se puede enviar a quien mantiene el modelo.
Puedes crear notas que se pueden enviar a un ingeniero de procesos o equipos para diferentes tareas que desee revisar en sus herramientas. Además, en cuanto a la programación, usar esas listas ordenadas como claves de índice con matrices asociativas para almacenar, consultar datos y pasarlos entre diferentes elementos de visualización fue fundamental para que funcionara con un gran conjunto de datos.
Luego, crea los controles interactivos con un elemento de visualización de la variable "by" que recorre el bucle. Puedes hacer muchas cosas simplemente recorriendo la lista de elementos de visualización que obtienes al crear algo usando una variable "by".
Finalmente, lo más importante que quiero transmitir es que crear scripts no es tan difícil como parece. La herramienta PPH es un script grande y puede resultar intimidante a simple vista, pero con el tiempo, crear algo así no es tan difícil.
Cuando estoy creando scripts, siempre uso el índice de scripts. Siempre tengo abiertas las firmas de ayuda de JMP y mi registro para ver qué sucede mientras trabajo en JMP.
Quiero animar a quienes no lo hayan probado o les intimide a que lo prueben, porque amplía enormemente las posibilidades de JMP. Eso es todo. Gracias por su tiempo.