Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Lo script di esempio seguente ottiene la resa del "parametro di processo" per "ID wafer nell'ID lotto" utilizzando la tabella dati di esempio della capacità dei semiconduttori.
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp"); // My actual data is similar
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID );
);
cdt_ps = Report(ps)[Outline Box( "Process Screening" )][Table Box( 1 )] << Make Combined Data Table;
Wait(1 );
ps<< SendToReport( Dispatch( {}, "Process Screening", OutlineBox, {Close( 1 )} ) );
Wait (1);
ps << close window;
cdt_ps << New Column( "PassingDie", Numeric, "Continuous", Format( "Best", 12 ), Formula(:Count - :Out of Spec Count));
cdt_ps << New Column( "ParaYield [%]", Numeric, "Continuous", Format( "Best", 12 ), Formula(100*(:PassingDie / :Count)));
cdt_ps:Column << Set Name( "Process Parameter" );Ora chiamiamo un parametro di processo "PP", il gruppo di parametri di processo "PPG" e un ID wafer nell'ID lotto "wfrIDinLotID"
Successivamente voglio estrarre la resa PPG per wfrIDinLotID dove i PPG sono definiti come:
- Tutti i PNP in un unico gruppo
- Tutti gli NPN in un altro gruppo
- Tutti gli INM sono in un altro gruppo e così via.
cioè tutti i PP generati dalla riga sottostante ma senza i numeri alla fine formano i nomi dei PPG.
cdt_ps << Summary(Group( :Process Parameter ), Freq( "None" ), Weight( "None" ));
Non so ancora come ottenere i nomi PPG in una nuova colonna in JSL. Quindi, ho bisogno di aiuto qui.
Alcuni paramotori potrebbero avere un solo membro, il che va bene.
Il conteggio dei fallimenti di un dato PPG è, credo, la somma dei conteggi dei fallimenti di ciascuno dei suoi membri, successivamente disponibili dallo script sopra.
Pertanto, per un particolare wfrIDinLotID, si prevede che il "Conteggio fuori specifica" per un dato PPG abbia un singolo valore numerico. Questo andrà in una nuova colonna, chiamiamola OOSC_PPG.
La resa PPG per un dato wfrIDinLotID sarebbe quindi 100*(numero di SITI con OOSC_PPG = 0)/SITI totali testati.
Il totale dei siti testati per wfrIDinLotID è 5 nella tabella dati di esempio.
Infine, vorrei generare un report con 3 colonne: wfrIDinLotID, PPG, PPG yield.
Per favore, potrei avere qualche indicazione su come procedere con JSL?
Automazione e scriptingfinestreRi: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Cosa hai provato?
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?
bel trucco: "abusare" della piattaforma Process Screening per uscire dal conteggio delle specifiche per wafer.
molto utile : )
@Neo ha scritto:
Il conteggio dei fallimenti di un dato PPG è, credo, la somma dei conteggi dei fallimenti di ciascuno dei suoi membri
Temo: no
- almeno: non in generale.
ecco un esempio per NPN5 e NPN6. Se sommi i conteggi dei fallimenti, conterai due volte i punti blu+arancioni.
Per generare rendimenti raggruppati (tramite informazioni pass/fail raggruppate), è necessario iniziare dai dati grezzi.

Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@jthi . Per prima cosa devo separare le lettere dai numeri nei nomi dei parametri di processo per disporli in gruppi. Non so come separare il testo dai numeri in JSL.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi . Hmm...
>>>Per generare rendimenti raggruppati (tramite informazioni pass/fail raggruppate), è necessario iniziare dai dati grezzi
Temevo così....
ma ripensandoci e contrariamente a quanto pensavo prima, se uno qualsiasi dei membri di un particolare PPG non rientra nelle specifiche, il sito testato fallisce per quel particolare PPG.
Ho la sensazione che questo possa essere gestito senza tornare ai dati grezzi.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?
@Neo ha scritto: il sito testato fallisce per il particolare PPG.
Ma con l'approccio attuale, ti aggreghi nella piattaforma di screening dei processi e perdi le informazioni sul sito.
Diciamo che per uno dei wafer NPN5 si guasta nel sito 1, 2, 3 e NPN6 si guasta nel sito 2, 3, 4.
Quindi nella piattaforma Process Screening , otterrai per questo wafer:
- conteggio fuori specifica NPN5: 3
- conteggio fuori specifica NPN6: 3
Penso che l'unico modo per scoprire quanti siti hanno fallito per questo wafer (NPN5 o NPN6) è:
vai alla tabella originale, conta: 1,2,3,4
-> #fallisce = 4
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Sono d'accordo con @hogi , devi eseguire il calcolo al livello in cui hai ancora accesso al sito. Se utilizzi lo screening del processo non sarai in grado di distinguere tra sovrapposizioni. Considera di avere 5 siti su un wafer e 10 test. Se i wafer presentano solo guasti sul sito 1 e TUTTI i test, vorresti contarli come 1 sito fallito o come 10 test falliti ( il post di Hogi contiene un altro esempio). Penserei che non vuoi contarlo come 10 siti falliti?
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@jthi @hogi Grazie. Posso colorare i valori OOS usando quanto segue
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID ),
Color Out of Spec Values
); Devo quindi fare quanto segue
1. Formare una colonna per i PPG
2. Assegnare un fallimento a un particolare PPG se uno qualsiasi dei suoi membri ha una cella colorata
Ciò richiederà solo i dati grezzi.
Non so ancora come eseguire nessuno dei due passaggi precedenti, quindi richiedo alcune indicazioni qui.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@jthi . Se per un dato wafer uno qualsiasi dei membri di un particolare PPG è OOS, allora si tratta di un test fallito per questo PPG. Un sito può fallire un particolare test PPG ma superare i test su tutti gli altri PPG.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?colora le celle e poi raccogli tutte le righe con i colori: che soluzione creativa!
in una versione futura di JMP sarà molto più semplice: se questo desiderio raccoglie abbastanza complimenti...
:folded_hands: è nelle specifiche (valore)
R: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Dopo aver supportato << ottieni il colore della cella con un Kudo, in attesa di JMP19++,
potresti generare un sottoinsieme ausiliario, sovrascrivere i valori con le informazioni pass/fail 0/1 e sommarli tramite PPG:
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group( "Processes" );
ps = dt << Process Screening(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
dt sub = dt << Subset( All rows, Selected columns only( 0 ) );
For Each( {col}, col_names,
specs = col << Get Property( "Spec limits" );
If( Not( Is Empty( specs ) ),
lsl = specs["LSL"];
usl = specs["USL"];
Eval( Eval Expr( col << set each value( Not( lsl < Expr( Name Expr( col ) ) < usl ) ) ) );
);
);
prefixes = {"NPN","PNP","INM"};
PPGs = transform each ({prefix},prefixes,prefix || " fail");
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);
dt sub << Group Columns( "PPGs", PPGs );
ps = dt sub << Process Screening(
Process Variables( Eval( PPGs ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi Sto testando il tuo script nel mio JMP 16.2
La seconda riga sembra contenere un errore di battitura. Dovrebbe essere
col_names = dt << Get Column Group( "Processes" );
e questa parte genera un errore
dt sub << Group Columns( "PPGs", failcols );
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?scusa -> modificato.
Avrei dovuto cancellare i simboli prima di ricontrollare se il codice inviato funziona.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?La creazione dei gruppi può essere eseguita utilizzando Regex() e ottenere le celle colorate è stato risolto più volte nella comunità, ecco un post più vecchio Come ottenere il numero di riga di celle colorate in una colonna e assegnargli un tag (ad esempio "1 ") in una colonna appena creata? . Questo modello potrebbe non essere corretto poiché non sono sicuro di come creare i gruppi
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
rgx_pattern = "^(.+?)\d*$";
For Each({colname}, cont_cols,
groupname = Regex(colname, rgx_pattern, "\1");
Write("\!N'", colname, "' belongs to '", groupname, "' group");
);
e per comprendere il modello suggerisco di utilizzare https://regex101.com/ o qualche modello linguistico di grandi dimensioni (sono abbastanza bravi a spiegare i modelli regex)
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Anche utilizzare un tavolo impilato con qualcosa di simile può essere più semplice

Se non altro è più semplice verificare visivamente cosa sta succedendo (non ho verificato questi calcoli)

Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi Ho testato il tuo script e funziona come previsto. Tuttavia, non capisco perché la somma () (somma del conteggio dei fallimenti?) sia necessaria qui.
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);Potresti fare un po' di luce, per favore?
Grazie
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?ColGroup contiene un elenco di nomi di colonne che vengono sommati insieme. Per la colonna denominata "NPN Fail" la funzione Sum() viene espansa
sum( :NPN1, :NPN2, :NPN3, :NPN4, :NPN5, :NPN6, :NPN7, :NPN8, :NPN9, :NPN10, :NPN11 )
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi @txnelson Grazie. Noto che questa parte dello script aggiunge il numero di errori per sito per ciascun membro per un determinato PPG. Non sono sicuro di averlo capito.
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);Se un sito fallisce per un qualsiasi membro di un dato PPG, questo sito fallisce il dato PPG e non importa se più membri sotto questo PPG falliscono in questo sito (o è importante?) per la resa/wafer PPG in un lotto ?
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Ciao @Neo
sì, esatto, questa è la logica applicata per specificare la resa per Gruppo PP:
somma i fallimenti e usa USL = 0
se un sito fallisce per una specifica, fallisce.
Se la somma di tutti i candidati è 0, nessuno di essi fallisce -> quindi passa per il gruppo completo nel sito specifico.
Preferiresti un'altra logica?
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi . Astuzia!! Ho capito adesso. Non posso essere più d'accordo con la tua precedente affermazione . A proposito, originariamente l'ho preso da qui .
Preferirei comunque la parola "exploit"...

Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?@hogi Ora sto testando lo script con la mia tabella dati effettiva.
I nomi dei parametri nel mio caso sono nella forma ABCD_1_X_Y_1_Z e i PPG sono definiti da varie combinazioni di ABCD...GH (A è sempre una lettera mentre il resto può essere lettere o numeri).
X e Y sono numeri mentre Z può essere un numero, una lettera o una combinazione.
Non chiedermi perché il nome è in questa forma, non è opera mia.
I PPG si formano nel modo seguente
- U33P_1_0_0.... sarà contenuto nel paramotore "U33P"
- CASMAPUL23Out_1_0_1_...sarà contenuto nel PPG "CASMAPUL23Out", e così via
Quindi, per ottenere il nome PPG, devo ottenere la combinazione di lettere prima del primo carattere di sottolineatura nel nome del parametro. Come, modificare quanto segue affinché funzioni nel mio caso.
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Dai un'occhiata alle funzioni Word() e Words(), di solito sono molto utili per qualcosa di simile.
Ri: Come ottenere la resa del gruppo di parametri di processo per "ID wafer nell'ID lotto"?Come dice @jthi ,
colGroup = Filter Each({col}, col_names, Word(1, col << getname(),"_") == myName);farà il lavoro 