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

📄 c1_servo_demo.c

📁 simulink仿真学习的必备教程
💻 C
📖 第 1 页 / 共 3 页
字号:
/* Include files */
#include "servo_demo_sfun.h"
#include "c1_servo_demo.h"
#define CHARTINSTANCE_CHARTNUMBER       (chartInstance.chartNumber)
#define CHARTINSTANCE_INSTANCENUMBER    (chartInstance.instanceNumber)
#include "servo_demo_sfun_debug_macros.h"

/* Type Definitions */

/* Named Constants */
#define c1_IN_NO_ACTIVE_CHILD           (0)
#define c1_IN_energize_solenoid         (1)
#define c1_IN_pull_in_current           (1)
#define c1_IN_regulate_hold_current     (2)
#define c1_IN_freewheel                 (1)
#define c1_IN_solenoid_off              (2)
#define c1_IN_hold                      (2)

/* Variable Declarations */

/* Variable Definitions */
static SFc1_servo_demoInstanceStruct chartInstance;

/* Function Declarations */
static void initialize_c1_servo_demo(void);
static void enable_c1_servo_demo(void);
static void disable_c1_servo_demo(void);
static void finalize_c1_servo_demo(void);
static void sf_c1_servo_demo(void);
static int32_T c1__s32_uminus__(int32_T c1_b);
static real_T *c1_v(void);
static real_T *c1_duty_cycle(void);
static real_T *c1_i(void);
static void init_test_point_addr_map(void);
static void **get_test_point_address_map(void);
static rtwCAPI_ModelMappingInfo *get_test_point_mapping_info(void);

/* Function Definitions */
static void initialize_c1_servo_demo(void)
{
  chartInstance.c1_is_energize_solenoid = 0;
  chartInstance.c1_tp_energize_solenoid = 0;
  chartInstance.c1_tp_pull_in_current = 0;
  chartInstance.c1_is_regulate_hold_current = 0;
  chartInstance.c1_tp_regulate_hold_current = 0;
  chartInstance.c1_tp_freewheel = 0;
  chartInstance.c1_tp_hold = 0;
  chartInstance.c1_tp_solenoid_off = 0;
  chartInstance.c1_is_active_c1_servo_demo = 0;
  chartInstance.c1_is_c1_servo_demo = 0;
  chartInstance.c1_ton = 0.0;
  chartInstance.c1_toff = 0.0;
  if(!(cdrGetOutputPortReusable(chartInstance.S, 1) != 0)) {
    *c1_v() = 0.0;
  }
  {
    real_T c1_sf_d6;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Tpwm' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 2),
     "sf_mex_get_sfun_param", &c1_sf_d6, 0, 0U, 0, 0);
    chartInstance.c1_Tpwm = c1_sf_d6;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d5;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Ipull' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 1),
     "sf_mex_get_sfun_param", &c1_sf_d5, 0, 0U, 0, 0);
    chartInstance.c1_Ipull = c1_sf_d5;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d4;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Ihold' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 0),
     "sf_mex_get_sfun_param", &c1_sf_d4, 0, 0U, 0, 0);
    chartInstance.c1_Ihold = c1_sf_d4;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d3;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'deltai' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 6),
     "sf_mex_get_sfun_param", &c1_sf_d3, 0, 0U, 0, 0);
    chartInstance.c1_deltai = c1_sf_d3;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d2;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Vs' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 4),
     "sf_mex_get_sfun_param", &c1_sf_d2, 0, 0U, 0, 0);
    chartInstance.c1_Vs = c1_sf_d2;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d1;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Vz' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 5),
     "sf_mex_get_sfun_param", &c1_sf_d1, 0, 0U, 0, 0);
    chartInstance.c1_Vz = c1_sf_d1;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
  {
    real_T c1_sf_d0;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): Error evaluating chart workspace data 'Vd' in the chart's parent workspace.\n");
    sf_mex_import(sf_mex_get_sfun_param(chartInstance.S, 3),
     "sf_mex_get_sfun_param", &c1_sf_d0, 0, 0U, 0, 0);
    chartInstance.c1_Vd = c1_sf_d0;
    sf_set_error_prefix_string("Stateflow Runtime Error (chart): ");
  }
}

static void enable_c1_servo_demo(void)
{
}

static void disable_c1_servo_demo(void)
{
}

static void finalize_c1_servo_demo(void)
{
}

static void sf_c1_servo_demo(void)
{
  uint8_T c1_previousEvent;
  _sfTime_ = (real_T)ssGetT(chartInstance.S);
  _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
  _SFD_DATA_RANGE_CHECK_MIN_MAX(*c1_duty_cycle(), 0U, 0.0, 100.0);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_ton, 3U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_toff, 7U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Tpwm, 5U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Ipull, 1U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Ihold, 4U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_deltai, 11U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Vs, 8U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Vz, 9U);
  _SFD_DATA_RANGE_CHECK(chartInstance.c1_Vd, 2U);
  _SFD_DATA_RANGE_CHECK(*c1_i(), 10U);
  c1_previousEvent = _sfEvent_;
  _sfEvent_ = CALL_EVENT;
  _SFD_CC_CALL(CHART_ENTER_DURING_FUNCTION_TAG,0);
  if(chartInstance.c1_is_active_c1_servo_demo == 0) {
    _SFD_CC_CALL(CHART_ENTER_ENTRY_FUNCTION_TAG,0);
    chartInstance.c1_is_active_c1_servo_demo = 1;
    _SFD_CC_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
    _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,4);
    chartInstance.c1_ton = 0.0;
    _SFD_DATA_RANGE_CHECK(chartInstance.c1_ton, 3U);
    _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,0);
    chartInstance.c1_toff = chartInstance.c1_ton + *c1_duty_cycle() *
      chartInstance.c1_Tpwm / 100.0;
    _SFD_DATA_RANGE_CHECK(chartInstance.c1_toff, 7U);
    chartInstance.c1_is_c1_servo_demo = (uint8_T)c1_IN_energize_solenoid;
    _SFD_CS_CALL(STATE_ACTIVE_TAG,1);
    chartInstance.c1_tp_energize_solenoid = 1;
    _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,3);
    chartInstance.c1_is_energize_solenoid = (uint8_T)c1_IN_pull_in_current;
    _SFD_CS_CALL(STATE_ACTIVE_TAG,2);
    chartInstance.c1_tp_pull_in_current = 1;
    *c1_v() = chartInstance.c1_Vs;
    _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
  } else {
    switch(chartInstance.c1_is_c1_servo_demo) {
     case c1_IN_energize_solenoid:
      CV_CHART_EVAL(0,0,1);
      _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,1);
      if(CV_TRANSITION_EVAL(2U, (int32_T)_SFD_CCP_CALL(2,0,(_sfTime_ >
          chartInstance.c1_toff))) != 0) {
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,2);
        chartInstance.c1_ton += chartInstance.c1_Tpwm;
        _SFD_DATA_RANGE_CHECK(chartInstance.c1_ton, 3U);
        switch(chartInstance.c1_is_energize_solenoid) {
         case c1_IN_pull_in_current:
          CV_STATE_EVAL(1,1,1);
          chartInstance.c1_tp_pull_in_current = 0;
          chartInstance.c1_is_energize_solenoid = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
          _SFD_CS_CALL(STATE_INACTIVE_TAG,2);
          break;
         case c1_IN_regulate_hold_current:
          CV_STATE_EVAL(1,1,2);
          switch(chartInstance.c1_is_regulate_hold_current) {
           case c1_IN_freewheel:
            CV_STATE_EVAL(5,1,1);
            chartInstance.c1_tp_freewheel = 0;
            chartInstance.c1_is_regulate_hold_current =
              (uint8_T)c1_IN_NO_ACTIVE_CHILD;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,4);
            break;
           case c1_IN_hold:
            CV_STATE_EVAL(5,1,2);
            chartInstance.c1_tp_hold = 0;
            chartInstance.c1_is_regulate_hold_current =
              (uint8_T)c1_IN_NO_ACTIVE_CHILD;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,3);
            break;
           default:
            CV_STATE_EVAL(5,1,0);
            break;
          }
          chartInstance.c1_tp_regulate_hold_current = 0;
          chartInstance.c1_is_energize_solenoid = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
          _SFD_CS_CALL(STATE_INACTIVE_TAG,5);
          break;
         default:
          CV_STATE_EVAL(1,1,0);
          break;
        }
        chartInstance.c1_tp_energize_solenoid = 0;
        chartInstance.c1_is_c1_servo_demo = (uint8_T)c1_IN_NO_ACTIVE_CHILD;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,1);
        chartInstance.c1_is_c1_servo_demo = (uint8_T)c1_IN_solenoid_off;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,0);
        chartInstance.c1_tp_solenoid_off = 1;
        *c1_v() = (real_T)c1__s32_uminus__(*c1_i() > 0.0) * chartInstance.c1_Vz;
        _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
      } else {
        switch(chartInstance.c1_is_energize_solenoid) {
         case c1_IN_pull_in_current:
          CV_STATE_EVAL(1,0,1);
          _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,2);
          if(CV_TRANSITION_EVAL(6U, (int32_T)_SFD_CCP_CALL(6,0,(*c1_i() >=
              chartInstance.c1_Ipull))) != 0) {
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,6);
            chartInstance.c1_tp_pull_in_current = 0;
            chartInstance.c1_is_energize_solenoid =
              (uint8_T)c1_IN_NO_ACTIVE_CHILD;
            _SFD_CS_CALL(STATE_INACTIVE_TAG,2);
            chartInstance.c1_is_energize_solenoid =
              (uint8_T)c1_IN_regulate_hold_current;
            _SFD_CS_CALL(STATE_ACTIVE_TAG,5);
            chartInstance.c1_tp_regulate_hold_current = 1;
            _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,8);
            chartInstance.c1_is_regulate_hold_current = (uint8_T)c1_IN_freewheel;
            _SFD_CS_CALL(STATE_ACTIVE_TAG,4);
            chartInstance.c1_tp_freewheel = 1;
            *c1_v() = (real_T)c1__s32_uminus__(*c1_i() > 0.0) *
              chartInstance.c1_Vd;
            _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
          }
          _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,2);
          break;
         case c1_IN_regulate_hold_current:
          CV_STATE_EVAL(1,0,2);
          _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,5);
          switch(chartInstance.c1_is_regulate_hold_current) {
           case c1_IN_freewheel:
            CV_STATE_EVAL(5,0,1);
            _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,4);
            if(CV_TRANSITION_EVAL(1U, (int32_T)_SFD_CCP_CALL(1,0,(*c1_i() <=
                chartInstance.c1_Ihold - chartInstance.c1_deltai))) != 0) {
              _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,1);
              chartInstance.c1_tp_freewheel = 0;
              chartInstance.c1_is_regulate_hold_current =
                (uint8_T)c1_IN_NO_ACTIVE_CHILD;
              _SFD_CS_CALL(STATE_INACTIVE_TAG,4);
              chartInstance.c1_is_regulate_hold_current = (uint8_T)c1_IN_hold;
              _SFD_CS_CALL(STATE_ACTIVE_TAG,3);
              chartInstance.c1_tp_hold = 1;
              *c1_v() = chartInstance.c1_Vs;
              _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
            } else {
              *c1_v() = (real_T)c1__s32_uminus__(*c1_i() > 0.0) *
                chartInstance.c1_Vd;
              _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
            }
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,4);
            break;
           case c1_IN_hold:
            CV_STATE_EVAL(5,0,2);
            _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,3);
            if(CV_TRANSITION_EVAL(5U, (int32_T)_SFD_CCP_CALL(5,0,(*c1_i() >=
                chartInstance.c1_Ihold + chartInstance.c1_deltai))) != 0) {
              _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,5);
              chartInstance.c1_tp_hold = 0;
              chartInstance.c1_is_regulate_hold_current =
                (uint8_T)c1_IN_NO_ACTIVE_CHILD;
              _SFD_CS_CALL(STATE_INACTIVE_TAG,3);
              chartInstance.c1_is_regulate_hold_current =
                (uint8_T)c1_IN_freewheel;
              _SFD_CS_CALL(STATE_ACTIVE_TAG,4);
              chartInstance.c1_tp_freewheel = 1;
              *c1_v() = (real_T)c1__s32_uminus__(*c1_i() > 0.0) *
                chartInstance.c1_Vd;
              _SFD_DATA_RANGE_CHECK(*c1_v(), 6U);
            }
            _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,3);
            break;
           default:
            CV_STATE_EVAL(5,0,0);
            break;
          }
          _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,5);
          break;
         default:
          CV_STATE_EVAL(1,0,0);
          break;
        }
      }

⌨️ 快捷键说明

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