From 547abb5cb5a68d211a73e4f67dde32e3f554d6bc Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Mon, 21 Aug 2023 11:44:40 -0400 Subject: [PATCH 1/5] Use lowest order differentiated variables to improve state selection Note that we can infer `D(x) = D(y)` from `x = y`, but we cannot infer `x = y` from `D(x) = D(y)`, so using the lowest variable in the connector provides more information to the compiler. --- src/Mechanical/MultiBody2D/MultiBody2D.jl | 2 +- src/Mechanical/MultiBody2D/components.jl | 16 ++++++++-------- src/Mechanical/TranslationalPosition/sources.jl | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Mechanical/MultiBody2D/MultiBody2D.jl b/src/Mechanical/MultiBody2D/MultiBody2D.jl index ed9ccb80d..102434e5a 100644 --- a/src/Mechanical/MultiBody2D/MultiBody2D.jl +++ b/src/Mechanical/MultiBody2D/MultiBody2D.jl @@ -1,7 +1,7 @@ module MultiBody2D using ModelingToolkit, Symbolics, IfElse -using ..Translational +using ..TranslationalPosition @parameters t D = Differential(t) diff --git a/src/Mechanical/MultiBody2D/components.jl b/src/Mechanical/MultiBody2D/components.jl index 99fadd123..3a67dfd5c 100644 --- a/src/Mechanical/MultiBody2D/components.jl +++ b/src/Mechanical/MultiBody2D/components.jl @@ -41,11 +41,11 @@ end @components begin - TX1 = MechanicalPort() - TY1 = MechanicalPort() + TX1 = Flange() + TY1 = Flange() - TX2 = MechanicalPort() - TY2 = MechanicalPort() + TX2 = Flange() + TY2 = Flange() end @equations begin @@ -76,12 +76,12 @@ x_cm ~ l * cos(A) / 2 + x1 y_cm ~ l * sin(A) / 2 + y1 TX1.f ~ fx1 - TX1.v ~ dx1 + TX1.s ~ x1 TY1.f ~ fy1 - TY1.v ~ dy1 + TY1.s ~ y1 TX2.f ~ fx2 - TX2.v ~ dx2 + TX2.s ~ x2 TY2.f ~ fy2 - TY2.v ~ dy2 + TY2.s ~ y2 end end diff --git a/src/Mechanical/TranslationalPosition/sources.jl b/src/Mechanical/TranslationalPosition/sources.jl index 67a94a152..3d3503ddb 100644 --- a/src/Mechanical/TranslationalPosition/sources.jl +++ b/src/Mechanical/TranslationalPosition/sources.jl @@ -5,11 +5,11 @@ Input signal acting as external force on a flange """ @mtkmodel Force begin @parameters begin - use_support + s = 0 end - @extend (flange,) = partial_element = PartialElementaryOneFlangeAndSupport2(use_support = use_support) @components begin - f = RealInput() # Accelerating force acting at flange (= -flange.tau) + flange = Flange(; s = s) + f = RealInput() end @equations begin flange.f ~ -f.u From 043fd03e2b4eb69392be9f1ee56872c755169b4c Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Mon, 21 Aug 2023 12:13:11 -0400 Subject: [PATCH 2/5] Add initial condition for Fixed --- src/Mechanical/TranslationalPosition/components.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mechanical/TranslationalPosition/components.jl b/src/Mechanical/TranslationalPosition/components.jl index e1901cb24..427738e3c 100644 --- a/src/Mechanical/TranslationalPosition/components.jl +++ b/src/Mechanical/TranslationalPosition/components.jl @@ -13,7 +13,7 @@ Flange fixed in housing at a given position. """ @mtkmodel Fixed begin @parameters begin - s_0 + s_0 = 0 end @components begin flange = Flange(; s = s_0) From c247f97e11e5b1cd32499fad16211086a45ae01f Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Mon, 21 Aug 2023 12:26:33 -0400 Subject: [PATCH 3/5] Fix MatrixGain --- src/Blocks/math.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Blocks/math.jl b/src/Blocks/math.jl index 86045ec52..b72fa04ba 100644 --- a/src/Blocks/math.jl +++ b/src/Blocks/math.jl @@ -50,7 +50,7 @@ Output the product of a gain matrix with the input signal vector. output = RealOutput(; nout = size(K, 1)) end @equations begin - [(@info i, j; output.u[i] ~ sum(getdefault(K)[i, j] * input.u[j])) for j in 1:nin + [output.u[i] ~ sum(getdefault(K)[i, j] * input.u[j] for j in 1:nin) for i in 1:nout]... end end From 429a9d8d22e86d856905e31855cbb664366e9c12 Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Tue, 22 Aug 2023 14:16:26 -0400 Subject: [PATCH 4/5] Update tests --- test/Mechanical/multibody.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Mechanical/multibody.jl b/test/Mechanical/multibody.jl index c00203c84..a44c91549 100644 --- a/test/Mechanical/multibody.jl +++ b/test/Mechanical/multibody.jl @@ -1,6 +1,6 @@ using ModelingToolkit using ModelingToolkitStandardLibrary.Mechanical.MultiBody2D -using ModelingToolkitStandardLibrary.Mechanical.Translational +using ModelingToolkitStandardLibrary.Mechanical.TranslationalPosition using DifferentialEquations # using Setfield using Test From 4526995266bbe713129c82cf9055e01aa4c68576 Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Tue, 22 Aug 2023 14:29:31 -0400 Subject: [PATCH 5/5] Update tests and fix use_support support --- src/Mechanical/TranslationalPosition/sources.jl | 4 ++++ test/Mechanical/multibody.jl | 1 + 2 files changed, 5 insertions(+) diff --git a/src/Mechanical/TranslationalPosition/sources.jl b/src/Mechanical/TranslationalPosition/sources.jl index 3d3503ddb..8dad46f8b 100644 --- a/src/Mechanical/TranslationalPosition/sources.jl +++ b/src/Mechanical/TranslationalPosition/sources.jl @@ -5,8 +5,12 @@ Input signal acting as external force on a flange """ @mtkmodel Force begin @parameters begin + use_support = false s = 0 end + @extend (flange,) = partial_element = PartialElementaryOneFlangeAndSupport2(; + use_support = use_support isa Bool ? use_support : + ModelingToolkit.getdefault(use_support)) @components begin flange = Flange(; s = s) f = RealInput() diff --git a/test/Mechanical/multibody.jl b/test/Mechanical/multibody.jl index a44c91549..07789d1a4 100644 --- a/test/Mechanical/multibody.jl +++ b/test/Mechanical/multibody.jl @@ -23,6 +23,7 @@ eqs = [connect(link1.TX1, cart.flange) #, force.flange) @named model = ODESystem(eqs, t, [], []; systems = [link1, link2, cart, fixed]) sys = structural_simplify(model) +@test length(states(sys)) == 6 # The below code does work... #=