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


    门禁控制系统的设计

    本次作业采用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

     
  • 相关阅读:
    Redis源码解析:07压缩列表
    Redis源码解析:06整数集合
    Redis源码解析:05跳跃表
    Laravel中的路由管理
    jquery登录的异步验证
    ThinkPHP3.2.3中,配置文件里配置项的读取
    ThinkPHP3.2.3中,查询语句中in的使用方法。
    Fatal error: Maximum function nesting level of '100' reached, aborting!
    无限级分类的收缩与展开功能
    mysql添加DATETIME类型字段导致Invalid default value错误的问题
  • 原文地址:https://www.cnblogs.com/shishiruanjiankongzhi/p/6137989.html
Copyright © 2020-2023  润新知