⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c1_stateflow_heating_controller.c

📁 m files for SIAM book, Numerical Computing with MATLAB
💻 C
📖 第 1 页 / 共 5 页
字号:
              if((_sfEvent_ == c1_event_tic) && (*c1_Setting == 2.0)) {
                transitionList[numTransitions] = 27;
                numTransitions++;
              }
              sf_debug_transition_conflict_check_end();
              if(numTransitions>1) {
                _SFD_TRANSITION_CONFLICT(&(transitionList[0]),numTransitions);
              }
            }
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,32);
            _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,1);
            chartInstance.c1_tp_Start = 0U;
            chartInstance.c1_is_Interactions = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,1);
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,1);
            c1_previousEvent = _sfEvent_;
            _sfEvent_ = c1_event_run;
            _SFD_CE_CALL(EVENT_BEFORE_BROADCAST_TAG,c1_event_run);
            c1_Process_Buttons();
            _SFD_CE_CALL(EVENT_AFTER_BROADCAST_TAG,c1_event_run);
            _sfEvent_ = c1_previousEvent;
            if(chartInstance.c1_is_Interactions != 1) {
              chartInstance.c1_is_Interactions = (uint8_T)c1_IN_Output;
              _SFD_CS_CALL(STATE_ACTIVE_TAG,13);
              chartInstance.c1_tp_Output = 1U;
              for(c1_i5 = 0; c1_i5 < 2; c1_i5 = c1_i5 + 1) {
                (*c1_Command)[c1_i5] = (*c1_SetTemps)[c1_i5] -
                  (real_T)(*c1_MeasuredTemps)[c1_i5];
              }
              for(c1_i6 = 0; c1_i6 < 2; c1_i6 = c1_i6 + 1) {
                _SFD_DATA_RANGE_CHECK((*c1_Command)[c1_i6], 3U);
              }
              *c1_Reset = 0.0;
              _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
            }
          } else {
            _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,26);
            if(CV_TRANSITION_EVAL(26U, (_SFD_CCP_CALL(26,0,((_sfEvent_ ==
                  c1_event_tic)!=0)) != 0) && (_SFD_CCP_CALL(26,1,((*c1_Setting
                  == 3.0)!=0))
               != 0)) != 0U != 0) {
              if(sf_debug_transition_conflict_check_enabled()) {
                unsigned int transitionList[2];
                unsigned int numTransitions=1;
                transitionList[0] = 26;
                sf_debug_transition_conflict_check_begin();
                if((_sfEvent_ == c1_event_tic) && (*c1_Setting == 2.0)) {
                  transitionList[numTransitions] = 27;
                  numTransitions++;
                }
                sf_debug_transition_conflict_check_end();
                if(numTransitions>1) {
                  _SFD_TRANSITION_CONFLICT(&(transitionList[0]),numTransitions);
                }
              }
              _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,26);
              _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,1);
              chartInstance.c1_tp_Start = 0U;
              chartInstance.c1_is_Interactions = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
              _SFD_CS_CALL(STATE_INACTIVE_TAG,1);
              _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,1);
              c1_b_previousEvent = _sfEvent_;
              _sfEvent_ = c1_event_temperature;
              _SFD_CE_CALL(EVENT_BEFORE_BROADCAST_TAG,c1_event_temperature);
              c1_Process_Buttons();
              _SFD_CE_CALL(EVENT_AFTER_BROADCAST_TAG,c1_event_temperature);
              _sfEvent_ = c1_b_previousEvent;
              if(chartInstance.c1_is_Interactions != 1) {
                chartInstance.c1_is_Interactions = (uint8_T)c1_IN_Output;
                _SFD_CS_CALL(STATE_ACTIVE_TAG,13);
                chartInstance.c1_tp_Output = 1U;
                for(c1_i7 = 0; c1_i7 < 2; c1_i7 = c1_i7 + 1) {
                  (*c1_Command)[c1_i7] = (*c1_SetTemps)[c1_i7] -
                    (real_T)(*c1_MeasuredTemps)[c1_i7];
                }
                for(c1_i8 = 0; c1_i8 < 2; c1_i8 = c1_i8 + 1) {
                  _SFD_DATA_RANGE_CHECK((*c1_Command)[c1_i8], 3U);
                }
                *c1_Reset = 0.0;
                _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
              }
            } else {
              _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,27);
              if(CV_TRANSITION_EVAL(27U, (_SFD_CCP_CALL(27,0,((_sfEvent_ ==
                    c1_event_tic)!=0)) != 0) &&
                (_SFD_CCP_CALL(27,1,((*c1_Setting == 2.0)!=0))
                 != 0)) != 0U != 0) {
                _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,27);
                _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,1);
                chartInstance.c1_tp_Start = 0U;
                chartInstance.c1_is_Interactions =
                  (uint8_T)c1_IN_NO_ACTIVE_CHILD;
                _SFD_CS_CALL(STATE_INACTIVE_TAG,1);
                _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,1);
                c1_c_previousEvent = _sfEvent_;
                _sfEvent_ = c1_event_time;
                _SFD_CE_CALL(EVENT_BEFORE_BROADCAST_TAG,c1_event_time);
                c1_Process_Buttons();
                _SFD_CE_CALL(EVENT_AFTER_BROADCAST_TAG,c1_event_time);
                _sfEvent_ = c1_c_previousEvent;
                chartInstance.c1_is_Interactions = (uint8_T)c1_IN_Output;
                _SFD_CS_CALL(STATE_ACTIVE_TAG,13);
                chartInstance.c1_tp_Output = 1U;
                for(c1_i9 = 0; c1_i9 < 2; c1_i9 = c1_i9 + 1) {
                  (*c1_Command)[c1_i9] = (*c1_SetTemps)[c1_i9] -
                    (real_T)(*c1_MeasuredTemps)[c1_i9];
                }
                for(c1_i10 = 0; c1_i10 < 2; c1_i10 = c1_i10 + 1) {
                  _SFD_DATA_RANGE_CHECK((*c1_Command)[c1_i10], 3U);
                }
                *c1_Reset = 0.0;
                _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
              }
            }
          }
        }
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,1);
        break;
       default:
        CV_STATE_EVAL(17,0,0);
        chartInstance.c1_is_Interactions = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,13);
        break;
      }
    }
    _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,17);
    c1_Process_Buttons();
  }
  _SFD_CC_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
}

static void c1_Start(void)
{
  _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,18);
  if(chartInstance.c1_is_Process_Buttons == 9) {
    _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,3);
    if(CV_TRANSITION_EVAL(3U, (int32_T)_SFD_CCP_CALL(3,0,((_sfEvent_ ==
         c1_event_time)!=0))) != 0U != 0) {
      if(sf_debug_transition_conflict_check_enabled()) {
        unsigned int transitionList[2];
        unsigned int numTransitions=1;
        transitionList[0] = 3;
        sf_debug_transition_conflict_check_begin();
        if(_sfEvent_ == c1_event_temperature) {
          transitionList[numTransitions] = 37;
          numTransitions++;
        }
        sf_debug_transition_conflict_check_end();
        if(numTransitions>1) {
          _SFD_TRANSITION_CONFLICT(&(transitionList[0]),numTransitions);
        }
      }
      _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,3);
      _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,18);
      chartInstance.c1_b_tp_Start = 0U;
      _SFD_CS_CALL(STATE_INACTIVE_TAG,18);
      _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,18);
      chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_SetTime;
      _SFD_CS_CALL(STATE_ACTIVE_TAG,9);
      chartInstance.c1_tp_SetTime = 1U;
    } else {
      _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,37);
      if(CV_TRANSITION_EVAL(37U, (int32_T)_SFD_CCP_CALL(37,0,((_sfEvent_ ==
           c1_event_temperature)!=0))) != 0U != 0) {
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,37);
        _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,18);
        chartInstance.c1_b_tp_Start = 0U;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,18);
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,18);
        chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_Temperature;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,11);
        chartInstance.c1_tp_Temperature = 1U;
      }
    }
  }
  _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,18);
}

static void c1_Process_Buttons(void)
{
  real_T *c1_PushButton;
  real_T *c1_Reset;
  real_T *c1_Enter;
  real_T *c1_Time;
  real_T *c1_SetClock;
  real_T (*c1_SetTemps)[2];
  c1_Time = (real_T *)ssGetOutputPortSignal(chartInstance.S, 2);
  c1_PushButton = (real_T *)ssGetInputPortSignal(chartInstance.S, 1);
  c1_Enter = (real_T *)ssGetInputPortSignal(chartInstance.S, 2);
  c1_SetClock = (real_T *)ssGetOutputPortSignal(chartInstance.S, 1);
  c1_SetTemps = (real_T (*)[2])ssGetOutputPortSignal(chartInstance.S, 4);
  c1_Reset = (real_T *)ssGetOutputPortSignal(chartInstance.S, 3);
  _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,5);
  if(chartInstance.c1_is_active_Process_Buttons != 0) {
    switch(chartInstance.c1_is_Process_Buttons) {
     case c1_IN_AMPM:
      CV_STATE_EVAL(5,0,1);
      _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,7);
      if(chartInstance.c1_is_Process_Buttons == 1) {
        _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,35);
        if(CV_TRANSITION_EVAL(35U, (_SFD_CCP_CALL(35,0,((_sfEvent_ ==
              c1_event_next)!=0)) != 0) && (_SFD_CCP_CALL(35,1,((*c1_Enter ==
              1.0)!=0))
           != 0)) != 0U != 0) {
          _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,35);
          _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,11);
          if(CV_TRANSITION_EVAL(11U, (int32_T)_SFD_CCP_CALL(11,0,((*c1_Time >
               100.0)!=0))) != 0U != 0) {
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,11);
            _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,7);
            chartInstance.c1_tp_AMPM = 0U;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,7);
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,7);
            *c1_Time = *c1_Time - 100.0;
            _SFD_DATA_RANGE_CHECK(*c1_Time, 2U);
            chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_AMPM;
            _SFD_CS_CALL(STATE_ACTIVE_TAG,7);
            chartInstance.c1_temporalCounter_i1 = 0U;
            chartInstance.c1_tp_AMPM = 1U;
            *c1_Reset = 1.0;
            _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
          } else {
            _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,30);
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,30);
            _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,7);
            chartInstance.c1_tp_AMPM = 0U;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,7);
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,7);
            *c1_Time = *c1_Time + 100.0;
            _SFD_DATA_RANGE_CHECK(*c1_Time, 2U);
            chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_AMPM;
            _SFD_CS_CALL(STATE_ACTIVE_TAG,7);
            chartInstance.c1_temporalCounter_i1 = 0U;
            chartInstance.c1_tp_AMPM = 1U;
            *c1_Reset = 1.0;
            _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
          }
        } else {
          _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,16);
          if(CV_TRANSITION_EVAL(16U, (_SFD_CCP_CALL(16,0,((_sfEvent_ ==
                c1_event_next)!=0)) != 0) && (_SFD_CCP_CALL(16,1,((chartInstance.
                c1_temporalCounter_i1 >= 45)!=0)) != 0)) != 0U != 0) {
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,16);
            _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,7);
            chartInstance.c1_tp_AMPM = 0U;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,7);
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,7);
            *c1_SetClock = 0.0;
            _SFD_DATA_RANGE_CHECK(*c1_SetClock, 0U);
            _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,25);
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,25);
            chartInstance.c1_is_Process_Buttons = (uint8_T)c1_b_IN_Start;
            _SFD_CS_CALL(STATE_ACTIVE_TAG,18);
            chartInstance.c1_b_tp_Start = 1U;
            *c1_SetClock = 0.0;
            _SFD_DATA_RANGE_CHECK(*c1_SetClock, 0U);
          }
        }
      }
      _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,7);
      break;
     case c1_IN_Hour1:
      CV_STATE_EVAL(5,0,2);
      _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,0);
      _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,2);
      if(CV_TRANSITION_EVAL(2U, (_SFD_CCP_CALL(2,0,((_sfEvent_ ==
            c1_event_next)!=0)) != 0) && (_SFD_CCP_CALL(2,1,((*c1_PushButton ==
            -1.0)!=0))
         != 0)) != 0U != 0) {
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,2);
        _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,0);
        chartInstance.c1_tp_Hour1 = 0U;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,0);
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
        chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_Wait3;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,8);
        chartInstance.c1_temporalCounter_i1 = 0U;
        chartInstance.c1_tp_Wait3 = 1U;
      } else {
        *c1_Reset = 1.0;
        _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
      }
      _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
      break;
     case c1_IN_Hour2:
      CV_STATE_EVAL(5,0,3);
      _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,4);
      _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,17);
      if(CV_TRANSITION_EVAL(17U, (_SFD_CCP_CALL(17,0,((_sfEvent_ ==
            c1_event_next)!=0)) != 0) && (_SFD_CCP_CALL(17,1,((*c1_PushButton ==

            -1.0)!=0)) != 0)) != 0U != 0) {
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,17);
        _SFD_CS_CALL(STATE_ENTER_EXIT_FUNCTION_TAG,4);
        chartInstance.c1_tp_Hour2 = 0U;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,4);
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,4);
        chartInstance.c1_is_Process_Buttons = (uint8_T)c1_IN_Wait2;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,3);
        chartInstance.c1_temporalCounter_i1 = 0U;
        chartInstance.c1_tp_Wait2 = 1U;
      } else {
        *c1_Reset = 1.0;
        _SFD_DATA_RANGE_CHECK(*c1_Reset, 14U);
      }
      _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,4);
      break;
     case c1_IN_Minutes1:
      CV_STATE_EVAL(5,0,4);
      _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,19);
      if(chartInstance.c1_is_Process_Buttons == 4) {
        _SFD_CT_CALL(TRANSITION_BEFORE_PROCESSING_TAG,5);
        if(CV_TRANSITION_EVAL(5U, (_SFD_CCP_CALL(5,0,((_sfEvent_ ==

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -