当前位置:文档之家› 数据结构课程设计报告--电梯模拟

数据结构课程设计报告--电梯模拟

数据结构课程设计报告--电梯模拟
数据结构课程设计报告--电梯模拟

课程设计

课程名称数据结构

题目名称 2.8电梯模拟(难度5) 学生学院计算机学院

专业班级 XXXXXXXXXX 学号XXXXXXXX

学生姓名 XXX 指导教师 XX

2013年7月4日

电梯模拟系统

一、简单介绍

1、问题描述

设计一个电梯模拟系统,这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体”构成的集合,虽然他们彼此交互作用,但他们的行为是基本独立的,在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。

2、基本要求

(1)、模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第三层,第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

(2)、乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

(3)、模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

(4)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。

二、设计目的

当初之所以选择做电梯模拟这个课题,主要是因为觉得当今时代需要,所以觉得想尝试一下,因为为了方便,我们都会选择乘坐电梯,既省时间又省力,粗略看了书本里面的描述,觉得应该不难,只是按照要求输出动作序列即可,后来经过老师的辅导,才发现,原来自己选了个最难的课程设计,也问了同学,很多都是因为太难了才没有选这个题目,因为它远比想象中的复杂的多很多,它实际上是模拟现实中的电梯的运行状况,因此要考虑很多现实中遇到的实际情况,坐过电梯的人都会应该有点印象,现实中的电梯是按照每个人按下按钮的时间顺序进行服务的,但是,并不是将一个人接进来后就直接开往其目的楼层就完事,其实,当电梯将某个人送往其目的楼层的过程中,经过某层时,如果此层的人也要用电梯,虽然其按按钮的时间有可能比先前那个人晚,但是电梯依旧会开门将其接入,然后继续送前一个人去目的地,之后再送这个人去他的目的楼层,如果有多人在电梯中时,也是按照申请时间的先后决定先去哪层的,同理,若在某层,电梯中的某个人,或者某几个人要在该层下,电梯也不能忽略这些,而是要先开门使要下的人出去,之后继续开往先前的楼层,所以设计时,每当电梯上升或下降一层后,都应该检测现在电梯所处的这层有没有人有用电梯的请求,或者电梯中的人有没有要在该层下的情况,若有则电梯要在该层停一下,否则继续上升或下降….

此外,当电梯停在某一层时不外乎三种情况:1.此层有个人{或有几个人}等候要用电梯 2.电梯中的某个人或者某几个人要在该楼层下 3.则是前面两种情况的结合,此时情况相当复杂,因为,题目要求电梯开门和关门都要消耗一定的时间(题目中没有提电梯上升或者下降一层需要多少时间,所以不妨就假定为30t),而且人进电梯和人出电梯时也要消耗一定的时间,这说明了当同一时刻有至少两个以上的人要进行同一种动作的时候(比方说都是要出电梯,或都是在某一层等电梯,电梯来了后都要进去),但是因为每个人进出电梯都要消耗时间,所以不能单纯的同时让这些人同进或同出电梯,而是要有先后顺序的进出,此为其

一………

其二,题目中还提到每个人等候电梯到来时,都有一个容忍时间(每个人不一定相同),所以,万一,在他按下按钮到电梯开到他所在的那层楼的间隔时间大于他的最大容忍时间,他会先行离开,但这一切电梯并不知道啊,所以电梯依旧会按照每个申请使用电梯的时间进行服务,正是因为这样,极有可能发生这样的情况:电梯开到某层后打开电梯门,但是既没有人出去,也没有人进来………

其三,根据题目中的要求,当电梯停在某层时候,有人进出,电梯每隔40t测试一次,若无人进出,则关门,关门完后,若300t时间内没有人使用,则自动开到第1层等候下次的使用(第1层楼是电梯的‘本垒层’,电梯“空闲”时,将来到该层候命)

等等等等…………以上各种情况(还有一些情况这里没列举)都是要在做这道题时需要考虑的,否则这题的‘电梯’根本模拟不起来

三、设计概要

本程序中所有的抽象数据类型的定义及其相应的操作函数的定义如下:

电梯的结构体dianti

/*此电梯结构体中分别定义了电梯所在楼层,电梯的现有人数(现实中的电梯有个最大栽客量,在此题中不妨规定为最大12人),以及电梯门的状态(0为关,1为开),至于为什么定义电梯门的状态,并不是多此一举,而是我在调试的过程中发现必须加上的,否则,在一些情况下会出现电梯动作的局部重复,从而导致整个程序的失败*/

人的结构体man

/*在人的结构体中,分别定义了人的名字(这个有利于区别各个人),最大容忍时间(题目中的要求),所在的楼层,要去的目的楼层,两个标志位,其中一个标志记录该人是否还在电梯里面,另一个标志记录的是该人是否已经使用过电梯*/

事件结构体结点SLNode

/*在事件的结构体中分别定义了,事件信息,事件发生的时刻,以及指向下一个事件结构结点的指针*/

void ListInitiate(SLNode**head)

/*初始化链表*/

void LinListSort(SLNode *head)

/*用按发生时间的顺序给事件链表中的事件排序*/

void Destroy(SLNode * *head)

/*撤消链表*/

void OPEN(SLNode *head,dianti dt,int now)

/*电梯开门函数,将电梯开门的事件信息插入到事件链表中去*/

void CLOSE(SLNode *head,dianti dt,int now)

/*电梯关门函数,将电梯关门的事件信息插入到事件链表中去*/

void GET_IN(SLNode *head,dianti dt,int now)

/*人进电梯的函数,将人进电梯时候的各种信息插入到事件链表中去*/

void GET_OUT(SLNode *head,dianti dt,int now)

/*人出电梯的函数,将人出电梯时候的各种信息插入到事件链表中去*/

注释:以上四个函数基本是用来完成人和电梯的动作序列

int gettime(SLNode *head)

/*返回最新事件(即事件涟表最后一个结点)的发生时间,此为该程序中最重要的一个函数之一,并且为调用最频率最高的一个函数*/

void print(SLNode *head)

/*将事件链表中的事件一一显示出来,即为最后显示电梯和人动作序列的函数*/

void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000])

/*电梯运行函数,本程序中最最重要的函数,可以说这是这道程序中的灵魂函数,根据申请使用电梯的所有人的信息,以及所有事件发生时的时刻,将所有情况的处理都放在在其中,所以此函数的代码相当占了程序代码的百分之七十多了(程序总代码长度超过1200行)*/ 注释:以上各个函数以及抽象数据结构的定义都放在头文件”elevator.h”中

void main()

/*该程序的主函数*/

程序流程图如下:

四、详细设计

本程序的所有抽象数据类型的具体实现一机相应的操作函数的伪算法如下:

typedef struct

{

int lc;//电梯所在楼层

int rs;//电梯中的人数,规定最大乘坐人数为12

int door;//门的状态0关1开

}dianti;

typedef struct

{

char name[50]; //这个人的名字或序号(以示区别)

int rrsj;//一个人的容忍时间

int lc;//所在楼层

int md;//目的楼层

int biaozhi; //此标志位记录人使用电梯是否完成或者是否离去,为1表明使用过(离去),否则为0

int in; //标志位,为1时表明人在电梯中,否则为0

}man;

typedef struct Node

{

char a[1000];//事件信息

int mytime;//事件所发生的时间

struct Node *next;

}SLNode;

//初始化链表

void ListInitiate(SLNode* *head)

{

if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);

(*head)->next = NULL;

}

//将事件结点插入到事件链表中的第i个位置中去

int ListInsert(SLNode *head,int i,char a[1000],int t)

{

SLNode *p,*q;

int j;

p=head;

j=-1;

while(p->next!=NULL && j

p=p->next;

j++;

}

if(j!=i-1){

printf("\n 插入位置参数错!\n");

return 0;

}

if((q=(SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);

q->mytime = t;

strcpy(q->a,a);

q->next =p->next;

p->next =q;

return 1;

}

//用按发生时间的顺序给事件排序

void LinListSort(SLNode *head)

{

SLNode *curr,*pre,*p,*q;

p=head->next;

head->next=NULL;

while(p!=NULL)

{

curr=head->next;

pre=head;

while(curr!=NULL && curr->mytime<=p->mytime){

pre=curr;

curr=curr->next;

}

q=p;

p=p->next;

q->next=pre->next;

pre->next=q;

}

}

//销毁链表

void Destroy(SLNode * *head)

{

SLNode *p,*p1;

p=*head;

while(p!=NULL){

p1=p;

p=p->next;

free(p1);

}

*head = NULL;

/*

电梯动作:1.开始开门,20t,开门结束;

2.开始关门,20t,关门结束;

3.从n-1层开始移动,30t,到达第n层;

4.开始等待,有人来或者300t,等待结束;

人的动作:1.开始等待,x<=最大容忍时间,等待结束;

2.开始进门,25t,进门结束;

3.开始出门,25t,出门结束;

*/

//电梯开门

void OPEN(SLNode *head,dianti dt,int now)

{

char a[1000]={"电梯开始开门......"},b[1000]={"开门完毕!"};

ListInsert(head,g,a,now);

g++;

ListInsert(head,g,b,now+20);

g++;

dt.door=1; //门的状态为开

}

//电梯关门

void CLOSE(SLNode *head,dianti dt,int now)

{

char a[1000]={"电梯开始关门......"},b[1000]={"关门完毕!"};

ListInsert(head,g,a,now);

g++;

ListInsert(head,g,b,now+20);

g++;

dt.door=0; //门的状态为关

}

//人进电梯

void GET_IN(SLNode *head,dianti dt,int now)

{

char a[1000]={"人开始进门......"},b[1000]={"已经进入!"};

ListInsert(head,g,a,now);

g++;

ListInsert(head,g,b,now+25);

g++;

dt.rs++; //电梯人数加一个}

//人出电梯

void GET_OUT(SLNode *head,dianti dt,int now)

{

char a[1000]={"人开始出门......"},b[1000]={"已经出门!"};

ListInsert(head,g,a,now);

g++;

ListInsert(head,g,b,now+25);

g++;

dt.rs--; //电梯中的人数减一个

}

//返回最新事件(即事件涟表最后一个结点)的发生时间

int gettime(SLNode *head)

{

SLNode *pre,*curr;

curr=head->next;

pre=head;

while(curr!=NULL){

pre=curr;

curr=curr->next;

}

return pre->mytime;

}

//电梯运行函数

void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000])

{

int k=0,i,time,m,flag=0,counter=0; //flag 记录是否有多个人在同一层或去同一层楼for(i=0;i

if(dt.door==0){ //初始电梯门状态为关着

if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){//人在该楼层,要进去电梯,且电梯人数不超过规定的12人

if(i==0) time=s[i]/100; //记录当时时间

else time=gettime(head);

if(flag==0&&dt.door==0){

OPEN(head,dt,time); //开门

dt.door=1;

}

if((time-s[i]/100)<=r[i].rrsj){

time=gettime(head);

GET_IN(head,dt,time); //若超过此人的最大容忍时间,该人将放弃乘坐电梯

r[i].in=1;

}

else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d 层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

time=gettime(head); //获得事件链表最后一个结点的时间(即当前时刻)

if(dt.lc==r[i+1].lc) {flag=1;counter++;continue;} //该层的所有人都进入电梯

else{

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门

dt.door=0; //置电梯门状态为关

g++;

CLOSE(head,dt,time+40);

}

}

/* 本层人已经全部进入电梯,接下来电梯启动按每个人事件发生的时间顺序将其送往目的楼层*/

flag=0;

if(dt.lc<=r[i-counter].md){

time=gettime(head);

while(dt.lc<=r[i-counter].md){ //开往该层第一个人的目的楼层

flag=0;

if(dt.lc

dt.lc++;

time+=30;

}

for(m=0;m

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){//若该楼层有人等候,使其进入

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

//电梯开门,并设置其门状态为开

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i-counter].md) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门

dt.door=0;

//置电梯门状态为关

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1)

{

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

else if(dt.lc>=r[i-counter].md)

{

time=gettime(head);

while(dt.lc>=r[i-counter].md){

flag=0;

if(dt.lc>r[i-counter].md){

dt.lc--; //30t,电梯下降一层

time+=30;

}

for(m=0;m

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i-counter].md) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

i=i-counter;

}

else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //人在电梯中,在该楼层要出去

if(i==0)time=s[0]/100;

else time=gettime(head);

for(m=0;m

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯

//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去

//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,,,人不在该楼层,要进去电梯

//4...else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,,人在电梯里,该楼层不是其目的楼层

else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){ //3...人不在该楼层,要进去电梯

flag=0;

if(i==0)time=s[0]/100; //以该事件发生的时间为起始时间

else time=gettime(head); //取当前时间

if(dt.lc<=r[i].lc){

while(dt.lc<=r[i].lc){

flag=0;

if(dt.lc

dt.lc++;

time+=30;

//30t,电梯上升一层

}

for(m=0;m

//若该楼层有人等候,使其进入

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else

if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else

if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i].lc) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

else if(dt.lc>=r[i].lc){

while(dt.lc>=r[i].lc){

flag=0;

if(dt.lc>r[i].lc){

dt.lc--;

time+=30;

}

for(m=0;m

//若该楼层有人等候,使其进入

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else

if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超

过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else

if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i].lc) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

/*接下来将电梯里的人按时间顺序送到各自的目的楼层*/

time=gettime(head);

if(dt.lc<=r[i].md&&r[i].in==1){

while(dt.lc<=r[i].md){

flag=0;

if(dt.lc

dt.lc++;

}

for(m=0;m

//若该楼层有人等候,使其进入

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else

if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else

if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i].md) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

else if(dt.lc>=r[i].md&&r[i].in==1){

while(dt.lc>=r[i].md){

flag=0;

if(dt.lc>r[i].md){

dt.lc--;

time+=30;

}

for(m=0;m

//若该楼层有人等候,使其进入

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else

if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else

if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

}

}

if(dt.lc==r[i].md) break;

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

time=gettime(head);

}

}

if(dt.door==1){

time=gettime(head);

ListInsert(head,g,"该层已无人进出,关门",time+40);

dt.door=0;

g++;

CLOSE(head,dt,time+40);

}

}

}

//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯

//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去

//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,人不在该楼层,要进去电梯

else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //4...人在电梯里,该楼层不是其目的楼层

flag=0;

if(i==0)time=s[0]/100; //以该事件发生的时间

为起始时间

else time=gettime(head); //取当前时间

if(dt.lc<=r[i].md){

while(dt.lc<=r[i].md){

flag=0;

if(dt.lc

dt.lc++;

time+=30;

}

for(m=0;m

//若该楼层有人等候,使其进入

if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

if((time-s[m]/100)<=r[m].rrsj){

time=gettime(head);

GET_IN(head,dt,time);

r[m].in=1;

}

else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){

r[m].biaozhi=1;

printf("\n此时有人离开,以下为离开的人的信息:\n");

printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);

}

flag=1;

}

//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯

else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){

if(flag==0&&dt.door==0){

OPEN(head,dt,time);

dt.door=1;

}

time=gettime(head);

time=gettime(head);

GET_OUT(head,dt,time);

r[m].biaozhi=1;

r[m].in=0;

flag=1;

乐龙仿真软件实验报告2

计信学院上机报告 课程名称:配送与配送中心姓名:夏冰山学号:0892110220 指导教师:陈达强班级:物流08乙日期:2010-04-17 一、上机内容及要求: 根据实验三仓储型物流中心模型,在乐龙软件种完成模型的建立; 1.根据模型仿真的结果分析瓶颈的所在; 2.改进模型,再次进行模拟; 二、完成报告(预备知识、步骤、程序框图、程序、思考等): 建立模型:根据实验三的要求建立模型,如图1所示。 模拟条件:时间模式为1:1,其他设备的速度为默认状态。 模型瓶颈: 在模拟运行6分钟后产生瓶颈。由于装货平台出的机械手臂速度过慢,导致货物在传送带上堵塞,影响入库速度。为此我们依次加快了机械手臂的速度,AS/RS水平和垂直方向的速度,瓶颈随着相应设备速度的调整随之转移。但是由于AS/RS堆垛机的最大速度受限,所以加快速度只能够缓解情况,而不能从根本上解除瓶颈。 为此提出解决方案如下: ①如果AS/RS的装货平台和卸货平台在同一侧,将入库申请和出库申请分别排序,第一个出 库作业和第一个入库作业组合为一个联合作业任务,从而缩短存取周期、提高存取效率; ②将AS/RS的装货平台和出货平台分设在仓库的两端,合理考虑入库货位和出货货位的位置, 使得堆垛机在巷道中的运行路径不重复或者重复线路最短; ③增加AS/RS的入库/出库平台数量。 实验感想: 模拟后根据直接观察或者通过日志文件的分析得到瓶颈,眼睛直接看到的瓶颈有时未必是真正的问题所在。例如本次实验,瓶颈直接产生在机械手臂,但是进过分析我们知道真正的瓶颈是AS/RS的堆垛机的速度。所以在寻找瓶颈时不要被假象所误导,随之做出无效的改进方案。

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

电梯控制智能化系统设计方案

精选范文、公文、论文、和其他应用文档,希望能帮助到你们! 电梯控制智能化系统设计方案 目录 第一章概述 (2) 第二章系统需求分析 (4) 第三章系统设计目标及原则 (5) 3.1系统设计目标 (5) 3.2系统设计原则 (6) 第四章系统解决方案及技术描述 (6) 4.1系统概述 (6) 4.2系统基本功能及特点 (7) 4.3系统结构 (8) 第五章设备介绍 (10) 第六章工作原理 (12) 第七章系统设备清单及价格 (14) 第八章工程实施 (15) 第九章售后服务 (17)

第十章质量保证 (19) 第一章概述 1.概述: 物业管理公司或管理人员为了能对楼宇内各种人员的进出 进行更有效、更安全的管理,有效的控制闲杂人员的进入,可以

通过采用对电梯的合理控制实现这种功能需求。VD-TK800是专门用于楼宇的电梯控制和集成的电梯专用控制器。通过采用VD-TK800对电梯按键面板进行改造后,所有使用电梯的持卡人,都必须先经过系统管理员授权。使用电梯时,不同的人有不同的权限分配,每个进入电梯的人经过授权可以进入指定的区域或楼层,并且可以根据时间表进行授权管理。未经授权,无法进入管理区域的楼层,并对重要楼层进行时间段控制。控制器不管是脱机运行还是联机控制,都可记录大量的交易数据,使得电梯的所有人员进出记录都有据可寻。 VD-TK800基于控制软件平台使用的一个控制模块,它与ACS2002门禁控制系统相互兼容,组成一个强大的保安系统网络,也可以独立使用来控制电梯。VD-TK800可在线运行,可以单机独立运行,即使关闭PC机,VD-TK800也可以正常使用,确保其稳定可靠的控制功能,从而提高楼宇管理层次。 VD-TK800/E智能电梯控制器

电梯控制器报告(Verilog实现)

华中科技大学课程设计报告数字电路与逻辑设计课程设计报告 题目:电梯控制器的设计与实现 专业:计算机科学与技术 班级: 学号: 姓名: 电话: 邮件:974985526@https://www.doczj.com/doc/0a17809831.html, 分组: 完成日期:2015.10.8 指导教师:

华中科技大学课程设计报告不建议采用本报告所采用的设计方案(异步时序),因为这样的实现过于复杂且难以调试。 建议仅采用统一的CLK作为always语句的更新条件,以实现同步时序的电路。

华中科技大学课程设计报告 目录 1课程设计概述 (5) 1.1课设目的 (5) 1.2课设要求 (5) 1.3课设任务 (5) 1.4实验环境 (5) 2基本方案设计 (7) 2.1设计需求 (7) 2.2总体结构设计 (8) 2.2.1时钟分频 (8) 2.2.2七段译码器显示模块 (8) 2.2.3电梯请求控制模块 (8) 2.2.4电梯开关门控制模块 (9) 2.2.5电梯运行总控模块 (9) 2.2.6电梯单次运行模块 (9) 2.2.7LED灯控制模块 (9) 2.3详细设计 (10) 2.3.1时钟分频 (10) 2.3.2七段译码器显示 (10) 2.3.3电梯请求控制模块 (10) 2.3.4电梯开关门控制模块 (12) 2.3.5电梯运行总控模块 (14) 2.3.6电梯单次运行模块 (14) 2.3.7LED灯控制模块 (14) 2.4实验过程与调试 (15) 2.4.1仿真结果 (15) 2.4.2主要故障与调试 (32)

华中科技大学课程设计报告 2.4.3模块内部图 (33) 2.5功能测试 (42) 2.5.1手动开关门测试 (42) 2.5.1重置功能测试 (44) 2.5.1常规使用测试 (46) 3总结与心得 (50) 3.1课设总结 (50) 3.2课设心得 (50) 参考文献 (52) 附录(源程序) (53)

计算机仿真实训实验报告实验1-4

实验一 熟悉MATLAB 工作环境 16电气5班 周树楠 20160500529 一、实验目的 1.熟悉启动和退出MATLAB 软件的方法。 2.熟悉MATLAB 软件的运行环境。 3.熟悉MATLAB 的基本操作。 二、实验设备及条件 计算机一台(带有MATLAB6.0以上的软件境)。 三、实验内容 1.练习下面指令: cd,clear,dir,path,help,who,whos,save,load 。 2.建立自己的工作目录MYBIN 和MYDATA ,并将它们分别加到搜索路径的前面或者后面。 3.求23)]47(*212[÷-+的算术运算结果。 4.M 文件的建立,建立M 文件,求出下列表达式的值: ?? ????-+=++=+= 545.0212),1ln(21 185sin 2222 1i x x x z e z o 其中

5.利用MATLAB的帮助功能分别查询inv、plot、max、round函数的功能和用法。 四、运行环境介绍及注意事项 1.运行环境介绍 打开Matlab软件运行环境有图1-1所示的界面

图1-1 MATLAB的用户界面 操作界面主要的介绍如下: 指令窗( Command Window ),在该窗可键入各种送给 MATLAB 运作的指令、函数、表达式,并显示除图形外的所以运算结果。 历史指令窗( Command History ),该窗记录已经运行过的指令、函数、表达式;允许用户对它们进行选择复制、重运行,以及产生 M 文件。 工作空间浏览器( Workspace Browser ),该窗口罗列出 MATLAB 工作空间中所有的变量名、大小、字节数;并且在该窗中,可对变量进行观察、编辑、提取和保存。 其它还有当前目录浏览器( Current Directory Browser )、 M 文件编辑 / 调试器(Editor/Debugger )以及帮助导航/ 浏览器(Help Navigator/Browser )等,但通常不随操作界面的出现而启动。 利用 File 菜单可方便对文件或窗口进行管理。其中 File | New 的各子菜单, M-file ( M 文件)、 Figure (图形窗口)、或 Model ( Simulink 编辑界面)分别可创建对应文件或模块。 Edit 菜单允许用户和 Windows 的剪切板交互信息。 2.在指令窗操作时应特别注意以下几点 1)所有输入的指令、公式或数值必须按下回车键以后才能执行。例如: >>(10*19+2/4-34)/2*3 (回车) ans= 234.7500 2)所有的指令、变量名称都要区分字母的大小写。 3)%作为MATLAB注释的开始标志,以后的文字不影响计算的过程。 4)应该指定输出变量名称,否则MATLAB会将运算结果直接存入默认的输出变量名ans。 5)MATLAB可以将计算结果以不同的精确度的数字格式显示,可以直接在指令视窗键入不同的数字显示格式指令。例如:>>format short (这是默认的) 6)MATLAB利用了↑↓二个游标键可以将所输过的指令叫回来重复使用。按下↑则前一次输入的指令重新出现,之后再按Enter键,即再执行前一次的指令。

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

电梯控制系统设计方案

上海四景计算机信息科技有限公司 电 梯 控 制 系 统 方 案

上海四景计算机信息科技有限公司 舒特电梯智能控制系统 ---楼宇自动化的首选 前言: 系统概述: 随着高科技的蓬勃发展,智能化管理已经走进了人们的生活。物业管理公司或管理人员为了能对楼宇内各种人员的进出进行更有效、更安全的管理,有效的控制闲杂人员的进入,可以通过采用对电梯的合理控制实现这种功能需求。所有的电梯楼层,都必须先经过系统管理员授权。使用电梯时,不同的人有不同的权限分配,每个进入电梯的人经过授权可以进入指定的区域或楼层,并且可以根据时间表进行授权管理。未经授权,无法进入管理区域的楼层,并对重要楼层进行时间段控制。控制器不管是脱机运行还是联机控制,都可记录大量的交易数据,使得电梯的所有人员进出记录都有据可寻。针对这些需求我们开发了电梯楼层控制器,并分为手动型和自动型两款,客户可以根据需求选择适合自己的产品。 通过智能卡管理电梯运行,可将闲杂人员阻止在电梯之外;同时,又起到了电梯省电省空耗的环保作用;也减少了出现电梯按键失灵的情况;延长了电梯使用寿命;加强了传统安全管理系统中管理的薄弱的一面;提高了物业的安全等级,电梯系统智能化控制已逐渐成为智能化建筑楼宇中必不可少弱电系统之一 二、选择使用电梯控制系统带来的好处 (一)使用梯控制系统可有效的控制闲杂人员的进入,可以通过采用对电梯的合理控制实现各种功能需求。 (二)使用梯控制系统能够提高楼盘的整体智能化程度,提升楼盘亮点和档次,充分体现智能化楼宇和智能化小区意义,是楼盘更具附加值。 (三)使用梯控制系统能够使公共电梯轻松晋级为私有电梯,能够让业主充分体现私有电梯的尊贵和方便性。 (四)使用梯控制系统能够为用户提供更方便和更公平使用。 (五)协助收取物业费 管理人员可对系统的用户卡设定使用权限,设定失效日期,便于控制管理费用的收取。 如用户使用到达使用的失效时间,则不能开梯,提醒并促使用户到达管理处及时缴费,对于不按时交纳物业费的业主,则不能使用电梯,有效的将管理费用与用户使用权限挂

plc实验报告之三层电梯的运行

电气控制综合实验报告 PLC控制系统目:三层电梯项 132 电班级: 名:姓 学号:联系 方式: 2015-2016-2 期:学 实验过程记录以及调试步骤及方法 第一章实验过程记录1.好好复习老师之前讲的一些基本的电路,例如轿 厢内锁存电路,门厅锁存电路等,将这些基本的电路搞懂之后,就可以开始设计接下来的电路啦。 2.认真查看电梯要求的7大原则,开始设计梯形图,并用GX Works2进行仿真,并及时发现问题,加以修改。 3.在GX Works仿真都没有问题后,去实验室,用组态软件再进行仿真, 看电梯能否自如顺畅的运行,因为开门是通过延时来实现的,组态仿真,看之前设置好的定时器定时的时间是否能让电梯顺利的关门开门,若不行,修改定时器定时的时间,知道符合要求为止。这个可分为一下几小部分:打开计算机;a. 软件,将自己编写好的程序拷入电脑并打开;打开GX Works2b. ;PLC拨到调为由RUNSTOP状态,然后将程序写入c.将PLC (即运行状态)状态,然后打开组态;RUNd.将PLC调为 运行组态,点击启动;e.

开始根据组态运行的结果来调试,找出错误并修改程序,直至完成设计要求;f. 实验调试步骤及方法介绍 1.调试软件GX Works2 编程软件,是专用于PLCPLC设计、调试、GX Work2是三菱电机推出的三菱综合维护的编程工具。与传统的GX Developer 软件相比,提高了功能及操作性能,变得更加容易使用。梯形图绘制时更加的简单明了,例如输入X000,只要打X000,然后按回车键就好了,输出Y001,只要打Y001,然后按回车键就好了,输入特别的简单,很方便。例如下图: 图 GX Works2新建工程后界面 2.程序的调试 用软件GX Works2软件进行调试,是很有必要的一部分,它能帮你发现一些画梯PLC形图时出现的问题,还有一些意想不到的问题,熟练掌握调试方法对我们以后 的编程很有意义。 调试步骤3. 软件中,输入好之后,点将自己设计好的梯形图一行一行的输入到GX Worksa.击菜单栏中的“调试”,如下图: 图调试下拉菜单 b.点击模拟开始,可进行软件调试,如图: 图开始加载调试图 等到加载到百分之百就可以开始调试了。 c.在梯形图上面右击,出现下拉菜单,如图:

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

2019年电梯控制智能化系统设计方案.

2019年电梯控制智能化系统设计方案 目录 第一章概述 (2) 第二章系统需求分析 (3) 第三章系统设计目标及原则 (4) 3.1系统设计目标 (4) 3.2系统设计原则 (4) 第四章系统解决方案及技术描述 (5) 4.1系统概述 (5) 4.2系统基本功能及特点 (5) 4.3系统结构 (5) 第五章设备介绍 (7) 第六章工作原理 (8) 第七章系统设备清单及价格 (10) 第八章工程实施 (11) 第九章售后服务 (13) 第十章质量保证 (14)

第一章概述 1.概述: 物业管理公司或管理人员为了能对楼宇内各种人员的进出进行更有效、更安全的管理,有效的控制闲杂人员的进入,可以通过采用对电梯的合理控制实现这种功能需求。VD-TK800是专门用于楼宇的电梯控制和集成的电梯专用控制器。通过采用VD-TK800对电梯按键面板进行改造后,所有使用电梯的持卡人,都必须先经过系统管理员授权。使用电梯时,不同的人有不同的权限分配,每个进入电梯的人经过授权可以进入指定的区域或楼层,并且可以根据时间表进行授权管理。未经授权,无法进入管理区域的楼层,并对重要楼层进行时间段控制。控制器不管是脱机运行还是联机控制,都可记录大量的交易数据,使得电梯的所有人员 进出记录都有据可寻。 VD-TK800基于控制软件平台使用的一个控制模块,它与ACS2002门禁控制系统相互兼容,组成一个强大的保安系统网络,也可以独立使用来控制电梯。VD-TK800可在线运行,可以单机独立运行,即使关闭PC机,VD-TK800也可以正常使用,确保其稳定可靠的控制功 能,从而提高楼宇管理层次。 VD-TK800/E智能电梯控制器

汇编语言模拟电梯实验报告书

一.实训目的 (1) 二.实训内容与要求 (1) 1.基本内容 (2) 2.实训要求 (2) 三.实训设计思路 (1) 1.总体思路 (3) 2.硬件设计 (4) 3.软件设计 (6) 四.模拟电梯源代码 (9) 五.加载调试 (28) 六.实训总结 (30) 1.出现的问题及排除方法 (30) 2.实训注意事项 (30) 3.心得体会 (1) 七.参考文献 (31) 一.实训目的 1.了解电梯调度算法,运用汇编语言编写程序。 2.利用微机实验系统来模拟电梯,实现电梯功能。 3.进一步掌握微机接口的设计方法,正确连各芯片引脚。 4. 加强学生实际应用能力及综合知识运用能力的培养。

二.实训内容与要求 绘制流程图、根据流程图编写程序、选用硬件电路编制应用软件、自主选择硬编制应用软件,并画出详细原理图。 2.实训要求 用键盘、按钮、八段码和LED模拟电梯工作过程。楼层设为8层,键盘数字键1~8用来键入希望停的楼层,8个LED显示希望停的楼层,八段码指示电梯当前所在楼层,按钮用来启、停电梯。电梯正常运行时以每2秒1层的速度上升或下降。要求“电梯”能按以下方式运行: (1)设电梯停在某层。键入1~8数字键,如数字与当前电梯停层同,则什么亦不动作,若不同则相应楼层的LED亮;如按运行键,则电梯自动判别上升或下降一直到达希望停的楼层。 (2)设电梯正在上升或下降运行,若键入新的希望停的楼层数字,则对同方向未到的楼层能停,对其它情况则先停原希望停的楼层,然后按运行键后继续运行)。如下几例: 电梯在2层,向上运行,LED希望在6层停,若键入4,则将在4楼停,若按运行键,则运行至6层停;若键入的不是4而是8,则电梯将先停在6层,再按运行键,运行至8层停若键入的不是4(或8),而是1,则电梯先停在6层,再按 运行键,运行至1层停。

模电仿真实验报告。

模拟电路仿真实验报告 张斌杰生物医学工程141班学号6103414032 Multisim软件使用 一、实验目的 1、掌握Multisim软件的基本操作和分析方法。 二、实验内容 1、场效应管放大电路设计与仿真 2、仪器放大器设计与仿真 3、逻辑电平信号检测电路设计与仿真 4、三极管Beta值分选电路设计与仿真 5、宽带放大电路设计与仿真 三、Multisim软件介绍 Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。工程师们可以使用Multisim交互式地搭建电路原理图,并对电路进行仿真。Multisim提炼了SPICE仿真的复杂内容,这样工程师无需懂得深入的SPICE技术就可以很快地进行捕获、仿真和分析新的设计,这也使其更适合电子学教育。通过Multisim和虚拟仪器技术,PCB设计工程师和电子学教育工作者可以完成从理论到原理图捕获与仿真再到原型设计和测试这样一个完整的综合设计流程。 一、实验名称: 仪器放大器设计与仿真 二、实验目的 1、掌握仪器放大器的设计方法 2、理解仪器放大器对共模信号的抑制能力 3、熟悉仪器放大器的调试功能 4、掌握虚拟仪器库中关于测试模拟电路仪器的使用方法,如示波器,毫伏表信 号发生器等虚拟仪器的使用 三、设计实验电路图:

四、测量实验结果: 差模分别输入信号1mv第二条线与第三条线:第一条线输出为差模放大为399mv。 共模输入2mv的的电压,输出为2mv的电压。 五、实验心得: 应用Multisim首先要准备好器件的pspice模型,这是最重要的,没有这个东西免谈,当然Spice高手除外。下面就可以利用Multisim的元件向导功能制作自己的仿真元件模型了。将刚刚做好的元件保存,你可能注意到了,保存的路径里面没有出现Master Database,即主数据库,这就是Multisim做的较好的其中一方面,你无论是新建元件还是修改主数据库里面的元件,都不会影响主数据库里面的元件,选好路径以后点击Finish即可,一个新元件就被创建了。在应用电子仿真软件 Multisim进行虚拟仿真时,有许多传感器或新器件,只要知道了它们的电特性或在电路中的作用,完全可以灵活采用变通的办法代替进行仿真,本来软件就是进行虚拟实验的,并不一定非要用真实元件不可,这样可以大大地拓宽电子仿真软件 Multisim的应用范围。再说用软件仿真时不存在损坏和烧毁元件、仪器的问题,只要设计好了电路都可以试一试,仿真成功了就可以进行实际电路的组装和调试,不

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

基于PLC的三层电梯控制系统设计 开题报告

工学院毕业设计(开题报告) 题目:基于PLC的三层电梯控制设计 专业:机械械设计制造及其自动化 班级:06级(2)班 姓名:石德龙 学号:2006664220 指导教师:陈娟 日期: 2010-6-7

安徽科技学院本科生毕业论文(设计)选题申请表 基本情况课题名称 教师姓名职称 课题来源 A.科研 B.生产 C.教学 D.其它课题类型 A.论文 B. 设计 选 题 理 由 签字: 年月日 指 导 教 师 意 见签字: 年月日 审 题 意 见 教学院(部)签章: 年月日安徽科技学院本科生毕业论文(设计)开题报告书

题目基于三层电梯的PLC控制 学生姓名石德龙指导教师陈娟职称副教授 一、本课题的研究背景及意义 (1)题目背景:随着城市建设的不断发展,楼群建筑不断增多,电梯在当今社会的生活中有着广泛的应用。电梯作为楼群建筑中垂直运行的交通工具已与人们的日常生活密不可分。实际上电梯是根据外部呼叫信号以及自身控制规律等运行的,而呼叫是随机的,电梯实际上是一个人机交互式的控制系统,单纯用顺序控制或逻辑控制是不能满足控制要求的,因此,大部分电梯控制系统都采用随机逻辑方式控制。传统的电梯运行逻辑控制系统采用继电器逻辑控制线路。这种控制线路,存在易出故障、维护不便、运行寿命较短、占用空间大等缺点。从技术上发展来看,这种系统将逐渐被淘汰。如何解决电梯的可靠性、维护方便等问题已成为全社会关注的焦点和大众的迫切心声。 (2)题目研究的意义:目前,由可编程序控制器和微机组成的电梯运行逻辑控制系统,正以很快的速度发展着。采用PLC控制的电梯可靠性高、维护方便、开发周期短,这种电梯运行更加可靠,并具有很大的灵活性,可以完成更为复杂的控制任务,已成为电梯控制的发展方向,其许多功能是传统的继电器控制系统无法实现。 可编程控制(Programmable Controller)系统是专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出控制各种类型的机械设备或生产过程。通过可编程控制器可以实现由继电器实现的逻辑控制功能,而且最主要的是可编程控制器的“可编程”功能,使得当改变电梯的控制功能时,只要更改程序即可,而不需要像继电器控制系统那样改变硬件和接线。 二、本课题国内外研究现状 传统的电梯控制系统主要采用继电器—接触器进行控制,其缺点是触点比较多,故障高,可靠性差、体积大、维修工作量大等缺点,正逐步被淘汰。世界上各主要PLC生产厂家几乎都有运动控制功能,它的运动控制功能广泛地应用于各种机械,如金切削机床、金属成型机械、电梯等;随着计算机控制的发展,近年来国外工厂

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

最新四层电梯的自动控制系统及模拟系统设计

四层电梯的自动控制系统及模拟系统设计

陕西国防工业职业技术学院 SHAANXI INSTITUTE OF TECHNOLOGY 毕业设计说明书 题目四层电梯的自动控制系统及模拟系统

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段

保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

基于单片机的智能电梯控制系统设计

基于单片机的智能电梯控制系统设计

摘要 本文介绍了一种采用单片机STC89C52芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现四层电梯的智能控制,利用单片机编程简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。本设计实现了电梯控制系统所需的一些基本功能,能通过电梯内按键或者电梯外上升、下降按键选择楼层,数码管显示实时楼层数,LED显示实时电梯运行状态。原理图和PCB部分采用protel99se专业软件来设计,实现将设计产品化。本次设计更注重了把一些新的思路加入到设计中。主要包括采用了STC89C52芯片,使用C语言进行编程,使其具有了更强的移植性,更加利于产品升级。 关键词:STC89C52;电梯控制系统;protel99se;C语言

Abstract This paper introduces a design method of using STC89C52 chip for elevator control system, mainly describes how to use microcontroller programming to achieve the intelligent four storey elevator control, the design method of microcontroller programming simple and variable, shortens the development cycle, at the same time that the elevator control system smaller and more powerful. Some of the basic functions of the design and implementation of elevator control system required by the elevator, elevator buttons or rise, decline the key to select the floor, digital tube display real-time number of floors, LED display real-time operating state of elevator. Schematic and PCB design using Protel99SE software, the design of products. This design pays more attention to some new ideas into the design. Including the use of the STC89C52 chip, the use of C language programming, which has portability stronger, more conducive to the upgrading of products. Keywords: STC89C52; elevator control system; Protel99SE; C language

系统仿真,电梯

复杂系统建模与仿真 实验报告 报告人: 吴陈鹤1083班3111315003 田博1084班3111316001

一.电梯仿真实验 1.模型设计说明 模拟一个五层楼的电梯系统,该楼有一个自动电梯,能在每层停留。设计一个电梯运行的模型,保证乘客的等待时间最短。 2.模型设计思想 (1)五个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来该层候命。五个楼层从下到上的编号为:0、1、2、3、4。除了地下层外,每一层都有一个要求向下的按钮除了第四层外,每一层都有一个要求向上的按钮。对应的变量为:CallUp[0..3]和CallDown[1..4]。电梯内的五个目标层按钮对应的变量为:CallCar[0..4]。 (2)电梯一共有七个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。 (3)乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。对于在楼层内等待电梯的乘客,将插入在等候队列里,每一层有两个等候队列,一队要求向上,一队要求向下,用链队列来实现。对于在电梯内的乘客,用五个乘客栈来实现,该乘客要去哪一层,就把他放在相应编号的栈中,对应变量为EleStack[0…4]。 (4)模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要耗费一定的时间单位(简记为t): ●有人进出时,电梯每隔40t测试一次,若无人进出,则关门 ●关门和开门各需要20t ●每个人进出电梯均需要25t ●电梯加速需要15t ●上升时,每一层需要51t,减速需要14t ●下降时,每一层需要61t,减速需要23t ●如果电梯在某层静止时间超过300t,则驶回1层候命。 (5)按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。 3.模型设计概要 本程序包含6个模块: (1)主程序模块 (2)乘客模块 (3)乘客栈模块 (4)电梯模块 (5)等待队列模块 (6)高楼模块:实现电梯和乘客之间的互交。 各模块之间的调用关系如下:

单片机实验报告含仿真设计

单片机原理及应用课程 实验报告 专业: 班级: : 学号:

实验一、keilC51及proteus软件的使用 一、实验目的: 1、掌握keil和proteus软件的基本操作 2、通过具体实例掌握keil和proteus软件的使用。 二、实验原理: keil使用步骤,proteus使用步骤 三、程序: 四、实验结果分析: 五、总结:学会了使用keil和proteus软件,掌握了利用keil和proteus 软件进行仿真的步骤。

实验二、并行输入/输出接口实验 一、实验目的: 1、进一步熟悉keil仿真软件、proteus仿真软件的使用。 2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。 3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。 二、实验原理: MCS 51单片机的串行口在实际使用中通常用于三种情况:利用方式 0 扩展并行 i/0 接口:利用方式 1 实现点对点的双机通信;利用方式 2 或方式 3 实现多机通信。利用方式 0 扩展并行 i/0 接口 MCS 5 1 单片机的串行口在方式 0 时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。 三、程序: #include sbit P1_0=P1^0; void main() { unsigned char i; unsigned int j; SCON=0x00; i=0x01; for(;;) {

P1_0=0; SBUF=I; while(!TI) {i} P1_0=1;TI=0; for(j=0;j<=254;j++){;} i=i*2; if(i==0x00) i=0x01; } } 四、实验结果分析: 五、总结:进一步熟悉了keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会了构建简单的流水灯电路。掌握了C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。

数据结构课程设计报告-学生成绩管理系统[]

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构课程设计 题目:用C语言实现成绩统计程序的设计系名:信息工程系 专业班级:计算机1121 姓名:吴涛 学号:10210412104 指导教师:司晓梅 2016年3 月20日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:数据结构课程设计指导教师:司晓梅班级名称:计算机1121 开课系、教研室:信息系计算机 一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。 任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。 二、课程设计的内容与基本要求 设计题目:用C语言实现成绩统计程序的设计 〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法: (1)输入每个人的各门课程的成绩,计算每人的平均成绩; (2)按平均成绩的高低次序,打印出个人的名次,平均成绩相同的为同一名次; (3)按名次列出每个学生的姓名和各科成绩; 〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制; 〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解; 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书; 三、课程设计步骤及时间进度和场地安排 时间:1周地点:现代教育中心 具体时间安排如下: 第一天:布置题目,确定任务、查找相关资料 第二天~第四天:功能分析,编写程序,调试程序、运行系统; 第五天上午:撰写设计报告; 第五天下午:程序验收、答辩。 四、课程设计考核及评分标准

相关主题
文本预览
相关文档 最新文档