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

製品編 P003

インライン装置

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

モデリング部会や参考書として、モデリングのベテランの方々にはモデルのヒント

2016.5.15 更新

として、ぜひともお手元に置いて活用してください。

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

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

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

2

インライン装置

目次

はじめに ..................................................................................................... 4要求仕様 ..................................................................................................... 6
モデル一覧 ................................................................................................ 19
ドメイン構造に着目したモデル ...................................................................... 20
分析モデル .............................................................................................. 21
PIM 設計モデル ........................................................................................ 37
ハードウェアボタンへの対応 ..................................................................... 38
タスク間通信の仕組み ............................................................................. 42
状態ごとの機能拡張性付加 ........................................................................ 51
参考文献 ................................................................................................... 55
付録：インライン装置とは ............................................................................ 56
付録：用語集 ............................................................................................. 57

3

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

はじめに
このモデル解説書は、「インライン装置」 1と呼ばれるタイプの組込み装置のモデルを解説したものです。
「インライン装置」は、工場の生産ラインなどで使用される上流から下流に向かって、製造物や検査品を搬送/処理する装置のことです。どのような機構で搬送するか、どのような加工/検査をするかに関係なく、再利用可能なモデルとして提供しています。また、自動運転や並行処理の待ち合わせといった装置開発でよくみられる課題を扱っています。
このモデル解説書では「インライン装置」と呼ばれる装置を、
1.
2.
3.

前の装置から引き渡された「何か（試料）」を、
なんらか処理して、後ろの装置に引き渡す。

のステップでとらえ、汎用的な要求仕様として、提示しています。

インライン装置

試料
前処理装置から試料を受け取る
図1

試料を処理する

試料
後処理装置に試料を引き渡す

インライン装置とは

ここで要求仕様の“汎用的”のポイントは、
1.
2.

具体的な処理ユニットのことには踏み込まない
具体的な搬送処理ユニットには踏み込まないの 2 点です。
パッケージ図で表すと、下図のようになります。
イン ライン 装置

インライン装置としての全体、および、論理的な試料搬
送と、論理的な試料処理を扱います。

インライン装置アプリケーションからの「開始」や「停止」を受け、試料を処理します。
また、インライン装置アプリケーションに対して、処理の終了を伝えます。

インライン装置アプリケーションの中で、論理的にデバイスを移動するときに、こちらの具象搬送ユニットで、モータやセンサを駆使して、デバイスを動かします。
具象搬送ユ ニット

図2

1

具象処理ユ ニット

インライン装置の要求仕様の範囲「インライン装置」のラインでの位置づけについて、本モデル解説書の「付録：インライン装置とは」をご確認ください。

はじめに

4

インライン装置

もし、このインライン装置パッケージの部分が、あなたの開発対象の装置と同じ考え方であるならば、このモデル解説書の分析モデルと PIM 設計モデルを、有効に再利用できるでしょう。
あなたが、現在、搬送ユニットや処理ユニットの制御プログラムを持っているならば、前ページ図「具象搬送ユニット」パッケージや「具象処理ユニット」パッケージに当てはめて、「インライン装置」パッケー
ジのインタフェースに合わせれば、「インライン装置」パッケージと結合して動かすことができます。

図3

インライン装置のイメージ

5

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

要求仕様
論理ハードウェア仕様2

図4

ハードウェアのイメージ※ 図中の「XX エリア」は、試料が搬送されるときに、一回一回止まる場所を示す概念。たとえば、搬送ステージ上で試料だけを移動する機構ならば試料が一回一回の搬送される位置のことであり、たとえば、搬送ステージごと試料を移動するコンベアのような機能ならば、コンベアが一回一回の搬送で止まる位置のこと。

2

論理ブロック

構成要素

説明

操作部

スタートボタン

処理部に対しては処理の開始、搬送部に対しては前処理装置からの試料の受付を開始する。

ストップボタン

処理部に対しては処理の停止、搬送部に対しては前処理装置からの試料の受付を停止する。

処理部

処理ユニット

試料に対する処理を行う。たとえば、加工や検査など。

搬送部

搬送ステージ

試料を搬送する領域全体の部分。

導入検出跨りセンサ「前処理装置から受け取った試料が存在すること」・「前処理装置から受け取り終わった試料を取り損なっていないこと」を確認する。

導入エリア

前処理装置から受け取った試料が一時的に置かれ、位置決めを行う場所。

試料位置決め器

試料を位置決めする機構。

エリア

試料が搬送されるときに、一回一回止まる場所。搬送ス
テージ全体が長い場合は、この普通の「エリア」が複数連続して並ぶ。

処理エリア

搬送ステージの内、試料に対し処理を行う場所のこと。

排出エリア

試料を後処理装置へ排出する場所。

試料排出器

試料を後処理装置へ排出する機構。

排出跨りセンサ

後処理装置に排出し終わった試料が、排出し損なっていこのモデル解説書では、搬送部は論理的な部分を中心に扱いますので、物理的な（具象の）ハードウェアには触れません。

要求仕様

6

インライン装置

ないかを確認する。

機能要求

処理開始機能操作部のスタートボタンを押下すると、装置状態が運転モードになり、自動処理を開始します。



処理停止機能操作部のストップボタンを押下すると、自動処理を停止し、装置状態が停止モードになります。



試料搬送機能運転モードのときに、前処理装置から搬送部へ試料が導入されると、連続運転の実動作を開始します。

連続運転の動作仕様

①
図5

②

③

④

⑤

前処理装置から引き渡された試料を後処理装置に排出するまで①

前処理装置から引き渡された試料は、試料位置決め器によって、処理エリアから決まった距離になるように位置決めをします。この時、導入検出跨りセンサによって、前処理装置から導入されているかを確認します。

②

位置決めをした所から、一定の間隔で搬送します。この時、導入検出跨りセンサによって、前処理装置から搬送ステージ内に確実に引きこんだかを確認します。

③

処理エリアまで搬送します。処理エリアでは、処理部によって試料を処理します。

④

次の試料を処理エリアに運ぶのと同時に、処理済みの試料を後処理装置に向かって搬送します。

⑤

試料排出器によって試料を後処理装置へ排出後、排出跨りセンサで、引き渡しができているかを確認します。（払い出し部の一例：）ただし、後処理装置が排出を受け付けられない場合は、受け付けられるようになるまで待ってから排出をします。

※ 以上の①～③と③～⑤の間が何回で搬送されるかは、搬送ステージの長さや試料の長さによって、さまざまなパターンが考えられます。上記の例は、最小限を考えた一例です。

7

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

ストップボタンによる連続動作の停止のタイミングの要求
インライン装置は、インライン装置動作中に停止命令を受け付ける事が出来ます。
インライン装置が試料搬送中にストップボタンを押下するとストップ

インライン装置

運転中
インライン装置が停止出来るタイミングでインライン装置が止まります。
インライン装置

停止中

搬送部の各動作と処理部の動作の並行タイミングの要求
インライン装置は、試料の位置決め、試料の処理、試料の排出を並行して行う事が出来ます。
前処理装置

位置決め中

インライン装置

後処理装置

処理中

排出中

試料の搬送は、試料の位置決め、試料の処理、試料の搬出を行っていない場合に行う事が出来ます。
前処理装置

インライン装置

後処理装置

搬送中
上記二つの状態を交互に繰り返すことによってインライン装置の動作を実現します。
試料の搬送

試料の位置決め
試料の処理
試料の排出

このため、試料の搬送が完了を待って試料の位置決め、試料の処理、試料の搬出を実行する必要があります。また、反対に、試料の位置決め、試料の処理、試料の搬出の全ての完了を待って試料の搬送を実行する必要があります。

要求仕様8

インライン装置

連続動作・並行タイミングの仕様（ステートマシン図）
搬入待ちチェック( ){停止予約チェック();
試料数チェック();}
停止中

スタートボタン押下
運転中++ストップボタン押下 / 停止予約 = true
entry / 停止予約 = false

搬送中[搬送ステージに試料なし][停止予約==true]
試料搬入待ち+after( 周期時間 )+[停止予約==true]

entry / 1搬送動作[搬送ステージに試料あり][停止予約==false]

entry / 搬入待ちチェック[停止予約==true
or 試料取扱いに失敗あり][搬送ステージに試料あり]

試料搬入あり[搬送ステージに試料なし][それ以外][停止予約==false]

取扱中[位置決め]

位置決め中[位置決め対象あり]+

entry / 位置決め

[位置決め対象なし][排出対象あり and
排出不可]

[処理]

排出待ち

[処理対象なし or
処理済]

排出完了

[停止予約==true][処理対象あり and
未処理]

処理中
+

entry / 試料処理

[排出]
排出中

[排出対象あり]after(周期時間)[排出対象なし]+

entry / 排出試料取扱いの中で、・位置決め対象があるのに前処理装置から受け取れていないとき・位置決め対象の搬送に失敗したとき・排出失敗したときは、「試料取扱いに失敗」とみなす。
・後処理装置が受け取れずに排出できなかったとき・処理済の試料だったので処理できなかったとき
は、「試料取扱いに失敗」とみなさない。

図6

連続動作・並行タイミングの仕様

このステートマシン図は、前述の「停止ボタンによる連続動作の停止のタイミングの要求」と「搬送部の各動作と処理部の動作の並行タイミングの要求」の二つの要求を、ステートマシン図で表したものです。
運転中は、資料を搬送している間は導入動作、排出動作、処理動作の何れの動作とも行えません。１搬送動作が完了すると、導入動作（位置決め）、排出動作、処理動作を並行に行います。導入動作、排出動作、処理動作の全てが完了すると、資料を搬送します。これを繰り返します。

9

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

処理部と搬送部とのタイミング仕様
搬送部は、試料を処理エリアに運び終わると、処理部に対して、試料準備完了通知をします。処理部は、搬送部からの試料準備完了通知を受けて試料を処理します。処理部は試料の処理が終わると、搬送部に対して、試料処理完了通知をします。
搬送部

処理部
試料準備完了通知

試料処理完了通知

図7

搬送部と処理部の連携

前後の処理装置とのハンドシェーク仕様
インライン装置は、前処理装置や後処理装置との間での試料の引き渡し時に試料を送りこみ過ぎないようにするために、ハンドシェークを行います。
前処理装置

自装置

後処理装置

引き渡し開始要求
搬送動作はロッ
クされる。

引き渡し可能確認
可能か不可かを、通知する。

引き渡し可能状態通知
自装置と後処理装置の間のハンドシェークも一緒[引き渡し可能状態 == 可能]

試料排出動作

引き渡し終了通知

図8

動作中に「引き渡し開始要求」「引き渡し可能確認」が来た場合は、動作が終わってから「引き渡し可能状態通知を返す。

前後の装置とのハンドシェーク

ハンドシェークのメッセージは、パラレル信号・コマンド通信など、いずれでも構いません。たとえば、引き渡し可能状態通知の可不可は、コマンド通信ならばコマンドとデータなど、パラレル信号ならば 1bitの 5V の信号で可と不可を示すなど、が考えられます。

要求仕様

10

インライン装置

設計への制約3
ボタンのハードウェアインタフェース仕様
アドレス

意味

備考

0x XXXXXXXY

スイッチポート１データレジスタ

Low レベル/Hi レベル

0x XXXXXXXZ

スイッチポート２データレジスタ

Low レベル/Hi レベル

表1 スイッチのメモリマップ



システムはハードウェアの I/O ポートを定期的にミリ秒のオーダーでポーリングすることでボタンの
make/break4を判断する

break 状態から make 状態に移行したところで入力情報をボタンイベントへと変換する make 状態から break 状態への変換ではイベントは発生させないbreak 状態から make 状態への移行には下図イメージにあるようなスイッチの立ち上がり時のチャタ
リングによる誤検知を防止するため、任意の回数、連続で Hi レベルを検知した後に make 状態に移行する。Hi → Low への変化時は特別な処理は必要ない

スイッチはメモリマップトポートであり、ポートの I/O レジスタは通常のメモリアクセスと同様に行う。表に示すアドレスへアクセスすることでポートのステータスとレベルを検知する
break 状態

チャタリング除去処理

make 状態

Ｈｉ レベル

Low レベル
図9

チャタリングのイメージ

3

ここでは、要求仕様として、設計上の制約を載せています。分析モデルでは扱いませんが、PIM 設計モデルを作成するときにインプットになる要求です。
4
ここでは、make = 信号がアクティブな状態、break = 信号が非アクティブな状態として定義します。

11

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

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

uc 要求
インライン装置

UC01.運転を開始する

ユーザ
UC02.運転を停止する

UC03.試料を導
入する
前処理装置

UC04.試料の処理結果を記録す
る
試料処理結果管理システム

UC05.試料を排
出する
後処理装置

図10

要求仕様

12

インライン装置

ユースケース記述<UC01：運転を開始する>■概要
システムの運転を開始する。

■アクター
ユーザ

■事前条件
システムが停止モードであること。

■事後条件
システムが運転モードであること。

■メインフロー
1. アクターは、操作部のスタートボタンを押下する。
2. システムは、運転を開始する。

■課題やＴ.B.D 項目
なし

■備考
なし

13

組込み分野のための UML モデルカタログ<UC02:運転を停止する>■概要
システムの運転を停止する。

■アクター
ユーザ

■事前条件
システムが運転モードであること。

■事後条件
システムが停止モードであること。

■メインフロー
1. アクターは、操作部のスタートボタンを押下する。
2. システムは、停止する。

■課題や T．B．D 項目
なし

■備考
なし

要求仕様

14

インライン装置<UC03:試料を導入する>■概要
引き渡された試料をシステム内に引き込む。

■アクター
前処理装置

■事前条件
システムが運転モードに入っていること。

■事後条件
アクターから試料を受け取っていること。

■メインフロー
1. アクターは、システムに試料の引き渡し可能か確認する。
2. システムは、試料の引き渡しが可能であることをアクターへ通知する
3. アクターは、試料の引き渡し開始をシステムに確認する。
4. システムは、試料の引き渡し開始了承をアクターへ通知する。
5. アクターは、試料の引き渡し動作を行う。
6. アクターは、システムに試料の引き渡し成功を通知する。

■代替フロー
2a システムが「試料の引き渡しが可能でない」と判定する場合
2a1. システムは、試料の引き渡しができないことをアクターへ通知する。
2a2. アクターは、一定時間[TBD1]待つ。
2a3. メインフロー1 に戻る。

4a システムが「試料の引き渡しが開始できない」と判定する場合
4a1. システムは、試料の引き渡し開始拒否をアクターへ通知する。
4a2. アクターは、一定時間[TBD1]待つ。
4a3. メインフロー1 に戻る。

■例外フロー
6a アクターが「試料の引き渡しに失敗した」と判定する場合
6a1. アクターはシステムに試料の引き渡し失敗を通知する。

15

組込み分野のための UML モデルカタログ■課題や T．B．D 項目[TBD1] 一定時間をどの位にするか？5■備考
システムが「試料の引き渡しが可能でない」と判定する場合は下記の通り。
・システムが、停止モードである場合・システムが、試料を搬送中である場合

システムが「試料の引き渡しが開始できない」と判定する場合は下記の通り。
・システムが、停止モードである場合・システムが、試料を搬送中である場合

5

現時点で決められないものはこの様に表します

要求仕様

16

インライン装置<UC04:試料の処理結果を記録する>■概要
試料を処理した結果を記録する。

■アクター
試料処理結果管理システム■事前条件[TBD1]■事後条件
システムで処理した試料の処理結果をアクターに記録していること。

■メインフロー
1. システムは、対象の試料が不良品かどうかをアクター[TBD2]へ問い合わせる。[TBD3]
2. システムは、試料が不良品でないことをアクター[TBD2]へ通知する。[TBD3]
3. システムは、試料を処理した結果をアクター[TBD2]に記録する。[TBD3]■例外フロー
2a アクターが「試料が不良品である」と判断する場合
2a1. システムは、試料を処理しなかった理由をアクターに記録する。
2a2. フローを終了する。

■課題や T．B．D 項目[TBD1] 本ユースケースの事前条件[TBD2] 対象の試料の問い合わせ先がアクターか否か？
[TBD3] 対象の試料を問い合わせる際に必要となる情報及びその取得方法■備考
試料の処理に失敗したことも試料の処理結果とする。
本シナリオの優先度を下げる。

17

組込み分野のための UML モデルカタログ<UC05:試料を排出する>■概要
システム内にある試料を引き渡す。

■アクター
後処理装置

■事前条件
システムが運転モードであること。

■事後条件
システム内の試料をアクターに引き渡していること。

■メインフロー
1. システムは、アクターに試料の引き渡し可能か確認する。
2. アクターは、試料の引き渡しが可能であることをシステムへ通知する。
3. システムは、試料の引き渡し開始をアクターに確認する。
4. アクターは、試料の引き渡し開始了承をシステムへ通知する。
5. システムは、試料の引き渡し動作を行う。
6. システムは、アクターに試料の引き渡し成功を通知する。

■代替フロー
2a アクターが「試料の引き渡しが可能でない」と判断する場合
2a1. システムは、アクターから試料の引き渡し許可があるまで待つ。
2a2. システムは、一定時間[TBD1]待つ。
2a3. メインフロー1 へ戻る。
4a アクターが「試料の引き渡しが開始できない」と判定する場合
4a1. アクターは、試料の引き渡し開始拒否をシステムへ通知する。
4a2. システムは、一定時間[TBD1]待つ。
4a3. メインフロー1 に戻る。

■例外フロー
6a システムが「試料の引き渡しに失敗した」と判定する場合
6a1. システムはアクターに試料の引き渡し失敗を通知する。

■課題や T．B．D 項目[TBD1] 一定時間をどの位にするか？

要求仕様

18

インライン装置

モデル一覧
モデル名

概要

ポイント

ドメイン構造に着目したモデル

インライン装置の構造を中心に分析し、機能もその構造の要素自身にすべて配置しました。搬送部や処理部を（派生などで）拡張することにより、さまざ
まなインライン装置に再利用できるようにしています。

自動運転／並行処理の待ち合わせといった一般的な課題を扱っています。

19

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

ドメイン構造に着目したモデル
モデリングのコンセプト
このモデルは、管理クラスや制御クラスといったクラスを出さずに、要求仕様からのモノの構造のみに着目してモデル化しています。
またモデルを利用する際に、オブジェクト同士の協調に集中してもらうため、（オブジェクト同士の境界線を引いてしまうような）パッケージ分けをしていません6。
操作部
インライン装置+++

運転開始()
運転停止()
停止完了時処理()
1
+装置

1

1

+装置

1

+搬送部

+スタートボタン1 <<ユーザ操作>>+ 押下()+ストップボタン<<Event>>
1 + 押下イベント()

+操作部

搬送部
搬送ステージ

停止予約 = false+ 運転中確認()+ 搬送()+ 搬送停止()- 少し待つ()<<Event>>+ 停止完了イベント()

+
+
1 #
+
+搬送ステージ +
+
+
+
+

+搬送部
1

1

試料取扱い()+*{ordered} +1

搬送可能か()+導入エリア1+++++試料位置決め器 1

処理エリア

試料取扱い()
試料受け取り可能確認()
試料受取り開始()
試料受け取り終了(受け取り試料あり)+

試料取扱い()+処理エリア1

1 +導入エリア+導入検出跨りセンサ

試料位置決め器
位置決め()

1 +排出エリア{subsets エリア}

1 +処理エリア{subsets エリア}

+導入エリア 1

+

+

ID

処理ログ
処理済み = false
処理済設定()

1

導入エリア
1

0..1

1
+処理ログ
+
+処理対象試料 * {ordered} +試料+エリア内試料+搬送ステージ

1 +導入エリア{subsets エリア}
+前処理装置1+現在エリア1+搬送ステージ

前処理装置
引き渡し開始要求()
引き渡し可能確認()
試料受け取り可能設定()
試料受け取り不可設定()
引き渡し終了通知()

エリア+搬送ステージ +エリア

試料取扱い()
搬送()
単搬送動作実行()搬送ステージ上に試料あり確認()
処理エリアに処理前の試料あり確認()
排出待ち確認()
搬送動作ロック()
搬送動作アンロック()
試料受け取り可能確認()+搬送ステージ

+
+
+
+
+

操作ボタン

+操作部
1
1

1

搬送部
-

操作部

+操作部

+装置

+

後処理装置

排出エリア
+後処理装置 +
+
1 +
+

+

排出待ち

1

+
+
+

排出待ち()
試料取扱い()
搬送可能か()+排出エリア+排出エリア1

引き渡し開始()試料受け取り確認()
引き渡し終了(引き渡し試料あり)引き渡し可能状態通知(可不可)+排出エリｱ1

1 +試料排出器

1

検出センサ+排出跨りセンサ

検出状態取得()

1

試料排出器
+

排出()

処理部
+処理部

1

1

処理部

+処理部
+

処理実行()
1+処理部+処理ユニット1

処理ユニット+

図11

処理実行()

ドメインに着目したモデル

点線の枠は、論理ハードウェア仕様の論理ブロックの範囲を示しています。
搬送ステージはエリアへの関連を持たせました。導入エリア、処理エリア、排出エリアはエリアから派生しているため、搬送ステージはこれら３種類のエリアを統一的に扱うことができます。しかし、搬送ステー
ジからそれぞれ個別の特性も扱う必要があります。そこで、搬送ステージには、導入エリア、処理エリア、排出エリアへの関連も持たせました。また、これらの関連に{subsets エリア}を指定することによって、関連先の要素がエリアへの関連先要素に含まれていることを明確にしています。

6

これは、このモデルを理解しやすくするためですので、パッケージ分けをしても問題ありません。

ドメイン構造に着目したモデル

20

インライン装置

分析モデル
静的モデル
インライン装置クラス
class クラス図イ ンライ ン装置++

運転開始() :void
運転停止() :void

図12

クラス名

説明

インライン装置

インライン装置全体をまとめているクラスです。
インライン装置クラスの下に、コンポジット集約で、操作部・搬送部・処理部の 3 つがぶら下がっています。

操作部のクラス構成
class クラス図
操作部

操作ボタン

+操作部

+スタートボタン1

1 <<ユーザ操作>>+ストップボタン + 押下() :void<<Event>>
1 + 押下イベント() :void

+操作部
1
図13

クラス名

説明

操作部

ユーザからのインライン装置への操作をまとめたクラスとなります。
ユーザのアクションに伴うイベントを受け取ってどのような処理を行うかが定義されます。

操作ボタン

ユーザがインライン装置に命令を与えるためのボタン型のインタフェー
スを提供するクラスです。
本クラスはユーザによって自身が押されたことを知ると、操作部へ通知
します。

21

分析モデル

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

処理部のクラス構成
class クラス図
処理部+

処理実行() :void

+処理部

1

+処理ユニット1

処理ユニット+

処理実行() :void

図14

クラス名

説明

処理部

試料に対してインライン装置で行うべき処理を定義したクラスとなります。
処理部の処理実行が呼び出されると処理部は処理ユニットの適切な操作を呼び出します。本クラス図では一つの操作しか定義しておりません
が、場合によっては処理ユニットの複数の操作を何度か呼び出して一つの処理を実現することもあります。

処理ユニット

試料に対して物理的な処理を行うクラスになります。例えば、処理部クラスから「８０℃まで加熱してください」という依頼があった場合、処理ユニットの種別によってはガスコンロのように炎で加熱する場合もあ
れば、IH ヒーターのように磁力で加熱する場合もあります。このように、本クラスは試料の処理を物理的にどのように実現するかを定義する
クラスになります。

搬送部のクラス構成
class 搬送部
搬送ステージ

搬送部
停止予約 = false
運転中確認()
搬送()
搬送停止()
少し待つ()<<Event>>
停止完了イベント()

エリア

導入エリア

1

1

1 処理エリア{subsets エリア}

試料位置決め器
位置決め()

処理エ リア

試料取扱い()
試料受け取り可能確認()
試料受取り開始()
試料受け取り終了(受け取り試料あり)

導入エリア
試料位置決め器 1

1

試料

処理ログ

1

1

エリア内試料 ID
現在エリア
0..1

処理ログ 処理済み = false*
処理対象試料 {ordered} 処理済設定()

1
搬送ステージ

導入エ リア
前処理装置

エ リア

試料取扱い()*{ordered} 搬送可能か()

1 導入エリア{subsets エリア}

前処理装置
引き渡し開始要求()
引き渡し可能確認()
試料受け取り可能設定()
試料受け取り不可設定()
引き渡し終了通知()

1 搬送ステージ

試料取扱い()
搬送()
搬送部
1 単搬送動作実行()
搬送ステージ上に試料あり確認()
1 搬送ステージ 処理エリアに処理前の試料あり確認()
排出待ち確認()
搬送動作ロック()
搬送動作アンロック()
試料受け取り可能確認()
1
1
搬送ステージ
搬送ステージ1

試料取扱い()

後処理装置

排出エ リア
1

排出待ち

排出エリア

検出状態取得()1

排出跨りセンサ
1

1

引き渡し開始()試料受け取り確認()
引き渡し終了(引き渡し試料あり)引き渡し可能状態通知(可不可)

排出エリｱ

試料排出器

1
検出センサ

1

後処理装置

排出エリア

排出待ち()
試料取扱い()
搬送可能か()

導入エリア

導入検出跨りセンサ

1 排出エリア{subsets エリア}

1

試料排出器
排出()

図15

クラス名

説明

搬送部

試料に対してインライン装置で行うべき搬送を定義したクラスとなります。

ドメイン構造に着目したモデル

22

インライン装置

搬送部は、搬送が呼び出されると搬送ステージの搬送と試料取扱いを交互に呼び出し続けます。また、搬送停止が呼び出されると搬送ステージの搬送と試料取扱いを呼び出さなくなります。
搬送ステージ

試料に対して搬送を行うクラスになります。搬送ステージは、単搬送動
作実行が呼び出されると、エリアが保持する試料を次のエリアへ搬送し
ます。

エリア

試料が置かれる場所を定義するクラスになります。試料は、前処理装置
から導入され、搬送ステージによってエリアからエリアに次々に運ばれ、最終的には後処理装置へ排出されます。

導入エリア

前処理装置から試料が物理的に置かれるエリアクラスになります。前処
理装置や導入検出跨りセンサ、試料位置決め器とやりとりをしながら、試料の導入を実現します。

前処理装置

前処理装置とインライン装置とのインタフェースを実現するクラスになります。

試料位置決め器

導入エリアにある試料を物理的に位置決めする試料位置決め器を実現するクラスになります。

処理エリア

試料を処理するエリアクラスになります。処理エリアに到達すると、処理部によって試料が処理されます。

排出エリア

後処理装置へ試料を渡すためのエリアクラスになります。試料排出器や排出跨りセンサ、後処理装置とやりとりをしながら、試料の排出を実現
します。

試料排出器

排出エリアにある試料を物理的に排出する試料排出器を実現するクラスになります。

検出センサ

試料が跨っていることを物理的に検知するセンサを実現するクラスになります。導入検出跨りセンサと排出跨りセンサの二つがあります。

後処理装置

インライン装置と後処理装置とのインタフェースを実現するクラスにな
ります。

試料

試料そのものを表すクラスです。

処理ログ

試料を処理した際のログを定義するクラスになります。
試料が処理されると処理ログが生成されます。

23

分析モデル

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

インライン装置システム全体のクラス構成
class クラス図（枠付き）

インライン装置
+
+
+

1
+装置

+装置

1

1

1

+搬送部

停止予約 = false+ 運転中確認()+ 搬送()+ 搬送停止()- 少し待つ()<<Event>>+ 停止完了イベント()

操作ボタン

+操作部

+スタートボタン1

1 <<ユーザ操作>>+ 押下()+ストップボタン<<Event>>
1 + 押下イベント()

+操作部
1

1

搬送部
-

操作部

+操作部

+装置

運転開始()
運転停止()
停止完了時処理()

搬送ステージ
+
+
+搬送部
1 #
+
1
+搬送ステージ ++++++搬送ステージ

1

搬送可能か()+導入エリア

1

1

+
+
+
+

処理エリア

試料取扱い()
試料受け取り可能確認()
試料受取り開始()
試料受け取り終了(受け取り試料あり)+

試料取扱い()+処理エリア1

1 +導入エリア+導入検出跨りセンサ

試料位置決め器
位置決め()

1 +排出エリア{subsets エリア}

1 +処理エリア{subsets エリア}

+導入エリア 1+試料位置決め器 1

+

0..1

1
+処理ログ
+
+処理対象試料 * {ordered} +試料+エリア内試料+ID

処理ログ
処理済み = false
処理済設定()

1

導入エリア+前処理装置1+現在エリア+搬送ステージ

1 +導入エリア{subsets エリア}
引き渡し開始要求()
引き渡し可能確認()
試料受け取り可能設定()
試料受け取り不可設定()
引き渡し終了通知()

試料取扱い()+*{ordered} +1

1+搬送ステージ

前処理装置
+
+
+
+
+

エリア

+搬送ステージ +エリア

試料取扱い()
搬送()
単搬送動作実行()搬送ステージ上に試料あり確認()
処理エリアに処理前の試料あり確認()
排出待ち確認()
搬送動作ロック()
搬送動作アンロック()
試料受け取り可能確認()

+

+
+
+
+

後処理装置

排出エリア
+後処理装置 +
+
1 +
+

排出待ち

1

排出待ち()
試料取扱い()
搬送可能か()+排出エリア+排出エリア1

引き渡し開始()試料受け取り確認()
引き渡し終了(引き渡し試料あり)引き渡し可能状態通知(可不可)+排出エリｱ1

1 +試料排出器

1

検出センサ+排出跨りセンサ

検出状態取得()

1

試料排出器
+

+処理部

1

処理部

+処理部
1

排出()

+

処理実行()
1+処理部+処理ユニット1

処理ユニット+

処理実行()

図16

インライン装置システムは、全体と部分の構造そのままに、インライン装置=全体、操作部・搬送部・処理部＝部分として、コンポジット集約になっています。分析モデルでは、集約の関連をそのまま使い機能を実現しています。

ドメイン構造に着目したモデル

24

インライン装置

インライン装置のオブジェクト構成
インライン装置の分析モデルでは、このオブジェクト図を基にして、動的モデルを作成しています。
sd コミュニケーション図
スタートボタン :操
作ボタン
インライン装置 :インライン装置

操作部 :操作部

ストップボタン :操作ボタン

搬送ステージ :搬送ステージ

搬送部 :搬送部

後処理装置 :
後処理装置
前処理装置 :
前処理装置

エリア１ :導入エリア

試料Ａ :試料エリア２ :
エリア

試料Ｂ :試料エリア３ :処理エリア

試料Ｃ :試料エリア４ :
エリア

試料Ｄ :試料エリア５ :排出エリア
試料Ｅ :試料

試料位置決め器 :試料位置決め器

導入検出跨りセンサ :検出センサ

処理ログＡ :処理ログ

処理ログＢ :
処理ログ

処理ログＣ :
処理ログ

処理ログＤ :
処理ログ

排出跨りセンサ :検出センサ

試料排出器 :
試料排出器

処理ログＥ :
処理ログ

:処理部

処理ユニット :処
理ユニット

図17

操作部には、スタートボタンとストップボタンがあります。
搬送部のエリアの数は、3..*です。先頭のエリアは導入エリアで、最後のエリアは排出エリア、その間のどこかのエリアが処理エリアとなり、それ以外は、通常のエリアです。このオブジェクト図では、導入エリ
アと処理エリアの間に 1 つのエリア、処理エリアと排出エリアの間に１つのエリアがあるものとしました 7。

7

オブジェクト図のレイアウトはクラス図のレイアウトと一緒にすると読みやすくなります。

25

分析モデル

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

動的モデル
ユースケース<UC1：運転を開始する>の相互作用
sd シーケンス図（UC1）
スタートボタン:操作ボタン

操作部 :操作部

インライン装置:インライン装置

搬送部 :搬送部:ユーザ
スタート()<<ユーザ操作>>

押下イベント()<<event>>
ref
運転開始()

シーケンス図（自動運転中）

図18

スタートボタンを押してから、インライン装置の運転が開始するところまでを示しています。
運転の様子は、「連続運転の相互作用」を参照してください。

ドメイン構造に着目したモデル

26

インライン装置

連続運転の相互作用
sd シーケンス図（自動運転中）:インライン装置:搬送部:搬送ステージ

エリア[1] :エリア

エリア[2] :エリア

エリア[3] :エリア

運転開始()
例として、３つのエリアを示している。エリアには導入、処理、排出エリアも含まれる。

搬送()
停止予約= :false

このループとは非同期的に搬送部へ停止要求がくる。停止要求を受けると停止予約が true になりループを抜ける。

loop[停止予約 = false]

試料あり= 搬送ステージ上に試料あり確認()

alt 搬送ステージ上の試料有無[試料あり == true]
試料取扱い()

搬送ステージに含まれる全てのエリアに対して、試料取扱いの操作を行う。

par[エリア1]

試料取扱い():boolean[エリア2]

試料取扱い():boolean[エリア3]
試料取扱い():boolean

排出待ち= 排出待ち確認() ref シーケンス図（排出待ち）

全てのエリアから試料取扱い完了通知を受け取ってから戻る。

alt 排出待ち確認の結果[排出待ち == true]
すこし待つ()

後処理装置に排出できずに待っている場合、時間をおいて、再度試料取扱いする。

[排出待ち == false]
搬送()
単搬送動作実行()

各エリアの試料を次のエリアへ移動する。
先頭のエリアの試料はなくなる。

搬送結果= :boolean
搬送に何らかのトラブルが発生した場合
は、Loopを抜ける。

break[搬送結果 == false][試料あり == false]
すこし待つ()

停止完了イベント()<<event>>

図19

先頭の運転開始()は「ユースケース<UC1：運転を開始する>の相互作用」のインライン装置::運転開始()の続きです。
このダイアグラムの一番下にある停止完了イベントは、図 26 のインライン装置クラスのステートマシン
図につながっています。

27

分析モデル

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

排出待ちのシーケンスを図 20 に示します。

sd シ ーケンス図（排出待ち）:搬送部:搬送ステージ:排出エリア

排出待ち確認() :boolean
r= 排出待ち() :boolean:r

図20

搬送ステージは排出エリアから排出待ちの状態を取得します。そのために、排出エリアは、エリアの関連の他に、排出エリアへの関連を持っています。

ドメイン構造に着目したモデル

28

インライン装置

ユースケース<UC2：運転を停止する>の相互作用
sd シ ーケンス図（UC2）
ストップボタン:操作ボタン

操作部 :操作部

インライン装置:インライン装置

搬送部 :搬送部:ユーザ

ストップ()<<ユーザ操作>>
押下イベント()<<event>>
運転停止()
搬送停止()
停止予約= :true

停止予約がtrueに設定されると、非同期的にループしていた自動運転処理が終了し、インライン装置に停止完了イベントが通知される。
停止完了イベント()<<event>>

図21

このダイアグラムの「搬送部::搬送停止()」は、下の搬送部クラスのステートマシン図につながっています。停止予約=true になると、図 19 の連続運転の相互作用の Loop[停止予約=false]を抜けて、連続運転が停止します。

29

分析モデル

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

ユースケース<UC3：試料を導入する>の相互作用
sd シ ーケンス図（UC3）

前処理装置 :
前処理装置

実際の前処理装置のラッピングをしている。

エリア1 :導入
エリア

前処理装置

導入検出跨りセンサ :検出センサ

引き渡し開始要求():搬送ステージ:搬送部

試料受取開始中は搬送ステージに対して動作をロックを指示しその間のステージを固定する。

試料受取り開始()

搬送動作ロック()

引き渡し可能確認() :boolean
既に導入エリアに試料がある場合と現在停止中だった場合は不可と判断する。

試料受け取り可能確認()

受け取り可能= 試料受け取り可能確認() :boolean
運転中確認() :booleanalt 導入エ リア での試料受け取り可能確認[受け取り可能 == 可能]

試料受け取り可能設定()

引き渡し可能状態通知(可能)[受け取り可能 == 不可]

試料受け取り不可設定()

引き渡し可能状態通知(不可)導入エリアから試料が移動するまでは、
前処理装置に受取不可設定を返す。

引き渡し終了通知()
試料の引き渡しの有無を確認して、導入エリアへの通知の引数に入れる。
試料引き渡し確認() :Boolean
試料受け取り終了(受け取り試料あり :boolean)alt 導入エ リア での試料受け取り終了[受け取り試料あり == true]:試料導入エリアの試料

試料受け取り不可設定()
引き渡し可能状態通知(不可)引き渡しは終了しているが、この時点では試料はまだ導入エリアにある。

搬送動作アンロック()

図22

連続運転中に前処理装置から試料が引き渡されるシーケンスです。仕様の「前後の処理装置とのハンドシ
ェーク仕様」と対応しています。

ドメイン構造に着目したモデル

30

インライン装置

導入エリアの試料取扱いの相互作用
sd シーケンス図 (UC3のその後):搬送ステージ

エリア1 :導入エリア

導入検出跨りセンサ :検出センサ:試料位置決め器

試料取扱い()

alt 試料有無[試料あり]

導入確認= 検出状態取得()

試料が導入エリアにある場合は導入検出跨りセンサで検出を確認した後、位置決め器に位置決めを指示する。

opt[導入確認 == true]
位置決め()[試料なし]

試料取扱い()
導入エリアの試料取扱いは終了図23

図 19 の連続運転の相互作用の「搬送ステージ::試料取扱い()」内、導入エリアの試料取扱い()のシーケ
ンスです。

31

分析モデル

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

処理エリアの試料取扱いの相互作用
sd シーケンス図 (UC3のその後2):搬送ステージ:処理エリアエリア内試料 :試料:処理ログ

処理部 :処理部

処理ユニット :処理ユニット

処理ログに、エリア内試料が処理済みかどうかを記録している。

試料取扱い()alt 処理の可否[エリア内試料が存在する and エリア内試料が処理済みでない]処理実行()
処理実行()
処理済設定():処理ログ.処理済み = true;[エリア内試料が存在しない or エリア内試料が処理済みである]試料取扱い()

図24

図 19 の連続運転の相互作用の「搬送ステージ::試料取扱い()」の中の、処理エリアの試料取扱い()のシーケンスです。

ドメイン構造に着目したモデル

32

インライン装置

ユースケース<UC5：試料を排出する>の相互作用
sd シ ーケンス図 (UC5)
搬送ステージ :搬送ステージ

エリアＮ :排出エリア:試料排出器

排出跨りセンサ :検出センサ

後処理装置 :
後処理装置
後装置

試料取扱い() :boolean

alt 排出エ リア の試料[試料あり]

引き渡し開始()引き渡し開始要求()

装置間プロトコルにより引き渡し開始を通知後受取確認を行う。

受け取り可能= 試料受け取り確認() :boolean
引き渡し可能確認()
引き渡し可能状態通知(可不可 :boolean)
alt 排出エ リア での試料受取確認[受け取り可能 == 可能]
排出()

排出動作は試料排出器に委譲し、検出結果を排出跨りセンサの状態で取得する。

検出状態取得()排出を確認した後、引き渡し終了を通知する。

引き渡し終了(引き渡し試料あり :boolean)
引き渡し有無通知(有無 : boolean)
引き渡し終了通知()[受け取り可能 == 不可能]
排出待ちとなる。一定時間後、搬送ステージから試料取扱いが指示される。

[試料なし]

試料取扱い() :boolean

図25

図 19 の連続運転の相互作用の「搬送ステージ::試料取扱い()」の中の、排出エリアの試料取扱い()のシーケンスです。
仕様の「前後の処理装置とのハンドシェーク仕様」と対応しています。

33

分析モデル

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

インライン装置クラスのステートマシン
stm ステートマシン図（イ ンライ ン装置）

搬送部からの停止完了イベント

停止中

運転開始

運転中
+

停止完了イベント

停止完了イベント

停止移行中

運転停止

entry / 搬送部.搬送+

entry / 搬送部.搬送停止

図26

インライン装置は、この３つの状態で成り立っています。
運転中に停止完了イベントが発生するのは、何らかのトラブルが発生した場合です。
停止移行中に停止完了イベントが発生するのは、ストップボタンで運転停止をしたときです。

ドメイン構造に着目したモデル

34

インライン装置

搬送部クラスのステートマシン
stm ステートマシン図（搬送部）

exitの停止完了イベントは、インライン装置がハンドリングする。

停止中

運転中
搬送

+
+
+

entry / 停止予約 = false
exit / 停止完了イベント
搬送停止 / 停止予約 = true
[搬送ステージ上に試料あり]

取扱中[停止予約 == true]+

entry / 搬送ステージ.試料取り扱い[搬送ステージ上に試料なし][停止予約==false][停止予約==true][停止予約 == true]

試料搬入待ち排出待ち[停止予約 == false]+

entry / 待つ+

entry / 待つ

[後処理装置への排出待ち][後処理装置への排出待ちでない]
搬送中[停止予約 == true]+

entry / 搬送ステージ.搬送[停止予約 == false]

図27

搬送部は、資料取扱い(=位置決め・処理・排出)と搬送、試料待ちの合間に停止チェックが入ります。
要求仕様の「停止ボタンによる連続動作の停止のタイミングの要求」や「搬送部の各動作と処理部の動作の並行タイミングの要求」に準じています。

35

分析モデル

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

搬送ステージクラスのステートマシン
stm ステートマシ ン図（搬送ステージ ）void 試料取扱い処理(){
foreach (全てのエリア){// エリアの試料取扱いは非同期処理とし、ここでは完了を待たない
エリア.試料取扱い();}
全てのエリアからの試料取扱い完了通知を待つ
}

待機中
+
+

試料取り扱い / 試料取扱い処理
搬送ステージ上に試料あり確認 / 搬送可否判定処理

搬送

一搬送単位搬送+boolean 搬送可否判定処理(){
foreach (全てのエリア){// 試料取扱いとは異なり、各エリアから同期的に結果を取得する
r = エリア.搬送可能か？();
if (r == false){
return false;}}
return true;}

entry / 搬送処理

搬送処理(){// 各エリアに関連付けられた試料を１つ後ろのエリアに移動する// 先頭のエリアに関連付けられた試料はなくなる
for (int i = エリア数 ; i > 1 ; i-- ){エリア(i-1).エリア内試料 = エリア(i-2).エリア内試料;}エリア(0).エリア内試料 = null;}

図28

搬送ステージは、全試料を１エリアずつ移動させます。

ドメイン構造に着目したモデル

36

搬送動作ロック()
搬送動作アンロック()
資料受け取り可能確認()
は、どの状態でも受け付ける。

インライン装置

PIM 設計モデル
インライン装置の PIM 設計モデルでは、

ハードウェアボタンへの対応

ハードウェアボタンの信号をソフトウェアのボタンクラスにつなげる仕組みのモデルの追加

タスク間通信の仕組み


運転中に停止させるための仕組みのモデルの追加



搬送部の 試料位置決め動作・試料排出動作 および処理部による処理動作の並行処理と待ち合わせの仕組みのモデルの追加

状態ごとの機能拡張性付加

処理部に状態ごとの処理を追加しやすくするための仕組みの追加を行います。
それぞれの追加事項ごとに、分析モデルを設計モデルにします。

今回は、参考となる設計だけを見やすくするため、すべてのユースケースの設計モデルを提供していません。掲載以外の箇所は、PIM 設計レベルでも分析モデルのままでよいか、（たとえばスタートボタンとストップボタンへの設計が同じなど）記載された設計モデルと同等の設計を入れることで、PIM 設計モデルを完成させることができます。

37

PIM 設計モデル

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

ハードウェアボタンへの対応要求仕様の「ボタンのハードウェアインタフェース仕様」に準じて、ポーリングやチャタリング対策の設計を行います。

静的モデル
ハードウェアボタンへの対応のクラス構成
class クラス図（ハードウェア ボタン）
タイマーは一定周期でボタンにタイムアウトを通知する。
操作ボタン-

アドレス :unsigned long
マスクビット :unsigned longカウンター :int
状態 :ボタン状態

-ボタン
0..*

+ 操作ボタン(アドレス, マスクビット)+ timeout() :void- レベル取得() :void- 状態遷移() :void- カウントアップ() :void- カウント初期化() :void<<Event>>+ 押下イベント() :void
-ボタン

0..*

-IOマップ11-

周期タイマー発火() :void<<enumeration>>
ボタン状態
make状態
break状態<<enumeration>>
IOレベル

IOマップ
+

Timer

-タイマー

レベル取得(アドレス, マスクビット) :IOレベル

HIGH
LOW

図29

8

クラス名

説明

ボタン状態

《enumeration》make 状態8は、操作ボタンが押されている状態を示します。break 状態は、操作ボタンが押されていない状態を示します。

IO レベル《enumeration》HIGH は IO マップの値が HI であること。LOW は
IO マップの値が LOW であることを示します。

操作ボタン

操作ボタンとして役割を実現するクラスになります。内部状態として
make/break の状態を持ちます。
Timer クラスからのタイムアウト通知に対して状態と I/O マップからのレジスタ値に応じた振る舞いを実現します。
チャタリング除去の責務をもち、チャタリング除去後に操作部にイベン
トを通知します。

Timer

タイマーとしての役割を行うクラスになります。事象発生後一定周期でタイムアウトを通知します。

IO マップ

メモリマップトされたレジスタ値のアクセスメソッドを提供しするクラスとなりますmake 状態の詳細な定義は、要求仕様の[設計への制約]-[ボタンのハードウェアインタフェース仕様]を参照。

ドメイン構造に着目したモデル

38

インライン装置

スタートボタンのハードウェアボタンへの対応
ハードウェアボタンのメカニズムをスタートボタンに適用したクラス図を下図に示します。
class クラス図（操作部）
操作ボタン

操作部

-

-操作部

アドレス :unsigned long
マスクビット :unsigned longカウンター :int
状態 :ボタン状態

-ボタン
*

1

-

周期タイマー発火() :void1<<Event>>+ スタートボタン押下イベント() :void+ ストップボタン押下イベント() :void1-スタートボタン + 操作ボタン(アドレス, マスクビット)-ストップボタン + timeout() :void- レベル取得() :void
1
1 - 状態遷移() :void- カウントアップ() :void-操作部- カウント初期化() :void<<Event>>+ 押下イベント() :void

Timer

-タイマー

-ボタン

2

-IOマップ

1

IOマップ+<<enumeration>>
ボタン状態
make状態
break状態<<enumeration>>
IOレベル
HIGH
LOW

レベル取得(アドレス, マスクビット) :IOレベル

図30

インライン装置の要件で「スタートボタン」、「ストップボタン」の２つのボタンに操作ボタンはインス
タンス化されます。

39

PIM 設計モデル

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

動的モデル
ハードウェアボタンからボタンクラスへの信号通知の相互作用
sd シーケンス図（スタート時）<<hardware>>:ハードウェアボタン

:IOマップスタートボタン:操作ボタン:Timer:操作部:インライン装置ユーザー
スタート()<<ユーザ操作>>
opt[レジスタ変化あり]
レジスタ変化()

レジスタ変化は電気的な通信メッセージである。
スタート操作後しばらくはチャタリングによるゆらぎがある。

Timerは一定周期でtimeoutを通知する。

loop

timeout()
alt ボタン状態[break状態]

レベル取得()

レベル取得(アドレス, マスクビット) :IOレベル

alt 取得レベル=レベル取得(アドレス,マスクビット)[取得レベルがHIGH]
カウントアップ()

alt カ ウントアップ値の条件[カウントアップ値がNの時]仕様によるチャタリングの連続読み込みをカウンター値で表す。
連続Ｎ回Hiレベルだった場合はカウンターの値がＮとなるのでチャタリング除去完了と判断してイベントを通知する。
その後はカウンタを初期化して内部状態を遷移する。

カウント初期化()
状態遷移()<<event>> 押下イベント()<<event>>
スタートボタン押下イベント()[取得レベルがLOW]

連続Ｎ回Hiレベルを取得できない
場合はカウンタを初期化する。

操作ボタン.ボタン状態=make状態

運転開始()

カウント初期化()[make状態]
レベル取得()

レベル取得(アドレス、マスクビット) :IOレベル

alt 取得レベル=レベル取得(アドレス,マスクビット)[取得レベルがHIGH]
状態遷移()[取得レベルがLOW]

操作ボタン.ボタン状態=break状態

既にmakeの状態でLow
レベルを検知した場合はbreak状態に遷移する。

図31

ユーザによる「《hardware》ボタン押下」が「IO マップ」のレジスタに伝わり、「スタートボタン:操作ボタン」がレジスタを確認し、「操作部」に「《event》押下イベント」を伝えるシーケンス図です。
Timer で周期的に「操作ボタン」にレジスタを確認させています。
ドメイン構造に着目したモデル

40

インライン装置「操作ボタン」内では、チャタリング対策の仕様を実現させています。

41

PIM 設計モデル

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

タスク間通信の仕組み
静的モデル
タスクマッピングしたオブジェクト構成
sd コミュニケーション図
スタートボタン :操
作ボタン
インライン装置 :インライン装置

操作部 :操作部

ストップボタン :操作ボタン

搬送ステージ :搬送ステージ

搬送部 :搬送部

後処理装置 :
後処理装置
前処理装置 :
前処理装置

エリア１ :導入エリア

試料Ａ :試料エリア２ :
エリア

試料Ｂ :試料エリア３ :処理エリア

試料Ｃ :試料エリア４ :
エリア

試料Ｄ :試料エリア５ :排出エリア
試料Ｅ :試料

試料位置決め器 :試料位置決め器

導入検出跨りセンサ :検出センサ

処理ログＡ :処理ログ

処理ログＢ :
処理ログ

処理ログＣ :
処理ログ

処理ログＤ :
処理ログ

排出跨りセンサ :検出センサ

試料排出器 :
試料排出器

処理ログＥ :
処理ログ

:処理部

処理ユニット :処
理ユニット

図32

インライン装置では、このオブジェクト図のようにタスクマッピングします。このタスクマッピングは、
並行的に動作するオブジェクトをタスクとして分割しています(タスクマッピング手法の解説はありません)。
設計モデルに、タスク間にまたがるメッセージをやり取りする仕組みを追加します。

ドメイン構造に着目したモデル

42

インライン装置

タスク間でメッセージをやりとりするための仕組みのクラス構成
class クラス図（タスク間通信）-同期結果リスナー
1<<interface>>
通信先結果リスナーイ ンタフェース

通信元+<<interface>>
通信先イ ンタフェース+ 非同期メソッド() :void+ 同期メソッド() :型

同期メソッド結果受信(型) :void

通信先-呼び出し対象++

非同期メソッド() :void
同期メソッド() :型

1#呼び出し対象

プロキシ －-プロキシ－
1+++

スケジ ューラー

同期メソッド結果 :型+
非同期メソッド() :void
1 ++同期メソッド() :型
同期メソッド結果受信(型) :void -スケジューラー -開始する() :void
停止する() :void
呼び出す(コマンド) :void
コマンドを実行する() :void-実行待ちコマンドキュー<<call>>コマンド+実行する() :void0..*-実行待ちコマンド1
非同期コマンド

コマンドキュー
++1

末尾に追加する(コマンド) :void
先頭を取りだす() :コマンド+実行する() :void

同期コマンド++同期メソッド結果受信(型) :void
実行する() :void<<instantiate>><<instantiate>>

図33

通信元が通信先へ処理を依頼している間、通信元も他の処理を並行で実行できるように通信元クラスと通信先クラスの間に下記のクラスを追加しています。
クラス名

説明

通信元

通信先に処理依頼を出すクラスです。

通信先通信元から処理依頼を受けて処理を実行するクラスです。

通信先インタフェース

通信元から呼び出される処理をまとめたインタフェースです。

通信先結果リスナ
ーインタフェース

通信元から呼び出される処理結果を知るためのリスナーインタフェース
です。

プロキシー

通信先の代理クラスとなります。通信元から、通信先の代わりに呼び出されます。プロキシ－クラスは、呼び出されたメソッドに対応するコマンドを生成し、コマンドの実行をスケジューラースレッドクラスに依頼します。

スケジューラー

通信元から依頼されたコマンドを順番に従って実行するクラスです。コ
マンドの実行は、通信元とは別スレッドになります。

コマンド

通信先インタフェースの処理に対応したコマンドです。スケジューラー
スレッドから呼び出されると通信先の対応する処理を実行します。

コマンドキュー

通信元から依頼されたコマンドを蓄積するキューです。スケジューラー
クラスからコマンドが取りだされるとキューからコマンドが取り除かれます。コマンドキュークラスはコマンド実行時のスレッドとコマンド登録時のスレッドと異なるスレッドから呼び出されるため、スレッドセー
フにしてください。

同期コマンド通信先インタフェースの処理に対応した具体的なコマンドクラスです。

非同期コマンド

通信先インタフェースの処理に対応した具体的なコマンドクラスです。

43

PIM 設計モデル

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

通信元が、直接、通信先を呼び出すのではなく、スケジューラーを挟む事によって並行処理を実現しています。

ドメイン構造に着目したモデル

44

インライン装置

動的モデル
タスク間でメッセージをやりとりするための仕組みの相互作用(非同期)
sd シ ーケンス図(タスク間通信－非同期処理)
通信元 :通信元

プロキシー :
プロキシ－

スケジューラー :スケジューラー

コマンドキュー :コマンドキュー

通信先 :通信先

非同期メソッド()

非同期コマンド :非同期コマンド生成する()

呼び出す(コマンド)
末尾に追加する(コマンド)

コマンドキューへの追加及び取りだしは、
同時に実行されないよう排他制御する。
コマンドを実行する()あるタイミングで呼び出される。
・一定周期で・コマンドキューの中身が変化した事を検知して先頭を取りだす() :コマンド実行する()
非同期メソッド()

通信元が呼び出した非同期メソッドに対応
するメソッドが呼び出される。
削除する()

通信元から依頼された非同期メソッドの呼び出しをコマンドとしてキューイングすることで順序整合性を保持する。
また、プロキシーと通信先のメソッド名を同じにすることで通信元
はタスク間通信を意識することなく通信先のメソッドを呼び出すことができる。

図34

タスク間通信を適用した非同期メソッドの呼び出しのシーケンスです。
通信元から呼び出されたプロキシーはコマンドをコマンドキューに追加すると直ちに通信元に制御を返します。スケジューラーは、コマンドキューに追加された先頭のコマンドを取りだしてコマンドを実行します。
スケジューラーがコマンドキューから抜き出すタイミングは、ポーリングする方法やイベント検知などの方法が考えられますが、ここでは詳細には触れません。

45

PIM 設計モデル

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

タスク間でメッセージをやりとりするための仕組みの相互作用(同期)sd シ ーケンス図(タスク間通信－同期処理)
通信元 :通信元

プロキシー:プロキシ－

スケジューラー :スケジューラー

コマンドキュー
:コマンドキュー

通信先 :通信先

同期メソッド()同期コマンド :同期コマンド生成する()
呼び出す(コマンド)
末尾に追加する(コマンド)

コマンドキューへの追加及び取りだしは、
同時に実行されないよう排他制御する。

コマンドを実行する()

結果が返ってくるまで（同期メソッド結果受信が呼ばれるまで）通信元へ制御を返さないことで同期を実現する。

先頭を取りだす() :コマンド実行する()
同期メソッド()同期メソッド結果受信(型)削除する()あるタイミングで呼び出される。
・一定周期で・コマンドキューの中身が変化した事を検知して

図35

タスク間通信を適用した同期メソッドの呼び出しのシーケンスです。
通信元からの呼び出し方法は非同期メソッドと同じです。通信元から同期メソッドが呼び出された場合、プロキシーは、コマンドをコマンドキューに追加しても通信元に制御を返さず、同期コマンドから同期メソ
ッド結果受信が呼び出されるまで待ちます。同期メソッド結果受信が呼び出されると通信元へ制御を返します。

ドメイン構造に着目したモデル

46

インライン装置

静的モデル
インライン装置から搬送部へのタスク間通信の構造
class クラス図（イ ンライ ン装置－搬送部間）
タスク間通信イ ンライ ン装置
+
+
+

+
+

運転開始() :void
運転停止() :void
停止完了時処理() :void+装置<<interface>>
搬送部イ ンタフェース
搬送() :void
搬送停止() :void

1

搬送部
-

+ 搬送() :void+ 搬送停止() :void+ 運転中確認() :boolean- 少し待つ() :void<<Event>>+ 停止完了イベント() :void-呼び出し対象
1

1

搬送部スケジ ューラー搬送部プロキシ －

+搬送部
+
+

搬送() :void
搬送停止() :void

1-スケジューラー+++-

開始する() :void
停止する() :void
呼び出す(搬送部コマンド) :void
コマンドを実行する() :void#呼び出し対象

搬送部コマンド<<call>>+停止予約 :boolean = false

1

実行する() :void0..*-実行待ちコマンド-実行待ちコマンドキュー

1

搬送部コマンドキュー++

末尾に追加する(搬送部コマンド) :void
先頭を取りだす() :搬送部コマンド

搬送コマンド+実行する() :void

搬送停止コマンド+実行する() :void<<instantiate>><<instantiate>>

図36

インライン装置と搬送部の間にタスク間通信のメカニズムを適用したクラス図になります。
クラスの詳細な説明については分析モデルのクラス図及びタスク間通信のクラス図の説明を参照してくだ
さい。

47

PIM 設計モデル

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

動的モデル
インライン装置から搬送部へタスク間通信(非同期)の相互作用
sd シ ーケンス図（運転開始）
スタートボタン:操作ボタン

操作部 :操作部

インライン装置

搬送部プロキシ－ :搬送部プロキシ－

搬送部スケジューラー :搬送部ス
ケジューラー

搬送部コマンドキュー :搬送部コマンドキュー

搬送部 :
搬送部

:ユーザ
スタート()<<ユーザ操作>>

スタートボタン
押下イベント()
運転開始()
搬送()
搬送コマンド :搬送コマンド生成する()
呼び出す(搬送コマンド)
末尾に追加する(搬送部コマンド)

コマンドを実行する()
先頭を取りだす() :搬送部コマンド実行する()
搬送()削除する()

自動運転処理を行う。
連続運転の相互作用図を参照のこと。

図37

上図は図 18 の「UC1 運転を開始する」シーケンスに、インライン装置と搬送部間のタスク間通信メカニ
ズムを適用したシーケンス図になります。

sd シ ーケンス図（運転停止）
ストップボタン:操作ボタン

操作部 :操作部

インライン装置 :インライン装置

搬送部プロキシ- :搬
送部プロキシ－

搬送部スケジューラー :搬送部ス
ケジューラー

搬送部コマンドキュー :搬送部コマンドキュー

搬送部 :
搬送部

:ユーザ
ストップ()<<ユーザ操作>>

ストップボタン
押下イベント()
運転停止()
搬送停止()
搬送停止コマンド :搬送停止コマンド

生成する()
呼び出す(搬送停止コマンド)
末尾に追加する(搬送停止コマンド)
コマンドを実行する()
末尾に追加する(搬送停止コマンド)

停止を予約し、実行出来るタイミングで停止する。
連続運転の相互作用図を参照のこと。

実行する()
搬送停止()
停止予約= :True
削除する()

図38

上図は図 21 の「UC2 運転を停止する」シーケンスに、インライン装置と搬送部間のタスク間通信メカニ
ズムを適用したシーケンス図になります。

ドメイン構造に着目したモデル

48

インライン装置

静的モデル
搬送ステージと導入エリアとのタスク間通信のオブジェクト構成
class クラス図（搬送ステージ－導入エ リア間）

搬送ステージ
+
+
#
+
+
+
+
+
+

便宜上、タスク間通信の操作のみ示す。

搬送ステージ－エ リア タスク間通信

試料取扱い() :boolean
搬送() :boolean+搬送ステージ+エリア
単搬送動作実行() :boolean
搬送ステージ上に試料あり確認() :boolean*
処理エリアに処理前の試料あり確認() :boolean 1{ordered}
排出待ち確認() :boolean
搬送動作ロック() :void
搬送動作アンロック() :void
試料受け取り可能確認() :boolean

エ リアプロキシ－+

試料取り扱い() :boolean+プロキシ－

1

試料取り扱いコマンドを追加する() :void
試料取り扱いコマンドを実行する() :void
試料取り扱い() :boolean+

試料取扱い() :boolean

導入エ リア

導入エ リアプロキシ－
+

エ リア

+実体

1

+プロキシ－
1

+実体
1

+
+
+
+

試料取扱い() :boolean
試料受け取り可能確認() :void
試料受取り開始() :void
試料受け取り終了(受け取り試料あり :boolean) :void

パッケージの詳細に関してはタスク間通信の図を参照

図39

搬送ステージと導入エリアの間にあるパッケージは、タスク間通信のクラス群です。タスク間通信の詳細
は、タスク間通信のクラス図に記載していますので、ここでは省略しています。

49

PIM 設計モデル

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

動的モデル
搬送ステージと導入エリアとのタスク間通信(同期)の相互作用
sd シーケンス図（試料取り扱い）
搬送ステージ :搬送ステージ

エリア１プロキシ－ :導入
エリアプロキシ－

エリア１ :導入エリア

検出導入跨りセンサ:検出センサ

試料位置決め器 :試料位置決め器

試料取り扱い()試料取り扱いコマンドを追加する()
タスク間通信の詳細はタスク間通信のメカニズムを参照のこと。
試料取り扱い待ち状態になる。

試料取り扱いコマンドを実行する()

試料取り扱い()alt 試料有無[試料あり]

導入確認=検出状態取得()

opt[導入確認 = true]

位置決め()[試料なし]
試料取り扱い()試料取扱い()

図40

上図は図 23 の搬送ステージと導入エリアの試料取り扱いシーケンスに、搬送ステージ－導入エリア間のタスク間通信メカニズムを適用したシーケンス図になります。

ドメイン構造に着目したモデル

50

インライン装置

状態ごとの機能拡張性付加
処理ユニットに、状態ごとの処理を追加しやすくするため、ステートパターンを導入します 9。
この設計では、


試料を処理するために、ヒーターによる加熱を必要とします。



省エネのために、ヒーターは必要に応じて加熱します。



また、ヒーターは加熱を開始してから処理が可能な温度になるまで時間がかかります。

の条件で、ステートパターンで加熱処理を追加する例を提示します。

静的モデル
処理ユニットの状態ごとの機能拡張のクラス構成
class クラス図（処理ユニット拡張）
処理ユニットコンテキスト++++-処理ユニット
処理実行() :void
状態設定(state) :void 1
停止() :void
試料を処理する() :void
0..1

-状態

1

処理ユニット状態+ヒーター 1

+
+

ヒーター
+
+

処理実行(処理ユニットコンテキスト) :void
停止(処理ユニットコンテキスト) :void

加熱(加熱する) :void
十分加熱されたか確認() :boolean

非加熱状態
+
+
+

インスタンス取得() :非加熱状態
処理実行(処理ユニットコンテキスト) :void
停止(処理ユニットコンテキスト) :void

加熱状態
非加熱状態クラスと加熱状態クラスはシングルトンであり、それぞれのクラスのインスタンス取得()を呼び出すことでインスタンスを取得できる。

+++

インスタンス取得() :加熱状態
処理実行(処理ユニットコンテキスト) :void
停止(処理ユニットコンテキスト) :void

図41

分析モデルの[処理ユニットクラス]を、[処理ユニットコンテキストクラス]とし、処理ユニットにはヒーターが付いている、という考え方だけのクラスにします。[処理ユニットクラス]の振る舞いを状態ごとに分けて、[加熱状態クラス][非加熱状態クラス]として独立させています。
これは、GoF のステートパターンを用いています。詳細は、参考文献[Erich Gamma]を参照してください。

9

この例では、状態は 2 つしかありませんが、これから状態を増やしてゆく予定があるという仮定で、ステートパターンを用いています。

51

PIM 設計モデル

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

動的モデル
処理ユニットでのステートパターンを使った加熱と処理のステートマシン
stm ステートマシ ン図（処理ユニット拡張）

非加熱状態

待機中

加熱状態

停止 /加熱を止める++

entry / 試料を処理する
処理実行 / 試料を処理する

処理実行
加熱中
+

entry / 加熱する

[十分に加熱されている]
when(十分に加熱された)

図42

このステートマシン図は、加熱/非加熱がある場合の試料を処理する仕様を表しています。初期状態では非加熱状態になります。ヒーターに加熱が指示され十分に加熱されたときに加熱状態へ遷移します。ヒータ
ーが十分に加熱されたかどうかは常時確認する必要があるため when イベントを使用します。

ドメイン構造に着目したモデル

52

インライン装置

処理ユニットでのステートパターンを使った加熱と処理の相互作用
sd シ ーケンス図（処理ユニット拡張）:処理部

処理ユニットコンテキスト :処理ユニットコンテキスト:ヒーター

非加熱状態 :
非加熱状態

加熱状態 :
加熱状態

処理実行()

alt 状態ご との処理の実行[非加熱状態]処理実行(処理ユニットコンテキスト)
処理ユニットコンテキスト.ヒーター.加熱(true)loop[十分加熱されるまで]処理ユニットコンテキスト.ヒーター.十分加熱されたか確認():十分加熱されているかどうか

試料を処理する()

状態設定(加熱状態.インスタンス取得())[加熱状態]
処理実行(処理ユニットコンテキスト)
試料を処理する()

図43

図 24 の処理エリア試料取扱いの相互作用に、処理ユニットの機能拡張を追加したシーケンスです。
処理ユニットが持つ状態によって、処理が異なります。
非加熱状態ならば、ヒーターへの加熱を行い、十分に加熱されてから処理を行います。

53

PIM 設計モデル

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

sd シ ーケンス図（処理ユニット停止）
処理ユニットコンテキスト :処理ユニットコンテキスト

停止()

ヒーター :ヒーター

非加熱状態 :
非加熱状態

加熱状態 :加熱状態

一定時間、処理実行が呼ばれないと、停止が呼ばれる。

非加熱状態における停止()は、何もしない。

alt 状態毎の停止処理[非加熱状態]
停止(処理ユニットコンテキスト)[加熱状態]
停止(処理ユニットコンテキスト)
処理ユニットコンテキスト.ヒーター.加熱(false)

状態設定(非加熱状態.インスタンス取得())

図44

一定時間、処理ユニットの処理実行()が呼び出されないときに、ヒーターへの加熱を停止するシーケンスです。

ドメイン構造に着目したモデル

54

インライン装置

参考文献
 『オブジェクト指向における再利用のためのデザインパターン』Erich Gamma [ほか] 著、ソフトバン
クパブリッシング、1999
 『Java 言語で学ぶデザインパターン入門 マルチスレッド編』 結城 浩 著、ソフトバンククリエイティブ、
2002

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

付録：インライン装置とは「インライン装置」は、工場の生産ラインのような”ライン”で使用される、搬送部と処理部が一体となった装置です。下図「ラインとは」のように複数台のインライン装置がつながって”ライン”が構成されます。
但し、”ライン”の先端と終端の装置は、”インライン”になることができないため、供給装置と収納装置または、ロボットハンドなどが接続されます。
先頭の供給装置には、試料を人間やロボットが載せる

供給装置
試料

インライン装置
A

インライン装置
B

インライン装置
C

収納装置

任意の台数のインライン搬送装置が試料を処理して渡してゆく
終端の収納装置からは、人間やロボットが試料を降ろす
図45

ラインとは

また、1 台のインライン装置から見ると、ひとつ前の装置を“前処理装置”、ひとつ後の装置を“後処理装置”と呼びます。インライン装置は、「試料に対する処理」と「前処理装置と後処理装置との試料の受け渡し」
を行っています。たとえば、上図「インライン装置とは」の”インライン装置 A”の前処理装置は”供給装置”
で後処理装置は”インライン装置 B”です。”インライン装置 B”の前処理装置は”インライン装置 A”で後処理装置は”インライン装置 C”です。通常、インライン装置は、順番を組み替えてもラインを構成できます。

試料
前処理装置から試料を受け取る
図46

インライン装置

試料を処理する

インライン装置とは

付録：インライン装置とは

56

試料
後処理装置に試料を引き渡すインライン装置

付録：用語集用語説明

ライン

工場の生産ラインなどの流れ作業を行う集合のこと

インライン装置

ラインで使用される、搬送部と処理部が一体となった装置のこと。
ラインの先端／終端以外の部分で接続される。

供給装置

試料をラインに導入する装置。ラインの先端に接続されることがある。

収納装置

試料をラインから運び出す装置。ラインの終端に接続されることがある。

試料

ラインにおける搬送及び処理対象。

前処理装置

その装置の直前に接続される装置のこと。
主な前処理装置として、インライン装置と供給装置の二つがある。

後処理装置

その装置の直後に接続される装置のこと。
主な後処理装置として、インライン装置と収納装置の二つが考えられる。

試料処理履歴管理
システム

試料の処理結果及び履歴を管理するシステム。
一つの試料に対して、ラインを構成する複数のインライン装置の処理結果
及び履歴が管理される。

運転

インライン装置として継続的に動作すること。

搬送

試料を運ぶこと。

処理

試料を処理すること。
例えば、加工や検査など。

操作部

【責務】
・ユーザに対するインタフェース【構成要素】
・スタートボタン ・・・ 運転モードに入る・ストップボタン ・・・ 停止モードに入る
・電源ボタン・・・ 電源の ON/OFF を切り替える

処理部

【責務】
・試料の処理【構成要素】
・処理ユニット

インライン装置

搬送部

・・・

試料に対する処理を行う【責務】
・試料の搬送【構成要素】
・搬送ステージ・・・ 試料を搬送する・処理エリア・・・ 処理をする場所
・導入検出跨りセンサ・・・ 下記の２点を確認する
前処理装置から受け取った試料が（インライン装置内に）存在すること
前処理装置から受け取り終わった試料を取り損なっていないこと
・試料位置決め器
・・・ 試料を位置決めする→ 搬送ステージに確実に試料を導入するため・搬出跨りセンサ・・・ 下記の１点を確認する
後処理装置に排出し終わった試料が、排出し損なっていないかを確認する・試料搬出器・・・試料を後処理装置へ排出する

運転開始

操作部のスタートボタンを押下され、運転モードに入った状態。

運転停止

操作部のストップボタンを押下され、停止モードに入った状態。
ただし、停止モードに入ったからと言って即時に処理が停止するわけでは

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

ない。
試料の処理中は、１試料の処理が終了した所で停止する。
試料の処理中での停止はしない。
試料の導入（＝確
実に引き込む）引き渡された試料が、導入検出跨りセンサによって、正しく試料が引き渡されていることを確認すること

試料の排出引き渡した試料が、排出跨りセンサによって、正しく引き渡しできていることを確認すること引き渡される

前処理装置から搬送部へ試料が運ばれること

引き渡す

搬送部から後処理装置へ試料を運ぶこと

付録：用語集58

組込み分野のための UML モデルカタログ「インライン装置」
初版発行 ２０１3 年（平成２5 年）5 月 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