Modelicaクイックリファレンス
基本
/*
コメント */
は無視される //
モデルを構築している場合
[A-Za-z_][A-Za-z_0-9]*
規則: ClassName variableName
pin_a functionName
実数: 1.2345 15. 1e5 -1.5E5 -3e-7 .7 .75e+2
整数: 1 100 2147483647
文字列: "a string"
ブール: true
false
^ * / + -
文字列連結: "a" + "b"
> >=
< <= == <>
not and or
方程式とアルゴリズム
for »
for i in 1 : 10 loop // i
は次の値を取る: 1, 2, …, 10
// これが方程式
end for;
// これが方程式
end for;
for r in 1 : 2 : 10 loop
for i in {1, 3, 6, 7} loop
connect »
connect(a.c,
b.c);
if »
if a > 2 then
v1 = 2;
elseif a < 0 then // オプショナル
v1 + v2 = 0;
else // バランスモデルには通常必要
v1 = 0;
end if;
v1 = 2;
elseif a < 0 then // オプショナル
v1 + v2 = 0;
else // バランスモデルには通常必要
v1 = 0;
end if;
when »
when a > 2 then
b = true;
elsewhen c > 3 then // オプショナル
b = false;
end when;
b = true;
elsewhen c > 3 then // オプショナル
b = false;
end when;
when {x > 2, sample(0,2)} then
reinit(v, -e * pre(v));
end when;
reinit(v, -e * pre(v));
end when;
terminate »
when b > 2 then
terminate("b はターゲットに到達");
end when;
terminate("b はターゲットに到達");
end when;
クラス
model
model DiffEq
Real x(start = 1);
equation
der(x) = -x;
end DiffEq;
Real x(start = 1);
equation
der(x) = -x;
end DiffEq;
block
block AddOne
input Real u;
output Real y;
equation
y = u + 1;
end AddOne;
input Real u;
output Real y;
equation
y = u + 1;
end AddOne;
function »
function plusTwo
input Real u1;
output Real y1;
algorithm
y1 := u1 + 2;
end plusTwo;
input Real u1;
output Real y1;
algorithm
y1 := u1 + 2;
end plusTwo;
connector »
connector Pin
Real v;
flow Real i;
end Pin;
Real v;
flow Real i;
end Pin;
package
他のクラスを含む
record »
record MyRecord
Real r;
Integer i;
end MyRecord;
Real r;
Integer i;
end MyRecord;
type
type Length = Real(unit = "m");
Operators »
operator record operator operator
function
constant Real c = 3;
はシミュレーションとシミュレーションの間に変化しない
parameter Real p;
はシミュレーション中に変化しない
Real v;
はシミュレーション中に継続的に変化する
Integer i;
discrete Real
v;
は離散時間で変化する
Component c1 if condition1;
equation
connect(c1, …); // condition1でなければ消失
equation
connect(c1, …); // condition1でなければ消失
Real:
浮動小数点数 »
属性:
quantity
unit
displayUnit
min
max
start
fixed
nominal
unbounded
stateSelect
Integer »
属性:
quantity
min
max
start
fixed
Boolean »
属性:
quantity
start
fixed
String »
属性:
quantity
start
fixed
Enumeration »
type TSize = enumeration(small, medium,
large);
TSize size = TSize.medium;
TSize size = TSize.medium;
initial equation
initial algorithm
initial()
start
modelica://MyClass/a/path/image.png
»
組込み関数
abs
sign
sqrt
はイベントを生成しない
max(1, 2) ⇒
2, min(1,
2) ⇒ 1
div
mod
rem
ceil
floor
integer
sin
cos
tan
asin
acos
atan
atan2
sinh
cosh
tanh
exp
log
log10
der(expr)
delay(expr, …)
cardinality(c)
homotopy(actual, simplified)
semiLinear(x, k+, k-)
inStream(v)
actualStream(v)
getInstanceName()
initial()
terminal()
noEvent(…)
smooth(p, expr)
sample(start, interval)
pre(y)
edge(b)
change(v)
reinit(x, expr)
Integer
EnumTypeName
String
配列
{…}はarray(…)の省略表現
{i for i in 1 : 3} ⇒ {1, 2, 3}
{r for r in 1 : 2 : 10} ⇒ {1, 3, 5, 7,
9}
{i^2 for i in {1, 3, 7, 6}} ⇒ {1, 9, 49,
36}
[]
は配列を連結させる
[1; 2] ⇒ {{1}, {2}},
[1, 2] ⇒ {{1, 2}}
[{{1, 2}}, {{3, 4}}] ⇒ {{1, 2, 3,
4}}
[{{1, 2}}; {{3, 4}}] ⇒ {{1, 2}, {3,
4}}
a[1, 2]
a[end - 1, end] ⇒ a[size(a, 1) - 1, size(a,
2)]
フルスライス: a[:] ⇒ a[1:end]
j番目の列: a[:, j]
j番目の行: a[j] ⇔ a[j,
:]
a[j : k] ⇒ {a[j],
a[j+1], …, a[k]}
=
:=
+
-
.*
./
は要素全体に適用される
2 .^ {3, 4} ⇒ {2 ^ 3,
2 ^ 4}
{2, 3} .^ 4 ⇒ {2 ^ 4,
3 ^ 4}
行列積・内積: a * b
サイズ
次元変換 »
scalar
vector
matrix({1, 2})
縮約 »
min(…)
max(…)
sum(…)
product(…)
縮約表現: sum(i for i in 1:3) ⇒
1 + 2 +
3
配列の縮約: min({1, 2, 3, 4}) ⇒ 1
2つのスカラー: max(1, 2) ⇒ 2
行列およびベクトルの代数 »
transpose
outerProduct
symmetric
cross
skew
Real x[2](each start = 1.0); // == x[2](start = {1.0, 1.0})
高度なトピック
model M
public // 明示的にprotectedされていない場合のデフォルト
// Mがコンポーネントとして使われるときに変更することができる:
parameter Real p = 2;
protected
// 変更や再宣言からprotectedされる:
parameter Real q = 2;
…
end M;
public // 明示的にprotectedされていない場合のデフォルト
// Mがコンポーネントとして使われるときに変更することができる:
parameter Real p = 2;
protected
// 変更や再宣言からprotectedされる:
parameter Real q = 2;
…
end M;
final
は変更や再宣言ができないようにする
»
import A.B;
import A.{B1, B2, …};
import A.*;
import MyB = A.B;
function myFun
input Real x;
output Real y;
external "C" y = myFun(x);
end myFun;
input Real x;
output Real y;
external "C" y = myFun(x);
end myFun;
注釈 »
Library
Include
IncludeDirectory
LibraryDirectory
SourceDirectory
型のマッピング »
Modelica | 入力 | 出力 | 戻り値 |
---|---|---|---|
Real | double | double * | double |
Integer | int | int * | int |
Boolean | int | int * | int |
String | const char * | const char ** | const char * |
Enumeration | int | int * | int |
model A
outer Real v;
/* 「大域的な」vを使ったコード */
end A;
model B
inner Real v = 2.5; // 「大域的な」値 v
A a1; // a1.v == 2.5
A a2; // a2.v == 2.5
…
end B;
outer Real v;
/* 「大域的な」vを使ったコード */
end A;
model B
inner Real v = 2.5; // 「大域的な」値 v
A a1; // a1.v == 2.5
A a2; // a2.v == 2.5
…
end B;
コンポーネント
replaceable MotorA motor;
extends Sys(redeclare MotorB motor(R = 100));
Sys mySys(redeclare MotorB motor(R =
100));
クラス
replaceable type MyType = Real;
extends Sys(redeclare
type MyType = Real(unit = "V"));
Sys mySys(redeclare type MyType = Real(unit = "V"));
constrainedby »
replaceable MotorA motor constrainedby BaseMotor;
ベースClock変換演算子 »
sample(u, clock)
hold(u)
サブClock変換演算子 »
subSample(u, factor)
superSample(u, factor)
shiftSample(u, shiftCounter,
resolution)
backSample(u, backCounter,
resolution)
noClock(u)