【正文】
查找每一個(gè)子目錄下文件,這里利用了遞歸 Call TreeSearch(sSubDirs(Index), sFileSpec, sFiles()) Next Index TreeSearch = FileS End Function。 sDir amp。 sDir) And vbDirectory Then Index = Index + 1 39。 *.*, 16) Print 1, **** Do While Len(sDir) If sDir . And sDir .. Then 39。 K sDir = Dir Loop 39。 Str(Int(FileLen(sPath amp。 sDir Print 1, sDir amp。 sFileSpec) 39。存放子目錄名稱 Dim Index As Long Dim num1 As Integer Dim num2 As Integer If Right(sPath, 1) \ Then sPath = sPath amp。HFF = StrSen//在用戶每次選中一個(gè)或者取消選擇光盤時(shí)進(jìn)行的處理If (0).value 0 ThenSent_Com = Sent_Com + 1ReDim Preserve StrSen(Sent_Com)StrSen(Sent_Com) = (4).valueElseDim i As IntegerFor i = 1 To Sent_Com If StrSen(i) = (4).value Then Dim j As Integer If i Sent_Com Then For j = i To Sent_Com StrSen(j) = StrSen(j + 1) Next End If Sent_Com = Sent_Com 1 End IfNextEnd If光盤掃描功能實(shí)現(xiàn)的關(guān)鍵程序 Public Function TreeSearch(ByVal sPath As String, ByVal sFileSpec As String, sFiles() As String) As Long Static FileS As Long 39。 StrSen(0) = amp。39。39。39。39。39。39。39。39。39。39。//10hz //test_flag=0。 // Step=0。 Get_flag=0。 pluse1_count=0。// PORTC|=0x01。 }else{ //PORTCamp。 OCR1B=0。=~0x01。// }}//end else if(step_flag==2)else if(Step==6){ if(pluse1_countpluse1){ //PORTC|=0x01。pluse2_count=0。// pluse2_count++。 }}// end else if(step_flag==1)else if (Step==4){ //wait Step=5。 } else{ Step=4。 OCR1A=0。=~0x02。 pluse1_count=0。=0xfe。// PORTC|=0x01。 //PORTCamp。 OCR1B=0。Step=2。//4000}///////////////////////////////////////把整個(gè)取盤過程分解為 7 中狀態(tài),在不同狀態(tài)中進(jìn)行不同處理void timer1_ovf_isr(void){ //TIMER1 has overflowed47if (Step==1){pluse1_count=0。//3000 else if(pluse1_count3000) ICR1=0x0083。//2022 else if(pluse1_count2200) ICR1=0x00B8。//1000 else if(pluse1_count1600) ICR1=0x00A6。//600 else if(pluse1_count1000) ICR1=0x023f。//400hz 這兩種狀態(tài)不用變 PWM 的頻率 else if(pluse1_count800)//針對走過不同的脈沖數(shù)目來調(diào)整 PWM 輸出頻率 ICR1=0x047f。}}////////////////////////////TCCR1B = 0x12。46 else{ k。if (k==0)// LEDOUT(j,0x80)。//10hz 剛開始時(shí)不進(jìn)電機(jī)的啟動速度要比較慢///////////////////////////////j=address/8。//初始化脈沖計(jì)數(shù)為 0Step=1。pluse2=1000。else if(address=140)pluse1=(2862+64*(address122)/100)*address。else if(address=86)pluse1=(2849+(3*(address63)/10))*address。else if(address=51)pluse1=(2820+18*(address25)/10)*address。if(address=8)//分段計(jì)算pluse1=2546*address。七、附件主要程序清單45程序附件精度問題關(guān)鍵程序://////計(jì)算對應(yīng)位置上需要的脈沖數(shù)目void Get_Deal(unsigned long address){unsigned char i,j,k。增長了我關(guān)于機(jī)械設(shè)計(jì)和加工方面的諸多知識。其次,感謝華南理工大學(xué)的陳欽昌老師,田聯(lián)房老師,王孝洪老師,何建雄學(xué)長,楊躍學(xué)長,鐘春波學(xué)長、王磊學(xué)長,陳派林學(xué)長,他們都給予了我無私的幫助和指導(dǎo),使我增長了許多工程專業(yè)技術(shù)知識。3)用工業(yè)計(jì)算機(jī) PC104 作為控制核心,組成基于網(wǎng)絡(luò)的光盤管理裝置,提高產(chǎn)品品質(zhì)。以后會對結(jié)構(gòu)進(jìn)行改進(jìn),既保證速度,也保證精度,縮小用戶等待時(shí)間。 以直接應(yīng)用于家庭為一期目標(biāo):在產(chǎn)品化方面做一些提升,功能方面做一些精簡,如取消成本較高和復(fù)雜的自動取盤結(jié)構(gòu)和 PC 查詢功能,僅用單片機(jī)組成“實(shí)現(xiàn)隨意存、編碼查找和燈光位置指示”的靈巧系統(tǒng)等等。裝置經(jīng)進(jìn)一步改進(jìn)后,將申報(bào)相關(guān)的專利。如果采用層疊式綜合設(shè)計(jì)模式(這是下一步實(shí)用化和產(chǎn)品化的設(shè)計(jì)思路) ,則可以在書柜大小的空間內(nèi)放置 5 千到 8 千張光碟。2)該裝置的操作界面友好,操作流程簡便易懂,對使用者無任何基礎(chǔ)知識要求。該項(xiàng)技術(shù)以光碟儲存管理作為研究對象,實(shí)現(xiàn)“不需按分類和固定位置存放”當(dāng)前倉庫管理一種新理念,只要空間結(jié)構(gòu)合理,就可以運(yùn)用到其他物品倉庫管理上,具有十分廣泛的應(yīng)用前景和市場推廣價(jià)值。該設(shè)計(jì)思路的提出是為了幫助人們對光碟進(jìn)行隨意存放和自動查找,減輕人們管理光碟的負(fù)擔(dān),本項(xiàng)目目前雖然提交的僅是單元柜系統(tǒng),但完善后,可以應(yīng)用于圖書館、檔案館、電視臺、廣播電臺、博物館、資料室等需要管理大宗信息和資料的單位。這樣,軟件的實(shí)用性就大大增強(qiáng)了。使用這些信息,我在 VB 中利用 TreeView 和 ListView 控件把文件夾和文件名字分別再次生成樹。其實(shí)在掃描光盤信息時(shí),得到的主要是光盤目錄的信息,如下圖:圖 掃描保存的光盤目錄信息這里就利用了之前我學(xué)習(xí)的樹的遍歷知識,這里是使用了寬度優(yōu)先的算法,把每個(gè)文件夾中的文件和文件夾的名字信息分別保存起來。圖 測試中的光盤保鏢在實(shí)現(xiàn)了光盤信息的保存后,另外一個(gè)難題就是如何利用所保存的信息復(fù)現(xiàn)光盤的目錄結(jié)構(gòu)。41他能夠?qū)崿F(xiàn)對與已經(jīng)注冊的光盤就進(jìn)行讀取,沒有注冊的光盤就進(jìn)行提示。VB中有相應(yīng)的函數(shù)可以把這些信息提取出來。那么反過來,在輸入光碟信息時(shí),我是不是可以利用這個(gè)信息來讓電腦自動判斷某個(gè)光碟的信息是否已經(jīng)保存到管理軟件中,沒有的話就自動保存目錄結(jié)構(gòu)信息并且把這個(gè)光碟標(biāo)識信息保存起來。這樣可以防止用戶使用沒經(jīng)過批準(zhǔn)的光盤。這樣我想能不能僅僅把光盤的目錄結(jié)構(gòu)通過 CDROM 自動保存起來,這樣既方面用戶對內(nèi)容進(jìn)行搜索,而且可以減輕工作人員的工作量。雖然每個(gè)光碟的信息只需要一次輸入,但這樣當(dāng)需要輸入的光碟數(shù)量比較多的時(shí)候,就會大大增加工作人員的工作量,而且效率很低。這樣既方便了光盤存放的識別操作,也提高了空間的使用效率。2)電路設(shè)計(jì)方面的改進(jìn)在單層樣機(jī)中,光電檢測電路和指示燈是做在同一個(gè)電路板上的,加上必要的芯片,這個(gè)電路板占的面積比較大,降低了空間使用效率。在門上貼上畫圖,這樣不但更加美觀,而且起到防灰塵,防光照等效果。(a)結(jié)構(gòu)示意圖(b)實(shí)物照片圖 第二代光碟機(jī)40為了更加貼近實(shí)際使用的需要,每層光碟存放槽帶有自動打開的門。取多盤的最優(yōu)路徑規(guī)劃算法大大的提高了裝置取盤的效率。1)機(jī)械結(jié)構(gòu)方面的改進(jìn)在單層光碟存取裝置成功設(shè)計(jì)出來的基礎(chǔ)上,我設(shè)計(jì)出了兩層的光碟存取裝置。2)自動取拿:當(dāng)想從光碟存放槽中取拿需要的光碟時(shí),在計(jì)算機(jī)中輸入關(guān)鍵字(如光碟的名字等) ,用直接或模糊的方法即可在數(shù)據(jù)庫中方便地找到相關(guān)光碟的信息;相應(yīng)點(diǎn)擊選定取出按鈕后,系統(tǒng)自動尋找所要光碟的位置,并將信息發(fā)送到控制板,控制板通過地址選擇,確定光碟的位置,點(diǎn)亮指示光碟位置的指示燈;同時(shí)單片機(jī)發(fā)送相應(yīng)的脈沖數(shù),驅(qū)動電機(jī)旋轉(zhuǎn),選擇最優(yōu)路徑,拖動撥盤裝置依次運(yùn)行到所選擇光碟的位置處,啟動撥盤,將光碟自動撥出存放位置。平常將使用完的光碟存放在光碟槽中時(shí),首先通過光碟掃描裝置,對光碟上的標(biāo)識碼進(jìn)行掃描,此時(shí)計(jì)算機(jī)將自動識別光碟的名稱等相關(guān)信息;在光碟槽中任意選取一個(gè)空閑位置,將光碟放入,放置在光碟槽前面的一對光電檢測管,自動讀取光碟所處的位置,并將這個(gè)位置信號送入計(jì)算機(jī)系統(tǒng)。其操作流程可以分為兩個(gè)方面,一個(gè)是隨機(jī)存放,另一個(gè)是自動取拿。實(shí)驗(yàn)證明,通過以上算法優(yōu)化,可以準(zhǔn)確尋找最短路徑,并顯著提高路徑的搜索效率。最終,遍歷整個(gè)解空間得到最短路徑為(A,B,C,F,L)搜索光盤順序?yàn)椋?,2,3,4)路徑總長度為 15。*min_bestl?回溯到 K,到達(dá) K 結(jié)點(diǎn)時(shí),當(dāng)前路徑長度為 12,大于等于 =12。回溯到 B 點(diǎn),進(jìn)入 E 結(jié)點(diǎn)搜索。得到路徑為(A,B,C,F,L)其路徑總長度33為 15,比當(dāng)前 要少,于是令 =15,當(dāng)前的比較值 變*_bestl *_bestl *min_bestl?為 12。接著回溯*_17bestl?*min_bestl?到 D 點(diǎn),生成新的路徑為(A,B,D,I,O)其路徑長度為 21,比之前的大,非最優(yōu)解。利用這個(gè)標(biāo)準(zhǔn)再來看看圖 所示的問題。也就是指當(dāng)前的路徑總長度必須要小于 。 為當(dāng)前正在搜索的路徑總長度。設(shè) best_l 為當(dāng)前問題的最短路徑長度, 為其()li對應(yīng)結(jié)點(diǎn)間的距離。例如,當(dāng)確定了路線為(1,2,3)后,接著最后一個(gè)結(jié)點(diǎn)肯定就是 4。就是說,結(jié)點(diǎn) L,M,N ,O ,P,Q 都分別是對應(yīng)路徑的末節(jié)點(diǎn)。把它作為目前的剪枝標(biāo)準(zhǔn)值,32在接下來的回溯搜索過程中,只要發(fā)現(xiàn)當(dāng)前分支的總路程大于 18,就可以停止對其子結(jié)點(diǎn)的搜索了。例如,從跟結(jié)點(diǎn)A出發(fā),其子結(jié)點(diǎn)只有B,接著尋找B的子結(jié)點(diǎn)為C,D,E,從B到他們的距離分別為5,4,5,選取距離最短的結(jié)點(diǎn)為新活動結(jié)點(diǎn),這里選?。模绱祟愅?,得到路徑為(1,3,2,4) ,其代價(jià)為18。以上所述的回溯法在搜索過程中,其下層結(jié)點(diǎn)的選取是隨意的,而利用局部最優(yōu)思想,在搜索過程中,對于每一個(gè)活動結(jié)點(diǎn),先從其代價(jià)最小的一個(gè)分支開始。其思路是利用目標(biāo)消耗最少的特點(diǎn),把當(dāng)前支路中的消耗與當(dāng)前所求的最優(yōu)值比較,當(dāng)前支路中的消耗比當(dāng)前所求的最優(yōu)解還大時(shí),就沒有必要繼續(xù)往下搜索其他結(jié)點(diǎn)了。5)算法的改進(jìn)從以上可以看到,回溯法搜索過程中,需要對整個(gè)解空間進(jìn)行搜索,而在實(shí)際中,往往有些結(jié)點(diǎn)顯然不能生成最優(yōu)解,所以可以采用有效的策略避免無效搜索,提高回溯法的搜索效率。從結(jié)點(diǎn) N 算法返回至結(jié)點(diǎn) H,D,然后從D開始繼續(xù)