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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23、system(list)解說list中第一個元素為程序名,其余為參數。system啟動一個進程運行程序并等待其結束,程序結束后錯誤代碼左移八位成為返回值。例子proglist = (echo, hello,world!);system(proglist);結果輸出hello, world!函數名fork調用語法procid = fork();解說創建程序的兩個拷貝-父進程和子進程-同時運行。子進程返回零,父進程返回非零值,此值為子程序的進程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結果輸出無函數名pipe調用語法pipe (infile, outfile);解說與fork合用,給父進程和子進程提供通信的方式。送到outfile文件變量的信息可以通過infile文件變量讀取。步驟:1、調用pipe2、用fork將程序分成父進程和子進程3、一個進程關掉infile,另一個關掉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);結果輸出$programEnter a line of input:Here is a test lineHere is a test line$函數名exec調用語法exec (list);解說與system類似,區別是啟動新進程前結束當前程序。常與fork

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

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

28、list是進程ID列表。詳見kill的UNIX幫助。例子結果輸出3、進程控制函數函數名sleep調用語法sleep (time);解說將程序暫停一段時間。time是停止的秒數。返回值為實際停止的秒數。例子sleep (5);結果輸出無函數名wait調用語法procid = wait();解說暫停程序執行,等待子進程終止。不需要參數,返回值為子進程ID,如果沒有子進程,返回-1。例子結果輸出函數名waitpid調用語法waitpid (procid, waitflag);解說暫停程序執行,等待特定的子進程終止。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);結果輸出$ programthis line is printed firstthis line is printed last$4、其它控制函數函數名caller調用語法subinfo = caller();解說返回調用者的程序名和行號,用于Perl D

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

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

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

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

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

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

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

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

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

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

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

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

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

43、X4 L, $packstring);此語句將最后四個字節看作無符號長整數進行轉化。下面看一個對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的輸出創建的文件進行解碼,必須也把首行和末行輸出(詳見UNIX中uuencode幫助)。函數名vec調用語法retval = vec (vector, index, bits);解說顧名思義,vec即矢量(vector)函數,它把簡單變量vector的值看作多塊(維)數據,每塊含一定數目的位,合起來

45、即一個矢量數據。每次的調用訪問其中一塊數據,可以讀取,也可以寫入。參數index就象數組下標一樣,提出訪問哪一塊,0為第一塊,依次類推,要注意的是訪問次序是從右到左的,即第一塊在最右邊。參數bits指定每塊中的位數,可以為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); 結果high-to-low order values: 3 and 13low-to-high order values: 11 and 12函數名defined調用語法retval = defined (expr);解說判斷一個變量、數組或數組的一個元素是否已經被賦值。e

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

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

溫馨提示

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

評論

0/150

提交評論