# Control: SISO

Model ElementControl_SISO is an abstract modeling element that defines a linear, time
invariant dynamic system in the Laplace domain. SISO stands for __S__ingle __I__nput
__S__ingle __O__utput.

## Description

Such a dynamic system is characterized by a transfer function. In practice, the transfer function is often characterized by experiments followed by curve fitting. Modeling applications of this element include actuators (electrical, hydraulic, and pneumatic), vibration isolators (bushings and shock absorbers), and controllers (PID).

`u`) variable and one output (

`y`) variable. This is shown in the block diagram in the image below.

m and n denote the order of the numerator and denominator polynomials and must satisfy m ≤ n.

## Format

```
<Control_SISO
id =
```*"integer"*
[ label = "string" ]
x_array_id = *"integer"*
y_array_id = *"integer"*
u_array_id = *"integer"*
[ is_static_hold = { "TRUE" | "FALSE" } ]
num_numerator_coef = *"integer"*
numerator_coef = *"real* [ *real real … real* ] *"*
num_denominator_coef = *"integer"*
denominator_coef = *"real* [ *real real … real* ] *"*
/>

## Attributes

`id`- Element identification number (integer>0). This number is unique among all Control_SISO elements.
`label`- The name of the Control_SISO element.
`x_array_id`- Specifies the ID of the Reference_Array used to store the states x of this Control_SISO. You can use the ARYVAL() function with this ID to access the states in a MotionSolve expression. You can also use this ID in SYSFNC and SYSARY to access the state values from a user subroutine.
`y_array_id`- Specifies the ID of the Reference_Array used to store the output,
`y`, of this Control_SISO. You can use the ARYVAL() function with this ID to access the states in a MotionSolve expression. You can also use this ID in SYSFNC and SYSARY to access the output values from a user subroutine. `u_array_id`- Specifies the ID of the Reference_Array used to store the input u of this Control_SISO. You can use the ARYVAL() function with this ID to access the states in a MotionSolve expression. You can also use this ID in SYSFNC and SYSARY to access the input values from a user subroutine.
`is_static_hold`- Element identification number (integer>0). This number is unique among all Control_SISO elements.
`num_numerator_coef`- An integer that specifies the number of coefficients in the numerator of the
Control_SISO.
`num_state`> 0. `numerator_coef`- Specifies the coefficients, in the ascending powers of "s", of the numerator polynomial of the transfer function.
`num_denominator_coef`- An integer that specifies the number of coefficients in the denominator of the
Control_SISO.
`num_numerator_coef`≤`num_denominator_coef`. `denominator_coef`- Specifies the coefficients, in the ascending powers of "s", of the denominator polynomial of the transfer function.

## Example

- Ω denotes the reference speed.
- Ω denotes the actual speed.
- E(s) denotes the Laplace transform of the error signal.
- G
_{c}(s) denotes the controller transfer function. - T(s) denotes the output of the controller, the control torque.
- J denotes the moment of inertia of the rotor.
- N(s) denotes the disturbance load in the Laplace domain.

K and K_{p}
denote the controller gains. This controller can be modeled using the
Control_SISO as follows:

```
<Control_SISO
id = "303001"
label = "ControlSISO name"
x_array_id = "30300200"
y_solver_id = "30300300"
u_solver_id = "30300100"
is_static_hold = "FALSE"
num_numerator_coef = "2"
numerator_coef = "10. 1."
num_denominator_coef = "2"
denominator_coef = "0. 1."
/>
```

## Comments

- Control_SISO is a versatile element
that has many different applications in modeling multi-disciplinary systems. This element
may be used to model any externally-defined subsystem that can be characterized by a
transfer function.Some examples of subsystems that could be "integrated" into a system model in MotionSolve include:
- PID and other controllers
- Hydraulic, pneumatic, and electromechanical actuators
- First order delay elements
- Simple driver models that mimic human driving behavior
- Frequency and amplitude dependent properties of vibration isolators

- Note that the algorithm that transforms the Laplace domain transfer function into time domain state space form is not robust for higher order systems. In such cases, we recommend first factoring the transfer function into lower order ones and then using one Control_SISO element for each factor.
- The behavior of the dynamic states associated with a
Control_SISO element during static and quasi-static solutions is
governed by the attribute,
`is_static_hold`.`is_static_hold`= "TRUE"If the solution is done at time T = 0, the states are kept fixed at the value specified by the

`IC`array. If the solution is being done after a dynamic analysis, then the value is kept fixed at the last value obtained from a dynamic simulation. The equations defining the states for the Control_SISO are replaced with the following:x(t*) = x*, where x* is a constant.

Note that when the dynamic states are kept fixed, their time derivatives no longer are zero at the end of the static equilibrium or a quasi-static step. The inputs u will have changed. This may lead to transients in the solution if a dynamic solution were to be subsequently performed.

`is_static_hold`= "FALSE"The states are not kept constant, but allowed to change as the configuration of the entire system changes during the solution process. Here is how this is accomplished:

For static and quasi-static solutions, the derivative of the dynamic states is set to zero. This converts the Control_SISO to a set of algebraic equations for these two analyses.

The differential equations become:

Ax+Bu=0

During the equilibrium solution, the input u changes as the system changes its configuration to meet the equilibrium conditions. The above equations are solved to compute x for the current value of u.

This method ensures that the time derivative of the dynamic states is zero at the end of the static or quasi-static solution and ensures a smooth subsequent dynamic analysis.