我是靠谱客的博主 积极大山,最近开发中收集的这篇文章主要介绍实时软件系统设计第二次作业,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

门禁控制系统的设计

本次作业采用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 finished");

184

}

185

}

186

 

187

/* Update absolute time for base rate */

188

/* The "clockTick0" counts the number of times the code of this task has

189

* been executed. The absolute time is the multiplication of "clockTick0"

190

* and "Timing.stepSize0". Size of "clockTick0" ensures timer will not

191

* overflow during the application lifespan selected.

192

* Timer of this task consists of two 32 bit unsigned integers.

193

* The two integers represent the low bits Timing.clockTick0 and the high bits

194

* Timing.clockTickH0. When the low bit overflows to 0, the high bits increment.

195

*/

196

if (!(++sskzrje_M->Timing.clockTick0)) {

197

++sskzrje_M->Timing.clockTickH0;

198

}

199

 

200

sskzrje_M->Timing.taskTime0 = sskzrje_M->Timing.clockTick0 *

201

sskzrje_M->Timing.stepSize0 + sskzrje_M->Timing.clockTickH0 *

202

sskzrje_M->Timing.stepSize0 * 4294967296.0;

203

}

204

 

205

/* Model initialize function */

206

void sskzrje_initialize(void)

207

{

208

/* Registration code */

209

 

210

/* initialize non-finites */

211

rt_InitInfAndNaN(sizeof(real_T));

212

 

213

/* initialize real-time model */

214

(void) memset((void *)sskzrje_M, 0,

215

sizeof(RT_MODEL_sskzrje_T));

216

rtmSetTFinal(sskzrje_M, 10.0);

217

sskzrje_M->Timing.stepSize0 = 0.2;

218

 

219

/* Setup for data logging */

220

{

221

static RTWLogInfo rt_DataLoggingInfo;

222

sskzrje_M->rtwLogInfo = &rt_DataLoggingInfo;

223

}

224

 

225

/* Setup for data logging */

226

{

227

rtliSetLogXSignalInfo(sskzrje_M->rtwLogInfo, (NULL));

228

rtliSetLogXSignalPtrs(sskzrje_M->rtwLogInfo, (NULL));

229

rtliSetLogT(sskzrje_M->rtwLogInfo, "tout");

230

rtliSetLogX(sskzrje_M->rtwLogInfo, "");

231

rtliSetLogXFinal(sskzrje_M->rtwLogInfo, "");

232

rtliSetLogVarNameModifier(sskzrje_M->rtwLogInfo, "rt_");

233

rtliSetLogFormat(sskzrje_M->rtwLogInfo, 0);

234

rtliSetLogMaxRows(sskzrje_M->rtwLogInfo, 1000);

235

rtliSetLogDecimation(sskzrje_M->rtwLogInfo, 1);

236

rtliSetLogY(sskzrje_M->rtwLogInfo, "");

237

rtliSetLogYSignalInfo(sskzrje_M->rtwLogInfo, (NULL));

238

rtliSetLogYSignalPtrs(sskzrje_M->rtwLogInfo, (NULL));

239

}

240

 

241

/* states (dwork) */

242

(void) memset((void *)&sskzrje_DW, 0,

243

sizeof(DW_sskzrje_T));

244

 

245

/* Matfile logging */

246

rt_StartDataLoggingWithStartTime(sskzrje_M->rtwLogInfo, 0.0, rtmGetTFinal

247

(sskzrje_M), sskzrje_M->Timing.stepSize0, (&rtmGetErrorStatus(sskzrje_M)));

248

 

249

/* InitializeConditions for Chart: '<Root>/Chart' */

250

sskzrje_DW.is_active_c3_sskzrje = 0U;

251

sskzrje_DW.is_c3_sskzrje = sskzrje_IN_NO_ACTIVE_CHILD;

252

}

253

 

254

/* Model terminate function */

255

void sskzrje_terminate(void)

256

{

257

/* (no terminate code required) */

258

}

259

 

/*

2

* sskzrje.h

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

#ifndef RTW_HEADER_sskzrje_h_

17

#define RTW_HEADER_sskzrje_h_

18

#include <float.h>

19

#include <string.h>

20

#include <stddef.h>

21

#ifndef sskzrje_COMMON_INCLUDES_

22

# define sskzrje_COMMON_INCLUDES_

23

#include "rtwtypes.h"

24

#include "rtw_continuous.h"

25

#include "rtw_solver.h"

26

#include "rt_logging.h"

27

#endif /* sskzrje_COMMON_INCLUDES_ */

28

 

29

#include "sskzrje_types.h"

30

 

31

/* Shared type includes */

32

#include "multiword_types.h"

33

#include "rt_nonfinite.h"

34

 

35

/* Macros for accessing real-time model data structure */

36

#ifndef rtmGetFinalTime

37

# define rtmGetFinalTime(rtm) ((rtm)->Timing.tFinal)

38

#endif

39

 

40

#ifndef rtmGetRTWLogInfo

41

# define rtmGetRTWLogInfo(rtm) ((rtm)->rtwLogInfo)

42

#endif

43

 

44

#ifndef rtmGetErrorStatus

45

# define rtmGetErrorStatus(rtm) ((rtm)->errorStatus)

46

#endif

47

 

48

#ifndef rtmSetErrorStatus

49

# define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val))

50

#endif

51

 

52

#ifndef rtmGetStopRequested

53

# define rtmGetStopRequested(rtm) ((rtm)->Timing.stopRequestedFlag)

54

#endif

55

 

56

#ifndef rtmSetStopRequested

57

# define rtmSetStopRequested(rtm, val) ((rtm)->Timing.stopRequestedFlag = (val))

58

#endif

59

 

60

#ifndef rtmGetStopRequestedPtr

61

# define rtmGetStopRequestedPtr(rtm) (&((rtm)->Timing.stopRequestedFlag))

62

#endif

63

 

64

#ifndef rtmGetT

65

# define rtmGetT(rtm) ((rtm)->Timing.taskTime0)

66

#endif

67

 

68

#ifndef rtmGetTFinal

69

# define rtmGetTFinal(rtm) ((rtm)->Timing.tFinal)

70

#endif

71

 

72

/* Block states (auto storage) for system '<Root>' */

73

typedef struct {

74

uint8_T is_active_c3_sskzrje; /* '<Root>/Chart' */

75

uint8_T is_c3_sskzrje; /* '<Root>/Chart' */

76

} DW_sskzrje_T;

77

 

78

/* Parameters (auto storage) */

79

struct P_sskzrje_T_ {

80

real_T constant_Value; /* Expression: 1

81

* Referenced by: '<Root>/constant'

82

*/

83

real_T constant1_Value; /* Expression: 0

84

* Referenced by: '<Root>/constant1'

85

*/

86

uint8_T ManualSwitch_CurrentSetting; /* Computed Parameter: ManualSwitch_CurrentSetting

87

* Referenced by: '<Root>/Manual Switch'

88

*/

89

uint8_T ManualSwitch1_CurrentSetting;/* Computed Parameter: ManualSwitch1_CurrentSetting

90

* Referenced by: '<Root>/Manual Switch1'

91

*/

92

uint8_T ManualSwitch2_CurrentSetting;/* Computed Parameter: ManualSwitch2_CurrentSetting

93

* Referenced by: '<Root>/Manual Switch2'

94

*/

95

uint8_T ManualSwitch3_CurrentSetting;/* Computed Parameter: ManualSwitch3_CurrentSetting

96

* Referenced by: '<Root>/Manual Switch3'

97

*/

98

};

99

 

100

/* Real-time Model Data Structure */

101

struct tag_RTM_sskzrje_T {

102

const char_T *errorStatus;

103

RTWLogInfo *rtwLogInfo;

104

 

105

/*

106

* Timing:

107

* The following substructure contains information regarding

108

* the timing information for the model.

109

*/

110

struct {

111

time_T taskTime0;

112

uint32_T clockTick0;

113

uint32_T clockTickH0;

114

time_T stepSize0;

115

time_T tFinal;

116

boolean_T stopRequestedFlag;

117

} Timing;

118

};

119

 

120

/* Block parameters (auto storage) */

121

extern P_sskzrje_T sskzrje_P;

122

 

123

/* Block states (auto storage) */

124

extern DW_sskzrje_T sskzrje_DW;

125

 

126

/* Model entry point functions */

127

extern void sskzrje_initialize(void);

128

extern void sskzrje_step(void);

129

extern void sskzrje_terminate(void);

130

 

131

/* Real-time Model object */

132

extern RT_MODEL_sskzrje_T *const sskzrje_M;

133

 

134

/*-

135

* The generated code includes comments that allow you to trace directly

136

* back to the appropriate location in the model. The basic format

137

* is <system>/block_name, where system is the system number (uniquely

138

* assigned by Simulink) and block_name is the name of the block.

139

*

140

* Use the MATLAB hilite_system command to trace the generated code back

141

* to the model. For example,

142

*

143

* hilite_system('<S3>') - opens system 3

144

* hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3

145

*

146

* Here is the system hierarchy for this model

147

*

148

* '<Root>' : 'sskzrje'

149

* '<S1>' : 'sskzrje/Chart'

150

*/

151

#endif /* RTW_HEADER_sskzrje_h_ */

152

 

/*

2

* sskzrje_private.h

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

#ifndef RTW_HEADER_sskzrje_private_h_

17

#define RTW_HEADER_sskzrje_private_h_

18

#include "rtwtypes.h"

19

#include "builtin_typeid_types.h"

20

#include "multiword_types.h"

21

 

22

/* Private macros used by the generated code to access rtModel */

23

#ifndef rtmSetTFinal

24

# define rtmSetTFinal(rtm, val) ((rtm)->Timing.tFinal = (val))

25

#endif

26

 

27

#ifndef rtmGetTPtr

28

# define rtmGetTPtr(rtm) (&(rtm)->Timing.taskTime0)

29

#endif

30

#endif /* RTW_HEADER_sskzrje_private_h_ */

31

 

转载于:https://www.cnblogs.com/shishiruanjiankongzhi/p/6137989.html

最后

以上就是积极大山为你收集整理的实时软件系统设计第二次作业的全部内容,希望文章能够帮你解决实时软件系统设计第二次作业所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部