計算機控制技術(shù)實驗報告DOC_第1頁
計算機控制技術(shù)實驗報告DOC_第2頁
計算機控制技術(shù)實驗報告DOC_第3頁
計算機控制技術(shù)實驗報告DOC_第4頁
計算機控制技術(shù)實驗報告DOC_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、計算機控制技術(shù)實驗報告 實驗一 信號的采樣與保持一、實驗?zāi)康?熟悉信號的采樣和保持過程。2學(xué)習和掌握香農(nóng)(采樣)定理。3學(xué)習用直線插值法和二次曲線插值法還原信號。二、實驗設(shè)備PC 機一臺,TD-ACS實驗系統(tǒng)一套,i386EX 系統(tǒng)板一塊。三、實驗原理香農(nóng)(采樣)定理:若對于一個具有有限頻譜()的連續(xù)信號進行采樣,當采樣頻率滿足時,則采樣函數(shù)能無失真地恢復(fù)到原來的連續(xù)信號。為信號的最高頻率,為采樣頻率。四實驗內(nèi)容 1采樣與保持編寫程序,實現(xiàn)信號通過 A/D 轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字量送到控制計算機,計算機再把數(shù)字量送到 D/A 轉(zhuǎn)換器輸出。實驗線路圖如圖2-1所示,圖中畫“”的線需用戶在實驗中自行接好

2、,其它線系統(tǒng)已連好。圖2-1 采樣保持線路圖控制計算機的“OUT1”表示386EX內(nèi)部1#定時器的輸出端,定時器輸出的方波周期定時器時常,“IRQ7”表示386EX內(nèi)部主片8259的“7”號中斷,用作采樣中斷。正弦波單元的“OUT”端輸出周期性的正弦波信號,通過模數(shù)轉(zhuǎn)換單元的“IN7”端輸入,系統(tǒng)用定時器作為基準時鐘(初始化為10ms),定時采集“IN7”端的信號,轉(zhuǎn)換結(jié)束產(chǎn)生采樣中斷,在中斷服務(wù)程序中讀入轉(zhuǎn)換完的數(shù)字量,送到數(shù)模轉(zhuǎn)換單元,在“OUT1”端輸出相應(yīng)的模擬信號。由于數(shù)模轉(zhuǎn)換器有輸出鎖存能力,所以它具有零階保持器的作用。采樣周期T= TK10ms,TK的范圍為01 FFH,通過修改

3、TK就可以靈活地改變采樣周期,后面實驗的采樣周期設(shè)置也是如此。零階采樣保持程序流程圖如圖2-2所示。圖2-2 零階采樣保持程序流程圖實驗步驟:(1)參考流程圖2-2編寫零階保持程序,編譯、鏈接。(2)按照實驗線路圖2-1接線,檢查無誤后開啟設(shè)備電源。(3)用示波器的表筆測量正弦波單元的“OUT”端,調(diào)節(jié)正弦波單元的調(diào)幅、調(diào)頻電位器及撥動開關(guān),使得“OUT”端輸出幅值為3V,周期1S的正弦波。(4)加載程序到控制機中,將采樣周期變量“Tk”加入到變量監(jiān)視中,運行程序,用示波器的另一路表筆觀察數(shù)模轉(zhuǎn)換單元的輸出端“OUT1”。(5)增大采樣周期,當采樣周期0.5S時,即Tk32H時,運行程序并觀測

4、數(shù)模轉(zhuǎn)換單元的輸出波形應(yīng)該失真,記錄此時的采樣周期,驗證香農(nóng)定理。2信號的還原編寫程序,分別用直線插值法和二次曲線插值法還原信號。從香農(nóng)定理可知,對于信號的采集,只要選擇恰當?shù)牟蓸又芷?,就不會失去信號的主要特征。在實際應(yīng)用中,一般總是取實際采樣頻率比大,如:。但是如果采用插值法恢復(fù)信號,就可以降低對采樣頻率的要求,香農(nóng)定理給出了采樣頻率的下限,但是用不同的插值方法恢復(fù)信號需要的采樣頻率也不相同。(1)直線插值法(?。├檬?.2 -1在點(X0,Y0)和(X1,Y1)之間插入點(X,Y)。其中:X1X0為采樣間隔,Y1Y0分別為X1和X0采樣時刻的AD采樣值。(2)二次曲線插值法(?。浩渲校?/p>

5、直線插值與二次曲線插值程序流程圖如圖2-3所示。圖2-3 直線插值與二次曲線插值程序流程圖實驗步驟:(1)參考流程圖2-3分別編寫直線插值和二次曲線插值程序,并編譯、鏈接。(2)按照線路圖2-1接線,檢查無誤后,開啟設(shè)備電源。調(diào)節(jié)正弦波單元的調(diào)幅、調(diào)頻電位器,使正弦波單元輸出幅值為3V,周期1S的正弦波。(3)分別裝載并運行程序,運行程序前將采樣周期變量Tk加入到變量監(jiān)視中,方便實驗中觀察和修改。用示波器觀察數(shù)模轉(zhuǎn)換單元的輸出,和零階保持程序的運行效果進行比較。由上述結(jié)果可以看出:在采樣頻率Ws =10Wmax時,用三種方法還原信號,直線插值要好于零階保持,二次曲線插值好于直線插值。采用合理的

6、插值算法可以降低信號的失真度,在允許的范圍內(nèi)可以有效地降低對采樣頻率的要求。(4)(3)中是在同一采樣頻率下,比較三種方法還原信號的效果,實驗中也可比較一種還原方法在不同采樣頻率下的效果。對于零階保持來說:當采樣頻率信號頻率的10倍時,即信號的還原效果較好。對于直線插值來說:當采樣頻率信號頻率的5倍時,即信號的還原效果較好。對于二次曲線插值來說:當采樣頻率信號頻率的3倍時。信號的還原效果較好。五實驗結(jié)果 采樣周期Tk=05H時的輸出波形:采樣周期Tk=33H時的輸出波形為:由得到的實驗結(jié)果可以看出:采樣周期 Tk=05H時,輸出波形與原來基本相同;Tk32H時輸出波形產(chǎn)生失真。信號還原實驗結(jié)果

7、:Tk=0AH時,三種方法還原得到的結(jié)果:直線差值的輸出波形:二次曲線插值的輸出波形:零階保持輸出波形:實驗二 數(shù)字濾波一、實驗?zāi)康?學(xué)習和掌握一階慣性濾波。2學(xué)習和掌握四點加權(quán)濾波。二、實驗設(shè)備PC 機一臺,TD-ACS實驗系統(tǒng)一套,i386EX 系統(tǒng)板一塊。三、實驗原理一般現(xiàn)場環(huán)境比較惡劣,干擾源比較多,消除和抑制干擾的方法主要有模擬濾波和數(shù)字濾波兩種,由于數(shù)字濾波方法成本低、可靠性高、無阻抗匹配、靈活方便等特點被廣泛應(yīng)用。圖3-1數(shù)字濾波方框圖(1)一階慣性濾波:相當于傳函的數(shù)字濾波器,由一階差分法可得近似式: 其中,為當前采樣時刻的輸入,為當前采樣時刻的輸出,為前一采樣時刻的輸出,為采

8、樣周期,。(2)四點加權(quán)濾波:四點加權(quán)濾波算法公式:其中,為當前采樣時刻的輸入,為前一采樣時刻的輸入,為前一采樣時刻的輸出。數(shù)字濾波程序流程圖如圖3-2所示。圖3-2 數(shù)字濾波程序流程圖實驗中的參數(shù):1a、a、A1、A2、A3、A4為十進制2位小數(shù)(BCD碼),取值范圍:0.00 0.99,只須對應(yīng)存入0099。程序中將其轉(zhuǎn)換成二進制小數(shù),再按算式進行定點小數(shù)運算。四實驗內(nèi)容分別編寫一階慣性濾波程序和四點加權(quán)濾波程序,將混合干擾信號的正弦波送到數(shù)字濾波器,并用示波器觀察經(jīng)過濾波后的信號。實驗線路圖如圖3-3所示,圖中畫“”的線需用戶在實驗中自行接好,運放單元需用戶自行搭接。圖3-3 數(shù)字濾波實

9、驗線路圖控制計算機的“OUT1”表示386EX內(nèi)部1定時器的輸出端,定時器輸出的方波周期定時器時常,“IRQ7”表示386EX 內(nèi)部主片8259的7號中斷,用作采樣中斷。電路中用RC電路將S端方波微分,再和正弦波單元產(chǎn)生的正弦波疊加。注意R點波形不要超過5V,以免數(shù)字化溢出。計算機對有干擾的正弦信號R通過模數(shù)轉(zhuǎn)換器采樣輸入,然后進行數(shù)字濾波處理,去除干擾,最后送至數(shù)模轉(zhuǎn)換器變成模擬量C輸出。五、實驗步驟1. 參照流程圖3-2分別編寫一階慣性和四點加權(quán)程序,檢查無誤后編譯、鏈接。2. 按實驗線路圖3-3接線,檢查無誤后開啟設(shè)備電源。調(diào)節(jié)正弦波使其周期約為2S,調(diào)信號源單元使其產(chǎn)生周期為100ms

10、的干擾信號(從“NC”端引出),調(diào)節(jié)接線圖中的兩個47K電位器使正弦波幅值為3V,干擾波的幅值為0.5V。3. 分別裝載并運行程序,運行前可將“TK”加入到變量監(jiān)視中,方便實驗中觀察和修改。用示波器觀察R點和C點,比較濾波前和濾波后的波形。4. 如果濾波效果不滿意,修改參數(shù),再運行程序,觀察實驗效果。六實驗結(jié)果一階慣性濾波輸出波形:四點加權(quán)濾波輸出波形:由實驗結(jié)果可以得到此實驗一階慣性濾波的效果更好,其更有效的濾去了噪聲干擾信號。實驗四 積分分離法PID控制一、實驗?zāi)康?了解PID參數(shù)對系統(tǒng)性能的影響2學(xué)習湊試法整定PID參數(shù)3掌握積分分離法PID控制規(guī)律二、實驗設(shè)備PC 機一臺,TD-ACS

11、實驗系統(tǒng)一套,i386EX 系統(tǒng)板一塊三、 實驗原理根據(jù)系統(tǒng)偏差的比例(P)、積分(I)和微分(D)進行控制的調(diào)節(jié)器簡稱為PID調(diào)節(jié)器(也稱為PID控制器),是連續(xù)系統(tǒng)中技術(shù)成熟、應(yīng)用最為廣泛的一種調(diào)節(jié)器,其控制規(guī)律為:在計算機控制系統(tǒng)中,PID控制規(guī)律的實現(xiàn)必須用數(shù)值逼近的方法。當采樣周期相當短時,用求和代替積分、用后向差分代替微分,使模擬PID離散化變?yōu)椴罘址匠?。?shù)字 PID 控制算法可以表示為位置式 PID和增量式 PID兩種。(1)位置式 PID 控制算法為:(2)增量式 PID 控制算式為:其中,為采樣周期,為采樣序號,為第次采樣調(diào)節(jié)器輸出,為第次采樣誤差值,為第次采樣誤差值。增量式

12、與位置式相比具有以下優(yōu)點:1增量式算法與最近幾次采樣值有關(guān),不需要進行累加,因此,不易產(chǎn)生累積誤差,控制效果較好。2增量式中,計算機只輸出增量,誤動作(計算機故障或干擾)影響小。3在位置式中,由手動到自動切換時,必須使輸出值等于執(zhí)行機構(gòu)的初始值,而增量式只與本次的誤差值有關(guān),更易于實現(xiàn)手動到自動的無擾動切換。4增量式控制算法因其特有的優(yōu)點在控制系統(tǒng)中應(yīng)用比位置式更加廣泛。為了便于實驗參數(shù)的調(diào)整,下面討論PID參數(shù)對系統(tǒng)性能的影響:(1)增大比例系數(shù)KP一般將加快系統(tǒng)的響應(yīng),在有靜差的情況下有利于減小靜差。但過大的比例系數(shù)會使系統(tǒng)有較大的超調(diào),并產(chǎn)生振蕩,使系統(tǒng)穩(wěn)定性變壞。(2)增大積分時間參數(shù)

13、TI有利于消除靜差、減小超調(diào)、減小振蕩,使系統(tǒng)更加穩(wěn)定,但系統(tǒng)靜差的消除將隨之減慢。(3)增大微分時間參數(shù)TD有利于加快系統(tǒng)響應(yīng),使超調(diào)量減小,系統(tǒng)穩(wěn)定性增加,但系統(tǒng)對擾動的抑制能力減弱,對擾動有較敏感的響應(yīng)。在調(diào)整參數(shù)時,采用湊試法。參考以上參數(shù)對控制過程的影響趨勢,對參數(shù)實行“先比例,后積分,再微分”的步驟。(1)首先整定比例部分。將比例系數(shù)KP由小變大,并觀察相應(yīng)的系統(tǒng)響應(yīng),直到響應(yīng)曲線超調(diào)小、反應(yīng)快。如果系統(tǒng)沒有靜差,或者靜差小到允許的范圍內(nèi),那么只需比例調(diào)節(jié)器即可。(2)如果在比例調(diào)節(jié)的基礎(chǔ)上系統(tǒng)的靜差不能滿足要求,則須加入積分作用。整定時首先置積分時間TI為一較大值,并將第1步整定

14、得到的比例系數(shù)KP縮?。?0),然后減小積分時間,使靜差得到消除。如果動態(tài)性能(過渡時間短)也滿意,則需PI調(diào)節(jié)器即可。(3)若動態(tài)性能不好,則需加入微分作用。整定時,使微分時間TD從0變大,并相應(yīng)的改變比例系數(shù)和積分時間,逐步湊試,直到滿意結(jié)果。由于PID三個參數(shù)有互補作用,減小一個往往可由幾個增大來補償,因此參數(shù)的整定值不唯一,不同的參數(shù)組合完全有可能得到同樣的效果。四實驗內(nèi)容本實驗中,采用位置式PID。在一般的PID控制中,當有較大的擾動或大幅度改變給定值時,會有較大的偏差,以及系統(tǒng)有慣性和滯后,因此在積分項的作用下,往往會使系統(tǒng)超調(diào)變大和長時間的波動,過渡時間變長。特別對于溫度、成份等

15、變化緩慢的過程,這一現(xiàn)象更為嚴重。為此,可采用積分分離PID控制算法,即:當偏差e(k)較大時,取消積分作用;當誤差e(k)較小時才加入積分作用。系統(tǒng)方塊圖如圖4-1所示, 是一個典型的 PID 閉環(huán)控制系統(tǒng)方塊圖,其硬件電路原理及接線圖如圖4-2所示,圖中畫“”的線需用戶在實驗中自行接好,對象需用戶在運放單元搭接。圖4-1 PID控制系統(tǒng)方塊圖圖4-2 積分分離法PID控制實驗線路圖控制計算機的“OUT1”表示386EX內(nèi)部1定時器的輸出端,定時器輸出的方波周期定時器時常,“IRQ7”表示386EX內(nèi)部主片8259的7號中斷,用作采樣中斷,“DIN0”表示386EX的I/O管腳P1.0,在這

16、里作為輸入管腳用來檢測信號是否同步。這里,系統(tǒng)偏差信號E通過模數(shù)轉(zhuǎn)換單元“IN7”端輸入,控制機的定時器作為基準時鐘(初始化為10ms),定時中斷采集“IN7”端的信號E,并進行PID計算,得到相應(yīng)的控制量,再把控制量送到數(shù)模轉(zhuǎn)換單元,由“OUT1”端輸出相應(yīng)的模擬信號,來控制對象系統(tǒng)。圖4-3是積分分離法 PID控制程序流程圖。圖4-3 積分分離法PID控制程序流程圖五、實驗步驟1根據(jù)參考流程圖4-3編寫實驗程序,檢查無誤后編譯、鏈接。2按照實驗線路圖4-2接線,檢查無誤后開啟設(shè)備電源。3調(diào)節(jié)信號源中的電位器及撥動開關(guān),使信號源輸出幅值為2V、周期6S的方波。確定系統(tǒng)的采樣周期以及積分分離值

17、。4裝載程序,將全局變量TK(采樣周期)、EI(積分分離值)、KP(比例系數(shù))、TI (積分系數(shù))和TD(微分系數(shù))加入變量監(jiān)視,以便實驗過程中觀察和修改。5運行程序,將積分分離值設(shè)為最大值7FH(相當于沒有引入積分分離),用示波器分別觀測輸入端R和輸出端C。6如果系統(tǒng)性能不滿意,用湊試法修改PID參數(shù),直到響應(yīng)曲線滿意,并記錄響應(yīng)曲線的超調(diào)量和過渡時間。7修改積分分離值為20H,記錄此時響應(yīng)曲線的超調(diào)量和過渡時間,并和未引入積分分離值時的響應(yīng)曲線進行比較。8將第6和第7步驟中較滿意的響應(yīng)曲線記錄下來。六實驗結(jié)果采樣周期TK =05H;比例系數(shù)KP=6100H;積分系數(shù)TI=0018H;微分系

18、數(shù)TD=000BH。未引入積分分離值的響應(yīng)曲線(即EI(積分分離值)=7FH時):積分分離值為20H時的響應(yīng)曲線:由得到的實驗結(jié)果可以看到,引入積分分離法后,降低了系統(tǒng)輸出的超調(diào)量,并縮短了調(diào)節(jié)時間。積分分離值為10H時的響應(yīng)曲線:實驗五 直流電機閉環(huán)調(diào)速控制系統(tǒng)設(shè)計和實現(xiàn)一、實驗?zāi)康?了解閉環(huán)調(diào)速控制系統(tǒng)的構(gòu)成。2熟悉PID控制規(guī)律與算法實現(xiàn)。二、實驗設(shè)備PC 機一臺,TD-ACC+實驗系統(tǒng)一套,i386EX 系統(tǒng)板一塊。三、實驗內(nèi)容典型的直流電機調(diào)速實驗的系統(tǒng)方框圖如圖11-1所示:圖11-1 典型的直流電機調(diào)速實驗的系統(tǒng)方框圖根據(jù)系統(tǒng)方框圖,直流電機閉環(huán)調(diào)速控制系統(tǒng)實驗線路圖設(shè)計如圖11

19、-2所示,實驗中將圖中畫“”的線接好??刂茩C算機的“DOUT0”表示386EX的I/O管腳P2.0,輸出PWM脈沖經(jīng)驅(qū)動后控制直流電機,“IRQ7”表示386EX內(nèi)部主片8259的7號中斷,用作測速中斷。圖11-2 直流電機閉環(huán)調(diào)速控制系統(tǒng)實驗線路圖實驗中,用系統(tǒng)的數(shù)字量輸出端口“DOUT0”來模擬產(chǎn)生PMW脈寬調(diào)制信號,構(gòu)成系統(tǒng)的控制量,經(jīng)驅(qū)動電路驅(qū)動后控制電機運轉(zhuǎn)。霍爾測速元件輸出的脈沖信號記錄電機轉(zhuǎn)速構(gòu)成反饋量。在參數(shù)給定情況下,經(jīng)PID運算,電機可在控制量作用下,按給定轉(zhuǎn)速閉環(huán)運轉(zhuǎn)。系統(tǒng)定時器定時1ms,作為系統(tǒng)采樣基準時鐘;測速中斷用于測量電機轉(zhuǎn)速。圖11-3直流電機閉環(huán)調(diào)速控制系統(tǒng)

20、程序流程圖四、實驗步驟1參照圖11-3的程序流程圖,其中的PID子程序采用積分分離法PID,編寫實驗程序,編譯、鏈接。2按圖11-2接線,檢查無誤后開啟設(shè)備電源,將編譯鏈接好的程序裝載到控制機中。3打開專用圖形界面,運行程序,觀察電機轉(zhuǎn)速,分析其響應(yīng)特性。4若不滿意,改變參數(shù):積分分離值Iband、比例系數(shù)KPP、積分系數(shù)KII、微分系數(shù) KDD的值后再觀察其響應(yīng)特性,選擇一組較好的控制參數(shù)并記錄下來。表11-1 控制參數(shù)表項目 參數(shù)IBANDKPPKIIKDD超調(diào)穩(wěn)定2%時間1例程中參數(shù)響應(yīng)特性0060H1060H0010H0020H15%48秒2去掉IBAND0000H1060H0010H

21、0020H20%5.2秒3自測一組較好參數(shù)0010H6100H0018H000BH8%2.5秒5注意:在程序調(diào)試過程中,有可能隨時停止程序運行,此時DOUT0的狀態(tài)應(yīng)保持上次的狀態(tài)。當DOUT0為1時,直流電機將停止轉(zhuǎn)動;當DOUT0為0時,直流電機將全速轉(zhuǎn)動,如果長時間讓直流電機全速轉(zhuǎn)動,可能會導(dǎo)致電機單元出現(xiàn)故障,所以在停止程序運行時,最好將連接DOUT0的排線拔掉或按系統(tǒng)復(fù)位鍵。五、實驗結(jié)果電機響應(yīng)曲線:實驗總結(jié)及建議: 此實驗是我們的課程實驗,實驗的內(nèi)容是我們課堂上學(xué)習的相關(guān)知識的應(yīng)用,對我們來說這些知識是我們應(yīng)該好好掌握的。運用書本所學(xué),好好分析得到結(jié)論,有利于我們對知識的理解。由于

22、實驗的時間有限,我們無法對所有的內(nèi)容有很好的理解,我希望老師可以在試驗前給我們以很好的引導(dǎo),不要把時間浪費在不必要的事情上,而要有所著重點,在有限的時間里使我們盡可能學(xué)習更多的知識。在此,要謝謝老師在我們出現(xiàn)問題時的耐心解答。附錄資料:不需要的可以自行刪除 perl函數(shù)應(yīng)用一、進程處理函數(shù)1、進程啟動函數(shù)函數(shù)名eval調(diào)用語法eval(string)解說將string看作Perl語句執(zhí)行。正確執(zhí)行后,系統(tǒng)變量$為空串,如果有錯誤,$中為錯誤信息。例子$print = print (hello,worldn);eval ($print);結(jié)果輸出hello, world函數(shù)名system調(diào)用語法

23、system(list)解說list中第一個元素為程序名,其余為參數(shù)。system啟動一個進程運行程序并等待其結(jié)束,程序結(jié)束后錯誤代碼左移八位成為返回值。例子proglist = (echo, hello,world!);system(proglist);結(jié)果輸出hello, world!函數(shù)名fork調(diào)用語法procid = fork();解說創(chuàng)建程序的兩個拷貝-父進程和子進程-同時運行。子進程返回零,父進程返回非零值,此值為子程序的進程ID號。例子$retval = fork();if ($retval = 0) # this is the child process exit; # th

24、is terminates the child process else # this is the parent process結(jié)果輸出無函數(shù)名pipe調(diào)用語法pipe (infile, outfile);解說與fork合用,給父進程和子進程提供通信的方式。送到outfile文件變量的信息可以通過infile文件變量讀取。步驟:1、調(diào)用pipe2、用fork將程序分成父進程和子進程3、一個進程關(guān)掉infile,另一個關(guān)掉outfile例子pipe (INPUT, OUTPUT);$retval = fork();if ($retval != 0) # this is the parent p

25、rocess close (INPUT); print (Enter a line of input:n); $line = ; print OUTPUT ($line); else # this is the child process close (OUTPUT); $line = ; print ($line); exit (0);結(jié)果輸出$programEnter a line of input:Here is a test lineHere is a test line$函數(shù)名exec調(diào)用語法exec (list);解說與system類似,區(qū)別是啟動新進程前結(jié)束當前程序。常與fork

26、合用,當fork分成兩個進程后,子進程用exec啟動另一個程序。例子 結(jié)果輸出函數(shù)名syscall調(diào)用語法syscall (list);解說調(diào)用系統(tǒng)函數(shù),list第一個元素是系統(tǒng)調(diào)用名,其余為參數(shù)。如果參數(shù)是數(shù)字,就轉(zhuǎn)化成C的整型數(shù)(type int)。否則傳遞字符串的指針。詳見UNIX的幫助或Perl文檔。使用syscall必須包含文件syscall.pl,即:require (syscall.ph); 例子結(jié)果輸出2、進程終止函數(shù)函數(shù)名Die調(diào)用語法die (message);解說終止程序并向STDERR輸出錯誤信息。message可以為字符串或列表。如果最后一個參數(shù)不包含換行符,則程序文

27、件名和行號也被輸出。例子die (Cannot open input file);結(jié)果輸出Cannot open input file at myprog line 6.函數(shù)名warn調(diào)用語法warn (message);解說與die類似,區(qū)別是不終止程序。例子warn(Danger! Danger!n);結(jié)果輸出Danger! Danger!函數(shù)名exit調(diào)用語法exit (retcode);解說終止程序并指定返回值。例子exit(2);結(jié)果輸出無函數(shù)名kill調(diào)用語法kill (signal, proclist);解說給一組進程發(fā)送信號。signal是發(fā)送的數(shù)字信號,9為殺掉進程。proc

28、list是進程ID列表。詳見kill的UNIX幫助。例子結(jié)果輸出3、進程控制函數(shù)函數(shù)名sleep調(diào)用語法sleep (time);解說將程序暫停一段時間。time是停止的秒數(shù)。返回值為實際停止的秒數(shù)。例子sleep (5);結(jié)果輸出無函數(shù)名wait調(diào)用語法procid = wait();解說暫停程序執(zhí)行,等待子進程終止。不需要參數(shù),返回值為子進程ID,如果沒有子進程,返回-1。例子結(jié)果輸出函數(shù)名waitpid調(diào)用語法waitpid (procid, waitflag);解說暫停程序執(zhí)行,等待特定的子進程終止。procid為等待的進程ID例子$procid = fork();if ($proci

29、d = 0) # this is the child process print (this line is printed firstn); exit(0); else # this is the parent process waitpid ($procid, 0); print (this line is printed lastn);結(jié)果輸出$ programthis line is printed firstthis line is printed last$4、其它控制函數(shù)函數(shù)名caller調(diào)用語法subinfo = caller();解說返回調(diào)用者的程序名和行號,用于Perl D

30、ebugger。返回值為三元素的列表:1、調(diào)用處的包名2、調(diào)用者文件名3、調(diào)用處的行號例子結(jié)果輸出函數(shù)名chroot調(diào)用語法chroot (dir);解說改變程序的根目錄,詳見chroot幫助。例子結(jié)果輸出函數(shù)名local調(diào)用語法local($variable);解說在語句塊(由大括號包圍的語句集合)中定義局域變量,僅在此語句塊中起作用,對其的改變不對塊外同名變量造成影響。千萬不要在循環(huán)中使用,否則每次循環(huán)都定義一個新的局域變量!例子結(jié)果輸出函數(shù)名times調(diào)用語法timelist = times解說返回該程序及所有子進程消耗的工作時間。返回值為四個浮點數(shù)的列表:1、程序耗用的用戶時間2、程序

31、耗用的系統(tǒng)時間3、子進程耗用的用戶時間4、子進程耗用的系統(tǒng)時間例子結(jié)果輸出二、數(shù)學(xué)函數(shù)函數(shù)名sin調(diào)用語法retval = sin (value);解說參數(shù)為弧度值。函數(shù)名cos調(diào)用語法retval = cos (value);解說參數(shù)為弧度值。函數(shù)名atan2調(diào)用語法retval = atan2 (value1, value2);解說運算并返回value1除以value2結(jié)果的arctan值,單位為弧度,范圍在-PIPI。應(yīng)用例:角度轉(zhuǎn)化成弧度子程序。sub degrees_to_radians local ($degrees) = _; local ($radians);11: $radi

32、ans = atan2(1,1) * $degrees / 45;函數(shù)名sqrt調(diào)用語法retval = sqrt (value);解說平方根函數(shù)。value為非負數(shù)。函數(shù)名exp調(diào)用語法retval = exp (value);解說返回e的value次方。函數(shù)名log調(diào)用語法retval = log (value);解說以e為底的自然對數(shù)。函數(shù)名abs調(diào)用語法retval = abs (value);解說絕對值函數(shù)。(Perl 4中沒有)函數(shù)名rand調(diào)用語法retval = rand (num);解說隨機數(shù)函數(shù),返回0和整數(shù)num之間的一個浮點數(shù)。函數(shù)名srand調(diào)用語法srand (va

33、lue);解說初始化隨機數(shù)生成器。保證每次調(diào)用rand真正隨機。三、字符串處理函數(shù)函數(shù)名index調(diào)用語法position = index (string, substring, position);解說返回子串substring在字符串string中的位置,如果不存在則返回-1。參數(shù)position是可選項,表示匹配之前跳過的字符數(shù),或者說從該位置開始匹配。函數(shù)名rindex調(diào)用語法position = rindex (string, substring, position);解說與index類似,區(qū)別是從右端匹配。函數(shù)名length調(diào)用語法num = length (string);解說返

34、回字符串長度,或者說含有字符的數(shù)目。函數(shù)名pos調(diào)用語法offset = pos(string);解說返回最后一次模式匹配的位置。函數(shù)名substr調(diào)用語法substr (expr, skipchars, length)解說抽取字符串(或表達式生成的字符串)expr中的子串,跳過skipchars個字符,或者說從位置skipchars開始抽取子串(第一個字符位置為0),子串長度為length,此參數(shù)可忽略,意味著取剩下的全部字符。當此函數(shù)出現(xiàn)在等式左邊時,expr必須為變量或數(shù)組元素,此時其中部分子串被等式右邊的值替換。函數(shù)名study調(diào)用語法study (scalar);解說用一種內(nèi)部格式提

35、高變量的訪問速度,同一時刻只對一個變量起作用。函數(shù)名lcuc調(diào)用語法retval = lc(string);retval = uc(string);解說將字符串全部轉(zhuǎn)換成小/大寫字母。函數(shù)名lcfirstucfirst調(diào)用語法retval = lcfirst(string);retval = ucfirst(string);解說將第一個字母轉(zhuǎn)換成小/大寫。函數(shù)名quotameta調(diào)用語法newstring = quotemeta(oldstring);解說將非單詞的字母前面加上反斜線()。語句 : $string = quotemeta($string);等效于:$string = s/(W)

36、/$1/g;常用于模式匹配操作中,確保字符串中沒有字符被看作匹配操作符。函數(shù)名join調(diào)用語法join (joinstr, list);解說把字符串列表(數(shù)組)組合成一個長的字符串,在每兩個列表元素間插入串joinstr。函數(shù)名sprintf調(diào)用語法sprintf (string, fields);解說與printf類似,區(qū)別是結(jié)果不輸出到文件,而作為返回值賦給變量。例子$num = 26;$outstr = sprintf(%d = %x hexadecimal or %o octaln,$num, $num, $num);print ($outstr);結(jié)果輸出26 = 1a hexade

37、cimal or 32 octal四、標量轉(zhuǎn)換函數(shù)函數(shù)名chop調(diào)用語法$lastchar = chop (var);解說var可為變量或數(shù)組,當var為變量時,最后一個字符被刪除并賦給$lastchar,當var為數(shù)組/列表時,所有元素的最后一個字符被刪除,最后一個元素的最后一個字母賦給$lastchar。函數(shù)名chomp調(diào)用語法result = chomp(var);解說檢查字符串或字符串列表中元素的最后一個字符是否為由系統(tǒng)變量$/定義的行分隔符,如果是就刪除。返回值為實際刪除的字符個數(shù)。函數(shù)名crypt調(diào)用語法result = crypt (original, salt);解說用DES算

38、法加密字符串,original是將要加密的字符串,salt是兩個字符的字符串,定義如何改變DES算法,以使更難解碼。返回值為加密后的串。函數(shù)名hex調(diào)用語法decnum = hex (hexnum);解說將十六進制數(shù)(字符串形式)轉(zhuǎn)化為十進制數(shù)。函數(shù)名int調(diào)用語法intnum = int (floatnum);解說將浮點數(shù)舍去小數(shù)部分轉(zhuǎn)化為整型數(shù)。函數(shù)名oct調(diào)用語法decnum = oct (octnum);解說將八進制數(shù)(字符串形式)或十六進制數(shù)(0 x.形式)轉(zhuǎn)化為十進制數(shù)。函數(shù)名ord調(diào)用語法asciival = ord (char);解說返回單個字符的ASCII值,與PASCAL中

39、同名函數(shù)類似。函數(shù)名chr調(diào)用語法$char = chr (asciival);解說返回ASCII值的相應(yīng)字符,與PASCAL中同名函數(shù)類似。函數(shù)名pack調(diào)用語法formatstr = pack(packformat, list);解說把一個列表或數(shù)組以在實際機器存貯格式或C等編程語言使用的格式轉(zhuǎn)化(包裝)到一個簡單變量中。參數(shù)packformat包含一個或多個格式字符,列表中每個元素對應(yīng)一個,各格式字符間可用空格或tab隔開,因為pack忽略空格。除了格式a、A和外,重復(fù)使用一種格式多次可在其后加個整數(shù),如: $twoints = pack (i2, 103, 241);把同一格式應(yīng)用于所

40、有的元素則加個*號,如: $manyints = pack (i*, 14, 26, 11, 83);對于a和A而言,其后的整數(shù)表示要創(chuàng)建的字符串長度,重復(fù)方法如下: $strings = pack (a6 x 2, test1, test2);格式的情況比較特殊,其后必須加個整數(shù),該數(shù)表示字符串必須的長度,如果長度不夠,則用空字符(null)補足,如: $output = pack (a 6 a, test, test2);pack函數(shù)最常見的用途是創(chuàng)建可與C程序交互的數(shù)據(jù),例如C語言中字符串均以空字符(null)結(jié)尾,創(chuàng)建這樣的數(shù)據(jù)可以這樣做: $Cstring = pack (ax, $

41、mystring);下表是一些格式字符與C中數(shù)據(jù)類型的等價關(guān)系:字符 等價C數(shù)據(jù)類型CcharddoubleffloatiintIunsigned int (or unsigned)llongLunsigned longsshortSunsigned short完整的格式字符見下表。 格式字符 描述a用空字符(null)補足的字符串A用空格補足的字符串b位串,低位在前B位串,高位在前c帶符號字符(通常-128127)C無符號字符(通常8位)d雙精度浮點數(shù)f單精度浮點數(shù)h十六進制數(shù)串,低位在前H十六進制數(shù)串,高位在前i帶符號整數(shù)I無符號整數(shù)l帶符號長整數(shù)L無符號長整數(shù)n網(wǎng)絡(luò)序短整數(shù)N網(wǎng)絡(luò)序長整數(shù)

42、p字符串指針s帶符號短整數(shù)S無符號短整數(shù)u轉(zhuǎn)化成uuencode格式vVAX序短整數(shù)VVAX序長整數(shù)x一個空字節(jié)X回退一個字節(jié)以空字節(jié)(null)填充函數(shù)名unpack調(diào)用語法list = unpack (packformat, formatstr);解說unpack與pack功能相反,將以機器格式存貯的值轉(zhuǎn)化成Perl中值的列表。其格式字符與pack基本相同(即上表),不同的有:A格式將機器格式字符串轉(zhuǎn)化為Perl字符串并去掉尾部所有空格或空字符;x為跳過一個字節(jié);為跳過一些字節(jié)到指定的位置,如4為跳過4個字節(jié)。下面看一個和X合同的例子: $longrightint = unpack (*

43、X4 L, $packstring);此語句將最后四個字節(jié)看作無符號長整數(shù)進行轉(zhuǎn)化。下面看一個對uuencode文件解碼的例子:1 : #!/usr/local/bin/perl2 : 3 : open (CODEDFILE, /u/janedoe/codefile) |4 : die (Cant open input file);5 : open (OUTFILE, outfile) |6 : die (Cant open output file);7 : while ($line = ) 8 : $decoded = unpack(u, $line);9 : print OUTFILE (

44、$decoded);10: 11: close (OUTFILE);12: close (CODEDFILE); 當將pack和unpack用于uuencode時,要記住,雖然它們與UNIX中的uuencode、uudecode工具算法相同,但并不提供首行和末行,如果想用uudecode對由pack的輸出創(chuàng)建的文件進行解碼,必須也把首行和末行輸出(詳見UNIX中uuencode幫助)。函數(shù)名vec調(diào)用語法retval = vec (vector, index, bits);解說顧名思義,vec即矢量(vector)函數(shù),它把簡單變量vector的值看作多塊(維)數(shù)據(jù),每塊含一定數(shù)目的位,合起來

45、即一個矢量數(shù)據(jù)。每次的調(diào)用訪問其中一塊數(shù)據(jù),可以讀取,也可以寫入。參數(shù)index就象數(shù)組下標一樣,提出訪問哪一塊,0為第一塊,依次類推,要注意的是訪問次序是從右到左的,即第一塊在最右邊。參數(shù)bits指定每塊中的位數(shù),可以為1,2,4,8,16或32。例子1 : #!/usr/local/bin/perl2 : 3 : $vector = pack (B*, 11010011);4 : $val1 = vec ($vector, 0, 4);5 : $val2 = vec ($vector, 1, 4);6 : print (high-to-low order values: $val1 and

46、 $val2n);7 : $vector = pack (b*, 11010011);8 : $val1 = vec ($vector, 0, 4);9 : $val2 = vec ($vector, 1, 4);10: print (low-to-high order values: $val1 and $val2n); 結(jié)果high-to-low order values: 3 and 13low-to-high order values: 11 and 12函數(shù)名defined調(diào)用語法retval = defined (expr);解說判斷一個變量、數(shù)組或數(shù)組的一個元素是否已經(jīng)被賦值。e

47、xpr為變量名、數(shù)組名或一個數(shù)組元素。如果已定義,返回真,否則返回假。函數(shù)名undef調(diào)用語法retval = undef (expr);解說取消變量、數(shù)組或數(shù)組元素甚至子程序的定義,回收其空間。返回值始終為未定義值,此值與空串等效。五、數(shù)組和列表函數(shù)函數(shù)名grep調(diào)用語法foundlist = grep (pattern, searchlist);解說與同名的UNIX查找工具類似,grep函數(shù)在列表中抽取與指定模式匹配的元素,參數(shù)pattern為欲查找的模式,返回值是匹配元素的列表。例子list = (This, is, a, test);foundlist = grep(/tT/, lis

48、t);結(jié)果foundlist = (This, test);函數(shù)名splice調(diào)用語法retval = splice (array, slipelements, length, newlist);解說拼接函數(shù)可以向列表(數(shù)組)中間插入元素、刪除子列表或替換子列表。參數(shù)skipelements是拼接前跳過的元素數(shù)目,length是被替換的元素數(shù),newlist是將要拼接進來的列表。當newlist的長度大于length時,后面的元素自動后移,反之則向前縮進。因此,當length=0時,就相當于向列表中插入元素,而形如語句splice (array, -1, 0, Hello);則向數(shù)組末尾添加元素。而當newlist為空時就相當于刪除子列表,這時,如果length為空,就從第skipelements個元素后全部刪除,而刪除最后一個元素則為:splice (array, -1);這種情況下,返回值為被刪去的元素列表。函數(shù)名shift調(diào)用語法element = shift (arrayvar);解說刪去數(shù)組第一個元素

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論