SecondOrderSystem
IconSecondOrderSystem
Usage
SecondOrderSystem(k1, k2, k3)
Parameters:
Name | Description | Units | Default value |
---|---|---|---|
k1 | – | ||
k2 | – | ||
k3 | – |
Connectors
xdd
- This connector represents a real signal as an input to a component (RealInput
)xdd_internal_var
- This connector represents a real signal as an output from a component (RealOutput
)
Behavior
\[ \begin{equation} \left[ \begin{array}{c} \mathrm{connect}\left( xdd_{internal\_var(t)}, xdd(t), integrator1_{+}u(t), gain1_{+}u(t) \right) \\ \mathrm{connect}\left( integrator1_{+}y(t), integrator2_{+}u(t), gain2_{+}u(t) \right) \\ \mathrm{connect}\left( integrator2_{+}y(t), gain3_{+}u(t) \right) \\ \mathrm{connect}\left( gain1_{+}y(t), sum_{+}u3(t) \right) \\ \mathrm{connect}\left( gain2_{+}y(t), sum_{+}u2(t) \right) \\ \mathrm{connect}\left( gain3_{+}y(t), sum_{+}u1(t) \right) \\ \frac{\mathrm{d} \mathtt{integrator1.x}\left( t \right)}{\mathrm{d}t} = \mathtt{integrator1.k} \mathtt{integrator1.u}\left( t \right) \\ \mathtt{integrator1.y}\left( t \right) = \mathtt{integrator1.x}\left( t \right) \\ \frac{\mathrm{d} \mathtt{integrator2.x}\left( t \right)}{\mathrm{d}t} = \mathtt{integrator2.k} \mathtt{integrator2.u}\left( t \right) \\ \mathtt{integrator2.y}\left( t \right) = \mathtt{integrator2.x}\left( t \right) \\ \mathtt{gain1.y}\left( t \right) = \mathtt{gain1.k} \mathtt{gain1.u}\left( t \right) \\ \mathtt{gain2.y}\left( t \right) = \mathtt{gain2.k} \mathtt{gain2.u}\left( t \right) \\ \mathtt{gain3.y}\left( t \right) = \mathtt{gain3.k} \mathtt{gain3.u}\left( t \right) \\ \mathtt{sum.y}\left( t \right) = \mathtt{sum.k1} \mathtt{sum.u1}\left( t \right) + \mathtt{sum.k2} \mathtt{sum.u2}\left( t \right) + \mathtt{sum.k3} \mathtt{sum.u3}\left( t \right) \\ \end{array} \right] \end{equation} \]
Source
component SecondOrderSystem
xdd = RealInput() [{
"JuliaSim": {"placement": {"icon": {"x1": -25, "y1": 475, "x2": 25, "y2": 525}}}
}]
# TODO: Drop `xdd_internal_var` once the outer input variable is suffcient to
# validate a causal `connect` statement. Currently, MTK's causal connections require
# the first variable to be an output and the rest to be inputs to be valid.
xdd_internal_var = RealOutput()
integrator1 = BlockComponents.Integrator() [{
"JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 100, "x2": 250, "y2": 250}}}
}]
integrator2 = BlockComponents.Integrator() [{
"JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 100, "x2": 500, "y2": 250}}}
}]
gain1 = BlockComponents.Gain(k=k1) [{
"JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 700, "x2": 250, "y2": 850}}}
}]
gain2 = BlockComponents.Gain(k=k2) [{
"JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 400, "x2": 500, "y2": 550}}}
}]
gain3 = BlockComponents.Gain(k=k3) [{
"JuliaSim": {"placement": {"icon": {"x1": 600, "y1": 100, "x2": 750, "y2": 250}}}
}]
sum = BlockComponents.Add3() [{
"JuliaSim": {"placement": {"icon": {"x1": 850, "y1": 400, "x2": 1000, "y2": 550}}}
}]
parameter k1::Real
parameter k2::Real
parameter k3::Real
relations
connect(xdd_internal_var, xdd, integrator1.u, gain1.u) [{
"JuliaSim": {
"edges": [
{"S": -1, "M": [{"x": 80, "y": 175}], "E": 2},
{"S": -1, "M": [{"x": 80, "y": 775}], "E": 3},
{"S": -1, "E": 1}
],
"junctions": [{"x": 80, "y": 500}]
}
}]
connect(integrator1.y, integrator2.u, gain2.u) [{
"JuliaSim": {
"edges": [
{"S": -1, "E": 1},
{"S": -1, "E": 2},
{"S": -1, "M": [{"x": 320, "y": 475}], "E": 3}
],
"junctions": [{"x": 320, "y": 175}]
}
}]
connect(integrator2.y, gain3.u) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
connect(gain1.y, sum.u3) [{
"JuliaSim": {"edges": [{"S": 2, "M": [{"x": 820, "y": 520}, {"x": 820, "y": 775}], "E": 1}]}
}]
connect(gain2.y, sum.u2) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
connect(gain3.y, sum.u1) [{
"JuliaSim": {"edges": [{"S": 2, "M": [{"x": 820, "y": 430}, {"x": 820, "y": 175}], "E": 1}]}
}]
metadata {
"JuliaSim": {
"labels": [
{
"label": "Second Order System",
"x": 500,
"y": 50,
"layer": "diagram",
"attrs": {"font-size": "50"}
}
]
}
}
end
Flattened Source
component SecondOrderSystem xdd = RealInput() [{ "JuliaSim": {"placement": {"icon": {"x1": -25, "y1": 475, "x2": 25, "y2": 525}}} }] # TODO: Drop `xdd_internal_var` once the outer input variable is suffcient to # validate a causal `connect` statement. Currently, MTK's causal connections require # the first variable to be an output and the rest to be inputs to be valid. xdd_internal_var = RealOutput() integrator1 = BlockComponents.Integrator() [{ "JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 100, "x2": 250, "y2": 250}}} }] integrator2 = BlockComponents.Integrator() [{ "JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 100, "x2": 500, "y2": 250}}} }] gain1 = BlockComponents.Gain(k=k1) [{ "JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 700, "x2": 250, "y2": 850}}} }] gain2 = BlockComponents.Gain(k=k2) [{ "JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 400, "x2": 500, "y2": 550}}} }] gain3 = BlockComponents.Gain(k=k3) [{ "JuliaSim": {"placement": {"icon": {"x1": 600, "y1": 100, "x2": 750, "y2": 250}}} }] sum = BlockComponents.Add3() [{ "JuliaSim": {"placement": {"icon": {"x1": 850, "y1": 400, "x2": 1000, "y2": 550}}} }] parameter k1::Real parameter k2::Real parameter k3::Real relations connect(xdd_internal_var, xdd, integrator1.u, gain1.u) [{ "JuliaSim": { "edges": [ {"S": -1, "M": [{"x": 80, "y": 175}], "E": 2}, {"S": -1, "M": [{"x": 80, "y": 775}], "E": 3}, {"S": -1, "E": 1} ], "junctions": [{"x": 80, "y": 500}] } }] connect(integrator1.y, integrator2.u, gain2.u) [{ "JuliaSim": { "edges": [ {"S": -1, "E": 1}, {"S": -1, "E": 2}, {"S": -1, "M": [{"x": 320, "y": 475}], "E": 3} ], "junctions": [{"x": 320, "y": 175}] } }] connect(integrator2.y, gain3.u) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] connect(gain1.y, sum.u3) [{ "JuliaSim": {"edges": [{"S": 2, "M": [{"x": 820, "y": 520}, {"x": 820, "y": 775}], "E": 1}]} }] connect(gain2.y, sum.u2) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] connect(gain3.y, sum.u1) [{ "JuliaSim": {"edges": [{"S": 2, "M": [{"x": 820, "y": 430}, {"x": 820, "y": 175}], "E": 1}]} }] metadata { "JuliaSim": { "labels": [ { "label": "Second Order System", "x": 500, "y": 50, "layer": "diagram", "attrs": {"font-size": "50"} } ] } } end
Test Cases
Related
- Examples
- Experiments
- Analyses