專利名稱:離散型企業智能作業控制方法
技術領域:
本發明屬于智能作業控制技術,特別是一種離散型企業智能作業控制方法。
背景技術:
現代企業必須提升生產控制水平,才能提高生產率,確保履約率。提升企業的生產效率有四種方式引進先進的生產設備、改進加工方法、提高作業人員的生產水平和提升生產控制水平。我國很多企業引入ERP系統,還有一些企業自行研發企業生產管理系統。它們都是采用自上而下的管理方式。在制定生產計劃,組織生產以及產成品、半成品入庫方面,實現了管理流程信息化。
在離散型企業內部,面對多種具有不固定級級數的從屬關系的產品和具有一定先后順序的裝配部件,多采用把產品作為一種項目,把產品里的部件,子部件,最終器件、零件、部件同級化處理,人工拆分為項目的子項目平等對待的方法。人工拆分需要化大量時間,拆分的結果專門針對特定的模型,不具備通用性。單品種大批大量生產方式經常采用流水線方式來達到均衡的生產目的。其特點是事先設計好生產節拍和生產線。對多品種小批量的生產方式,采用傳統的流水線生產方式,生產能力不能有效控制,生產節拍經常變化,生產線頻繁搬遷需要化大量的人力物力。目前許多企業生產現場大多處于非完全控制狀態。生產現場的盲目性,隨意性非常大,生產控制手段匱乏,目視管理缺失,信息不能很好地公開,與生產準時化要求相距甚遠,質量過程控制不能很好地保證,生產潛在的問題不能及時發現,工作效率不能有效地提聞。我國的一些企業對生產管理多采用現場安排、手工記,錄方式。重復勞動多,生產數據沒有積累。生產計劃滯后,生產安排隨意性大,生產進度不確定性因素多,信息斷層。發達國家和世界級企業,特別注重基于時間研究基礎上的科學管理,注意到作業時間的研究。對多品種小批量的生產方式,隨著產品技術含量不斷增加,作業改進永無止境,通常采用的理想化的測量數據需要大量的人力和物力的投入。作業過程中偶然因素時有發生,測量結果會相差很大。對以盈利和履約為目的的離散型企業,專門的時間測量在生產控制中更具有示范性,可操作性不強。
發明內容
本發明的目的提供一種離散型企業智能作業控制方法,能夠提升企業快速響應能力,提高產品質量和生產率,確保履約率。實現本發明目的的技術方案為一種離散型企業智能作業控制方法,其特征在于對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組構建產品結構樹;按相似性分成鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個生產單元,每個單元又安排可控制數量的工位,半天按210分鐘,計算生產能力初定各工序單元工位數;在考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素,控制具有從屬關系產品的每一個部件在每一個工位上裝配的最佳時間點,自動尋找部件裝配的最佳路徑;該最佳路徑以甘特圖方式實時顯示控制現場作業;作業開工勾選調用作業指導書進行作業和作業進程返饋,從而實現離散型企業智能的作業控制。本發明與現有技術相比,其顯著優點為(I)構建產品結構樹。產品的從屬關系級數不固定,子部件零部件的數量也不固定。針對產品不固定級數從屬關系的內在規律作專門研究,找出具備這類不固定級數從屬關系特性的產品的通用規律,采用不固定嵌套循環層數和數組的方法進行多種具有不固定子部件級數的產品結構樹顯示,以便快速讀懂產品結構和產品框架,實現產品同步化。(2)計算生產能力,并調配正常上班時間各工序單元工位數和加班時間各工序單元工位數。針對多品種小批量生產方式節奏快,批量小,路線存在區別的特點,將裝配工藝根據相似性進行分類,分為鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個工序單元,計 算各工序單元的生產能力,調配正常上班時間各工序單元工位數和加班時間各工序單元工位數。作業指導書根據八種裝配工序單元分為鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八類,通過改變多能工密碼類型的方式同步自動控制該多能工顯饋終端的作業指導書的類型。用技術手段保證了削峰填谷,消除生產瓶頸,達到均衡生產的目的,實現生產均衡化。(3)在考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種實戰因素情況下,自動尋找具有不固定級數從屬關系的產品的部件裝配最佳路徑。生產中最大的浪費是等待的浪費。通過自動尋找部件裝配的最佳路徑,能最大程度消除過量生產、等待時間、運輸、庫存、過程、動作、產品缺陷等浪費,縮短產品制造周期,提高生產效率,適應現代企業多品種小批量的生產需求,提升離散型企業的快速響應能力,提高全員生產率,實現響應快速化。(4)以甘特圖方式實時顯示最佳路徑。以甘特圖方式顯示最佳路徑是有技術支撐的一種目視管理方式,是看板和網絡的完美接合。它以視覺信號顯示為手段,以信息公開為原則,是實現生產自動化、準時化的有力保證,能切實提高質量過程控制,發揮激勵和協調作用,產生良好的心理和生理效應,直觀地顯示生產潛在的問題。還能充分發揮網絡信息傳輸快速、及時和協同作戰的優勢。有利于工作效率的提高,實現信息目視化。(5)作業開工勾選調用作業指導書進行作業和作業進程返饋。在作業開工勾選后,作業人員顯饋終端出現作業指導書。作業進程返饋確認作業完成。用作業指導代替紙質裝配工藝和隨意操作;用科學的數據積累代替理想化的時間測量和隨意估算。將作業的時間數據實時積累,同時與自動尋找到的部件裝配的最佳路徑相關連,可以將生產率的提高落到實處,實現數據實戰化。下面結合附圖對本發明作進一步詳細描述。
圖I是本發明離散型企業智能作業控制方法的結構圖。圖中實線表示正向產生,虛線表示反向產生;實框線表示采集的信息或生成的最終信息,虛框線表示生成的中間信肩、O圖2是實現離散型企業智能作業控制方法的硬件配置圖。本發明的方法采用C/S結構,通過組建局域網運行;數據存放在服務器端,客戶端根據作用分為采集終端、控制終端、顯饋終端。采集終端的作用是采集實現本發明方法所需的數據,控制終端的作用是調整和控制本發明方法的數據,顯饋終端的作用是顯示最佳路徑和反饋作業進程。采集終端、控制終端、顯饋終端均通過網線和服務器進行數 據交換,并將數據存放在服務器中。
具體實施例方式結合圖I和圖2,本發明離散型企業智能作業控制方法,首先對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組構建產品結構樹;并按相似性分成鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個生產單元,每個單元又安排可控制數量的工位,半天按210分鐘,計算生產能力初定各工序單元工位數;在考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素,控制具有從屬關系產品的每一個部件在每一個工位上裝配的最佳時間點,自動尋找部件裝配的最佳路徑;該最佳路徑以甘特圖方式實時顯示控制現場作業;作業開工勾選調用作業指導書進行作業和作業進程返饋,從而實現離散型企業智能的作業控制。具體內容如下。一、構建產品結構樹⑴注釋I)本發明中,如果產品的A部件從屬于B部件,稱B部件和A部件之間就存在一級從屬關系,A部件為B部件的一級子部件,B部件為A部件的父部件;如果A部件屬于B部件的一級子部件,那么B部件和A部件之間就存在二級從屬關系,A部件為B部件的二級子部件;本發明研究的產品對象的從屬關系的級數是不相同,不固定的,本發明中將這類具有不相同或不固定的從屬子部件的產品稱為具有不固定子部件級數的產品;2)本發明中,如果A循環放在B循環里,稱B循環和A循環組成二層循環,A循環為內層循環,B循環稱為外層循環;如果A循環放在B循環里,B循環又放在C循環,稱C循環、B循環、A循環組成三層循環;對于不固定子部件級數的產品,設置與之對應的循環的層數具有不固定性和不確定性,稱為不固定嵌套循環層數;3)本發明中所說的產品結構樹,指用如同計算機資源管理器的文件目錄一樣,以樹形視圖的方式來表達部件具有從屬關系的產品明細表,其中產品的每個零部件、器件在樹形視圖中顯示時稱為列表項,樹形視圖中表達每個零部件、器件的名稱的文字稱為列表項的顯示文本;4)樹形視圖只能通過編輯才能增加和刪除數據項,一層、二層或三層等固定層樹形視圖的構建方法已經成熟,本發明研究的是對不固定子部件級數的產品構建不固定層的樹形視圖的方法;5)本發明中與具有從屬關系的產品的父部件、子部件相對應的樹形視圖表達父節點和子節點的顯示文本稱為父項和子項;6)產品明細表含產品代號、部件代號、部件名稱、單臺數、關重性、所屬產品、所屬部件、配套工序和備注九個字段;(2 )產品明細表數據導入產品明細表反映了產品從屬關系,借助TrueTable軟件,將DWG格式文件生成文本文件,將文本文件導入軟件的產品明細表;(3)利用導入的產品明細表通過對不固定子部件級數的產品采用不固定嵌套循環層數和數組的方法構建產品結構樹tv_pst,步驟如下I)將產品明細表按產品代號cpdh、部件代號ljdh、所屬產品zee、所屬部件zeb字段升序排序;2)測試產品明細表的記錄數,記作變量li_row ;3)判斷產品明細表有沒有記錄,如果li_row=0,表示產品明細表沒有記錄,退出本步驟,如果li_row>0,表示產品明細表有記錄;讀取第一條記錄的產品代號cpdh,部件代號ljdh,所屬產品zee,所屬部件zeb,樹形視圖列表項子項顯示文本賦值; 4)設置變量內層循環層數 int i,數組 string zee[20], zeb[20], li_row[20];5)將產品明細表按zee,zeb字段過濾,得到所有子部件;6)賦值i=l,測試所有子部件的記錄數,記作li_row[i];7)判斷子部件有沒有記錄,如果li_row[i]=0,表示沒有子部件,那么添加樹形視圖列表項,此列表項前沒有子項不加“ + ”號;恢復父項過濾條件,光標指向其下一條記錄,讀取下一條記錄部件的產品代號cpdh,部件代號ljdh,所屬產品zee,所屬部件zeb,樹形視圖列表項顯示文本賦值;重復步驟5)、6)、7);如果li_row[i]>0,表示第一條記錄部件有子部件,那么添加樹形視圖列表項;此列表項前有子項加“ + ”號;讀取子部件的第一條記錄的產品代號cpdh,部件代號ljdh,所屬產品ZCC [i],所屬部件zeb [i],樹形視圖列表項子項顯示文本賦值;8)將產品明細表按zcc[i],zcb[i]字段過濾,得到所有子部件;9)測試所有子部件的記錄數,記作li_row[i+l];10)判斷所有子部件有沒有記錄,如果li_row[i+l]=0,表示其沒有子部件,那么添加樹形視圖列表項;此列表項前沒有子項不加“ + ”號;恢復父項過濾條件,光標指向其下一條記錄,讀取下一條記錄的產品代號cpdh,部件代號ljdh,所屬產品zee [i],所屬部件zeb [i];樹形視圖列表項顯示文本賦值,重復步驟8)、9)、10);如果li_row[i+l]>0,表示有子部件,那么添加樹形視圖列表項;此列表項前有子項加“ + ”號;賦值i=i+l ;讀取其子部件的第一條記錄的產品代號cpdh,部件代號ljdh,所屬產品ZCC [i],所屬部件zeb [i],樹形視圖列表項子項顯示文本賦值;11)重復步驟 8)、9)、10);12)當光標指向i級子部件的結尾時,回到父項,設置i=i _ I ;判斷光標回到是父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項從第I條到第li_row[i]條記錄之間的一條記錄時,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i - I ;13)直到i=l,用這種方法就構建了產品目錄構。二、計算生產能力初定各工序單元工位數計算生產能力初定各工序單元工位數對不固定子部件級數的產品采用不固定嵌套循環層數和數組的方法尋找到產品所有的裝配部件,根據產品所有的裝配部件的作業時長計算產品的生產能力;確定各工序單元工位數量。(I)注釋I)本發明中裝配的部件有兩層含義一種是指將部件的一級子部件、零件、器件通過特定的工序裝成父部件,本發明中稱為裝配部件;裝成裝配部件的每一道工序所需的時間都可以通過時間測量和經驗積累確定,通過數據采集方式得到;裝配部件裝成的每一道工序所需的時間可以通過作業勾選得到的數據進行更新;另一種是指部件的全部子部件的所有級子部件逐級裝配的全部過程,本發明中稱為總裝配部件;2)生產能力計算表包含序號、產品代號、鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外、產品工時i^一個字段;3)工序單元工位表包含工序名稱和工位數兩個字段;4)生產計劃表包含產品代號、部件代號、部件名稱、批次號、數量、配套日期、完成 日期、完成情況、優先級和備注字段;生產計劃表可以由文本文件導入;5)裝配流程表包含產品代號、部件代號、部件名稱、工序號、工序名稱、作業時長、非作業時長和備注字段;作業時間(記作tj)是對工件和作業人員都累計的時間,非作業時長(記作te)是只對工件累計,對作業人員不累計的時間;裝配流程表可以由文本文件導A ;6)離散型企業所有產品的裝配工序按相似性進行分類,定義每工序單元的工序名稱,根據產品裝配工藝特點,將裝配工序分為鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個工序單元;(2)對具有從屬關系的產品,根據導入的生產計劃表、裝配流程表計算生產能力的步驟如下I)選擇需要計算生產能力的截止時間,過濾這段時間內生產計劃表的產品計劃,測試過濾后生產計劃表有沒有記錄,如果沒有記錄,計算結束;如果有記錄,記錄數記作Ii_row,進行生產能力計算,生成生產能力計算表;2)生產計劃表按產品代號、部件代號、批次號字段升序排序;3)依次讀入已過濾的生產計劃表的不同的產品代號,作為生產能力計算表的各記錄項,記錄讀完后,增加計劃工時、達額工時、能力工時、工位數四個記錄匯總項;4)設置表示循環層數變量 int i,數組 string zee[20], zeb[20], long lii_row[20];讀取生產計劃表第一條記錄的產品代號、部件代號、計劃數量ljsll ;5)查找對應于裝配流程表各工序單元的作業時長,如果讀不到數據或讀的數據為空,那么作業時長值為0,將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據與生產能力計算表對應生產計劃表中產品代號的原數據相加,將結果設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;如果生產能力計算表中對應生產計劃表中產品代號的原數據為空,則將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;6)將產品明細表按產品代號、部件代號字段過濾,得到所有子部件;7)賦值i=l,測試子部件的記錄數,記作lii_row[i];8)判斷有沒有子部件,如果lii_row[i]=0,表示沒有子部件,那么生產計劃表中的光標指向下一條記錄,讀取下一條記錄的產品代號、部件代號、計劃數量ljsll,重復步驟5)、6)、7)、8);如果lii_row[i]>0,表示有子部件,讀取其子部件的第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zee [i]、所屬部件zcb[i]、所屬數量(Ijsl), ljsll=ljsll*ljsl ;9)以產品代號、部件代號為條件查找裝配流程表對應部件各工序單元的作業時長,如果讀不到數據或讀的數據為空,那么作業時長值為0,將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據與生產能力計算表中對應生產計劃表中產品代號的原數據相加,將結果設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;如果生產能力計算表中對應生產計劃表中產品代號的原數據為空,則將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;10)將產品明細表按zcc[i],zcb[i]字段過濾,得到所有子部件; 11)測試子部件的記錄數,記作lii_row[i+l];12)判斷有沒有子部件,如果lii_row[i+l]=0,表示沒有子部件,那么恢復父項過濾條件;光標指向下一條記錄,讀取下一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量(Ijsl) , ljsll=ljsll*ljsl ;重復步驟 9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;賦值i=i+l ;讀取子部件的第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zeb [i]、所屬數量(Ijsl),ljsll=ljsll*ljsl ;13)重復步驟 9)、10)、11)、12);14)當光標指向i級子部件級的結尾時,回到父項,設置i=i _ I ;判斷光標是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i -1,直到i=l ;15)將生產能力計算表中計算得到的各條產品記錄中的各個工序單元橫向匯總求和,設置給該記錄的產品工時字段;16)將生產能力計算表中計算得到的各條產品記錄中的各個工序單元及產品工時進行縱向匯總求和,得到的數據設置給計劃工時記錄相對應的各字段;17)將生產能力計算表中計劃工時各工序單元的數值除以作業天數,再除以每天作業的分鐘數,就到得生產能力計算表中各工序單元數安排的近似值;18)將生產能力計算表中各工序單元的計劃工時和產品工時與達額率相乘,得到的數據設置給達額工時記錄相對應的各字段;19)將工作時長與各工序單元工位數相乘得到能力工時,得到的數據設置給達額工時記錄相對應的各字段;(3)根據生產能力計算表中工位數量安排的近似值填寫工序單元工位表中工位數字段。三、自動尋找具有不固定級數從屬關系的產品的部件裝配最佳路徑
考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素的表,尋找控制具有從屬關系產品的每一個部件在每一個工位上裝配的最佳時間點,自動尋找具有不固定級數從屬關系的產品的部件裝配最佳路徑。(I)注釋I)本發明中在表示最佳路徑的部件進度表前,為了減少生成過程中的難度,先生成工序時間表;2)缺件補齊時間表包含序號、產品代號、部件代號、部件名稱、批次號、數量、補齊日期和備注八個字段;缺件補齊時間表由文本文件導入;3)加班表包含工序名稱、加班種類、工位數、加班日期和備注五個字段;加班表由文本文件導入;4)工序時間表包含次序號、順序號、工序名稱、起始時間、有效性六個字段;5)部件進度表包含批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、次序號、順序號、列號、序號、優先級、開始時間、結束時間、作業時長、非作業時長、有效性、轉向工序號、轉向工序名、轉向順序號字段;(2)由加班表和工序單元工位表運用顯示區間天數的確定,周末的判斷,循環中日期和時間的表達等方法生成工序時間表的步驟如下I)清除工序時間表原來的數據;2)用戶輸入截止日期em_2,今天的第二天與截止日期之間的日期稱為顯示區間,記作變量XX ;3)如果截止日期的年份等于今天today O的年份,顯示區間的天數xx為截止日期的號數,減去今天today O的號數,加上從今天today O的月份到截止日期月份的前一個月期間每個月最后一天的號數的累加和;4)如果截止日期的年份等于今天today O的年份加I,顯示區間的天數xx為截止日期的號數,減去今天todayO的號數,加上從今天today O的月份到今天todayO當年十二月期間每個月最后一天的號數,加上截止日期當年一月到截止日期月份前一個月期間每個月最后一天的號數的累加和;5)如果截止日期的年份大于今天today O的年份加I,顯示區間的天數xx為截止日期的號數,減去今天todayO的號數,加上從今天today O的月份到今天todayO當年十二月期間每個月最后一天的號數,加上截止日期當年一月到截止日期月份前一個月期間每個月最后一天的號數,加上從今天today O的次年一月到截止日期前一年十二月期間每個月最后一天的號數的累加和;6)取每個月最后一天的方法為月份設為變量li_month,如果li_month=12,那么最后一天的號數為31 ;如果li_month〈12,那么下個月月份為本月加I,即li_month+l,每個月的最后一天就是下個月I號的前一天;7)以顯示區間的天數為第一層循環的次數,以工序單元工位表的工序名稱字段為第二層循環的次數,以工序單元工位表的工位數字段為第三層循環次數進入循環,依次讀數、賦值、設置直至完成三層循環,工序時間表完成設置;8)在步驟7)的循環中,依次讀數、賦值、設置直至完成三層循環的方法如下·
讀取工序單元工位表中每條記錄的工序名稱,設置給工序時間表的工序名稱字段;讀取工序單元工位表中每條記錄的工位數,設置給工序時間表的順序號字段;工序時間表的次序號用兩位數n-m表示,η表示今天today O后第幾天數,η從I到xx ;m表示時間段,用I、2、3表示;I表示上午班8:00-11:30,1表示下午班12 30-16:00,3表示晚班17:00-20:30 ;每班次上班時間分別為上午班時間08:00 ;下午班時間12:30 ;晚班時間17:00 ;工序時間表的起始時間為日期時間型數據,含日期和時間;取今天todayO后的第η天日期,判斷第η天是不是星期天或星期六;如果是,那 么工序單元工位表中的工位數不參與循環;工序時間表的有效性均設為O ;讀取加班表中的記錄;將工序時間表按順序號字段降序排列;查找工序時間表中對應同時段并且同工序名稱的記錄的順序號;如果查找到,則插入新的相應記錄,記錄的順序號從查找到的順序號以后排;如果查找不到,則插入新的相應記錄,記錄的順序號從I開始排,直到循環結束;9)工序時間表生成后,按工序名稱、起始時間、次序號字段升序,順序號字段降序排序;(3)保留部件進度表表示已開工的、異常的、完工的記錄,清除其他記錄,并綁定部件進度表的保留記錄與工序時間表對應的順序號。保留部件進度表有效性字段為表示已開工的值3、表示異常的值4、表示完工的值5的記錄,清除其他記錄。部件進度表有效性為3、4或5且開始時間不小于今天today O的第二天的記錄優先作綁定處理,綁定工序時間表對應的順序號,步驟如下I)有效性O表示項目確定;有效性I表示開始時間確定;有效性2表示結束時間確定;有效性3表示已作開工“作業勾選” ;4表示已填報作業異常;有效性5表示已作完成“作業勾選”;2)保留有效性為3,或有效性為4或有效性為5的記錄,清除部件進度表的其它數據;3)整理保留的有效性為3、或4、或5的記錄,將部件進度表中按批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號字段升序排序,設置批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號相同的記錄序號從I開始重新設置;將部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號相同,列號不相同的記錄列號從I開始重新設置;(4)對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組的方法,根據產品從屬關系、產品裝配流程、生產計劃、正常上班時間各單元工位數和加班時間各單元工位數五種因素,生成部件進度表所有記錄項,生成所有記錄項時賦值批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、序號、優先級、作業時長、非作業時長、有效性字段的內容如下I)生產計劃表按批次號、產品代號、部件代號、開始時間字段升序排序;
2)生產計劃表按完成情況不等于‘完成’條件進行過濾;3)測試生產計劃表記錄數,記作li_row,如果li_row=0,退出本步驟;如果li_row>0,表示生產計劃表有記錄;4)讀取生產計劃表第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、批次號cpph、數量ljsll、優先級yxji字段的數值;5)以產品代號為cpdh、部件代號為Ijdh過濾條件對裝配流程表過濾,測試部件對應于裝配流程表的記錄數,記作g_rownumber ;如果g_rownumber=0,表示裝配流程表沒有記錄,轉到下一節的內容;如果g_rownumber>0,表示裝配流程表有記錄,以g_rownumber為二層循環次數,以Ijsll為三層循環次數;讀取裝配流程表第一條記錄的工序號gxh和工序名稱gxmc,在部件進度表中查找有沒有批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號都相同的記錄,如果有,記作xx ;那么插入Ijsll條記錄,記錄的列號從xx到(xx+ljsll),記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品zccp、所屬 部件zcbj、產品代號cpdh、部件代號Ijdh、部件名稱Ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;如果沒有,插入Ijsll條記錄,記錄的列號從I到ljsll、記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品zccp、所屬部件zcbj、產品代號cpdh、部件代號Ijdh、部件名稱Ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;然后光標指向裝配流程表下一條記錄……直到二層循環結束,這樣就將對應的所有工序的信息設置給部件進度表中的批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、序號、優先級、有效性相應字段;6)將產品明細表按產品代號cpdh,部件代號Ijdh字段過濾,得到產品明細表中的所有子部件;7)設置變量循環層數 i,數組 string zee[20], zeb[20] , long lii_row[20],賦值 i=l ;8)測試其記錄數,記作lii_row[i],判斷有沒有子部件如果lii_row[i]=0,表示沒有子部件,那么生產計劃表中的光標指向下一條記錄,讀取下一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、批次號cpph、數量ljsll、優先級yxji、完成日期wcrq ;重復步驟 5)、6)、7)、8);如果lii_row[i]>0,表示有子部件,讀取子部件的第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zee [i]、所屬部件zcb[i]、所屬數量Ijsl,賦值Ijsll=Ijsl木Ijsll ;9)以產品代號cpdh、部件代號Ijdh為過濾條件對裝配流程表過濾,測試裝配流程表記錄數,記作g_rownumber ;如果g_rownumber=0,表示裝配流程表沒有記錄,轉到下一節;如果g_rownumber>0,表示裝配流程表有記錄,表示裝配流程表有記錄,以g_rownumber為二層循環次數,以Ijsll為三層循環次數;讀取裝配流程表第一條記錄的工序號gxh和工序名稱gxmc,在部件進度表中查找有沒有批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號相同的記錄;如果有,記作xx,插入Ijsll條記錄,記錄的列號從xx到xx+ljsll,記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品、所屬部件、產品代號cpdh、部件代號ljdh、部件名稱ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;如果沒有,插入Ijsll條記錄,記錄的列號從I到ljsll,記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品、所屬部件、產品代號CPdh、部件代號ljdh、部件名稱ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;然后光標指向裝配流程表下一條記錄……直到二層循環結束;這樣就將對應的所有工序的信息設置給部件進度表中的批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、優先級、有效性相應字段;10)將產品明細表按ZCC[i],ZCb[i]字段過濾,得到所有子部件;11)測試子部件的記錄數,記作lii_row[i+l];12)判斷有沒有子部件,如果lii_row[i+l]=0,表示沒有子部件,那么恢復父項過濾條件;光標指向下一條記錄;讀取下一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量Ijsl,賦值Ijsll=Ijsl*ljsll ;重復步驟9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;賦值i=i+l ;讀取子部件每一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc,所屬產品zee [i],所屬部件zcb [i], 所屬數量 ljsl,賦值 ljsll=ljsl*ljsll ;13)重復步驟 9)、10)、11)、12);14)當光標指向i級的結尾時,回到父項,設置i=i - I ;判斷光標是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i - 1,直至i=l ;15)部件進度表按批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、列號字段升序排序,刪除批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、列號都相同的記錄中有效性為O的記錄;(5)運用一個子部件對應多個父部件,一個父部件對應多個子部件的多對多關系的對應方法,確定部件進度表保留記錄的轉向單元的工序號、轉向工序名、轉向順序的步驟如下優先確定有效性為3、4或5的記錄的下道工序,由部件進度表有效性為3、4或5的記錄的非作業時長zysc與結束時間wcrq,用連續時間相加的方法確定部件進度表下道工序或父部件第一道裝配工序的開始時間的方法如下I)測試部件進度表有效性為3、4或5的記錄數,如果記錄數為0,退出本步驟;如果記錄數不為0,作以下處理;2)將部件進度表中按批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號、序號字段升序排序,讀取部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號字段;如果讀取的部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號與上一條記錄相同,則跳過;如果讀取的部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號不相同,則將上一條記錄作如下處理;3)賦值wcrq的分鐘記為mw ;小時數記為hw,非作業時長記為zysc ;4)設置記錄的本班次上班時間,如果m=l,那么hsl=8, msl=0 ;如果m=2,那么hsl=12, msl=30 ;如果 m=3,那么 hsl=17, msl=0,設置 nl=n ;5)如果設置部件進度表下道工序或父部件第一道裝配工序的開始時間為ksrq,ksrq與當班次上班時間的時長為tysc,那么tysc= (hw_hsl)*60+(mw_msl)+zysc ;
6)如果tysc〈=210且(mw + zysc)〈60,那么ksrq的分鐘數為mw+zysc,小時數為hw ;7)如果 tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小時數為 hw +int ((mw + zysc)/60),分鐘數為 mw=mod ((mw + zysc) , 60);8)m=m+l,讀取記錄的下班次數據;如果m=4,那么m=l, n=n+l ;讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的記錄;如果讀到記錄,設工序時間表的起始時間為的小時數和分鐘數分別為hs2和ms2 ;記錄下班次的上班時間的小時數和分鐘數分別為hs 和 ms ;如果 m=l,賦值 hs=8, ms=0 ;如果 m=2,賦值 hs=12, ms=30 ;如果 m=3,賦值 hs=17,ms=0 ;如果讀不到工序時間表的記錄,那么回到本步驟8)開始處循環,直到讀到記錄,XX=(n_nl) *1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n_nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ;9)如果tysc>210且tysc〈=xx,那么ksrq的小時數為hs2,分鐘數為ms2 ;如果tysc>xx 且 tysc〈=yy,那么非作業時長 zysc=zysc_((n_nl)*1440+ (hs2_hw)*60+(ms2_mw)) ;ksrq 的小時數為 hs2 +int ((ms2 + zysc ) /60),分鐘數為 mod((ms2 +zysc),60);如果tysc>yy,那么設置 hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步驟 9)開始處循環,直到tysc>xx不成立;10)判斷部件進度表記錄工序有沒有下道工序,如果部件進度表本條記錄的工序有下道工序,設置它的開始時間為ksrq,同時設置本條記錄的下道工序的有效性字段為1,同時讀取本條記錄的下道工序的工序號、工序名稱,寫入本條記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向;11)如果部件進度表本條記錄的工序沒有下道工序,則到產品明細表中查找產品代號、部件代號、所屬產品、所屬部件均對應的記錄的單臺數記為I jsl,說明子部件與父部件的關系為Ijsl條子部件對應I條父部件;讀取工序號為1,序號為O的同批次號的父部件的所有子部件,其記錄數記作XXI,再讀取工序號為1,序號為O的同批次號的父部件,其記錄數記作XX2,兩者相除的結果記作XX3,表明父部件被查找xx3次其有效性就可以改為1,這樣就建立了對于多個父部件對應多個子部件的多對多關系的對應的唯一性;12)如果該部件的工序號為I的父部件的記錄的開始時間不為空,那么記作ksrql,取ksrq與ksrql的最大值為ksrq,那么該部件的父部件的工序號為I的記錄的開始時間設置為ksrq ;同時讀取其父部件的工序號和工序名稱,寫入該子部件記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向;13)如果父部件的子部件對應了 xx3次父部件,則將該父部件的有效性改為I ;14)循環處理每條記錄,循環結束后按同樣的方法處理最后一條記錄;15)將部件進度表不設置條件過濾,如果轉向工序號為1,說明轉向父部件,轉向工序號不為1,說明轉向下道工序;依此方法依次查找每條記錄轉向工序號、轉向工序名對應的順序號,填入記錄的轉向順序號字段。(6)根據產品配套時間、缺件補齊時間、實際完成時間、作業異常推遲時間、優先級五種因素,運用條件符合時參與排序、把表示工件的部件進度表的開始時間與表示工位的工序時間表的起始時間作比較取最有利時間的方法、間斷時間相加的方法、連續時間相加的方法、多對多關系的對應方法四種方法,生成部件進度表開始時間、結束時間、順序號、轉向工序號、轉向工序名、轉向順序的步驟如下I)部件進度表按工序號為I且有效性為O條件過濾,確定部件進度表對應記錄的有效性為I且初定部件進度表有效性為I的記錄的開始時間,方法如下測試部件進度表記錄數,記作g_rownumber,如果g_rownumber=0,表示部件進度表沒有可操作的記錄,程序結束;如果g_rownumber>0,表示部件進度表有可操作的記錄,讀取部件進度表第一條記錄的產品代號記作變量cpdh、部件代號記作Ijdh ;查找部件進度表中所屬產品等于cpdh,所屬部件等于ljdh,有效性為O的記錄,如果查到,說明有子部件,跳出本節內容;如果查不到,表示沒有子部件,將部件進度表有效性設置為1,設置部件進度表中該記錄的開始時間的日期為今天today O后I天,時間為8點;依次讀取部件進度表的下一條記錄的產品代號記作變量cpdh、部件代號記作
ljdh,重復上述內容;......經過g_rownumber次循環,取值、過濾、判斷,就確定了部件進度
表中每條記錄的有效性是否為I,并初步確定有效性字段為I的記錄的開始時間;2)初定缺件補齊時間表對應部件進度表中的記錄的初始時間,方法如下測試缺件補齊時間表的記錄數為g_rownumber,如果g_rownumber>0,表示缺件補齊時間表有記錄;以g_rownumber為循環次數作循環,讀取缺件補齊時間表中的第一條記錄的補齊日期、產品代號、部件代號,在產品明細表中查找父部件,讀取父部件的所屬產品、所屬部件、工序名稱字段數據,將作為條件,查找部件進度表中的對應記錄,讀取部件進度表對應記錄的開始時間;如果缺件補齊時間表中的補齊日期的第二天與時間08 00合成,生成的日期時間大于部件進度表對應記錄的開始時間,那么將該缺件補齊時間表中的補齊日期的第二天與時間08 00合成生成的日期時間設置給該缺件所屬部件在部件進度表中對應記錄的開始時間;3)工序時間表按有效性為O的過濾條件進行過濾,部件進度表按有效性I的過濾條件進行過濾;測試部件進度表的記錄數記作g_rownumber,測試工序時間表的記錄數記作g_rownumberl ;如果都大于O,那么讀取部件進度表的第一條記錄;用DO·· LOOP WHILEcondition循環語句做以下步驟4)、5)、6)、7)、8)的處理;4)運用條件符合時參與排序、把表示工件的部件進度表的開始時間與表示工位的工序時間表的起始時間作比較取最有利時間的方法,確定有效性為I的部件進度表記錄的開始時間datetime ksrq和順序號的方法如下部件進度表按開始時間、優先級、工序名稱、批次號、所屬產品、所屬部件、產品代號、部件代號、列號、序號字段升序排序;工序時間表按次序號、起始時間、工序名稱、順序號字段升序排序;確定有效性為I的部件進度表記錄的開始時間datetime ksrq和順序號的方法如下讀取部件進度表第一條記錄的工序名稱賦值給變量gxmc、開始時間賦值給ksrq ;計算ksrq為今天today O后的第幾天,值賦給η,根據ksrq的小時數變量hk判斷作業時間段;如果hk>=8且hk〈12,那么是上午班,m=l,hs=8,ms=0 ;如果hk>=12且hk〈=16,那么是下午班,m=2, hs=12, ms=30 ;hk>=17 且 hk〈=20,那么是晚班,m=3, hs=17, ms=0 ;按n-m格式合成次序號,工序時間表按工序名稱為gxmc、有效性為O、次序號為(n-m)過濾條件進行過濾,測試工序時間表的記錄數li_row ;如果記錄數li_row大于O,讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的第一條記錄的順序號賦值給變量11,起始時間給變量qsrq,取qsrq和ksrq最大值賦給ksrq,設置部件進度表本條記錄的開始時間為ksrq,次序號為(n-m),順序號為yy ;如果測試工序時間表的記錄數li_row不大于O,那么m=m+l ;如果m=4,那么m=l,n=n+l,回到本步驟4)開始處循環,直到記錄數大于O,即找到空余時間段;5)根據部件進度表開始時間和作業時長,用間斷時間相加的方法確定結束時間datetime wcrq的方法如下讀取部件進度表的作業時長為zysc ; 設部件進度表第一條記錄的結束時間wcrq的分鐘記作變量int mw,小時記作變量int hw,其結束時間與上班時間的時長記作變量tysc,那么tysc= (hk_hs) *60+(mk-ms)+zysc,設置mw = mk + zysc ;半天的工作時間 3· 5 小時為 210 分鐘; 如果tysc〈210且mw〈60,那么結束時間wcrq的分鐘數為mw = mk + zysc,小時數為hw=hk,設置其有效性為2,設置其完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ;如果tysc〈210且mw>=60,那么結束時間wcrq的小時數為hw= hk +int ((mk +zysc ) /60),分鐘數為mw=mod ((mk + zysc),60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n_m,順序號為yy的記錄的起始時間wcrq ;如果tysc=210,那么結束時間 wcrq 的小時數為 hw= hk +int ((mk + zysc ) /60),分鐘數為mw=mod((mk + zysc),60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n_m,順序號為yy的記錄的有效性為I ;如果tysc>210,那么作以下處理6)設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的該記錄的有效性為1,同時需將部件進度表對應記錄拆分成兩部分記錄;部件進度表對應記錄拆分成的第一部分記錄的開始時間為原開始時間不變,hsl、ms I分別表示下班時間的小時數和分鐘數;如果m=l,那么hsl=ll, msl=30 ;如果m=2,那么hsl=16,msl=00 ;如果m=3,那么hsl=20,msl=30 ;部件進度表對應記錄拆分成的第一部分記錄的結束時間的日期設置為今天todayO后η天,時間的小時為hsl,時間的分鐘為msl ;部件進度表對應記錄拆分成的第一部分記錄的有效性為2 ;部件進度表該記錄第一部分記錄的作業時長為(hsl-hk)*60+(msl _ mk),部件進度表該記錄第一部分記錄的時長為0.00,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的有效性為 I, zysc=zysc_(hsl-hk)氺60-(ms1-mk);m=m+l,如果m=4,那么m=l, n=n+l,工序時間表按工序名稱為gxmc、有效性為O、次序號為(n-m)過濾條件進行過濾;測試工序時間表的記錄數li_row,如果記錄數li_row大于0,插入新的記錄行做為部件進度表對應記錄第二部分記錄,批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、優先級、列號、非作業時長與原記錄保持不變,其有效性值為2,作業時長為zysc ;讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的第一條記錄的順序號賦值給變量yy,起始時間給變量qsrq,將qsrq設置給部件進度表的開始時間,設置其次序號為(n-m),順序號為yy ;如果工序時間表記錄數li.row不大于0,那么回到本步驟6)開始處循環,直到記錄數大于0,即找到空余時間段;確定第二部分結束時間datetime wcrq,設其結束時間wcrq的分鐘記作變量intmw,小時記作變量int hw,其結束時間與上班時間的時長記作變量tysc,設qsrq的分鐘數為 mk,小時數為 hk,那么七5^。=(111^-118)*60+(1111^-1118)+25^(3,設置11 ¥ = mk + zysc ;半天的工作時間3. 5小時為210分鐘;如果tysc〈210且mw〈60,那么其結束時間wcrq的分鐘數為mw = mk + zysc,小時數為hw=hk,設置其結束時間為wcrq,設置其有效性為2 ;設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ;如果tysc〈210且mw>=60,那么部件進度表記錄的結束時間wcrq的小時數為hw= hk +int ((mk + zysc ) /60),分鐘數為 mw=mod((mk + zysc), 60);設置其結束時間為wcrq,設置其有效性為2,設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ;如果tysc=210,那么其結束時間wcrq的分鐘數為hw= hk +int ((mk + zysc)/60) ’小時數為mw=mod((mk + zysc),60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的有效性為I ;如果tysc>210,回到步驟6)即本步驟開始處循環,直至tysc>=210不成立;這樣就設置部件進度表記錄的結束時間wcrq、有效性2 ;確定了新插入記錄的次序號、順序號、序號等字段;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m、順序號為yy的記錄的起始時間wcrq或有效性I ;7)由部件進度表非作業時長zysc與結束時間wcrq,用連續時間相加的方法確定部件進度表下道工序或父部件第一道裝配工序的開始時間的方法如下賦值wcrq的分鐘記為mw ;小時數記為hw,非作業時長記為zysc ;設置記錄的本班次上班時間,如果m=l,那么hs 1=8,ms 1=0 ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,設置 nl=n ;如果設置部件進度表下道工序或父部件第一道裝配工序的開始時間為ksrq,ksrq與當班次上班時間的時長為tysc,那么tysc=(hw-hsl)*60+(mw-msl)+zysc,如果tysc〈=210 且(mw + zysc)〈60,那么 ksrq 的分鐘數為 mw+zysc,小時數為 hw ;如果tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小時數為 hw +int ((mw + zysc)/60),分鐘數為 mw=mod ((mw + zysc), 60);m=m+l,讀取記錄的下班次數據;如果m=4,那么m=l, n=n+l,讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的記錄;如果讀到記錄,設工序時間表的起始時間為的小時數和分鐘數分別為hs2和ms2 ;記錄下班次的上班時間的小時數和分鐘數分別為hs和 ms ;如果 m=l,賦值 hs=8,ms=0 ;如果 m=2,賦值 hs=12,ms=30 ;如果 m=3,賦值 hs=17,ms=0 ;如果讀不到工序時間表的記錄,那么回到本節開始處循環,至到讀到記錄,XX= (n-nl)*1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ;如果tysc>210且tysc〈=xx,那么ksrq的小時數為hs2,分鐘數為ms2 ;如果tysc>xx 且 tysc<=yy,那么非作業時長 zysc=zysc- ((n-nl) *1440+ (hs2_hw) *60+ (ms2_mw)) ;ksrq 的小時數為 hs2 +int ((ms2 + zysc ) /60),分鐘數為 mod((ms2 + zysc), 60);如果tysc>yy,那么設置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步驟7)開始處循環,直到tysc>xx不成立;8)運用多對多關系的對應等方法找出部件進度表下道工序或父部件第一道裝配工序,將開始時間和有效性賦值判斷部件進度表記錄工序有沒有下道工序,如果部件進度表本條記錄的工序有下道工序,設置它的開始時間為ksrq,同時設置本條記錄的下道工序的有效性字段為1,同時讀取本條記錄的下道工序的工序號、工序名稱,寫入本條記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向;
如果部件進度表本條記錄的工序沒有下道工序,則到產品明細表中查找產品代號、部件代號、所屬產品、所屬部件均對應的記錄的單臺數記為I jsl,說明子部件與父部件的關系為Ijsl條子部件對應I條父部件;讀取工序號為1,序號為O的同批次號的父部件的所有子部件,其記錄數記作xxl,再讀取工序號為1,序號為O的同批次號的父部件,其記錄數記作xx2,兩者相除的結果記作xx3,表明父部件被查找xx3次其有效性就可以改為1,這樣就建立了對于多個父部件對應多個子部件的多對多關系的對應的唯一性;如果該部件的工序號為I的父部件的記錄的開始時間不為空,那么記作ksrql,取ksrq與ksrql的最大值為ksrq,那么該部件的父部件的工序號為I的記錄的開始時間設置為ksrq,同時讀取其父部件的工序號和工序名稱,寫入該子部件記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向;如果父部件的子部件對應了 xx3次父部件,則將該父部件的有效性改為I ;9)用DO…LOOP WHILE condition 循環語句,進行步驟4)、5)、6)、7)、8);按這種方法一直下去,當部件進度表正在確定的所有部件均沒有父部件,且其對應的所有裝配工序的開始時間和結束時間都確定后,即部件進度表的開始時間、結束時間、順序號都生成后,或者工序時間表的所有記錄的有效性都為I后,循環結束;10)將部件進度表不設置條件過濾,如果轉向工序號為1,說明轉向父部件,轉向工序號不為1,說明轉向下道工序,依此規則依次查找每條記錄轉向工序號、轉向工序名對應的順序號,填入記錄的轉向順序號字段。四、顯示最佳路徑以甘特圖方式顯示(I)注釋I)顯示最佳路徑的甘特圖表包含天數、班次、順序號和S10、S20、S30、S40、S50、S60、S70、S80、S90、S100、S110、S120、S130、S140、S150、S160、S170、S180、S190、S200、S210共21個表示每十分鐘間隔的時間段的字段;2)設置顯示最佳路徑的甘特圖表單元格字體的背景色為空值為rgb( 255,O,O),非空值為 rgb( O, 255,O);3)選擇顯示最佳路徑的甘特圖表顯示的截止日期,考慮顯示的甘特圖表的清晰度要求,最佳路徑的甘特圖表顯示的時間間隔選擇十分鐘,上午班、下午班、晚班的作業時長均按210分鐘計算;4)顯示最佳路徑的甘特圖表按工序單元的工序名稱分成鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個;部件進度表分別按八個工序單元的工序名稱字段過濾,分別得到甘特圖表菜單的八個子菜單,表示八個工序單元的甘特圖表;(2)以電裝工序單元為例,由部件進度表顯示最佳路徑的甘特圖表的步驟如下I)部件進度表按次序號、順序號、開始時間、批次號、所屬產品、所屬部件、產品代號、部件代號、列號、序號字段升序排序;2)部件進度表按工序名稱字段過濾條件進行過濾;3)測試部件進度表的記錄數,如果等于0,表示部件進度表按上述條件過濾后沒有記錄,退出本步驟; 4)如果部件進度表的記錄數大于0,設置循環語句依次讀取從部件進度表的每一條記錄;5)讀取部件進度表的第一條記錄的次序號,用函數找出在次序表中按從左到右的位置,記作I」[5];取次序號從左第I個到第(I」[5]-I)個字符串,轉換成Integer類型值,賦值給甘特圖表的天數字段,從第(I」[5] +1)個到最左邊字符串,轉換成Integer類型值,賦值給甘特圖表班次字段;設班次字段用變量m表示;則111的值為1、2或3 ;如果m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;讀取部件進度表第一條記錄的順序號賦值給甘特圖表的順序號字段;讀取部件進度表的第一條記錄的開始時間賦給變量ksrq,結束時間賦值給變量wcrq ;讀取部件進度表的第一條記錄的產品代號賦值給變量cpdh,部件代號賦值給變量Ijdh ;判斷部件進度表記錄的時間在甘特圖表半天21個時間段的哪一段,過程是如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈10,同時(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >0則查找甘特圖表本條記錄SlO字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給SlO字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈20,同時(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >10則查找甘特圖表本條記錄S20字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S20字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈30,同時(hour (wcrq)-hsl) *60+ (Minute (wcrq) -msl) >20則查找甘特圖表本條記錄S30字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S30字段;……用同樣的方法一直到判斷部件進度表記錄的時間是否在甘特圖表半天第21個時間段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同時(hour(wcrq)-hsl) *60+ (Minute (wcrq) -msl) >200則查找甘特圖表本條記錄S210字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S210字段;6)讀取部件進度表的第二條記錄的次序號賦值給字符型變量zcc,用函數找出 在ZCC中按從左到右的位置,記作I」;取ZCC從左第I個到第(I」[5]-1)個字符串,
轉換成Integer類型值賦值給數值型變量η ;從第(l_i [5] +1)個到最左邊字符串,轉換成Integer類型值賦值給數值型變量m,讀取部件進度表第二條記錄的順序號設置給數值型變量I」;查找甘特圖表中天數等于n,班次等于m,順序號等于I」的記錄,如果查找到,表明甘特圖表有符合條件的記錄,記作li_row ;如果查不到,表明甘特圖表沒有符合條件的記錄,在甘特圖表插入新的記錄,記錄號為li_row,插入的甘特圖表的新記錄的天數字段賦值為n,班次字段賦值為m,順序號字段賦值為I」;m 的值為 1、2 或 3 ;如果 m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;讀取部件進度表的第二條記錄的開始時間賦給變量ksrq,結束時間賦值給變量wcrq ;讀取部件進度表的第二條記錄的產品代號賦值給變量cpdh,部件代號賦值給變量Ijdh ;
判斷部件進度表記錄的時間在甘特圖表半天21個時間段的哪一段,過程是如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈10,同時(hour(wcrq)-hsl) *60+(Minute (wcrq)-msl) >0則查找甘特圖表本條記錄SlO字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給SlO字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈20,同時(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >10則查找甘特圖表本條記錄S20字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S20字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈30,同時(hour (wcrq)-hsl) *60+ (Minute (wcrq) -msl) >20則查找甘特圖表本條記錄S30字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S30字段;……用同樣的方法一直到判斷部件進度表記錄的時間是否在甘特圖表半天第21個時間段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同時(hour(wcrq)-hsl) *60+ (Minute (wcrq) -msl) >200則查找甘特圖表本條記錄S210字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S210字段;7)依次讀取部件進度表的第三條到最后一條記錄,用步驟6)的方法完成甘特圖表數據的賦值;五、作業進程返饋過程如下( I)注釋I)作業情況表包括序號、產品代號、部件代號、部件名稱、批次號、工序號、工序名稱、開始時間、結束時間、作業人員、作業時長、備注等字段;作業情況表在作業人員勾選時程序自動將不同時間獲取的信息為相應字段賦值;2)異常反饋表包含序號、產品代號、部件代號、部件名稱、批次號、工序號、工序名稱、異常現象、異常類別、解決措施、原因分析、填報人員、解決人員、填報日期、預完日期和備注字段;異常反饋表由技術人員填報;3)作業指導書包含產品代號、部件代號、部件名稱、工序號、工序名稱、作業號、作業內容、設備、工裝、輔助材料和備注字段;作業指導書由技術人員填報;(2)用todayO和time O可以獲取本機當時的日期和當時的時間;為了防止作業人員本人通過修改本機時間達到修改作業時長的目的,程序采用自動讀取服務器時間做為系統時間的方法,增加開始時間、結束時間等時間數據的客觀性;自動獲取作業時間的具體步驟如下I)為讀取服務器時間設置一個游標declare get_date cursor for selectgetdate ();2)打開游標open get_date;3)設置給變量 tt_d :fetch get_date into : tt_d ;4)關閉游標close get_date;(3)作業“開工勾選”的步驟是I)當作業人員開始作業時,在顯饋終端的一體機上,用本人設置的密碼登錄,顯示甘特圖窗口; 2)在甘特圖窗口,雙擊甘特圖表,在上方部件進度表經過過濾的相關記錄的記錄行雙擊進行“開工勾選”;3)程序自動獲取勾選時服務器的時間,設置給部件進度表對應記錄的開始時間字段;設置部件進度表該記錄的有效性字段的值為3 ;4)同時作業情況表插入一條記錄,將作業情況表插入的記錄的批次號、產品代號、部件代號、部件名稱、工序號、工序名稱、開始時間、作業人員字段賦值;(4)作業完成后,作業人員需進行作業“完工勾選”;作業“完成勾選”的步驟是I)當作業人員完成作業后,在顯饋終端一體機上在用本人設置的密碼登錄的作業指導書窗口,單擊“完工勾選”按鈕進行“完工勾選”,作業指導書窗口退出;2)進行作業“完工勾選”時,讀取服務器時間設置給部件進度表對應記錄的結束時間;填報實際作業時長設置給部件進度表的作業時長字段;3)設置部件進度表中該記錄的有效性字段的值為5 ;4)根據產品代號、部件代號、批次號、工序號、作業人員信息查找對應記錄、找到后,將獲取的服務器時間賦值給結束時間;5)如果作業沒有完成,不需要進行“完工勾選”,想退出作業指導書窗口,單擊“退出”按鈕;(5)作業發生異常時,作業人員需進行作業“異常反饋”;作業“異常反饋”的步驟是I)對已作“開工勾選”的作業對象,在作業過程中,單擊作業指導書窗口“異常反饋”按鈕;2)當作業發生異常時單擊“異常反饋”按鈕,進入“異常反饋”窗口 ;3)部件進度表中該記錄的有效性為4 ;作業人員填報作業發生的異常現象;同時填寫因異常導致的作業時長延長的時間;4)技術人員到現場解決異常后,填寫異常原因和解決措施;5)部件進度表數據刷新時,按新的作業時長調整數據;實施例一、圖I是智能作業控制方法結構圖;產品結構樹的構建方法在編制生產計劃、部件流程等過程中涉及;根據生產計劃、裝配流程、各工序單元工位安排等數據進行具有從屬關系的產品的生產能力的計算,根據生產能力計算過程中工位數安排的近似值安排各工序單元工位數;錄入或導入產品明細表、裝配流程表、生產計劃表、缺件補齊時間表數據;調整產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數;根據產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十一種因素,運用本方法自動完成部件進度的計算;根據部件進度生成甘特圖,用甘特圖部件進度;二、在圖2智能作業控制方法硬件配置圖所示的配置,組建局域網;一臺服務器放在專門機房的機架上,通過一臺48端口交換機和網線與客戶端相連;客戶端設計7臺采集 終端、I臺控制終端、38臺顯饋終端;7臺米集終端和I臺控制終端米用普通臺式機,38臺顯饋終端采用一體機。服務器和交換機一同放在中心機房的機架上;服務器存放客戶端數據,交換機將服務器和采集終端、控制終端、顯饋終端連接;采集終端采集產品明細表、裝配流程表、作業指導書等技術數據和生產計劃表、缺件補齊時間表、加班表等管理數據;控制終端用于通過密碼類型控制各工序單元工位安排和生產計劃表中產品的優先級;顯饋終端顯示甘特圖、作業指導書和進行作業“開工勾選”、“完工勾選”和“異常反饋”。在圖2智能作業控制方法硬件配置圖控制終端臺式機上通過修改生產計劃表的優先級字段的數值大小改變產品優先級,通過生產能力計算結果來改變各工序單元工位數的安排,通過改變密碼表的密碼類型來同步改變工位顯饋終端顯示的信息。在圖2智能作業控制方法硬件配置圖采集終端臺式機,管理人員錄入和查詢加班表、生產計劃表、缺件補齊時間表;技術人員導入產品明細表、裝配流程表和作業指導書等技術數據。在圖2智能作業控制方法硬件配置圖顯饋終端的一體機顯示最佳路徑甘特圖;顯示最佳路徑甘特圖界面分兩部分,下部分為最佳路徑甘特圖,它用21個字段表示間隔10分鐘,時長半天210分鐘的甘特圖表,表示有作業的空間的背景色設置與表示沒有作業的空間的背景色不同;上部分是部件進度表;通過雙擊甘特圖表中記錄的任意一行,部件進度表得到符合條件的相關記錄。在圖2智能作業控制方法終端圖上的顯饋終端的一體機上,正常作業需要進行作業“開工勾選”和作業“完工勾選”;退出時程序自動填報作業情況表,并修改反饋部件進度表的開始時間等信息;同時調用數字裝配工藝;發生異常作業時填報異常情況反饋表,同時修改部件進度表中的完成時間和作業時長信息。在圖2智能作業控制方法終端圖上的顯饋終端的一體機上,顯示作業內容。
權利要求
1.一種離散型企業智能作業控制方法,其特征在于對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組構建產品結構樹;按相似性分成八個生產單元,每個單元又安排可控制數量的工位,半天按210分鐘,計算生產能力初定各工序單元工位數;在考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素,控制具有從屬關系產品的每一個部件在每一個工位上裝配的最佳時間點,自動尋找部件裝配的最佳路徑;該最佳路徑以甘特圖方式實時顯示控制現場作業;作業開工勾選調用作業指導書進行作業和作業進程返饋,從而實現離散型企業智能的作業控制。
2.根據權利要求I所述的離散型企業智能作業控制方法,其特征在于對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組構建產品結構樹的過程如下 1)將產品明細表按產品代號cpdh、部件代號ljdh、所屬產品zee、所屬部件zcb字段升序排序; 2)測試產品明細表的記錄數,記作變量li_row; 3)判斷產品明細表有沒有記錄,如果li_row=0,表示產品明細表沒有記錄,退出本步驟,如果li_row>0,表示產品明細表有記錄;讀取第一條記錄的產品代號cpdh,部件代號ljdh,所屬產品zee,所屬部件zcb,樹形視圖列表項子項顯示文本賦值; 4)設置變量內層循環層數int i,數組 string zee[20], zcb[20], li_row[20]; 5)將產品明細表按zee,zcb字段過濾,得到所有子部件; 6)賦值i=l,測試所有子部件的記錄數,記作li_row[i]; 7)判斷子部件有沒有記錄,如果li_row[i]=0,表示沒有子部件,那么添加樹形視圖列表項,此列表項前沒有子項不加“ + ”號;恢復父項過濾條件,光標指向其下一條記錄,讀取下一條記錄部件的產品代號cpdh,部件代號ljdh,所屬產品zee,所屬部件zcb,樹形視圖列表項顯示文本賦值;重復步驟5)、6)、7); 如果li_row[i]>0,表示第一條記錄部件有子部件,那么添加樹形視圖列表項;此列表項前有子項加“ + ”號;讀取子部件的第一條記錄的產品代號cpdh,部件代號ljdh,所屬產品ZCC [i],所屬部件zcb [i],樹形視圖列表項子項顯示文本賦值; 8)將產品明細表按ZCC[i],ZCb[i]字段過濾,得到所有子部件; 9)測試所有子部件的記錄數,記作li_row[i+l]; 10)判斷所有子部件有沒有記錄,如果li_row[i+l]=0,表示其沒有子部件,那么添加樹形視圖列表項;此列表項前沒有子項不加“ + ”號;恢復父項過濾條件,光標指向其下一條記錄,讀取下一條記錄的產品代號cpdh,部件代號ljdh,所屬產品zee [i],所屬部件zcb [i];樹形視圖列表項顯示文本賦值,重復步驟8)、9)、10); 如果li_row[i+l]>0,表示有子部件,那么添加樹形視圖列表項;此列表項前有子項加“ + ”號;賦值i=i+l ;讀取其子部件的第一條記錄的產品代號cpdh,部件代號I jdh,所屬產品ZCC [i],所屬部件zcb [i],樹形視圖列表項子項顯示文本賦值; 11)重復步驟8)、9)、10); 12)當光標指向i級子部件的結尾時,回到父項,設置i=i- I ;判斷光標回到是父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項從第I條到第li_row[i]條記錄之間的一條記錄時,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i - I ; 13)直到i=l,用這種方法就構建了產品目錄樹。
3.根據權利要求I所述的離散型企業智能作業控制方法,其特征在于計算生產能力初定各工序單元工位數對不固定子部件級數的產品采用不固定嵌套循環層數和數組的方法尋找到產品所有的裝配部件,根據產品所有的裝配部件的作業時長計算產品的生產能力;確定各工序單元工位數量的過程如下 1)選擇需要計算生產能力的截止時間,過濾這段時間內生產計劃表的產品計劃,測試過濾后生產計劃表有沒有記錄,如果沒有記錄,計算結束;如果有記錄,記錄數記作ii_row,進行生產能力計算,生成生產能力計算表; 2)生產計劃表按產品代號、部件代號、批次號字段升序排序;將產品的裝配工序按相似性進行分類,定義各工序單元的工序名稱,本發明中根據產品裝配工藝相似性的特點,將裝配工序定義為鉗裝、裝擦、電裝、電調、總校、聯調、裝箱、裝外八個工序單元; 3)依次讀入已過濾的生產計劃表的不同的產品代號,作為生產能力計算表的各記錄項,記錄讀完后,增加計劃工時、達額工時、能力工時、各工序單元工位數四個記錄匯總項; 4)設置表示循環層數變量int i,數組 string zee[20] ,zcb[20], long lii_row[20];讀取生產計劃表第一條記錄的產品代號、部件代號、計劃數量Ijsll ; 5)查找對應于裝配流程表各工序單元的作業時長,如果讀不到數據或讀的數據為空,那么作業時長值為0,將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據與生產能力計算表對應生產計劃表中產品代號的原數據相加,將結果設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;如果生產能力計算表中對應生產計劃表中產品代號的原數據為空,則將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段; 6)將產品明細表按產品代號、部件代號字段過濾,得到所有子部件; 7)賦值i=l,測試子部件的記錄數,記作lii_row[i]; 8)判斷有沒有子部件,如果lii_row[i]=0,表示沒有子部件,那么生產計劃表中的光標指向下一條記錄,讀取下一條記錄的產品代號、部件代號、計劃數量I jsll,重復步驟5)、6)、7)、8); 如果lii_row[i]>0,表示有子部件,讀取其子部件的第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量(Ijsl),ljsll=ljsll*ljsl ; 9)以產品代號、部件代號為條件查找裝配流程表對應部件各工序單元的作業時長,如果讀不到數據或讀的數據為空,那么作業時長值為0,將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據與生產能力計算表中對應生產計劃表中產品代號的原數據相加,將結果設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;如果生產能力計算表中對應生產計劃表中產品代號的原數據為空,則將計劃數量Ijsll與對應部件對應工序單元的作業時長相乘的數據設置給生產能力計算表中對應生產計劃表中產品代號的記錄的相應字段;10)將產品明細表按ZCC[i],zcb[i]字段過濾,得到所有子部件; 11)測試子部件的記錄數,記作lii_row[i+l]; 12)判斷有沒有子部件,如果lii_row[i+l]=0,表示沒有子部件,那么恢復父項過濾條件;光標指向下一條記錄,讀取下一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量(Ijsl) , ljsll=ljsll*ljsl ;重復步驟 9)、10)、11)、12); 如果lii_row[i+l]>0,表示有子部件;賦值i=i+l ;讀取子部件的第一條記錄的產品代號cpdh、部件代號I jdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量(Ijsl),ljsll=ljsll*ljsl ; 13)重復步驟9)、10)、11)、12); 14)當光標指向i級子部件級的結尾時,回到父項,設置i=i- I ;判斷光標是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i - 1,直到 i=l ; 15)將生產能力計算表中計算得到的各條產品記錄中的各個工序單元橫向匯總求和,設置給該記錄的產品工時字段; 16)將生產能力計算表中計算得到的各條產品記錄中的各個工序單元及產品工時進行縱向匯總求和,得到的數據設置給計劃工時記錄相對應的各字段; 17)將生產能力計算表中計劃工時各工序單元的數值除以作業天數,再除以每天作業的分鐘數,就到得生產能力計算表中工位數量安排的近似值; 18)將生產能力計算表中各工序單元的計劃工時和產品工時與達額率相乘,得到的數據設置給達額工時記錄相對應的各字段; 19)將工作時長與各工序單元工位數相乘得到能力工時,得到的數據設置給達額工時記錄相對應的各字段。
4.根據權利要求I所述的離散型企業智能作業控制方法,其特征在于考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素的表,尋找控制具有從屬關系產品的每一個部件在每一個工位上裝配的最佳時間點,自動尋找具有不固定級數從屬關系的產品的部件裝配最佳路徑,過程如下 (I)由加班表和工序單元工位表運用顯示區間天數的確定,周末的判斷,循環中日期和時間的表達等方法生成工序時間表,步驟如下 1)清除工序時間表原來的數據; 2)用戶輸入截止日期em_2,今天的第二天與截止日期之間的日期稱為顯示區間,記作變量XX ; 3)如果截止日期的年份等于今天todayO的年份,顯示區間的天數XX為截止日期的號數,減去今天todayO的號數,加上從今天today O的月份到截止日期月份的前一個月期間每個月最后一天的號數的累加和; 4)如果截止日期的年份等于今天todayO的年份加1,顯示區間的天數XX為截止日期的號數,減去今天today O的號數,加上從今天today O的月份到今天today O當年十二月期間每個月最后一天的號數,加上截止日期當年一月到截止日期月份前一個月期間每個月最后一天的號數的累加和; 5)如果截止日期的年份大于今天todayO的年份加1,顯示區間的天數XX為截止日期的號數,減去今天today O的號數,加上從今天today O的月份到今天today O當年十二月期間每個月最后一天的號數,加上截止日期當年一月到截止日期月份前一個月期間每個月最后一天的號數,加上從今天today O的次年一月到截止日期前一年十二月期間每個月最后一天的號數的累加和; 6)取每個月最后一天的方法為月份設為變量li_month,如果li_month=12,那么最后一天的號數為31 ;如果li_month〈12,那么下個月月份為本月加I,即li_month+l,每個月的最后一天就是下個月I號的前一天; 7)以顯示區間的天數為第一層循環的次數,以工序單元工位表的工序名稱字段為第二層循環的次數,以工序單元工位表的工位數字段為第三層循環次數進入循環,依次讀數、賦值、設置直至完成三層循環,工序時間表完成設置; 8)在步驟7)的循環中,依次讀數、賦值、設置直至完成三層循環的方法如下 讀取工序單元工位表中每條記錄的工序名稱,設置給工序時間表的工序名稱字段; 讀取工序單元工位表中每條記錄的工位數,設置給工序時間表的順序號字段; 工序時間表的次序號用兩位數n-m表示,η表示今天today O后第幾天數,η從I到χχ ;m表示時間段,用1、2、3表示;1表示上午班8:00-11:30,1表示下午班12 :30_16:00, 3表示晚班17:00-20:30 ;每班次上班時間分別為上午班時間08:00 ;下午班時間12:30 ;晚班時間 17:00 ; 工序時間表的起始時間為日期時間型數據,含日期和時間; 取今天today O后的第η天日期,判斷第η天是不是星期天或星期六;如果是,那么工序單元工位表中的工位數不參與循環; 工序時間表的有效性均設為O ; 讀取加班表中的記錄;將工序時間表按順序號字段降序排列;查找工序時間表中對應同時段并且同工序名稱的記錄的順序號;如果查找到,則插入新的相應記錄,記錄的順序號從查找到的順序號以后排;如果查找不到,則插入新的相應記錄,記錄的順序號從I開始排,直到循環結束; 9)工序時間表生成后,按工序名稱、起始時間、次序號字段升序,順序號字段降序排序。
(2)保留部件進度表表示已開工的、異常的、完工的記錄,清除其他記錄,并綁定部件進度表的保留記錄與工序時間表對應的順序號,步驟如下 1)有效性O表示項目確定;有效性I表示開始時間確定;有效性2表示結束時間確定;有效性3表示已作開工“作業勾選” ;4表示已填報作業異常;有效性5表示已作完成“作業勾選”; 2)保留有效性為3,或有效性為4或有效性為5的記錄,清除部件進度表的其它數據; 3)整理保留的有效性為3、或4、或5的記錄,將部件進度表中按批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號字段升序排序,設置批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號相同的記錄序號從I開始重新設置;將部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號相同,列號不相同的記錄列號從I開始重新設置。
(3)對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組的方法,根據產品從屬關系、產品裝配流程、生產計劃、正常上班時間各單元工位數和加班時間各單元工位數五種因素,生成部件進度表所有記錄項,生成所有記錄項時賦值批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、序號、優先級、作業時長、非作業時長、有效性字段,步驟如下 1)生產計劃表按批次號、產品代號、部件代號、開始時間字段升序排序; 2)生產計劃表按完成情況不等于‘完成’條件進行過濾; 3)測試生產計劃表記錄數,記作li_row,如果li_row=0,退出本步驟;如果li_row>0,表示生產計劃表有記錄; 4)讀取生產計劃表第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、批次號cpph、數量ljsll、優先級yxji字段的數值; 5)以產品代號為cpdh、部件代號為Ijdh過濾條件對裝配流程表過濾,測試部件對應于裝配流程表的記錄數,記作g_rownumber ;如果g_rownumber=0,表示裝配流程表沒有記錄,轉到下一節的內容;如果g_rownumber>0,表示裝配流程表有記錄,以g_rownumber為二層循環次數,以Ijsll為三層循環次數;讀取裝配流程表第一條記錄的工序號gxh和工序名稱gxmc,在部件進度表中查找有沒有批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號都相同的記錄,如果有,記作χχ ;那么插入Ijsll條記錄,記錄的列號從χχ到(xx+1 jsll),記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品zccp、所屬部件zcbj、產品代號cpdh、部件代號Ijdh、部件名稱Ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;如果沒有,插入Ijsll條記錄,記錄的列號從I到ljsll、記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品zccp、所屬部件zcbj、產品代號cpdh、部件代號Ijdh、部件名稱Ljmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;然后光標指向裝配流程表下一條記錄……直到二層循環結束,這樣就將對應的所有工序的信息設置給部件進度表中的批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、序號、優先級、有效性相應字段; 6)將產品明細表 按產品代號cpdh,部件代號Ijdh字段過濾,得到產品明細表中的所有子部件; 7)設置變量循環層數i,數組 string zee [20], zcb [20] ,long lii_row[20],賦值i=l ; 8)測試其記錄數,記作lii_row[i],判斷有沒有子部件如果lii_rOW[i]=0,表示沒有子部件,那么生產計劃表中的光標指向下一條記錄,讀取下一條記錄的產品代號cpdh、部件代號I jdh、部件名稱ljmc、批次號cpph、數量I jsll、優先級yxji、完成日期wcrq ;重復步驟5)、6)、7)、8); 如果lii_row[i]>0,表示有子部件,讀取子部件的第一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量Ijsl,賦值ljsll=ljsl*ljsll ; 9)以產品代號cpdh、部件代號Ijdh為過濾條件對裝配流程表過濾,測試裝配流程表記錄數,記作g_rownumber ;如果g_rownumber=0,表示裝配流程表沒有記錄,轉到下一節;如果g_rownumber>0,表示裝配流程表有記錄,表示裝配流程表有記錄,以g_rownumber為二層循環次數,以Ijsll為三層循環次數;讀取裝配流程表第一條記錄的工序號gxh和工序名稱gxmc,在部件進度表中查找有沒有批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號相同的記錄;如果有,記作XX,插入Ijsll條記錄,記錄的列號從XX到xx+ljsll,記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品、所屬部件、產品代號cpdh、部件代號I j dh、部件名稱I jmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yx j i、有效性字段賦值;如果沒有,插入Ijsll條記錄,記錄的列號從I到ljsll,記錄的序號和有效性的值為O,記錄的批次號cpph、所屬產品、所屬部件、產品代號cpdh、部件代號I jdh、部件名稱I jmc、工序號gxh、工序名稱gxmc、列號、序號、優先級yxji、有效性字段賦值;然后光標指向裝配流程表下一條記錄……直到二層循環結束;這樣就將對應的所有工序的信息設置給部件進度表中的批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、列號、優先級、有效性相應字段; 10)將產品明細表按zcc[i],zcb[i]字段過濾,得到所有子部件; 11)測試子部件的記錄數,記作lii_row[i+l]; 12)判斷有沒有子部件,如果lii_row[i+l]=0,表示沒有子部件,那么恢復父項過濾條件;光標指向下一條記錄;讀取下一條記錄的產品代號cpdh、部件代號ljdh、部件名稱ljmc、所屬產品zcc[i]、所屬部件zcb[i]、所屬數量Ijsl,賦值Ijsll=Ijsl*ljsll ;重復步驟9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;賦值i=i+l ;讀取子部件每一條記錄的產品代號cpdh、部件代號I jdh、部件名稱ljmc,所屬產品zee [i],所屬部件zcb [i],所屬數量 ljsl,賦值 ljsll=ljsl*ljsll ; 13)重復步驟9)、10)、11)、12); 14)當光標指向i級的結尾時,回到父項,設置i=i- I ;判斷光標是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄還是父項的結尾記錄;如果是回到父項的從第I條到第li_row[i]條記錄之間的一條記錄,則恢復父項的過濾條件,進行下一條記錄的測試和判斷;如果是回到父項的結尾記錄,則進入上一層循環,再次設置i=i - 1,直至i=l ; 15)部件進度表按批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、列號字段升序排序,刪除批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、列號都相同的記錄中有效性為O的記錄。
(4)運用一個子部件對應多個父部件,一個父部件對應多個子部件的多對多關系的對應方法,確定部件進度表保留記錄的轉向單元的工序號、轉向工序名、轉向順序的步驟如下 優先確定有效性為3、4或5的記錄的下道工序,由部件進度表有效性為3、4或5的記錄的非作業時長zysc與結束時間wcrq,用連續時間相加的方法確定部件進度表下道工序或父部件第一道裝配工序的開始時間的方法如下 1)測試部件進度表有效性為3、4或5的記錄數,如果記錄數為0,退出本步驟;如果記 錄數不為0,作以下處理; 2)將部件進度表中按批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號、序號字段升序排序,讀取部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號字段;如果讀取的部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號與上一條記錄相同,則跳過;如果讀取的部件進度表中批次號、所屬產品、所屬部件、產品代號、部件代號、工序號、列號不相同,則將上一條記錄作如下處理; 3)賦值wcrq的分鐘記為mw;小時數記為hw,非作業時長記為zysc ; 4)設置記錄的本班次上班時間,如果m=l,那么hsl=8,ms I =O ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,設置 nl=n ; 5)如果設置部件進度表下道工序或父部件第一道裝配工序的開始時間為ksrq,ksrq與當班次上班時間的時長為tysc,那么tysc=(hw-hsl)*60+(mw-msl)+zysc ; 6)如果tysc〈=210且(mw+ zysc)〈60,那么ksrq的分鐘數為mw+zysc,小時數為hw ;7)如果tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小時數為 hw +int ((mw + zysc)/60),分鐘數為 mw=mod ((mw + zysc), 60); 8)m=m+l,讀取記錄的下班次數據;如果m=4,那么m=l,n=n+l ;讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的記錄;如果讀到記錄,設工序時間表的起始時間為的小時數和分鐘數分別為hs2和ms2 ;記錄下班次的上班時間的小時數和分鐘數分別為hs和ms ;如果 m=l,賦值 hs=8, ms=0 ;如果 m=2,賦值 hs=12, ms=30 ;如果 m=3,賦值 hs=17,ms=0 ;如果讀不到工序時間表的記錄,那么回到本步驟8)開始處循環,直到讀到記錄,χχ= (n-nl)*1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ; 9)如果tysc>210且tysc〈=xx,那么ksrq的小時數為hs2,分鐘數為ms2; 如果 tysc>xx 且 tysc<=yy,那么非作業時長 zysc=zysc- ((n-nl) *1440+ (hs2_hw) *60+ (ms2-mw)) ;ksrq 的小時數為 hs2 +int ((ms2 + zysc ) /60),分鐘數為 mod((ms2 +zysc),60); 如果tysc>yy,那么設置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步驟9)開始處循環,直到tysc>xx不成立; 10)判斷部件進度表記錄工序有沒有下道工序,如果部件進度表本條記錄的工序有下道工序,設置它的開始時間為ksrq,同時設置本條記錄的下道工序的有效性字段為1,同時讀取本條記錄的下道工序的工序號、工序名稱,寫入本條記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向; 11)如果部件進度表本條記錄的工序沒有下道工序,則到產品明細表中查找產品代號、部件代號、所屬產品、所屬部件均對應的記錄的單臺數記為I jsl,說明子部件與父部件的關系為Ijsl條子部件對應I條父部件;讀取工序號為1,序號為O的同批次號的父部件的所有子部件,其記錄數記作xxl,再讀取工序號為1,序號為O的同批次號的父部件,其記錄數記作xx2,兩者相除的結果記作xx3,表明父部件被查找xx3次其有效性就可以改為1,這樣就建立了對于多個父部件對應多個子部件的多對多關系的對應的唯一性; 12)如果該部件的工序號為I的父部件的記錄的開始時間不為空,那么記作ksrql,取ksrq與ksrql的最大值為ksrq,那么該部件的父部件的工序號為I的記錄的開始時間設置為ksrq;同時讀取其父部件的工序號和工序名稱,寫入該子部件記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向; 13)如果父部件的子部件對應了xx3次父部件,則將該父部件的有效性改為I ; 14)循環處理每條記錄,循環結束后按同樣的方法處理最后一條記錄;15)將部件進度表不設置條件過濾,如果轉向工序號為1,說明轉向父部件,轉向工序號不為1,說明轉向下道工序;依此方法依次查找每條記錄轉向工序號、轉向工序名對應的順序號,填入記錄的轉向順序號字段。
(5)根據產品配套時間、缺件補齊時間、實際完成時間、作業異常推遲時間、優先級五種因素,運用條件符合時參與排序、把表示工件的部件進度表的開始時間與表示工位的工序時間表的起始時間作比較取最有利時間的方法、間斷時間相加的方法、連續時間相加的方法、多對多關系的對應方法四種方法,生成部件進度表開始時間、結束時間、順序號、轉向工序號、轉向工序名、轉向順序號的步驟如下 1)部件進度表按工序號為I且有效性為O條件過濾,確定部件進度表對應記錄的有效 性為I且初定部件進度表有效性為I的記錄的開始時間,方法如下 測試部件進度表記錄數,記作g_rownumber,如果g_rownumber=0,表示部件進度表沒有可操作的記錄,程序結束;如果g_rownumber>0,表示部件進度表有可操作的記錄,讀取部件進度表第一條記錄的產品代號記作變量cpdh、部件代號記作Ijdh ; 查找部件進度表中所屬產品等于cpdh,所屬部件等于I jdh,有效性為O的記錄,如果查至IJ,說明有子部件,跳出本節內容;如果查不到,表示沒有子部件,將部件進度表有效性設置為1,設置部件進度表中該記錄的開始時間的日期為今天todayO后I天,時間為8點; 依次讀取部件進度表的下一條記錄的產品代號記作變量cpdh、部件代號記作ljdh,重復上述內容;......經過g_rownumber次循環,取值、過濾、判斷,就確定了部件進度表中每條記錄的有效性是否為1,并初步確定有效性字段為I的記錄的開始時間; 2)初定缺件補齊時間表對應部件進度表中的記錄的初始時間,方法如下 測試缺件補齊時間表的記錄數為g_rownumber,如果g_rownumber>0,表示缺件補齊時間表有記錄;以g_rownumber為循環次數作循環,讀取缺件補齊時間表中的第一條記錄的補齊日期、產品代號、部件代號,在產品明細表中查找父部件,讀取父部件的所屬產品、所屬部件、工序名稱字段數據,將作為條件,查找部件進度表中的對應記錄,讀取部件進度表對應記錄的開始時間;如果缺件補齊時間表中的補齊日期的第二天與時間08 00合成,生成的日期時間大于部件進度表對應記錄的開始時間,那么將該缺件補齊時間表中的補齊日期的第二天與時間08 00合成生成的日期時間設置給該缺件所屬部件在部件進度表中對應記錄的開始時間; 3)工序時間表按有效性為O的過濾條件進行過濾,部件進度表按有效性I的過濾條件進行過濾;測試部件進度表的記錄數記作g_rownumber,測試工序時間表的記錄數記作g_rownumberl ;如果都大于O,那么讀取部件進度表的第一條記錄;用DO·· LOOP WHILEcondition循環語句做以下步驟4)、5)、6)、7)、8)的處理; 4)運用條件符合時參與排序、把表示工件的部件進度表的開始時間與表示工位的工序時間表的起始時間作比較取最有利時間的方法,確定有效性為I的部件進度表記錄的開始時間datetime ksrq和順序號的方法如下 部件進度表按開始時間、優先級、工序名稱、批次號、所屬產品、所屬部件、產品代號、部件代號、列號、序號字段升序排序; 工序時間表按次序號、起始時間、工序名稱、順序號字段升序排序; 確定有效性為I的部件進度表記錄的開始時間datetime ksrq和順序號的方法如下讀取部件進度表第一條記錄的工序名稱賦值給變量gxmc、開始時間賦值給ksrq ; 計算ksrq為今天today O后的第幾天,值賦給η,根據ksrq的小時數變量hk判斷作業時間段;如果hk>=8且hk〈12,那么是上午班,m=l,hs=8,ms=0 ;如果hk>=12且hk〈=16,那么是下午班,m=2, hs=12, ms=30 ;hk>=17 且 hk〈=20,那么是晚班,m=3, hs=17, ms=0 ; 按n-m格式合成次序號,工序時間表按工序名稱為gxmc、有效性為0、次序號為(n-m)過濾條件進行過濾,測試工序時間表的記錄數Ii_row ;如果記錄數li_row大于O,讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的第一條記錄的順序號賦值給變量yy,起始時間給變量qsrq,取qsrq和ksrq最大值賦給ksrq,設置部件進度表本條記錄的開始時間為ksrq,次序號為(n-m),順序號為yy ;如果測試工序時間表的記錄數li_row不大于O,那么m=m+l ;如果m=4,那么m=l,n=n+l,回到本步驟4)開始處循環,直到記錄數大于O,即找到空余時間段; 5)根據部件進度表開始時間和作業時長,用間斷時間相加的方法確定結束時間datetime wcrq的方法如下 讀取部件進度表的作業時長為zysc ; 設部件進度表第一條記錄的結束時間wcrq的分鐘記作變量int mw,小時記作變量inthw,其結束時間與上班時間的時長記作變量tysc,那么tysc=(hk_hs) *60+ (mk-ms) +zysc,設置mw = mk + zysc ;半天的工作時間3. 5小時為210分鐘; 如果tysc〈210且mw〈60,那么結束時間wcrq的分鐘數為mw = mk + zysc,小時數為hw=hk,設置其有效性為2,設置其完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ; 如果tysc〈210且mw>=60,那么結束時間wcrq的小時數為hw= hk +int ((mk + zysc)/60) ’分鐘數為mw=mod ((mk + zysc),60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n_m,順序號為yy的記錄的起始時間wcrq ; 如果tysc=210,那么結束時間wcrq的小時數為hw= hk +int ((mk + zysc )/60),分鐘數為mw=mod((mk + zysc), 60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的有效性為I ; 如果tysc>210,那么作以下處理 6)設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的該記錄的有效性為1,同時需將部件進度表對應記錄拆分成兩部分記錄; 部件進度表對應記錄拆分成的第一部分記錄的開始時間為原開始時間不變,hsl、ms I分別表示下班時間的小時數和分鐘數;如果m=l,那么hsl=ll, msl=30 ;如果m=2,那么hsl=16,msl=00 ;如果m=3,那么hsl=20,msl=30 ;部件進度表對應記錄拆分成的第一部分記錄的結束時間的日期設置為今天todayO后η天,時間的小時為hsl,時間的分鐘為msl ;部件進度表對應記錄拆分成的第一部分記錄的有效性為2 ;部件進度表該記錄第一部分記錄的作業時長為(hsl-hk)*60+(msl _ mk),部件進度表該記錄第一部分記錄的時長為0.00, 設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的有效性為 I, zysc=zysc_(hsl-hk)氺60-(ms1-mk);m=m+l,如果m=4,那么m=l, n=n+l,工序時間表按工序名稱為gxmc、有效性為O、次序號為(n-m)過濾條件進行過濾;測試工序時間表的記錄數li_row,如果記錄數li_row大于O,插入新的記錄行做為部件進度表對應記錄第二部分記錄,批次號、所屬產品、所屬部件、產品代號、部件代號、部件名稱、工序號、工序名稱、優先級、列號、非作業時長與原記錄保持不變,其有效性值為2,作業時長為zysc ;讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的第一條記錄的順序號賦值給變量yy,起始時間給變量qsrq,將qsrq設置給部件進度表的開始時間,設置其次序號為(n-m),順序號為yy ;如果工序時間表記錄數li_row不大于O,那么回到本步驟6)開始處循環,直到記錄數大于O,即找到空余時間段; 確定第二部分結束時間datetime wcrq,設其結束時間wcrq的分鐘記作變量int mw,小時記作變量int hw,其結束時間與上班時間的時長記作變量tysc,設qsrq的分鐘數為mk,小時數為 hk,那么 tysc= (hk_hs) *60+(mk-ms)+zysc,設置 mw = mk + zysc ;半天的工作時間3. 5小時為210分鐘; 如果tysc〈210且mw〈60,那么其結束時間wcrq的分鐘數為mw = mk + zysc,小時數為hw=hk,設置其結束時間為wcrq,設置其有效性為2 ;設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ; 如果tysc〈210且mw>=60,那么部件進度表記錄的結束時間wcrq的小時數為hw= hk+int ((mk + zysc ) /60),分鐘數為mw=mod ((mk + zysc), 60);設置其結束時間為 wcrq,設置其有效性為2,設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的起始時間wcrq ; 如果tysc=210,那么其結束時間wcrq的分鐘數為hw= hk +int ((mk + zysc ) /60),小時數為mw=mod((mk + zysc),60),設置該記錄的有效性為2,設置該記錄的完成時間為wcrq,設置其序號為1,如果第二部分再拆分,則第三部件序號為2,依次類推;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m,順序號為yy的記錄的有效性為I ; 如果tysc>210,回到步驟6)即本步驟開始處循環,直至tysc>=210不成立;這樣就設置部件進度表記錄的結束時間wcrq、有效性2 ;確定了新插入記錄的次序號、順序號、序號等字段;設置工序時間表工序名稱為gxmc、有效性為O、次序號為n-m、順序號為yy的記錄的起始時間wcrq或有效性I ; 7)由部件進度表非作業時長zysc與結束時間wcrq,用連續時間相加的方法確定部件進度表下道工序或父部件第一道裝配工序的開始時間的方法如下 賦值wcrq的分鐘記為mw ;小時數記為hw,非作業時長記為zysc ; 設置記錄的本班次上班時間,如果m=l,那么hsl=8, ms 1=0 ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,設置 nl=n ; 如果設置部件進度表下道工序或父部件第一道裝配工序的開始時間為ksrq,ksrq與當班次上班時間的時長為tysc,那么tysc= (hw-hsl)*60+(mw-msl)+zysc, 如果tysc〈=210且(mw + zysc)〈60,那么ksrq的分鐘數為mw+zysc,小時數為hw ; 如果 tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小時數為 hw +int ((mw + zysc)/60),分鐘數為 mw=mod ((mw + zysc), 60);·8)m=m+l,讀取記錄的下班次數據;如果m=4,那么m=l,n=n+l,讀取工序時間表工序名稱為gxmc、有效性為O、次序號為n-m的記錄;如果讀到記錄,設工序時間表的起始時間為的小時數和分鐘數分別為hs2和ms2 ;記錄下班次的上班時間的小時數和分鐘數分別為hs和ms ;如果 m=l,賦值 hs=8, ms=0 ;如果 m=2,賦值 hs=12, ms=30 ;如果 m=3,賦值 hs=17,ms=0 ;如果讀不到工序時間表的記錄,那么回到步驟8)開始處循環,至到讀到記錄,χχ= (n-nl) *1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ; 如果tysc>210且tysc〈=xx,那么ksrq的小時數為hs2,分鐘數為ms2 ;如果tysc>xx且tysc<=yy,那么非作業時長 zysc=zysc_ ((n-nl) *1440+ (hs2_hw) *60+ (ms2_mw)) ;ksrq 的小時數為 hs2 +int ((ms2 + zysc ) /60),分鐘數為 mod((ms2 + zysc), 60);如果 tysc>yy,那么設置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步驟7)開始處循環,直到tysc>xx不成立; 9)運用多對多關系的對應等方法找出部件進度表下道工序或父部件第一道裝配工序,將開始時間和有效性賦值 判斷部件進度表記錄工序有沒有下道工序,如果部件進度表本條記錄的工序有下道工序,設置它的開始時間為ksrq,同時設置本條記錄的下道工序的有效性字段為1,同時讀取本條記錄的下道工序的工序號、工序名稱,寫入本條記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向; 如果部件進度表本條記錄的工序沒有下道工序,則到產品明細表中查找產品代號、部件代號、所屬產品、所屬部件均對應的記錄的單臺數記為I jsl,說明子部件與父部件的關系為Ijsl條子部件對應I條父部件;讀取工序號為1,序號為O的同批次號的父部件的所有子部件,其記錄數記作xxl,再讀取工序號為1,序號為O的同批次號的父部件,其記錄數記作xx2,兩者相除的結果記作xx3,表明父部件被查找xx3次其有效性就可以改為1,這樣就建立了對于多個父部件對應多個子部件的多對多關系的對應的唯一性; 如果該部件的工序號為I的父部件的記錄的開始時間不為空,那么記作ksrql,取ksrq與ksrql的最大值為ksrq,那么該部件的父部件的工序號為I的記錄的開始時間設置為ksrq,同時讀取其父部件的工序號和工序名稱,寫入該子部件記錄轉向工序號、轉向工序名字段,做為工件完工勾選后的流轉方向; 如果父部件的子部件對應了 xx3次父部件,則將該父部件的有效性改為I ; 10)用DO…LOOPWHILE condition循環語句,進行步驟4)、5)、6)、7)、8);按這種方法一直下去,當部件進度表正在確定的所有部件均沒有父部件,且其對應的所有裝配工序的開始時間和結束時間都確定后,即部件進度表的開始時間、結束時間、順序號都生成后,或者工序時間表的所有記錄的有效性都為I后,循環結束; 11)將部件進度表不設置條件過濾,如果轉向工序號為1,說明轉向父部件,轉向工序號不為1,說明轉向下道工序,依此規則依次查找每條記錄轉向工序號、轉向工序名對應的順序號,填入記錄的轉向順序號字段。
5.根據權利要求I所述的離散型企業智能作業控制方法,其特征在于運用天數、班次、邊界時間等字段的生成方法和三層循環中變量和數據的關聯方法,將部件裝配的最佳路徑以背景色不同的甘特圖方式實時顯示控制工位作業的時間,方法如下 I)部件進度表按次序號、順序號、開始時間、批次號、所屬產品、所屬部件、產品代號、部件代號、列號、序號字段升序排序; 2)部件進度表按工序名稱字段過濾條件進行過濾; 3)測試部件進度表的記錄數,如果等于O,表示部件進度表按上述條件過濾后沒有記錄,退出本步驟; 4)如果部件進度表的記錄數大于O,設置循環語句依次讀取從部件進度表的每一條記錄; 5)讀取部件進度表的第一條記錄的次序號,用函數找出在次序表中按從左到右的位置,記作I」[5];取次序號從左第I個到第(I」[5]-I)個字符串,轉換成Integer類型值,賦值給甘特圖表的天數字段,從第(I」[5] +1)個到最左邊字符串,轉換成Integer類型值,賦值給甘特圖表班次字段;設班次字段用變量m表示;則111的值為1、2或3 ;如果m=l, 那么 hsl=8, ms I =O ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ; 讀取部件進度表第一條記錄的順序號賦值給甘特圖表的順序號字段; 讀取部件進度表的第一條記錄的開始時間賦給變量ksrq,結束時間賦值給變量wcrq ; 讀取部件進度表的第一條記錄的產品代號賦值給變量cpdh,部件代號賦值給變量Ijdh ; 判斷部件進度表記錄的時間在甘特圖表半天21個時間段的哪一段,過程是如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <10,同時(hour (wcrq) -hsl)*60+ (Minute (wcrq) -msl) >0則查找甘特圖表本條記錄SlO字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 SlO 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <20,同時(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >10則查找甘特圖表本條記錄S20字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 S20 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <30,同時(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >20則查找甘特圖表本條記錄S30字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 S30 字段; ……用同樣的方法一直到判斷部件進度表記錄的時間是否在甘特圖表半天第21個時間段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同時(hour (wcrq)-hsI)*60+ (Minute (wcrq) -msl) >200則查找甘特圖表本條記錄S210字段是否有數據,如果沒有,將變量string (cpdh+,-,+ljdh)賦值給S210字段; 6)讀取部件進度表的第二條記錄的次序號賦值給字符型變量zcc,用函數找出在zee中按從左到右的位置,記作I」;取zcc從左第I個到第(I」[5]-I)個字符串,轉換成Integer類型值賦值給數值型變量η ;從第(I」[5]+1)個到最左邊字符串,轉換成Integer類型值賦值給數值型變量m,讀取部件進度表第二條記錄的順序號設置給數值型變量I」;查找甘特圖表中天數等于n,班次等于m,順序號等于I」的記錄,如果查找到,表明甘特圖表有符合條件的記錄,記作li_row ;如果查不到,表明甘特圖表沒有符合條件的記錄,在甘特圖表插入新的記錄,記錄號為li_row,插入的甘特圖表的新記錄的天數字段賦值為n,班次字段賦值為m,順序號字段賦值為I」;m 的值為 1、2 或 3 ;如果 m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;讀取部件進度表的第二條記錄的開始時間賦給變量ksrq,結束時間賦值給變量wcrq ;讀取部件進度表的第二條記錄的產品代號賦值給變量cpdh,部件代號賦值給變量Ijdh ; 判斷部件進度表記錄的時間在甘特圖表半天21個時間段的哪一段,過程是如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <10,同時(hour (wcrq) -hsl)*60+ (Minute (wcrq) -msl) >0則查找甘特圖表本條記錄SlO字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 SlO 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <20,同時(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >10則查找甘特圖表本條記錄S20字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 S20 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <30,同時(hour (wcrq) -hsl) *60+(Minute (wcrq)-msl) >20則查找甘特圖表本條記錄S30字段是否有數據,如果沒有,將變量 string (cpdh+,-,+ljdh)賦值給 S30 字段; ……用同樣的方法一直到判斷部件進度表記錄的時間是否在甘特圖表半天第21個時間段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同時(hour (wcrq)-hsI) *60+ (Minute (wcrq) -msl) >200則查找甘特圖表本條記錄S210字段是否有數據,如果沒 有,將變量string (cpdh+,-,+ljdh)賦值給S210字段; 7)依次讀取部件進度表的第三條到最后一條記錄,用步驟6)的方法完成甘特圖表數據的賦值。
6.根據權利要求I所述的離散型企業智能作業控制方法,其特征在于作業開工勾選調用作業指導書進行作業和作業進程返饋,方法如下 (O自動獲取作業時間的具體步驟如下 1)為讀取服務器時間設置一個游標declareget_date cursor for selectgetdate (); 2)打開游標openget_date ; 3)設置給變量tt_d :fetch get_date into : tt_d ; 4)關閉游標closeget_date。
(2)作業“開工勾選”的步驟是 1)當作業人員開始作業時,在顯饋終端的一體機上,用本人設置的密碼登錄,顯示甘特圖窗口 ; 2)在甘特圖窗口,雙擊甘特圖表,在上方部件進度表經過過濾的相關記錄的記錄行雙擊進行“開工勾選”; 3)程序自動獲取勾選時服務器的時間,設置給部件進度表對應記錄的開始時間字段;設置部件進度表該記錄的有效性字段的值為3 ; 4)同時作業情況表插入一條記錄,將作業情況表插入的記錄的批次號、產品代號、部件代號、部件名稱、工序號、工序名稱、開始時間、作業人員字段賦值。
(3)作業完成后,作業人員需進行作業“完工勾選”;作業“完成勾選”的步驟是 I)當作業人員完成作業后,在顯饋終端一體機上在用本人設置的密碼登錄的作業指導書窗口,單擊“完工勾選”按鈕進行“完工勾選”,作業指導書窗口退出;2)進行作業“完工勾選”時,讀取服務器時間設置給部件進度表對應記錄的結束時間;填報實際作業時長設置給部件進度表的作業時長字段; 3)設置部件進度表中該記錄的有效性字段的值為5; 4)根據產品代號、部件代號、批次號、工序號、作業人員信息查找對應記錄、找到后,將獲取的服務器時間賦值給結束時間; 5)如果作業沒有完成,不需要進行“完工勾選”,想退出作業指導書窗口,單擊“退出”按鈕。(4)作業發生異常時,作業人員需進行作業“異常反饋”;作業“異常反饋”的步驟是 1)對已作“開工勾選”的作業對象,在作業過程中,單擊作業指導書窗口“異常反饋”按鈕; 2)當作業發生異常時單擊“異常反饋”按鈕,進入“異常反饋”窗口; 3)部件進度表中該記錄的有效性為4;作業人員填報作業發生的異常現象;同時填寫因異常導致的作業時長延長的時間; 4)技術人員到現場解決異常后,填寫異常原因和解決措施; 5)部件進度表數據刷新時,按新的作業時長調整數據。
全文摘要
本發明公開了一種離散型企業智能作業控制方法,首先對多種具有不固定子部件級數和多道裝配工序的產品采用不固定嵌套循環層數和數組構建產品結構樹,并計算生產能力初定各工序單元工位數;在考慮產品從屬關系、產品裝配流程、生產計劃時間、產品配套時間、缺件補齊時間、異常推遲時間、實際完成時間、產品優先級、正常上班時間各工序單元工位數和加班時間各工序單元工位數十種因素自動尋找部件裝配的最佳路徑,該最佳路徑以甘特圖方式實時顯示控制現場作業,作業開工勾選調用作業指導書進行作業和作業進程返饋,從而實現離散型企業智能的作業控制。本發明能夠提升企業快速響應能力,提高產品質量和生產率,確保履約率。
文檔編號G06Q10/06GK102930397SQ20121043313
公開日2013年2月13日 申請日期2012年11月1日 優先權日2012年11月1日
發明者陳友春, 許清, 王龍瑩, 陳國勝, 胡文花, 唐曉冬, 聶永海, 張云龍, 吳慶, 曹磊, 郭曉丹, 馬寧, 程曉敏, 付羽翀, 趙曉寶, 季冬, 孫士亮 申請人:北方信息控制集團有限公司