实时软件系统设计第二次作业

门禁控制系统的设计

本次作业采用matlab中的simulink来进行仿真,用stateflow来画状态机,用matlab自动生成C代码。

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

起落杆位置传感器:有两个位置值信 (升起/落下)

升起位置传感器:输入为1表示在升起位置,输入为0表示不在升起位置,状态图用sqwzcgq来表示。

下降位置传感器:输入为1表示在下降位置,输入为0表示不再下降位置,状态图用xlwzcgq来表示。

汽车入闸传感器:有两个值(True/False)输入为1表示汽车入闸,状态图用rzcgq来表示。

汽车出闸传感器:有两个值(True/False)输入为1表示汽车出闸,状态图用czcgq来表示。

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

起落杆电机控制信 :(上升/下降)升起控制信 sckzxh:输出为1控制电机上升,输出为0控制电机不转。

下降控制信 xjkzxh:输出为1控制电机下降,输出为0控制电机不转。

通行灯信 :(红灯/绿灯)红灯信 xhdhong:输出为1,红灯亮,绿灯信 xhdlv:输出为1,绿灯亮。

一辆汽车的通过流程为:

起落杆处于落下状态,通行灯为红灯。

汽车进入门禁系统,入闸传感器值变为True。

控制起落杆上升,直到起落杆位置传感器到达升起位置。

通行灯为绿灯。

汽车离开门禁,触发汽车出闸传感器值为True。

控制起落杆下降,直到起落杆位置传感器到达落下位置。

通行灯变为红灯。

转化为状态图为:

 

Matlab生成的程序代码,只粘贴出来了C文件和头文件,其他文件未粘贴出来

 

2

* sskzrje.c

3

*

4

* Code generation for model “sskzrje”.

5

*

6

* Model version : 1.10

7

* Simulink Coder version : 8.7 (R2014b) 08-Sep-2014

8

* C source code generated on : Tue Dec 06 15:56:35 2016

9

*

10

* Target selection: grt.tlc

11

* Note: GRT includes extra infrastructure and instrumentation for prototyping

12

* Embedded hardware selection: 32-bit Generic

13

* Code generation objectives: Unspecified

14

* Validation result: Not run

15

*/

16

#include “sskzrje.h”

17

#include “sskzrje_private.h”

18

 

19

/* Named constants for Chart: ‘<Root>/Chart’ */

20

#define sskzrje_IN_NO_ACTIVE_CHILD ((uint8_T)0U)

21

#define sskzrje_IN_lanjie ((uint8_T)1U)

22

#define sskzrje_IN_qiluoganshengqi ((uint8_T)2U)

23

#define sskzrje_IN_qiluoganxiajiang ((uint8_T)3U)

24

#define sskzrje_IN_tongxing ((uint8_T)4U)

25

 

26

/* Block states (auto storage) */

27

DW_sskzrje_T sskzrje_DW;

28

 

29

/* Real-time model */

30

RT_MODEL_sskzrje_T sskzrje_M_;

31

RT_MODEL_sskzrje_T *const sskzrje_M = &sskzrje_M_;

32

 

33

/* Model step function */

34

void sskzrje_step(void)

35

{

36

real_T rtb_ManualSwitch;

37

real_T rtb_ManualSwitch1;

38

real_T rtb_ManualSwitch2;

39

real_T rtb_ManualSwitch3;

40

 

41

/* ManualSwitch: ‘<Root>/Manual Switch’ incorporates:

42

* Constant: ‘<Root>/constant’

43

* Constant: ‘<Root>/constant1’

44

*/

45

if (sskzrje_P.ManualSwitch_CurrentSetting == 1) {

46

rtb_ManualSwitch = sskzrje_P.constant_Value;

47

} else {

48

rtb_ManualSwitch = sskzrje_P.constant1_Value;

49

}

50

 

51

/* End of ManualSwitch: ‘<Root>/Manual Switch’ */

52

 

53

/* ManualSwitch: ‘<Root>/Manual Switch1’ incorporates:

54

* Constant: ‘<Root>/constant’

55

* Constant: ‘<Root>/constant1’

56

*/

57

if (sskzrje_P.ManualSwitch1_CurrentSetting == 1) {

58

rtb_ManualSwitch1 = sskzrje_P.constant_Value;

59

} else {

60

rtb_ManualSwitch1 = sskzrje_P.constant1_Value;

61

}

62

 

63

/* End of ManualSwitch: ‘<Root>/Manual Switch1’ */

64

 

65

/* ManualSwitch: ‘<Root>/Manual Switch2’ incorporates:

66

* Constant: ‘<Root>/constant’

67

* Constant: ‘<Root>/constant1’

68

*/

69

if (sskzrje_P.ManualSwitch2_CurrentSetting == 1) {

70

rtb_ManualSwitch2 = sskzrje_P.constant_Value;

71

} else {

72

rtb_ManualSwitch2 = sskzrje_P.constant1_Value;

73

}

74

 

75

/* End of ManualSwitch: ‘<Root>/Manual Switch2’ */

76

 

77

/* ManualSwitch: ‘<Root>/Manual Switch3’ incorporates:

78

* Constant: ‘<Root>/constant’

79

* Constant: ‘<Root>/constant1’

80

*/

81

if (sskzrje_P.ManualSwitch3_CurrentSetting == 1) {

82

rtb_ManualSwitch3 = sskzrje_P.constant_Value;

83

} else {

84

rtb_ManualSwitch3 = sskzrje_P.constant1_Value;

85

}

86

 

87

/* End of ManualSwitch: ‘<Root>/Manual Switch3’ */

88

 

89

/* Chart: ‘<Root>/Chart’ */

90

/* Gateway: Chart */

91

/* During: Chart */

92

if (sskzrje_DW.is_active_c3_sskzrje == 0U) {

93

/* Entry: Chart */

94

sskzrje_DW.is_active_c3_sskzrje = 1U;

95

 

96

/* Entry Internal: Chart */

97

/* Transition: ‘<S1>:6’ */

98

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_lanjie;

99

 

100

/* Entry ‘lanjie’: ‘<S1>:1’ */

101

} else {

102

switch (sskzrje_DW.is_c3_sskzrje) {

103

case sskzrje_IN_lanjie:

104

/* During ‘lanjie’: ‘<S1>:1’ */

105

if (rtb_ManualSwitch == 1.0) {

106

/* Transition: ‘<S1>:3’ */

107

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_qiluoganshengqi;

108

 

109

/* Entry ‘qiluoganshengqi’: ‘<S1>:2’ */

110

} else {

111

if (rtb_ManualSwitch2 == 0.0) {

112

/* Transition: ‘<S1>:25’ */

113

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_qiluoganxiajiang;

114

 

115

/* Entry ‘qiluoganxiajiang’: ‘<S1>:16’ */

116

}

117

}

118

break;

119

 

120

case sskzrje_IN_qiluoganshengqi:

121

/* During ‘qiluoganshengqi’: ‘<S1>:2’ */

122

if (rtb_ManualSwitch3 == 1.0) {

123

/* Transition: ‘<S1>:15’ */

124

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_tongxing;

125

 

126

/* Entry ‘tongxing’: ‘<S1>:14’ */

127

} else {

128

if (rtb_ManualSwitch == 0.0) {

129

/* Transition: ‘<S1>:22’ */

130

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_lanjie;

131

 

132

/* Entry ‘lanjie’: ‘<S1>:1’ */

133

}

134

}

135

break;

136

 

137

case sskzrje_IN_qiluoganxiajiang:

138

/* During ‘qiluoganxiajiang’: ‘<S1>:16’ */

139

if (rtb_ManualSwitch2 == 1.0) {

140

/* Transition: ‘<S1>:18’ */

141

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_lanjie;

142

 

143

/* Entry ‘lanjie’: ‘<S1>:1’ */

144

} else {

145

if (rtb_ManualSwitch1 == 0.0) {

146

/* Transition: ‘<S1>:24’ */

147

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_tongxing;

148

 

149

/* Entry ‘tongxing’: ‘<S1>:14’ */

150

}

151

}

152

break;

153

 

154

default:

155

/* During ‘tongxing’: ‘<S1>:14’ */

156

if (rtb_ManualSwitch1 == 1.0) {

157

/* Transition: ‘<S1>:17’ */

158

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_qiluoganxiajiang;

159

 

160

/* Entry ‘qiluoganxiajiang’: ‘<S1>:16’ */

161

} else {

162

if (rtb_ManualSwitch3 == 0.0) {

163

/* Transition: ‘<S1>:23’ */

164

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_qiluoganshengqi;

165

 

166

/* Entry ‘qiluoganshengqi’: ‘<S1>:2’ */

167

}

168

}

169

break;

170

}

171

}

172

 

173

/* End of Chart: ‘<Root>/Chart’ */

174

 

175

/* Matfile logging */

176

rt_UpdateTXYLogVars(sskzrje_M->rtwLogInfo, (&sskzrje_M->Timing.taskTime0));

177

 

178

/* signal main to stop simulation */

179

{ /* Sample time: [0.2s, 0.0s] */

180

if ((rtmGetTFinal(sskzrje_M)!=-1) &&

181

!((rtmGetTFinal(sskzrje_M)-sskzrje_M->Timing.taskTime0) >

182

sskzrje_M->Timing.taskTime0 * (DBL_EPSILON))) {

183

rtmSetErrorStatus(sskzrje_M, “Simulation f

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年11月4日
下一篇 2016年11月4日

相关推荐