# 组件模型¶

## 非因果建模¶

### 核算¶

#### 连接器¶

connector Flange_a "1-dim. rotational flange of a shaft (filled square icon)"
Modelica.SIunits.Angle phi "Absolute rotation angle of flange";
flow Modelica.SIunits.Torque tau "Cut torque in the flange";
annotation(Icon(/* Filled gray circle */));
end Flange_a;

connector Flange_b "1-dim. rotational flange of a shaft (filled square icon)"
Modelica.SIunits.Angle phi "Absolute rotation angle of flange";
flow Modelica.SIunits.Torque tau "Cut torque in the flange";
annotation(Icon(/* Gray circular outline */));
end Flange_b;

#### 连接集合¶

equation
connect(ground.flange_a, damper2.flange_b);
connect(ground.flange_a, spring2.flange_b);
connect(damper2.flange_a, inertia2.flange_b);
connect(spring2.flange_a, inertia2.flange_b);
connect(inertia2.flange_a, damper1.flange_b);
connect(inertia2.flange_a, spring1.flange_b);
connect(damper1.flange_a, inertia1.flange_b);
connect(spring1.flange_a, inertia1.flange_b);

• 连接集#1

• ground.flange_a
• damper2.flange_b
• spring2.flange_b
• 连接集#2

• damper2.flange_a
• spring2.flange_a
• inertia2.flange_b
• 连接集#3

• inertia2.flange_a
• damper1.flange_b
• spring1.flange_b
• 连接集#4

• inertia1.flange_b
• damper1.flange_a
• spring1.flange_a
• 连接集#5

• inertia1.flange_a

#### 生成方程¶

// Connection Set #1
//   Equality Equations:
ground.flange_a.phi = damper2.flange_b.phi;
damper2.flange_b.phi = spring2.flange_b.phi;
//   Conservation Equation:
ground.flange_a.tau + damper2.flange_b.tau + spring2.flange_b.tau = 0;

// Connection Set #2
//   Equality Equations:
damper2.flange_a.phi = spring2.flange_a.phi;
spring2.flange_a.phi = inertia2.flange_b.phi;
//   Conservation Equation:
damper2.flange_a.tau + spring2.flange_a.tau + inertia2.flange_b.tau = 0;

// Connection Set #3
//   Equality Equations:
inertia2.flange_a.phi = damper1.flange_b.phi;
damper1.flange_b.phi = spring1.flange_b.phi;
//   Conservation Equation:
inertia2.flange_a.tau + damper1.flange_b.tau + spring1.flange_b.tau = 0;

// Connection Set #4
//   Equality Equations:
inertia1.flange_b.phi = damper1.flange_a.phi;
damper1.flange_a.phi = spring1.flange_a.phi;
//   Conservation Equation:
inertia1.flange_b.tau + damper1.flange_a.tau + spring1.flange_a.tau = 0;

// Connection Set #5
//   Equality Equations: NONE
//   Conservation Equation:
inertia1.flange_a.tau = 0;

#### 守恒¶

ground.flange_a.phi = damper2.flange_b.phi;
damper2.flange_b.phi = spring2.flange_b.phi;
ground.flange_a.tau + damper2.flange_b.tau + spring2.flange_b.tau = 0;

der(ground.flange_a.phi)*ground.flange_a.tau
+ der(ground.flange_a.phi)*damper2.flange_b.tau
+ der(ground.flange_a.phi)*spring2.flange_b.tau = 0;

der(ground.flange_a.phi)*ground.flange_a.tau
+ der(damper2.flange_b.phi)*damper2.flange_b.tau
+ der(spring2.flange_b.phi)*spring2.flange_b.tau = 0;

#### 平衡的组件¶

1. 一条连接只能从属于一个连接集。

2. 我们在前面讨论了非因果变量。所以我们知道，每一个连接器内的穿越变量（即声明时带有flow限定词的变量），必须匹配一个横跨变量（即没有任何限定词的变量）。

3. 连接集产生的方程数等于连接组的连接器数乘以穿越－横跨变量对的数目。

1. 组件模型内声明的变量（而不是在连接器上的）。

2. 连接器上的因果变量（即前面带有inputoutput限定词的变量）。

Modelica的要求任何非partial模型均为平衡的。但这是什么意思？这意味着组件应该提供正确数量的方程（不比需要的更多，也不更少）。现在的问题是，如何计算所需方程的数目？

1. 其所有连接器内穿越－横跨变量对的数目

2. 声明中的组件模型的非parameter变量的数目。

3. 其所有连接器内output变量的数目。

## 组件定义¶

### 有条件出现的变量/连接器¶

VariableType variableName(/* modifications /*) if conditional_expression;

### 模型的适用范围¶

#### assert¶

assert(conditional_expression, "Explanation of failure", assertLevel);