Vol. 46No. 6情報処理学会論文誌June 2005
オブジェクト指向組み込み制御システムのモデルベース開発法
吉 村健 太 郎†宮崎泰三†横山孝典††,☆
本論文では，オブジェクト指向とコード自動生成という 2 つの技術を統合化した，組み込み制御システムのモデルベース開発方法について述べる．組み込み制御システムの大規模化にともない，再利用性に優れたオブジェクト指向技術が本格的に注目されてきた．また近年，制御モデルからプログラムを自動生成するオートコードの技術が実用段階に近づいている．しかし，これら 2 つの技術の統合化には課題が多い．そこで我々は，オブジェクト指向組み込み制御システム向けの，コード自動生成を援用したモデルベース開発法を提案する．本開発法の特徴は，制御モデルから自動生成したソフト部品をラッパでオブジェクト化するとともに，そのラッパを自動生成可能としたことである．本提案方式により，モデルベース開発における実装用コード自動生成率を従来方式の 69%から 96%に向上させることができた．また，本開発法の自動車用エンジン制御システムへの適用事例を紹介する．
A Model-based Development Methodfor Object-oriented Embedded Control Systems
Kentaro Yoshimura,† Taizo Miyazaki†and Takanori Yokoyama††,☆
We present a model-based development method for embedded control systems. The de-velopment method integrates object-oriented software development and automatic programgeneration.The amount of embedded software is increasing dramatically, and there is anincreasing demand for improving development eﬃciency. Object-oriented software develop-ment, which excels in the reuse of software components, has been gaining a great deal ofattention. Recently, the quality and eﬃciency of the automatic program generation from acontroller model is becoming production level. However, an integrating these methods hassome diﬃculties. The objective of our research is to establish a model based developmentmethod for object-oriented embedded control systems adopting automatically generated soft-ware. The feature of this method is that a wrapper wraps an automatically generated functionwhich is handled as an object, and the wrapper is automatically generated too. We developa software that generate the wrapper from the automatically generated function. Therefore,the rate of automatically generated function is improved from 69% to 96%. We also explaina proposed development method with an application example to an engine control system forautomobiles.
1.は じ め に
自動車，産業用機器，家電製品など，広い分野で，
組み込み制御システムが用いられている．これら組み
込み制御システムでは，コンピュータ制御による高機
能化・高付加価値化が進み，ソフトウェアが飛躍的に
大規模・複雑化している．これにともない，新規制御
ソフトウェアの開発効率を向上させるとともに，ソフ
† 株式会社日立製作所日立研究所Hitachi Research Laboratory, Hitachi, Ltd.†† 株式会社日立製作所オートモティブシステムグループAutomotive Systems, Hitachi, Ltd.☆ 現在，武蔵工業大学Presently with Musashi Institute of Technology
トウェアの再利用が重要な課題になっている．
一般に，組み込み制御ソフトウェアの開発は，制御
設計者が制御仕様（制御ロジック）を開発する制御開
発と，制御仕様に基づいてソフトウェア開発者が制御
プログラムを作成するソフトウェア開発の 2 つの段階
従来の開発プロセスでは，まず制御開発において，
自然言語で記述した制御仕様書を作成し，その後ソフ
トウェア開発の段階において，制御仕様書をもとに制
御プログラムを作成してきた．しかし，自然言語によ
る仕様記述には，曖昧な記述や詳細仕様の記載漏れが
発生しやすく，ソフトウェア開発者が制御設計者の意
図どおりの制御プログラムを作成するのは容易なこと
ではない．また，制御仕様をそのままコーディングす
Vol. 46No. 6オブジェクト指向組み込み制御システムのモデルベース開発法1437
るのみでは，部品化・再利用に適したプログラム構造
にはならず，ソフトウェアの再利用が困難であるとい
う問題もあった．
ところが最近，制御開発においてモデルベース開
発が主流となりつつある．この手法では，制御系
CAE/CAD ツールを使用し，制御モデルをブロック
ダイアグラムで表す1)．このため，正確で可読性が良
い仕様記述が可能なうえ，プログラム作成前にシミュ
レーションにより制御ロジックの検証が可能であると
いう大きな利点がある．
こうした流れを受け，ブロックダイアグラムで書か
れた制御モデルから制御プログラムを自動生成する
ツールも開発されている2)．人手によらずプログラム
を自動生成することで，制御設計者とソフトウェア開
発者との間の仕様理解の不一致や，コーディングミス
によるヒューマンエラーを排除できるという利点があ
る．このため，制御プログラム自動生成機能はモデル
ベース開発における不可欠な要素になりつつある3)．
加えて，システム内の一部の制御への適用はともか
く，制御アプリケーション全体を自動生成プログラム
で置きかえるのは容易なことではない．ツールにより
自動生成されたプログラムは構造化されておらず，シ
ステムへの組み込みに工数がかかる．また，組み込み
制御システムでは実制御対象を用いた検証コストが高
く，モデル変更のたびに制御アプリケーション全体を
再生成するのは適切ではない．しかし，自動生成プロ
グラムは人間が理解しやすいモジュール構造になって
いないため，部品化・再利用も容易ではない．これら
課題のため，制御プログラム自動生成ツールは，主と
してラピッド・プロトタイピング向けに使用され，量
産ソフトウェアでの実用化には至っていないのが現状
一方，再利用性の良いソフトウェアを開発する手法
として，オブジェクト指向プログラミングやアプリ
ケーションフレームワークの導入が進められている4)．
しかし，ブロックダイアグラムを用いたモデルベース
制御開発と，オブジェクト指向分析・設計とのギャッ
プが大きく，従来のオブジェクト指向開発をそのまま
適用するのは困難である．
そこで我々の研究の目的は，モデルベース制御開発
との継続性が優れるとともに，オブジェクト指向技術
とプログラム自動生成技術を統合化した，組み込みソ
フトウェア開発法を確立することである．
上記目的を達成するための第 1 の課題は，ブロック
ダイアグラムで書かれた制御モデルから，オブジェク
ト指向に基づくソフトウェア構造を容易に構築できる
設計法の開発である．我々は，制御モデル中に現れる
データのうち制御ロジック上重要なデータに着目し，
それらのデータを計算するブロックからなるように，
制御モデルを階層的に構成する．そして，それらの
データをオブジェクトの単位とし，それらからなるア
プリケーションフレームワークを構築する．これによ
り，ブロックダイアグラムで記述される制御モデルか
ら，オブジェクト指向に基づくソフト構造へと，自然
に移行できるようになる．また，制御ロジックの詳細
部分の変更はオブジェクト内のメソッドの処理の変更
に納められるので，安定したフレームワーク構成を実
第 2 の課題は，制御プログラム自動生成ツールによ
り，制御モデルから自動生成したプログラムコードの
オブジェクトへの組み込み手法の開発である．我々は，
アプリケーションフレームワーク（オブジェクト構成）
の構築と，オブジェクト内の処理プログラムの作成を
別の工程として扱う．そしてその後者向けに，制御プ
ログラム自動生成ツールを適用する．具体的には，先
に述べたブロック単位でプログラムを自動生成し，そ
れにラッパをかぶせることでオブジェクト化する．こ
れにより，自動生成した制御プログラムを，オブジェ
クト指向に基づくソフトウェア構造に違和感なく取り
込むことができる．
第 3 の課題は，上記手法に基づいて効率的にソフト
ウェアを作成できる開発環境の開発である．メソッド内
の処理については既存の制御プログラム自動生成ツー
ルにより生成できるが，自動生成コードをラッピング
してオブジェクト化する工程や，制御モデルからアプ
リケーションフレームワークを作成する工程も，でき
るだけ自動化したい．そこで我々は，自動生成コード
を解析してラッパを生成するツール，および，制御モ
デルを解析してフレームワークのプロトタイプを生成
するツールを開発した．これによりアプリケーション
プログラムの大部分を自動生成できる．
以上により，モデルベース制御設計との継続性が良
く，また，プログラムの大部分を自動生成可能な，オ
ブジェクト指向に基づく組み込み制御ソフトウェアの
開発が可能になる．
以下本論文では，まず 2 章で，制御開発からソフト
ウェア開発への設計の流れとオブジェクトの抽出法に
ついて述べる．次に 3 章で，ソフトウェアの具体的構
成と，自動生成プログラムを組み込んだオブジェクト
の実装方法について述べる．そして 4 章で，制御プロ
グラムのほとんどを自動生成可能とする開発環境につ
いて説明する．最後に 5 章で，本手法を自動車エンジ
1438情報処理学会論文誌June 2005
図 1組み込み制御システムFig. 1Embedded control systems.
ン制御ソフトウェア開発に適用して，評価を行う．
2.設計の流れ
2.1対象システム
設計法の議論の前に，本論文で対象とする組み込み
制御システムについて簡単に述べる．
制御とは，JIS の自動制御用語では「ある目的に適
合するように，対象となっているものに所要の操作を
加えること」と定義される5)．本論文で対象とする組
み込み制御システムは，ディジタル制御システム6) の
一種である．連続時間系の対象に離散時間系のコン
トローラを組み込み，対象機器を制御するシステムを
組み込み制御システムの概念図を図 1 に示す．対
象物は連続時間系，すなわち機械系やプロセス系であ
る．コントローラは離散時間系であり，マイクロプロ
セッサなどを用いたコントローラである．コントロー
ラは，一定サンプリング周期でセンサ計測，目標値演
算，アクチュエータ出力という一連の制御処理を実行
する．このような組み込み制御システムの例として，
自動車用エンジン制御，空調機や冷蔵庫の温度調節制
御などがあげられる．2.2設計の全体の流れ
本論文で提案する設計手法の全体の流れを図 2 に
示す．まず，制御開発により，ブロック線図型の制御
モデルを作成する．制御開発の詳細は 2.3 節で述べ
る．次に，ソフトウェアの部品化を行う（(1)-1）．そ
の詳細は 2.4 節で述べる．部品化した制御モデルをオ
ブジェクト指向制御モデルと呼ぶことにする．
オブジェクト指向制御モデルから，個々のオブジェ
クトと，アプリケーションフレームワークを作成する．
そのソフトウェア構成については，3.1 節で説明する．
個々のオブジェクトを作成するには，まず，既存ツー
ルによるモデルベースプログラム自動生成により制御
データ演算用関数を生成する．その詳細は 4.1 節で
述べる．次に，新規開発したラッパ生成ツールにより
ラッパを生成し（(3)-1），演算用関数と組み合わせて，
図 2設計の流れFig. 2Design ﬂow.
オブジェクトのソースコードを生成する（(2)）．オブ
ジェクトのソフト構造の詳細 3.2 節で，ツールの詳細
は 4.2 節で述べる．
一方，アプリケーションフレームワークを作成する
には，まず，フレームワークプロトタイプ生成ツール
により，フレームワークのプロトタイプを生成し（(3)-
2），必要により同時性保障のための処理を追加する．
そのソフト構造の詳細は 3.3 節で，ツールの詳細は
4.3 節で述べる．
以上のように本手法は，制御モデルから制御プログ
ラムを生成する既存ツールのみを用いる従来方法とは
異なり，制御モデルの段階で部品化を行うとともに，
既存ツールに加え，新規開発したラッパ生成ツールや
フレームワークプロトタイプ生成ツールを使用する．
これにより，部品化・再利用にに適したオブジェクト
指向に基づくソフトウェア構造を実現する．2.3制 御 開 発
一般に，1 つの制御システムは複数の制御機能の組
合せで構成される．したがって制御モデルも，制御機
能ごとに作成するのが普通である．
制御モデルは，制御系 CAE/CAD ツールにより設
計する．作成した制御モデルはツール上で実行可能で
あるため，シミュレーションによってロジックの妥当
性を検証することができる．
図 3 に，制御モデルを表すブロックダイアグラム
の例を示す．図中のブロック（方形）は処理を，接続
線（矢印）はデータを表している．この例では，目標
エンジントルク（TargetTorque）や目標スロットル
開度（ThrottleOpening）の演算を行うブロックが記
載されている．この制御機能にとっての入力データで
あるエンジン回転数（Engine Revolution），エンジン
状態（Engine Status），アクセル開度（Accelerator
Vol. 46No. 6オブジェクト指向組み込み制御システムのモデルベース開発法1439
図 3制御ブロック図の例Fig. 3An example of block diagram.
Opening）は，他の制御機能によって計算される．こ
のような制御ロジックで表された処理を周期的に実行
することによって，制御が行われる．
設計者が理解しやすい制御モデルとするため，ブ
ロックダイアグラムは階層的に表現することが多い．
図 3 の例では，目標トルク算出ブロック内の処理が，
下位層のブロックダイアグラムで表現されている．こ
の階層化については，できるだけ設計者が理解しやす
く，修正も容易な形にすべきである．
そこで我々は，ブロックダイアグラム中に現れるデー
タに注意して，ブロック化および階層化を行うことと
した．すなわち，ブロックダイアグラムの上位階層に
は，制御として意味のあるデータのみが現れるように
階層化する．制御として意味のあるデータとは，たと
えば，制御目標値や，システムの状態などである．計
算中に現れる一時的なデータは対象としない．そして，
ブロックダイアグラムの上位階層では，それらのデー
タを算出する単位でブロックを構成し，それらブロッ
ク内の具体的算出処理は，その下位層のブロックダイ
アグラムとして記述する．
一般に，制御として意味のあるデータは制御ロジッ
ク変更時でも削除・追加が少ないため，上位階層のブ
ロックダイアグラムの変更が必要となる場合は少なく，
多くの場合，下位層の修正のみで対応できる．
2.4ソフトウェア開発
ソフトウェア開発では，制御開発で作成した制御モ
デルをもとに，アプリケーションフレームワーク，お
よびそれを構成するオブジェクトを実装する．
アプリケーションフレームワーク（以下，フレーム
ワーク）は，アプリケーションを実現するための標準的
なオブジェクトの組合せを定義したものである7)．我々
はすでに，組み込み制御システム向けの時間駆動に基
づくオブジェクト指向モデルを提案しており8)～11)，本
図 4アプリケーション構造Fig. 4Structure of application software.
図 5従来のソフトウェア部品Fig. 5Conventional software component.
論文で述べるフレームワークはこのモデルに基づいて
前述のように，一般に制御システムは複数の制御機
能から構成されるので，フレームワークも制御機能
ごとに分割することができる．これを，サブフレーム
ワークと呼ぶことにする．すなわち，図 4 に示すよう
に，アプリケーションフレームワークは複数のサブフ
レームワークの集合からなる．
サブフレームワークは制御機能ごとにオブジェクト
構成を表したものである．オブジェクトは，制御開発
により作成された上位階層のブロックダイアグラムを
参照して抽出する．抽出にあたっては，部品化・再利
用性に適したオブジェクト構成とすることに留意する．
そのためには，再利用しやすいサイズにするとともに，
制御的意味を考慮して，独立性の高いオブジェクトと
することが重要である．
従来の組み込み制御ソフト開発では，制御ロジック
における処理に着目してソフトの部品化を行ってきた．
しかし処理単位の部品化は，再利用の観点ではなく，
その時点での制御ロジックの実装に都合の良い単位で
区切ってしまうことが多い．設計者がとらえる機能の
単位は個々の設計者により異なるのが普通で，1 つの
機能が複数の処理を含むことも多い．このため，図 5
に示すように，部品が大きくなる傾向があり，複数の
制御項目が混在したり，出力変数が複数存在したりす
1440情報処理学会論文誌June 2005
図 6提案するソフトウェア部品Fig. 6Proposed software component.
る原因となっていた．これがスパゲッティプログラム
化を助長し，再利用性の低いソフトとなる原因の 1 つ
になっていた．
これに対し本論文では，データに着目してオブジェ
クトを抽出する．前述のように，制御モデルの設計に
おいては，制御として意味のあるデータに着目してブ
ロックダイアグラムを作成しているので，そのデータ
をオブジェクトの候補とする．ただし，制御設計者と
ソフトウェア開発者では視点が異なるため，必要によ
りこの段階で制御モデルのブロック構成を見直しなが
ら，オブジェクトを抽出する．
この方法では，図 6 に示すように，制御的に意味の
あるデータと，それを計算する処理をまとめたものが
オブジェクトになる．それらデータの計算に用いる中
間データは制御ロジックの変更による追加・削除が発
生しやすいため，オブジェクトの内部に隠蔽する．
これにより，安定したオブジェクト構成を提供でき，
制御ロジックの変更に対してフレームワーク自体は修
正せず，オブジェクトの置き換えで対応できる．また，
制御的に意味のあるデータがオブジェクトの粒度とな
るため，オブジェクトが巨大化することはなく，オブ
ジェクト交換の影響範囲も明確になるうえ，個々のオ
ブジェクトの単体テストも容易になる．
3.ソフトウェアの構成と実装
3.1全体ソフトウェア構成
以下，具体的なソフトウェアの構成および実装方法
を，自動車制御システムを例に説明する．図 7 は，本方
式を適用したエンジン制御システムの全体ソフトウェ
ア構成である．ソフトウェアは，アプリケーションソ
フトウェアと基本ソフトウェア（Platform Software）
に分割する．
基本ソフトウェアは，リアルタイム OS と入出力ド
ライバとで構成する．リアルタイム OS には，欧米で
図 7組み込み制御システムの構成例Fig. 7An example of proposed embedded controlsystems.
採用例の多い OSEK-OS 12) を用いる．また，アプリ
ケーションの移植性を高めるため，入出力ドライバの
インタフェースはハードウェア非依存のインタフェー
アプリケーションソフトは，時間周期タスク（ex.10 [ms]，4 [ms]）およびイベントタスク（ex. エンジ
ン回転同期）とを有している．制御機能を実現するサ
ブフレームワークは，タスクから呼び出す形でシステ
ムに実装される．
図 7 を例に，システムの動作の概要を解説する．ま
ず，タイマ割込みを受けてリアルタイム OS が周期
タスク（10 [ms] タスク）を起動する．タスクの先頭
で，入力ドライバに対して入力信号の更新を要求す
る．次に，タスクに登録されているサブフレームワー
ク “Status Observer”，“Throttle Controller”，· · ·，“Correction” を，あらかじめ規定された順序で呼び出
す．サブフレームワークは，それを構成するオブジェ
クトの処理を実行して，制御に必要なデータの算出・
更新を行う．そして，タスクの最後で出力ドライバに
出力を要求し，処理を終了する．3.2オブジェクトの実装
オブジェクトは実装効率を重視し，いわゆるオブジェ
クト指向言語ではなく，C 言語を用いて実装する13)．
以下の説明では，図 8 に示す TargetTorque オブジェ
クトを例に取り上げる．このオブジェクトは，図 8 中
のクラス図に記載したように，算出したデータの値を
記憶するための属性 “TargetTorque” と，そのデータ
を算出し更新するメソッド “Update()”，データの値
Vol. 46No. 6オブジェクト指向組み込み制御システムのモデルベース開発法1441
図 8オブジェクトの例Fig. 8An example of object.
を読み出すアクセスメソッド “Get()” を持つ．
オブジェクトは，制御プログラム自動生成ツールが
制御モデルのブロック図から生成した演算処理関数に
ラッパをかぶせることで実現する．演算処理関数は，“データ名 Calculate()” という名称として生成する．
入力値は当該関数に対して引数として値渡しし，出力
値は引数としてポインタ渡しした出力変数に格納する．
図 8 の例では，“TargetTorque Calculate()” という
演算処理関数を生成する．
演算処理関数をオブジェクト化するため，ラッパで
は，オブジェクトの属性（データ）とデータ更新メソッ
ドおよびアクセスメソッドを定義する．以下，その詳
細について述べる．(a) 属性の宣言
オブジェクトの計算結果を記憶するための属性
（データ）の宣言を行う．実装上はデータ名その
ものを名称に持つ変数である．図 8 の例では，属
性 “TargetTorque” を宣言している．(b) データ更新用メソッド
オブジェクトの属性（データ）を算出し，上記属
性に記憶する処理を実行する．データ更新用メ
ソッドは実装上 “データ名 Update()” という C
の関数である．本メソッドは自動生成関数の入
力引数の値を，その値を計算するオブジェクト
のアクセス用メソッドを呼び出して得て，自動
生成関数 “データ名 Calculate()” に渡す．さら
に，自動生成関数が計算した値を属性に記憶する．
図 8 の例では，“TargetTorque Update()” とい
う名称のメソッドで，オブジェクト “Accelerator-
Opening” と “EngineStatus” が算出したデー
タ値を，それらオブジェクトのアクセス用メ
ソッド “AcceleratorOpening Get()” と “Engine-Status Get()” を呼び出して得て，演算処理関数“TargetTorque Calculate()” の入力引数に渡す
とともに，演算処理関数が算出した値の記憶先と
して，属性 “TargetTorque” を指定している．
(c) アクセス用メソッド
他のオブジェクトが計算結果を参照するための，“Get” というアクセス用メソッドを定義する．実
装上は，“データ名 Get()” という名称とするが，
処理の効率化のためマクロとする．図 8 の例で
は，“TargetTorque Get()” というアクセス用メ
ソッドが，マクロとして宣言されている．マクロ
化することで，3.3 節で述べるデータ同時性確保
処理の実現も可能となる．
本方式の特徴の 1 つは，データ更新用メソッドが
引数を持たないことである．組み込み制御システムで
は制御ロジックの変更にともなって，各オブジェクト
が参照する他オブジェクトのデータを変更・追加する
ことが多い．本方式では，自動生成したラッパのデー
タ更新用メソッド内部に，変更・追加の影響を隠蔽で
きる．これにより，各オブジェクトのデータ更新用メ
ソッドを呼び出すサブフレームワークの処理を変更す
る必要がなくなり，そのまま再利用可能できる．
3.3サブフレームワークの実装
図 9 にサブフレームワークの概念図を示す．サブ
フレームワークは，3.2 節で抽出したそれぞれ固有の
計算を行う複数のオブジェクトと，それらのオブジェ
クトを呼び出して処理を行うサブフレームワークオブ
ジェクトからなる．サブフレームワークオブジェクト
の主な役割は，制御設計者が意図した順序でオブジェ
クトを呼び出すことで，目的とする制御機能を実現す
ることである．
制御データに対応するオブジェクトとサブフレーム
ワークオブジェクトの組合せの例として，エンジン制
御における例を図 10 に示す．この例では，“Throttle-
Controller” というサブフレームワークオブジェクトが，
オブジェクト “TargetTorque” と “ThrottleOpening”
のデータ更新用メソッドを呼び出している．
サブフレームワークオブジェクトの構成および処
理の例を図 11 に示す．この例では，実行順序を管
理するサブフレームワークオブジェクト（Throttle-Controller）のほか，同時性保証のためのローカルオ
ブジェクト（EngineStatus (Local)）が存在する．
サブフレームワークオブジェクトは，オブジェク
1442情報処理学会論文誌June 2005
図 9サブフレームワークFig. 9Sub framework.
図 10サブフレームワークの組合せ例Fig. 10An example pattern of sub framework.
図 11サブフレームワークオブジェクトの例Fig. 11An example of sub framework object.
トのデータ更新用メソッドを呼び出す処理を行う．
これはメソッド “Exec” により行われる．実装上は，“制御機能名 Exec()”（図 11 の例では “Throttle-
Controller Exec()”）という C の関数として記述す
る．周期内でのオブジェクトの実行順序は，制御モデ
ルブロック図（図 3）でのデータの流れに矛盾しない
ように起動する必要がある．すなわち，制御モデル
ブロック図の上流から下流に向かってオブジェクトの
データ更新用メソッドを呼び出すように記述する．並
行実行可能なメソッドについてはどちらを先に呼び出
してもよいが，設計者の意図を考慮し，左から右へ，
上から下へという順に呼び出すこととする．呼び出し
順序の違いによりデータの計算順序やタイミングが変
化することがあるが，これについては参照側の同時性
保障処理で対応する．
一般に，組み込み制御システムでは異なる周期・優先
度の制御処理からなるマルチタスク構成となる．この
ため，同一制御周期で起動される複数のオブジェクト
が，異なる周期で起動される他の同一オブジェクトの
データを参照する場合に，異なったタイミングで更新
された値を参照する可能性がある．しかし，正しい制
御を行うには，同一タイミングで更新された値を参照
する必要がある．我々は，同時性の保証が必要なデー
タを，サブフレームワークオブジェクトのローカルオ
ブジェクトに記憶することでこの問題を解決する．
たとえば，図 3 の例では，変数 “EngineStatus”
は他のサブフレームワークにおいて更新されている．
“EngineStatus” を更新するサブフレームワークの実
行優先度が “ThrottleController” サブフレームワー
クより上位の場合，“ThrottleController” サブフレー
ムワークの実行中に変数 “EngineStatus” が更新され
ることがある．そこでサブフレームワーク内での変数
の同時性を保証するため，“EngineStatus” ローカル
オブジェクトを生成する．
実装上は，“EngineStatus” というローカル変数を宣
言し，“ThrottleController Exec()” メソッドの先頭に
おいて “EngineStatus” オブジェクトのデータをロー
カル変数にコピーする．アクセス用メソッド “Engine-Status Get()” はマクロ定義のため，サブフレームワー
ク内でのスコープはローカル変数へと移され，変数の
同時性が保証される．
以上により，プリエンプション処理の影響を受けず
に各制御処理を実行可能になる．さらに，ユーザが同
時性の必要な最小限の変数を指定できるため，オーバ
ヘッドを軽減できる．
4.ソフトウェア開発環境
4.1制御モデルの作成と演算処理関数の生成
制御モデルの作成は，制御系 CAE/CAD ツール
を使用する1)．作成された制御モデルは，制御系CAE/CAD ツールのシミュレーション機能を用いて，
ロジック検証が可能である．
最近の制御系 CAE/CAD ツールでは，浮動小数点
Vol. 46No. 6オブジェクト指向組み込み制御システムのモデルベース開発法1443
を用いた場合のみでなく，多くの組み込み制御システ
ムで採用している固定小数点を用いた場合の検証も可
能である．固定小数点化するには，データ値の単位や
範囲を決定するスケーリング作業を行った後，固定小
数点化の影響（誤差など）についても，シミュレーショ
ン機能により検証する．
次に，制御プログラム自動生成ツールを用いて，作
成した制御モデルから演算処理関数の C コードを生
成する2)．前述のように，演算処理関数にラッパをか
ぶせてオブジェクト化するため，コード生成の単位は，
オブジェクトに対応するデータを算出するブロック単
位で行う．図 3 では，目標エンジントルク算出（“Tar-
get Torque Calculation”），あるいは目標スロットル
開度（“Throttle Opening Calculation”）という単位
でコードを生成する．
演算処理関数は，“算出データ名 Calculate()” と
いう関数とする．目標エンジントルク算出の場合は，
“TargetTorque Calculate()” という関数になる．この
演算処理関数は “AcceleratorOpening” と “Engine-Status” を入力引数とし，出力値はポインタ渡しされ
た “TargetTorque” に格納する．同様にして，オブジェ
クトに対応するすべての制御ブロックについて，演算
処理関数を自動生成する．4.2ラッパの生成
我々は，オブジェクト化の作業を自動化するため，
ラッパ生成ツールを開発した．ラッパ生成ツールは，
制御プログラム自動生成ツールが生成した演算処理
関数を解析して，3.2 節で述べた形式のラッパを生成
図 8 の TargetTorque オブジェクトを例に，ラッパ
の生成法について簡単に説明する．ラッパ生成ツー
ルは，演算処理関数 “TargetTorque Calculate()” を
解析してラッパを生成する．オブジェクトの属性名
は演算処理関数の出力引数名により決定する．こ
の例では “TargetTorque” である．これからデータ
更新用メソッド名も決定でき，この例では “Tar-getTorque Update()” という名称のメソッドとす
る．また，演算処理関数の入力引数名から，デー
タ更新用メソッドが必要とする他のオブジェクト
の名称を決定し，そのオブジェクトのアクセスメ
ソッドを呼び出す．この例では，入力引数 “Accel-eratorOpening” と “EngineStatus” から，アクセス
メソッド “AcceleratorOpening Get()” と “Engine-Status Get()” を呼び出すことを決定する．
このようにラッパは定型的な構成をしているため，
演算処理関数やその引数の命名法をルール化しておけ
ば，演算処理関数のソースコードを解析し，機械的な
処理でラッパを生成することができる．
4.3サブフレームワークオブジェクトの生成
我々は，サブフレームワークオブジェクトの作成の
自動化についても検討した．サブフレームワークオブ
ジェクトは，基本的に，そのサブフレームワーク内の
オブジェクトのデータ更新用メソッドを，ブロックダ
イアグラムの上流から下流に向かって呼び出す処理を
行えばよい．したがって，その限りにおいては制御モ
デルからの自動生成も難しくはない．しかし，タスク
構成に依存する同時性保証の処理を制御モデルのみか
ら生成するのは容易ではない．機械的に，すべての入
力データについて同時性保証処理を挿入するのであれ
ば容易だが，資源の限られた組み込み制御システムに
おいては必要最小限にしたい．
そこで我々は，同時性保証処理の追加は必要により
ソフト設計者が行うものとし，同時性保証の処理を除
いたサブフレームワークのプロトタイプを制御モデル
から生成するツールを開発した．たとえば，図 11 の
例では，“EngineStatus” というローカル変数の宣言，
および，“EngineStatus” オブジェクトのデータをロー
カル変数にコピーする処理を除く部分が，ツールによ
り生成される．実際の制御アプリケーションでは，同
時性保証処理の挿入が必要な場合は限られ，ほとんど
の場合は生成したプロトタイプをそのまま使用できる
ため，実用上はこの方法で問題ないと考えている．4.4再利用ベースの開発
前節まで，新規に組み込み制御システムを開発する
ものとして説明を行ってきた．ところが，現実の組み
込み制御システム開発の多くは，過去に作成したシス
テムの修正あるいは機能追加である．そこでここでは，
再利用ベースの開発手順について簡単に述べる．
前述のように，我々の手法では制御ロジックの一部
修正については，フレームワークの修正は不要で，オ
ブジェクトの交換で対応可能である．すなわち，サブ
フレームワークオブジェクト，および制御データに対
応するオブジェクトのうち制御の変更がないものは
そのまま再利用し，変更があるオブジェクトのみ置き
換える．したがって，制御系 CAE/CAD ツールによ
る制御モデル修正の後，変更部分のみに対して，既存
コード生成ツールによる演算処理関数の生成と，ラッ
パ自動生成ツールを用いたオブジェクト化のみを行え
一方，新規制御の新規追加や制御ロジックを根本的
に変更する場合には，サブフレームワークオブジェク
ト自体の変更が必要になる．すなわち，ツールを用い
1444情報処理学会論文誌June 2005
て制御モデルからサブフレームワークオブジェクトの
テンプレートを生成し，必要によりデータの同時性保
証処理を追加する．また，新規作成した制御の演算処
理関数およびラッパを生成する．ただしこの場合も，
変更がないオブジェクトについてはそのまま再利用で
5.1適 用 評 価
自動車用エンジン制御システムに対して本方式を適
用し，コード自動生成率および再利用性に関して評価
を行った．評価結果を表 1 に示す．対象とした制御プ
ログラムは，ソースコード実行数比でソフトウェア全
体（OS，I/O など含む）の 42%である．
まず制御モデルをもとに実装用コードを開発し，コー
ド自動生成率について評価を行った．評価の結果，対
象とした制御プログラムのうち既存ツールで生成し
た部分は 69%，ラッパ生成ツールで生成した部分は27%，ハンドコーディングが必要な部分は 4%であっ
た．ハンドコーディングが必要な部位は，サブフレー
ムワーク上での同時性保持処理であり，サブフレーム
ワーク生成ツールによるプロトタイプに対して見直
しを行った．モデルベース開発において従来方式では69%だった実装用コード自動生成率を，本提案方式を
用いて 96%に向上させることができた．
さらに，いったん開発が完了した制御機能（提案方
式適用部位の 12%）に対して設計変更を行い，再利用
性についての評価を行った．本方式では，追加・変更の
少ない制御的に意味のある変数の単位でオブジェクト
化しているため，変更が多い部分はオブジェクトの内
部に隠蔽できる．そのため，変更対象となるオブジェ
クトのみ変更すればよく，他のオブジェクトおよびサ
ブフレームワークオブジェクトは再利用できる．制御
ロジックを変更した結果，一部のデータ値オブジェク
トの変更のみで対応できた．ロジック変更のないデー
タ値オブジェクトはすべて再利用可能となった．また
オブジェクト構成の変更がなかったため，サブフレー
ムワークオブジェクトはそのまま再利用可能となり，
ハンドコーディングは不要であった．この結果，設計
変更における工数を 70%削減することができた．
以上の結果より，本方式によって組み込み制御シス
テムの生産性を向上できる見込みを得られた．また，
本論文で提案した新規ツールにより生成したラッパと
サブフレームワークのプログラムは定型的構造のため，
ハンドコーディングと比較して品質および性能上の問
題は見られなかった．今後の課題として，次のものが
表 1本提案方式の適用評価Table 1An evaluation of the proposed method.
本手法の適用範囲42%（コード行数比）
内，オートコーディング96%（既存ツール利用部）（69%）（提案ツール利用部）（27%）ハンドコーディング4%
あげられる．まず，現状の開発環境は複数のツールが
独立に存在し，必ずしも使いやすいものではない．そ
れらツールを有機的に結合した統合開発環境の実現が
必要である．また変数同時性確保処理に関し，4%の
ハンドコーディングが必要となっている．このため，
複数の時間周期およびイベントを横断して実現される
制御機能における変数間の依存関係を統一的に扱う手
法の開発を進めていく．5.2関連する研究との比較
組み込み制御以外の分野でも，モデルベース開発が
進んでいる．それらの分野の多くは，UML によるモ
デル記述が主流である14)．モデルを UML で記述する
ことで，モデル検証後に，自然にオブジェクト指向設
計・プログラミングに移行できる．
ところが組み込み制御分野では，制御系 CAE/CAD
ツールによるブロックダイアグラムを用いた制御モデ
ルがすでに定着しており，ブロックダイグラムによる
制御開発から，オブジェクト指向ソフト開発に自然に
移行できる設計法が要求される．しかし，そのような
狙いの研究は多くない．
そのような中，ブロックダイアグラムを拡張してオ
ブジェクト指向的なソフトウェア設計機能を導入する
とともに，コード生成をも可能なツール15) を用いて，
オブジェクト指向ソフトウェア開発を行う手法が発表
されている16)．この手法は基本的に，リアルタイムシ
ステム向けに提案されたオブジェクト指向開発法17)
を，ブロックダイアグラム・ベースのモデル記述法・
ツールを使用して行う方法の提案である．このため，
制御開発の段階でもオブジェクト指向に関する知識が
必要である．
これに対し我々の手法は，制御開発の段階ではオブ
ジェクト指向を意識せずに，ブロックダイアグラムに
より純粋に制御モデルを作成し，その後のソフトウェ
ア開発の段階でオブジェクト指向にスムーズに移行す
るのが特徴である．このため，自動車エンジン制御の
ように，制御開発がシステム開発の大きな部分を占め
る組み込み制御システムにおいて特に有効である．
また，システム全体を UML を用いたオブジェクト
Vol. 46No. 6オブジェクト指向組み込み制御システムのモデルベース開発法1445
指向モデルで記述し，その一部をブロックダイアグラ
ムと対応させることで，ブロックダイアグラムから自
動生成したコードを組み込み可能とする手法が発表さ
れている18)．この手法では，ブロックダイアグラム
（データフロー）による制御モデルを UML 表現に変
換するとともに，ブロックダイアグラムから生成した
プログラムをカプセル化するためのクラスを生成する．
ただし，ブロックダイアグラムから UML 表現への変
換では，オブジェクト指向を意識せずに作成した構造
がそのままオブジェクト構成に反映されるため，制御
処理の部分は，必ずしも再利用性の高いオブジェクト
に部品化されるわけではない．特に，ほとんどをブ
ロックダイアグラムによる制御モデルで記述した場合，
制御仕様の変更によりシステム全体の構造（フレーム
ワーク）が大きく変わる恐れがある．本手法は，大部
分は UML で記述し，一部のみブロックダイアグラム
で記述するような，制御処理が占める割合が小さいシ
ステム向きであると考える．
これに対して我々の手法は，ブロックダイアグラム
から制御的に意味のあるデータを抽出してオブジェク
トとすることで，制御処理の部分も部品化再利用に適
したオブジェクト構造とすることができる．したがっ
て，自動車エンジン制御システムのように，制御処理
が大部分を占めるシステムに適用した場合でも，再利
用性の高いフレームワークを実現できるという特徴が
6.お わ り に
組み込み制御システムのモデルベース開発法として，
オブジェクト指向とプログラム自動生成という 2 つの
技術を統合化した開発法を提案した．本報告で提案し
た手法は，ブロックダイアグラムによる制御モデルの
開発に引き続き，オブジェクト指向に基づく組み込み
制御ソフトウェアを定型的な作業により開発できる．
また，オブジェクトのメソッド内の処理，それをオブ
ジェクト化するためのラッパ，さらにフレームワーク
の大部分のプログラムを自動生成可能とした．これに
より，組み込み制御システムのソフトウェア生産性お
よび再利用性を向上させられる見通しを得た．
今後は，実製品への適用時の効果を，既存ツールに
よる生成コードを含めたシステム全体の品質・コスト
の面から検証するとともに，より使いやすい統合開発
環境を実現する予定である．
謝辞本研究を進めるにあたりご支援をいただいた
（株）日立製作所日立研究所の川端敦部長（前），野木
利治部長，箕輪利通主任研究員，オートモティブシス
テムグループの根本守主任技師に感謝する．
1) Moscinski, J.: Advanced Control with MAT-LAB and Simulink, Ellis Horwood, Ltd. (1995).2) Thomsen, T.: Integration of InternationalStandards for Production Code Generation,SAE technical paper series, No.2003-01-0855,Detroit (2003).3) 渡辺政彦：組込みソフトウェア向け開発環境，情報処理，Vol.45, No.1, pp.10–15 (2004).4) Hermsen, W. and Neumann, K.J.: Applica-tion of the Object-Oriented Modeling ConceptOMOS for Signal Conditioning of Vehicle Con-trol Units, SAE technical paper series, No.2000-01-0717 (2000).5) 日本工業規格：自動制御用語（一般）Z8116，日本規格協会．6) 美多勉：ディジタル制御理論，昭晃堂 (1984).7) Johnson, R.E.: Frameworks = (Components+ Patterns), Comm. ACM, Vol.40, No.10,pp.39–42 (1997).8) Naya,H.,Narisawa,F.,Yokoyama,T.,Ohkawa, K. and Amano, M.: Object-OrientedDevelopment Based on Polymorphism Patternsand Optimization to Reduce Executable CodeSize, Technology of Object-Oriented Languagesand Systems — Tools-25 (1997).9) 横山孝典，納谷英光，成沢文雄，倉垣智，永浦渉，今井崇明，鈴木昭二：組込み制御システムのための時間駆動オブジェクト指向ソフトウェア開発法，電子情報通信学会論文誌，Vol.J84-D-I, No.4,pp.338–349 (2001).10) 吉村健太郎，宮崎泰三，横山孝典，入江徹，藤本慎哉：組込み制御向けアプリケーションフレームワーク構成法と自動車制御システムへの適用，第 5回組込みシステム技術に関するサマーワークショップ予稿集，pp.3–5 (2003).11) 吉村健太郎，宮崎泰三，横山孝典：オブジェクト指向組込み制御システムのためのコード自動生成援用によるモデルベース開発法，組込みソフトウェアシンポジウム 2003，pp.64–71 (2003).12) OSEK-VDX: OSEK-VDX Operating SystemVer 2.2.1 (2002).13) Narisawa, F., Naya, H. and Yokoyama, T.:A code generator with application-orientedsize optimization for object-oriented embed-ded control software, Object-Oriented Tech-nology: ECOOP’98 Workshop Reader, LNCS-1543, pp.507–510, Springer (1998).14) 山田正樹：モデル駆動開発とその周辺，情報処理，Vol.45, No.1, pp.3–9 (2004).15) Gebhardt, M., Stier, G., Beaumont, A. andNoble, A.: Automation of ECU Software De-
1446情報処理学会論文誌June 2005
velopment: From Concept to Production LevelCode, 1999 SAE International Congress & Ex-position, No.1999-01-1174 (1999).16) Fuchs, M., Nazareth, D., Daniel, D. andRumpe, B.: BMW-ROOM — An Object-Oriented Method for ASCET, 1998 SAE In-ternational Congress & Exposition, No.981014(1998).17) Selic, B., Gullekson, G. and Ward, P.T.: Real-Time Object-Oriented Modeling, John Wieley& Sons (1994).18) K¨uhl, M., Reichmann, C., Pr¨otel, I. andM¨uller-Glaser, K.D.: From Object-OrientedModeling to Code Generation for Rapid Proto-typing of Embedded Electronic Systems, Proc.13th IEEE International Workshop on RapidSystem Prototyping, pp.108–114 (2002).
(平成 16 年 10 月 29 日受付)(平成 17 年 4 月 1 日採録)
吉村健太郎（正会員）1976 年生．1999 年早稲田大学理
工学部機械工学科卒業．2001 年同
大学大学院理工学研究科機械工学専
攻修士課程修了．同年（株）日立製
作所日立研究所入社．組み込み制御
システムの研究開発に従事．IEEE，ACM，SAE，日
本機械学会各会員．
1963 年生．1987 年京都大学工学
部機械系学科卒業．1989 年東京大学
大学院工学研究科産業機械工学専攻
修士課程修了．同年（株）日立製作
所日立研究所入社．モータ制御，ハ
イブリッド車制御の研究開発を経て，システム開発環
境の研究開発に従事．電気学会，自動車技術会，SAE
横山孝典（正会員）1959 年生．1981 年東北大学工学
部通信工学科卒業．1983 年同大学大
学院工学研究科電気及通信工学専攻
修士課程修了．同年（株）日立製作
所日立研究所入社．1987～1990 年
まで（財）新世代コンピュータ技術開発機構出向．2001
年同社オートモティブシステムグループ．2004 年よ
り武蔵工業大学．分散システム，組み込みシステム，
ソフトウェア工学等の研究に従事．博士（情報科学）．
電子情報通信学会，IEEE，ACM 各会員．