实时软件控制第二周作业

停车场门禁控制系统的状态机设计

门禁控制系统的输入信号包括:

  • 起落杆位置传感器:有两个位置值信号(升起/落下)
  • 汽车入闸传感器:有两个值(True/False)
  • 汽车出闸传感器:有两个值(True/False)

门禁控制系统的输出信号包括:

  • 起落杆电机控制信号:(上升/下降)
  • 通行灯信号:(红灯/绿灯)

一辆汽车的通过流程为:

  • 起落杆处于落下状态,通行灯为红灯。
  • 汽车进入门禁系统,入闸传感器值变为True。
  • 控制起落杆上升,直到起落杆位置传感器到达升起位置。
  • 通行灯为绿灯。
  • 汽车离开门禁,触发汽车出闸传感器值为True。
  • 控制起落杆下降,直到起落杆位置传感器到达落下位置。
  • 通行灯变为红灯。

所描述的控制系统的状态机包括:

  • 状态机的所有状态
  • 状态机所接收到的外部事件
  • 状态机所产生的动作
  • 状态机的所有状态跃迁:(原状态、新状态、触发条件、产生动作)

首先设:

Q1代表可以通行的状态;

Q2代表不能通行的状态;

W1代表汽车进入门禁系统这个事件;

W2代表汽车离开门禁系统这个事件;

E1代表起落杆上升,通行灯变绿灯;

E2代表起落杆下降,通行灯变红灯;


当前状态


Q1


Q2


事件


 


---


E1/Q1


W1


 


E2/Q2


---


W2

竖着写(在状态中判断事件)C代码片段:

cur_state = nxt_state;

switch(cur_state) //在当前状态中判断事件

{

case Q2: //在s1状态

if(W1_event) //如果发生W1事件,那么就执行E1动作,并将状态转移到Q1态;

{

Lifting_lever.raise();//执行E1动作;

   nxt_state = Q1;

}

else

{

      break;

}

case Q1: //在Q1状态

if(W2_event) //如果发生W2事件,那么就执行E2动作,并将状态转移到Q2;

{

Lifting_lever.down();//执行E2动作;

        nxt_state = Q2;

}

else

{

break;

}

}

在http://kb.cnblogs.com/page/528972/上面了解到状态机的两种写法,横写和竖写

横竖两种写法的代码片段,实现的功能完全相同,但是,横着写的效果明显好于竖着写的效果。理由如下:

  1、竖着写隐含了优先级排序(其实各个事件是同优先级的),排在前面的事件判断将毫无疑问地优先于排在后面的事件判断。这种if/else if写法上的限制将破坏事件间原有的关系。而横着写不存在此问题。

  2、由于处在每个状态时的事件数目不一致,而且事件发生的时间是随机的,无法预先确定,导致竖着写沦落为顺序查询方式,结构上的缺陷使得大量时间被浪费。对于横着写,在某个时间点,状态是唯一确定的,在事件里查找状态只要使用switch语句,能一步定位到相应的状态,延迟时间可以预先准确估算。而且在事件发生时,调用事件函数,在函数里查找唯一确定的状态,并根据其执行动作和状态转移的思路清晰简洁, 效率高,富有美感。

这里之所以使用竖着写的方法,是因为这是个小项目,逻辑不太复杂,功能精简,同时为了节约内存耗费,所以竖着写的方法也不失为一种合适的选择。

时间: 2024-12-11 22:47:42

实时软件控制第二周作业的相关文章

机电传动控制第二周作业

对课外阅读部分,重点了解了电机理论的完善过程,同时对对称分量法和空间矢量法进一步查阅了资料.通过学习了解了理论体系建立的不易性.对一个体系的建立要会结合多学科知识,并能运用多种方法并将其统一分析.又学习了工程多通口及里面势变量.流变量的表示,还有广义动量和广义位变量,用这四个变量所建立的状态四面体模型可以在各个系统相互转化.对通口.键和功率的内容稍作阅读. 仿真作业: 该简单模型第一个方程式即机电传动系统运动方程式,第二个是直流电机电磁转矩与电枢电流的一般关系,第三个是电动势与端电压的关系. 首

解题报告——2018级2016第二学期第二周作业

解题报告——2018级2016第二学期第二周作业 D:迷宫问题 题目描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出 左上角到右

马哥linux 培训第二周作业

注意:第二周作业,请将以下题目整理在51cto博客当中,完成后请将对应的博文链接地址提交在答案栏中,提交格式如下:学号+姓名+博文链接地址eg:1+张三+http://mageedu.blog.51cto.com/4265610/1794420 本周作业内容:1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 文件管理的命令有cp.mv.rm 复制命令:cp 用法: cp [-adfilprsu] 来源文件(source) 目标文件(destination) cp [o

机械传动控制第一周作业

机械传动控制第一周作业 现代机电传动控制要求工程师有较为广阔的知识面.在产品设计的过程中,既要充分地运用自己的专业知识,也要与其他学科进行协同设计,现代机电控制靠纯机械已经不能达到复杂的技术要求,它还需要电气和软件的共同作用,做到机电软一体化.在完成一件机械设备的性能要求后,成本的问题也是必须要充分考虑的,设计时要考虑用材成本,设计过程中要考虑能耗的均衡问题,经济因素是机械设计中一个需要权衡的问题.同时,创新也是必须的,无尽的重复和运用虽说可以使一个技能得到完善,但是创新才能使其真正的发展. 现

第二周作业补交(请老师看一下)

#include<stdio.h> #include<math.h> int main(void) { int money,year; double rate,sum; printf("Enter money:"); scanf("%d",&money); printf("Enter year:"); scanf("%d",&year); printf("Enter rate:

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

学习linux第二周作业

第二周作业: 本周作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. touch,rm,mv,cp,file,ls,chmod,chown,ln,rename, touch 修改文件atime,如果文件不存在,那么创建该文件. rm:删除文件. -r:循环删除,包含文件和目录 -f:强制删除,布询问. -i:询问是否删除. 默认情况下,系统自带别名,rm=rm -i mv:移动文件,可以在移动的过程中重命名文件或文件夹. 例如:移动重命名mytest1目录为

软件测试第二周作业 wordcount

软件测试第二周作业 wordcount Github地址 https://github.com/mxz96102/word_count PSP2.1表格 PSP2.1 PSP 阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 25 30 · Estimate · 估计这个任务需要多少时间 150 252 Development 开发     · Analysis · 需求分析 (包括学习新技术) 20 20 · Design Spec · 生成设计文档 0 0 · Desig

软件工程 第二周作业

##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5.3.5 老板驱动的流程,这种开发流程模式存在着一些问题,那要如何解决这些问题呢? 这种模式当然也有它的问题. 领导对许多技术细节是外行. 领导未必懂得软件项目的管理,领导的权威影响了自由的交流和创造. 领导最擅长的管理方式是行政命令,这未必能管好软件团队或任何需要创造力的团队. 领导的精力有限,领