組込み分野のための
UML モデル解説書

部品編 C001

目標制御

本書は、UML モデルカタログに含まれる「目標制御」のモデル
UMTP 組込みの詳細を記述したものです。モデリングの初心者には教科書や参考

モデリング部会書として、モデリングのベテランの方々にはモデルのヒントとし2016.5.15 更新て、ぜひともお手元に置いて活用してください。

Copyright(c)2012-2016 consortium for UML based Modeling Technologies Promotion All Rights Reserved

組込み分野のための UML モデル解説書

UMTP は特定非営利活動法人 UML モデリング推進協議会の登録商標です。その他、本書に記載されている会社名、商品名などは、一般に各社の商標または登録商標です。

2

目標制御

目

次

はじめに .................................................................................................... 4要求仕様 .................................................................................................... 4
モデル一覧 ............................................................................................... 14
エンティティに着目したモデル ..................................................................... 15
分析モデル ............................................................................................. 15
PIM 設計モデル ....................................................................................... 19
役割に着目したモデル ................................................................................. 27
分析モデル ............................................................................................. 27
参考文献 .................................................................................................. 33
付録：各種制御方式の詳細 ........................................................................... 34

3

組込み分野のための UML モデル解説書

はじめに
目標制御は、特定の制御対象・システムに対して式やテーブルといった最適化が施された形態で実装されることが多くあります。このモデルは、目標制御の実装形態はブラックボックスとし、その中身に依存しない形にしました。このモデル（部品編目標制御）では、登場するクラス数が少なく、モデルの全体と対象物が把握しやすいものとなっています。

要求仕様
目標制御システムとは、制御対象の計測値が目標値となるように制御する仕組みで、エアコンの温度調節や自動車の ABS など数多くの製品に組み込まれています。

目標制御システムの基本的な構成と動作
目標制御システムは計測器、操作器、制御器で構成されます。利用者は制御が必要な状況で、目標制御システムに制御の開始を指示します。目標制御システムは、制御中は一定時間周期で制御対象を計測し、それに応じた操作を行うというフィードバックを繰り返します。
制御対象は目標制御システム以外の不特定な要因からも影響をうけますが、その都度出力を修正することで、フィードバックを繰り返すことで、うまく制御を行えるようになっています。
制御が必要かの判断

不特定な要因

目標値の決定目標制御システム
制御対象への影響
（外乱）

操作器

利用者

操作量
指示
制御器

制御対象の計測と操作

計測値

制御対象

計測器

目標制御の実例
目標制御を実行した場合に、制御対象の計測値がどのように目標値に近づいていくかを説明します。

はじめに

4

目標制御

目標制御を開始すると、操作器の操作量が制御対象に伝わるまでの時間（むだ時間）を経過した後、計測値は目標値に近づいていきます。このときの目標値に近づくまでの時間が立ち上がり時間です。計測値が目標値に達したときに、勢いがついていたりすると、オーバーシュートが発生します。その後、ハンティン
グをしながら、徐々に計測値は目標値付近で安定するようになります。最終的に安定したときの計測値と目標値の差が定常偏差として残ることになります。
目標制御を実現するアルゴリズムには、ON/OFF 制御、PID 制御、ファジィ制御などの制御方式があり、制御方式によって、目標値への近づき方の特徴に違いがあります。注：これらの制御方式については付録を参照してください。

用語定義
すでにいくつかの用語を使用していますが、あらためて用語の定義を行います。しかし、それだけではイメージがつきにくいと思いますから、具体的な製品（例としてエアコンと ABS）で、何に該当するかもあわせて以下に示します。
用語

用語の意味

エアコンの場合

ABS の場合

目標制御
システム

制御対象を制御するための仕組み

－

－

制御対象

目標制御を行う対象

室温

車体速度

目標値

目標とする制御対象の値指定された室温指定された車体速度

計測値

計測された制御対象の値

現在の室温

現在の車体速度外乱

制御対象に加えられる予測できない影響

室外との熱のやり取り、等

路面との摩擦、等制御器

目標制御を司る部品

－

－

入力器

利用者からの指定内容や指示を受け付け
る部品

入力パネル

ブレーキペダル

計測器

制御対象を計測する部品

室温センサ

車体速度センサ

操作器

何らかのアクチュエータを駆動させることで、制御対象を操作する部品

コンプレッサー

油圧サーボ

操作量

操作器がもつ指定可能な量で、結果的に制御対象を操作する量

コンプレッサー出力

油圧サーボ出力制御方式

目標制御を実現する方式、アルゴリズム－－

本カタログでの目標制御システムの前提条件
本カタログで検討する目標制御システムは、特定の製品ではなく、どの製品でも共通となる抽象的な目
標制御システムとして検討しています。具体的な製品は、検討したモデルを継承・拡張して開発するイメー
ジとなります。
しかし、製品ごとにさまざまな目標制御の実現方法があり、純粋に共通部分のみを扱うことは困難であるため、本カタログで検討する目標制御システムには、以下の前提条件を設定します。
1. 検討する制御方式について
閉ループ制御を対象とし、デフォルトの制御方式をＰＩＤ制御として検討します。
2. 一定周期で動作させる仕組みについて

5

組込み分野のための UML モデル解説書

一定周期で動作させるためにタイマーを使用します。タイマーはシステムが起動したタイミングで開始します。
3. 目標制御の終了条件について制御対象を目標値に留めておきたい場合があるため、利用者が目標制御の終了を指示するまで、目標値に到達しても制御を続けます。
4. 目標値やその他の制御項目の変更タイミングについて
任意のタイミングで目標値やその他の制御項目を変更できますが、変更された値が実際に使用されるタイミングは、次回の制御時となります。

要求仕様

6

目標制御

ユースケース
本カタログモデルが実現する範囲のユースケースを示します。

uc 目標制御システムのユースケース
目標制御システム

UC01:起動する

UC02:制御項目を設定する
操作器
UC03:目標制御
を開始する
外部システムUC04:目標制御
を終了する

計測器

UC05:停止する

図1

補足：アクター「外部システム」とは、最終的な製品（エアコン等）に含まれるプログラム（目標制御システムを使用するプログラム）を指します。

ユースケース一覧
No.

ユースケース名

概要／備考

UC01

起動する

目標制御システムを起動する。

UC02

制御項目を設定する

目標値やその他の制御項目を変更する。
操作量の計算途中にも制御項目を変更できます。

UC03

目標制御を開始する

制御対象の計測値が目標値となるように制御する。
一定時間周期で制御対象の計測と操作を繰り返すことで、制御対象は徐々に目標値に近づいていく。

UC04

目標制御を終了する

制御対象の操作を止める。

UC05

停止する

目標制御システムを停止する。

7

組込み分野のための UML モデル解説書

ユースケースの実行順とシステムの処理
act 目標制御シ ステムのユースケースの実行順とシ ステムの処理
外部シ ステム

目標制御シ ステム

起動を実行する

起動する
制御項目を設定する

制御項目の変更を実行する
1

2

3[設定項目を変更したい場合]
制御項目を設定する[様子を見たい場合]何もしないで待つ[目標制御システムを停止させたい場合]

制御項目の変更を実行する

一定時間周期で制御対象の計測と操作を繰り返す。

1[制御を開始したい場合]

目標制御の開始を受け付ける

目標制御を開始する

2
目標制御を行う[制御を終了させたい場合]

目標制御の終了を受け付ける

目標制御を終了する

3

停止する

停止を実行する

制御実行中なら、目標制御を終了してから停止する。

図2

要求仕様

8

目標制御

ユースケース記述<UC01：起動する>■概要
目標制御システムを起動する。

■アクター
外部システム■事前条件
・目標制御システムが停止している。

■事後条件
・目標制御システムが起動している。

■メインフロー
1. アクターは、システムの起動を要求する。
2. システムは、起動する。
3. システムは、アクターに起動したことを通知する。
4. UC を終了する。

■代替フローなし■課題やＴ.B.D 項目
なし

■備考
なし

9

組込み分野のための UML モデル解説書<UC02：制御項目を設定する>■概要
制御項目を設定する。

■アクター
外部システム■事前条件
・目標制御システムが起動している。

■事後条件
・制御項目が設定されている。

■メインフロー
1. アクターは、制御項目の設定を要求する。
2. システムは、制御項目を設定する。
3. システムは、アクターに制御項目の値を設定したことを通知する。
4. UC を終了する。

■代替フローなし■課題やＴ.B.D 項目なし■備考
操作量の計算途中にも制御項目の値を変更できますが、変更した値を計算に反映させるタイミングを計算前に限定することで、計算途中の値が書き換わることを防ぎます。※<UC03：目標制御を開始する>の備考を参照。

要求仕様

10

目標制御

<UC03：目標制御を開始する>■概要
制御対象の計測値が目標値となるように制御する。

■アクター
外部システム■事前条件
・制御項目が設定されている。
・目標制御が行われていない。

■事後条件
・目標制御が行われている。

■メインフロー
1. アクターは、目標制御の開始を要求する。
2. システムは、制御の周期処理を開始する。
3. システムは、アクターに目標制御を開始したことを通知する。
4. UC を終了する。
■代替フローなし■課題やＴ.B.D 項目なし■備考
目標制御が開始されると、システムは以下を行い、制御対象を目標値に近づけていく。
1. システムは、<UC02：制御項目を設定する>で設定された制御項目の値を取得する。
2. システムは、計測器を使用し、制御対象を計測する。
3. システムは、計測値と目標値を比較し、制御対象が目標値に近づくような操作量を算出する。
4. システムは、操作量に従って、操作器を使用し、制御対象を操作する。
5. 一定時間経過後、1 に戻る。
※この処理はアクターが操作を別の操作を行っているときも、それに平行して行う。この処理は<UC04：目標制御を終了する>が行われるまで続ける。

11

組込み分野のための UML モデル解説書<UC04：目標制御を終了する>■概要
目標制御を終了する。

■アクター
外部システム■事前条件
・目標制御が行われている。

■事後条件
・目標制御が行われてない。

■メインフロー
1. アクターは、目標制御の終了を要求する。
2. システムは、制御の周期処理を終了する。
3. システムは、操作器の操作を止める。
4. システムは、アクターに目標制御を終了したことを通知する。
5. UC を終了する。

■代替フローなし■課題やＴ.B.D 項目
なし

■備考
なし

要求仕様

12

目標制御

<UC05：停止する>■概要
目標制御システムを停止する。

■アクター
外部システム■事前条件
・目標制御システムが起動している。
・目標制御が行われていない。

■事後条件
・目標制御システムが停止している。

■メインフロー
1. アクターは、システムの停止を要求する。
2. システムは、停止する。
3. システムは、アクターに停止したことを通知する。
4. UC を終了する。

■代替フローなし■課題やＴ.B.D 項目
なし

■備考
なし

13

組込み分野のための UML モデル解説書

モデル一覧
モデル名

概要

機能に着目した
モデルなし

エンティティに着目したモデル

目標制御システムを構成する部品をエンティティとしてとらえました。実現方法を思い浮かべたときに一般的に作成されるタイプのモデルです。

制御方式の拡張性を重視しました。

役割に着目したモデル

目標制御システムについて必要な役割に着目しました。実現方法にとらわれず「現実と目標を一致させる」という目標制御の本質を抽象化したモデルです。

オブジェクト指向を意識したモデルです。

状態に着目したモデル

なし

メタファを使っ
たモデル

なし

モデル一覧

ポイント

14

目標制御

エンティティに着目したモデル
モデリングのコンセプト
静的な構造として目標制御を行うのに必要な構成部品に着目しました。
また、要求仕様に登場する ON/OFF 制御、PID 制御、ファジィ制御といった複数の制御方式に対応できるように考慮しました。

分析モデル
１．制御対象および計測、操作について
実際の制御対象（エアコンにおける室温、ABS の車体速度）の今の状態の保持やそれに関する情報を保持するクラスとして「制御対象クラス」を定義しました。制御対象クラスは属性として目標値と計測値を持ちます。なお、「計測値」属性は実際には操作であり、操作を呼ぶと計測器クラスの「計測する」操作を呼び出します。
制御対象には一般的に、制御対象特有の上限値・下限値、あるいは計測器が持つセンサからくる上限
値・下限値（計測限界）が存在します。そのため、制御対象クラスは範囲クラスを保持する形となります。
２．制御方式について制御器が制御を行う際、どのように制御するか（例えば計測値が目標値に近づいてきたから、出力を弱めるといったこと）を考える必要があります。これを制御方式クラスが行います。制御方式には ON/OFF
制御、PID 制御、ファジィ制御といろいろな方法がありますから、制御方式クラスは抽象クラスとなります（ストラテジーパターン）。制御方式クラスが操作量を算出する際には、元となるデータ（制御パラメー
タ）が必要となりますので、制御方式クラスは制御パラメータクラスを保持することになります。
制御方式クラスでは操作量算出時に必要な内部データ（PID 制御であれば偏差（目標値と現在値の差）の時間積分値）が必要ですが、これは実際の制御方式に依存するため、ここでは抽出していません。制御パ
ラメータが持つデータについても同様で、PID 制御であれば比例係数、積分係数、微分係数の 3 つを持つことになりますが、これも制御方式に依存するものですのでここでは抽出していません。注：PID 制御の詳細については付録を参照してください。
３．定期的な制御について
制御は定期的に行う必要があるためタイマーが必要となりますから、それを定義しました。分析の動的モデルではタイマーが目標制御システムで定義される操作を直接呼び出す形としますが、本来は、一般にタイマーは目標制御部品とは別の部品であり、タイマーが目標制御システムで定義している操作を直接呼び出すことはできません。これについては PIM で検討します。
４．その他
制御対象を実際に制御する場合、その良し悪し、具体的には立ち上がり時間、オーバーシュート量、ハンティング量、定常偏差の量などを、考える必要があります。しかし、これについては制御方式クラスのサブクラスが考えることであるため、クラス構成を抽出する際には考慮対象外としました。

15

分析モデル

組込み分野のための UML モデル解説書

静的モデル
目標制御システムのクラス構造
class 目標制御の静的モ デル
操作器

1

制御器
状態

操作する(操作量) :void

起動する() :void
制御項目を設定する() :void
開始する() :void1
1サイクル処理を行う() :void
終了する() :void
停止する() :void
1
1
1 タイマー

制御対象
1

制御対象
目標値
/計測値

計測器
1

1

1
状態：
制御中、
非制御中

1 制御範囲
範囲

タイ マー

上限値
下限値

周期
1 制御方式

操作器

1

定期実行する() :void

制御方式
操作量を算出する(目標値, 計測値) :操作量

パラメータ
1

0..1

制御パラメータ

計測器
計測する() :計測値

保持するデータはサブクラス
でのみ出てきます。
PID制御であれば、比例係
数、微分係数、積分係数です。
※PIMのクラス図では記載していますので、イメージがつかない場合はPIMを見てください。

図3

補足：基本的には、属性の値を取得、設定する操作は省略してあります。制御器クラスの操作について
はユースケースにあるものは記載しています。
 制御器クラス：
外部システムが実際に使用するクラスとなります。分析のクラス図では記載を省略していますが、このクラスは制御項目（目標値、制御パラメータ、リスナー、制御範囲）の設定と取得を行う操作と、制御の開始や終了を行う操作を持ちます。また、タイマーを起点としての制御（計測、算出、操作という一連の動作）も行います。
 制御対象クラス：
制御対象に関するデータを持つクラスで、目標値と計測値を属性として持ちます。
すでに述べましたが、派生属性「計測値」は実際には操作であり、これを呼ぶと、計測器の「計測する」操作が呼び出されます。
 計測器クラス：
実際の制御対象に対して計測を行うクラスです。実際にはドライバ等になります。
 操作器クラス：
実際の制御対象に対して操作を行うクラスです。実際にはドライバ等になります。
 範囲クラス：
一般に制御対象には制御できる範囲があります。この範囲は制御対象の特性（水なら 0～100℃）や計測器の特性（計測できる範囲）によります。その範囲外になった場合には一般に故障であり、それを検出するためにあります。
 タイマークラス：
定期的な制御を行う際の起点となるクラスです。
 制御方式クラス：
目標値、計測値、および、制御パラメータから操作量を算出するクラスです。

エンティティに着目したモデル

16

目標制御

 制御パラメータクラス：
制御方式が使用する制御パラメータを保持します。ただし、実際のデータは制御方式に依存するため、このクラス自身はデータを持ちません。
※これだけだとクラス存在意味が分かり難いのですが、例えば、制御方式クラスの操作として「制御パラメータを設定する」というのが必要になったときに、引数の型としてこのクラスが必要となります。
このように書くと、うまく設計するために出てきたクラスのように思えますが、PID 制御の比例係数、
積分係数、微分係数のように目標制御の一般的な概念として、制御パラメータというのがありますので、抽出しています。

動的モデル
目標制御システムの状態遷移
stm 制御器の状態遷移

起動する
開始する

非制御中

制御中
終了する

停止する

図4

「開始する」の相互作用
sd 開始する:制御器
外部システム開始する()

制御中に遷移する。
開始したことを通知する()

図5

17

分析モデル

組込み分野のための UML モデル解説書「制御中」の相互作用
sd 制御中
:タイマー

:制御器

:制御方式

:制御パラメータ

:制御対象

:計測器

操作器

1サイクル処理を行う()

opt 制御実行判断[制御実行中の場合]

目標値を取得する()
計測値を取得する()計測する()

操作量を算出する(目標値, 計測値)
制御パラメータを取得する()

実際の操作名はサブクラスによります。
例えば、PID制御であれば、「比例係数を取得する」などになります。

PID制御であれば、ここで偏差（計測値と目標値との差）を計算し、それを元に操作量を算出します
操作する(操作量)

図6

補足：制御対象の派生属性「計測値」の取得は「計測値を取得する」操作として記載しています。

「終了する」の相互作用
sd 終了する:制御器:外部システム
終了する()

非制御中に遷移する。
終了したことを通知する()

図7

エンティティに着目したモデル

18

目標制御

PIM 設計モデル
分析との違いについて説明します。
１．制御対象および計測、操作について
分析では計測値が範囲を超えた場合にどうするかを考慮していませんでしたが、ここでは考慮します。
方法としては、計測値をチェックし、範囲外になったらリスナーを使用して通知するようにしました（オブザーバパターン）。これにより外部システムは制御を中止したり、他のこと（管理者に通知を行うなど）を行ったりといったことができます。
２．制御方式について制御方式クラスと制御パラメータクラスは分析では抽象クラスのみ記載しましたが、制御するには当然、実際のクラスが必要となりますから、ON/OFF 制御、PID 制御、ファジィ制御の 3 つについてサブクラスも記載してあります。注：これらの制御方式については付録を参照してください。
３．定期的な制御について
分析ではタイマーが目標制御システムの持つ操作を直接使用していましたが、本来このようなことはできません。ここでは、タイマータスクという抽象クラスを定義し、制御器クラスがそのサブクラスとなることで、タイマーが間接的に目標制御システムの持つ操作を使用する形としました（オブザーバパターン）。
分析ではスレッドについて何も触れていませんでしたが、制御はそれを利用する外部システムとは別のスレッドで行うこととしました（※スレッドのスケジューリングポリシーは OS に依存するので、それには依存しない作りにしました）。目標値、制御パラメータ、リスナー、制御範囲の変更は制御を行っている間でも可能とするため（複数のスレッドから使用されるため）、ミューテックスあるいはアトミック操作による排他を意識しました。
スレッドのスケジューリングポリシーや優先度によっては制御が定期的に行われない（若干ずれる）ため、計測を行った後で現在時刻を取得し、計測時刻とすることで操作量を算出する際に時間を補正できるように
しました。

19

PIM 設計モデル

組込み分野のための UML モデル解説書

静的モデル
目標制御のクラス構造
1 つのクラス図では収まらないため、制御方式に依存しない部分と、制御方式に依存する部分でクラス図を分けました。
class ソフトウェア構造
制御状態
複数スレッドからアクセスされます。これについては
ミューテックスで排他するよりは、アトミック操作にて変更・参照できるようにした方が簡単です。
volatileも指定するようにしてください。

+

0..1
操作器は複数スレッドから使用されますので、ミューテックスなどによる排他が必要です。

制御器

操作器

-

制御状態 = 非制御中

+
+
+
+
+
+
+
+
+
+
+
-

制御器(計測器, 操作器, 制御方式, 制御周期)
目標値を取得する() :目標値
目標値を設定する(目標値) :void
制御パラメータを取得する() :制御パラメータ
制御パラメータを設定する(制御パラメータ) :void
制御範囲を取得する() :制御範囲
制御範囲を設定する(制御範囲) :void
制御対象リスナーを設定する(リスナー) :void
開始する() :void
終了する() :void
実行する() :void
1サイクル処理を行う() :void
制御状態を変更する(制御状態) :void++-制御対象 +
+
+
1 +
+
+

1

-計測器

目標値
制御対象(計測器)
計測値を取得する() :計測値
目標値を取得する() :目標値
制御対象リスナーを設定する(リスナー) :void
制御範囲を設定する(制御範囲) :void
目標値を設定する(目標値) :void<<enumeration>>
制御状態

0..*

制御中
非制御中

-タイマー

-制御範囲

1

範囲

-

周期

+
+
+
-

タイマー(周期)開始する(タイマータスク) :void
停止する() :void
タイマータスクを実行する() :void

-制御方式

制御方式
+
+
+
+

計測する() :計測値

-操作器

タイ マー

1

+

制御対象
-

実行する() :void-タイマータスク

計測器

操作する(操作量) :void1

タイマータスク1<<interface>>
制御対象リスナー
計測値が制御範囲外になった(計測値) :void

制御パラメータを取得する() :制御パラメータ
制御パラメータを設定する(制御パラメータ) :void

-

上限値
下限値

+
+
+
+
+

上限値を取得する() :上限値
上限値を設定する(上限値) :void
下限値を取得する() :下限値
下限値を設定する(下限値) :void
計測値が範囲内か確認する(計測値) :真偽値

-パラメータ

操作量を算出する(目標値, 計測値, 計測時刻) :操作量
初期化する() :void0..1

制御パラメータ

図8

補足：コンストラクタは引数が必要なもののみ記載しています。
以下、分析との違いについて説明します。
 制御器クラス：「実行する」操作を追加しています。この操作は「タイマータスク」の「実行する」操作をオーバライ
ドしたものであり、外部システムが使用する操作ではありません。

エンティティに着目したモデル

20

目標制御

 制御対象リスナー：
制御対象が異常を検知したというイベントを外部システムが分かるようにするためのインタフェースです。外部システムはこのインタフェースのサブクラスを定義し、それを制御器クラスの「制御対象リスナーを設定する」操作を使用することで、イベントを受け取ることができます。
 タイマー、タイマータスク：
タイマーは一般に別の部品となりますので、タイマーが制御器を直接持つことはできません。そのため、制御器をタイマータスクのサブクラスとし、それをタイマーに設定することで、制御器クラスの操作を定期的に実行できるようにしています。
 制御方式：「初期化する」操作を追加しています。制御中→非制御中→制御中→・・・と、制御の開始と終了を繰り返す場合、制御を再実行するときに内部データを初期化できるようにするためです。

class ソフトウェア 構造（制御方式と制御パラメータ）

制御方式
+
+
+
+

-パラメータ制御パラメータ

0..1

制御パラメータを取得する() :制御パラメータ
制御パラメータを設定する(制御パラメータ) :void

操作量を算出する(目標値, 計測値, 時刻) :操作量
初期化する() :void

ON/OFF制御++

ON/OFF制御パラメータ

操作量を算出する(目標値, 計測値, 時刻) :操作量
初期化する() :void-

ON出力閾値
OFF出力閾値

++++OFF出力閾値を取得する() :OFF出力閾値
OFF出力閾値を設定する(OFF出力閾値) :void
ON出力閾値を取得する() :ON出力閾値
ON出力閾値を設定する(ON出力閾値) :void

PID制御

PID制御パラメータ

-

偏差
偏差積分値
前回計測時刻

-

比例係数
積分係数
微分係数

+
+

操作量を算出する(目標値, 計測値, 時刻) :操作量
初期化する() :void

+
+
+
+
+
+

比例係数を取得する() :比例係数
比例係数を設定する(比例係数) :void
積分係数を取得する() :積分係数
積分係数を設定する(積分係数) :void
微分係数を取得する() :微分係数
微分係数を設定する(微分係数) :void

ファジ ィ制御

ファジ イ 制御パラメータ

-

状態変数

-

IF-THENルール++

操作量を算出する(目標値, 計測値, 時刻) :操作量
初期化する() :void++

IF-THENルールを取得する() :IF-THENルール
IF-THENルールを設定する(IF-THENルール) :void

図9 制御方式の各サブクラス、制御パラメータの各サブクラス：
ここでは例として ON/OFF 制御、PID 制御、ファジィ制御の 3 つについて、必要となる属性と操作を定義しました。なお、動的モデルでは PID 制御を使用する場合で記載しています。注：これらの制御方式については付録を参照してください。

21

PIM 設計モデル

組込み分野のための UML モデル解説書

動的モデル「起動する」の相互作用
sd 起動する:外部システム<<create>>:計測器

実際には使用するドライバの初期化
等になります:操作器<<create>><<create>>:PID制御パラメータ<<create>>

実際に使用する制御方式のサブクラス（PID制御）を生成します:PID制御制御パラメータを設定する(PID制御パラメータ):制御器<<create>>
制御器(計測器,操作器,PID制御,制御周期)

制御対象(計測:制御対象器)<<create>><<create>><<create>>
タイマー(制御周期)

:範囲

:タイマー

開始する(制御器)

図10

補足：制御器はもちろんですが、計測器、操作器、制御方式、制御パラメータの 4 つのクラスのサブク
ラスについてもオブジェクトの生成は外部システムに行ってもらいます。こうすることにより、目標制御が実際に使用するサブクラスに依存することなく、制御を行うことができます。

エンティティに着目したモデル

22

目標制御

「開始する」の相互作用
sd 開始する:制御器:PID制御:外部システム開始する()

opt 制御状態の判定[制御状態 != 制御中]初期化する()

制御状態を変更する(制御中)

図11

補足：初期化を行うのも分析モデルからとの違いになります。

23

PIM 設計モデル

組込み分野のための UML モデル解説書「制御中」の相互作用
sd 制御中<<interface>>:タイマー :制御器
:制御対象リスナー

:制御対象

:計測器

:範囲

:PID制御:PID制御パラメータ:操作器

タイマータスクを実行する()
実行する()
1サイクル処理を行う()
opt 制御状態の判定[制御状態=制御中]

critical

目標値を取得する():目標値
計測値を取得する()計測する():計測値

critical

計測値が範囲内か確認する(計測値):真偽値

opt 計測値の確認結果の判定[計測値が制御範囲外であった]
critical[制御対象リスナーがある場合]
計測値が制御範囲外になった(計測値):計測値
操作量を算出する(目標値,計測値,現在時刻)
critical

比例係数を取得する():比例係数
積分係数を取得する():積分係数
微分係数を取得する()
:微分係数

:操作量
critical 制御状態の判定[制御状態=制御中]操作する(操作量)

図12

エンティティに着目したモデル

24

目標制御

計測してから、操作するまでの間に、目標制御の終了が要求された場合やリスナーの操作の中で終了要求された場合のために「操作する()」を実行する直前に再度、制御状態を確認します。
制御器クラスが変更する操作を持っているデータ（目標値など）を使用する場合にはミューテックス等
による排他が必要ですので、critical で囲っています。

「終了する」の相互作用
sd 終了する:制御器:操作器:外部システム
終了する()
critical 制御状態の判定[制御状態 != 非制御中]制御状態を変更する(非制御中)操作する(0)

図13

目標制御を終了する際には、操作量を０とし、操作を止めます。

「目標値を変更する」の相互作用
sd 目標値を変更する
:制御器

:制御対象

:外部システム
目標値を設定する(目標値)
目標値を設定する(目標値)
critical
目標値を設定する()

図14

25

PIM 設計モデル

組込み分野のための UML モデル解説書「停止する」の相互作用
停止する場合は、起動とは逆の順でタイマーやオブジェクトを停止、破棄を行います。

エンティティに着目したモデル

26

目標制御

役割に着目したモデル
モデリングのコンセプト
目標制御の理想と現実を近づける機能に着目しモデリングしました。
目標制御の目的である「対象の現実を理想に近づける」という点をアーキテクチャの中心に据え、それぞれの役割を擬人化したモデルです。このようなモデリングの考え方もあるというサンプルとして、分析モ
デルのみ提示します。

分析モデル
１．制御対象および計測、操作について
実際の制御対象（例えばエアコンにおける室温、ABS における車体速度）を表すクラスとして、「対象」クラスを設けました。「対象」クラスには「理想」と「現実」２つのロールがあります。「理想」のロールは目標とする制御対象の値を保持し、「現実」のロールは計測された制御対象の値を保持します。
「対象」クラスは「更新させる人」クラスによって定期的にその内容を更新されます。「現実」のロー
ルには制御対象の計測（更新）時刻が必要なため属性として持ち、「理想」のロール側には必要ないため、属性に多重度を示しています。
また、目標制御の入力数と出力数はそれぞれ１つずつのモデルです。
２．制御方式について制御を行う際、どのように制御するか（例えば計測値が目標値に近づいてきたら、出力を弱めること）
を考える必要があります。これを制御アルゴリズムクラスが行います。
制御アルゴリズムクラスの制御方式には ON/OFF 制御、PID 制御、ファジィ制御といろいろな方式があるため、制御アルゴリズムクラスは抽象クラスです。（ストラテジーパターン）。制御アルゴリズムクラス
は先の「理想」と「現実」を用いて、操作量を決定します。
３．定期的な制御について目標制御を定期的に実行するため「タイマー」クラスを定義しました。「タイマー」クラスは「一致させる人」クラスを呼び出し、「一致させる人」クラスは理想と現実を制御アルゴリズムに渡して定期的な制
御を行います。
また、別のタイマーとして、対象クラスを定期的に更新する、「更新させる人」クラスを定義しました。
「更新させる人」クラスが先の「タイマー」クラスと別に存在する理由として、「現実」のロールでの制御対象の計測は、「一致させる人」クラスの制御間隔とは異なる間隔で実行される場合があること、また「理想」のロールで保持している目標とする制御対象の値が不定期に変更される可能性があるためです。

27

分析モデル

組込み分野のための UML モデル解説書

静的モデル
目標制御のクラス構造
class 役割に着目したモ デル クラス 図
更新タイ マー
タイ マー
周期
状態

更新させる人OFFにする()
ONにする()

更新UI

1

1

状態：
制御中
非制御中

1
対象
計測時刻 [0..1]
値

1

理想
1

一致させる人0..1

計測時刻を取得する() :計測時刻 現実更新する()
1
値を取得する() :値制御アルゴリズ ム

一致させる()

0..1 1

パラメータ計算する(理想, 現実) :操作量

0..1
1

1

制御器

1

制御方式

値を集める人
1

値を取得する() :値

働く人
駆動する(操作量)

計算機

値入力UI

計測器

計算する()
値を取得する() :値画面を表示する()
値を取得する() :値計測する()
値を取得する() :値ABSの「車体速度」など

目標値の入力操作器

現実の値を取得する計測器
温度計・速度計など

図15

 対象クラス：「対象」クラスは、制御対象の情報を保持するクラスです。目標制御の目標とする制御対象の値（目標値）や、計測される制御対象の値（計測値）を保持します。「値を集める人」クラスを介して値を手に入れます。目標制御では単位時間あたりの変化が必要となるため、値の更新の時刻を計測時刻として保持します。「対象」クラスは「更新させる人」クラスにより呼び出され、保持している値を更新します。
 更新させる人クラス：「更新させる人」クラスは、「対象」クラスが保持している情報を更新するきっかけを与えます。他のクラスに更新する仕事をさせるため使役の意味で「更新させる人」としています。「更新させる人」ク
ラスは「更新タイマー」や、「更新 UI」クラスに継承され、継承クラスでその更新タイミングを変更出来ます。
 値を集める人クラス：「値を集める人」クラスは、「対象」クラスが必要とする情報のインタフェースとなります。「対象」
クラスが必要とする情報は計測器が計測する値や、ユーザが設定する「値入力 UI」などその情報ごとにインタフェースが異なることが考えられるため、それらをラッピングするために用意されています。
「更新させる人」クラスと「値を集める人」クラスは、具体的なシステムによってさまざまに組み合わせて使われます。たとえばエアコンの場合であれば、「更新タイマー」がきっかけとなって「計測器」
役割に着目したモデル

28

目標制御

を使って「現実」の室温を取得します、また、エアコンのリモコンは「更新 UI」と「値入力 UI」を使って「理想」の温度設定を行います。ABS の場合であれば、「更新タイマー」がきっかけとなって「計測器」で「現実」の速度を取得し、「更新タイマー」から「計算機」を使って「理想」の速度を更新します。図 16 および図 17 のオブジェクト図を参照してください。
 一致させる人クラス：「一致させる人」クラスは、目標制御のフローを担うクラスです。特別な処理は有しておらず、「理想」ロールの対象クラスと「現実」ロールの対象クラスを制御アルゴリズムクラスに渡し、その結果の操作量を「働く人」クラスに渡します。「タイマー」クラスより周期的に呼び出され、目標制御を実現します。
 制御アルゴリズムクラス：「制御アルゴリズム」クラスは、目標制御の ON/OFF 制御や、PID 制御などの制御のアルゴリズムを担います。制御に用いる値の入手やタイミングなどには制約を受けないよう分離されています。「制御アルゴリズム」クラスは抽象クラスのため、ON/OFF 制御や、PID 制御などの制御方式の派生クラスを作成し継承する必要があります。
 タイマークラス：「タイマー」クラスは、「一致させる人」クラスを駆動させるためのトリガの役割を担います。ユーザによって ON されると、設定されている周期に従って「一致させる人」クラスを呼び出し、目標制御が実施されます。
 働く人クラス：「働く人」クラスは操作器のインタフェースとなります。「一致させる人」クラスが制御アルゴリズム
クラスを用いて操作量を求めると、操作量を「働く人」クラスにインプットして、システムの外にある
制御対象に対して目標制御を行います。

29

分析モデル

組込み分野のための UML モデル解説書

オブジェクト例 エアコン
object オブジェクト例 エ アコン:更新UI:更新タイ マー:タイ マー

指定された室温（理想） :対象:一致させる人:制御アルゴリズ
ム

現在の室温（現実） :対象入力パネル :値
入力UI

室温センサ :計測器

コンプレッサー :働く人

図16

オブジェクト例 ABS
object オブジェクト例 ABS
車体速度（理想）
用 :更新タイ マー

車体速度（現実）
用 :更新タイ マー:タイ マー

指定された車体速度（理想） :対象:一致させる人
現在の車体速度（現実） :対象:計算機

車体速度センサ :計測器

油圧サーボ :働く人

図17

役割に着目したモデル

30:制御アルゴリズ
ム

目標制御

動的モデル
状態遷移は、図 4 と同一のため省略します。

「開始する」の相互作用
sd 開始する:タイマー
アクター
ONにする()

制御中に遷移する。
開始したことを通知する()

図18「制御中」の相互作用
sd 制御中:更新タイマー:タイマー:一致させる人:制御アルゴリズム

理想 :対象更新する()

現実 :対象:計測器:働く人

値を取得する() :値:値一致させる()
計算する(理想, 現実) :操作量
値を取得する() :理想値
値を取得する() :現実
値
計測時刻を取得する() :計測時
刻
:操作量駆動する(操作量)

図19

31

分析モデル

組込み分野のための UML モデル解説書「終了する」の相互作用
sd 終了する:タイマー
アクター
OFFにする()

非制御中に遷移する。
終了したことを通知する()図20

役割に着目したモデル

32

目標制御

参考文献
 『ＰＩＤ制御の基礎と応用』山本重彦・加藤尚武著、朝倉書店、1997
 『基礎システム制御工学』土谷武士・江上正著、北森出版、2001

33

組込み分野のための UML モデル解説書

付録：各種制御方式の詳細
ON/OFF 制御
算出される操作量が 0%か 100%のいずれかとなるような制御です。操作量を 100%とする計測値（ON出力閾値）と 0%とする計測値（OFF 出力閾値）を設け、操作量を切り替えて制御していくといった方法がとられます。
この方式では必ずハンティングを起こすというデメリットがあります。しかし、例えば温度管理の場合
で、制御対象の熱容量が大きい場合にはハンティングの振幅は小さくなりますし、他の制御方式と比べ安価でコストもかからず、ハード制御のみで可能というメリットもあるため、非常によく使用される制御方式です。身近にある例としてはコタツの温度管理がそうです。

PID 制御最も使用されている制御方式です。P、I、D はそれぞれ、Proportional（比例）、Integral（積分）、
Differential（微分）の略であり、偏差（目標値と現在値の差）、偏差の時間積分、偏差の時間微分のそれぞれに定数を乗じたものを足し合わせたものを操作量とする方式です。このときの定数をそれぞれ、比例係
数、積分係数、微分係数と言います。
この方法では比例係数、積分係数、微分係数の 3 つの値が適切であれば、ON/OFF 制御のデメリットにあるようなハンティングはほとんど起こしません。ただし、実際の制御というのは難しいことが多く（例えば、むだ時間が長い、制御対象の特性や外乱の大きさが制御中に変化するなど）、PID 単独での使用というよりも他の制御方式と組み合わせて使用するといった方法がより一般的です。

ファジィ制御ファジィ推論演算を行って，操作量を決定する制御です。今まで人の手で行っていた制御を自動化したいときに使用される制御方式です。
この制御方式のデメリットとしては操作量の算出に時間がかかることがあげられます。しかし、人の手で行っていた制御を自動化できるというメリットがあり、よく使用される制御方式です。
この制御方式も PID 制御と同じように他の制御方式と組み合わせて使用されることも多いです。

付録：各種制御方式の詳細

34

組込み分野のための UML モデル解説書「目標制御」
初版発行 ２０１2 年（平成２4 年）5 月 17 日
第二版発行 ２０１3 年（平成２5 年）1 月 23 日
発行者 UMTP, Japan
編 著 組込みモデリング部会
印刷
UMTP, Japan
東京都渋谷区代々木 1 丁目 22 番 1 号
http://www.umtp-japan.org/

Copyright(c)2012-2016 consortium for UML based Modeling Technologies Promotion All Rights Reserved