C语言程序设计方案报告书.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计方案报告书.doc》由会员分享,可在线阅读,更多相关《C语言程序设计方案报告书.doc(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 C语言程序设计试验设计汇报 学院:_机电工程 专业班级: 自动化31班 学生姓名: 王刘鄞 学号: 指导老师: 段江涛 设计题目: _三层电梯状态机编程_ 05月18日 目录1. 设计题目:三层电梯状态机3 前期只考虑了三层电梯模型,由此产生了(版本一) 后期对电梯程序进行了修改,适应多楼层(版本二)2. 设计方案:3 2.1前期设计方案(版本一) 2.2后期改善及楼层推广,适应多楼层(版本二)3.状态机建模:3 3.1状态图建立图一:状态图图二: 思维图 3.2状态机功效模块 3.3函数和调用关系4.代码分析及程序优化9 4.1版本一和版本二初始化比较分析 4.2版本一和版本二上升函数部分
2、比较分析 4.3版本一和版本二下降函数部分比较分析 4.4版本一和版本二开门函数部分比较分析 4.5版本一和版本二关门函数部分比较分析 4.6两种版本评定及比较分析5. 系统运行测试结果分析17测试一:电梯内楼层按键使用及演示(现在基于三层)测试二:楼层外上下按键使用及演示测试三:开关门按钮使用及演示测试四:自动到一楼综合测试分析以上测试结果对于版本一及版本二全部适用,实测正确。6.学习心得及部分改善和调试过程中心得体会 261. 设计题目:三层电梯状态机课程设计2. 设计方案: 版本一:以每个楼层可能情况判定分析-穷举法 经过设计多种状态翻转,利用状态机模型,来实现电梯正常运转,首先对全部可
3、能发生事件进行罗列,并进行归类,抵达一个好状态分析。依据日常经验分析,我采取是把电梯运动进行归类,把门分为四种状态,门开(Dooropen),门正在关(DoorClosing),电梯上升(Movingup),下降(Movingdown),而把什么全部不做视为第一状态(Idle,和在里面判定是否有外部事件发生),在这状态下,能够实现向其它四状态跳转。 版本二:只对事件不对楼层判定-通常化 在版本一上进行了,代码改善,使用静态检测对楼层进行了通常化处理,不细分楼层3.状态机建模3.1状态图图一:参考图二:具体条件判定状态图(插图)3.2状态机功效模块一:初始化二:移动 下降模块上升模块三:开关门开
4、门模块关门模块可能发生Events:E1: 门内开门按钮(OpenDoorLight) E2: 门内关门按钮(CloseDoorLight)E3: 门内楼层按钮(PanelFloorLight) 现在使用三个按钮(1,2,3)E4: 门外up呼叫按钮(Call Light)E5: 门外down呼叫按钮(Call Light)3.2函数和调用关系:状态机关键函数及自己发挥部分/*/void Idlestate(int *state); /初始化函数void movingup(int *state); /向上升函数void movingdown(int *state);/下降函数void Door
5、open(int *state); /开门函数void Doorclosing(int *state) /门关闭函数初始化函数依据条件跳转上升下降及开门函数;上升下降函数依据条件跳转开门函数;门开函数依据条件调用门关闭函数;门关闭依据条件调用初始化及门开;三层电梯使用到函数/*/ 系统是否运行bool IsElevatorRunning();/ 电梯门外Up/Down呼叫按钮灯(Call Light)bool GetPanelFloorLight(int floor);void SetCallLight(int floor, bool up, bool s);/ 电梯门内楼层按钮灯(Panel
6、 Floor Light)bool GetPanelFloorLight(int floor); / IdleWhatFloorToGoTo()等函数中用void SetPanelFloorLight(int floor, bool s);/ 电梯门内开关门按钮灯bool GetOpenDoorLight();void SetOpenDoorLight(bool s);bool GetCloseDoorLight();void SetCloseDoorLight(bool s);/ 电梯箱体门bool IsDoorOpen(int floor);bool IsDoorClosed(int fl
7、oor);void SetDoor(int floor, bool open);/ 设置电机功率,power=1,全速上升;-1,全速下降;0,停止void SetMotorPower(double power);/ 一定时间无动作,自动到1楼extern void AutoTo1Floor();/ 取消自动到1楼extern void CancelTo1Floor();/ 获取电梯箱体目前所在楼层double GetFloor(); / 浮点数,如1.5,表示电梯箱体处于1层到2层中间int GetNearestFloor(); / GetFloor()函数四舍五入值if(fabs(GetF
8、loor() - GetNearestFloor() Lib_FloorTolerance) 抵达GetNearestFloor()层 / 静态监测,电梯处于空闲状态, 确定下一步运动方向和所到楼层(目标楼层)int IdleWhatFloorToGoTo(bool *up);int floor; bool up;floor = IdleWhatFloorToGoTo(&up);/ 动态监测, 电梯正在上升时,检测将要抵达停止最近楼层(目标楼层)int GoingUpToFloor();/ 动态监测, 电梯正在下降时,检测将要抵达停止最近楼层(目标楼层)int GoingDownToFloor
9、();/*/3.3分别对每个状态进行分析Idle状态,电梯停止在某楼层,门是关闭,处于静止状态,等候相关事件发生,从而转换到下一个状态。(S1) 检验E3、E4、E5事件。 静态检测,bool up; 目标楼层=IdleWhatFloorToGoTo(&up); 关闭本层门外up按钮,SetCallLight(); 即消费门外up按钮,预防下一周期反复处理此按钮行为。(S2) 同(S1),消费门外down按钮。1层以上,一定时间无动作,自动下降到1楼。AutoTo1Floor();其它状态,取消此功效,CancelTo1Floor()(S3) 检验E1事件, 开门, 消费开门按钮; 上升 (u
10、p & E4事件), 开门,消费门外up按钮 下降 (!up & E5事件), 开门,消费门外down按钮(S4) 检验E2事件,此时门应该是关闭,所以仅读取关门灯,并关闭关门灯,即消费按键行为,预防下一周期反复处理该按钮行为。 if(GetCloseDoorLight() SetCloseDoorLight(false); return; Moving状态:MovingUp/MovingDown 跳转到 DoorOpen(S5) 检验E3、E4、E5事件。动态检测,目标楼层floor=GoingUpToFloor(); if(fabs(GetFloor() - floor) -1) /判定电
11、梯楼层按钮程序if (up & GetPanelFloorLight(floor) /向上按钮按了就向上运行/SetCallLight(floor, up, false);*state = MovingUp;/状态翻转printf(Transition: from Idlestate to MovingUp.n);return;/降低代码运行时间if (!up&GetPanelFloorLight(floor)/SetCallLight(floor, !up, false);*state = MovingDown;printf(Transition: from Idlestate to Mov
12、ingDown.n);return;/电梯内上下按钮程序if (GetCallLight(floor, up) | GetCallLight(floor, !up) /楼层上下呼叫if (up = true)/开始消费*state = MovingUp;printf(Transition: from Idlestate to MovingUp.n);return;if (up = false)*state = MovingDown;printf(Transition: from Idlestate to MovingUp.n);return;/开关门函数处理if (GetCloseDoorLi
13、ght()/关门灯判定SetCloseDoorLight(false);*state = DoorClosing;printf(Transition: from Idlestate to DoorClosing.n);return;if (GetOpenDoorLight()/开门灯判定SetOpenDoorLight(false);*state = DoorOpen;printf(Transition: from Idlestate to DoorOpen.n);return;/对自动下降函数处理if(nowfloor 1)AutoTo1Floor();/printf(进去了1111n);
14、/测试用4.2 版本一和版本二上升函数部分比较分析版本二在版本一基础上修改不大,局部进行了部分调整,但没什么改变。版本一这个函数已经靠近完善。二者思绪相同只是一个消费过程,其它绝大多数全部在初始化中进行了判定。版本一void movingup(int *state)int floor;bool up=1;CancelTo1Floor();floor=GoingUpToFloor();/动态检测if (GetPanelFloorLight(floor)/灭灯过程,预防反复消费SetPanelFloorLight(floor, false);if (GetCallLight(floor, up)S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 方案 报告书
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内