# Modelica标准库¶

Modelica包的功用是将常用的类型、模型、函数等组织成包，并直接通过对其的引用来实现重用（而不是重新建模）。但倘若每个用户都需要建立对常用定义制作模型包，那么重复建模的问题仍将存在。因此，Modelica协会维护着一个Modelica标准库的模型包。这个库包括了对科学家和工程师有用的定义。

## 常数¶

Modelica的标准库包含了一些常见的物理、计算机常量的定义。此部分由于篇幅较少，其源码可以直接引用如下。以下内容来自Modelica标准库3.2.1版本内的Modelica.Constants包（带有一些排版上的美化）：

within Modelica;
package Constants
"Library of mathematical constants and constants of nature (e.g., pi, eps, R, sigma)"

import SI = Modelica.SIunits;
import NonSI = Modelica.SIunits.Conversions.NonSIunits;

// Mathematical constants
final constant Real e=Modelica.Math.exp(1.0);
final constant Real pi=2*Modelica.Math.asin(1.0); // 3.14159265358979;
final constant Real D2R=pi/180 "Degree to Radian";
final constant Real R2D=180/pi "Radian to Degree";
final constant Real gamma=0.57721566490153286060
"see http://en.wikipedia.org/wiki/Euler_constant";

// Machine dependent constants
final constant Real eps=ModelicaServices.Machine.eps
"Biggest number such that 1.0 + eps = 1.0";
final constant Real small=ModelicaServices.Machine.small
"Smallest number such that small and -small are representable on the machine";
final constant Real inf=ModelicaServices.Machine.inf
"Biggest Real number such that inf and -inf are representable on the machine";
final constant Integer Integer_inf=ModelicaServices.Machine.Integer_inf
"Biggest Integer number such that Integer_inf and -Integer_inf are representable on the machine";

// Constants of nature
// (name, value, description from http://physics.nist.gov/cuu/Constants/)
final constant SI.Velocity c=299792458 "Speed of light in vacuum";
final constant SI.Acceleration g_n=9.80665
"Standard acceleration of gravity on earth";
final constant Real G(final unit="m3/(kg.s2)") = 6.6742e-11
"Newtonian constant of gravitation";
final constant Real h(final unit="J.s") = 6.6260693e-34 "Planck constant";
final constant Real k(final unit="J/K") = 1.3806505e-23 "Boltzmann constant";
final constant Real R(final unit="J/(mol.K)") = 8.314472 "Molar gas constant";
final constant Real sigma(final unit="W/(m2.K4)") = 5.670400e-8
"Stefan-Boltzmann constant";
final constant Real N_A(final unit="1/mol") = 6.0221415e23
final constant Real mue_0(final unit="N/A2") = 4*pi*1.e-7 "Magnetic constant";
final constant Real epsilon_0(final unit="F/m") = 1/(mue_0*c*c)
"Electric constant";
final constant NonSI.Temperature_degC T_zero=-273.15
"Absolute zero temperature";


## 国际单位¶

Modelica.SIunits包是内容非常多，而且充满了很少使用的物理单位。之所以包含这些非常用单位是为了完整地遵守ISO 31-1992标准。以下是例子说明了SIunits包中常用物理单位是如何定义的：

type Length = Real (final quantity="Length", final unit="m");
...
type Velocity = Real (final quantity="Velocity", final unit="m/s");
type AngularVelocity = Real(final quantity="AngularVelocity",
...
type Mass = Real(quantity="Mass", final unit="kg", min=0);
type Density = Real(final quantity="Density", final unit="kg/m3",
displayUnit="g/cm3", min=0.0);
type MomentOfInertia = Real(final quantity="MomentOfInertia",
final unit="kg.m2");
...
type Pressure = Real(final quantity="Pressure", final unit="Pa",
displayUnit="bar");
...
type ThermodynamicTemperature = Real(
final quantity="ThermodynamicTemperature",
final unit="K",
min = 0.0,
start = 288.15,
nominal = 300,
displayUnit="degC")
"Absolute temperature (use type TemperatureDifference for relative temperatures)";
type Temperature = ThermodynamicTemperature;
type TemperatureDifference = Real(final quantity="ThermodynamicTemperature",
final unit="K");


## 模型¶

Modelica标准库包含了很多描述不同特定领域的模型库。本节概述这些领域的内容，并讨论如何在各个领域模型的组织。

### 框图¶

Modelica标准库包含了一系列模型用以进行因果性的框图模型的建模。这些模型的定义均在Modelica.Blocks包内。本库内的模型包括了以下例子：

• 输入端口（RealInteger以及Boolean

• 输出端口（RealInteger以及Boolean

• 增益模块、加法器模块、乘法模块

• 积分与微分模块

• 死区以及滞回模块

• 逻辑及关系运算模块

• 多路复用器和多路分配器模块

Blocks包里包含了相当多种对信号进行操作的模块。这样的模块常用于描述控制系统和控制策略内的功能模块。

### 电气¶

Modelica.Electrical包内有数个子包，分别用于描述模拟、数字以及多相的电子系统。相当多种对信号进行操作的模块。此包内还包括一个描述基本电机的模型。在这个库中，你会发现以下形式的部件：

• 电阻、电容、电感

• 电压源和电流源

• 电压和电流传感器

• 晶体管以及其他半导体相关模型

• 二极管与开关

• 逻辑门

• 星形与三角连接（多相位）

• 同步电机与异步电机

• 电机模型（直流电机、永磁电机等）

• Spice3模型

### 机械¶

Modelica.Mechanics库包含三个主要的库。

• 弹簧、减震器以及间隙

• 质点

• 传感器和执行器

• 摩擦

• 弹簧、减震器以及间隙

• 惯量

• 离合器和制动器

• 齿轮机构

• 传感器和执行器

#### MultiBody（多体）¶

• 关节（如棱形关节、回转关节、万向关节）

• 传感器和执行器

### 流体与介质¶

Modelica标准库中有两个包与流体系统建模有关。首先是Modelica.Media。此库包括各种介质的属性模型，如：

• 理想气体（基于NASA格伦系数）

• 空气（干燥空气、参考状态空气、潮湿空气）

• 水（简单，含盐，两相）

• 一般不可压缩流体

• R134a（四氟乙烷）制冷剂

• 容积、水箱与合流点

• 管道

• 压力损失

• 热交换器

• 源以及环境条件

### 磁¶

Modelica.Magnetic库包含两个子包。其一是用以构造的磁性元件集总网络模型的FluxTubes包。这包括了一系列组件用以表示基本圆柱形和棱柱形元件的磁特性形状、相关的传感器以及执行器。其二则是被用于模拟在旋转电机电场的FundamentalWave库。

### 热¶

Modelica.Thermal库有两个子包：

#### HeatTransfer（热传递）¶

HeatTransfer用以模拟集总模型的热传递。这个库中的模型可以用于建立集总热网络模型，如：

• 集总热容

• 热传导

• 热对流

• 热辐射

• 环境条件

• 传感器

## 工具¶

Utilities库为其他库以及模型开发者提供了支持功能。此库包括几个子包以处理建模里和数学无关的方面的问题。

### Files（文件）¶

Modelica.Utilities.Files库提供了函数用于访问和操作计算机的文件系统。以下函数提供了Files包：

• list - 列举一个文件或目录的内容

• copy - 复制一个文件或目录

• move - 移动一个文件或目录

• remove - 删除文件或目录

• createDirectory - 创建一个目录

• exist - 确定给定文件或目录是否已存在

• fullPathName - 得到给定文件或目录的完整路径

• splitPathName - 按路径分割的文件名

• temporaryFileName - 返回一个不存在的临时文件的名字。

• loadResource - 将Modelica URL地址转换成一个文件系统的绝对路径（用于不接受Modelica的URL的函数）。

### Streams（流）¶

Streams包用于从终端或文件读取和写入数据。此包括以下函数：

• print - 向终端或文件写入数据。

• readFile - 从文件中读取数据，并返回一个字符串向量以表示文件中各行的内容。

• readLine - 从文件中读取一行文字。

• countLines - 返回的文件的总行数。

• error - 用于打印错误信息。

• close - 关闭文件。

### Strings（字符串）¶

Strings包中包含对字符串进行操作的函数。这个库的基本功能包括：

• 确定字符串的长度

• 构建和提取字符串

• 比较字符串

• 解析和搜索字符串

### System（系统）¶

System包用于与底层操作系统的交互。它包括以下功能：

• getWorkingDirectory - 获取当前工作目录。

• setWorkingDirectory - 设置当前工作目录。

• getEnvironmentVariable - 获取特定环境变量的值。

• setEnvironmentVariable - 设置特定环境变量的值。

• command - 让操作系统来执行一个命令。

• exit - 终止执行。