<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.1 (Win32)"> <META NAME="CREATED" CONTENT="0;0"> <META NAME="CHANGEDBY" CONTENT="Adrien G"> <META NAME="CHANGED" CONTENT="20090827;17255200"></HEAD><BODY LANG="de-DE" DIR="LTR"><P>A collection of ssm arrays can be assembled into one ssm using theassemble function.</P><H2>Managing inputs/outputs when assembling</H2><P>The order of the systems does not modify the output of .The function assemble work by matching inputs and outputs of the samename. Of course, they must have the same dimensionality, sametime-step. However, the check for units is not implemented yet.</P><P>In terms of time-step it is important to assemble all continuouslylinked models together when the system is continuous, and discretizeit later on. Time discrete models (typically digital systems, and thedynamical branch from the actuator input to the sensor output) shouldbe assembled together when they are time-discrete. The discretizationincludes a zero hold which models correctly the A/D filter behavior.</P><P>Moreover, a system can be assembled in multiple steps. In thiscase there is a risk of “closing a loop” multiple times.To avoid this, the method “assemble” suppresses theinputs once they are assembled. May the user need the input for asimulation later on, he must duplicate it using the function“inputDuplicate”. Built-in models should also havebuilt-in duplicated inputs to insert signals.</P><H2>Example using an existing built-in models</H2><DIV CLASS="fragment"><PRE STYLE="margin-bottom: 0.5cm">>> <FONT COLOR="#000000"><FONT FACE="Courier New, monospace">sys = ssm(plist(</FONT></FONT><FONT COLOR="#a020f0"><FONT FACE="Courier New, monospace"><FONT SIZE=2>'built-in'</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=2>, </FONT></FONT></FONT><FONT COLOR="#a020f0"><FONT FACE="Courier New, monospace">'standard_system_params'</FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace">, </FONT></FONT><FONT COLOR="#a020f0"><FONT FACE="Courier New, monospace">'setnames'</FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace">, {</FONT></FONT><FONT COLOR="#a020f0"><FONT FACE="Courier New, monospace"><FONT SIZE=2>'W'</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=2>}, </FONT></FONT></FONT><FONT COLOR="#a020f0"><FONT FACE="Courier New, monospace"><FONT SIZE=2>'setvalues'</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=2>, 0.2*i ));</FONT></FONT></FONT></PRE></DIV><P>Trying sys.isStable with the first and the third system shows adifferent result, the negative stiffness making the latter unstable.The system can be made time discrete using the function“modifTimeStep”.The input is then duplicated to be used for a controller feedback.</P><DIV CLASS="fragment"><PRE>>> sys = ssm(plist(<FONT COLOR="#a020f0">'built-in'</FONT>, <FONT COLOR="#a020f0">'standard_system_params'</FONT>, <FONT COLOR="#a020f0">'setnames'</FONT>, {<FONT COLOR="#a020f0">'W'</FONT> <FONT COLOR="#a020f0">'C'</FONT>}, <FONT COLOR="#a020f0">'setvalues'</FONT>, [-0.2 -0.5]));>> sys.modifTimeStep(0.01);>> sys.duplicateInput(<FONT COLOR="#a020f0">'U'</FONT>,<FONT COLOR="#a020f0">'Negative Bias'</FONT>)------ ssm/1 ------- amats: { [2x2] } [1x1] mmats: { [2x2] } [1x1] bmats: { [2x1] [2x2] [2x1] } [1x3] cmats: { [1x2] } [1x1] dmats: { [] [1x2] [] } [1x3] timestep: 0.01 inputs: [1x3 ssmblock] 1 : U | Fu [kg m s^(-2)] 2 : N | Fn [kg m s^(-2)], On [m] 3 : Negative Bias | Fu [kg m s^(-2)] states: [1x1 ssmblock] 1 : standard test system | x [m], xdot [m s^(-1)] outputs: [1x1 ssmblock] 1 : Y | y [m] params: (empty-plist) [1x1 plist] version: $Id: ssm_assemble_content.html,v 1.4 2009/08/28 15:11:53 adrien Exp $-->$Id: ssm_assemble_content.html,v 1.4 2009/08/28 15:11:53 adrien Exp $ Ninputs: 3 inputsizes: [1 2 1] Noutputs: 1outputsizes: 1 Nstates: 1 statesizes: 2 Nparams: 0isnumerical: true hist: ssm.hist [1x1 history] procinfo: (empty-plist) [1x1 plist] plotinfo: (empty-plist) [1x1 plist] name: standard_system_paramsdescription: standard spring-mass-dashpot test system mdlfile: UUID: 284b0ae3-947d-430a-802e-d9c3738ebb14--------------------M: running isStableans = 2.05114794494015warning, system named "standard_system_params" is not stableans = 0</PRE></DIV><P>Then a controller can be created to make the system stable.</P><DIV CLASS="fragment"><PRE>>> <FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=2>controller = ssm(plist( </FONT></FONT></FONT><FONT COLOR="#0000ff"><FONT FACE="Courier New, monospace"><FONT SIZE=2>...</FONT></FONT></FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'amats'</FONT><FONT COLOR="#000000">,cell(0,0), </FONT><FONT COLOR="#a020f0">'bmats'</FONT><FONT COLOR="#000000">,cell(0,1), </FONT><FONT COLOR="#a020f0">'cmats'</FONT><FONT COLOR="#000000">,cell(1,0), </FONT><FONT COLOR="#a020f0">'dmats'</FONT><FONT COLOR="#000000">,{-1}, </FONT><FONT COLOR="#0000ff">...</FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'timestep'</FONT><FONT COLOR="#000000">,0.01, </FONT><FONT COLOR="#a020f0">'name'</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#a020f0">'controller'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'params'</FONT><FONT COLOR="#000000">,plist, </FONT><FONT COLOR="#0000ff">...</FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'statenames'</FONT><FONT COLOR="#000000">,{}, </FONT><FONT COLOR="#a020f0">'inputnames'</FONT><FONT COLOR="#000000">,{</FONT><FONT COLOR="#a020f0">'Y'</FONT><FONT COLOR="#000000">}, </FONT><FONT COLOR="#a020f0">'outputnames'</FONT><FONT COLOR="#000000">,{</FONT><FONT COLOR="#a020f0">'U'</FONT><FONT COLOR="#000000">} ));</FONT>>> sysCL = assemble(sys, controller);>> sysCL.isStable------ ssm/1 ------- amats: { [2x2] } [1x1] mmats: { [2x2] } [1x1] bmats: { [2x2] [2x1] } [1x2] cmats: { [1x2] [1x2] } [2x1] dmats: { [1x2] [] [1x2] [] } [2x2] timestep: 0.01 inputs: [1x2 ssmblock] 1 : N | Fn [kg m s^(-2)], On [m] 2 : Negative Bias | Fu [kg m s^(-2)] states: [1x1 ssmblock] 1 : standard test system | x [m], xdot [m s^(-1)] outputs: [1x2 ssmblock] 1 : Y | y [m] 2 : U | U > 1 [] params: (empty-plist) [1x1 plist] version: $Id: ssm_assemble_content.html,v 1.4 2009/08/28 15:11:53 adrien Exp $ Ninputs: 2 inputsizes: [2 1] Noutputs: 2outputsizes: [1 1] Nstates: 1 statesizes: 2 Nparams: 0isnumerical: true hist: ssm.hist [1x1 history] procinfo: (empty-plist) [1x1 plist] plotinfo: (empty-plist) [1x1 plist] name: assembled( standard_system_params + controller))description: mdlfile: UUID: c6f7397e-add7-4f4c-8eb0-fd0a4841e3cf--------------------M: running isStableSystem named "assembled( standard_system_params + controller))" is stableans = 1</PRE></DIV><P>We can then use the system to produce a simulation.</P><P><BR><BR></P></BODY></HTML>