版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 单回路控制系统参数整定一、实验目的1、了解被控对象的特性对控制系统控制品质的影响。2、掌握不同调节规律的调节器(P、PI、PID)对控制系统控制品质的影响。3、熟悉MATLAB软件中Simulink工具箱的使用方法及在控制系统设计仿真中的应用。4、掌握单回路控制系统中不同调节规律的调节器的参数整定方法。二、Simulink工具箱简介1、Simulink工具箱的启动与主要模块介绍启动MATLAB软件,在主程序窗口中点击“Simulink按钮”,可以打开Simulink工具箱的主窗口,如下图所示:Simulink按钮图11 MATLAB主程序窗口新建按钮功能模块组列表功能模块图12 Sim
2、ulink工具箱主窗口在Simulink工具箱的主窗口中点击“新建按钮”,可以打开一个未命名的Simulink控制系统仿真界面,在界面中可以如图13所示:图13 未命名的Simulink控制系统仿真界面在上图所示的界面中可以根据需要,使用Simulink工具箱中的各功能模块组成控制系统方框图,对控制系统进行仿真研究。本次实验中用到的主要功能模块如下:增益模块(Gain)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Math Operations功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中的增益模块(Gain)并按住左键将其拖到图13所示的Simulink控制系
3、统仿真界面中,即可以得到一个增益模块(Gain)。单击增益模块(Gain)下方的模块名称“Gain”,可以对其名称进行修改,双击增益模块(Gain),可以打开增益模块(Gain)的参数设置对话框如下图所示:增益值图14 增益模块(Gain)参数设置对话框增益模块(Gain)的功能为将输入值与增益值相乘,并将乘积输出,在对话框中可以对增益值Gain进行修改。加(减)法模块(Sum)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Math Operations功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中的加(减)法模块(Sum)并按住左键将其拖到图13所示的Simu
4、link控制系统仿真界面中,即可以得到一个加(减)法模块(Sum)。双击加(减)法模块(Sum),可以打开加(减)法模块(Sum)的参数设置对话框如下图所示:模块形状下拉菜单运算符号图15 加(减)法模块(Sum)参数设置对话框加(减)法模块(Sum)的功能为对两个输入数值进行加(减)法运算,并将计算结果输出。此模块在初始状态下对两个输入值进行加法运算,在参数设置对话框中把第二个“+”改为“”,可以把模块切换到减法运算。在运算符号框中增加新的“+”或“”,可以使加(减)法模块(Sum)对多个输入值进行运算。通过参数设置对话框中的模块形状下拉菜单,可以将加(减)法模块(Sum)的形状由默认的圆形
5、改为矩形。积分运算模块(Integrator)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Continuous功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中的积分运算模块(Integrator)并按住左键将其拖到图13所示的Simulink控制系统仿真界面中,即可以得到一个积分运算模块(Integrator),其功能为对输入值进行积分运算,并将计算结果输出。微分运算模块(Derivative)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Continuous功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中的微分运算模块(Deriv
6、ative)并按住左键将其拖到图13所示的Simulink控制系统仿真界面中,即可以得到一个微分运算模块(Derivative),其功能为对输入值进行微分运算,并将计算结果输出。一阶惯性环节仿真模块(Transfer Fcn)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Continuous功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中的一阶惯性环节仿真模块(Transfer Fcn)并按住左键将其拖到图13所示的Simulink控制系统仿真界面中,即可以得到一个一阶惯性环节仿真模块(Transfer Fcn)。双击一阶惯性环节仿真模块(Transfer Fcn
7、),可以打开其参数设置对话框如下图所示:分母多项式系数矩阵放大系数矩阵图16 一阶惯性环节仿真模块(Transfer Fcn)参数设置对话框在参数设置对话框中,放大系数矩阵中的数值代表模块传递函数分子项的放大系数;分母多项式系数矩阵中第一个元素代表模块传递函数分母中s项的系数,第二个元素代表分母中的常数项,如将放大系数矩阵改为0.5,将分母多项式系数矩阵改为20 3,则修改后的一阶惯性环节仿真模块(Transfer Fcn)如下:阶跃信号输出模块(Step)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Sources功能模块组,会在窗口右边出现对应的各功能模块,用鼠标选择其中
8、的阶跃信号输出模块(Step)并按住左键将其拖到图13所示的Simulink控制系统仿真界面中,即可得到阶跃信号输出模块(Step)。双击阶跃信号输出模块(Step),可以打开其参数设置对话框如下图所示:阶跃信号最终值阶跃信号初始值阶跃信号发生时间图17 阶跃信号输出模块(Step)参数设置对话框在参数设置对话框中,可以通过修改相应的数值,改变阶跃信号产生的时间、信号的初始值和最终值。响应曲线显示模块(Scope)在图12所示的Simulink工具箱主窗口的功能模块组列表中点击Sinks功能模块组,放大镜按钮会在窗口右边出现对应的各功能模块,用鼠标选择其中的响应曲线显示模块(Scope)并按住
9、左键将其拖到图13所示的Simulink控制系统仿真界面中,即可得到一个响应曲线显示模块(Scope)。双击响应曲线显示模块(Scope),可以打开其响应曲线显示器如下图所示:图18 响应曲线显示器在响应曲线显示器中,横坐标为仿真时间(默认的时间长度为10s),纵坐标为响应曲线的幅值,完成仿真后,在响应曲线显示器中将显示出控制系统的响应曲线,点击“放大镜按钮”可以自动以最佳比例显示响应曲线。2、控制系统方框图的建立进行仿真实验前,需要将已经拖到图13所示的Simulink控制系统仿真界面中的各功能模块按一定顺序用信号线连接在一起,以建立控制系统的方框图。功能模块的连接任何一个功能模块均有一个或
10、多个信号输入端或信号输出端,以一阶惯性环节仿真模块(Transfer Fcn)为例:信号输入端信号输出端将鼠标指针放在功能模块的信号输出端,此时鼠标指针变为十字形(图19),按住左键拖动鼠标指针到另一个模块的信号输入端,当鼠标指针变为十字形时松开左键,即可以建立连接两个功能模块的信号线(图110),连接过程如下图所示: 图19 图110信号分支线在建立反馈回路或一个信号需要同时送往多个功能模块时,需要在信号线上引出分支。将鼠标指针放在信号线的合适位置(即分支引出点)点击右键,按住右键拖动鼠标指针,在需要转弯出松开右键,即出现一条带箭头的虚线(图111),鼠标指针放在虚线箭头处,此时鼠标指针变为
11、十字形(图112),按住左键拖动鼠标指针到所需功能模块的信号输入端松开左键即可(图113),过程如下图所示: 图111 图112 图1133、控制系统的仿真在图13所示的Simulink控制系统仿真界面中建立了控制系统的方框图后,即可以对控制系统进行仿真。以一个简单的单回路比例控制系统为例,首先在Simulink控制系统仿真界面中建立控制系统的方框图如下:仿真启动按钮图114 单回路比例控制系统方框图点击Simulink控制系统仿真界面中的Simulation下拉菜单,在下拉菜单中点击Configuration Parameters,出现下图所示的仿真参数设置对话框:仿真结束时间仿真开始时间图
12、115 仿真参数设置对话框在仿真参数设置对话框中,通过修改仿真结束时间,可以设置仿真时间长度,本例中将结束时间设置为100s。完成以上设置后,点击图114所示的Simulink控制系统仿真界面中的“仿真启动按钮”,开始对控制系统进行仿真,仿真结束后,双击方框图中的响应曲线显示模块(Scope),可以在打开的响应曲线显示器中显示出响应曲线,点击响应曲线显示器中的“放大镜按钮”得到如下图所示的响应曲线:图116 响应曲线三、实验原理 本实验利用MATLAB软件中Simulink工具箱中的功能模块组成具有不同调节规律的单回路控制系统,并对其进行仿真研究,控制系统方框图如下图所示:调节器外扰通道111
13、被控对象内扰外扰图117 单回路控制系统方框图调节器(1)比例调节器(P):将虚线框内积分系数Ki增益模块和微分系数Kd增益模块中的增益值Gain均设为0,此时调节器为比例调节规律,其传递函数为:式中: 比例带; 比例系数()。(2)比例积分调节器(PI):将虚线框内微分系数Kd增益模块中的增益值Gain设为0,此时调节器为比例积分调节规律,其传递函数为: 式中: 积分时间; 积分系数()。(3)比例积分微分调节器(PID):保留虚线框内的三个增益模块,此时调节器为比例积分微分调节规律,其传递函数为:式中: 微分时间; 微分系数()。被控对象在图117所示的单回路控制系统中,由三个一阶惯性环节
14、仿真模块(Transfer Fcn1Transfer Fcn3)串联组成一个三阶惯性被控对象,其传递函数为:内扰在图117所示的单回路控制系统中,采用阶跃信号输出模块作为内扰的扰动源,在阶跃信号输出模块(Step)的参数设置对话框中,可以设置内扰发生的时间和幅值。外扰 在图117所示的单回路控制系统中,采用阶跃信号输出模块作为外扰的扰动源,并采用三个一阶惯性环节仿真模块串联组成具有三阶惯性的外扰通道,其传递函数为:四、实验要求1、在MATLAB软件的Simulink工具箱中,打开一个Simulink控制系统仿真界面,在其中建立如图117所示的单回路控制系统方框图。2、在图117所示的单回路控制
15、系统中,采用理论计算法对比例调节器(P)的比例带和比例系数进行计算。3、在图17所示的单回路控制系统中,采用书中介绍的试验整定方法对比例积分调节器(PI)和比例积分微分调节器(PID)的各参数进行整定,并通过仿真曲线分析调节器参数对控制系统控制品质的影响。4、通过仿真曲线分析内、外扰动对控制系统控制品质和调节过程的影响。附录资料:不需要的可以自行删除Pascal/C/C+语句对比(补充版)一、Hello world 先看三种语言的样例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n);
16、 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函数以前的是头文件,样例中C为stdio.h,C+除了iostream还有第二行的using namespace std,这个是打开命名空间的,NOIP不会考这个,可以不管,只要知道就行了。 此外说明 注释单行用/,段落的话Pascal为
17、,C/C+为/* */。* 常用头文件(模板)#include #include #include #include #include #include using namespace std;int main() system(“pause”);return 0;二、数据类型及定义 这里只列出常用的类型。1、整型PascalC/C+范围shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byt
18、e-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.7E38single-1.5E-45 3.4E38doub
19、ledouble5.0E-324 1.7E3083、字符即字符串 字符在三种语言中都为char,C里没有字符串,只有用字符数组来代替字符串,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+中还可以用宏来定义常量,此时不注明类型。PascalC/C
20、+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则会读入空格和回车。在Pascal中writeln(a:n:m) 表示
21、在n个字符宽的输出域上输出a保留m位小数。例如: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); /十六进制 cout octa; 相当 printf(“
22、%o”,a); /八进制例如:cout 12hex12oct1212endl;输出:12c1414 C 的输入输出里面的字符串中%表示变量,%后面的字目表示变量类型。下面是类型表:%hd1个short型整数%d1个int型整数%u1个unsigned int型整数%I64d1个long long型整数%c1个字符%s1个C字符串%f1个float型实数%lf1个double型实数%10.4f输出1个总宽度为10,保留4位小数的实数 文件输入输出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(
23、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 fout(“test.out”);fin a
24、b;fout a b endl;fin.close(); fout.close();因为C+的读入较慢,个人建议C+的话使用C的输入方式。当然也有人用C的读入,C+的输出的,这种方式我们称之为城乡结合。*中国计算机学会竞赛须知发布的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”,a+b); return 0; 或者:fre
25、open(“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,&b); cincd; printf(%dn,a
26、+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、赋值语句及运算符号 一一对应的关系PascalC/C+赋值运算赋值:=基本运算加+减-乘*除(实数)/ (double)除法取整div(int) / (int)取余mod%比较等于=不等于!=大于大于等于=小于小于等于=逻辑且and&或or|非not!位运算左移(*2)shl且and&或or|非not异或xor其他增一inc(x)x+减一dec(x)x- 在C/C+中对某个变量自身进行运算可以简写为 变量名 运算符号= 改变量 如 x += 8 就表示 x = x + 8, 即 inc(x,
27、 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,Pascal为case:PascalC/C+case
28、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,运行看看就知道了。六、循环语句1、forPascalC/C+for 变量名 := 初始值 to(downto) 终止值 dofor (变量名=初始值;条件;改变方式)for i := 5 to 10 do dec(a);/终止值大于初始值用 tofor i := 5 downto 1 do dec(a);/终
29、止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 满足条件就会一直循环。C/C+中i是实数、指针都可以*/C/C+中for的特殊用法:/变量为实数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-;/也可写作 while (i) i-;/在C/C+中非
30、0即为真。3、repeat-until & do-whilePascalC/C+repeat 语句 until 结束条件;do while (运行条件)repeat int(i) until i 100;do i+; while (i = 100);七、数组 Pascal中数组的下标可以随意定义,而C/C+下标始终为从0开始到(数组大小1)。PascalC/C+定义a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含义a 为大小为100的integer数组,合法下标为1到100b 为大小为10*1
31、0的int64数组,合法下标为1,1到10,10a 为大小为100的int数组,合法下标为0到99b 为大小为10*10的int数组,合法下标为0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 数组清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/头文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但达不到 INT_MAX) 如果要填最小: memset(a,128,sizeof(a) (但达不到 INT_
32、MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C风格的字符串就是字符数组。 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 的区别: getline(cin,s)cins一次
33、性整行读入,直至行末尾。只读入一个“单词”,遇空格和行末停止。例如输入;How are you?s=” How are you?”读入整串含空格例如输入;How are you?s=”How”如果三个都读:cins1s2s3*C+ 数字与数值之间的转换:#include #include #include /必须加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string s
34、tr = ss.str(); return 0;九、过程和函数1、过程 在C/C+中没有过程,但可以把返回值为“空”的函数理解为过程。PascalC/C+无参过程procedure 过程名;说明部分begin 语句部分 end;/说明部分、begin、end语句部分统称为过程体void 函数名(); 主体部分; return ;带参过程procedure 过程名(形参表)过程体void 函数名(形参表)过程体 值传和址传:当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。址传则会影响。下例中a为值传,b为址传。初始a = 5,b = 5,运行后a = 5,b
35、= 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 b;return 0;* 用若干地址传参可以给调
36、用者传回若干值 Void tryit(int &x,int &y,int &z) 调用时: tryit(a,b,c) ,可以传回 a,b,c的值。* 用数组名(也是地址)传参可以传回整组的数据 Void tryit( int a) 调用时: tryit(x),可以传回整个数组。例如: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); return 0;*用指向函数的指针作为参数,可以
37、执行指定的函数。(略)STL 的两个应用:* C+ 快排函数#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” “;* 优先队列(以堆排为例)#include #include using namespace std;priority_queue Q;int main() int n,a; cinn; while (n-) cina; Q.push(a); while (
38、!Q.empty() cout Q.top() ; Q.pop(); return 0;* 队列、栈、优先队列 三种数据结构汇总:#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、函数 . PascalC/C+funtion 函数名(形参表):返回值类型;函数体返回值类型 函数名(形参表) 主体; return 返回值; 注意在Pascal中: 在函数体的语句部分中,必须有对应的函数标识符赋值的语句,并且这些语句在函数被引用时至少要有一句被执行,最后赋给函数标识符的值就是函数值。或者exit(返回值);下面为求n阶
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《虚拟仿真实践》课程教学大纲
- 2024年低价协议转让合同范本
- 2024年出售二手车冲床合同范本
- 佛法与管理培训
- 仓库系统规划与设计
- 2024~2025学年度(上)西街教育集团期中学情调查七年级语文试题
- 供热服务员培训课件
- 临终护理死亡过程的分期
- 交通文明驾驶培训内容
- 人人都是质量管理者
- 肥胖患者麻醉管理专家共识2023年版中国麻醉学指南与专家共识
- 中考物理总复习《力学的综合计算》专项检测卷(带答案)
- 数学与思政融合课教学设计
- 大面积脑梗死护理措施
- MOOC 会计学-浙江工商大学 中国大学慕课答案
- 小学数学课堂教学中动手实践操作有效性研究
- 2024年共青团入团考试题目及答案
- 《智慧公交站台工程技术规程》
- 2010年10月自考00244经济法概论试题及答案含解析
- 音乐剧院演出商业计划书
- 广州市黄埔区永和街道办事处治安联防队招聘联防队员考试试题及答案
评论
0/150
提交评论