实时软件控制第二周作业

author author     2022-08-17     451

关键词:

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

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

  • 起落杆位置传感器:有两个位置值信号(升起/落下)
  • 汽车入闸传感器:有两个值(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语句,能一步定位到相应的状态,延迟时间可以预先准确估算。而且在事件发生时,调用事件函数,在函数里查找唯一确定的状态,并根据其执行动作和状态转移的思路清晰简洁, 效率高,富有美感。

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

《实时控制软件》第二周作业

首先制定各个变量名称入闸传感器:sensor_in;出闸传感器:sensor_out;起落杆上升:gan.raise();起落杆下降:gan.down();信号灯:light(1为绿,0为红);通行状态:A0为禁止通行,A1为允许通行;竖着写(在状态中判断事件)C代码片段cur_st... 查看详情

实时控制软件设计第二周作业

一.汽车出入门禁系统状态机设计状态机所有状态:入闸传感器(两种状态):Ture False (分别用ET和EF表示)出闸传感器(两种状态):Ture False (分别用OT和OF表示)起落杆(两种状态):    UPDOWN  ... 查看详情

实时控制软件设计第二周作业-停车场门禁控制系统状态机

画出动作转换图为: 使用模块化设计,将起落杆、出入传感器和通行灯设计成四个模块,分别继承设计好的系统模块接口:1//FSM_Interface.h2#pragmaonce34namespaceFSM5{67classISystemUnit//系统单元接口8{9public:1011virtualvoidInitialize()=0;//初始... 查看详情

实时控制软件设计第二周作业-停车场门禁控制系统状态机设计

门禁控制系统的输入信号包括:起落杆位置传感器:有两个位置值信号(升起/落下)汽车入闸传感器:有两个值(True/False)汽车出闸传感器:有两个值(True/False)门禁控制系统的输出信号包括:起落杆电机控制信号:(上升/... 查看详情

软件工程作业第二周--例行报告

类型任务开始结束中断deltacoding重定向/输入/输出的代码9.16晚上6点9:16晚上八点半--150mincoding文件夹读文件/控制台直接读/整合9.17早上9点9:17晚上七点12点午饭/午睡到4点/晚饭,12点-4点以及五点到五点半330min安装装Git,试... 查看详情

实时控制软件第二次作业

0.Fork例程到自己的GitHub账号:开发环境搭建1.QEMU安装建议使用qemu-system-gnuarmeclipse,该qemu分支对stm32f4有更好的支持,主要面向Eclipse开发环境。到网页 https://github.com/gnu-mcu-eclipse/qemu/releases/tag/gae-2.8.0-20161227 下载二进制文件... 查看详情

软件测试第二周作业wordcount(代码片段)

 软件测试第二周作业wordcountGithub地址https://github.com/mxz96102/word_countPSP2.1表格PSP2.1PSP 阶段预估耗时 (分钟)实际耗时 (分钟)Planning计划2530·Estimate·估计这个任务需要多少时间150252Development开发  ·Analysis· 查看详情

软件工程第二周作业

##软件工程第二周作业提出问题1.一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢?2.关于5.3.5老板驱动的流程,... 查看详情

实时控制软件第二次作业--停车场门禁控制系统状态机

作者:李君威U201310747  状态机图示: 将起落杆的位置状态和通行灯信号作为两个类对象,汽车出入闸传感器信号作为输入,编写代码:1//qichemenjin.cpp2//CopyrightbyJustin.34#include"stdafx.h"5#include<iostream>6usingnamespacestd;7cla... 查看详情

软件质量与测试第二周作业wordcount(代码片段)

第二周作业WordCount一、Github地址https://github.com/llag9810/Software-Quality-and-Testing-Wordcount二、PSP2.1 表格PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划 60 25·Estimate·估计这个任务需要多少时间 30 15Dev 查看详情

软件测试第二周作业(代码片段)

一,github地址https://github.com/lc-xie/WordCount二,PSP表格PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划 25 25·Estimate·估计这个任务需要多少时间 25  25Development开发200 240·Analysis·需求分析(包括学习新... 查看详情

软件测试第二周作业wordcounter(代码片段)

Github项目地址WordCounteringithubPSP(PersonalSoftwareProcess)PSP2.1PSP阶段预估耗时实际耗时(分钟)实际耗时(分钟)Planning计划1017Estimate估计这个任务需要多少时间510Development开发545650-Analysis-需求分析(包括学习新技术)120160-DesignSpec-生... 查看详情

软件质量测试第二周wordcount作业(代码片段)

一.github地址https://github.com/WKX121/WC二.PSPPSP表格PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划 25 25·Estimate·估计这个任务需要多少时间 25  25Development开发300 340·Analysis·需求分析(包括学习新技术)&... 查看详情

软件测试第二周个人作业--wordcount

1、Github项目地址:https://github.com/SSS-SY/wordcount 2、PSP2.1表格 PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划 20 15·Estimate·估计这个任务需要多少时间 30 15Development开发 360 605·Analysi 查看详情

第二周作业一读软件工程

...来这么精彩的书,话不多说,强行提问:1.不面向用户的软件,程序员自娱自乐的项目,如何选择开发模式。2.结对编程后,由此可能造成的损失和不了后果由两人承担,具体比例怎么算。3.像微软office办公软件,是如何调查用户... 查看详情

软件工程第二周作业----词频统计

实验要求:统计文件中出现过的单词数目,并按数目和字典顺序排序,将结果输出到指定文件中。需要统计单词的文件名从命令行输入。 实验分工:代码编写&测试:张文杰博客编写:朱昱青 实验思路:1.在主函数中... 查看详情

软件测试第二周个人作业wordcount程序实现(代码片段)

GitHub地址:https://github.com/Guchencc/WordCount一.PSP表格PSP2.1PSP阶段预估耗时(分钟)实际耗时(分钟)Planning计划  ·Estimate·估计这个任务需要多少时间 300440Development开发  ·Analysis·需求分析(包括学习新技术) 20&n... 查看详情

2017-2018-220179305《网络攻防技术》第二周作业

...子科技大学,职业是网络安全网站“安全焦点”冰河木马软件的创作者。99年,木马虽然已经在黑客中间遍布使用,但多数为国外的BO和BUS等木马,对于一些刚接触黑客的生手来说,理解这些软件的使用方法和熟练使用这些软件... 查看详情