diff --git a/lib/treppe/FSMTreppe3/FSMTreppe3.cpp b/lib/treppe/FSMTreppe3/FSMTreppe3.cpp new file mode 100644 index 0000000..93530cc --- /dev/null +++ b/lib/treppe/FSMTreppe3/FSMTreppe3.cpp @@ -0,0 +1,276 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: FSMTreppe.cpp +// +// Code generated for Simulink model 'FSMTreppe'. +// +// Model version : 1.49 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Wed Jul 7 15:27:06 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: ARM Compatible->ARM Cortex-M +// Code generation objectives: Unspecified +// Validation result: Not run +// +#include "FSMTreppe3.h" + +// Named constants for Chart: '/FSMTreppe' +const uint8_t FSMTreppe_IN_abdimmen_hoch = 1U; +const uint8_t FSMTreppe_IN_abdimmen_ldr = 2U; +const uint8_t FSMTreppe_IN_abdimmen_runter = 3U; +const uint8_t FSMTreppe_IN_aufdimmen_hoch = 4U; +const uint8_t FSMTreppe_IN_aufdimmen_ldr = 5U; +const uint8_t FSMTreppe_IN_aufdimmen_runter = 6U; +const uint8_t FSMTreppe_IN_inaktiv = 7U; +const uint8_t FSMTreppe_IN_ruhezustand = 8U; +const uint8_t FSMTreppe_IN_warten_hoch = 9U; +const uint8_t FSMTreppe_IN_warten_runter = 10U; + +// Model step function +void FSMTreppeModelClass::step() +{ + // Chart: '/FSMTreppe' incorporates: + // Inport: '/anim_beendet' + // Inport: '/ldr_schwelle' + // Inport: '/sensor_oben' + // Inport: '/sensor_unten' + + if (FSMTreppe_DW.temporalCounter_i1 < 511U) { + FSMTreppe_DW.temporalCounter_i1 = static_cast + (FSMTreppe_DW.temporalCounter_i1 + 1U); + } + + if (FSMTreppe_DW.is_active_c3_FSMTreppe == 0U) { + FSMTreppe_DW.is_active_c3_FSMTreppe = 1U; + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_inaktiv; + + // Outport: '/status' + FSMTreppe_Y.status = 0U; + } else { + switch (FSMTreppe_DW.is_c3_FSMTreppe) { + case FSMTreppe_IN_abdimmen_hoch: + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 6U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_ruhezustand; + + // Outport: '/status' + FSMTreppe_Y.status = 3U; + } + break; + + case FSMTreppe_IN_abdimmen_ldr: + // Outport: '/status' + FSMTreppe_Y.status = 2U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_inaktiv; + + // Outport: '/status' + FSMTreppe_Y.status = 0U; + } + break; + + case FSMTreppe_IN_abdimmen_runter: + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 9U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_ruhezustand; + + // Outport: '/status' + FSMTreppe_Y.status = 3U; + } + break; + + case FSMTreppe_IN_aufdimmen_hoch: + // Outport: '/laufrichtung' + FSMTreppe_Y.laufrichtung = 1U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + + // Outport: '/status' + FSMTreppe_Y.status = 4U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_warten_hoch; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 5U; + } + break; + + case FSMTreppe_IN_aufdimmen_ldr: + // Outport: '/status' + FSMTreppe_Y.status = 1U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_ruhezustand; + + // Outport: '/status' + FSMTreppe_Y.status = 3U; + } + break; + + case FSMTreppe_IN_aufdimmen_runter: + // Outport: '/laufrichtung' + FSMTreppe_Y.laufrichtung = 0U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + + // Outport: '/status' + FSMTreppe_Y.status = 7U; + if ((FSMTreppe_U.anim_beendet == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_warten_runter; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 8U; + } + break; + + case FSMTreppe_IN_inaktiv: + // Outport: '/status' + FSMTreppe_Y.status = 0U; + if (FSMTreppe_U.ldr_schwelle == 1U) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_aufdimmen_ldr; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 1U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + } + break; + + case FSMTreppe_IN_ruhezustand: + // Outport: '/status' + FSMTreppe_Y.status = 3U; + if (FSMTreppe_U.ldr_schwelle == 0U) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_abdimmen_ldr; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 2U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + } else if (FSMTreppe_U.sensor_unten == 1U) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_aufdimmen_hoch; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/laufrichtung' + FSMTreppe_Y.laufrichtung = 1U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + + // Outport: '/status' + FSMTreppe_Y.status = 4U; + } else if (FSMTreppe_U.sensor_oben == 1U) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_aufdimmen_runter; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/laufrichtung' + FSMTreppe_Y.laufrichtung = 0U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 1U; + + // Outport: '/status' + FSMTreppe_Y.status = 7U; + } + break; + + case FSMTreppe_IN_warten_hoch: + // Outport: '/status' + FSMTreppe_Y.status = 5U; + if ((FSMTreppe_U.sensor_oben == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_abdimmen_hoch; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 6U; + } + break; + + default: + // Outport: '/status' + // case IN_warten_runter: + FSMTreppe_Y.status = 8U; + if ((FSMTreppe_U.sensor_unten == 1U) || (FSMTreppe_DW.temporalCounter_i1 >= + 500U)) { + FSMTreppe_DW.is_c3_FSMTreppe = FSMTreppe_IN_abdimmen_runter; + FSMTreppe_DW.temporalCounter_i1 = 0U; + + // Outport: '/dimmrichtung' + FSMTreppe_Y.dimmrichtung = 0U; + + // Outport: '/status' + FSMTreppe_Y.status = 9U; + } + break; + } + } + + // End of Chart: '/FSMTreppe' +} + +// Model initialize function +void FSMTreppeModelClass::initialize() +{ + // (no initialization code required) +} + +// Model terminate function +void FSMTreppeModelClass::terminate() +{ + // (no terminate code required) +} + +// Constructor +FSMTreppeModelClass::FSMTreppeModelClass() : + FSMTreppe_DW(), + FSMTreppe_U(), + FSMTreppe_Y() +{ + // Currently there is no constructor body generated. +} + +// Destructor +FSMTreppeModelClass::~FSMTreppeModelClass() +{ + // Currently there is no destructor body generated. +} + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/lib/treppe/FSMTreppe3/FSMTreppe3.h b/lib/treppe/FSMTreppe3/FSMTreppe3.h new file mode 100644 index 0000000..68bc72f --- /dev/null +++ b/lib/treppe/FSMTreppe3/FSMTreppe3.h @@ -0,0 +1,120 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: FSMTreppe.h +// +// Code generated for Simulink model 'FSMTreppe'. +// +// Model version : 1.49 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Wed Jul 7 15:27:06 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: ARM Compatible->ARM Cortex-M +// Code generation objectives: Unspecified +// Validation result: Not run +// +#ifndef RTW_HEADER_FSMTreppe_h_ +#define RTW_HEADER_FSMTreppe_h_ + +#include + +// Class declaration for model FSMTreppe +class FSMTreppeModelClass { + // public data and function members + public: + // Block states (default storage) for system '' + struct DW_FSMTreppe_T { + uint16_t temporalCounter_i1; // '/FSMTreppe' + uint8_t is_active_c3_FSMTreppe; // '/FSMTreppe' + uint8_t is_c3_FSMTreppe; // '/FSMTreppe' + }; + + // External inputs (root inport signals with default storage) + struct ExtU_FSMTreppe_T { + uint32_t sensor_unten; // '/sensor_unten' + uint32_t sensor_oben; // '/sensor_oben' + uint32_t anim_beendet; // '/anim_beendet' + uint32_t ldr_schwelle; // '/ldr_schwelle' + }; + + // External outputs (root outports fed by signals with default storage) + struct ExtY_FSMTreppe_T { + uint32_t laufrichtung; // '/laufrichtung' + uint32_t status; // '/status' + uint32_t dimmrichtung; // '/dimmrichtung' + }; + + // model initialize function + void initialize(); + + // model step function + void step(); + + // model terminate function + void terminate(); + + // Constructor + FSMTreppeModelClass(); + + // Destructor + ~FSMTreppeModelClass(); + + // Root-level structure-based inputs set method + + // Root inports set method + void setExternalInputs(const ExtU_FSMTreppe_T* pExtU_FSMTreppe_T) + { + FSMTreppe_U = *pExtU_FSMTreppe_T; + } + + // Root-level structure-based outputs get method + + // Root outports get method + const FSMTreppeModelClass::ExtY_FSMTreppe_T & getExternalOutputs() const + { + return FSMTreppe_Y; + } + + // private data and function members + private: + // Block states + DW_FSMTreppe_T FSMTreppe_DW; + + // External inputs + ExtU_FSMTreppe_T FSMTreppe_U; + + // External outputs + ExtY_FSMTreppe_T FSMTreppe_Y; + +}; + +//- +// The generated code includes comments that allow you to trace directly +// back to the appropriate location in the model. The basic format +// is /block_name, where system is the system number (uniquely +// assigned by Simulink) and block_name is the name of the block. +// +// Note that this particular code originates from a subsystem build, +// and has its own system numbers different from the parent model. +// Refer to the system hierarchy for this subsystem below, and use the +// MATLAB hilite_system command to trace the generated code back +// to the parent model. For example, +// +// hilite_system('FSM_Treppenlicht/FSMTreppe') - opens subsystem FSM_Treppenlicht/FSMTreppe +// hilite_system('FSM_Treppenlicht/FSMTreppe/Kp') - opens and selects block Kp +// +// Here is the system hierarchy for this model +// +// '' : 'FSM_Treppenlicht' +// '' : 'FSM_Treppenlicht/FSMTreppe' + +#endif // RTW_HEADER_FSMTreppe_h_ + +// +// File trailer for generated code. +// +// [EOF] +//