組込み分野のための
UML モデルカタログ

製品編 P004

エアコン

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

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

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

組込み分野のための UML モデルカタログ

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

2

エアコン

目

次

はじめに ..................................................................................................... 4要求仕様 ..................................................................................................... 4
モデル一覧 ................................................................................................ 24
熱交換の原理に着目したモデル ...................................................................... 25
概念モデル .............................................................................................. 25
分析モデル .............................................................................................. 30
熱交換パッケージ ................................................................................... 31
温湿度制御パッケージ ............................................................................. 36
運転制御パッケージ ................................................................................ 41
デバイスパッケージ ................................................................................ 45
ユーザインタフェースパッケージ ............................................................... 48
PIM 設計モデル ........................................................................................ 49
パッケージ構成 ...................................................................................... 50
UI パッケージ ........................................................................................ 53
OperationControl パッケージ ................................................................... 54
TemperatureControl パッケージ ............................................................... 58
HeatExchange パッケージ ....................................................................... 65
Device パッケージ ................................................................................. 69
ソフトウェアで制御する対象に着目したモデル .................................................. 74
分析モデル .............................................................................................. 74
参考文献 ................................................................................................... 79

3

組込み分野のための UML モデルカタログ

はじめに
エアコンは、みなさんご存知の製品かと思います。ですが、エアコンの機能はメーカーや機種によって様々であり、温度制御部分は各メーカーが創意工夫して機能を作り込んでいます。
本エアコンモデルカタログに掲載するエアコンは、一般的な機能に限定し、温度制御については創意工夫する部分なので本カタログの部品編の目標制御を利用することに留め、モデルを簡略化します。エアコンの機能や制御をどのようにモデル化していくかを示すことで、モデルの捉え方やモデリング方法の参考にして
ください。

要求仕様
エアコン(エアー・コンディショナー)は、室内の温度(室温)と湿度を調整する空調装置です。
エアコンの基本機能として、暖房機能、冷房機能、除湿機能があります。空気清浄機能や内部洗浄機能な
どの付加価値機能はありません。
エアコンの利用者は、寒いと感じたときにはエアコンの暖房機能を利用し、暑いと感じたときには冷房機
能または除湿機能を利用します。
利用者は、快適と思う温度をエアコンに設定します。
エアコンの暖房運転では、室温が設定温度より低ければ暖房運転を続け、設定温度以上になったら暖房運
転を弱めて室温が設定温度を保つように暖房運転を続けます。
エアコンの冷房運転では、室温が設定温度よりも高ければ冷房運転を続け、設定温度以下になったら冷房
運転を弱めて室温が設定温度を保つように冷房運転を続けます。
冷房による冷たい空気が苦手な人は除湿運転を選ぶと、エアコンは室温を保ったまま快適な湿度になるまで除湿を続けます。快適な湿度は 50%～60%といわれていますが、温度によって快適に感じる湿度が異なるため、目標湿度は別途検討することにします。
暑い日に帰宅したときなどに、風量を強くして急激に室温を下げることもできます。また、冷房の風を直接体に当てた
いときや避けたいときなどに、風向を調整することもできます。
就寝時や外出時などの切り忘れ防止のため、オフタイマー
機能もあります。

エアコン操作方法
エアコン操作は右図に示すリモコンで行います。
各操作状況はリモコン上部の画面に表示されます。
リモコンのボタンについて以下に説明します。


温度設定「▲」ボタンを押すと設定温度が 1 度ずつ上がり、

はじめに

冷房
オフタイマー:なし

２８.0℃

風向: 自動風量: 自動

オフタイマー

風量

暖房

運転「冷房」、「暖房」、「除湿」のいずれかのボタンを押すと運転を開始します。「停止」ボタンを押すと運転を停止します。



設定温度:

運転:

4

冷房 運転
停止

風向

▲
除湿

温度
設定
▼

エアコン

「▼」ボタンを押すと設定温度が 1 度ずつ下がります。最高は 30 度、最低は 18 度です。


風量
「風量」ボタンを押すたび、風量が「自動」→「弱」→「中」→「強」→「自動」の順に変わります。



風向「風向」ボタンを押すたび、風向が「自動」→「スイング」→「固定」→「自動」の順に変わります。
風向を固定するには、「スイング」中に固定したい位置になったところで「風向」ボタンを押すこと
で向きを固定します。



オフタイマー「オフタイマー」ボタンを押すたび、「なし」→「1 時間後」→「3 時間後」→「6 時間後」→「なし」の順に変わります。

エアコンが室温を調整する仕組み
室温は、室内に熱がどれくらいあるかで決まります。熱の量を減らせば室温が下がって涼しくなり、熱の量を多くすれば室温が上がって暖かくなります。
一般的なエアコンは、ヒートポンプという技術を使い、冷房運転では部屋の中の熱を外に運び出して室温を下げ、暖房運転では室外の熱を部屋の中に運び入れて室温を上げます。
熱を運ぶ役目として熱媒体を使います。熱媒体は、熱を乗せ、熱を運び、熱を捨てるトラックやダンプカーのような存在です。エアコンで使う熱媒体として、人体に無害で、爆発などの危険性がなく、熱交換効率が良い物質を使います。以前はフロンが使われていましたが、オゾン破壊が問題となり、現在では代替フロンガスが使われています。しかし、代替フロンは地球温暖化係数が高いことがわかり、ノンフロンへの切り替えが進められています。
熱媒体に熱を乗せたり捨てたりするには、温度差を利用します。熱は、温度の高い方から低い方に流れる性質があり、熱媒体を冷やして室内に運び入れれば、室内の熱が熱媒体に移動し、その熱を室外に運び出せ
ば室内の温度が下がります。
熱媒体の温度を上げたり下げたりする仕組みは、以下の物理現象を利用します。


液体を熱して沸点以上になると気体になる（１気圧の水は 100 度で沸騰して水蒸気になる）



気体を冷やして沸点以下になると液体になる

気圧が下がると沸点も下がる（気圧が低い富士山山頂では約 88 度で水が沸騰する）



気圧が上がると沸点も上がる



気圧が下がると温度も下がる



気圧が上がると温度も上がる



気体を圧縮する（強制的に気圧を上げる）と温度が上がる



液体が蒸発(気化)すると温度が下がる（蒸発熱、気化熱）

5

組込み分野のための UML モデルカタログ

熱媒体を加圧すると温度が上がります。減圧すると温度が下がります。単純に加圧と減圧をしただけでは、
下図のように温度が上がってまた元の温度に戻るだけです。
圧力
30℃の
熱媒体

30℃の
熱媒体
加圧

60℃の
熱媒体

減圧

熱媒体を加圧して外気温より熱くしたあと、熱媒体に外気を当てると熱媒体の温度が室外に流れ、熱媒体の温度が下がります。例えば熱媒体も外気温も 30℃だとして、加圧して 60℃になった熱媒体に外気を当てると熱媒体の温度が下がります。十分時間をかければ外気と同じ 30℃まで下がるでしょう。その冷めた熱媒体を減圧すると元の温度よりも低くなります。この温度が低くなった熱媒体を室内に運び込めば、室内の熱が熱媒体に移動し、室内の温度が下がります。その様子を下図に示します。
圧力

圧力

30℃の
熱媒体

15℃の
熱媒体
加圧

60℃の
熱媒体

冷却

外気を当てる

要求仕様

6

30℃の
熱媒体

減圧

エアコン

エアコンはこの仕組みを利用し、熱媒体を室内と室外との間で循環させ、熱媒体を圧縮して温度を上げたり蒸発させて温度を下げたりし、その熱媒体を室内と室外で空気と熱交換することにより室内の温度を調整しています。
エアコンで冷房できる仕組みを下図に示します。

室内

屋外⑤ 熱媒体を減圧すると温度が下がる
15℃⑥ 室内温度が徐々に下がる④ 外気温 30℃
(外は広い
ので温度
変化微小)
圧縮
30℃

15℃

室温
(最初 30℃)
30℃

熱媒体は熱を運ぶトラックのようなもの③ 熱媒体を
屋外で
冷却する
圧縮
60℃
② 熱媒体を
加圧する
と温度が
上がる

① 室内の熱が熱媒体に移る

エアコンが湿度を調整する仕組み
湿度は、空気にどれだけの水蒸気(気体)が含まれているかで決まります。
空気に含むことができる水蒸気には最大量があります。その量を飽和水蒸気量といいます。飽和水蒸気量
は気温によって異なり、気温が高いほど水蒸気を沢山含むことができます。空気に飽和水蒸気量分の水蒸気が含まれている状態が湿度 100%です。
気温が下がると飽和水蒸気量が減り、飽和水蒸気量を超えた水蒸気は結露(液化)して水滴(液体)になります。
エアコンの除湿機能は、この現象を利用し、冷房機能で気温を下げて水蒸気を結露させ、室内の水蒸気量を減らして室内の湿度を下げます。溜まった水滴は室外に排水します。
除湿運転では室温を保つようにするため、室温が下がりすぎないように弱冷房運転を続けます。下がった
室温をヒーターで温めなおす再熱除湿方式のエアコンもあります。
7

組込み分野のための UML モデルカタログ

ハードウェア構成
一般的なエアコンのハードウェアは、室内機、室外機、それと、温度調整に利用する熱媒体を室内機と室外機の間で循環させるための配管で構成されます。
また、各所に異常を検知する機構が装備されています。
ハードウェアの大まかな構成図を以下に示します。リモコン、ブザー、LED などの UI 部品は省いてモデリングしています。

室外機

室内機
室内温度センサー
制御装置

電源

室内湿度センサー

室外温度センサー

リモコン受信部

コンプレッサー
四方弁

熱交換器

蒸発器

冷媒(熱媒体)

熱交換器

室外ファン

送風ファン
フラップ



冷媒(熱媒体)前述のエアコンが動作する仕組みでは熱媒体と書きましたが、熱を運ぶ物質はどれも熱媒体であり、空気すらも熱媒体と言えます。
一般的に、エアコン内部で使われる熱媒体を冷媒と呼んでいます。冷媒は冷房装置(クーラー)で使われるものと思われるかもしれませんが、暖房のときには室外を冷やすことに使われます。
冷媒(熱媒体)は、室内の熱を室外に運び出したり、室外の熱を室内に運び入れたりするための物質で、冷房や暖房の重要な役割を担います。室内機と室外機を冷媒管で結ばれ、冷媒管の中を冷媒が循環します。
冷媒には安全で効率よく熱を運び人体に無害な物質を使います。以前は特定フロン(CFC:クロロフル
オロカーボン類)が使われていましたが、オゾン破壊が問題となり、現在は代替フロン(HCFC:ハイド
ロクロロフルオロカーボン類と HFC:ハイドロフルオロカーボン類)が使われています。しかし、代替
フロンも地球温暖化係数が高いことがわかり、ノンフロンへの切り替えが進められています。

室内機は、以下の部品で構成されます。


室内温度センサー
室内の気温を計測します。

要求仕様

8

エアコン



室内湿度センサー
室内の湿度を計測します。



制御装置
モデリング対象とする制御プログラムが組み込まれる部分です。プログラムによって各部を制御します。



リモコン受信部
利用者がリモコンを操作した情報を受信する部分です。操作内容に応じてエアコンの設定や動作を変
更します。



電源
各部を動作させるための電源です。室外機にも電源を供給します。



蒸発器(膨張弁)
霧吹きの口のような部品で、高圧の液化した熱媒体が通ると急激に減圧し、気化(蒸発)して気体(ガス)に戻り、熱媒体の温度が一気に下がります。



熱交換器
熱媒体の熱と空気の熱を交換(平均化)する部品です。熱媒体配管に放熱フィン(薄い金属製の沢山の板)がついているだけの部品です。室外機の熱交換器も同様です。
高温高圧で気体の熱媒体が冷やされ、沸点以下の温度に下がることで、熱媒体が液体になります。



送風ファン
暖めた空気や冷やした空気を室内に送風するためのファンで、風量を調整できます。



フラップ
風向を上下に調整するための風向板です。

室外機は、以下の部品で構成されます。


室外温度センサー
室外の温度を計測します。



コンプレッサー
気体の熱媒体を圧縮して高温高圧の気体の熱媒体にします。



四方弁(四路切替弁)
エアコンは、冷房時と暖房時で熱媒体の循環方向を逆転させるのですが、コンプレッサーは熱媒体を一方向にしか流せないため、熱媒体の循環方向を切り替えるのが四方弁の役目です。



熱交換器
室内機の熱交換器と同様です。



室外ファン
室外機の熱交換器に外気を当てて熱交換効率上げるためのファンです。

9

組込み分野のための UML モデルカタログ

冷房運転
冷房運転では、以下のようにして室温を下げます。
1. 熱媒体配管に入っている熱媒体を室外機のコンプレッサーで圧縮する
2. 熱媒体は外気温以上の高温になり、気圧が上がって沸点も上がる
3. 熱媒体配管に室外機の室外ファンで外気を当てて熱媒体の温度を下げる
4. 熱媒体の温度が沸点以下になって液化する
5. 液化した熱媒体を室内機に送る
6. 室内の蒸発器（霧吹きのように小さい穴を通して一気に気圧を下げる）で熱媒体を蒸発させる
7. 熱媒体が気体になって温度が急激に下がり、熱交換器（フィン）が冷える
8. 熱交換器のフィンの間にある空気が冷え、代わりに熱媒体が温くなる
9. 冷えた空気を送風ファンで室内に送風して室温を下げる
10. 気体になった熱媒体は室外機へ戻して再利用（室外機と室内機を循環）する

なお、冷えた熱交換器に結露した水滴（空気中の水分)が付いて水が溜り、室内に溢れないように排水ホースで室外に排水するため、室内の湿度も下がります。

冷房運転時の動作原理簡略図を以下に示します。
冷たい熱媒体(気体)

沸点以下の熱媒体 (液体)
熱交換器

熱交換器
蒸発器
( 膨張弁)
室内

室外

四方弁

室温の熱媒体(気体)

熱い熱媒体(気体)

コンプレッサー

要求仕様

10

エアコン

暖房運転
暖房運転は、熱媒体の循環方向を逆転させ、室外機で圧縮して温度が上がった熱媒体を室内機に送り、室内機で暖まった空気を室内に送風して室温を上げます。
暖房運転の動作原理簡略図を以下に示します。
沸点以下の熱媒体(液体)

冷たい熱媒体(気体)

熱交換器

熱交換器
蒸発器
(膨張弁)
室内

室外
四方
弁
外気温の熱媒体(気体)

熱い熱媒体(気体)

コンプレッサー

除湿運転
除湿運転は、冷房運転で気温を下げることで飽和水蒸気量を減らし、飽和水蒸気量を超えた水蒸気を結露させて水蒸気を減らすことで湿度を下げます。
室温が下がらないように弱冷房運転を続けます。

11

組込み分野のための UML モデルカタログ

ユースケース
ユースケースには、アクターがエアコンに求める価値を記述します。システム設計者はシステム内部からの観点でどのように実現するかを記述しがちなのですが、アクターが何を望んでいるのか、何を実現するのかという観点で記述します。
アクターとして、エアコンの利用者だけがいます。
アクターがしたいことは、基本的にリモコンで操作できることと一緒です。
本カタログモデルで扱うエアコンのユースケース図を以下に示します。
uc ユースケース
エアコン

UC01:暖房運転を開始する

UC02:冷房運転を開始する

UC03:除湿運転を開始する

UC04:設定温度を上げる

UC05:設定温度を下げる

UC06:風量を変更する
利用者
UC07:風向を変更
する

UC08:オフタイ マー
を設定する

UC09:運転を停止
する

図1

要求仕様

12

エアコン

アクター記述■利用者
エアコンをリモコンで操作する利用者です。

13

組込み分野のための UML モデルカタログ

ユースケース記述<UC01：暖房運転を開始する>■概要
暖房運転を開始する
室内温度が設定温度になるよう暖房運転を行う

■アクター
利用者

■事前条件
なし

■事後条件
・暖房運転を行っている■メインフロー
1. アクターは、システムに暖房運転の開始を要求する
2. システムは、暖房運転を開始する
3. システムは、アクターに暖房運転を開始したことを通知する
4. UC を終了する■代替フロー
2a. システムが暖房運転中の場合
2a.1 メインフロー3 に進む
2b. システムが冷房運転中または除湿運転中の場合
2b.1 システムは、現在の運転を中止する
2b.2 システムは、暖房運転を開始する
2b.3 メインフロー3 に進む■例外フローなし■課題や T.B.D 項目
なし

要求仕様

14

エアコン

■備考
設定温度は、アクターが<UC05：設定温度を上げる>および<UC06：設定温度を下げる>で指示する。
温度制御は 1 秒周期で行う。

15

組込み分野のための UML モデルカタログ<UC02：冷房運転を開始する>■概要
冷房運転を開始する
室内温度が設定温度になるよう冷房運転を行う

■アクター
利用者

■事前条件
なし

■事後条件
・冷房運転を行っている■メインフロー
1. アクターは、システムに冷房運転の開始を要求する
2. システムは、冷房運転を開始する
3. システムは、アクターに冷房運転を開始したことを通知する
4. UC を終了する■代替フロー
2a. システムが既に冷房運転を開始していた場合
2a.1 メインフロー3 に進む
2b. システムが暖房運転または除湿運転を開始していた場合
2b.1 システムは、現在の運転を中止する
2b.2 システムは、冷房運転を開始する
2b.3 メインフロー3 に進む■例外フローなし■課題や T.B.D 項目なし■備考
設定温度は、アクターが<UC05：設定温度を上げる>および<UC06：設定温度を下げる>で指示する。
温度制御は 1 秒周期で行う。
要求仕様

16

エアコン

<UC03：除湿運転を開始する>■概要
除湿運転を開始する
室内湿度が快適湿度になるよう除湿運転を行う

■アクター
利用者

■事前条件
なし

■事後条件
・除湿運転を行っている■メインフロー
1. アクターは、システムに除湿運転の開始を要求する
2. システムは、除湿運転を開始する
3. システムは、アクターに除湿運転を開始したことを通知する
4. UC を終了する■代替フロー
2a. システムが既に除湿運転を開始していた場合
2a.1 メインフロー3 に進む
2b. システムが暖房運転または冷房運転を開始していた場合
2b.1 システムは、現在の運転を中止する
2b.2 システムは、除湿運転を開始する
2b.3 メインフロー3 に進む■例外フローなし■課題や T.B.D 項目
・快適湿度

■備考
温湿度制御は 1 秒周期で行う。

17

組込み分野のための UML モデルカタログ<UC04：運転を停止する>■概要
エアコンの運転を停止する

■アクター
利用者

■事前条件
・システムが運転を行っている■事後条件・システムが運転を停止している■メインフロー
1. アクターは、システムに運転の停止を要求する
2. システムは、運転を停止する
3. システムは、アクターに運転を停止したことを通知する
4. UC を終了する■代替フローなし■例外フローなし■課題や T.B.D 項目なし■備考
運転停止では、オフタイマー設定の取消し、送風の停止、フラップを閉じることも行う。

要求仕様

18

エアコン

<UC05：設定温度を上げる>■概要
設定温度を 1℃上げる

■アクター
利用者

■事前条件
・システムが運転を行っている■事後条件
・設定温度が 1℃上がっている■メインフロー
1. アクターは、システムに設定温度を上げるよう要求する
2. システムは、設定温度を 1℃上げる
3. システムは、アクターに設定温度を変更したことを通知する
4. UC を終了する■代替フローなし■例外フロー
2a. 設定温度が最高設定温度の場合
2a.1 UC を終了する■課題や T.B.D 項目
初期設定温度■備考
最高設定温度は 30℃とする。

19

組込み分野のための UML モデルカタログ<UC06：設定温度を下げる>■概要
設定温度を 1℃下げる

■アクター
利用者

■事前条件
・システムが運転を行っている■事後条件
・設定温度が 1℃下がっている■メインフロー
1. アクターは、システムに設定温度を下げるよう要求する
2. システムは、設定温度を１℃下げる
3. システムは、アクターに設定温度を変更したことを通知する
4. UC を終了する■代替フローなし■例外フロー
2a. 設定温度が最低設定温度の場合
2a.1 ユースケースを終了する■課題や T.B.D 項目
初期設定温度■備考
最低設定温度は 18℃とする。

要求仕様

20

エアコン

<UC07：風量を変更する>■概要
室内機の風量を変更する
風量の設定に応じて、室内ファンの回転数制御を行う

■アクター
利用者

■事前条件
・システムが運転を開始している■事後条件
・風量設定に応じた室内ファン制御を行っている■メインフロー
1. アクターは、システムに風量の設定を要求する
2. システムは、風量設定を変更する
3. システムは、アクターに風量設定を変更したことを通知する
4 UC を終了する■代替フローなし■例外フローなし■課題や T.B.D 項目なし■備考
風量は、自動、弱、中、強の順に変更する。

21

組込み分野のための UML モデルカタログ<UC08：風向を変更する>■概要
室内機の送風の方向を変更する
風向設定に応じて、フラップの角度制御を行う

■アクター
利用者

■事前条件
・システムが運転を開始している■事後条件
・風向設定に応じたフラップ制御を行っている■メインフロー
1. アクターは、システムに風向の設定を要求する
2. システムは、風向設定を変更する
3. システムは、アクターに風向設定を変更したことを通知する
4. UC を終了する■代替フローなし■例外フローなし■課題や T.B.D 項目なし■備考
風向は、自動、スイング、固定の順に変更する。

要求仕様

22

エアコン

<UC09：オフタイマーを設定する>■概要
エアコンの運転を自動的に停止するまでの時間を設定する
設定時間経過後、システムは運転を停止する

■アクター
利用者

■事前条件
・システムが運転を開始している■事後条件
・設定時間が 0 (取消) 以外の場合、タイマーが起動している
・設定時間が 0 (取消) の場合、タイマーが停止している■メインフロー
1. アクターは、システムにオフタイマー設定を指示する
2. システムは、オフタイマー設定を変更する
3. システムは、タイマーを起動する
4. システムは、アクターにオフタイマー設定を変更したことを通知する
5. UC を終了する■代替フロー
3a. オフタイマー設定時間が 0 (取消) の場合
3a.1 システムは、タイマーを停止する
3a.2 メインフロー4 に進む■例外フロー・タイマー満了割込みが発生した場合<UC04：運転を停止する>を起動する■課題や T.B.D 項目なし■備考
オフタイマー時間は、1 時間、3 時間、6 時間、0 時間 の順に変更する。
オフタイマー設定時間が 0 時間の場合、オフタイマー設定を取り消す。

23

組込み分野のための UML モデルカタログ

モデル一覧
着目点

コンセプト

ポイント

熱交換の原理に着目したモデル

熱媒体が室内と室外の間を行き来して熱を交換することで室内の温度や湿度を調整していることに着目し、空気と熱媒体がどのような役割を担い、熱がどのように交換されるのかを分析したモデルです。デ
バイスを切り離して考えることで、デバイスに左右されずに末長く使えるモデルです。

動作原理を抽象化してモデリングすることで、実世界の環境や物質や現象をモデルとして捉えることができるモデルです。

ソフトウェアで制御する対象に着目したモデル

暖房・冷房・除湿の主要 3 機能とそれを実現するためのデバイスとの関係に着目し、各機能を担う制御部分と、利用するデバイスとの関係を中心にモデルで表現しました。

直感的でイメージしやすい、モデリングにあまり馴染みのない方にも理解しやすいモデルです。

モデル一覧

24

エアコン

熱交換の原理に着目したモデル
モデリングのコンセプト
エアコンの動作原理を抽象化し、エアコンの動作に欠かせない熱交換を中心に考え、空気と熱媒体の関係を捉えながら、熱交換を実現するために必要なデバイスを付け加えていきます。
動作原理をモデル化することにより、部品の性能やサイズなどにとらわれず、性能改善や製品のシリーズ化に対応でき、長年に渡って使い続けられるモデルにします。
動作原理に着目した分析モデルまでを掲載してあります。

概念モデル
分析モデルを作成する前に、利用者から見たエアコンは何に対して何をするものなのか単純なモデルを作り、それをブレークダウンして全体のモデル構成を考えてみます。
その際、ユースケースやエアコンの部品にとらわれず、エアコンの動作原理の本質的な状態や動作を考え、無形物でもクラス化し責務を与えてみます。それらの動作を実現するために分析モデルや設計モデルでエアコンの部品の利用や置き換えを考えていきます。
まずは、利用者の視点から見た大雑把なエアコンクラスです。「エアコン」は「利用者」の指示に従い「室内の空気」の温度や湿度を快適に調整できれば利用者を満足させることができます。その単純モデルを以下に示します。

class 概念クラス図（ユーザイ ンタフェース）
エ アコン
運転モード
設定温度
設定風量
設定風向
オフタイマー残時間

利用者

暖房()
冷房()
除湿()
停止()
温度を上げる()
温度を下げる()
風量を変える()
風向を変える()
オフタイマーを設定する()

室内の空気

図2

25

概念モデル

組込み分野のための UML モデルカタログ

エアコンは、室内の空気の温度、湿度、風量、風向を調整できれば利用者を満足させることができるので、「温度」「湿度」「風量」「風向」の属性を持った「室内の空気」をクラスにします。
「エアコン」と「室内の空気」の関係を以下のクラス図に示します。エアコン(エアー・コンディショナー)が室内の空気(エアー)の温度、湿度、風量、風向を調整(コンディション)できればいいのですから、理想的な関係と言えます。
空気を数えることはできませんが「室内の空気」をひとつの塊と捉えて多重度を 1 にしています。

class 概念クラス図（理想）
エ アコン

室内の空気

運転モード
設定温度
設定風量
設定風向
オフタイマー残時間

調整元
1

調整対象 温度
湿度
1 風量
風向

暖房()
冷房()
除湿()
停止()
温度を上げる()
温度を下げる()
風量を変える()
風向を変える()
オフタイマーを設定する()
図3「エアコン」が「室内の空気」の温度(室温)を調整するには、「室内の空気」に対して加熱や冷却を依頼できればいいのですが、そういうわけにもいきません。エアコンの動作原理で説明されているように、「熱媒体」を加圧(圧縮)すると加熱でき、減圧(蒸発)させると冷却できることを利用して、「熱媒体の熱」と「室内の空気の熱」とを熱交換することで「室内の空気」の温度を調整します。
「エアコン」が「室内の空気」の湿度を下げる(除湿する)には、「室内の空気」に含まれる水分(水蒸気)を室外に排出することで実現します。水蒸気には温度に応じた飽和水蒸気量があり、気温を下げると飽和水
蒸気量が減ります。飽和水蒸気量を超えた水蒸気(気体)は結露して水滴(液体)になり、水蒸気が減って湿度が下がります。
室内の温度と湿度を調整するための熱交換に関するオブジェクト図を以下に示します。
object 概念オブジェクト図（熱交換）室内の水蒸気

含む

室内の空気

熱交換する

冷媒

室外の空気

持つ

持つ

持つ

室内の熱

冷媒の熱

室外の熱

図4

熱交換の原理に着目したモデル

熱交換する

26

含む

室外の水蒸気エアコン

オブジェクト図のうち、熱を持つものを熱媒体として汎化し、室内と室外の空気をひとつにまとめたクラス図を以下に示します。

class 概念クラス図（熱交換）
冷媒の熱交換先は室内および室外の空気で多重度2室内および室外の空気の熱交換先は冷媒で多重度1
交換先
1..2

熱交換する

熱媒体
温度

交換元
1

熱
量

持つ
1

1

冷媒
圧力
状態

空気
湿度
風量
風向
飽和水蒸気量

水蒸気
含む
1

量
1

図5

水蒸気は数えられませんが、空気同様にひとつの塊と捉えて多重度を 1 にしています。
水蒸気にも温度がありますが、空気の温度と同じと考えます。

「エアコン」は、熱交換を利用し、室内温度が設定温度になるように調整(制御)するので、温湿度を制御する「温湿度制御」クラスを導入します。「温湿度制御」は「運転モード」に応じて「暖房」、「冷房」、「除湿」があり、それぞれ適切な温湿度制御を行います。
「温湿度制御」のクラス図を以下に示します。

27

概念モデル

組込み分野のための UML モデルカタログ

class 概念クラス図（温湿度制御）
暖房

運転モード
運転状態

冷房

設定温度

気流設定
設定風量
設定風向

1

1

1

選択する

参照する

参照する

0..1

0..1

0..1

除湿

温湿度制御
動作状態
制御状態

図6

熱交換の原理に着目したモデル

温度設定

28

エアコン

最後に、「ユーザインタフェース」と「温湿度制御」と「熱交換」をドメインにした全体のクラス図を以下に示します。破線枠で囲んだ部分が各ドメインです。
リモコンで操作できるオフタイマーのクラスを追加してあります。
オフタイマーと運転モードは温湿度制御の切り替えを行うので、ドメインを分けるのがよさそうです。

class 概念クラス図（全体）
ユーザインタフェース
リモ コン

1

1

1

1

1

1

1

温湿度制御
1

運転制御

オフタイ マー設定時間

運転モ ード

停止する
1

1

温度設定

気流設定

運転状態

設定温度

設定風量
設定風向

1

1

1

選択する

参照する

参照する

0..1

0..1

0..1

暖房

冷房

温湿度制御
動作状態
制御状態

除湿

熱交換

0..1

0..1

制御する

監視する

1

1

冷媒
圧力
状態

空気
湿度
風量
風向
飽和水蒸気量

水蒸気
含む
1

交換先
1..2
熱媒体
温度

量
1

熱交換する
熱

交換元
1
持つ
1

量
1

図7

29

概念モデル

組込み分野のための UML モデルカタログ

分析モデル
概念モデルを参考にして、ユースケースを実現するための分析モデルを作成します。

エアコンのパッケージ構成
エアコンの機能を構成するパッケージ構成を以下に示します。

パッケージ構成
pkg パッケージ 図
ユーザイ ンタフェース

運転制御

温湿度制御

熱交換

デバイ ス

図8

パッケージ名説明

ユーザインタフェース

ユーザがリモコンを使って操作した要求を処理する。
ユースケースでは赤外線リモコンで操作することになっているが、スマートフォン
による操作にも対応できるようなデバイスに依存しない作りにしておく。

運転制御

運転選択およびオフタイマー操作により温湿度制御に指示を出す。
運転開始・停止時にフラップの開閉なども行う。

温湿度制御

暖房、冷房、除湿に応じた温湿度制御を行う。
設定温度や室内の温湿度などから熱交換を制御する。
モデルカタログ部品編の目標制御を利用できる。

熱交換

熱媒体の熱と空気の熱を移動し、室内の空気の加熱、冷却、除湿を行う。

デバイス

エアコンで使われる物理装置を扱う。
物理装置が変わっても相違をデバイスパッケージ内で吸収し、上位に影響を与えないようにする。

熱交換の原理に着目したモデル

30

エアコン

熱交換パッケージ
エアコンの動作原理である熱交換をモデル化します。
熱交換は、室内の空気と冷媒、および、室外の空気と冷媒の間で行われる自然現象で、直接制御することはできませんが、冷媒を圧縮したり蒸発させたりすることで冷媒の温度を変化させ、空気を送風して冷媒に触れさせることで熱交換を促すことができます。
熱交換パッケージでは、熱交換に使うデバイスが、何のためにどのように使うかを明確にし、デバイスを使うための仮想インタフェースを提供します。
エアコンの動作原理は基本的には変わらないため、製品のシリーズ化や機能追加、使用部品の変更に影響されにくいしっかりとしたモデル構造を提供します。

静的モデル
熱交換のオブジェクト構成
object オブジェクト図（熱交換）
室内の空気

冷媒

室外の空気

図9

熱交換は、室内の空気と冷媒、および室外の空気と冷媒の間で行われます。
空気も冷媒も熱を持っていて熱交換できる熱媒体と捉えることができます。

31

分析モデル

組込み分野のための UML モデルカタログ

熱交換のクラス構成
class クラス図（熱交換）
熱交換先
1..2
熱媒体
温度

熱交換する
熱交換元
1

熱交換する(相手)

冷媒<<enumeration>>
空間

空気

圧力
状態

湿度
空間

室温を上げる(温度調整量)
室温を下げる(温度調整量)

温度を計る()
湿度を計る()
風量を設定する(風量)風向を設定する(風向)

室内
室外

図10

クラス名

説明

熱媒体

温度(熱)を持っていて、熱交換できるもの。冷媒も空気も熱媒体の一種。
分析モデルでは熱媒体クラスが熱クラスを持っていたが、熱は温度を知るために存在していただけなので、熱クラスは熱媒体クラスの温度属性に集約した。
熱媒体は気体あるいは液体で数えることはできないが、小さな塊と捉えて数えることにして多重度とした。

冷媒

エアコン内を循環する冷媒の様子を捉えたもの。
冷媒を利用して室内の温度を上げたり下げたりする。
冷媒はエアコン内の区間毎に圧力や状態が異なっている。
区間毎の冷媒に着目し、エアコン内を循環する間に圧力や状態が変化する様子
を表す。

空気

室内の空気と室外の空気を集約したクラス。
自然界の空気は直接制御することはできないが、空気をクラスにすることで、空気の温度変化をエミュレートするインスタンスを割り当てて、デバッグしたり動作を可視化するといったことが可能になる。
概念モデルでは飽和水蒸気量属性および水蒸気クラスがあったが、湿度が分かれば十分なので省いた。
クラス図だけをみると室内の空気と室外の空気で直接熱交換できるように思えるが、交換先と交換元によって熱交換する相手を限定している。現実世界では、窓や壁が熱交換器となって室内の空気と室外の空気の熱交換が行われ、夏の室内は徐々に暑くなってしまう。

空間

空気が存在する空間。本エアコンが対象にする空間は室内か室外のいずれか。

熱交換の原理に着目したモデル

32

エアコン

動的モデル
暖房運転時に室内の温度を上げたいと思ったときには、室内の空気か冷媒に依頼すると、あとはよろしく仕事してくれるのが理想的です。
本モデルでは、その役割を冷媒に持たせることにします。
冷媒に「室温を上げてくれ」と依頼すると、冷媒は自分を圧縮すれば温度が上がることを知っているので、デバイスに冷媒を加圧するよう依頼します。
圧縮して温度が上がった冷媒は、室内に移動して室内の空気と熱交換することで室温が上がります。ただし、冷媒が室内に移動することで勝手に熱交換が始まるので、実際には熱交換メソッドを呼び出すわけではありません。冷媒が移動することでメソッドを呼び出しているのと同等であると分析しました。
冷媒が空気と熱交換する際には、ファンを回して熱交換を促します。実際には熱交換の際にファンを回す
わけではありませんが、熱交換を促すためにファンを回すものとして分析しました。
その後、冷媒は、減圧して温度を下げ、室外に移動して室外の空気と熱交換し、元の状態に戻ります。

暖房運転時の熱交換相互作用
sd コミュニケーション図（熱交換、暖房運転）

温湿度制御
1: 室温を上げる(制御量)
室内 :空気3: 熱交換する(熱媒体):冷媒

3.2: 熱交換完了()

5: 熱交換する(熱媒体)

室外 :空気5.2: 熱交換完了()

2: 冷媒を加圧する(加圧率)4: 冷媒を減圧する(減圧率)2.1: 加圧完了()

4.1: 減圧完了()

3.1: 室内ファンの回転数を設定する(回転数)5.1: 室外ファンの回転数を設定する(回転数)

デバイ ス
図11

33

分析モデル

組込み分野のための UML モデルカタログ

冷房運転時の熱交換相互作用
sd コミュニケーション図（熱交換、冷房運転）

温湿度制御
1: 室温を下げる(制御量)
室内 :空気5: 熱交換する(熱媒体):冷媒

5.2: 熱交換完了()

室外 :空気3.2: 熱交換完了()

4: 冷媒を減圧する(減圧率)2: 冷媒を加圧する(加圧率)4.1: 減圧完了()

2.1: 加圧完了()

5.1: デバイス.室内ファンを回す(回転数)3.1: デバイス.室外ファンを回す(回転数)

デバイ ス
図12

熱交換の原理に着目したモデル

3: 熱交換する(熱媒体)

34

エアコン

冷媒の状態は制御対象ではありませんが、デバイスを利用して冷媒を圧縮、減圧、熱交換することにより、冷媒の状態が気体、液体、高温、低温と変化します。要求仕様の冷媒の説明した冷媒がトラックとなって熱を運ぶ様子を UML で書くと以下のステートマシン図のように表現できます。このように、前提知識となる
動作原理もモデル化しておくことで、理解を助け、100 年後でも利用できるモデルを残すことができます。

冷媒のステートマシン
stm ステートマシン図（冷媒）{暖房のとき、熱交
換先は室外の空気}+

常温常圧気体熱交換完了

do / デバイス.加圧する(加圧率)停止

高温高圧気体++do / 熱交換先.熱交換する(熱媒体)

減圧完了
常温高圧液体熱交換完了

do / 熱交換先.熱交換する(熱媒体){暖房のとき、熱交
換先は室内の空気}

低温常圧気体

停止

停止

加圧完了

{冷房および除湿のとき、熱交換先は室内の空気}+

do / デバイス.減圧する(減圧率){冷房および除湿のとき、熱交換先は室外の空気}

図13

なお、実際には、停止によってすぐに常温常圧に戻るわけではなく、ゆっくり時間をかけて常温常圧に戻
ります。

35

分析モデル

組込み分野のための UML モデルカタログ

温湿度制御パッケージ
前述の熱交換パッケージは、熱を交換することに着目し、室温を上げたり下げたりできますが、室温を目標温度に近づけるための細かな制御は、温湿度制御パッケージが行います。
温湿度制御パッケージでは、温湿度、風量、風向の設定値と現在値を比較して熱交換に必要な制御量を算
出し、熱交換を制御します。
温湿度制御の制御則は、組込みモデルカタログ部品編の目標制御を利用することとし、制御則についてはモデリング対象外とします。詳しくは組込みモデルカタログ部品編の目標制御を参照してください。

静的モデル
オブジェクトとして、温度設定と気流設定、および、暖房、冷房、除湿の各運転に特化した温度制御と気流制御が組で存在します。

温湿度制御のオブジェクト構成
object オブジ ェクト図（温湿度制御）

温度設定

暖房温度制御暖房気流制御冷房温度制御冷房気流制御除湿温度制御除湿気流制御図14

熱交換の原理に着目したモデル

36

気流設定

エアコン

温湿度制御のクラス構成
class クラス図（温湿度制御）

ユーザイ ンタフェース
操作する

操作する

温度設定

気流設定

設定温度
最高温度 {readOnly}
最低温度 {readOnly}
運転制御
運転する

変更する()

上げる()
下げる()
1

暖房温度制御

設定風量
設定風向

1

参照する

*

温湿度制御

気流制御

制御状態
/目標温度
/現在温度
冷房温度制御開始する()
終了する()

除湿温度制御目標湿度 {readOnly}

参照する

*

制御状態
目標風量
目標風向

連携する
1

暖房気流制御1開始する()
連携する(温度差)終了する()

冷房気流制御除湿気流制御

制御する

制御する

熱交換

暖房温度制御は暖房気流制御と連携
冷房温度制御は冷房気流制御と連携
除湿温度制御は除湿気流制御と連携

図15

クラス名

説明

温度設定

設定された温度を保持する。

気流設定

設定された風量、風向を保持する。

温湿度制御

暖房温度制御、冷房温度制御、除湿温度制御のベースクラス。
開始と終了という統一インタフェースを提供する。

気流制御

気流（風量、風向）を制御するためのベースクラス。

暖房温度制御温湿度制御の開始指示により暖房の温度制御を行う。

冷房温度制御温湿度制御の開始指示により冷房の温度制御を行う。

除湿温度制御温湿度制御の開始指示により除湿の温湿度制御を行う。

暖房気流制御暖房温度制御と連携し、暖房に適した気流制御を行う。

冷房気流制御冷房温度制御と連携し、冷房に適した気流制御を行う。

除湿気流制御除湿温度制御と連携し、除湿に適した気流制御を行う。

37

分析モデル

組込み分野のための UML モデルカタログ

動的モデル

暖房温度制御の相互作用
sd シーケンス図（暖房温度制御）:暖房温度制御

温度設定:暖房気流制御

運転制御

熱交換開始する()

開始する()

loop[停止されるまで]
温度調整量= 温度制御量を算出する()
目標温度= 設定温度を取得する()
現在温度= 室温を計る()
室温を上げる(温度制御量)
連携する(温度差)

図16

熱交換の原理に着目したモデル

38

エアコン

暖房気流制御の相互作用
sd シ ーケンス図（暖房気流制御）:暖房温度制御:暖房気流制御

気流設定
熱交換開始する()
loop 停止するまで連携する(温度差)

風量設定を確認する()
alt 自動風量制御[風量設定 == 自動]
風量= 風量を算出する()
風量を設定する(風量)風向設定を確認する()
alt 自動風向制御[風向設定 == 自動]風向を算出する()
風向を設定する(風向)1秒間待つ()

図17

39

分析モデル

組込み分野のための UML モデルカタログ

暖房温度制御のステートマシン
stm ステートマシン図（暖房温度制御）
停止中+

entry / 熱交換.停止する()

開始

停止

動作中
+
+

entry / 温度制御量を算出する()
do / 熱交換.室温を上げる(温度制御量)

after(1秒)

図18

冷房温度制御のステートマシン
stm ステートマシン図（冷房温度制御）
停止中+

entry / 熱交換.停止する()

開始

停止

動作中
+
+

entry / 温度制御量を算出する()
do / 熱交換.室温を下げる(温度制御量)

after(1秒)

図19

除湿温度制御のステートマシン
stm ステートマシン図（除湿温度制御）
停止中+

entry / 熱交換.停止する()

開始

停止

動作中
+
+

after(1秒)

entry / 温度制御量を算出する()
do / 熱交換.室温を下げる(温度制御量)

図20

熱交換の原理に着目したモデル

40

エアコン

運転制御パッケージ
運転制御パッケージでは、ユーザインタフェースから運転選択およびオフタイマー設定情報を保持し、温湿度制御の切り替えを行います。
オフタイマーは、設定時間待ってから運転モードを停止にします。

静的モデル
運転制御パッケージでは、暖房、冷房、除湿、停止の運転操作に対する処理を受け付けます。また、オフ
タイマー設定操作も受け付け、オフタイマー設定時間後に運転停止を実行します。

運転制御のオブジェクト構成
object オブジェクト図（運転制御）
オフタイマー

運転モード

図21

41

分析モデル

組込み分野のための UML モデルカタログ

運転制御のクラス構成
class クラス図（運転制御）

ユーザイ ンタフェース
操作する

操作する

オフタイ マー運転モ ード動作状態
設定時間
設定する()
停止()

停止する
1

<<enumeration>>
運転状態

運転状態
温湿度制御

停止中
暖房中
冷房中
除湿中

1 暖房()
冷房()
除湿()
停止()

制御する

運転する
制御する

デバイ ス

温湿度制御

図22

クラス名

説明

運転モード

暖房、冷房、除湿、停止はオブジェクトにせずに、それぞれをメソッドにしたクラスで運転操作を受け付ける。
暖房、冷房、除湿、停止のどれが操作されたかを保持し、運転操作に応じた温湿度制御に対して運転を指示する。
暖房、冷房、除湿開始時にはフラップを開き、停止時にはフラップを閉じる。

オフタイマー

オフタイマーの制御を行う。
オフタイマー時間が設定された場合は、設定時間後にイベントが発生し、運転モードを停止にする。
オフタイマーが取り消された場合はイベント発生を取り消す。
リモコンの停止ボタンが押された場合にもオフタイマーを停止する。

熱交換の原理に着目したモデル

42

エアコン

動的モデル

運転モードのステートマシン
stm ステートマシ ン図（運転モ ード）

停止中
entry / デバイス.停止する()
冷房/デバイス.開始する()

暖房/デバイス.
開始する()

停止

除湿
/デバイス
.開始する()

運転中
暖房中
entry / 温湿度制御.開始する()
exit / 温湿度制御.停止する()
冷房

除湿
暖房

暖房

冷房中

除湿中
除湿

entry / 温湿度制御.開始する()
exit / 温湿度制御.停止する()

entry / 温湿度制御.開始する()
exit / 温湿度制御.停止する()
冷房

図23

43

分析モデル

組込み分野のための UML モデルカタログ

オフタイマーのステートマシン
stm ステートマシ ン図（オフタイ マー）

停止中

オフタイマー設定[設定時間 > 0]when(オフタイマー
設定時間経過) /運転モード.停止()

オフタイマー設定[設定時間 <= 0]

停止

作動中
+
+

オフタイマー設定[設定時間 > 0]entry / デバイス.タイマー.起動(時間)exit / デバイス.タイマー.停止( )図24

熱交換の原理に着目したモデル

44

エアコン

デバイスパッケージ
静的モデル
デバイスのオブジェクト構成
object オブジ ェクト図（デバイ ス）
室内機

室外機
室内温度センサー

室外温度センサー

室内湿度センサー

蒸発器

室外熱交器

室内熱交換器四方弁

オフタイ マー

コンプレッサー

室内ファン

室外ファン

室内フラップ

図25

45

分析モデル

組込み分野のための UML モデルカタログ

デバイスのクラス構成
class クラス図（デバイ ス）
連携する

室内機
開始する()
停止する()

内蔵する

温度センサー
1 温度

0..1
湿度センサー
内蔵する

内蔵する
1

開始する()
停止する()

0..1

計る()

湿度

1 計る()

1

室外機

蒸発器
開口度

内蔵する

設定する(開口度)
1 減圧する()

1

1 室内口

室外口 1

室内 1

1 室外

内蔵する

熱交換器

1

0..1
タイ マー
内臓する 設定時間
動作状態
1
1
開始(設定時間)
停止()

室内 1

1 室外

1 室内口

室外口 1

四方弁

フラップ
内蔵する 動作状態
角度
11設定する(角度)

1 出口

入口 1

1 入口

出口 1

内蔵する
1

1

内蔵する

動作状態
圧力

1

設定する(圧力)加圧する()

動作状態
回転数

1 回す(回転数)

0..1

コンプレッサー

ファン

0..1

1

循環方向
設定する(循環方向)

内蔵する

内蔵する

内蔵する

1

1

0..1

図26

クラス名

説明

室内機

室内機に存在するデバイスを管理する。
室外機と連携動作する。

室外機

室外機に存在するデバイスを管理する。

コンプレッサー

冷媒を圧縮して高圧にする。これにより冷媒の温度が上がる。

四方弁

冷房運転か暖房運転かにより、コンプレッサーからの冷媒を室内に送るか室外に送るかを切り替える。

熱交換器

冷媒と空気の熱を交換し、温度を平準化する。

熱交換の原理に着目したモデル

46

エアコン

蒸発器

圧縮して液体化した冷媒を常圧の気体に戻す。これにより冷媒の温度が下がる。

温度センサー

温度を計る。

湿度センサー

湿度を計る。

ファン

空気が流れる速度を調整する。

フラップ

空気が流れる向きを調整する。

47

分析モデル

組込み分野のための UML モデルカタログ

ユーザインタフェースパッケージ
ユーザインタフェースはエアコンの本質部分から外れるため、モデルの記載は省略します。
EA モデリングデータには入っていますので、必要であれば参照してください。

熱交換の原理に着目したモデル

48

エアコン

PIM 設計モデル
モデリングのコンセプト
分析モデルにおいて、エアコンの本質的な動作原理に着目することにより、本質的な熱交換部分とそれ以外の部分が分離されており、パッケージ間は疎結合で、かつ各パッケージは凝集度が高い構造になっていました。この特徴を踏まえ、下記のような設計課題を解決するため、設計においても、分析モデルのパッケー
ジ構成を踏襲し、かつ、パッケージ毎に Facade パターンを適用し、パッケージ毎の独立性を高める設計とします。（Facade IF を変えなければ、パッケージ毎に差し替え可能な構造とします）。


パッケージ毎に設計、開発ができるようにします。



派生開発することを考慮し、パッケージ毎に差し替え可能な構造とします。

49

PIM 設計モデル

組込み分野のための UML モデルカタログ

パッケージ構成
エアコンの機能を構成するパッケージ構成を以下に示します。
メモリ管理やタイマー管理などの OS が提供するシステムコールやライブラリ機能については Common
パッケージにあるものとし、説明を省略します。

パッケージ構成
pkg パッケージ 図
UI

OperationControl

CommonTemperatureControl

HeatExchange

Device

図27

PIM 設計モデル パッケージ名

分析モデル パッケージ名 および 説明

UI

ユーザインタフェース。

OperationControl

運転制御。冷房、暖房、除湿、停止の切替を行う。

TemperatureControl

温湿度制御。制御アルゴリズムを持ち、HeatExchange パッケージを利用することにより、温度制御を行う。

HeatExchange

熱交換。Device パッケージを利用して、熱交換を促す。

Deviceハードウェア部品。ハードウェアデバイスをラップし、他のパッケージから扱いやすいインタフェースを提供する。

CommonOS システムコール、OS 標準ライブラリ。

熱交換の原理に着目したモデル

50

エアコン

静的モデル
Facade パターンを実現するため、各パッケージはインタフェース pkgFacade を実装したクラスを必ず持つことにします。

パッケージ初期化クラス構成
class 電源接続時処理
UI<<instantiate>>
OperationControl
AirConditionerBuilder<<instantiate>><<instantiate>><<instantiate>>

TemperatureControl

HeatExchange<<instantiate>>
Device

図28

PIM 設計モデル クラス名

分析モデル クラス名 および 説明

AirConditionerBuilder

起動時における各パッケージの生成処理、およびそのインスタンス管理。

pkgFacade

パッケージ共通インタフェース。Facade パターンを実現するためのインタフェース<<interface>>。

UI

ユーザインタフェース。pkgFacade を実現した UI パッケージの Facade。

OperationControl

運転制御。pkgFacade を実現した OperationControl パッケー
ジの Facade。

TemperatureControl

温湿度制御。pkgFacade を実現した TemperatureControl パ
ッケージの Facade。

HeatExchange

熱交換。pkgFacade を実現した HeatExchange パッケージのFacade。

Deviceデバイス。pkgFacade を実現した Device パッケージのFacade。

51

PIM 設計モデル

組込み分野のための UML モデルカタログ

動的モデル
電源接続時に AirConditionerBuilder が各パッケージの pkgFacade を生成し、pkgFacade がパッケージ
内部のインスタンス生成と初期化を行います。初期化処理は init()関数で行います。init()関数の戻り値は、
実行エラーに加えて、コンストラクタ実行時にエラー（OS リソース生成エラー等）が発生していればそれも返せます。

電源接続時処理シーケンス
sd シ ーケンス図(電源接続時処理):AirConditionerBuilder:Device:TemperatureControl:OperationControl:HeatExchange:UI
init()

init()

init()

init()

init()

図29

熱交換の原理に着目したモデル

52

エアコン

UI パッケージ
ユーザインタフェースはエアコンの本質部分から外れるため、モデルの記載は省略します。

53

PIM 設計モデル

組込み分野のための UML モデルカタログ

OperationControl パッケージ
静的モデル
このパッケージは、運転状態を保持し、運転の切り替え（暖房、冷房、除湿、停止）を行います。また、
OffTimer がタイマーによる停止処理およびその設定を行います。

OperationControl のクラス構成
class OperationControl<<interface>>
pkgFacadeOperationControl#<<active>>
Thread

+
+
+
+
+
+
+

run(): int

1-offTimer+

expire(): int

init(): int

1

1

1

-operation
OperationMode

OffTimer<<interface>>
TimerL istener+init(): int
cooler(): int
heater(): int
dehumidifier(): intstop(): int
chgOffTimer(): int
stopOffTimer(): int-

status: OffTimerStatus = ready
offTime: OffTime = none+++

expire(): int
set(): int
cancel(): int

1-operation +
stop
1 +
+
+

status: OperationStatus
heater(): int
cooler(): int
dehumidifier(): intstop(): int<<enumeration>>
OffTime<<enumeration>>
OffTimerStatus<<enumeration>>
OperationStatusnone = 0
after1 = 1
after3 = 2
after6 = 3

ready = 0
run = 1stop = 0
heater = 1
cooler = 2
dehumidifier = 3

図30

PIM 設計モデル クラス名

分析モデル クラス名 および 説明

OperationControl

運転制御。冷房、暖房、除湿、停止を行う Facade。

OperationMode

操作モード。現在の OperationStatus を保持します。

OperationStatus

操作状態。
stop: 停止
heater: 暖房
cooler: 冷房
dehumidifier: 除湿

OffTimer

オフタイマー。設定された時間になると OperationModeの stop を呼び出し、運転を停止させる。

OffTimerStatus

オフタイマー状態。
ready：停止中
run：稼働中

熱交換の原理に着目したモデル

54

エアコン

OffTimeオフタイマー設定時間。
none：設定無し
after1：1 時間後停止
after3：3 時間後停止
after6：6 時間後停止

Thread他の処理と並列実行できるタスクを実現する基底クラス。

TimerListener

タイマー設定時間経過時コールバックインタフェース。

TimerStatus

タイマー動作状態。
ready: 停止中
active: 作動中

動的モデル「暖房運転中に冷房運転に切り替える」ユースケース 02 の代替フロー2b のシーケンスを下記に示します。暖房運転中が前提なので OperationMode インスタンスの cooler()関数内での現在のステータスによる実行判断の条件分岐が省かれています。OperationMode が最初に呼出す stop()が、運転中である暖房の停止。次に呼出す cooler()が冷房開始要求です。

ユースケース 02:冷房運転開始時のシーケンス図
sd UC02:冷房運転開始@OperationControl
UI:Operation

OperationControl:OperationControl:OperationModecooler()cooler()ref
暖房運転停止@TemperatureControl

stop()

cooler()refUC02:冷房運転開始@TemperatureControl

図31

55

PIM 設計モデル

組込み分野のための UML モデルカタログ

ユースケース 07:運転停止時のシーケンス図
sd UC07:運転停止@OperationControl
UI

OperationControl:Operation:OperationControl:OperationMode:OffTimer

TemperatureControl

Common:TemperatureControl:Timerstop()
cancel()cancel()stop()
alt[status != stop]
stop()

図32

熱交換の原理に着目したモデル

56

エアコン

並行性設計とオブジェクトグループ
class OperationControl<<interface>>
pkgFacadeOperationControl<<active>>
Thread

+
+
+
+
+
+
+

run(): int

1#
expire()処理スレッド-offTimer<<interface>>
TimerL istener+

expire(): int

init(): int
cooler(): int
heater(): int
dehumidifier(): intstop(): int
chgOffTimer(): int
stopOffTimer(): int+

init(): int

UI スレッド1

1

1-operation
OperationMode

OffTimer-status: OffTimerStatus = ready
offTime: OffTime = none+++

expire(): int
set(): int
cancel(): int

1-operation +
stop
1 +
+
+

status: OperationStatus
heater(): int
cooler(): int
dehumidifier(): intstop(): int<<enumeration>>
OffTime<<enumeration>>
OffTimerStatus<<enumeration>>
OperationStatusnone = 0
after1 = 1
after3 = 2
after6 = 3

ready = 0
run = 1stop = 0
heater = 1
cooler = 2
dehumidifier = 3

図33

OperationMode は図 33 に示すように、楕円と長方形それぞれで囲んだ２つのオブジェクトグループに属し、UI スレッド（UI→OperationControl 経由）、と、OffTimer の expire()処理スレッドの両レイヤー
から並行してアクセスされる可能性があります。そのため、ＯＳの標準的な排他制御機構を利用して排他制
御を行います（ただし、同時にアクセスされる可能性があるメソッドは stop()のみのため、stop()のみ排他制御を行います）。

57

PIM 設計モデル

組込み分野のための UML モデルカタログ

TemperatureControl パッケージ
静的モデル
室内の温度や湿度が設定値に近づくように、熱好感を利用して気温と気流を制御するパッケージです。
温度制御は独立した制御ループを持つ AirConditioner（Thread のサブクラス）によって行います。目標
温度は上位パッケージ OprationControl から設定値として設定され、現在値（温度）は、下記のパッケージである HeatExchange パッケージから取得します。
気流制御は温度制御から呼ばれ、独立したタスクとしては動作しません（温度制御の制御ループの中で実行されます）。

熱交換の原理に着目したモデル

58

エアコン

温湿度制御のクラス構成
class TemperatureControl<<interface>>
pkgFacade+init(): int<<enumeration>>
AirCurrentSpeed
auto = 0
low = 1
mid = 2high = 3

TemperatureControl-temperatureSetting

1-

current: AirConditioner

+
+
+
+
1 +
1 +
+
+
+

init(): int
cooler(): int
heater(): int
dehumidifire(): intstop(): int
chgTemperaturUp(): int
chgTemperaturDown(): int
chgAirCurrentSpeed(): int
chgAirCurrentDir(): int<<enumeration>>
AirCurrentDir

1

auto = 0
swing = 1
fix = 2
1

TemperatureSetting-

targetTemperature: double = 28
targetHumidity: double = 60 {readOnly}
maxTemperature: double = 30 {readOnly}
minTemperature: double = 16 {readOnly}

+
+
+
+

up(): int
down(): int
getTargetTemperature(): double
getTargetHumidity(): double-targetData<<active>>
Thread1#-

speedType: AirCurrentSpeed = auto
dirType: AirCurrentDir = auto

+
+
+
+

chgSpeedType(): int
chgDirType(): int
getSpeedType(): AirCurrentSpeed
getDirType(): AirCurrentDir-controlData

run(): int-conditioner

3

3

AirCurrent

AirConditioner
+
+
~
#

1
refer

refer
3

-currentSetting

AirCurrentSetting

status: AirConditionerStaus-currentstart(): intstop(): int
control(): int

1

cooperate

calcContValue(): int

#
#
1 ~
#
#
+

status: AirCurrentStaus
speed: double
dir: double
control(diff): int

calcContSpeed(diff): int
calcContDir(diff): intstop(): int

CoolerAirCurrent

HeaterCoolerDehumidifire
HeaterAirCurrent

DehumidifierAirCurrent<<enumeration>>
AirCurrentStaus<<enumeration>>
AirConditionerStaus

ready = 0
drive = 1

ready = 0
drive = 1
図34

[Heater/ HeaterAirCurrent]、[Cooler/ CoolerAirCurrent]、[Dehumidifire/DehumidifireAirCurrent]
クラスの各インスタンスは、各運転モードにおいてそれぞれいずれかしか利用されませんが、インスタンス
生成は起動時に TemperatureControl によって全て生成されます。これは利用都度の生成／削除、つまりヒープメモリの確保／解放を繰り返すことによりメモリ不足に陥るリスクを避けるためです。

59

PIM 設計モデル

組込み分野のための UML モデルカタログ

PIM 設計モデル クラス名

分析モデル クラス名 および 説明

pkgFacade

Facade パターンを実現するための、パッケージ共通インタフェース。

TemperatureControl

温湿度制御。このパッケージの Facade。

TemperatureSetting

温湿度設定。目標温度、湿度を保持する。

AirConditioner

空調制御。制御ループを持ち、目標温度、湿度に近づくように制御を行う。

AirConditionerStatus

空調制御状態。
ready: 停止中
drive: 動作中

Heater

暖房制御。AirConditioner のサブクラスで、暖房の制御アルゴリ
ズムを持つ。

Cooler冷房制御。AirConditioner のサブクラスで、暖房の制御アルゴリ
ズムを持つ。

Dehumidifire

除湿制御。AirConditioner のサブクラスで、暖房の制御アルゴリ
ズムを持つ。

AirCurrentSetting

気流設定。風量、風向の設定値を保持する。

AirCurrentSpeed

設定風量。
auto: 自動low: 低mid: 中high: 高AirCurrentDir

設定風向。
auto: 自動swing: スイング
fix: 固定AirCurrent

気流制御。AirCurrentSetting に従い、気流を制御する。フィードバック制御ループを持たず、AirConditioner から呼ばれること
により動作する。AirCurrentSetting の設定値（風量、風向）がAuto であれば、Auto に設定されている項目は、AirConditioner
からの渡される温度差を参照し風量、風向を決める。Auto 以外
であれば、AirCurrentSetting の設定値に従い風向と風速を制御する。

AirCurrentStatus

気流制御状態。
ready: 停止中
drive: 動作中

HeatingAirCurrent

暖房気流制御。Heater クラスからのみ利用される。

CoolingAirCurrent

冷房気流制御。Cooler クラスからのみ利用される。

DehumidificationAirCurrent

除湿気流制御。Dehumidifire クラスからのみ利用される。

Thread

並列処理。

熱交換の原理に着目したモデル

60

エアコン

動的モデル
図 31「ユースケース 02：冷房運転開始時のシーケンス図」で示した、ユースケース 02 代替フロー2bのシーケンスから参照されるシーケンスを以下に示します。

ユースケース 02:冷房運転開始時のシーケンス図
まず冷房開始シーケンスを図 35 に示します。run()の中の loop が温度制御のフィードバック制御ループになります。
sd UC02:冷房運転開始@TemperatureControl
Operation Control:OperationMode

TemperatureControl:TemperatureControl:Cooler:TemperatureSetting:CoolerAirCurrent:AirCurrentSetting

HeatExchange

Device:HeatExchange:Devicecooler()start()

setDriveMode(dir)current=coolerref運転モ ード切換
run()status = drive

loop[status == drive]
1秒周期で実行currentTemparature= getTemperature()targetTemperature= getTargetTemperature()ref

室内温度取得control()value= calcContData()
coolDown(value)
HeatExchangeのcoolDown()関数とCoolerAirCurrentのcontrol()関数
は、制御値変動の有無に関わらず、このloopの中で常に実行される。

control(diff)ref

冷房運転@HeatExchange

ref

気流運転

getDirType()diff = targetTemparature - currentTemparature

calcContDir()
getSpeedType()
calcContSpeed(diff)opt[制御値更新==true]
airCurrentCont(speed, dir)

図35

61

PIM 設計モデル

組込み分野のための UML モデルカタログ

次に図 31（ユースケース 02 代替フロー2b のシーケンス）で、上記冷房開始シーケンスに先立って行う
暖房運転停止処理を下記に示します。

暖房運転停止sd 暖房運転停止@TemperatureControl
TemperatureControl:TemperatureControl:Heater:HeaterAirCurrent

stop()HeatExchange:HeatExchange

Device:DevicestopAirCondition()refstop()

暖房運転停止@HeatExchange

stopAirCurrent()
ref

図36

熱交換の原理に着目したモデル

62

気流運転停止＠HeatExchange

エアコン

並行性設計とオブジェクトグループ

class TemperatureControl<<interface>>
pkgFacade+init(): int<<enumeration>>
AirCurrentSpeed
auto = 0
low = 1
mid = 2high = 3

TemperatureControl

TemperatureControl
を利用する上位パッケー
ジのスレッド-temperatureSetting

1-

current: AirConditioner

+
+
+
+
1 +
1 +
+
+
+

init(): int
cooler(): int
heater(): int
dehumidifire(): intstop(): int
chgTemperaturUp(): int
chgTemperaturDown(): int
chgAirCurrentSpeed(): int
chgAirCurrentDir(): int<<enumeration>>
AirCurrentDir

1

auto = 0
swing = 1
fix = 2
1

TemperatureSetting-

targetTemperature: double = 28
targetHumidity: double = 60 {readOnly}
maxTemperature: double = 30 {readOnly}
minTemperature: double = 16 {readOnly}

+
+
+
+

up(): int
down(): int
getTargetTemperature(): double
getTargetHumidity(): double-targetData

AirConditionerの制御スレッド

AirCurrentSetting<<active>>
Thread1#-

speedType: AirCurrentSpeed = auto
dirType: AirCurrentDir = auto

+
+
+
+

chgSpeedType(): int
chgDirType(): int
getSpeedType(): AirCurrentSpeed
getDirType(): AirCurrentDir-controlData

run(): int-conditioner

1
refer

refer
3

-currentSetting

3

3

AirCurrent

AirConditioner-

status: AirConditionerStaus

+
+
~
#

start(): intstop(): int
control(): int-current1

cooperate

calcContValue(): int

#
#
1 ~
#
#
+

status: AirCurrentStaus
speed: double
dir: double
control(diff): int

calcContSpeed(diff): int
calcContDir(diff): intstop(): int

CoolerAirCurrent

HeaterCoolerDehumidifire
HeaterAirCurrent

DehumidifierAirCurrent<<enumeration>>
AirCurrentStaus<<enumeration>>
AirConditionerStaus

ready = 0
drive = 1

ready = 0
drive = 1
図37

TemperatureSetting と AirCurrentSetting は図 37 に示すように、2 つの角丸の長方形でそれぞれ囲んだ 2 つのオブジェクトグループ(AirConditioner の制御スレッドと TemperatureControl を利用する上位パッケージのスレッド)に属し、両方のスレッドから同時にアクセスされる可能性があります。この２つのク

63

PIM 設計モデル

組込み分野のための UML モデルカタログ

ラスは、設定値を保持し、その値の取得、設定を提供していることから、属性値を両方のスレッドから同時にアクセスしないように、各メソッドでＯＳの標準的な排他制御機構を利用して排他制御を行います。

熱交換の原理に着目したモデル

64

エアコン

HeatExchange パッケージ
静的モデル
このパッケージはデバイスの構成にかかわらず、上位パッケージに熱交換の強さ(数値)と、気流をコントロールする Facade インタフェースを提供します。本パッケージにより、上位の TemperatureControl と
下位の Device パッケージが疎結合となります。すなわち、上位の TemperatureControl の制御アルゴリズ
ムは、デバイスの構成に依存せず純粋に熱交換の強さ(数値)を求めればよく、デバイス（センサーやコンプ
レッサー）に一切依存しない制御アルゴリズムが実装可能となります。また、TemperatureControl の実装
を変えることなく、デバイスの構成が変更可能になります。

熱交換クラス構成図
class HeatExchange<<interface>>
pkgFacadeHeatExchange
+
+
+
+
+
+
+
+

init() :int
coolDown(value :int) :int
heatUp(value :int) :int
airCurrentCont(speed :int, dir :int) :int
stopAirCondition() :int
stopAirCurrent() :int
getTemperature() :int
getHumidity() :int1

-hfc

-outdoor

HFCtemperature :doublepressure :double

+
+
+
+
+
-

heatUp(value :int) :int
coolDown(value :int) :intstop() :int
measureTemperature() :double
getPressure() :doublepressure(value :double) :int
decompression(value :double) :int

init() :int

1

1

1

-

+

1

1

OutdoorAir-temperature :double+

measureTemperature() :double-indoorIndoorAir-temperature :double
humidity :double

+
+
+
+

measureTemperature() :double
measureHumidity() :int
contAirCurrent(speed :int, dir :int) :int
stopAirCurrent() :int

図38

PIM 設計モデル クラス名

分析モデル クラス名 および 説明

pkgFacade

パッケージ共通インタフェース

HeatExchange

上位のパッケージに提供する Facade。

HFC

代替フロンガス (Hydrofluorocarbon)。設定される熱交換の強さ(数値)に応じて、デバイスの制御を行う。

IndoorAir

室内空気。デバイスを利用し、現在温度と湿度を測定する。また、設定される気流の方向と強さに応じてデバイスを制御する。

OutdoorAir

室外空気。デバイスを利用し、現在温度を測定する。

65

PIM 設計モデル

組込み分野のための UML モデルカタログ

動的モデル
冷房運転のシーケンス図
sd 冷房運転@HeatExchange
HeatExchange

device:HFC:Device:HeatExchange

coolDown(value)pressure(value)pressure= calcPressure()compressHFC(pressure)
ref

加圧

図39

室内温度取得のシーケンス図
sd 室内温度取得
HeatExchange:HeatExchange

Device:IndoorAirmeasureTemperature():Device:Indoor:Outdoor:TemperatureSensor

getTemperature(type)
alt[type == Inner]
getTemperature()

getValue()[type == Outer]
getTemperature()[type != Inner && type == Outer]
パラメータエラーを返す。

図40

熱交換の原理に着目したモデル

66

getValue()

エアコン

気流運転のシーケンス図
sd 気流運転:HeatExchange:IndoorAir

contAirCurrent(speed, dir):DevicerotateFan(speed):IndoorrotateFan(speed)

:Fan

:Flap

rotate(speed)alt[dir == Swing]

swingFlap()[dir == Fix]swingFlap()

fixFlap()[dir == 角度指定]

fixFlap()

directionFlap(dir)directionFlap(dir)swing()

fix()

set(angle)

図41

暖房運転停止のシーケンス図
sd 暖房運転停止@HeatExchange
deviceHeatExchange:HeatExchange:HFCstop():DevicestopHFC()
ref

加圧停止

図42

67

PIM 設計モデル

組込み分野のための UML モデルカタログ

気流運転停止のシーケンス図

図43

熱交換の原理に着目したモデル

68

エアコン

Device パッケージ
静的モデル
このパッケージはハードウェアデバイスをラップし、操作しやすい形のインタフェース(Facade )を提供します。各デバイスを制御するとともに、各ハードウェア固有の単位系(カウント等)を、使用するデバイスに応じた制御値に変換します（例：デバイスから得られるカウント値⇒温度）。

デバイスのクラス構成図
class Device構成図
Device<<interface>>
pkgFacadeinit()

Indoorinit()
getHumidity()
getTemperature()
setEvaporate(opening)
setDriveMode(dir)compressHFC(pressure)
stopHFC()
openFlap()closeFlap()
directionFlap(dir)swingFlap()
fixFlap()
rotateFan(speed)
stopFan(type)

Outdoor

図44

69

PIM 設計モデル

組込み分野のための UML モデルカタログ

デバイスのクラス構成(詳細)図45

熱交換の原理に着目したモデル

70

エアコン

PIM 設計モデル クラス名

分析モデル クラス名 および 説明

pkgFacade

パッケージ共通インタフェース。

Indoor

室内機に存在するデバイスを管理する。

Outdoor

室外機に存在するデバイスを管理する。

Compressor

冷媒を圧縮して高圧にする。これにより冷媒の温度が上がる。

CompStatus

Compressor の駆動状態。
Stop：停止中
Drive：運転中

Thread並列処理。

FourWayValve

冷房運転か暖房運転かにより、コンプレッサーからの冷媒を室内に送るか室外に送るかを切り替える四方弁の駆動。

DriveMode

四方弁の状態。
Heat：冷媒を室内に送る（暖房）。
Cool：冷媒を室外に送る（冷房）。

Evaporator

冷媒の温度をさげるため、圧縮して液体化した冷媒を常圧の気体に戻す蒸発器の駆動。

Sensor測定器。

TemperatureSensor

温度測定器。

HumiditySensor

湿度測定器。

Fan

ファンによる送風駆動。

Flap

フラップによる風向きの指定。

FlapStatus

フラップの状態。
Fix：風向き固定
Swing：往復運転

71

PIM 設計モデル

組込み分野のための UML モデルカタログ

動的モデル
加圧のシーケンス図
sd 加圧
device:Device:Outdoor:Compressor

compress()
compress(pressure)opt[status == ready]compress(pressure)pressure値で加圧

図46

加圧停止のシーケンス図
sd 加圧停止
device:Device:Outdoor

stopComp():Compressorstop()
pressure=0
status=READY

図47

熱交換の原理に着目したモデル

72

エアコン

気流運転停止のシーケンス図
sd 気流運転停止@Device
HeatExchange:IndoorAir

device:Device:Indoorinner: Fan

stopFan(type)

fanStop()stop()

図48

73

PIM 設計モデル

組込み分野のための UML モデルカタログ

ソフトウェアで制御する対象に着目したモデル
モデリングのコンセプト
ソフトウェアで制御する対象に着目することで、直感的でイメージしやすい、モデリングにあまり馴染みのない方にも理解しやすいモデルにします。
暖房・冷房・除湿の主要 3 機能とそれを実現するためのデバイスとの関係に着目し、各機能を担う制御部
分と、利用するデバイスとの関係を中心にモデルで表現しました。

分析モデル
コンセプトに従い、物理デバイスとそれを制御する制御クラスとの関連でモデルを構成します。

静的モデル
クラス構成
class 分析モデル(全体)
オフタイ マー<<enumeration>>
運転状態

運転モード

設定時間

運転状態

設定する(時間)発動する()<<enumeration>>
制御状態

停止中
暖房中
冷房中
除湿中

オフタイマー 停止先 除湿()
暖房()
停止()
1
1 冷房()<<enumeration>>
風量

停止中
制御中

<<enumeration>>
風向

自動
弱
中
強

自動
スイング
固定

運転管理 1 運転管理 1 運転管理 1
気流設定

温湿度設定
目標温度
目標値 1 目標湿度 = 60 {readOnly}
設定温度を取得する()
設定温度を設定する(温度)暖房
暖房 1

温度調整する()
開始する()
停止する()

冷房 1

設定情報 1 風向を取得する()
風向を設定する(風向)風量を取得する()
風量を設定する(風量)
利用者 1

温湿度制御

冷房

気流制御

除湿

目標湿度は固定値(60%)

冷媒順番方向 1

温度センサー

湿度センサー
現在湿度取得する()

取得する()

冷媒減圧 1

四方弁

参 3
照
元
室内
湿度 1

現在温度

蒸発器

循環方向

開口度

設定する(循環方向)設定する(開口度)

冷媒加圧

1

コンプレッサー圧力開始する()
調節する(温度差)停止する()

13

参 3
制 3 制 3 制 3 参 3
照
御
御
御
照
元
元
元
元
元
室内
室外
温度 1 温度 1

温度調整する()
開始する()
停止する()

気流種別
制御状態

調節する

温度調整する()
開始する()
停止する()

湿度差

暖房
冷房
除湿

利用者 3

温度差
制御状態

温度調整する()
開始する()
停止する()<<enumeration>>
循環方向

除湿 1

設定風向
設定風量

調節元 1

調節元 1

室内ファン 1

風向

{XOR}

ファン
回転数

制御元 室外ファン開始する()
止める()
1 設定する(回転数)設定する(圧力) 1
停止する()
動かす()

1

フラップ
角度
開く()
設定する(角度)
閉じる()

図49

クラス名

説明

運転モード

暖房、冷房、除湿、停止のどれが選択されたかを保持し、運転選択に応じた温湿度制御に対して運転を指示します。

オフタイマー

オフタイマーの制御を行います。
オフタイマー時間として 0 が設定されるとオフタイマーを停止します。0 以上が設定されると、指定した時数後に運転停止イベントを発生させます。

ソフトウェアで制御する対象に着目したモデル

74

エアコン

温湿度制御

デバイスの制御を行い、温湿度を調整します。
デバイスの制御方法は運転モードによって異なりますので、運転モード毎に本クラスを特化し、派生クラス側で運転モードに応じたデバイス制御を定義しま
す。

暖房制御

温湿度制御の派生クラス。暖房の温度制御を行います。

冷房制御

温湿度制御の派生クラス。冷房の温度制御を行います。

除湿制御

温湿度制御の派生クラス。除湿の湿度制御を行います。

温湿度設定

設定された温度、湿度を保持します。設定湿度は固定で、外部から変更することはできません。

気流制御

温湿度制御と連携し、気流（風量、風向）を制御します。

気流設定

設定された風量、風向を保持します。

温度センサー

現在の温度を取得、保持します。

湿度センサー

現在の湿度を取得、保持します。

四方弁

ハードウェアの四方弁を制御します。冷媒の流れる方向を切り替えます。

蒸発器

ハードウェアの蒸発器を制御します。開口度を調整します。

コンプレッサーハードウェアのコンプレッサーを制御します。圧力を調整します。

ファン

ハードウェアの室内ファン・室外ファンを制御します。風量を調整します。

フラップ

ハードウェアのフラップを制御します。風向を調整します。

75

分析モデル

組込み分野のための UML モデルカタログ

オブジェクト構成
object オブジ ェクト図(全体):運転モ ード:オフタイ マー

:気流設定
:気流制御
:温湿度設定:除湿:冷房
室内 :湿度センサー:暖房
室外 :温度センサー

室内 :温度センサー

:四方弁

:蒸発器

:コンプレッサー

室外 :ファン

室内 :ファン

:フラップ

図50

物理デバイスを制御する方法は運転モードによって異なりますので、モード毎にクラスを用意し、そこにモードに応じた振る舞いを定義していきます。
運転モードクラスは全モードの温湿度制御インスタンスを常に持っています。選択中以外の温湿度制御イ
ンスタンスに対して操作しませんので、全モードのインスタンスを持つ必要はないのですが、組み込み向け
ソフトウェアを意識し、あえてこのようなクラス構成にしています。
本カタログのエアコンでは、設定できる温度は運転モード共通でひとつだけですので、運転モード毎に設
定温度を保持せず、共通して使えるように設定温度クラスを用意しました。詳しくはオブジェクト図を参照
してください。

ソフトウェアで制御する対象に着目したモデル

76

エアコン

動的モデル
運転モードのステートマシン
stm ステートマシン図(運転モード)開始

停止中

冷房ボタン押下/冷房()

暖房ボタン押下/暖房()

停止ボタン押下/停止()
除湿ボタン押下/除湿()

冷房中

停止ボタン押下/停止()

entry / 冷房.開始する()
exit / 冷房.停止する()

暖房ボタン押下/暖房()

冷房ボタン押下/冷房()

冷房ボタン押下/冷房()

除湿ボタン押下/除湿()

暖房中entry / 暖房.開始する()
exit / 暖房.停止する()

暖房ボタン押下/暖房()

停止ボタン押下/停止()

除湿ボタン押下/除湿()

除湿中
entry / 除湿.開始する()
exit / 除湿.停止する()

図51

温湿度制御のステートマシン図
stm ステートマシ ン図(温湿度制御)
停止中

開始
開始する
停止する
制御中
do / 温度調整する()

図52

77

分析モデル

組込み分野のための UML モデルカタログ

ユースケース 01:暖房運転時のシーケンス図
sd UC01:暖房運転開始:運転モード:暖房:温度設定:コンプレッサー:四方弁

室外 :ファン

:気流制御

室内 :ファン

:フラップ

利用者
暖房()
開始する()
開始する()
開く()
動かす()

設定する(暖房)開始する()
動かす()
温度調整する()ref
暖房温度制御図53
sd 暖房温度制御:暖房

室外 :温度センサー:温湿度設定室内 :温度センサー:コンプレッサータイマー
loop 暖房運転[停止されるまで][前回呼び出しから１秒経過]:
温度調整する()
外気温= 取得する() :int

設定温度を取得する()

現在温度= 取得する()
温度差= 設定温度-現在温度()

圧力= 温度差に応じたコンプレッサーの圧力を求める()設定する(圧力)
開口度= 温度差に応じた蒸発器の開口度を求める()設定する(開口度)調節する(温度差)

図54

ソフトウェアで制御する対象に着目したモデル

78

:蒸発器

:気流制御

エアコン

参考文献
 『組込みソフトウェア開発のための オブジェクト指向モデリング (組込みエンジニア教科書) 』
SESSAME WG2 著、翔泳社、2006.6

79

組込み分野のための UML モデルカタログ

組込み分野のための UML モデルカタログ「エアコン」
初版発行
2014 年 (平成 26 年) 4 月 28 日
第二版発行 2014 年 (平成 26 年) 10 月 1 日
発行者 UMTP, Japan
編 著 組込みモデリング部会
印刷
UMTP, Japan
東京都渋谷区代々木 1 丁目 22 番 1 号
http://www.umtp-japan.org/

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