搜档网
当前位置:搜档网 › 杭电软件技术基础实验报告

杭电软件技术基础实验报告

杭电软件技术基础实验报告
杭电软件技术基础实验报告

《软件技术基础》上机实验报告2018至2019学年,第1学期

学生姓名:***

班级:***

学号:***

授课教师:***

指导教师:***

报告完成时间:2018年12月9日

实验一:链式二叉排序树的创建和遍历

一.实验目的和要求

1.加深理解数据结构的目的和概念,以及逻辑结构和物理结构的关系;

2.练习数据结构操作算法的编程实现;

3.练习链表的程序设计,掌握二叉链表的设计技术;

4.练习递归函数的设计方法;

5.巩固二叉排序树的概念;

6.熟悉软件功能的分析设计方法。

二.功能分析与设计

利用C或C++,设计程序,定义二叉链表,存储二叉排序树,声明并定义相应的函数,实现链式二叉排序树的下列操作:

1. 输入数据个数DataCount(要求在10和20之间)和数据最大值MaxData(在50和100之间)。

算法实现:该任务需要限制输入的DataCount在10和20之间,MaxData在50和100之间,只有当两者均满足要求时,程序才会向下执行。若不满足时,会提示“输入不正确,请重新输入!”,并继续输入DataCount和MaxData,直至满足要求。这里用while(1)死循环,不得到正确输入不退出。

部分代码如下:

while(1)

{

printf("请输入DataCount:");

scanf("%d",&DataCount);

printf("请输入Maxdata:");

scanf("%d",&Maxdata);

if(DataCount>=10&&DataCount<=20&&Maxdata>=50&&Maxdata<=100) break;

printf("输入不正确,请重新输入! \n");

fflush(stdin); //清空输入

}

2. 在0和MaxData之间,随机产生DataCount个不重复的整数,按产生先后顺序形成一个数据序列,并输出该序列。

算法实现:因为输入的DataCount具有随机性,数组的长度无法确定,因此想到要申请分配动态数组。这里需要在0和MaxData之间,随机产生DataCount个不重复的整数,使用c语言中的rand 语句,生成一组随机数,并赋值给数组。要保证不重复,引入下表j,若两数相等,则i自减,继续产生数据。

部分代码如下:

if((arr=(int *)malloc(DataCount*sizeof(int)))==NULL) //申请动态数组

{

printf("分配内存空间失败,程序退出!");

return 0;

}

for(i=0;i

{

arr[i]=rand()%(Maxdata+1);

for(j=0;j

if(arr[i]==arr[j])

i--;

}

printf("输出不重复的数据序列:\n");

for(i=0;i

printf("%d \t",arr[i]);

3.利用上述数据序列,创建一个二叉排序树。

算法实现:首先需要定义节点数据结构,然后根据二叉排序树的特点(左子树节点值小于根节点值,右子树节点值大于等于根节点值),定义插入二叉排序树的insertTree函数,最后定义Creatree 函数,并在其中调用insertTree函数,实现了二叉排序树的创建。

部分代码如下:

void insertTree(Tnode **r,int data){ //插入二叉排序树

if(*r==NULL){ //如果树为空,则建树

*r=(Tnode *)malloc(sizeof(Tnode));

(*r)->data = data;

(*r)->lchild=NULL;

(*r)->rchild=NULL;

}

else if(data<(*r)->data) //当前值小于根结点,建左子树

insertTree(&((*r)->lchild),data);

else if(data>(*r)->data) //当前值大于根结点,建右子树

insertTree(&((*r)->rchild),data);

}

void Creatree(Tnode **r,int a[],int n){ //调用插入函数,实现二叉排序树的创建int i;

for(i=0;i

insertTree(&(*r),a[i]);

}

4.设计函数,统计该二叉树的高度。

算法实现:二叉树的高度为二叉树中节点层次的最大值,因此需要分别遍历左、右子树,并求高度。二叉树的高度为左子树高度、右子树高度中较大的那个。

部分代码如下:

int GetHeight(Tnode *r){ //定义统计二叉树的高度的函数

int hl, hr, max;

if (r!= NULL){

hl = GetHeight(r->lchild); //求左子树高度

hr = GetHeight(r->rchild); //求右子树高度

max = hl > hr ? hl : hr;

return (max + 1);

}

else return 0;

}

5.设计函数,输出该二叉树的叶子节点。

算法实现:当节点的左右子树同时为空时,即为叶子结点。对二叉树进行遍历,判断被访问的节点是否为叶子节点,若是,将叶子节点对应的数值输出。

部分代码如下:

if(r==0) return ;

else if(r->lchild==NULL&&r->rchild==NULL) //节点的左右子树同时为空,即为叶子printf("%d ",r->data);

outleaf(r->lchild) ;

outleaf(r->rchild) ;

}

6.设计中序遍历函数,遍历该二叉排序树,输出遍历序列,验证创建的二叉排序树是否正确。

算法实现:首先按中序遍历的顺序递归左子树,然后访问根节点,最后按中序遍历的顺序递归遍历右子树,即可设计中序遍历函数。由于二叉排序树的中序遍历结果应为从小到大排序,所以只需观察中序遍历序列,即可验证正确性。

部分代码如下:

void inorder(Tnode *r){ //定义实现中序遍历的函数

if(r){

inorder(r->lchild);

printf("%d ",r->data);

inorder(r->rchild);

}

}

三.算法流程图

根据上述功能的分析,设计出本实验的算法流程图如下所示:

图1 算法流程图

四.程序源代码

#include

#include

#include

typedef struct node{ //节点数据类型

int data;

struct node *lchild,*rchild;

}Tnode;

void insertTree(Tnode **r,int data){ //插入二叉排序树

if(*r==NULL){ //如果树为空,则建树

*r=(Tnode *)malloc(sizeof(Tnode));

(*r)->data = data;

(*r)->lchild=NULL;

(*r)->rchild=NULL;

}

else if(data<(*r)->data) //当前值小于根结点,建左子树

insertTree(&((*r)->lchild),data);

else if(data>(*r)->data) //当前值大于根结点,建右子树

insertTree(&((*r)->rchild),data);

}

void Creatree(Tnode **r,int a[],int n){ //调用插入函数,实现二叉排序树的创建int i;

for(i=0;i

insertTree(&(*r),a[i]);

}

int GetHeight(Tnode *r){ //定义统计二叉树的高度的函数

int hl, hr, max;

if (r!= NULL){

hl = GetHeight(r->lchild); //求左子树高度

hr = GetHeight(r->rchild); //求右子树高度

max = hl > hr ? hl : hr;

return (max + 1);

}

else return 0;

}

void outleaf(Tnode *r){ //定义输出二叉树的叶子节点的函数

if(r==0) return ;

else if(r->lchild==NULL&&r->rchild==NULL) //节点的左右子树同时为空,即为叶子printf("%d ",r->data);

outleaf(r->lchild) ;

outleaf(r->rchild) ;

}

void inorder(Tnode *r){ //定义实现中序遍历的函数

if(r){

inorder(r->lchild);

printf("%d ",r->data);

inorder(r->rchild);

}

}

int main()

{

srand(time(NULL));

Tnode *r=NULL;

int DataCount,Maxdata,i,j;

int *arr;

while(1) //死循环,不得到正确输入不退出

{

printf("请输入DataCount:");

scanf("%d",&DataCount);

printf("请输入Maxdata:");

scanf("%d",&Maxdata);

if(DataCount>=10&&DataCount<=20&&Maxdata>=50&&Maxdata<=100) break;

printf("输入不正确,请重新输入! \n");

fflush(stdin); //清空输入

}

if((arr=(int *)malloc(DataCount*sizeof(int)))==NULL) //申请动态数组

{

printf("分配内存空间失败,程序退出!");

return 0;

}

for(i=0;i

arr[i]=rand()%(Maxdata+1);

for(j=0;j

if(arr[i]==arr[j])

i--;

}

printf("输出不重复的数据序列:\n");

for(i=0;i

printf("%d \t",arr[i]);

Creatree(&r,arr,i);

printf("输出二叉树的高度:\n");

printf("%d\n",GetHeight(r)); //输出二叉树的高度

printf("输出二叉树的叶子节点: \n");

outleaf(r); //输出二叉树的叶子节点

printf("\n");

printf("输出中序遍历序列:\n");

inorder(r); //输出中序遍历序列

printf("\n");

free(arr); //使用完后要释放所申请的空间

return 0;

}

五.调试方法和调试过程

调试过程中,出现了大大小小的问题:第一次编译,很多错误,仔细检查后发现是头文件缺失造成的。修改后,错误明显少多了。还有语句后面忘记加分号或者中英文没有区分,导致了一些编译错误。耐心的调试后,所有的错误都解决了。

六.程序运行主要截图

1.输入DataCount和MaxData,若输入的两个值再指定的范围内(即

≤MaxData

,),则程序向下执行;若不再指定范围内,则提示重新输入。

20

10≤

50

100

DataCount

运行窗口如下:

图2 输入正确的数值

2.创建二叉树,输出高度、叶子节点,对二叉排序树进行中序遍历。运行窗口如下:

图3 高度、叶子节点、中序遍历

七.总结与体会

这次上机练习,感受之一就是手生,好长时间不用c语言编程,有一种陌生感,所以这次练习调试程序过程中也遇到了大大小小的困难,不过通过自己网上查找资料都解决了。对一些c语言编程用法加深了理解,比如动态分配数组,生成随机数,结构体,递归等内容,现在能够熟练应用,并在实际问题中实现。其次,深刻认识了二叉排序树的结构,运用递归定义函数实现了二叉树的构建,求解树的高度、叶子节点等内容,有关二叉树的三种遍历方法也清楚了具体的遍历顺序。

实验二:链式二叉排序树的查找和删除

一.实验目的和要求

1.加深理解数据结构的目的和概念,以及逻辑结构和物理结构的关系;

2.锻炼较为复杂数据结构算法的设计和编程实现;

3.练习链表的程序设计,掌握二叉链表的设计技术;

4.熟悉图结构的物理存储和应用的编程方法;

5.熟悉软件功能的分析设计方法和测试方法。

二.功能分析与设计

1. 创建一棵二叉排序树(以下称为源二叉树)。

算法实现:创建方法与实验一相同,这里不做叙述。

2. 从源二叉树拷贝一个二叉树(以下称为二叉树副本)。

算法实现:首先判断二叉树是否为空,若二叉数为空,则没有任何操作;若二叉树不为空,开辟内存空间,依次复制根节点,左子树和右子树,至此完成二叉树的复制。

部分代码如下:

Tnode *mycopy(Tnode*r){ //二叉树的复制

if(!r) return NULL;

Tnode*copyr=(Tnode*)malloc(sizeof(Tnode));

copyr->data=r->data;

copyr->lchild=mycopy(r->lchild);

copyr->rchild=mycopy(r->rchild);

return copyr;

};

3. 通过键盘输入数据,指定查找的目标二叉树(源二叉树和二叉树副本),在目标二叉树中查找是否存在该数据,若存在,则输出提示以及该数据节点的地址,若不存在,则输出提示。

算法实现:首先,通过定义变量k,选择查找哪一棵树。k=1,表明在源二叉树中查找;k=2,表明在二叉树副本中查找;k=其他值,提示“选择错误”,并且重新输入,直到查找的二叉树为源二叉树或副本。

因为需要在目标二叉树中查找是否存在某数据,所以要定义一个查找节点的函数。这里编写了search函数,首先判断根节点数值与要查找数值是否相等,若等,则输出找到;若不等,则对左子树、右子树递归调用上面函数。

部分代码如下:

Tnode *search(Tnode *r,int key){ //在二叉排序树中查找值为key的节点

if(r==NULL)

{

printf("没有找到!");

return NULL;

}

else if(r!=NULL&&key==r->data){

printf("Find it ! \n");

printf("输出数据在内存中的地址:");

printf("%d",&r);

return r;

}

else if(keydata)

return search(r->lchild,key);

else if(key>r->data)

return search(r->rchild,key);

}

4. 删除数据操作:通过键盘输入数据;如果二叉树副本中存在该数据,则从二叉树副本中删除该数据节点,输出提示,并输出源二叉树和删除操作后的二叉树副本的中序遍历结果和高度;如果二叉树副本中不存在该数据,输出提示,并输出提示源二叉树中是否存在该数据节点以及节点地址。

算法实现:对二叉树的节点进行删除操作,要分下面三种情况:1)当删除的节点是叶子节点时,只要把删除节点的父节点对应的指针指向NULL即可,然后释放掉删除节点的空间。2)当删除的节点只有一个子节点(左子树或右子树),把删除节点的父节点中对应的指针指向删除节点的子节点即可。然后释放掉删除节点的空间; 3)当删除的节点左右子树都有,这种情况下,必须要找到一个替代删除节点的替代节点,并且保证二叉树的排序性。根据二叉树的排序性,可知替代节点的键值必须最接近删除节点键值。比删除节点键值小的所有键值中最大那个,或者是比删除节点键值大的所有键值中最小的那个,是符合要求的。这两个键值所在的节点分别在删除节点的左子树中最右边的节点,删除节点右子树中最左边的节点;

部分代码如下:

//获得其父节点

Tnode *getFather(Tnode *r, Tnode *s)

{

Tnode *sf;

if(r==NULL||r==s)

sf=NULL;

else {

if(s==r->lchild||s==r->rchild)

sf= r;

else if(s->data > r->data)

sf=getFather(r->rchild,s);

else

sf=getFather(r->lchild,s);

}

return sf;

}

//二叉树删除

void DeleteNode(Tnode *r,int key)

{

Tnode *L,*LL; //在删除左右子树都有的结点时使用;

Tnode *p=r;

Tnode *parent=r;

int child=0; //0表示左子树,1表示右子树;

if(!r) //如果排序树为空,则退出;

return ;

while(p) //二叉排序树有效;

{

if(p->data==key)

{

if(!p->lchild&&!p->rchild) //叶结点(左右子树都为空);

{

if(p==r) //被删除的结点只有根结点;

free(p);

else if(child==0)

{

parent->lchild=NULL; //设置父结点左子树为空;

free(p); //释放结点空间;

}

else //父结点为右子树;

{

parent->rchild=NULL; //设置父结点右子树为空;

free(p); //释放结点空间;

}

}

else if(!p->lchild) //左子树为空,右子树不为空;

{

if(child==0) //是父结点的左子树;

parent->lchild=p->rchild;

else //是父结点的右子树;

parent->rchild=p->rchild;

free(p); //释放被删除的结点;

}

else if(!p->rchild) //右子树为空,左子树不为空;

{

if(child==0) //是父结点的左子树;

parent->lchild=p->lchild;

else //是父结点的右子树;

parent->rchild=p->lchild;

free(p); //释放被删除的结点;

}

else

{

LL=p; //保存左子树的结点;

L=p->rchild; //从当前结点的右子树进行查找;

if(L->lchild) //左子树不为空;

{

LL=L;

L=L->lchild; //查找左子树;

p->data=L->data; //将左子树的数据保存到被删除结点;

LL->lchild=L->lchild; //设置父结点的左子树指针为空;

for(;L->lchild;L=L->lchild);

L->lchild=p->lchild;

p->lchild=NULL;

}

else

{

p->data=L->data;

LL->rchild=L->rchild;

}

}

p=NULL;

}

else if(keydata) //需删除记录的关键字小于结点的数据;

{ //要删除的结点p是parent的左子树;

child=0; //标记在当前结点左子树;

parent=p;//保存当前结点作为父结点;

p=p->lchild; //查找左子树;

}

else //需删除记录的关键字大于结点的数据;

{ //要删除的结点p是parent的右子树;

child=1; //标记在当前结点右子树查找;

parent=p; //保存当前结点作为父结点;

p=p->rchild; //查找右子树;

}

}

}

5. 将源二叉树视为一个图数据结构,编写函数实现该图的邻接表存储(注意程序需确保该操作不会被重复操作)。

算法实现:首先对每个顶点建立一个单链表,这个单链表由邻接于的所有顶点构成。这个表头节点通常以顺序存储结构存储,以便随机访问任一顶点的链表。

6. 编写函数实现该图的拓扑排序,并输出拓扑序列。

算法实现:首先在有向图中选取一个没有前驱的顶点(即入度为0的顶点),并输出该顶点;然后从有向图中删除该顶点和以它为尾的所有弧;重复前两步,直到全部顶点都被输出,或者有向图中没有入度为0的顶点为止。

部分代码如下:

void TopoSort(adjlist GL,int n)

{

int i,j,k,top,m=0; /*m用来统计拓扑序列中的顶点数*/

struct edgenode *p; /*单链表*/

int *d=(int *)malloc(n*sizeof(int));/*定义存储图中每个顶点入度的一维整形数组d*/

for(i=0;i

d[i]=0; /*初始化数组*/

for(i=0;i

{

p=GL[i];

while(p!=NULL)

{

j=p->adjvex;

d[j]++;

p=p->next;

}

}

top=-1; /*初始化用于链接入度为0的元素的栈的栈顶指针为-1*/

for(i=0;i

if(d[i]==0)

{

d[i]=top;

top=i;

}

while(top!=-1) /*每循环一次删除一个顶点及所有以它为弧尾的顶点入度减一*/

{

j=top /*j的值为一个入度为0的顶点序号*/

top=d[top]; /*得到下一个入度为0的顶点下标*/

printf("%d",j); /*输出一个顶点*/

m++; /*输出的顶点个数加1*/

p=GL[j]; /*p指向vj顶点邻接表的第一个节点,目的是开始把以它为弧尾的顶点入度减一*/

while(p!=NULL)

{

k=p->adjvex; /*vk是vj的一个邻接点*/

d[k]--; /*vk入度减一*/

if(d[k]==0) /*把入度为0的元素进栈,对应着图看更容易明白*/

{

d[k]=top;

top=k;

}

p=p->next;

}

}

printf("\n");

if(m

printf("有回路");

free(d); /*删除动态分配的数组d*/

}

三.算法流程图

根据上述功能的分析,设计出本实验的算法流程图如下所示:

图1 算法流程图

四.程序源代码

#include

#include

#include

#include

typedef struct node{ //节点数据类型

int data;

struct node *lchild,*rchild;

}Tnode;

Tnode *mycopy(Tnode*r){ //二叉树的复制

if(!r) return NULL;

Tnode*copyr=(Tnode*)malloc(sizeof(Tnode));

copyr->data=r->data;

copyr->lchild=mycopy(r->lchild);

copyr->rchild=mycopy(r->rchild);

return copyr;

};

Tnode *search(Tnode *r,int key){ //在二叉排序树中查找值为key的节点if(r==NULL)

{

printf("没有找到!");

return NULL;

}

else if(r!=NULL&&key==r->data){

printf("Find it ! \n");

printf("输出数据在内存中的地址:");

printf("%d",&r);

return r;

}

else if(keydata)

return search(r->lchild,key);

else if(key>r->data)

return search(r->rchild,key);

}

//获得其父节点

Tnode *getFather(Tnode *r, Tnode *s)

{

Tnode *sf;

if(r==NULL||r==s)

sf=NULL;

else {

if(s==r->lchild||s==r->rchild)

sf= r;

else if(s->data > r->data)

sf=getFather(r->rchild,s);

else

sf=getFather(r->lchild,s);

}

return sf;

}

//二叉树删除

void DeleteNode(Tnode *r,int key)

{

Tnode *L,*LL; //在删除左右子树都有的结点时使用;

Tnode *p=r;

Tnode *parent=r;

int child=0; //0表示左子树,1表示右子树;

if(!r) //如果排序树为空,则退出;

return ;

while(p) //二叉排序树有效;

{

if(p->data==key)

{

if(!p->lchild&&!p->rchild) //叶结点(左右子树都为空);

{

if(p==r) //被删除的结点只有根结点;

free(p);

else if(child==0)

{

parent->lchild=NULL; //设置父结点左子树为空;

free(p); //释放结点空间;

}

else //父结点为右子树;

{

parent->rchild=NULL; //设置父结点右子树为空;

free(p); //释放结点空间;

}

}

else if(!p->lchild) //左子树为空,右子树不为空;

{

if(child==0) //是父结点的左子树;

parent->lchild=p->rchild;

else //是父结点的右子树;

parent->rchild=p->rchild;

free(p); //释放被删除的结点;

}

else if(!p->rchild) //右子树为空,左子树不为空;

{

if(child==0) //是父结点的左子树;

parent->lchild=p->lchild;

else //是父结点的右子树;

parent->rchild=p->lchild;

free(p); //释放被删除的结点;

}

else

{

LL=p; //保存左子树的结点;

L=p->rchild; //从当前结点的右子树进行查找;

if(L->lchild) //左子树不为空;

{

LL=L;

L=L->lchild; //查找左子树;

p->data=L->data; //将左子树的数据保存到被删除结点;

LL->lchild=L->lchild; //设置父结点的左子树指针为空;

for(;L->lchild;L=L->lchild);

L->lchild=p->lchild;

p->lchild=NULL;

}

else

{

p->data=L->data;

LL->rchild=L->rchild;

}

}

p=NULL;

}

else if(keydata) //需删除记录的关键字小于结点的数据;

{ //要删除的结点p是parent的左子树;

child=0; //标记在当前结点左子树;

parent=p;//保存当前结点作为父结点;

p=p->lchild; //查找左子树;

}

else //需删除记录的关键字大于结点的数据;

{ //要删除的结点p是parent的右子树;

child=1; //标记在当前结点右子树查找;

parent=p; //保存当前结点作为父结点;

p=p->rchild; //查找右子树;

}

}

}

void insertTree(Tnode **r,int data){ //插入二叉排序树

if(*r==NULL){ //如果树为空,则建树

*r=(Tnode *)malloc(sizeof(Tnode));

(*r)->data = data;

(*r)->lchild=NULL;

(*r)->rchild=NULL;

}

else if(data<(*r)->data) //当前值小于根结点,建左子树

insertTree(&((*r)->lchild),data);

else if(data>(*r)->data) //当前值大于根结点,建右子树

insertTree(&((*r)->rchild),data);

}

void Creatree(Tnode **r,int a[],int n){ //调用插入函数,实现二叉排序树的创建int i;

for(i=0;i

insertTree(&(*r),a[i]);

重庆邮电大学-软件技术基础--实验报告(耿道渠)

《软件技术基础》实验报告 实验名称:顺序表的操作 班级学号姓名 第9 周星期 2 、5,6 节成绩 一、实验目的: 1、掌握顺序表结构的实现方式; 2、掌握顺序表常用算法的实现; 3、熟悉利用顺序表解决问题的一般思路; 4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。 二、实验内容: 1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。 (2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。 (3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。 2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。 三、实验结果:

四、实验中遇到的问题及解决方法: 第一次编写C++,感觉力不从心,回去多看看PPT。

五、实验心得体会: 对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include #include #include #include #define MAXSIZE 20 using namespace std; int num; typedef struct { string student_number; string name; string tel; string home_phone; int id; } TEL; void shuaxin(TEL *); void delet(TEL *);

杭电《过程控制系统》实验报告

实验时间:5月25号 序号: 杭州电子科技大学 自动化学院实验报告 课程名称:自动化仪表与过程控制 实验名称:一阶单容上水箱对象特性测试实验 实验名称:上水箱液位PID整定实验 实验名称:上水箱下水箱液位串级控制实验 指导教师:尚群立 学生姓名:俞超栋 学生学号:09061821

实验一、一阶单容上水箱对象特性测试实验一.实验目的 (1)熟悉单容水箱的数学模型及其阶跃响应曲线。 (2)根据由实际测得的单容水箱液位的阶跃响应曲线,用相关的方法分别确定它们的参数。二.实验设备 AE2000型过程控制实验装置,PC机,DCS控制系统与监控软件。 三、系统结构框图 单容水箱如图1-1所示: Q2 图1-1、单容水箱系统结构图 四、实验原理 阶跃响应测试法是系统在开环运行条件下,待系统稳定后,通过调节器或其他操作器,手动改变对象的输入信号(阶跃信号),同时记录对象的输出数据或阶跃响应曲线。然后根据已给定对象模型的结构形式,对实验数据进行处理,确定模型中各参数。 图解法是确定模型参数的一种实用方法。不同的模型结构,有不同的图解方法。单容水箱对象模型用一阶加时滞环节来近似描述时,常可用两点法直接求取对象参数。 如图1-1所示,设水箱的进水量为Q1,出水量为Q2,水箱的液面高度为h,出水阀

h1( t ) h1(∞ ) 0.63h1(∞) 0 T V 2固定于某一开度值。根据物料动态平衡的关系,求得: 在零初始条件下,对上式求拉氏变换,得: 式中,T 为水箱的时间常数(注意:阀V 2的开度大小会影响到水箱的时间常数),T=R 2*C ,K=R 2为单容对象的放大倍数,R 1、R 2分别为V 1、V 2阀的液阻,C 为水箱的容量系数。令输入流量Q 1 的阶跃变化量为R 0,其拉氏变换式为Q 1(S )=R O /S ,R O 为常量,则输出液位高度的拉氏变换式为: 当t=T 时,则有: h(T)=KR 0(1-e -1)=0.632KR 0=0.632h(∞) 即 h(t)=KR 0(1-e -t/T ) 当t —>∞时,h (∞)=KR 0,因而有 K=h (∞)/R0=输出稳态值/阶跃输入 式(1-2)表示一阶惯性环节的响应曲线是一单调上升的指数函数,如图1-2所示。当由实验求得图1-2所示的 阶跃响应曲线后,该曲线上升到稳态值的63%所对应时间,就是水箱的时间常数T ,该时间常数T 也可以通过坐标原点对响应曲线 图 1-2、 阶跃响应曲线

浙工大过程控制实验报告

实验一:系统认识及对象特性测试 一 实验目的 1了解实验装置结构和组成及组态软件的组成使用。 2 熟悉智能仪表的使用及实验装置和软件的操作。 3熟悉单容液位过程的数学模型及阶跃响应曲线的实验方法。 4学会有实际测的得单容液位过程的阶跃响应曲线,用相关的方法分别确定它们的参数,辨识过程的数学模型。 二 实验内容 1 熟悉用MCGS 组态的智能仪表过程控制系统。 2 用阶跃响应曲线测定单容液位过程的数学模型。 三 实验设备 1 AE2000B 型过程控制实验装置。 2 计算机,万用表各一台。 3 RS232-485转换器1只,串口线1根,实验连接线若干。 四 实验原理 如图1-1所示,设水箱的进水量为Q1,出水量为Q2,水箱的液面高度为h ,出水阀V2固定于某一开度值。根据物料动态平衡的关系,求得: 在零初始条件下,对上式求拉氏变换,得: 式中,T 为水箱的时间常数(注意:阀V2的开度大小会影响到水箱的时间常数),T=R2*C ,K=R2为单容对象的放大倍数,R1、R2分别为V1、V2阀的液阻,C 为水箱的容量系数。 阶跃响应曲线法是指通过调节过程的调节阀,使过程的控制输入产生一个阶跃变化,将被控量随时间变化的阶跃响应曲线记录下来,再根据测试记录的响应曲线求取输入输出之间的数学模型。本实验中输入为电动调节阀的开度给定值OP ,通过改变电动调节阀的开度给定单容过程以阶跃变化的信号,输出为上水箱的液位高度h 。电动调节阀的开度op 通过组态软件界面有计算机传给智能仪表,有智能仪表输出范围为:0~100%。水箱液位高度有由传感变送器检测转换为4~20mA 的标准信号,在经过智能仪表将该信号上传到计算机的组态中,由组态直接换算成高度值,在计算机窗口中显示。因此,单容液位被控对象的传递函数,是包含了由执行结构到检测装置的所有液位单回路物理关系模型 有上述机理建模可知,单容液位过程是带有时滞性的一阶惯性环节,电动调节阀的开度op ,近似看成与流量Q1成正比,当电动调节阀的开度op 为一常量作为阶跃信号时,该单容液位过程的阶跃响应为 需要说明的是表达式(2-3)是初始量为零的情况,如果是在一个稳定的过程下进行的阶跃响应,即输入量是在原来的基础上叠加上op 的变化,则输出表达式是对应原来输出值得基础上的增量表达的是,用输出测量值数据做阶跃响应曲线,应减去原来的正常输出值。 五、实验步骤 A 、熟悉用MCGS 组态的智能仪表过程控制系统 1、设备的连接和检查

操作系统实验心得(精选多篇)

操作系统实验心得 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。

大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域 3)其他 例如: <1>定义了指针后记得初始化,在使用的时候记得判断是否为 null <2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等 <3>在变量处理的时候变量的格式控制是否合理等

电子科技大学软件技术基础实验报告4

电子科技大学通信与信息工程学院标准实验报告 (实验)课程名称软件技术基础实验 电子科技大学教务处制表

电子科技大学 实验报告 一、实验室名称:校公共机房 二、实验项目名称:二叉树和哈夫曼树 三、实验学时:4学时 四、实验原理: 使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。通过上机练习掌握二叉树的建立、插入删除,遍历等方法和过程,掌握递归函数在二叉树建立,遍历中的应用,掌握哈夫曼树的最小路径和建立过程。 五、实验目的: 1.熟练二叉树和哈夫曼树的概念和基本操作方法。 2.掌握课程平台使用方法。 六、实验内容: 上机完成所有函数,编程实验,调试运行程序并完成报告。 七、实验器材(设备、元器件): 硬件要求:普通pc机,1G内存,100G硬盘空间即可。 软件要求:Windows 7,包括C编译器的IDE。 八、实验步骤、实验编程与运行结果: 下面建立该二叉树并展示输出结果: #include #include typedef struct bnode

{ int data; struct bnode *lc,*rc; }; struct bnode* create() { struct bnode *tree=NULL; char ch; ch=getchar(); if(ch=='_') tree=NULL; else { tree=(struct bnode *)malloc(sizeof(struct bnode)); tree->data=ch; tree->lc=create(); tree->rc=create(); } return tree; } //先序遍历(根左右)--递归 int preorder(struct bnode *root) { putchar(root->data); if(root->lc!=NULL) preorder(root->lc); if(root->rc!=NULL) preorder(root->rc); } //中序遍历--递归 int inorder(struct bnode *root) { if(root->lc!=NULL) inorder(root->lc); putchar(root->data); if(root->rc!=NULL) inorder(root->rc); } //后序遍历--递归 int postorder(struct bnode *root) { if(root->lc!=NULL) postorder(root->lc); if(root->rc!=NULL)

过程控制系统实验报告

实验一过程控制系统的组成认识实验 过程控制及检测装置硬件结构组成认识,控制方案的组成及控制系统连接 一、过程控制实验装置简介 过程控制是指自动控制系统中被控量为温度、压力、流量、液位等变量在工业生产过程中的自动化控制。本系统设计本着培养工程化、参数化、现代化、开放性、综合性人才为出发点。实验对象采用当今工业现场常用的对象,如水箱、锅炉等。仪表采用具有人工智能算法及通讯接口的智能调节仪,上位机监控软件采用MCGS工控组态软件。对象系统还留有扩展连接口,扩展信号接口便于控制系统二次开发,如PLC控制、DCS控制开发等。学生通过对该系统的了解和使用,进入企业后能很快地适应环境并进入角色。同时该系统也为教师和研究生提供一个高水平的学习和研究开发的平台。 二、过程控制实验装置组成 本实验装置由过程控制实验对象、智能仪表控制台及上位机PC三部分组成。 1、被控对象 由上、下二个有机玻璃水箱和不锈钢储水箱串接,4.5千瓦电加热锅炉(由不锈钢锅炉内胆加温筒和封闭外循环不锈钢锅炉夹套构成),压力容器组成。 水箱:包括上、下水箱和储水箱。上、下水箱采用透明长方体有机玻璃,坚实耐用,透明度高,有利于学生直接观察液位的变化和记录结果。水箱结构新颖,内有三个槽,分别是缓冲槽、工作槽、出水槽,还设有溢流口。二个水箱可以组成一阶、二阶单回路液位控制实验和双闭环液位定值控制等实验。 模拟锅炉:锅炉采用不锈钢精致而成,由两层组成:加热层(内胆)和冷却层(夹套)。做温度定值实验时,可用冷却循环水帮助散热。加热层和冷却层都有温度传感器检测其温度,可做温度串级控制、前馈-反馈控制、比值控制、解耦控制等实验。 压力容器:采用不锈钢做成,一大一小两个连通的容器,可以组成一阶、二阶单回路压力控制实验和双闭环串级定值控制等实验。 管道:整个系统管道采用不锈钢管连接而成,彻底避免了管道生锈的可能性。为了提高实验装置的使用年限,储水箱换水可用箱底的出水阀进行。 2、检测装置 (液位)差压变送器:检测上、下二个水箱的液位。其型号:FB0803BAEIR,测量范围:0~1.6KPa,精度:0.5。输出信号:4~20mA DC。 涡轮流量传感器:测量电动调节阀支路的水流量。其型号:LWGY-6A,公称压力:6.3MPa,精度:1.0%,输出信号:4~20mA DC 温度传感器:本装置采用了两个铜电阻温度传感器,分别测量锅炉内胆、锅炉夹套的温度。经过温度传感器,可将温度信号转换为4~20mA DC电流信号。 (气体)扩散硅压力变送器:用来检测压力容器内气体的压力大小。其型号:DBYG-4000A/ST2X1,测量范围:0.6~3.5Mpa连续可调,精度:0.2,输出信号为4~20mA DC。 3、执行机构 电气转换器:型号为QZD-1000,输入信号为4~20mA DC,输出信号:20~100Ka气压信号,输出用来驱动气动调节阀。 气动薄膜小流量调节阀:用来控制压力回路流量的调节。型号为ZMAP-100,输入信号为4~20mA DC或0~5V DC,反馈信号为4~20mA DC。气源信号 压力:20~100Kpa,流通能力:0.0032。阀门控制精度:0.1%~0.3%,环境温度:-4~+200℃。 SCR移相调压模块:采用可控硅移相触发装置,输入控制信号0~5V DC或4~20mA DC 或10K电位器,输出电压变化范围:0~220V AC,用来控制电加热管加热。 水泵:型号为UPA90,流量为30升/分,扬程为8米,功率为180W。

杭电操作系统实验报告模板

操作系统课程设计报告 基于DOS的多任务系统的实现 专业:信息工程学院(软件工程) 班级: 姓名: 学号: 指导老师: 20101223

一、课程设计的目的 1. 加深多线程和进程概念的理解,明确进程和程序的区别。 2. 加深对CPU调度过程(现场保护、CPU的分派和现场恢复)的理解。 3. 进一步认识并发执行的概念,明确顺序执行和并发执行的区别。 4. 加深对临界资源,临界区,信号量以及同步机制的理解。 5. 加深对消息缓冲通信的理解。 二、课程设计要求 1. 用C语言完成线程的创建和撤消,并按优先权加时间片轮转算法对多个线程进行调度; 2. 改变时间片的大小,观察结果的变化。思考:为什么时间片不能太小或太大; 3. 假设两个线程共用同一软件资源(如某一变量,或某一数据结构),请用记录型信号量来实现对它的互 斥访问; 4. 假设有两个线程共享一个可存放5个整数的缓冲,一线程不停的计算1到50的平方,并将结果放入缓冲 中,另一个线程不断的从缓冲中取出结果,并将他们打印出来,请用记录型信号量实现这一生产者和消费者的同步问题; 5. 实现消息缓冲通信,并于3,4中的简单通信进行比较; 6. 思考:在线程间进行消息缓冲通信时,若对消息队列的访问没有满足互斥要求,情况会怎么样? 三、程序的设计细想和框图[根据自己的代码写] 1.调度算法:用TCB数组下标音隐含把所有线程排成一个循环队列,当时间片到时,有线程正在执行,则停止它,将其变为就绪,把现场信息压入私有栈堆。 2.调度原因:时间片到时,线程执行完毕,正在执行的线程等待某种事件而不能继续执行。 3.时钟中断的截取

计算机软件技术基础实验报告Word版

计算机软件基础实验报告 姓名学号实验目的 1. 掌握C语言程序设计方法,并学会上机调试。 2. 熟悉Huffman编码源程序,并构造Huffman树。 实验内容 1.试设计一算法,从包括n个元素的数组中,求最大和最小元素,并使得当n 个元素为有序排列时,元素之间的比较次数仅为n-1次。 2.在给出的Huffman编码源程序基础上,要求画出Huffman树,求出与等长编 码相比时的压缩比。 实验要求 1.根据实验内容编写算法,并用 C 语言进行程序设计。 2. 将所编程序在计算机上调试通过,并全面测试。 实验结果 1.以一个含有8个元素的一维数组{1,2,3,5,7,8,9,12}为例,设计程序如下: #include int maxArray(int x ,int y); int minArray(int x ,int y); int main(void) { int i = 0 ; int array[8]={ 1,2,3,5,7,8,9,12} ; printf; do { scanf("%d",&array[i]); i++; } while(i < 8); int maxTemp = array[0]; int minTemp = array[0]; int maxIndex = 0; int minIndex = 0; for(i=1;i<8;i++)

maxTemp = maxArray(array[i] , maxTemp); minTemp = minArray(array[i] , minTemp); } for(i=0;i<8;i++) { if (maxTemp == array[i]) { maxIndex = i; } if (minTemp == array[i]) { minIndex = i; } } printf; return 0; } 运行结果如下: 2.Huffman编码源程序 #include #include #include #include #include typedef struct {unsigned int weight; //结点权值 unsigned int parent,lchild,rchild; //结点的父指针,左右孩子指针 }HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树 typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表 void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成哈夫曼树 void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树

《过程控制系统》实验报告

《过程控制系统》实验报告 学院:电气学院 专业:自动化 班级:1505 姓名及学号:任杰311508070822 日期:2018.6.3

实验一、单容水箱特性测试 一、 实验目的 1. 掌握单容水箱阶跃响应测试方法,并记录相应液位的响应曲线。 2. 根据实验得到的液位阶跃响应曲线,用相关的方法确定被测对象的特征参数T 和传递函数。 二、 实验设备 1. THJ-FCS 型高级过程控制系统实验装置。 2. 计算机及相关软件。 3. 万用电表一只。 三、 实验原理 图1 单容水箱特性测试结构图 由图 2-1 可知,对象的被控制量为水箱的液位 h ,控制量(输入量)是流入水箱中的流量 Q 1,手动阀 V 1 和 V 2 的开度都为定值,Q 2 为水箱中流出的流量。根据物料平衡关系,在平衡状态时02010=-Q Q (式2-1),动态时,则有dt dV Q Q = -21,(式2-2)式中 V 为水箱的贮水容积,dt dV 为水贮存量的变化率,它与 h 的关

系为Adh dV =,即dt dh A dt dV =(式2-3),A 为水箱的底面积。把式(2-3)代入式(2-2)得dt dh A Q Q =-21(式2-4)基于S R h Q =2,S R 为阀2V 的液阻,(式2-4)可改写为dt dh A R h Q S =-1,1KQ h dt dh AR S =+或()()1s 1+=Ts K s Q H (式2-5)式中s AR T =它与水箱的底面积A 和2V 的S R 有关,(式2-5)为单容水箱的传递函数。若令()S R S Q 01=,常数=0R ,则式2-5可表示为()T S KR S R K S R T S T K S H 11/000+-=?+= 对上式取拉氏反变换得()()T t e KR t h /01--=(式2-6),当∞→t 时()0KR h =∞,因而有()0/R h K ∞==输出稳态值/阶跃输入,当T t =时,()() ()∞==-=-h KR e KR T h 632.0632.01010,式2-6表示一阶惯性响应曲线是一单调上升的指数函数如下图2-2所示 当由实验求得图 2-2 所示的阶跃响应曲线后,该曲线上升到稳态值的 63%所对应的时间,就是水箱的时间常数 T 。该时间常数 T 也可以通过 坐标原点对响应曲线作切线,切线与稳态值交点所对应的时间就是 时间常数 T ,由响应曲线求得 K 和 T 后,就能求得单容水箱的传递函 数如式(2-5)所示。 如果对象的阶跃响应曲线为图 2-3,则在此曲线的拐点 D 处作一切线,它与时间轴交于 B 点,与响应稳态值的渐近线交于 A 点。图中OB 即为对象的滞后时间

软件技术基础教学大纲资料

软件技术基础》教学大纲 课程编号: 23000840 适用专业:电子信息类(非计算机专业) 学时数: 40学分数: 2.5 开课学期:第4 学期 先修课程: 《C 语言》 考核方式:笔试(闭卷) 执笔者:沈晓峰编写日期:2015 年3月审核人(教学副院长): 一、课程性质和目标授课对象:电子信息工程专业大学二年级本科生课程类别:学科拓展课程教学目标: 本课程是针对工科电子信息类本科生开设的一门学科拓展课程。着重培养学生在软件设计领域的基本素质,基本方法和设计理念。授课对象为大学二年级学生,课程任务是通过本课程的学习和相关实验的练习,使学生掌握数据结构、操作系统等软件技术的基本理论知识,具有一定的软件开发能力。 二、教学内容和要求 1、课堂理论教学要求和学时安排(32 学时) 1) C 程序设计(4 学时) (1)C 语言回顾,指针的基本概念、运算方法和使用( 2 学时)。 (2)结构体的基本概念和使用方法(2 学时)。 2)数据结构(20 学时) (1)数据结构的基本概念(2 学时):理解数据结构的基本概念;理解线性和非线性结构的概念。 (2)线性数据结构(9 学时):理解表、栈、队列等线性数据结构的概念,存储方式及基于不同存储方式的相关操作的实现方法。 a. 理解表的概念及顺序表的存储特点,掌握其创建、插入、删除等实现方法(2 学时); b. 掌握单链表、双链表、循环链表的创建、插入、删除方法( 2 学时); c. 理解栈的概念及结构特点,掌握顺序栈及链栈的出栈、入栈操作的实现方法 (2 学时); d. 理解队列的概念及特点,掌握顺序、循环队列的创建、出队、入队、判空、判满等操作。掌握链 队列的创建及出队、入队(2 学时); e. 理解数组的概念及二维数组的存放方式,掌握对称矩阵及稀疏矩阵的压缩存储方法 (1 学时)。

软件技术基础实验报告

《计算机软件技术基础》实验报告 专业_____________ 年级_____________ 学号_____________ 学生姓名_____________ 指导老师_____________ 南华大学计算机学院编

【实验报告】

I 实验要求 1.每次实验中有若干习题,每个学生至少应该完成其中的两道习题。 2.上机之前应作好充分的准备工作,预先编好程序,经过人工检查无误后,才能上机,以提高上机效率。 3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝他人程序。 4.上机结束后,应整理出实验报告。书写实验报告时,重点放在调试过程和小节部分,总结出本次实验中的得与失,以达到巩固课堂学习、提高动手能力的目的。 实验一线性表 【实验目的】 1.熟悉VC环境,学习如何使用C语言实现线性表的两种存储结构。 2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用C语言实现线性表基本操作。 3.熟练掌握线性表的综合应用问题。 【实验内容】 必做: 1.一个线性表有n个元素(n

过程控制实验报告

东南大学自动化学院 实验报告 课程名称:过程控制实验 实验名称:水箱液位控制系统 院(系):自动化专业:自动化姓名:学号: 实验室:实验组别: 同组人员: 实验时间: 评定成绩:审阅教师:

目录 一、系统概论 (3) 二、对象的认识..................................... 错误!未定义书签。 三、执行机构 ....................................... 错误!未定义书签。 四、单回路调节系统................................ 错误!未定义书签。 五、串级调节系统Ⅰ................................ 错误!未定义书签。 六、串级调节系统Ⅱ................................ 错误!未定义书签。 七、前馈控制 ....................................... 错误!未定义书签。 八、软件平台的开发................................ 错误!未定义书签。

一、系统概论 实验设备 组成器件 图实验设备正面图图实验设备背面图 本实验设备包含水箱、加热器、变频器、泵、电动阀、电磁阀、进水阀、出水阀、增压器、流量计、压力传感器、温度传感器、操作面板等。 铭牌 ·加热控制器: 功率1500w,电源220V(单相输入) ·泵: Q40-150L/min,,,380V,VL450V, IP44,50Hz,2550rpm,,,,ICL B ·全自动微型家用增压器: 型号15WZ-10,单相电容运转马达 最高扬程10m,最大流量20L/min,级数2,转速2800rmp,电压220V, 电流,频率50Hz,电容μF,功率80w,绝缘等级 E ·LWY-C型涡轮流量计: 口径4-200mm,介质温度-20—+100℃,环境温度-20—+45℃,供电电源+24V, 标准信号输出4-20mA,负载0-750Ω,精确度±%Fs ±%Fs,外壳防护等级 IP65 ·压力传感器 YMC303P-1-A-3 RANGE 0-6kPa,OUT 4-20mADC,SUPPLY 24VDC,IP67,RED SUP+,BLUE OUT+/V-·SBWZ温度传感器 PT100 量程0-100℃,精度%Fs,输出4-20mADC,电源24VDC

杭电通信系统课程设计报告实验报告

通信系统课程设计实验报告 XX:田昕煜 学号:13081405 班级:通信四班 班级号:13083414 基于FSK调制的PC机通信电路设计

一、目的、容与要求 目的: 掌握用FSK调制和解调实现数据通信的方法,掌握FSK调制和解调电路中相关模块的设计方法。初步体验从事通信产品研发的过程. 课程设计任务:设计并制作能实现全双工FSK调制解调器电路,掌握用Orcad Pspice、Protel99se进行系统设计及电路仿真。 要求:合理设计各个电路,尽量使仿真时的频率响应和其他参数达到设计要求。尽量选择符合标称值的元器件构成电路,正确完成电路调试。 二、总体方案设计 信号调制过程如下: 调制数据由信号发生器产生(电平为TTL,波特率不超过9600Baud),送入电平/幅度调整电路完成电平的变换,再经过锁相环(CD4046),产生两个频率信号分别为30kHz和40kHz(发“1”时产生30kHz方波,发“0”时产生40kHz方波),再经过低通滤波器2,变成平滑的正弦波,最后通过线圈实现单端到差分信号的转换。

信号的解调过程如下: 首先经过带通滤波器1,滤除带外噪声,实现信号的提取。在本设计中FSK 信号的解调方式是过零检测法。所以还要经过比较器使正弦信号变成方波,再经过微分、整流电路和低通滤波器1实现信号的解调,最后经过比较器使解调信号成为TTL电平。在示波器上会看到接收数据和发送数据是一致的。 各主要电路模块作用: 电平/幅度调整电路:完成TTL电平到VCO控制电压的调整; VCO电路:在控制电压作用下,产生30KHz和40KHz方波; 低通2:把30KHz、40KHz方波滤成正弦波; 线圈:完成单端信号和差分信号的相互转换; 带通1:对带外信号抑制,完成带信号的提取; 限放电路:正弦波整形成方波,同时保留了过零点的信息; 微分、整流、脉冲形成电路:完成信号过零点的提取; 低通1:提取基带信号,实现初步解调; 比较器:把初步解调后的信号转换成TTL电平 三、单元电路设计原理与仿真分析 (1)带通1(4阶带通)-- 接收滤波器(对带外信号抑制,完成带信号的提取) 要求通带:26KHz—46KHz,通带波动3dB; 阻带截止频率:fc=75KHz时,要求衰减大于10dB。经分析,二级四阶巴特沃斯带通滤波器来提取信号。 具体数值和电路见图1仿真结果见图2。

《计算机应用基础》实验报告本1

(封面) 上海建桥学院《计算机应用基础》 实验报告本 20 11 年3月15 日

2010-2011学年第一学期《计算机应用基础》实验目录

上海建桥学院实验报告 课程名称:计算机应用基础实验类型:验证/ 设计/ 综合 实验名称:文字处理软件的使用 系别:艺术系专业:视觉传达班级:三班学号:10B05060324 姓名:顾雯茵 同组人姓名: 指导老师:实验地点: 实验日期:2011年 3 月15 日 实验报告日期:2011年3月15日 报告退发( 订正、重做): 成绩:指导教师(签字):_________________________ 一、实验名称:文字处理软件的使用 二、实验目的: 1.掌握字体、段落格式、首字下沉、中文版式、分栏的设置; 2.掌握查找与替换、项目符号和编号、边框和底纹的设置; 3.掌握表格插入和设置; 4.掌握图片、图形、艺术字、文本框的插入、编辑及混排设置; 5.掌握公式、水印、页眉和页脚的插入及编辑方法; 6.掌握页面设置方法。

三、实验环境(所使用的平台和相关软件) (1)中文WindowXP操作系统 (2)中文Word2003应用软件 (3)中文实验配套材料配套 四、实验内容(实验内容的具体描述) 实验(1) 打开配套文件Word-Lx1.doc,按下列要求操作,并将结果以原文件名保存。 (1) 插入标题,内容见样张,其中大字:华文琥珀,72磅,空心,阴影;小字:华文云 彩,60,金色底纹,双行合一。 (2) 正文为小四号,第一段添加蓝色小3号项目符号;其余各行,首行缩进2字符;如 样张分栏,第1栏宽4厘米,间距0.75厘米;文末段落首2字下沉,并设置灰-20% 底纹。 (3) 按样张,对文中相应段落添加绿色、3磅边框线。 (4) 把文中的半角逗号、句号,均改为全角。 (5) 按样张,利用制表位在文末输入相关文字(注意对齐方式,间距自定)。 实验(2) 打开配套文件Word-Lx3.doc,按下列要求操作,并将结果以原文件名保存。 (1) 按样张,将文本标题“网上阅读,日趋流行”转化为艺术字,艺术字式样为艺术字 库中第四行第一列;艺术字字体为楷体、36磅、加粗;艺术字高2.8厘米、宽7.5厘米,形状采用“波形2”;艺术字衬底为加上填充色为“雨后初晴”斜上过渡效果的“流程图:资料带”。 (2) 按样张,将正文各段首行缩进2字符,将第二段(网页成本极为便宜…最大区别还 在于能够“反馈”。)设置成1.7倍行距。 (3) 将正文中所有的“图书馆”都替换为楷体、红色、四号、粗斜、蓝色双下划线。 (4) 按样张,为第一段中的文字“印刷出版物”制作合并字符效果,字体:隶书,字号: 12。 (5) 取消第三段原有的分栏,并将第二、三段按样张分为三栏,其栏宽分别为8字符米、 10字符、14字符。 (6) 将第四、五段加上三维边框,框线的粗细为3磅,颜色为深红,并加上如样张所示 的编号。 (7) 按样张,在文末插入大小为30%的配套图片Examine.wmf。

杭电自动化短学期实验报告-控制系统仿真-2013

控制系统仿真课程设计 (2010级) 题目控制系统仿真课程设计学院自动化 专业自动化 班级10062813 学号10061314 学生姓名陆维俊 指导教师王永忠/刘伟峰 完成日期2013年7月6日

控制系统仿真课程设计(一) ——锅炉汽包水位三冲量控制系统仿真 1.1 设计目的 本课程设计的目的是通过对锅炉水位控制系统的Matlab仿真,掌握过程控制系统设计及仿真的一般方法,深入了解反馈控制、前馈-反馈控制、前馈-串级控制系统的性能及优缺点,实验分析控制系统参数与系统调节性能之间的关系,掌握过程控制系统参数整定的方法。 1.2 设计原理 锅炉汽包水位控制的操作变量是给水流量,目的是使汽包水位维持在给定的范围内。汽包液位过高会影响汽水分离效果,使蒸汽带水过多,若用此蒸汽推动汽轮机,会使汽轮机的喷嘴、叶片结垢,严重时可能使汽轮机发生水冲击而损坏叶片。汽包液位过低,水循环就会被破坏,引起水冷壁管的破裂,严重时会造成干锅,甚至爆炸。 常见的锅炉汽水系统如图1所示,锅炉汽包水位受汽包中储水量及水位下汽包容积的影响,而水位下汽包容积与蒸汽负荷、蒸汽压力、炉膛热负荷等有关。影响水位变化的因素主要是锅炉蒸发量(蒸汽流量)和给水流量,锅炉汽包水位控制就是通过调节给水量,使得汽包水位在蒸汽负荷及给水流量变化的情况下能够达到稳定状态。 锅炉汽水系统图 在给水流量及蒸汽负荷发生变化时,锅炉汽包水位会发生相应的变化,其分

别对应的传递函数如下所示: (1)汽包水位在给水流量作用下的动态特性 汽包和给水可以看做单容无自衡对象,当给水增加时,一方面会使得汽包水位升高,另一方面由于给水温度比汽包内饱和水的温度低,又会使得汽包中气泡减少,导致水位降低,两方面的因素结合,在加上给水系统中省煤器等设备带来延迟,使得汽包水位的变化具有一定的滞后。因此,汽包水位在给水流量作用下,近似于一个积分环节和惯性环节相串联的无自衡系统,系统特性可以表示为 ()111()()(1) K H S G S W S s T s ==+ (2)汽包水位在蒸汽流量扰动下的动态特性 在给水流量及炉膛热负荷不变的情况下,当蒸汽流量突然增加时,瞬间会导致汽包压力的降低,使得汽包内水的沸腾突然加剧,水中气泡迅速增加,将整个水位抬高;而当蒸汽流量突然减小时,汽包内压力会瞬间增加,使得水面下汽包的容积变小,出现水位先下降后上升的现象,上述现象称为“虚假水位”。虚假水位在大中型中高压锅炉中比较显著,会严重影响锅炉的安全运行。“虚假水位”现象属于反向特性,变化速度很快,变化幅值与蒸汽量扰动大小成正比,也与压力变化速度成正比,系统特性可以表示为 222()()()1f K K H s G s D s T s s ==-+ 常用的锅炉水位控制方法有:单冲量控制、双冲量控制及三冲量控制。单冲量方法仅是根据汽包水位来控制进水量,显然无法克服“虚假水位”的影响。而双冲量是将蒸汽流量作为前馈量用于汽包水位的调节,构成前馈-反馈符合控制系统,可以克服“虚假水位”影响。但双冲量控制系统要求调节阀具有好的线性特性,并且不能迅速消除给水压力等扰动的影响。为此,可将给水流量信号引入,构成三冲量调节系统,如图2所示。图中LC 表示水位控制器(主回路),FC 表示给水流量控制器(副回路),二者构成一个串级调节系统,在实现锅炉水位控制的同时,可以快速消除给水系统扰动影响;而蒸汽流量作为前馈量用于消除“虚假水位”的影响。

操作系统实验实验总结实验报告

8.1 实验的基本内容 (1) 本学期完成的操作系统实验主要有(根据实际完成的实验情况填写): 1) 实验1.1 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 2) 实验1.2 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 3) 实验2.1 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 4) 实验2.2 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 5) 实验2.3 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 6) 实验3.1 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 7) 实验3.2 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 8) 实验4.1 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 9) 实验4.2 主要内容:________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 10) 实验4.3 主要内容:_______________________________________________ ________________________________________________________________________ ________________________________________________________________________ 11) 实验5.1 主要内容:_______________________________________________ ________________________________________________________________________ ________________________________________________________________________ 12) 实验5.2 主要内容:_______________________________________________ ________________________________________________________________________ 实验8 实验总结

相关主题