半導體工廠產能建模涉及維護數千種製程配方的吞吐量值(以每小時產量[PPH]表示)。每次運行的加工資料都會被存儲,從而形成豐富的歷史資料池,可用於確定PPH值。在產能建模中,降低產能的效率損失與吞吐量被隔離,因此建模的PPH值應代表連續運轉下的最高性能。這些要求使得篩選歷史資料的過程變得複雜,製程專家需要格外謹慎地識別那些應從分析中排除的非穩態運行資料。
利用 JSL,我們創建了一個互動式工具,用於輔助分析歷史吞吐量數據,以便評估、選擇和記錄按配方劃分的 PPH(生產者每小時產量),用於產能建模。該腳本建立了一個完全互動的獨立儀表板應用程序,利用 JSL 增強的平台和自訂控件,幫助用戶探索變異來源並分離穩態運行數據。 PPH 值的選擇和記錄直接在儀表板中進行,最後,可以將所選值和分佈的摘要匯出到 PowerPoint,產生完整的分析報告。
大家好,我叫米歇爾‧特威利格 (Michelle Terwilliger)。我是德州儀器公司位於緬因州南波特蘭分公司的工業工程師。今天,我將介紹一個使用 JSL 腳本編寫的互動式工具,該工具可用於探索歷史吞吐量資料。
在介紹我的腳本之前,我想先簡單介紹一下工廠產能建模,以便大家了解我們如何使用 JMP 來建模。首先,我們需要了解要建模產能的工具集的相關信息,包括每個配方的吞吐量以及該工具集的總工時。
然後,我們應用一個正在考慮在工廠運行的啟動配置文件,並按配方查找我們的工序,然後通過按配方計算吞吐量來匯總這些工序,從而獲得運行該物料所需的生產時間。
然後,我們考慮工具集預期存在的效率損失,並以此來調整工具集的總工時,從而得出計劃的實際生產工時。這兩個數值的比值即為產能利用率。這可以告訴我們是否可以按計劃運行生產流程,或者是否需要增加或減少晶圓。
本次演講我將重點放在按配方劃分的產量。我們用每小時產量(PPH)來衡量產量。您會聽到我多次提到這個單位。我們工廠幾乎每個配方都有產量數據,總共有數千個配方。您可以想像,要儲存、維護並及時更新這些數據,工作量相當大。
我還想指出,這些效率低下之處與吞吐量完全無關。我們在考慮模型的吞吐量值時,希望盡可能捕捉到能夠代表該配方所能達到的最高性能的值,也就是說,我們希望在建模時排除所有效率低下因素的影響。
在為模型選擇參數值時,我們需要牢記以下幾個條件。我們希望模型達到最高性能,並且沒有任何效率損失。我們希望模型能夠模擬連續運轉下的穩態條件。需要注意的是,模型的其他部分已經反映了效率損失,所以我們並沒有忽略它們。
然而,這種情況在生產環境中很難甚至不可能重現。與其嘗試運行測試來重現這種場景,我們不如利用歷史生產資料來了解如果真的在這種情況下運行,數值可能會是多少。這就是 JMP 的用武之地。
我們使用 JMP 來視覺化和探索變異來源。我們用它來排除已知效率低下的運行,篩選出能夠代表穩態條件的運行,然後記錄這些結果。
當我們著手審查資料集時,我們會得到特定配方的吞吐量測量樣本。我們可以假設,其中會存在來自多種不同來源的損耗,例如工具差異、配方差異等等。前一次運行的結果會對下一次運行產生很大影響,例如裝料時間、使用的腔室數量等等。
有鑑於此,我們也應該測量到這些損耗接近零的情況。如果這種情況發生,那麼當所有損耗都盡可能接近零時,觀測到的吞吐量應該會有一個上限。結果證明確實如此。我們的數據確實在上限處出現了一個相當明顯的平台期。這就是我們為了建模目的而追求的最佳性能。
選擇 PPH 需要遵循一定的流程。首先,我們要篩選出處於穩定狀態的運行資料。需要注意的是,有些運行資料看起來可能更快,但它們出現在無法持續多次運行的情況下,因此並非處於穩定狀態。
接下來,我們要剔除那些有明顯吞吐量損失的運作記錄,就像上面提到的那些。我們希望根據觀察到的上限值來為模型選擇一個 PPH 值。我們通常建議使用第 98 個百分位數,但顯然還有調整的空間。
然後我們對所有配方重複此操作,並匯出結果報告。接下來我將進行示範。這是一個範例表格,用於匯出工具集運行資料。您可以看到,每一行代表使用不同工具運行各種配方的一次結果。我們使用幾種不同的方法測量了一些 PPH 值。再往後看,我列出了一些影響變異性的因素。
我將運行我的 PPH 工具,我們先從這個列選擇器開始。我將使用 Takt PPH 作為此工具集,我的變異來源都集中在這裡。我們將查看工具、晶圓總數、腔室數量和先前的配方規格。
我來運行一下。這是我們儀錶板的主視圖。上面是一些全域控件。這個面板包含每個配方規格的分佈情況,您會看到每個規格下方都有一些自訂控件,這些控件直接應用於其上方的配方規格。下面是一個匯總表,其中包含每個配方的信息,它會在我們進行審核時更新。
這個面板用於分析。現在它幾乎是空的,但隨著我們點擊這些選項,你會看到它逐漸顯示內容。我這裡有每個食譜的時間曲線圖,最後,這裡還有一些資料篩選器。我們先從第一個食譜開始。
首先,我要進行篩選。你會注意到,篩選之後預測因子的篩選條件改變了。現在我們可以看到,對於這個食譜來說,影響變異性最大的因素是這個工具。我點擊它,然後點擊“變異性圖”,就可以按選定項著色了。
現在我們可以從這個資料集中看出不同工具之間的差異。我注意到,幾乎每種工具都能達到我們觀察到的上限值。因此,我完全可以放心地將我的模型 PPH 值設定在這個上限值。
在這個例子中,我需要指出,這裡有一行是 PPH 型號的數值。這是我們之前為這套工具建模的數值。在這個例子中,我們嚴重低估了這套工具的實際能力。我們說它的運行速度是 35.1,但實際上它能達到 37.48。
這裡存在著一個很大的認知偏差,即當這個參數設定不正確時,我們對工廠產能的理解就會出現偏差。找到正確的參數值至關重要,這樣我們才能真正建立起工廠的正確產能模型。
當我考慮選擇這個值時,我還有另一個選擇:如果這裡有一些看起來像是你想從資料中刪除的傳單,我有一個名為「修剪」的按鈕,它可以刪除頂部和底部 1% 的資料。
我們可以選擇模型 PPH 值或建議的 98% PPH 值,也可以輸入自訂值,您可以使用這些按鈕上下移動它。找到所需值後,您可以在這裡選取它,點擊它,然後點擊「選擇」。您會注意到它出現在總計表中。我們也可以根據需要添加備註,這些備註也會顯示在這裡。
現在我將使用一個稍微複雜一點的配方規範,來展示深入分析這類數據究竟是什麼樣的體驗。首先進行篩選。你會看到這個面板已經更新了。現在,造成此資料集變異性的主要因素是先前的配方規範。在我加載這批晶圓之前,運行的是什麼配方規格呢?
我會查看這個變異性圖並進行著色。對我來說,這個圖非常突出。它在執行配方 B 之後運行速度更快。我們會注意到,我們實際上正在查看配方 B。這滿足了穩態條件。我們連續運行相同的配方。這是運行配方最有效的方式。這正是我們想要在模型中捕捉到的。
我接下來要選中剩下的幾個,然後用這個按鈕把它們隱藏並排除掉,這樣我們就能消除這個已知且已識別的變異來源。現在,再次查看我們的預測因子篩選工具,它仍然是最大的影響因素。
我這就去看一下。在我看來,大多數工具似乎都能達到這麼高的數值。所以我再次覺得選擇98%這個推薦值比較放心。我注意到工具6的尾部與其他工具相比明顯更長。我可能需要記下來,以便和處理器設備工程師溝通,看看他們是否需要檢查一下這個工具。我會把這張記錄記下來,然後選擇98%的值。
假設您正在進行本次審核,並且想要重新查看先前已完成或未完成的審核,並匯入部分完成的摘要,我們可以點擊此按鈕匯入摘要表(即該表格的已儲存版本),它會將您先前的所有值重新填入表格中,並更新資料分佈中所有選取的值。您可以直接返回之前完成的審核。
最後,當您覺得一切就緒,準備匯出結果時,點擊此按鈕即可建立 PowerPoint 文件,其中包含一個表格,列出了您選擇的所有值、您的備註、值來源以及每個配方規格的縮圖。您可以將這些內容用於其他匯入操作,然後將此表格直接匯入模型中。
回到我的投影片簡報。這個工具的腳本非常龐大,所以我不會逐一講解。我將重點介紹三個我認為真正將所有功能整合在一起並使其得以實現的獨特特性。
首先,當您使用基於變數建立的顯示元素時,操作起來可能會比較複雜,尤其是在嘗試與群組內的特定元素進行互動時。例如,這是我按配方列出的分發清單。我該如何選擇要互動的元素呢?
我的解決方案是,在建立分發包時,我會為它命名,這樣就能得到一個指向各個顯示元素的參考清單。我可以使用循環來呼叫這個列表,也可以直接透過索引來引用它們。
其次是資料管理。這份報告中有很多與配方規格或其他方面相關的不同值,需要維護並在顯示元素和其他位置之間傳遞。解決方案是建立一個按配方名稱排列的索引列表,該列表直接對應回我們先前使用的索引列表,並使用關聯數組按名稱儲存資料。
第三點是互動元素,它們需要辨識出你分發包中的哪個部分,或者當你點擊或與之互動時,你希望它們與哪個分發包進行互動。它們需要與特定的配方規格關聯起來。當你在循環中創建它們時,它們不會保留創建時使用的索引值。
解決方案是讓它們能夠透過儲存對父元素的參考來識別自身所處的上下文,然後使用 XPath 命令提取它們所在的索引值。我將逐步舉例說明這些內容,希望能幫助大家更能理解。
這是我根據「按配方規格」變數建立的分佈列表,您可以看到我把它命名為 dist_right_here。它實際上包含構成此顯示的所有分佈元素的清單。此外,我還將配方名稱儲存在一個清單中,該清單直接對應到這些分佈元素。
你可以循環遍歷這個分銷列表,並執行一些操作,例如根據配方規格填充數據。這裡,我有一個關聯數組,我正在使用匯總資料表的第四列來填充它。
這樣就能得到我的分位數,你可以看到每個配方名稱都指向一個值。你也可以在同一個循環中與圖表元素互動。這裡我對存取權限進行了一些更改,在這個例子中,我添加了一條參考線。
為此,我在這裡使用了嵌套命名約定。我的食譜清單儲存名稱,該名稱嵌套在關聯數組中。關聯數組引用名稱,從而傳回值。這種嵌套技術是關鍵所在,它使得所有需要存取該值的地方都能來回傳遞資料。
接下來是交互元素,它們是在我們剛才提到的同一個循環中創建的。它們會作為同級元素添加到每個單獨的分發元素之後,我在這裡用索引來引用這些分發元素。
以下是“選擇”按鈕的範例。這裡涉及大量程式碼,但首先會檢查顯示路徑,使其返回到分發框。我儲存了一個指向父容器的引用,該容器在創建分發框時就存在,這樣該函數就可以回溯到該容器,並返回一個包含數字的文本,該數字與顯示元素所在的索引號相同。
點擊「選擇」按鈕後,程式會檢查目前位置,並傳回索引,索引會對應並指示「好的,我要選擇這個食譜 A」。然後,無論是索引還是食譜名稱,都可以將該食譜傳遞給程式內部的其他函數。您可以根據該食譜名稱與匯總表中的特定行進行交互,更改顯示元素,存取資料值。一旦確定了點擊該名稱所對應的食譜,您就可以在其他函數中使用該食譜名稱執行任何操作。
我其實還有另一個演示可以講解。這是一個更小更短的例子,使用 JMP 範例資料製作,旨在展示一個更簡單的範例,實現我在較長腳本中實現的一些相同功能。我想強調的是,它比看起來簡單得多。如果去掉註解中的空格,這段程式碼只有 73 行。接下來我會一步一步講解。
我先運行一下腳本。它會開啟消費者價格樣本資料。我們有一個總表,其中包含了每種不同商品的價格、平均價格和選定價格,在每個價格分佈下方,還有一個小小的互動元素。
你可以使用預設值,也可以上下調整這個值,或是選擇一個值,然後選擇價格,價格就會顯示在這裡。這只是一個簡單的例子,用來展示與我在完整腳本中實現的功能類似的操作。
讓我們來逐步分析一下這個腳本。先從基礎講起。這裡有聲明,包括商品列表、平均價格的關聯數組、一個臨時價格(用來記錄當前值),以及一個選定價格,它用於獲取你選擇的價格並將其填充到匯總表中。
我首先建立匯總表並修改一些格式,新增一列。然後我創建一個顯示窗口,在這個 H 型分隔符號框內,我引用了剛才創建的匯總表,現在我直接在裡面創建分佈。你會再次注意到,這裡引用了包含分佈的滾動框。這就是創建你現在看到的顯示框的全部內容。
接下來,我將建立項目列表,該列表將對應到分佈列表中的各個顯示元素。現在我將執行循環,也就是我們之前討論過的循環。首先,我將填充平均價格,該價格直接來自匯總表,然後是臨時價格,其值也相同。
現在我要更改每個資料的存取格式,並使用我們之前討論過的嵌套技術,為平均值添加參考線。接下來,我會將它們作為同級元素添加到每個分佈中。這裡有一些容器,只是為了保持間距,然後是我的數位編輯框,也就是你可以輸入和移動的那個框。
當與該物件互動時,它會執行其內部的函數。首先,它會檢查其路徑。我已經設定好顯示路徑中的值。如果我們選擇一個物件並開始修改它,您可以在下面的日誌中看到,它會輸出 X 路徑。它會提取索引並給出名稱。
當我們執行不同的操作時,可以看到它會根據你點擊的內容給予不同的名稱。之後,它只是訪問訪問框以便與之互動。我們正在刪除所有舊的引用線,以確保每次操作時不會重複引用線,並重新添加任何可能被刪除的引用線,以防任何行重疊,因為它們會被先前的引用線覆蓋。這就是這裡正在發生的事情。
然後,臨時價格會根據商品名稱更新為數字框中的值。接下來,我們會新增一條專門針對您選擇的值的參考行。這是“選擇”按鈕的代碼。與數字框一樣,我們會檢查返迴路徑以提取商品名稱和索引。
我們將移除先前選定的所有接入線,重新新增任何可能已刪除的接入線,並將選定的價格更新為我們先前與該框互動時建立的臨時價格。然後,我們將使用剛剛選定的價格更新匯總表,並建立一條粗體綠線,以指示這是選定的值。
就這些了。希望這沒有讓我覺得太複雜。我覺得大部分內容其實就是和存取控制交互,添加引用行,而真正實現交互元素功能的部分其實很簡單。
這份腳本、範例資料以及更大型的PPH工具腳本都將與我的簡報一起上傳。如果您想嘗試使用它們或深入了解其工作原理,這些資源應該都可以存取。
最後,我想分享我在創作和使用PPH工具的過程中的一些心得體會。首先,在JMP平台中加入互動式元素確實能大幅擴展分析功能。
諸如此類的功能,例如選擇一個值並將其填入其他地方,或在 PPH 工具中進行預測因子篩選,然後能夠從中選擇值,然後使用變異圖進一步擴展。
其次是記錄導出結果的功能,這確實有助於簡化溝通流程。我們從原始資料開始,最終由某人進行分析,然後他們可以將分析結果匯出為表格,發送給模型維護人員。
您可以新增註釋,並將其發送給製程或設備工程師,以便他們檢查工具上的各種事項。其次,在腳本編寫方面,使用有序列表作為索引鍵,結合關聯數組來存儲、查找數據並在不同的顯示元素之間傳遞數據,對於處理大型數據集至關重要。
然後,透過循環遍歷使用變數顯示的互動式控制項元素。只需循環遍歷使用變數建立元素時獲得的顯示元素列表,就可以完成很多操作。
最後,我想強調的最重要的一點是,腳本編寫並沒有看起來那麼難。 PPH 工具的腳本很大,乍看之下可能令人望而生畏,但實際上,隨著時間的推移,建立類似的東西並沒有那麼困難。
我編寫腳本時,總是使用腳本索引。我總是打開 JMP 幫助文檔,並且始終打開日誌,以便在 JMP 中執行操作時查看發生了什麼。
我真心想鼓勵那些還沒試過或可能對它感到畏懼的人,請務必嘗試一下,因為它確實能極大地拓展JMP的功能。以上就是我的全部內容。謝謝您的時間。