Skip to content

Commit 1f10d74

Browse files
committed
refactor: Mechanical/translational.jl
1 parent 71489ca commit 1f10d74

File tree

6 files changed

+56
-60
lines changed

6 files changed

+56
-60
lines changed

src/Mechanical/Translational/Translational.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Library to model 1-dimensional, translational mechanical systems
44
module Translational
55

66
using ModelingToolkit, Symbolics
7+
using ModelingToolkit: getdefault
78

89
using ModelingToolkitStandardLibrary.Blocks: RealInput, RealOutput
910
using IfElse: ifelse

src/Mechanical/Translational/components.jl

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ Use to close a system that has un-connected `MechanicalPort`'s where the force s
77
88
- `flange`: 1-dim. translational flange
99
"""
10-
@component function Free(; name)
11-
@named flange = MechanicalPort()
12-
vars = @variables f(t) = 0
13-
eqs = [
14-
flange.f ~ f,
15-
]
16-
return compose(ODESystem(eqs, t, vars, []; name, defaults = [flange.v => 0]),
17-
flange)
10+
@mtkmodel Free begin
11+
@components begin
12+
flange = MechanicalPort()
13+
end
14+
@variables begin
15+
f(t) = 0
16+
end
17+
@equations begin
18+
flange.f ~ f
19+
end
1820
end
1921

2022
"""
@@ -26,11 +28,13 @@ Fixes a flange position (velocity = 0)
2628
2729
- `flange`: 1-dim. translational flange
2830
"""
29-
@component function Fixed(; name)
30-
@named flange = MechanicalPort()
31-
eqs = [flange.v ~ 0]
32-
return compose(ODESystem(eqs, t, [], []; name = name, defaults = [flange.v => 0]),
33-
flange)
31+
@mtkmodel Fixed begin
32+
@components begin
33+
flange = MechanicalPort()
34+
end
35+
@equations begin
36+
flange.v ~ 0
37+
end
3438
end
3539

3640
"""
@@ -190,26 +194,26 @@ Linear 1D translational damper
190194
- `flange_a`: 1-dim. translational flange on one side of damper
191195
- `flange_b`: 1-dim. translational flange on opposite side of damper
192196
"""
193-
@component function Damper(; name, d, v_a_0 = 0.0, v_b_0 = 0.0)
194-
pars = @parameters begin
195-
d = d
196-
v_a_0 = v_a_0
197-
v_b_0 = v_b_0
197+
@mtkmodel Damper begin
198+
@parameters begin
199+
d
200+
v_a_0 = 0.0
201+
v_b_0 = 0.0
198202
end
199-
vars = @variables begin
203+
@variables begin
200204
v(t) = v_a_0 - v_b_0
201205
f(t) = 0.0
202206
end
203207

204-
@named flange_a = MechanicalPort()
205-
@named flange_b = MechanicalPort()
208+
@components begin
209+
flange_a = MechanicalPort()
210+
flange_b = MechanicalPort()
211+
end
206212

207-
eqs = [v ~ flange_a.v - flange_b.v
213+
@equations begin
214+
v ~ flange_a.v - flange_b.v
208215
f ~ v * d
209216
flange_a.f ~ +f
210-
flange_b.f ~ -f]
211-
return compose(ODESystem(eqs, t, vars, pars; name = name,
212-
defaults = [flange_a.v => v_a_0, flange_b.v => v_b_0]),
213-
flange_a,
214-
flange_b) #flange_a.f => +(v_a_0 - v_b_0)*d, flange_b.f => -(v_a_0 - v_b_0)*d
217+
flange_b.f ~ -f
218+
end
215219
end

src/Mechanical/Translational/sensors.jl

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,45 @@ Linear 1D force input sensor.
88
- `flange`: 1-dim. translational flange
99
- `output`: real output
1010
"""
11-
@component function ForceSensor(; name)
12-
systems = @named begin
11+
@mtkmodel ForceSensor begin
12+
@components begin
1313
flange = MechanicalPort()
1414
output = RealOutput()
1515
end
1616

17-
vars = pars = []
18-
eqs = [
19-
flange.f ~ -output.u,
20-
]
21-
22-
ODESystem(eqs, t, vars, pars; name, systems)
17+
@equations begin
18+
flange.f ~ -output.u
19+
end
2320
end
2421

2522
"""
2623
PositionSensor(; s_0 = 0, name)
2724
2825
Linear 1D position input sensor.
2926
30-
# Parameters:
27+
# States:
3128
32-
- `s_0`: [m] initial value of absolute position
29+
- `s`: [m] absolute position (with initial value of 0.0)
3330
3431
# Connectors:
3532
3633
- `flange`: 1-dim. translational flange
3734
- `output`: real output
3835
"""
39-
@component function PositionSensor(; s_0 = 0, name)
40-
systems = @named begin
36+
@mtkmodel PositionSensor begin
37+
@components begin
4138
flange = MechanicalPort()
4239
output = RealOutput()
4340
end
4441

45-
pars = @parameters s_0 = s_0
46-
vars = @variables s(t) = s_0
42+
@variables begin
43+
s(t) = 0.0
44+
end
4745

48-
eqs = [D(s) ~ flange.v
46+
@equations begin
47+
D(s) ~ flange.v
4948
output.u ~ s
50-
flange.f ~ 0]
49+
flange.f ~ 0.0
50+
end
5151

52-
ODESystem(eqs, t, vars, pars; name, systems,
53-
defaults = [flange.v => 0, output.u => s_0])
5452
end

src/Mechanical/Translational/sources.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Linear 1D force input source
66
# Connectors:
77
88
- `flange`: 1-dim. translational flange
9-
- `f`: real input
9+
- `f`: real input
1010
"""
1111
@component function Force(; name)
1212
systems = @named begin
@@ -34,7 +34,7 @@ Linear 1D position input source
3434
# Connectors:
3535
3636
- `flange`: 1-dim. translational flange
37-
- `s`: real input
37+
- `s`: real input
3838
"""
3939
@component function Position(solves_force = true; s_0 = 0, name)
4040
systems = @named begin

src/Mechanical/Translational/utils.jl

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
@connector function MechanicalPort(; name, f_int = 0, v_int = 0)
2-
pars = @parameters begin
3-
f_int = f_int
4-
v_int = v_int
5-
end
6-
vars = @variables begin
7-
v(t) = v_int
8-
f(t), [connect = Flow]
9-
end
10-
ODESystem(Equation[], t, vars, pars; name, defaults = [f => f_int])
1+
@connector MechanicalPort begin
2+
v(t) = 0.0
3+
f(t) = 0.0, [connect = Flow]
114
end
125
Base.@doc """
136
MechanicalPort(;name)

test/Mechanical/translational.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ D = Differential(t)
1111
function System(; name)
1212
systems = @named begin
1313
acc = TV.Acceleration(false)
14-
a = Constant(k = -10)
14+
a = Constant(; k = -10)
1515
mass = TV.Mass(; m = 100)
1616
free = TV.Free()
1717
end
@@ -119,8 +119,8 @@ end
119119
@testset "sources & sensors" begin
120120
function System(; name)
121121
systems = @named begin
122-
pos = TV.Position(; s_0 = 0)
123-
pos_sensor = TV.PositionSensor(; s_0 = 1)
122+
pos = TV.Position(; s = 0)
123+
pos_sensor = TV.PositionSensor(; s = 1)
124124
force = TV.Force()
125125
force_sensor = TV.ForceSensor()
126126

0 commit comments

Comments
 (0)