这个模型展示了弹簧-质量系统的实现和连接方式。以下是对这个模型的详细介绍:
- 顶层模型:SpringTestWithtuxing
这是一个组合模型,包含两个子模型:spring 和 wu,分别代表弹簧和质量。
通过connect语句,将弹簧的输出连接到质量上,形成弹簧-质量振动系统。
- 连接器:Pin
定义了一个简单的连接器,只有一个流量变量 fl。这是流动变量,用于在模型之间传递力或速度等物理量。
图标是一个蓝色矩形,表示连接器的存在。
- 弹簧模型:spring
变量和参数:
sF 表示弹簧的受力。
longchange 代表弹簧的长度变化,初始值设为 2。
k 是弹簧刚度,默认值为 0.5。
物理方程:
sF = k * longchange 表示弹簧的受力与长度变化成正比。
受力 sF 传递给连接器的流量变量 s.fl。
图标:
使用折线画出了一个弹簧形状,直观表示弹簧组件。
- 质量模型:wu
变量和参数:
m 表示质量,默认值为 1。
a 表示加速度,v 是速度,x 是位移。
物理方程:
牛顿第二定律:m * a = w.fl,表示质量受力等于加速度乘以质量。
a = der(v) 和 v = der(x) 分别表示速度是位移的导数,加速度是速度的导数。
图标:
使用绿色矩形代表质量,底部画了一些线条表示质量的支撑或地面
- 系统方程和连接
在顶层模型中:
connect(S.s, W.w) 连接弹簧和质量,使弹簧的力作用在质量上。
W.x = S.longchange 使质量的位置与弹簧的长度变化相等。
第二组弹簧和质量也通过相同方式连接,展示了多组件互连的建模方式。
模型代码:
model SpringTestWithtuxing
connector Pin
flow Real fl;
annotation(Icon(graphics={Rectangle(
extent={{-100,100},{100,-100}},
lineColor={ 28, 108,200},
fillColor={ 28, 108,200},
fillPattern=FillPattern.Solid)}));
end Pin;
model spring
Real sF;
Real longchange(start=2);
parameter Real k=0.5;
Pin s annotation( Placement(transformation(extent={{100,-10},{120,10}}))) ;
Pin s1 annotation( Placement(transformation(extent={{-120,-10},{-100,10}}))) ;equation
sF=k*longchange;
sF=s.fl;
annotation(Icon(graphics={Line(
points={{-100,40},{-60,-40},{-20,40}},
color={28,108,200},
thickness=1)
,Line(
points={{-20,40},{20,-40},{60,40},{100,-40}},
color={28,108,200},
thickness=1)}));
end spring;
model wu
parameter Real m=1;
Real a;
Real v;
Real x;
Pin w annotation( Placement(transformation(extent={{-100,-20},{-80,0}}))) ;
equation
m*a=w.fl;
a=der(v);
v=der(x);
annotation(Icon(graphics={Rectangle(
extent={{-80,40},{80,-60}},
lineColor={ 28, 108,200},
fillColor={ 0, 140,72},
fillPattern=FillPattern.Solid)
,Line(
points={{-80,-60},{-100,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{-60,-60},{-80,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{-40,-60},{-60,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{-20,-60},{-40,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{0,-60},{-20,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{20,-60},{0,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{40,-60},{20,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{80,-60},{60,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{100,-60},{80,-80}},
color={28,108,200},
thickness=1)
,Line(
points={{60,-60},{40,-80}},
color={28,108,200},
thickness=1)}));
end wu;
wu W;
spring S;
wu wu1 annotation( Placement(transformation(extent={{0,-32},{68,36}}))) ;
spring spring2 annotation( Placement(transformation(extent={{-112,-34},{-44,34}}))) ;
equation
connect(S.s,W.w);
W.x = S.longchange;
connect(spring2.s,wu1.w) annotation(Line(
points={{-40.6,0},{3.4,0},{3.4,-1.4}},
color={28,108,200}));
wu1.x = spring2.longchange;
annotation(Icon(graphics={Rectangle(
extent={{20,40},{100,-30}},
lineColor={ 28, 108,200},
fillColor={ 0, 140,72},
fillPattern=FillPattern.Solid)
,Line(
points={{20,-30},{0,-50}},
color={28,108,200},
thickness=1)
,Line(
points={{40,-30},{20,-50}},
color={28,108,200},
thickness=1)
,Line(
points={{60,-30},{40,-50}},
color={28,108,200},
thickness=1)
,Line(
points={{80,-30},{60,-50}},
color={28,108,200},
thickness=1)
,Line(
points={{100,-30},{80,-50}},
color={28,108,200},
thickness=1)
,Line(
points={{-100,40},{-80,-20},{-60,40}},
color={28,108,200},
thickness=1)
,Line(
points={{-60,40},{-40,-20},{-20,38},{0,-20}},
color={28,108,200},
thickness=1)
,Rectangle(
extent={{0,20},{20,0}},
lineColor={ 28, 108,200},
fillColor={ 28, 108,200},
fillPattern=FillPattern.Solid)}),Diagram(graphics={Text(
extent={{-106,30},{-70,20}},
textString="Spring",
textColor={28,108,200})
,Text(
extent={{14,32},{50,20}},
textString="Wu",
textColor={28,108,200})}));
end SpringTestWithtuxing;