Esempio n. 1
0
/* Output and update for referenced model: 'motor_hr' */
void motor_hr(const real_T *rtu_enable, const real_T *rtu_power, const real_T
              *rtu_direction)
{
  real_T rtu_enable_0;
  uint8_T rtu_enable_1;

  /* Switch: '<Root>/Switch' incorporates:
   *  Constant: '<Root>/Constant2'
   */
  if (*rtu_enable > motor_hr_P.Switch_Threshold) {
    rtu_enable_0 = *rtu_direction;
  } else {
    rtu_enable_0 = motor_hr_P.Constant2_Value;
  }

  /* End of Switch: '<Root>/Switch' */

  /* DataTypeConversion: '<S1>/Data Type Conversion' */
  if (rtu_enable_0 < 256.0) {
    if (rtu_enable_0 >= 0.0) {
      rtu_enable_1 = (uint8_T)rtu_enable_0;
    } else {
      rtu_enable_1 = 0U;
    }
  } else {
    rtu_enable_1 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S1>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S1>/Digital Output' */
  MW_digitalWrite(motor_hr_P.DigitalOutput_pinNumber, rtu_enable_1);

  /* Switch: '<Root>/Switch1' incorporates:
   *  Constant: '<Root>/Constant3'
   */
  if (*rtu_enable > motor_hr_P.Switch1_Threshold) {
    rtu_enable_0 = *rtu_power;
  } else {
    rtu_enable_0 = motor_hr_P.Constant3_Value;
  }

  /* End of Switch: '<Root>/Switch1' */

  /* DataTypeConversion: '<S2>/Data Type Conversion' */
  if (rtu_enable_0 < 256.0) {
    if (rtu_enable_0 >= 0.0) {
      rtu_enable_1 = (uint8_T)rtu_enable_0;
    } else {
      rtu_enable_1 = 0U;
    }
  } else {
    rtu_enable_1 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S2>/Data Type Conversion' */

  /* S-Function (arduinoanalogoutput_sfcn): '<S2>/PWM' */
  MW_analogWrite(motor_hr_P.PWM_pinNumber, rtu_enable_1);
}
Esempio n. 2
0
/* Model output function */
void ArduinoFirstTry_output(void)
{
  real_T rtb_PulseGenerator;
  uint8_T rtb_PulseGenerator_0;

  /* DiscretePulseGenerator: '<Root>/Pulse Generator' */
  rtb_PulseGenerator = (ArduinoFirstTry_DW.clockTickCounter <
                        ArduinoFirstTry_P.PulseGenerator_Duty) &&
    (ArduinoFirstTry_DW.clockTickCounter >= 0L) ?
    ArduinoFirstTry_P.PulseGenerator_Amp : 0.0;
  if (ArduinoFirstTry_DW.clockTickCounter >=
      ArduinoFirstTry_P.PulseGenerator_Period - 1.0) {
    ArduinoFirstTry_DW.clockTickCounter = 0L;
  } else {
    ArduinoFirstTry_DW.clockTickCounter++;
  }

  /* End of DiscretePulseGenerator: '<Root>/Pulse Generator' */

  /* DataTypeConversion: '<S1>/Data Type Conversion' */
  if (rtb_PulseGenerator < 256.0) {
    if (rtb_PulseGenerator >= 0.0) {
      rtb_PulseGenerator_0 = (uint8_T)rtb_PulseGenerator;
    } else {
      rtb_PulseGenerator_0 = 0U;
    }
  } else {
    rtb_PulseGenerator_0 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S1>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S1>/Digital Output' */
  MW_digitalWrite(ArduinoFirstTry_P.DigitalOutput_pinNumber,
                  rtb_PulseGenerator_0);
}
Esempio n. 3
0
/* Model step function */
void motor_hr_step(void)
{
  real_T tmp;
  uint8_T tmp_0;

  /* Switch: '<Root>/Switch' incorporates:
   *  Constant: '<Root>/Constant2'
   *  Inport: '<Root>/direction'
   *  Inport: '<Root>/enable'
   */
  if (motor_hr_U.enable > motor_hr_P.Switch_Threshold) {
    tmp = motor_hr_U.direction;
  } else {
    tmp = motor_hr_P.Constant2_Value;
  }

  /* End of Switch: '<Root>/Switch' */

  /* DataTypeConversion: '<S1>/Data Type Conversion' */
  if (tmp < 256.0) {
    if (tmp >= 0.0) {
      tmp_0 = (uint8_T)tmp;
    } else {
      tmp_0 = 0U;
    }
  } else {
    tmp_0 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S1>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S1>/Digital Output' */
  MW_digitalWrite(motor_hr_P.DigitalOutput_pinNumber, tmp_0);

  /* Switch: '<Root>/Switch1' incorporates:
   *  Constant: '<Root>/Constant3'
   *  Inport: '<Root>/enable'
   *  Inport: '<Root>/power'
   */
  if (motor_hr_U.enable > motor_hr_P.Switch1_Threshold) {
    tmp = motor_hr_U.power;
  } else {
    tmp = motor_hr_P.Constant3_Value;
  }

  /* End of Switch: '<Root>/Switch1' */

  /* DataTypeConversion: '<S2>/Data Type Conversion' */
  if (tmp < 256.0) {
    if (tmp >= 0.0) {
      tmp_0 = (uint8_T)tmp;
    } else {
      tmp_0 = 0U;
    }
  } else {
    tmp_0 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S2>/Data Type Conversion' */

  /* S-Function (arduinoanalogoutput_sfcn): '<S2>/PWM' */
  MW_analogWrite(motor_hr_P.PWM_pinNumber, tmp_0);

  /* External mode */
  rtExtModeUploadCheckTrigger(1);

  {                                    /* Sample time: [20.0s, 0.0s] */
    rtExtModeUpload(0, motor_hr_M->Timing.taskTime0);
  }

  /* signal main to stop simulation */
  {                                    /* Sample time: [20.0s, 0.0s] */
    if ((rtmGetTFinal(motor_hr_M)!=-1) &&
        !((rtmGetTFinal(motor_hr_M)-motor_hr_M->Timing.taskTime0) >
          motor_hr_M->Timing.taskTime0 * (DBL_EPSILON))) {
      rtmSetErrorStatus(motor_hr_M, "Simulation finished");
    }

    if (rtmGetStopRequested(motor_hr_M)) {
      rtmSetErrorStatus(motor_hr_M, "Simulation finished");
    }
  }

  /* Update absolute time for base rate */
  /* The "clockTick0" counts the number of times the code of this task has
   * been executed. The absolute time is the multiplication of "clockTick0"
   * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
   * overflow during the application lifespan selected.
   */
  motor_hr_M->Timing.taskTime0 =
    (++motor_hr_M->Timing.clockTick0) * motor_hr_M->Timing.stepSize0;
}
/*
 * Output and update for atomic system:
 *    '<S1>/hl'
 *    '<S1>/vl'
 */
void motor_test_hierarchies_hl(real_T rtu_enable, real_T rtu_power, real_T
  rtu_direction, B_hl_motor_test_hierarchies_T *localB,
  P_hl_motor_test_hierarchies_T *localP)
{
  real_T rtu_enable_0;
  uint8_T rtu_enable_1;

  /* Switch: '<S4>/Switch' incorporates:
   *  Constant: '<S4>/Constant2'
   */
  if (rtu_enable > localP->Switch_Threshold) {
    rtu_enable_0 = rtu_direction;
  } else {
    rtu_enable_0 = localP->Constant2_Value;
  }

  /* End of Switch: '<S4>/Switch' */

  /* DataTypeConversion: '<S8>/Data Type Conversion' */
  if (rtu_enable_0 < 256.0) {
    if (rtu_enable_0 >= 0.0) {
      rtu_enable_1 = (uint8_T)rtu_enable_0;
    } else {
      rtu_enable_1 = 0U;
    }
  } else {
    rtu_enable_1 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S8>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S8>/Digital Output' */
  MW_digitalWrite(localP->DigitalOutput_pinNumber, rtu_enable_1);

  /* Switch: '<S4>/Switch1' incorporates:
   *  Constant: '<S4>/Constant3'
   *  DataTypeConversion: '<S9>/Data Type Conversion'
   */
  if (rtu_enable > localP->Switch1_Threshold) {
    /* DataTypeConversion: '<S9>/Data Type Conversion' */
    if (rtu_power < 256.0) {
      if (rtu_power >= 0.0) {
        localB->DataTypeConversion = (uint8_T)rtu_power;
      } else {
        localB->DataTypeConversion = 0U;
      }
    } else {
      localB->DataTypeConversion = MAX_uint8_T;
    }
  } else if (localP->Constant3_Value < 256.0) {
    /* DataTypeConversion: '<S9>/Data Type Conversion' incorporates:
     *  Constant: '<S4>/Constant3'
     */
    if (localP->Constant3_Value >= 0.0) {
      localB->DataTypeConversion = (uint8_T)localP->Constant3_Value;
    } else {
      localB->DataTypeConversion = 0U;
    }
  } else {
    /* DataTypeConversion: '<S9>/Data Type Conversion' */
    localB->DataTypeConversion = MAX_uint8_T;
  }

  /* End of Switch: '<S4>/Switch1' */

  /* S-Function (arduinoanalogoutput_sfcn): '<S9>/PWM' */
  MW_analogWrite(localP->PWM_pinNumber, localB->DataTypeConversion);
}
/* Model step function */
void motor_test_hierarchies_step(void)
{
  /* local block i/o variables */
  real_T rtb_FromWs;
  real_T tmp;
  uint8_T tmp_0;

  /* Constant: '<Root>/enable' */
  motor_test_hierarchies_B.enable = motor_test_hierarchies_P.enable_Value;

  /* FromWorkspace: '<S3>/FromWs' */
  {
    real_T *pDataValues = (real_T *)
      motor_test_hierarchies_DW.FromWs_PWORK.DataPtr;
    real_T *pTimeValues = (real_T *)
      motor_test_hierarchies_DW.FromWs_PWORK.TimePtr;
    int_T currTimeIndex = motor_test_hierarchies_DW.FromWs_IWORK.PrevIndex;
    real_T t = motor_test_hierarchies_M->Timing.t[0];

    /* Get index */
    if (t <= pTimeValues[0]) {
      currTimeIndex = 0;
    } else if (t >= pTimeValues[9]) {
      currTimeIndex = 8;
    } else {
      if (t < pTimeValues[currTimeIndex]) {
        while (t < pTimeValues[currTimeIndex]) {
          currTimeIndex--;
        }
      } else {
        while (t >= pTimeValues[currTimeIndex + 1]) {
          currTimeIndex++;
        }
      }
    }

    motor_test_hierarchies_DW.FromWs_IWORK.PrevIndex = currTimeIndex;

    /* Post output */
    {
      real_T t1 = pTimeValues[currTimeIndex];
      real_T t2 = pTimeValues[currTimeIndex + 1];
      if (t1 == t2) {
        if (t < t1) {
          rtb_FromWs = pDataValues[currTimeIndex];
        } else {
          rtb_FromWs = pDataValues[currTimeIndex + 1];
        }
      } else {
        real_T f1 = (t2 - t) / (t2 - t1);
        real_T f2 = 1.0 - f1;
        real_T d1;
        real_T d2;
        int_T TimeIndex= currTimeIndex;
        d1 = pDataValues[TimeIndex];
        d2 = pDataValues[TimeIndex + 1];
        rtb_FromWs = (real_T) rtInterpolate(d1, d2, f1, f2);
        pDataValues += 10;
      }
    }
  }

  /* Outputs for Atomic SubSystem: '<S1>/hl' */

  /* Constant: '<Root>/direction' */
  motor_test_hierarchies_hl(motor_test_hierarchies_B.enable, rtb_FromWs,
    motor_test_hierarchies_P.direction_Value, &motor_test_hierarchies_B.hl,
    (P_hl_motor_test_hierarchies_T *)&motor_test_hierarchies_P.hl);

  /* End of Outputs for SubSystem: '<S1>/hl' */

  /* Outputs for Atomic SubSystem: '<S1>/hr' */
  /* Switch: '<S5>/Switch' incorporates:
   *  Constant: '<Root>/direction'
   *  Constant: '<S5>/Constant2'
   */
  if (motor_test_hierarchies_B.enable >
      motor_test_hierarchies_P.Switch_Threshold) {
    tmp = motor_test_hierarchies_P.direction_Value;
  } else {
    tmp = motor_test_hierarchies_P.Constant2_Value;
  }

  /* End of Switch: '<S5>/Switch' */

  /* DataTypeConversion: '<S10>/Data Type Conversion' */
  if (tmp < 256.0) {
    if (tmp >= 0.0) {
      tmp_0 = (uint8_T)tmp;
    } else {
      tmp_0 = 0U;
    }
  } else {
    tmp_0 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S10>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S10>/Digital Output' */
  MW_digitalWrite(motor_test_hierarchies_P.DigitalOutput_pinNumber, tmp_0);

  /* Switch: '<S5>/Switch1' incorporates:
   *  Constant: '<S5>/Constant3'
   *  DataTypeConversion: '<S11>/Data Type Conversion'
   */
  if (motor_test_hierarchies_B.enable >
      motor_test_hierarchies_P.Switch1_Threshold) {
    /* DataTypeConversion: '<S11>/Data Type Conversion' */
    if (rtb_FromWs < 256.0) {
      if (rtb_FromWs >= 0.0) {
        motor_test_hierarchies_B.DataTypeConversion_b = (uint8_T)rtb_FromWs;
      } else {
        motor_test_hierarchies_B.DataTypeConversion_b = 0U;
      }
    } else {
      motor_test_hierarchies_B.DataTypeConversion_b = MAX_uint8_T;
    }
  } else if (motor_test_hierarchies_P.Constant3_Value < 256.0) {
    /* DataTypeConversion: '<S11>/Data Type Conversion' incorporates:
     *  Constant: '<S5>/Constant3'
     */
    if (motor_test_hierarchies_P.Constant3_Value >= 0.0) {
      motor_test_hierarchies_B.DataTypeConversion_b = (uint8_T)
        motor_test_hierarchies_P.Constant3_Value;
    } else {
      motor_test_hierarchies_B.DataTypeConversion_b = 0U;
    }
  } else {
    /* DataTypeConversion: '<S11>/Data Type Conversion' */
    motor_test_hierarchies_B.DataTypeConversion_b = MAX_uint8_T;
  }

  /* End of Switch: '<S5>/Switch1' */

  /* S-Function (arduinoanalogoutput_sfcn): '<S11>/PWM' */
  MW_analogWrite(motor_test_hierarchies_P.PWM_pinNumber,
                 motor_test_hierarchies_B.DataTypeConversion_b);

  /* Outputs for Atomic SubSystem: '<S1>/vl' */

  /* Constant: '<Root>/direction' */
  motor_test_hierarchies_hl(motor_test_hierarchies_B.enable, rtb_FromWs,
    motor_test_hierarchies_P.direction_Value, &motor_test_hierarchies_B.vl,
    (P_hl_motor_test_hierarchies_T *)&motor_test_hierarchies_P.vl);

  /* End of Outputs for SubSystem: '<S1>/vl' */

  /* Outputs for Atomic SubSystem: '<S1>/vr' */
  /* Switch: '<S7>/Switch' incorporates:
   *  Constant: '<Root>/direction'
   *  Constant: '<S7>/Constant2'
   */
  if (motor_test_hierarchies_B.enable >
      motor_test_hierarchies_P.Switch_Threshold_k) {
    tmp = motor_test_hierarchies_P.direction_Value;
  } else {
    tmp = motor_test_hierarchies_P.Constant2_Value_n;
  }

  /* End of Switch: '<S7>/Switch' */

  /* DataTypeConversion: '<S14>/Data Type Conversion' */
  if (tmp < 256.0) {
    if (tmp >= 0.0) {
      tmp_0 = (uint8_T)tmp;
    } else {
      tmp_0 = 0U;
    }
  } else {
    tmp_0 = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<S14>/Data Type Conversion' */

  /* S-Function (arduinodigitaloutput_sfcn): '<S14>/Digital Output' */
  MW_digitalWrite(motor_test_hierarchies_P.DigitalOutput_pinNumber_a, tmp_0);

  /* Switch: '<S7>/Switch1' incorporates:
   *  Constant: '<S7>/Constant3'
   *  DataTypeConversion: '<S15>/Data Type Conversion'
   */
  if (motor_test_hierarchies_B.enable >
      motor_test_hierarchies_P.Switch1_Threshold_o) {
    /* DataTypeConversion: '<S15>/Data Type Conversion' */
    if (rtb_FromWs < 256.0) {
      if (rtb_FromWs >= 0.0) {
        motor_test_hierarchies_B.DataTypeConversion = (uint8_T)rtb_FromWs;
      } else {
        motor_test_hierarchies_B.DataTypeConversion = 0U;
      }
    } else {
      motor_test_hierarchies_B.DataTypeConversion = MAX_uint8_T;
    }
  } else if (motor_test_hierarchies_P.Constant3_Value_f < 256.0) {
    /* DataTypeConversion: '<S15>/Data Type Conversion' incorporates:
     *  Constant: '<S7>/Constant3'
     */
    if (motor_test_hierarchies_P.Constant3_Value_f >= 0.0) {
      motor_test_hierarchies_B.DataTypeConversion = (uint8_T)
        motor_test_hierarchies_P.Constant3_Value_f;
    } else {
      motor_test_hierarchies_B.DataTypeConversion = 0U;
    }
  } else {
    /* DataTypeConversion: '<S15>/Data Type Conversion' */
    motor_test_hierarchies_B.DataTypeConversion = MAX_uint8_T;
  }

  /* End of Switch: '<S7>/Switch1' */

  /* S-Function (arduinoanalogoutput_sfcn): '<S15>/PWM' */
  MW_analogWrite(motor_test_hierarchies_P.PWM_pinNumber_n,
                 motor_test_hierarchies_B.DataTypeConversion);

  /* External mode */
  rtExtModeUploadCheckTrigger(2);

  {                                    /* Sample time: [0.0s, 0.0s] */
    rtExtModeUpload(0, motor_test_hierarchies_M->Timing.t[0]);
  }

  {                                    /* Sample time: [1.0s, 0.0s] */
    rtExtModeUpload(1, ((motor_test_hierarchies_M->Timing.clockTick1) ));
  }

  /* signal main to stop simulation */
  {                                    /* Sample time: [0.0s, 0.0s] */
    if ((rtmGetTFinal(motor_test_hierarchies_M)!=-1) &&
        !((rtmGetTFinal(motor_test_hierarchies_M)-
           motor_test_hierarchies_M->Timing.t[0]) >
          motor_test_hierarchies_M->Timing.t[0] * (DBL_EPSILON))) {
      rtmSetErrorStatus(motor_test_hierarchies_M, "Simulation finished");
    }

    if (rtmGetStopRequested(motor_test_hierarchies_M)) {
      rtmSetErrorStatus(motor_test_hierarchies_M, "Simulation finished");
    }
  }

  /* Update absolute time for base rate */
  /* The "clockTick0" counts the number of times the code of this task has
   * been executed. The absolute time is the multiplication of "clockTick0"
   * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
   * overflow during the application lifespan selected.
   */
  motor_test_hierarchies_M->Timing.t[0] =
    (++motor_test_hierarchies_M->Timing.clockTick0) *
    motor_test_hierarchies_M->Timing.stepSize0;

  {
    /* Update absolute timer for sample time: [1.0s, 0.0s] */
    /* The "clockTick1" counts the number of times the code of this task has
     * been executed. The resolution of this integer timer is 1.0, which is the step size
     * of the task. Size of "clockTick1" ensures timer will not overflow during the
     * application lifespan selected.
     */
    motor_test_hierarchies_M->Timing.clockTick1++;
  }
}