狠狠撸

狠狠撸Share a Scribd company logo
OpenModelica超初級チュートリアル
5.オリジナルモデルの作成
1
Copyright (C) 2017 Shigenori Ueda
Released under the MIT license
https://opensource.org/licenses/mit-license.php
注意事項
? 本チュートリアルは以下の内容が理解できていることを前提と
しております
「OpenModelica超初級チュートリアル1.解析モデルの作成と実行」
「OpenModelica超初級チュートリアル2.コーディング」
「OpenModelica超初級チュートリアル3.モデルのカスタマイズ1」
「OpenModelica超初級チュートリアル4.モデルのカスタマイズ2」
? OpenModelica1.11.0 (64bit – windows版)を利用して
本チュートリアルは作成されています
2
オリジナルモデルの作成
自分で一からモデルを作ってみましょう
オリジナルモデルが作れるようになると?
? 任意の数式したモデルを作成できるようになる
? オリジナルのライブラリを作れるようになる
? 既存ライブラリが何をしているか分かる
3
実数a,bを入力し、a+b=cを計算するモデルを作成する
必要なクラス
? aを入力するモデル
? bを入力してa+b=cを
計算するモデル
? 実数を引き渡すポート
? aとbの接続図
aを入力
bを入力して
a+b=cを計算
aとbの接続図
ポート ポート
作成するモデル
4
作成するクラスのデータ
モデルの役割 クラスタイプ モデル名 パラメータ名 変数名 コネクター equation
実数を引き渡すポート connector Port 実数 var - - -
aを入力 model Input_a 実数 a - Port a=Port.var
bを入力
a+bを計算
model Cal_c 実数 b
実数 a
実数 c Port a+b=c
a=Port1.var
aとbの接続図 model a_Plus_b - - - -
各クラスを作成する際に必要なデータを以下に整理します
モデル名やパラメータ名などは任意です
表の上から順に作成します
まずは簡単に何が必要か簡単に確認してください
5
connectorはクラス同士がやり取りする変数を定義したものです
以下の書式で表されます
connectorの書式
connector?コネクター名
やり取りしたい変数の型?変数名;
annotation(アイコン情報);
end?コネクター名
connectorの書式
*変数は複数設定することが可能です
6
connector「Port」を作成してみましょう。
connectorの作成1
「Modelicaクラス新規作成」から、名前を「Port」、クラス?タイプを「Connector」にして
モデルを新規作成してください
①
テキストビューから以下のようにconnectorが作成できたことを確認しましょう②
7
connectorの作成2
やり取りする変数を定義します
今回は実数をやり取りするため、Real型で宣言し、変数名をvar(variableの略)にします
③
アイコンの設定を行うため、「アイコンビュー」から「長方形」を使って、
表示範囲(coordinate System)全体に長方形を書いてください
④
8
connectorの作成3
長方形を右クリックして、「特性」をクリックし
「塗りつぶしタイプ」を以下のように設定し、アイコンの色を定義してください。
これで「Port」が完成しました。
⑤
9
「aを入力」の作成1
10
モデルの役割 クラスタイプ モデル名 パラメータ名 変数名 コネクター equation
aを入力 model Input_a 実数 a - Port a=Port.var
以下の表をもとにモデルを作成します
クラスタイプをmodel、モデル名をInput_aにして新しいクラスを作成してください①
パラメータとなる実数「a」を追加してください②
11
tutorial4で行ったように、「アイコンビュー」から「Port」をドラッグ&ドロップして追加してください③
「aを入力」の作成2
テキストビューを確認すると
「Port」のインスタンスが作成されています
12
入出力の関係式
インスタンス化されたconnectorの変数と、
宣言したパラメータや変数は等式で接続する必要があります
connector?コネクター名
やり取りしたい変数の型?変数名2;
annotation(アイコン情報);
end?コネクター名
connectorの書式
変数の型?変数名1;
equation
connectorの変数と宣言した変数の接続
connector名?インスタンス名;
インスタンス名.変数名2=変数名1
参考
Modelica言語では、階層を「.(ドット)」で表します
Memo
13
「aを入力」の作成3
パラメータ「a」と、「Port1」の変数「var」を結び付けるため、
以下の式をequationセクションに記述します
④
Input_aの値をPortによって他のブロックへ受け渡せるようになります
a
Input_a
var 他の
モデル
Port
コネクターの役割のイメージ
14
「aを入力」の作成4
アイコンを以下のように設定します。これで「Input_a」の完成です。⑤
15
「bを入力、a+b=cを計算」の作成1
モデルの役割 クラスタイプ モデル名 パラメータ名 変数名 コネクター equation
bを入力
a+bを計算
model Cal_c 実数 b 実数 c
実数 a
Port a+b=c
a=Port1.var
これまでと同様に、表を参考にモデルを作成します
表を参考に新しいクラス「Cal_c」を作成してください①
パラメータとなる実数「b」を追加してください②
変数となる実数「c」、「a」を追加してください
右図のようになっていることを確認してください
③
16
「bを入力、a+b=cを計算」の作成2
「アイコンビュー」から「Port」をドラッグ&ドロップして追加してください④
equationセクションに、ポートからの値を受け取る等式「a = Port1.var」を追加してください⑤
17
「bを入力、a+b=cを計算」するモデルの作成3
「a + b = c」を追加してください⑥
Modelica言語は、非因果的モデリングのため
方程式の左辺、右辺
等式の順番
は計算結果と関係ありません。
入出力の関係式は、equationセクションの一番下に
記述すると計算式と混在せず可読性の高いコードになります
Memo
入出力の関係式
18
「bを入力、a+b=cを計算」するモデルの作成4
以下のようにアイコンを作成し、モデルを完成させてください⑦
19
「a+bの接続図」の作成1
モデルの役割 クラスタイプ モデル名 パラメータ名 変数名 コネクター equation
aとbの接続図 model a_Plus_b - - - -
最後に、これまで作成した「Input_a」と「Calc_c」を接続するためのクラスを作成します
新規クラスを作成し、「Input_a」と「Cal_c」のインスタンスを作成し、接続してください①
「Input_a」の「a」と「Cal_c」の「b」に1を代入してください②
チェックを実行し、問題なければシミュレートを実行し「c」の値が2になっていることを確認してください③
Exercise
?「bを入力」と「a+b=cを計算」のモデルをそれぞれ別に作成してください。
その場合「a+b=cを計算」モデルのポートはいくつになるでしょうか?
20
その他ーModelicaにおける命名規則
以下のように命名規則を定めることで可読性が高く、変数のバッティングを防ぐことができます。
1. functionクラス以外のclass名は大文字で始める
2. 変数名は小文字で始める。しかし、一文字の場合は大文字にする場合もある
例.自然長s_rel0, 温度の変数 T
3. 複数の単語からなる名前は、最初の文字は上記1~3に基づいて決定し
残りの単語を大文字にする
例.変数 onePlus,
4. アンダーバーは名前の最後に使う。
5. 同様のコネクタインスタンスが二つある場合は、正負を表すpとnやaとbなどを使い区別する
例.flange_a, flange_b
21

More Related Content

OpenModelica tutorials_5 Make Original Models(超初級チュートリアル5.オリジナルモデルの作成)