自動化小論文_第1頁
自動化小論文_第2頁
自動化小論文_第3頁
自動化小論文_第4頁
自動化小論文_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于非線性PID的吊車防擺控制方法研究劉 通,高興泉*(信息與控制工程學院,自動0501班)摘要:針對非線性、變參數(shù)、強耦合的橋式吊車水平運動過程,采用非線性PID控制器(即PID參數(shù)隨跟蹤誤差的變化而變化)對吊車系統(tǒng)進行防擺和定位控制。仿真結果表明非線性PID控制器可以消除跟蹤靜差,縮短響應時間,提高閉環(huán)系統(tǒng)的抗干擾能力。關鍵詞:橋式吊車;防擺;非線性PID0 引 言以往,消除吊車擺動的方法多是利用吊車司機的操作經(jīng)驗。這種方式下不但操作人員的勞動強度大,而且人工控制方式精度差、效率低,已經(jīng)遠遠不能滿足現(xiàn)代生產(chǎn)、運輸?shù)男枰榇?,電子防搖技術的研究越來越得到研究者的重視。由于吊車系統(tǒng)是一個非常

2、復雜的系統(tǒng),定位控制和擺角控制相互影響,且在工作過程中繩長和吊物質量是變化的,這將影響到吊車系統(tǒng)快速消擺和精確定位等控制目標的實現(xiàn)。傳統(tǒng)的PID控制很難滿足控制精度的要求,本文提出了基于非線性PID的控制方案。仿真實驗結果表明:該控制方案可以消除系統(tǒng)靜差,縮短系統(tǒng)響應時間,抗干擾能力強。1 吊車系統(tǒng)數(shù)學模型的建立為了分析其本質,對吊車系統(tǒng)做簡化處理,給出如下假設:(1)對于橋式吊車系統(tǒng),由于吊車在進行裝卸作業(yè)時,大車一般處于靜止狀態(tài),故建立系統(tǒng)動力學模型時,可不考慮大車運動;(2)吊物只在垂直于水平面的平面內(nèi)運動且不計風力和空氣阻尼;(3)鋼絲繩的質量相對于吊物的質量可以忽略不計且其長度變化也

3、忽略不計?;谏厦娴募僭O,吊車系統(tǒng)的力學簡化模型如圖1所示。 圖1 吊車系統(tǒng)的力學簡化模型*指導教師:高興泉(1976-),男,吉林松原人,吉林化工學院副教授,主要研究方向:非線性系統(tǒng)控制,預測控制.聯(lián)系方式取系統(tǒng)的狀態(tài)變量為:小車的位置及速度,重物的擺角及擺角變化率;控制量為外力。則系統(tǒng)的狀態(tài)變量、輸入變量和輸出變量可記為:,。根據(jù)理論力學的相關原理,運用拉格朗日方程可得到橋式吊車水平運動過程的狀態(tài)空間表達式為: (1)式中:為小車的位置,為重物的擺角,是小車行走電機的水平拉力,為小車的質量,為重物的質量,為繩索的長度,為重力加速度,為小車與水平軌道的摩擦阻尼系數(shù)

4、。由系統(tǒng)的動態(tài)方程可見:橋式吊車水平運動系統(tǒng)是一個非線性、強耦合、變參數(shù)的復雜對象。2 吊車系統(tǒng)仿真實驗模型的建立針對式(1)所描述的橋式吊車水平運動系統(tǒng),運用MATLAB/Simulink中的相應模塊搭建吊車系統(tǒng)的仿真實驗模型,如圖2所示。圖2 橋式吊車運動系統(tǒng)的仿真實驗模型框圖3 非線性PID控制器的設計設一個一般系統(tǒng)的階躍響應曲線如圖3所示,采用該曲線可以分析非線性PID控制器增益參數(shù)的構造思想。圖3 一般系統(tǒng)的階躍響應曲線非線性PID控制器的設計原理如下:(1)比例參數(shù)增益:在響應時間段,為保證系統(tǒng)有較快的響應速度,比例增益參數(shù)在初始時應較大,同時為了減小超調量,希望誤差逐漸減小時,比

5、例增益也隨之減?。辉诙危瑸榱嗽龃蠓聪蚩刂谱饔?,減小超調,期望逐漸增大;在段,為了使系統(tǒng)盡快回到穩(wěn)定點,并不再產(chǎn)生大的慣性,期望逐漸減?。辉诙?,期望逐漸增大,作用與段相同。顯然,按上述變化規(guī)律,隨誤差變化的大致形狀如圖4.17所示,根據(jù)該圖可以構造如下非線性函數(shù): (2)式中,為正實常數(shù)。當誤差時,取最大值為;當時,取最小值;為的變化區(qū)間,調整的大小可以調整變化的速率。圖4 的變化趨勢曲線(2)積分增益參數(shù):積分增益參數(shù):當誤差信號較大時,希望積分增益不要太大,以防止響應產(chǎn)生振蕩,有利于減小超調量;而當誤差較小時,希望積分增益增大,以消除系統(tǒng)的穩(wěn)態(tài)誤差。根據(jù)積分增益的希望變化特性,積分增益參數(shù)的

6、變化形狀如圖4.18所示,其非線性函數(shù)可以表示為: (3)式中,為正實常數(shù),的取值范圍為,當時,取最大值。的取值決定了的變化快慢程度。圖5 的變化趨勢曲線(3)微分增益參數(shù):在響應時間段,微分增益參數(shù)應由小逐漸增大,這樣可以保證在不影響響應速度的前提下,抑制超調的產(chǎn)生;在段,繼續(xù)增大,從而增大反向控制作用,減小超調量。在時刻,減小微分增益參數(shù),并在隨后的段再次逐漸增大,抑制超調的產(chǎn)生。根據(jù)的變化要求,在構造的非線性函數(shù)時應考慮到誤差變化速率的符號。按上述變化規(guī)律,變化的大致形狀如圖4.19所示,根據(jù)該圖可以構造如下非線性函數(shù): (4)式中,為誤差變化速率,為正實常數(shù),為的最小值,為的最大值,當

7、時,調整的大小可調整的變化速率。圖6 的變化趨勢曲線4 系統(tǒng)仿真實驗吊車系統(tǒng)位置擺角雙閉環(huán)非線性PID控制器的仿真結構框圖如圖7所示。圖8為非線性PID控制器的仿真實驗框圖。仿真系統(tǒng)的參數(shù)設置如下: = 1 * GB3 位置PID控制器各非線性增益函數(shù)中的參數(shù)分別為:,; = 2 * GB3 擺角PID控制器各非線性增益函數(shù)中的參數(shù)分別為:,; = 3 * GB3 根據(jù)實際模型和仿真實驗的需要,選取系統(tǒng)參數(shù)如下:,。 圖7 吊車系統(tǒng)位置擺角雙閉環(huán)非線性PID控制器仿真結構框圖圖8 非線性PID控制器仿真結構框圖對于常規(guī)PID控制器,采用Simulink環(huán)境下PID參數(shù)的穩(wěn)定邊界整定法并結合其他

8、整定方法整定PID參數(shù),最終確定位置PID的仿真參數(shù)為:,;擺角前饋PID的仿真參數(shù)為:,。針對常規(guī)PID和非線性PID兩種不同的控制器,分別在不同的條件下進行仿真實驗,可以得到如圖9、圖10、圖11、圖12所示的響應曲線。圖9 當時的響應曲線對比圖圖10 當時的響應曲線對比圖圖11 當時的響應曲線對比圖圖12 當時的響應曲線對比圖5 結論本文根據(jù)非線性PID的設計原理,構造了非線性PID控制器來控制吊車系統(tǒng)的精確定位和快速消擺。由于非線性PID能夠在線實時調整PID控制器的增益參數(shù),因而大大提高了PID控制器的控制性能。通過仿真實驗曲線可以看出:采用非線性PID控制器進行控制時,系統(tǒng)不僅具有

9、良好的動態(tài)和穩(wěn)態(tài)性能,并且還有較強的魯棒性,控制效果要優(yōu)于常規(guī)PID控制。參考文獻Lee H H. Modeling and Control of a 2-dimensional Overhead CraneJ. In Proceedings of the ASME Dynamic Systems and Control Division Dallas, TX, DSC, 1997: 535-542.王樹青等編著.先進控制技術及應用M.北京:化學工業(yè)出版社,2001.167-174.徐致遠.橋式吊車水平運動過程智能防擺控制技術研究D.碩士學位論文.沈陽:沈陽工業(yè)大學,2005.28.薛定宇,陳

10、陽泉.基于MATLAB/Simulink的系統(tǒng)仿真技術與應用M.北京:清華大學出版社,2002.124-129.劉金琨.先進PID控制MATLAB仿真M. 北京:電子工業(yè)出版社社,2004.288-289.Anti-swing Control of Crane Based on Nonlinear PIDLIU Tong , GAO Xing-quan*(Class-0501, Major of Automation, College of Information &Control Engineering)Abstract: Aiming at the nonlinear, time-vary

11、ing and strong coupling horizon motion system of overhead crane, a nonlinear PID controller design technique where PID parameters change with tracking errors is proposed for the location and anti-swing. The results of simulation indicate that the steady-state error can be eliminated, and the respons

12、e time of system can be shortened. In addition, the disturbance attenuation level of the closed-loop system can be improved greatly.Key words: Overhead crane; Anti-swing; Nonlinear PID 附錄資料:不需要的可以自行刪除Pascal/C/C+語句對比(補充版)一、Hello world 先看三種語言的樣例:Pascalbegin writeln(Hello world);end.C#include int main(

13、) printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! endl; return 0; 從這三個程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序沒有返回值,而C/C+返回0(好像在C中可以為NULL)。在C/C+中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace std,這個是打開命名空間的,NOIP不會考這個,可以不管,只要知道就行了。

14、 此外說明 注釋單行用/,段落的話Pascal為,C/C+為/* */。* 常用頭文件(模板)#include #include #include #include #include #include using namespace std;int main() system(“pause”);return 0;二、數(shù)據(jù)類型及定義 這里只列出常用的類型。1、整型PascalC/C+范圍shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-922337203685477580

15、8 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 當對long long 變量賦值時,后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、實型PascalC/C+范圍realfloat2.9E-39 1.7E38s

16、ingle-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三種語言中都為char,C里沒有字符串,只有用字符數(shù)組來代替字符串,Pascal和C+均為string。Pascal中字符串長度有限制,為255,C+則沒有。 字符串和字符在Pascal中均用單引號注明,在C/C+中字符用單引號,字符串用雙引號。4、布爾類型 Pascal 中為 boolean,C/C+ 為 bool。值均為True 或 False。C/C+中除0外bool都為真。5、定義 常量的定義均為 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用

17、宏來定義常量,此時不注明類型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 30;const string d = “”;define MAXN 501 /這個是宏 * 宏定義其實就是直接在程序相應的位置替換: #define randomize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;cout a endl;特別說明C+中cin一個字符的話會自動跳過空格和回車,Pascal和C則會讀入空格和回車。在

18、Pascal中writeln(a:n:m) 表示在n個字符寬的輸出域上輸出a保留m位小數(shù)。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal write(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁瑣!) 需要加頭文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a; /作用臨時 以下三個進制設定都是永久作用: cout deca; 相當 printf(“%d”,a); /十進制 cout hexa; 相當 printf(“%X”,a); /十六進

19、制 cout octa; 相當 printf(“%o”,a); /八進制例如:cout 12hex12oct1212endl;輸出:12c1414 C 的輸入輸出里面的字符串中%表示變量,%后面的字目表示變量類型。下面是類型表:%hd1個short型整數(shù)%d1個int型整數(shù)%u1個unsigned int型整數(shù)%I64d1個long long型整數(shù)%c1個字符%s1個C字符串%f1個float型實數(shù)%lf1個double型實數(shù)%10.4f輸出1個總寬度為10,保留4位小數(shù)的實數(shù) 文件輸入輸出:Pascalassign(input, test.in);assign(output, test.ou

20、t);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin = fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream

21、 fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因為C+的讀入較慢,個人建議C+的話使用C的輸入方式。當然也有人用C的讀入,C+的輸出的,這種方式我們稱之為城鄉(xiāng)結合。*中國計算機學會競賽須知發(fā)布的C讀寫程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn

22、”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下擴充c/c+混用是可行的:#include #include using namespace std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,

23、&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、賦值語句及運算符號 一一對應的關系PascalC/C+賦值運算賦值:=基本運算加+減-乘*除(實數(shù))/ (double)除法取整div(int) / (int)取余mod%比較等于=不等于!=大于大于等于=小于小于等于=邏輯且and&或or|非not!位運算左移(*2)shl且and&或or|非not異或xor其他增一inc(x)x+減一dec(x)x- 在C/C+中對某個變量自身進行運算可以簡寫為 變量名 運算符號= 改變量 如 x += 8

24、 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里還存在一種三目運算 變量名 = 條件 ? 值A : 值B 如 x = x 0 ? x : -x; /表示若x 0 則取 x, 否則取 x, 同 if x 0 then x := x else x := -x;五、條件語句1、if C/C+中if 語句的條件必須要用括號括起來,后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else flag = false;2、多種分支 C/C+中為switch,Pas

25、cal為case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +; break; case 2: x -; break; default: x *= x; 切記C/C+中一定要寫break,后果你可以去掉break,運行看看就知道了。六、循環(huán)語句1、forPascalC/C+for 變量名 := 初始值 to(downto) 終止值 dofor (變量名=初始值;條件;改變方式)for i := 5 to 10 do dec(a);/終止值大于初始值用 tofor i :=

26、 5 downto 1 do dec(a);/終止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 滿足條件就會一直循環(huán)。C/C+中i是實數(shù)、指針都可以*/C/C+中for的特殊用法:/變量為實數(shù)for (double i = 1; i 符號為間接引用,后面會提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可

27、寫作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+repeat 語句 until 結束條件;do while (運行條件)repeat int(i) until i 100;do i+; while (i = 100);七、數(shù)組 Pascal中數(shù)組的下標可以隨意定義,而C/C+下標始終為從0開始到(數(shù)組大小1)。PascalC/C+定義a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含義a 為大小為100的intege

28、r數(shù)組,合法下標為1到100b 為大小為10*10的int64數(shù)組,合法下標為1,1到10,10a 為大小為100的int數(shù)組,合法下標為0到99b 為大小為10*10的int數(shù)組,合法下標為0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 數(shù)組清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/頭文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但達不到 INT_MAX) 如果要填最?。?memset(a,

29、128,sizeof(a) (但達不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C風格的字符串就是字符數(shù)組。 C+和Pascal的字符串使用基本相同,只是C+中字符串下標以0開始,Pascal以1開始。字符串處理很多這里不一一列舉,只寫最常用的幾個。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的

30、區(qū)別: getline(cin,s)cins一次性整行讀入,直至行末尾。只讀入一個“單詞”,遇空格和行末停止。例如輸入;How are you?s=” How are you?”讀入整串含空格例如輸入;How are you?s=”How”如果三個都讀:cins1s2s3*C+ 數(shù)字與數(shù)值之間的轉換:#include #include #include /必須加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100

31、endl; ss string string str = ss.str(); return 0;九、過程和函數(shù)1、過程 在C/C+中沒有過程,但可以把返回值為“空”的函數(shù)理解為過程。PascalC/C+無參過程procedure 過程名;說明部分begin 語句部分 end;/說明部分、begin、end語句部分統(tǒng)稱為過程體void 函數(shù)名(); 主體部分; return ;帶參過程procedure 過程名(形參表)過程體void 函數(shù)名(形參表)過程體 值傳和址傳:當一個參數(shù)是值傳時,形參在子過程中相當于一個局部變量,對它的改變不影響實在的參數(shù)值。址傳則會影響。下例中a為值傳,b為址傳。初

32、始a = 5,b = 5,運行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HYPERLINK a a認為值參,b認為變量傳參 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a

33、b;return 0;* 用若干地址傳參可以給調用者傳回若干值 Void tryit(int &x,int &y,int &z) 調用時: tryit(a,b,c) ,可以傳回 a,b,c的值。* 用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù) Void tryit( int a) 調用時: tryit(x),可以傳回整個數(shù)組。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); r

34、eturn 0;*用指向函數(shù)的指針作為參數(shù),可以執(zhí)行指定的函數(shù)。(略)STL 的兩個應用:* C+ 快排函數(shù)#include Bool com(int a,int b) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7;Sort(a,a+10,com); /如果升序可以省略com.For(int i=0;i10;i+) Coutai” “;* 優(yōu)先隊列(以堆排為例)#include #include using namespace std;priority_queue Q;int main() int n,a; cinn; while (n-)

35、cina; Q.push(a); while (!Q.empty() cout Q.top() ; Q.pop(); return 0;* 隊列、棧、優(yōu)先隊列 三種數(shù)據(jù)結構匯總:#include #include priority_queue Q;queue Q1;stack S;int main()Q.push(5); x = Q.top(); Q.pop();Q.empty();Q.size()Q1.push(5); Q1.size(); Q1.front(); Q1.empty(); Q1.pop();S.push(5); S.size(); S.top(); S.emtpy(); S.pop();2、函數(shù) . PascalC/C+funtion 函數(shù)名(形參表):返回值類型;函數(shù)體返回值類型 函數(shù)名(形參表) 主體; return 返回值; 注意在Pascal中: 在函數(shù)體的語句部分中,必須有對應的函數(shù)標識符賦值的語句,并且這些語句在函數(shù)被引用時至少要有一句被執(zhí)行,最后賦給函數(shù)標識符的值就是函數(shù)值?;蛘遝xit(返回值);下面為求n階乘的樣例:PascalC/C+function fac(n:integer):longint;var sum, i:longint;beginsum := 1;for i :

溫馨提示

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

評論

0/150

提交評論