@@ -7,6 +7,70 @@ using ModelingToolkit: t_nounits as t, D_nounits as D, AnalysisPoint, AbstractSy
77import ModelingToolkit as MTK
88import ControlSystemsBase as CS
99using Symbolics: NAMESPACE_SEPARATOR
10+ using Unitful
11+
12+ @testset " AnalysisPoint is ignored when verifying units" begin
13+ # no units first
14+ @mtkmodel FirstOrderTest begin
15+ @components begin
16+ in = Blocks. Step ()
17+ fb = Blocks. Feedback ()
18+ fo = Blocks. SecondOrder (k = 1 , w = 1 , d = 0.1 )
19+ end
20+ @equations begin
21+ connect (in. output, :u , fb. input1)
22+ connect (fb. output, :e , fo. input)
23+ connect (fo. output, :y , fb. input2)
24+ end
25+ end
26+ @named model = FirstOrderTest ()
27+ @test model isa System
28+
29+ @connector function UnitfulOutput (; name)
30+ vars = @variables begin
31+ u (t), [unit= u " m" , output= true ]
32+ end
33+ return System (Equation[], t, vars, []; name)
34+ end
35+ @connector function UnitfulInput (; name)
36+ vars = @variables begin
37+ u (t), [unit= u " m" , input= true ]
38+ end
39+ return System (Equation[], t, vars, []; name)
40+ end
41+ @component function UnitfulBlock (; name)
42+ pars = @parameters begin
43+ offset, [unit= u " m" ]
44+ start_time
45+ height, [unit= u " m" ]
46+ duration
47+ end
48+ systems = @named begin
49+ output = UnitfulOutput ()
50+ end
51+ eqs = [
52+ output. u ~ offset + height* (0.5 + (1 / pi )* atan (1e5 * (t - start_time)))
53+ ]
54+ return System (eqs, t, [], pars; systems, name)
55+ end
56+ @mtkmodel MySquare begin
57+ @components begin
58+ input = UnitfulInput ()
59+ end
60+ @variables begin
61+ output (t), [output= true , unit= u " m^2" ]
62+ end
63+ @components begin
64+ ub = UnitfulBlock ()
65+ end
66+ @equations begin
67+ connect (ub. output, :ap , input)
68+ output ~ input. u^ 2
69+ end
70+ end
71+ @named sq = MySquare ()
72+ @test sq isa System
73+ end
1074
1175@testset " AnalysisPoint is lowered to `connect`" begin
1276 @named P = FirstOrder (k = 1 , T = 1 )
0 commit comments