首页 > 代码库 > 实时控制软件设计作业_02_停车场门禁系统状态机

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

根据课堂内容,该状态机系统的状态图可描述如下:

技术分享

 

根据状态图设计的状态机系统,C语言代码如下:

 1 #include <iostream.h>
 2 using namespace std;
 3 
 4 bool in = false;    //汽车入闸传感器值
 5 bool out = false;    //汽车出闸传感器值
 6 bool pos = false;    //起落杆位置传感器,false代表放下,true代表抬起
 7 int eng = 0;    //电机控制信号,0为停止,1为正转抬起,2为反转放下
 8 bool lig = false;    //通行灯控制信号,false为红灯,true为绿灯
 9 int n = 0;    //代表该系统当前状态
10 
11 void status_1(){
12     eng = 0;
13     lig = false;
14     cout << "起落杆已落下。通行灯为红灯,禁止通过。";
15 }
16 
17 void status_2{
18     eng = 1;
19     cout << "检测到车辆,正在抬升起落杆,请稍后……";
20 }
21 
22 void status_3{
23     eng = 0;
24     lig = true;
25     cout << "起落杆已抬起,通行灯为绿,请通过!";
26 }
27 
28 void status_4{
29     eng = 2;
30     lig = false;
31     cout << "车辆已通过,正在下放起落杆。";
32 }
33 
34 int test_status(){
35     if (in == true){
36         if (out == false){
37             if(pos == false){
38                 return 2;
39             }
40         }
41         if (pos == true){
42             if (out == false){
43                 return 3;
44             }
45         }
46     }else{
47         if (out == true){
48             if(pos == true){
49                 return 4;
50             }
51         }else{
52             if(pos == false){
53                 if(out == false){
54                     return 1;
55                 }
56             }
57         }
58 }
59 
60 void main(){
61     while(1){
62         n = test_status();
63         switch(n){
64         case 1 :
65             status_1();
66             break;
67         case 2 :
68             status_2();
69             break;
70         case 3 :
71             status_3();
72             break;
73         case 4 :
74             status_4();
75             break;
76         case 0 :
77             cout << "异常状态,请排查系统状况";
78             break;
79         }
80     }
81 }
82             

 

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