HyperWorks Solvers

Control: SISO

Control: SISO

Previous topic Next topic Expand/collapse all hidden text  

Control: SISO

Previous topic Next topic JavaScript is required for expanding text JavaScript is required for the print function  
hmtoggle_plus1greyXML Format

Model Element

Description

Control_SISO is an abstract modeling element that defines a linear, time invariant dynamic system in the Laplace domain. SISO stands for Single Input Single Output.  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).

You specify the Control_SISO element by specifying the coefficients of the numerator and denominator polynomials that define the transfer function, along with one input (u) variable and one output (y) variable.  This is shown in the block diagram in the image below.

CS_DescImg

Block diagram representation of the Control_SISO element

U(s) and Y(s) represent the Laplace transforms of the time domain input and output variables and G(s) represents the transfer function given by:

CS_DescImg2

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

MotionSolve internally converts this Laplace domain element into the following time domain system of first order differential equations:

CS_DescImg3

x is the state vector, u is the input variable, and y is the output variable. A, B, C, and D denote the state matrix, the input matrix, the output matrix, and the direct feed-through matrix, respectively.  The initial conditions for x are assumed to be zero.  The equations above are said to be in the state space form and are depicted schematically in the image below.

CS_DescImg4

Input, Output, and States for a dynamic system

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_coefnum_denominator_coef.

denominator_coef

Specifies the coefficients, in the ascending powers of "s", of the denominator polynomial of the transfer function.

Comments

1.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.
2.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.
3.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:

CS_ComFig

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.

Example

Consider the problem of maintaining a reference speed of a rotor in the presence of disturbance loads.  A block diagram of the control system is shown in the image below.

CS_ExFig1

Block diagram for a rotor speed control system

CS_omega denotes the reference speed.
CS_omega denotes the actual speed.
E(s) denotes the Laplace transform of the error signal.
CS_Gs 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.

One solution is to design a proportional integral (PI) controller (Ogata, 1995) with transfer function given by:

CS_ExFig2

K and Kp 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."

 />

This example is described in detail in the tutorial "Simulating a Single Input Single Output (SISO) Control System using MotionView and MotionSolve".  The image below, taken from the tutorial, shows the plot of a rotor speed versus time.

CS_ExFig3

Plot of rotor speed versus time

hmtoggle_plus1greyPython Format

Model Element

Description

TFSISO is an abstract modeling element that defines a linear, time invariant dynamic system in the Laplace domain. SISO stands for Single Input Single Output.  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).

You specify the TFSISO element by specifying the coefficients of the numerator and denominator polynomials that define the transfer function, along with one input (u) variable and one output (y) variable.  This is shown in the block diagram in the image below.

tfsiso_python_fig1

Block diagram representation of the TFSISO element

U(s) and Y(s) represent the Laplace transforms of the time domain input and output variables and G(s) represents the transfer function given by:

tfsiso_python_fig2

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

MotionSolve internally converts this Laplace domain element into the following time domain system of first order differential equations:

tfsiso_python_fig3

x is the state vector, u is the input variable, and y is the output variable.  A, B, C, and D denote the state matrix, the input matrix, the output matrix, and the direct feed-through matrix, respectively.  The initial conditions for x are assumed to be zero.  The equations above are said to be in the state space form and are depicted schematically in the image below.

tfsiso_python_fig4

Input, Output, and States for a dynamic system

Declaration

def TFSISO(id, LABEL="", X=0, U=0, Y=0, STATIC_HOLD=False, NUMERATOR=[], DENOMINATOR=[]):

Attributes

id

Element identification number (integer>0).  This number is unique among all TFSISO elements.

LABEL

The name of the TFSISO element.

X

Specifies the ID of the ARRAY used to store the states x of this TFSISO. 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.

U

Specifies the ID of the ARRAY used to store the input u of this TFSISO. 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.

Y

Specifies the ID of the ARRAY used to store the output, y, of this TFSISO.  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.

STATIC HOLD

A Boolean that specifies whether the value of the dynamic state is kept fixed or not during static equilibrium and quasi static solutions.

"TRUE" implies that the value of the dynamic state is kept constant during static and quasi-static solutions.

"FALSE" implies that the value of the dynamic state is allowed to change during static equilibrium or quasi-static solutions.

If not specified it defaults to FALSE.

NUMERATOR

Specifies the list of coefficients, in the ascending powers of "s", of the numerator polynomial of the transfer function.

DENOMINATOR

Specifies the list of coefficients, in the ascending powers of "s", of the denominator polynomial of the transfer function.

Comments

See Control_SISO

Example

The examples below show how a DIFF element may be defined.

TFSISO(303001, LABEL="ControlSISO Name",  X=30300200, U=30300100,  Y=30300300,  STATIC_HOLD=False, NUMERATOR=[10,1], DENOMINATOR=[0,1] )

See Also:

Control_DIFF

Control_SISO

Reference_Array

Reference_Variable

ARYVAL

GSESUB

GSEXU

GSEXX

SYSARY

SYSFNC

Control_StateEqn

Model Statements

Command Statements

Functions

Notation and Syntax

The following MDL Model statements:

*ControlSISO()

*SetControlSISOCoeffs()

*SetControlSISOInput()