WOLFRAM

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
if a > b then 5 else c + d  »
timemodelおよびblockにおけるシミュレーション時間  »
方程式とアルゴリズム
一次 »
a + b = c;
if a > b then 5 else 3 = c;
(out1, out2) = fun(var1, par1);
for »
for i in 1 : 10 loop // i は次の値を取る: 1, 2, …, 10
  // これが方程式
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;
when »
when a > 2 then
  b = true;
elsewhen c > 3 then // オプショナル
  b = false;
end when;
when {x > 2, sample(0,2)} then
  reinit(v, -e * pre(v));
end when;
terminate »
when b > 2 then
  terminate("b はターゲットに到達");
end when;
assert »
assert(a < 2, "a は大きすぎる" );
assert(b < 2, "b は大きすぎる" , AssertionLevel.warning);
一次 »
a := c + 2;
(out1, out2) := fun(var1, par1);
for »
for ... loop // 参照: 方程式 ➔ for
  // これが文
end for;
while »
while a > 2 loop
  // これが文
end while;
whileおよびforから抜けるbreak;  »
if »
if a > 2 then
  v1 := 2;
elseif a < 0 then // オプショナル
  v1 := 0;
else // オプショナル
  v1 := 3;
end if;
when »
when a > 2 then
  y1 := sin(x);
  y3 := 2 * x + y1 + y2;
elsewhen c > 3 then // オプショナル
  …
end when;
when {x > 2, sample(0,2)} then
  …
end when;
terminate および assert については次を参照: 方程式  »
クラス
model
model 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;
function »
function plusTwo
  input Real u1;
  output Real y1;
algorithm
  y1 := u1 + 2;
end plusTwo;
 » 関数algorithmreturn;は関数呼出しを終了させる
connector »
connector Pin
  Real v;
  flow Real i;
end Pin;
package
他のクラスを含む
record »
record 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でなければ消失
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;
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
サイズ
ndims({{1, 2, 3}, {4, 5, 6}})2 »
size({{1, 2, 3}, {4, 5, 6}}, 1)2 »
size({{1, 2, 3}, {4, 5, 6}}){2, 3} »
次元変換 »
scalar vector matrix({1, 2})
コンストラクタ »
zeros(2, 3){{0, 0, 0}, {0, 0, 0}} »
fill(5, 2, 3){{5, 5, 5}, {5, 5, 5}} »
ones identity diagonal linspace  »
縮約 »
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;
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;
注釈 »
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
Documentation Figure  »
Evaluate  »
Inline LateInline  »
experiment HideResult  »
Icon Diagram Text Line Polygon Rectangle  »
preferredView Dialog  »
version uses  »
derivative  »
inverse  »
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;
コンポーネント
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コンストラクタ: Clock(…)  »
previous(u)  »
ベースClock変換演算子 »
sample(u, clock) hold(u)
サブClock変換演算子 »
subSample(u, factor)
superSample(u, factor)
shiftSample(u, shiftCounter, resolution)
backSample(u, backCounter, resolution)
noClock(u)
ユーティリティ演算子 »
firstTick(u)
interval(u)