/* 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);