周 盛,鄭 瑋
(航空工業(yè)西安飛機工業(yè)(集團)有限責任公司,陜西 西安 710089)
大型飛機因其在產(chǎn)品設(shè)計與制造方面的高度復(fù)雜性,不僅是航空工業(yè)水平的體現(xiàn),而且是反映一個國家綜合國力的重要標志[1]。因此,不斷提高大型飛機制造的技術(shù)水平、提升大型飛機生產(chǎn)制造的管理水平成為了重要課題。生產(chǎn)計劃是飛機生產(chǎn)制造中的核心環(huán)節(jié),直接用來指導車間對零組件進行投產(chǎn)以及交付的時間節(jié)點。對于保障飛機裝配進度,在整個生產(chǎn)管理周期中起著重要的作用。尤其是在脈動線成為飛機裝配模式的主流趨勢條件下[2],如何確保生產(chǎn)計劃的實時性和可靠性,成為保障生產(chǎn)、提升生產(chǎn)效率的核心問題之一[3]。該文通過使用分布式與并行計算技術(shù),依據(jù)一定的規(guī)則將整個運算任務(wù)劃分為若干個子任務(wù)同時展開并行計算,顯著提高了計算效率。
物料需求計劃(Material Requirements Planning,MRP)是飛機生產(chǎn)計劃的核心算法,大型飛機具有BOM結(jié)構(gòu)復(fù)雜、產(chǎn)品構(gòu)型眾多等特點,使得MRP運算的復(fù)雜度遠高于其他工業(yè)產(chǎn)品。同時由于大飛機生產(chǎn)過程中頻繁出現(xiàn)工程更改問題,頻繁的工程更改是造成生產(chǎn)數(shù)據(jù)不完整、不一致、生產(chǎn)計劃脫節(jié)等一系列相關(guān)問題的主要原因。目前MRP運算中存在的算法實時性較低、生產(chǎn)計劃變更執(zhí)行響應(yīng)不及時等問題,已成為飛機生產(chǎn)管控計劃和執(zhí)行的制約因素[4]。
傳統(tǒng)的MRP運算算法是基于單件小批計劃管理模式,圍繞大批量零部件生產(chǎn)計劃展開的。而大飛機生產(chǎn)計劃具有生產(chǎn)周期長,產(chǎn)品裝配過程復(fù)雜和同時包含零件生產(chǎn)、部件裝配、整機裝配等多層次、多階段的面向項目混合生產(chǎn)計劃的特點,因此大飛機的MRP算法與傳統(tǒng)面向大批量制造的MRP算法具有顯著差異。
大飛機的MRP算法基于層次分解的思想,結(jié)合飛機PBOM和MBOM結(jié)構(gòu),將MRP分解為推拉結(jié)合的兩個層次而降低復(fù)雜問題的解決難度,達到有效解決復(fù)雜問題的目的。
在MRP運算理論中,核心是根據(jù)BOM數(shù)據(jù)逐層展開分解,形成生產(chǎn)計劃。在飛機制造過程的典型BOM分為PBOM、MBOM,其中PBOM從飛機零件設(shè)計階段開始形成,到生產(chǎn)全部完成最終確定;而MBOM是從飛機裝配過程中形成,當飛機裝配完成后完全確定。這就與傳統(tǒng)的BOM結(jié)構(gòu)穩(wěn)定后再進行MRP運算的方式有明顯的區(qū)別[5]。
同時飛機生產(chǎn)過程具有并行特性,由于飛機生產(chǎn)具有長周期特性,飛機的零組件生產(chǎn)不能等待所有前置條件全部具備才展開。大量工作需要并行協(xié)同進行,包括工藝準備、材料采購、工裝準備,這是飛機研制生產(chǎn)規(guī)律的必然要求[6]。
因此,在飛機的生產(chǎn)計劃過程中不能直接使用針對大批量生產(chǎn)、結(jié)構(gòu)穩(wěn)定、串行管理模式的傳統(tǒng)MRP算法。需要在沒有單一和穩(wěn)定的BOM作為MRP算法的輸入前提下,將PBOM與MBOM有機結(jié)合,形成零件生產(chǎn)和裝配拉動結(jié)合的MRP算法。在早期投產(chǎn)階段,尚不具備MBOM的情況下,使用PBOM作為MRP運算的輸入,進行需要零件投產(chǎn)的生產(chǎn)計劃運算從而保證零件投產(chǎn)的順利進行。在進入裝配階段時,整機或部件的裝機清單與裝配順序均已確定,裝配所需的AO定版完成,此時,可以根據(jù)MBOM中AO包含的零件配套清單確定飛機最終的零件需求。因此,進行裝配拉動運算得到裝機所需的零件需求,并對前序PBOM運算結(jié)果進行反饋。通過推拉結(jié)合,以PBOM進行零件投產(chǎn),以MBOM中AO的零件配套需求對投產(chǎn)階段的投產(chǎn)計劃進行補充和完善,保證生產(chǎn)計劃運算管理的順利進行。
大飛機的MRP運算還有如下特性:1)更改頻繁。在飛機設(shè)計和生產(chǎn)過程中更改非常頻繁,為了及時響應(yīng)工程更改,保證生產(chǎn)現(xiàn)場與工藝設(shè)計數(shù)據(jù)的同步和一致,需要針對同一主計劃需求每日多次進行MRP運算。2)運算復(fù)雜。由于飛機結(jié)構(gòu)的復(fù)雜性,飛機BOM結(jié)構(gòu)的層次數(shù)量和節(jié)點數(shù)量遠超過一般工業(yè)產(chǎn)品,MRP運算的運算復(fù)雜度很高。
在大飛機MRP運算中存在運算邏輯復(fù)雜、運算次數(shù)頻繁、運算數(shù)據(jù)規(guī)模大、需要進行多輪運算等特點。傳統(tǒng)的單機MRP運算在處理大規(guī)模運算時,受到單一計算節(jié)點處理能力的限制,通常會使計算時間超出預(yù)期,甚至無法產(chǎn)生計算結(jié)果。因此,在大飛機MRP運算中需要引入新的計算理論和計算技術(shù),突破傳統(tǒng)的單機MRP運算限制。
秦明月再問了一些問題,已經(jīng)沒什么價值了,他掏出名片給兩個搬運工,告訴他們要是再想起什么可以給他打電話,搬運工如釋重負地走了。
分布式計算是通過計算機網(wǎng)絡(luò)將同一網(wǎng)絡(luò)區(qū)域中的大量計算機組合,形成一個較大的計算系統(tǒng)。將單一的計算任務(wù)拆分為若干較小的計算任務(wù),并在不同的計算節(jié)點上分別完成這些任務(wù),最終將各個節(jié)點的運算結(jié)果進行匯總聚合。通過分布式計算可以在更有限的時間內(nèi),完成更大規(guī)模計算的任務(wù)[7]。
相對于傳統(tǒng)的單機計算,分布式計算具有以下優(yōu)勢:1)通過分布式計算平臺而非人工的方式進行計算任務(wù)的管理;2)分布式計算可以充分利用企業(yè)網(wǎng)絡(luò)中的大量計算資源在支出與性能之間尋找到一個平衡點;3)分布式計算中,各個計算節(jié)點運算數(shù)據(jù)及計算任務(wù)均是相對獨立的,有利于構(gòu)建高度可用的系統(tǒng)。
對于包括MRP運算在內(nèi)的分布式計算核心需要考慮的是分割后的計算任務(wù)調(diào)度算法設(shè)計,調(diào)度算法的核心目標是將計算任務(wù)根據(jù)一定的策略分配到盡可能最優(yōu)的執(zhí)行節(jié)點。調(diào)度算法的優(yōu)劣,對于分布式計算平臺的執(zhí)行效率起著關(guān)鍵性作用[8]。
常見的任務(wù)調(diào)度算法有集中式任務(wù)調(diào)度算法和分布式任務(wù)調(diào)度算法。集中式任務(wù)調(diào)度算法是指由單一的計算機調(diào)度任務(wù),使用中心化的方式管理資源和調(diào)度任務(wù)。集中式調(diào)度算法的主要問題在于中心化節(jié)點的存在,導致整體的可容錯性與可擴展性較差[9]。為了解決這一問題逐漸演變出分布式任務(wù)調(diào)度模式,在分布式任務(wù)調(diào)度模式中沒有中央計算機統(tǒng)一調(diào)度任務(wù),任務(wù)調(diào)度及控制由每個計算節(jié)點完成,各個計算資源的節(jié)點可以提供任務(wù)調(diào)度方法,通過節(jié)點間的協(xié)調(diào)判斷計算任務(wù)的執(zhí)行隊列[10]。由于系統(tǒng)中取消了中央處理單元,所有的調(diào)度器之間也不進行系統(tǒng)間通信,因此具有以下優(yōu)勢:1)減少調(diào)度延時;2)取消中心化調(diào)度器,使用多個調(diào)度單元并行執(zhí)行,保證計算的并行度;3)使用多隨機的調(diào)度方法,提升計算任務(wù)的健壯性。
綜上所述,采用去中心化調(diào)度的分布式調(diào)度算法在大規(guī)模MRP運算的場景下具有更高的計算并行度和可靠性,因此該系統(tǒng)的核心算法設(shè)計采用了分布式調(diào)度算法。
系統(tǒng)架構(gòu)如圖1所示。數(shù)據(jù)預(yù)處理模塊主要對計算過程中需要頻繁查詢的基礎(chǔ)數(shù)據(jù)進行預(yù)處理和預(yù)加載,以提升數(shù)據(jù)讀取和計算效率;任務(wù)調(diào)度模塊接收需要完成的MRP運算任務(wù),并將計算任務(wù)差分后分發(fā)到合適的計算節(jié)點;計算執(zhí)行模塊對MRP計算任務(wù)進行分布式執(zhí)行運算,執(zhí)行完成后上報任務(wù)執(zhí)行的結(jié)果和狀態(tài);消息隊列模塊提供任務(wù)的分發(fā)和傳遞通道,完成運算結(jié)果數(shù)據(jù)回傳。運算日志模塊提供對任務(wù)調(diào)度執(zhí)行日志的查看和狀態(tài)監(jiān)控功能。
圖1 系統(tǒng)架構(gòu)框圖
在進行MRP運算前,需要對數(shù)據(jù)進行初始化操作,加快數(shù)據(jù)讀取,將物料、工藝路線、BOM實例等數(shù)據(jù)初始化進內(nèi)存緩存Redis中,后續(xù)運算可直接根據(jù)Key獲取對應(yīng)數(shù)據(jù),避免頻繁查詢數(shù)據(jù)庫。由于MRP需要預(yù)處理的數(shù)據(jù)文件規(guī)模龐大,該系統(tǒng)采用MapReduce的思想,將數(shù)據(jù)文件分為幾個小的分區(qū),并通過K-V鍵值對的方法將數(shù)據(jù)散列存儲在分布式內(nèi)存緩存集群中,保證可承載的數(shù)據(jù)量[11]。
任務(wù)調(diào)度模塊是分布式并行MRP系統(tǒng)中的核心模塊,其算法如圖2所示。在MRP計算過程開始前,首先構(gòu)建出當前MRP計算的執(zhí)行計劃樹,計劃樹記錄了并行計算任務(wù)之間的關(guān)聯(lián)關(guān)系。當并行計算任務(wù)由于異常故障丟失,任務(wù)調(diào)度模塊可以根據(jù)計劃樹重新恢復(fù)丟失的計算任務(wù)并再次分發(fā)出去。任務(wù)調(diào)度模塊同時對外部提供了可視化界面,界面實時動態(tài)展示了正在運行中的MRP運算任務(wù)。任務(wù)的分布式與容錯恢復(fù)對用戶是完全透明的,任務(wù)調(diào)度模塊將計算任務(wù)的調(diào)度控制節(jié)點和任務(wù)執(zhí)行計算節(jié)點均納入統(tǒng)一的資源管理。系統(tǒng)引入負載均衡,實時監(jiān)控每個節(jié)點的運行情況,并根據(jù)節(jié)點的運行狀況下發(fā)計算任務(wù)。
圖2 任務(wù)調(diào)度算法
為了使系統(tǒng)有效發(fā)揮分布式計算的優(yōu)勢,將接收到MRP運算任務(wù)的調(diào)度數(shù)據(jù)散列到不同的調(diào)度節(jié)點上。當任意一個調(diào)度節(jié)點在收到MRP運算任務(wù)后,將運算任務(wù)拆解為多個子任務(wù),然后再將子任務(wù)分發(fā)出去,多個計算節(jié)點共同完成計算。在計算過程中若發(fā)現(xiàn)任務(wù)運算量過高,則不斷拆解成子任務(wù),直到節(jié)點計算完成后將計算結(jié)果反饋為發(fā)送計算完成的消息。通過并行調(diào)度算法的方式實現(xiàn)任務(wù)并行調(diào)度分發(fā),降低了調(diào)度節(jié)點單機負載[12]。為了支持迅速完成的任務(wù)調(diào)度規(guī)則計算,每次任務(wù)調(diào)度的數(shù)據(jù)均保存在內(nèi)存中而不是磁盤上,這樣可以減少每次調(diào)度對磁盤I/O的占用,降低等待時間,提高任務(wù)分發(fā)調(diào)度效率[13]。
在計算執(zhí)行模塊中,需要根據(jù)任務(wù)調(diào)度模塊分發(fā)的計算任務(wù)讀取運算數(shù)據(jù)并完成計算,其流程如圖3所示。
圖3 計算執(zhí)行流程圖
MRP運算任務(wù)執(zhí)行節(jié)點根據(jù)MRP運算的運算策略,拉取策略中的物料、架次及對應(yīng)主計劃的信息,生成MRP運算日志。同時發(fā)起MRP運算任務(wù),即將以上信息作為消息體發(fā)送到消息隊列模塊中。
接收MRP運算任務(wù)后,執(zhí)行節(jié)點的MRP運算單元實時監(jiān)聽消息隊列模塊中MRP運算所對應(yīng)的消息隊列,同時接收消息體,開始進行MRP運算。
MRP運算過程中根據(jù)預(yù)處理結(jié)果構(gòu)建出單機BOM樹,自頂向下逐層遍歷,生成WO,然后保存在對應(yīng)的TEMP臨時表中。在從上向下遍歷的過程中開始執(zhí)行分片操作,即將每個子節(jié)點的信息作為消息體發(fā)送到MQ中,形成一個子任務(wù),其余運算單元繼續(xù)監(jiān)聽隊列。當該機型架次的MRP運算完成后,發(fā)送消息到消息隊列模塊中,通知MRP服務(wù)更改運算日志狀態(tài)為成功。
裝配拉動運算過程中,由于裝配計劃開完工日期的計算是在編制裝配拉動計劃部分來完成的。然后在構(gòu)建BOM樹的過程中將時間貫徹到對應(yīng)節(jié)點上,最終由MRP運算的過程進行最終貫徹,即輸出到WO上。
消息隊列模塊負責完成系統(tǒng)中實時通信消息的傳遞,在該系統(tǒng)中有3種類型消息在消息隊列模塊投遞:1)任務(wù)調(diào)度生產(chǎn)的正向MRP計算任務(wù)消息,計算任務(wù)消息為消息隊列模塊主要投遞的消息類型,同時數(shù)據(jù)量級是較大的;2)MRP運算完成消息通知是計算執(zhí)行模塊任務(wù)計算過程中,判斷全部MRP計算任務(wù)均已處理完后發(fā)出的消息通知,調(diào)度模塊收到該類型消息后記錄MRP運算任務(wù)日志;3)計算異常反饋類型消息,計算執(zhí)行模塊任務(wù)計算過程中發(fā)生異常時會及時發(fā)出異常消息反饋,調(diào)度模塊收到異常反饋后會做出相應(yīng)的處理[14]。
運算日志子模塊主要包括日志視圖查看、任務(wù)日志搜索和任務(wù)監(jiān)控告警。日志視圖主要分為計算任務(wù)調(diào)度日志視圖與計算節(jié)點任務(wù)執(zhí)行日志視圖;日志搜索功能根據(jù)關(guān)鍵字等條件搜索任務(wù)日志,并按開始時間顯示任務(wù)歷史調(diào)度日志;任務(wù)監(jiān)控報警模塊對調(diào)度或執(zhí)行失敗后的技術(shù)任務(wù)進行監(jiān)控,并發(fā)出相應(yīng)的報警,通知運維管理人員介入重試和恢復(fù)操作[15]。
為了驗證基于大規(guī)模分布式并行MRP計算的綜合性能和穩(wěn)定性,該文與傳統(tǒng)的單機計算展開了對比實驗,驗證分布式并行算法的穩(wěn)定性[16]。
為完成上述測試,需要基于參數(shù)相同的軟硬件和計算任務(wù)規(guī)模,設(shè)計測試參數(shù)如表1所示。
表1 測試參數(shù)
運算效率是該系統(tǒng)的核心優(yōu)化指標,通過對單位時間內(nèi)完成計算任務(wù)的數(shù)量進行測試可以表征系統(tǒng)的運算效率。
如圖4所示,隨著運算時間的增加,傳統(tǒng)單機運算與文中分布式并行計算的MRP運算完成次數(shù)有所增加;但該系統(tǒng)實現(xiàn)的分布式并行MRP算法效率始終高于傳統(tǒng)平臺。當持續(xù)運算10 min時,傳統(tǒng)單機運算完成兩次MRP運算,文中的分布式計算完成9次MRP運算;當持續(xù)運算30 min時,傳統(tǒng)單機運算完成6次MRP運算,文中的分布式計算完成23次MRP運算;當持續(xù)運算60 min時,傳統(tǒng)單機運算完成12次MRP運算,文中的分布式計算完成46次MRP運算。分布式并行計算方式效率相比傳統(tǒng)單機運算效率提高了300%,達到了系統(tǒng)構(gòu)建目標。
圖4 運算效率對比
除了運算效率外,任務(wù)吞吐量與平穩(wěn)性也是衡量分布式計算系統(tǒng)的重要指標,實驗持續(xù)運行該系統(tǒng)中分布式并行MRP運算60 min,結(jié)果如圖5所示。任務(wù)吞吐量最低為59 900個/min,最高為60 300個/min,平均60 136個/min。驗證了分布式并行計算具有較高的吞吐量,達到了設(shè)計要求。吞吐量波動范圍小于0.4%,且在長時間運算后系統(tǒng)仍可以保證充足的吞吐量。
圖5 系統(tǒng)吞吐量運行圖
該系統(tǒng)設(shè)計的分布式并行MRP運算系統(tǒng),經(jīng)過實驗驗證,運算效率提升約300%,可以有效節(jié)約MRP運算所需時間,極大提高MRP運算的計算效率,提升MRP運算的實時性。為大飛機的生產(chǎn)計劃提供了一種自主、可控、高效能MRP運算方案,為進一步推進分布式計算在飛機制造領(lǐng)域的應(yīng)用提供了理論基礎(chǔ)。