貯水タンクと水量

<< 目次を表示 >>

ページ位置:  シミュレーション > 数学的なシミュレーション > SysMLパラメトリック図のシミュレーション > SysML シミュレーションのサンプル >

貯水タンクと水量

この例は、貯水タンクの水圧の調整器をSysMLパラメトリック図を利用してモデリングします。この貯水タンクは、2つのタンクが結合されていて、入水管および2つのコントローラがあります。コントローラは、システムの調整のために水位を測定し値を制御できます。

 

まず、この対象についてのモデルを説明します。その後、OpenModelicaを利用してシミュレーションを行います。

 

 

モデリング対象のシステム

次の図にあるように、2つの貯水タンクは繋がれていて、入水管は最初の貯水タンクにつながっています。それぞれのタンクには、proportional–integral (PI: 比例制御および積分制御)のコントローラが取り付けられています。このコントローラは、貯水タンクの水量を指定レベルになるように制御します。最初のタンクには入水管から水が入ってきますので、コントローラによって出水量を制御し定められた量になるように制御します。1番目の貯水タンクから出た水は2番目の貯水タンクに入ります。ここでも、コントローラによって水量を制御します。

 

 

 

SysMLモデルの作成

ポートの型

このタンクには4つのポートがあります。これらのポートは、次の3つのブロックのいずれかを型として定義されています。

  • ReadSignal: 水量を読み取ります。単位"m"のプロパティ"val"を持ちます。
  • ActSignal: バルブの位置を調整するアクチュエータを制御します。
  • LiquidFlow: 入出力される水量です。単位が"m3/s"のプロパティlflowを持ちます。

 

ブロック定義図

LiquidSource: このシステムに供給される水は、どこからか調達されてくることになります。それを示すコンポーネントになります。プロパティflowLevelが定義され、その単位は"m3/s"です。また、ポート qOutを持ち、その型はLiquidFlowです。

 

Tank: 貯水タンクはコントローラにつながり、ポートを通して水を出し入れいます。

  • Tankには次の4つのポートがあります。
  • qIn:  入水
  • qOut: 出水
  • tSensor: 水位の測定
  • tActuator: タンクからの出水量を制御するためのバルブの位置

 

  • Tankには以下のプロパティがあります。
  • area (unit="m2"): タンクの底面積
  • h (unit = "m"): 水位
  • flowGain (unit = "m2/s" ): バルブで制御された出水量
  • minV, maxV: バルブによる出力の最大値・最小値

 

BaseController: 水位を調整するためのPI制御を行うコントローラ

  • ポート
  • cIn: 入力センサーのレベル
  • cOut: アクチュエータの制御

 

  • プロパティ
  • Ts (unit = "s"): 離散モデルの場合の時間間隔。このサンプルでは利用していません。
  • K: ゲイン係数
  • T(unit = "s"): コントローラの時間定数
  • ref: 参照レベル(指定水位)
  • error: 参照レベルと、センサーによって得られた実際の水位との差
  • outCtr: バルブの位置を成業するためにアクチュエータに送信する信号

 

PIcontinuousController: BaseControllerと汎化の関係でつながるブロック

  • プロパティ
  • x: コントローラの状態変数

制約ブロック

 

時間が150になったら、それまでの流量の3倍になるように流量を増加させます。これにより、貯水タンクのコントローラが状況を適切にするための制御をしなければならないという問題が発生します。

 

 

中央にある等式は、貯水タンクの制約として、適切な質量にあるようにすることをしめしています。

出力フローはflowGainパラメータによるバルブの位置に関係します。

センサーは、単にタンクの水量を測定するだけです。

 

 

BaseControllerおよびPIcontinuousControllerに定義されている制約は、次の図に示しているとおりです。

 

内部ブロック図

 

次の図は、貯水タンクが1つの場合の内部ブロック図です。

 

 

そして、次の図は、貯水タンクが2つの場合の内部ブロック図です。

 

 

 

データセットの設定とシミュレーションの実行

 

シミュレーションの実行

TankPIとTanksConnectedPIが"SysMLSimModel"として定義されているので、SysMLシミュレーションの設定タブ内の「モデル」のドロップダウンリストの選択肢として表示されます。

 

TanksConnectedPIを選択すると、表示内容は以下のように変わります。

 

 

定義の作成と設定

SysMLシミュレーションの設定要素を作成し、SysMLシミュレーションの設定タブで以下のような内容で設定を行います。

 

注意:

"SimConstant"として設定しない値は、"SimVariable"として扱います。

 

LiquidSource

"SysMLSimClass"に指定します。

 

プロパティの設定:

  • flowLevel: をSimConstantに指定します。

Tank

"SysMLSimClass"に指定します。

 

プロパティの設定:

  • area: をSimConstantに指定します。
  • flowGain:をSimConstantに指定します。
  • maxV: をSimConstantに指定します。
  • minV: をSimConstantに指定します。

BaseController

"SysMLSimClass"に指定します。

 

プロパティの設定:

  • K: をSimConstantに指定します。
  • T: をSimConstantに指定します。
  • Ts: をSimConstantに指定します。
  • ref: をSimConstantに指定します。

PIcontinuousController

"SysMLSimClass"に指定します。

TankPI

"SysMLSimModel"に指定します。

TanksConnectedPI

"SysMLSimModel"に指定します。

 

 

データセットの設定

一覧内の要素を右クリックし、データセットを新規に作成します。値は以下のように設定します。

 

LiquidSource

flowLevel: 0.02

Tank

h.start: 0

flowGain: 0.05

area: 0.5

maxV: 10

minV: 0

BaseController

T: 10

K: 2

Ts: 0.1

PIcontinuousController

設定の必要はありません。

上位ブロックの既定値を自動的に参照します。

TankPI

シミュレーションデータの設定ダイアログでは、既定値が自動的に読み込まれます。

 

データセット内で、それぞれのブロックに定義された既定値は、TankPIのプロパティの既定値として利用されます。一覧内の項目を展開することで、それぞれの値を確認できます。

 

 

OKボタンを押して管理画面に戻ります。次のような値が設定されます。

  • tank.area: 1    (ブロックTankのデータセットの既定値 0.5 が上書きされます。)
  • piContinuous.ref: 0.25

TanksConnectedPI

  • controller1.ref: 0.25
  • controller2.ref: 0.4

 

 

シミュレーションと解析の例: 1

 

次の変数を選択し、解析ボタンを押して下さい。プロット対象としては、次の項目を選択して下さい。

 

 

 

グラフの説明

 

 

シミュレーションと解析の例: 2

上の例では、タンクのプロパティのminVとmaxVを、それぞれ0と10に設定しました。

現実の世界では、水量が10 m3/sとなると、とても大きなバルブが必要になります。

そこで、maxVの値を0.05 m3/sとした場合にはどのような挙動になるでしょうか?

 

前の例を元に、以下の変更を加えました。

 

既存のデータセット"DataSet_1"に対して、右クリックしてデータセットの複製を実行し、新しいデータセット"Tank2WithLimitValveSize"を作成します。

 

 

 

グラフの説明

 

これらの例では、既存のデータセットを複製してパラメータの値を調整する方法を説明しました。