交通信号灯模拟PV操作.docx
《交通信号灯模拟PV操作.docx》由会员分享,可在线阅读,更多相关《交通信号灯模拟PV操作.docx(21页珍藏版)》请在冰豆网上搜索。
交通信号灯模拟PV操作
交通信号灯模拟
第一章课程设计目的和要求
1.1课程设计目的
根据学院课程安排,在大三的第一个学期我们开设了操作系统这门课程,操作系统可以说是是计算机系统的核心和灵魂,是计算机系统必不可少的组成部分。
通过学习,对于操作系统的运行方式以及设计理念有了较清楚的认识。
要想真正学好并理解操作系统这门课程,不但需要理解操作系统的概念和原理,还需要加强操作系统实验,上机进行编程实践,现在一学期的课程已经结束,本次课程设计在同学们掌握理解该课程的基础上,对操作系统内部的一些具体项目的实现方法进行实战演练,通过实践将知识彻底掌握。
操作系统课程设计是该课程重要的实践教学环节。
通过这次课程设计,一方面可以使学生更透彻地理解操作系统的基本概念和原理,摆脱抽象的理解,从实践中将理论具体化;另一方面,通过课程设计还可以加强学生的实践能力,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。
本次课程设计的题目为交通信号灯模拟,在熟练掌握课本所讲解的计算机的P操作和V操作的原理的基础上,利用C++程序设计语言在windows操作系统下模拟实现交通信号灯的模拟,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。
1.2课程设计要求
在深入理解操作系统基本原理和充分理解课题的基础上,对于选定的题目,独立自主思考,通过查阅相关资料,先确定设计方案,设计程序的运行流程,分析程序所需的模块及各个模块所包含的功能,之后设计每个模块的处理流程,并画出相应的流程图,要求设计合理,利用VC++6.0编程实现,并且程序要拥有可视化的运行界面,界面应清楚地反映出系统的运行结果,之后个人确定好测试方案,选择测试用例,对系统进程测试,运行程序并截图,截图要能充分说明结果,说明系统的使用方法和特点,并提交课程设计报告。
对于模拟交通信号灯的情况,要求在掌握P、V操作的基础上,能够进行合理的调度,并利用各种算法来实现车辆通行、控制、记录等功能。
第二章课程设计任务内容
2.1课程设计任务
一个十字路口,共有四组红绿灯,每个路口的车辆都遵循"红灯停,绿灯行"的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的"十字路口交通管理"情况.
车辆通行设定:
路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,可以自行计算。
进程的互斥:
交通灯进程实际上是互斥的,即不能同时为红或者同时为绿.
进程的消息通信或其他通信方式:
对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口.
进程的调度:
停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
2.2课程设计原理
本实验利用P、V操作进行设计。
信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。
P原语操作的动作是:
(1)S减1;
(2)若S减1后仍大于或等于零,则进程继续执行;
(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作的动作是:
(1)S加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。
在PV原语行期间不允许有中断的发生。
本课题利用P操作和V操作来模拟车辆的出发和到达。
2.3课程设计内容
假设在一个十字路口,共有四组红绿灯,每个路口的车辆都遵循"红灯停,绿灯行"的原则,假设将每一台汽车都作为一个进程,要求设计良好的调度机制,展示出合理的"十字路口交通管理"情况.
对于本程序,对于车辆通行,设定为路口的宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,并且可以自行计算。
交通灯的进程实际上是互斥的,即不能同时为红或者同时为绿.对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口.
同时,停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
在模拟车辆运行的进程中,要求可以按要求捕捉所需要的车辆的出发时间。
在进程程序设计的过程中要保证程序运行的流畅度,合理模拟车辆遇到红绿灯变换是黄灯的暂停情况。
对于结果的分析要能够得到具有代表性的数据,比如可以根据用户需要捕获特定的某辆车的情况等。
第三章详细设计说明
3.1模块描述
对于交通信号灯模拟程序,其功能模块图如下图3-1所示:
图3-1交通信号灯模拟程序功能模块图
对于交通信号灯模拟程序,系统需要实现的功能包括:
1、模拟车辆驶出十字路口的一端。
2、模拟车辆到达路十字路口的另一端。
3、可以记录需要的车辆的出发时间和编号。
4、利用有效的调度程序对车辆的行进进行相应的控制。
5、要能对车辆是否能行进进行合理的判断。
6、要能合理的进行红绿灯的变换操作。
3.2性能描述
交通信号灯模拟程序,要求能模拟出交通信号灯处的车辆运行状况,要求能进行合理的调度和红绿灯切换,不考虑车辆在十字路口中间行驶的过程,视为离开后下一时刻直接到达对面。
要求能记录想要记录的车辆的运行时间以及车辆编号。
车辆的运行通过P操作和V操作执行,P操作进行车辆驶出的操作,V操作进行车龄到达的操作。
车辆运行调度通过ETW和STN执行,分别判断南北向和东西向是否有车,由此来控制是否能进行通车。
红绿灯的变换用来调整南北和东西是否有车的状态,同时进行输出,报告红绿灯切换状态并暂停2秒。
3.3输入项
对于交通信号灯模拟程序,需要的输入项包括:
东、西、南、北四个方向的车辆数量,需要记录的车两的驶来方向和需要记录的车辆的编号,如表3-1所示。
表3-1自行输入数据表
数据项名称
东车数量
南车数量
西车数量
北车数量
编号
方向
数据类型
int
int
int
int
int
int
数据值有效范围
0~100
0~100
0~100
0~100
任意
任意
输入媒体
键盘
键盘
键盘
键盘
键盘
键盘
需要在定义里定义的数据,可自行更改,如下:
绿灯持续时间,如表3-2所示。
表3-2初始定义数据表
输入项名称
红绿灯变幻时间
数据类型
int
有效范围
任意(建议30~40)
输入媒体
键盘
3.4输出项
对于交通信号灯模拟程序,需要的输出项包括:
车辆行驶的方向、车辆编号、车辆出发时间,如表3-3所示:
表3-3输出项表
输出项名称
行驶方向
车辆编号
出发时间
数据类型
char
int
int
可选值
E、W、S、N
任意
任意
长度
1
任意
任意
输出位置
屏幕
屏幕
屏幕
3.5数据结构
为了实现题设的要求,在VC++6.0环境下编译实现,整个系统的主要流程设计为如下步骤:
1.定义全局变量用来存放实验所需基本信息
2.change函数实现交换无车标志的功能
3.P函数模拟P原语的功能
4.V函数模拟V原语的功能
5.ETW函数实现东西方向的车辆调度
6.STN函数实现南北方向的车辆调度
7.main函数实现程序的输入接口以及模拟演示
3.6算法介绍
设计P(inti)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时间。
设计V(inti)函数实现时间的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时间。
设计东西调度函数ETW()以及南北调度函数STN()在互斥方向无车且绿灯状态下循环调用P、V函数实现单方向队列上车辆的循环调度。
设计main()函数用来提供程序的输入接口,并实现南北东西方向函数的交叉调度,以及预测车辆出发时间的输出显示。
3.7流程图
3.7.1主程序流程图
交通信号灯模拟程序,运行开始时显示制作人信息,确定后按要求输入各个方向的车辆数量,之后输入初始红绿灯状况并输入要记录的车辆的来向和车辆编号。
组程序的流程图如图3-2所示。
图3-2交通信号灯模拟主程序流程图
3.7.2算法流程图
P(inti)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时间,P操作算法流程图如图3-3所示。
图3-3P操作算法流程图
V(inti)函数实现时间的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时间,V操作算法流程图如图3-4所示:
图3-4V操作算法流程图
3.8接口描述
intMax[4]
说明:
记录东、西、南、北四个方向的车数量。
intTime
说明:
记录当前行进时间。
intR[30]
说明:
记录当前车辆的编号。
intPS
说明:
用来存储东西南北的数字编号。
intPN
说明:
存储预测车辆编号。
intPT
说明:
用来存储测车辆出发时间。
intSN
说明:
东西有无车(1无车,0有车)
intEW
说明:
南北有无车(1无车,0有车)
intT
说明:
红绿灯变幻时间。
intL[2]
说明:
东西方向红绿灯状态,0时为红灯,1时为绿灯。
charFX[4]
说明:
用来存储东西南北四个方向的名字,分别为E、W、S、N。
3.9限制条件
交通信号灯模拟程序限制条件如下:
1、每个方向的车辆数量不能超过100;
2、车辆按照先后次序进行排号,不能自定义编号;
3、必须指定程序开始执行时的红绿灯状况。
第四章软件使用说明
4.1系统开发与运行环境
代码实现:
C++语言程序
开发工具:
MicrosoftVisualC++6.0
运行环境:
windowsXP或更高版本操作系统
执行方式:
文件打开后直接执行
窗口界面:
MS-DOS窗口界面
操作方式:
全键盘控制
操作需要相关专业技能:
无
4.2系统的运行说明
交通信号灯模拟程序的运行说明如下:
1、按照系统提示一步一步向下走即可顺利执行程序。
2、输入数据的过程中一定要尽量保证数据的正确性,防止因数据不正确而造成程序的崩溃等问题。
3、在所有数据都输入之后,程序会自动直接开始运行,运行过程中程序会自动执行到最后,而不会运行一步停下来等待用户的指示,因此为了保证用户检验数据,请在运行之前做好充分的数据记录,以便与理论值进行对照。
本系统是一款多功能,操作方便,界面友好的软件。
软件所提供的所有功能都可以通过键盘操作实现,简单易行,会给用户的相关操作带来很大方便。
4.3运行结果
1、系统初始界面如图4-1所示。
图4-1系统初始界面
2、如果这里输入错误,会显示如图4-2所示的界。
图4-2错误报警
3、当输入正确后,会显示如图4-3所示的内容。
图4-3输入正确显示
4、选择红绿灯状态后会出现图4-4的界面。
图4-4选择红绿灯
5、依次输入四个方向的车的数量之后出现如图4-5所示的画面。
图4-5输入车辆数
6、选择预测方向之后会出现如果4-6所示的画面。
图4-6选择预测方向
7、输入预测的车辆编号之后会直接开始执行,出现如图4-7所示的画面。
图4-7输入编号开始执行
8、在运行过程中遇到红绿灯切换的状态,如图4-8所示。
图4-8红绿灯切换文字及延时
9、最终运行完毕后,程序会给出相应预测的结果,内容如图4-9所示。
图4-9预测结果
第五章课程设计心得体会
三周的课程设计结束了,我的课程设计题目是交通信号灯模拟,通过课程设计我对P操作和V操作又有了更深入的认识,同时更加熟练的掌握了利用VC++6.0去解决这类模拟问题的方法。
这次课程设计的题目不难,应该说是比较简单的,实现的过程也比较的顺利,没有特别大的难点,虽然比较简单,但是依然能从中学到不少程序设计的方法,虽然是在windows平台上进行设计,但也能从一定的程度上对Linux系统的设计方法得到了更深入的了解,加深了自己对课本上知识的认识。
最后,感谢老师对我的学习的指导!
附录1:
参考文献
[1]胡志刚,谭长庚等,《计算机操作系统》,中南大学出版社2005年
[2]罗宇,邹鹏等,《操作系统》(第二版),电子工业出版社2007年4月
[3]汤子瀛,哲风屏,汤小冉等,《计算机操作系统》,西安电子科技大学出社,2001年8月
[4]张尧学,史美林,《计算机操作系统课程》,清华大学出版社,2000年
[5]庞丽萍,《操作系统原理》,华中理工大学出版社,2000年
[6]马季兰等Linux操作系统,电子工业出版社2002年
[7]任爱华,李鹏,刘方毅,操作系统实验指导,清华大学出版社,2004年
[8]谭浩强著.C程序设计,清华大学出版社,1999年12月第2版
[9]谭浩强著.C++程序设计实践指导,清华大学出版社,2005年7月底1版
[10]【美】D.C.Malik:
C++编程——从问题分析到程序设计,电子工业出版社,2003年7月第1版
附录2:
程序清单
交通信号灯模拟:
#include
#include
#include
#include
usingnamespacestd;
intMax[4];
intTime=0;
intR[30];
intPS=1,PN=1,PT=1,SN=0,EW=1;
intT=30;
intL[2];
charFX[4];
voidP(int);
voidV(int);
voidchange();
voidSTN();
voidETW();
voidP(inti)//P函数,i为方向判断标志
{
if(Max[i]>0)
{
Max[i]=Max[i]-1;//i方向上的车辆等待数目减一
R[i]++;//当前车辆编号
if((PS-1)==i&&R[i]==PN)
PT=Time;//保存预测时间
cout<