デジタル電源用ソフト開発ツール、生物から知見を得てバグをゼロに【後編】

生物の英知を取り込む

 バグのないソフトウエアを開発するのは、そう簡単なことではない。しかも、新しい機能を追加しても、信頼性を損なわないソフトウエアを開発することは至難の業だといえる。

 当社(ウインズ)では1980年代後半から、デジタル制御方式を採用した太陽光発電システム向け系統連系インバータ装置の開発に取り組んできた。最近では、燃料電池システムに向けた系統連系インバータ装置も手掛けている。こうした系統連系インバータ開発の歴史の中で、組み込みソフトウエアのバグに悩まされ続けてきた。バグを取り除くために、長時間のデバッグ作業が必要になるだけでなく、製品出荷後にバグが見つかれば、その対応に多くの時間とコストを費やすことになるからだ。

 そこで当社は1990年代後半に、バグが発生しづらく、新機能を追加しても信頼性を損なわないソフトウエア設計手法の開発に着手した。この開発の際に参考にしたのが、生物の構造と振る舞いである。少し突飛な考え方に思われるかもしれない。しかし、こうした考え方に行き着いたのには理由がある。生物は、リアルタイム処理を上手にこなす優れたシステム(系)の代表例であり、しかも外界の変化に順応できる特性を備えているからだ。従って、生物の構造と振る舞いを学び、それを取り入れれば、目標とするソフトウエア設計手法が実現できると考えた。

 生物の研究において着目したのは細胞である(図2)。細胞は、外界の変化に対してそれぞれが個別に反応し、周囲の細胞と連携して、「見る」や「確認する」、「処理する」などの作業を実現している。組み込みソフトウエア開発の観点からみた場合、細胞から学ぶべき点は5つある。1つ目は、すべての細胞がカプセル化(閉じた系)されていること。2つ目は、小さな単位で構成されており、それぞれが自律的に動作すること。3つ目は、それぞれの細胞での処理が一定時間以内で完了すること。4つ目は、それぞれの細胞の動作が互いに同期していること。5つ目は、互いに連携して動作していることである。

図2 生物をまねようと考えた背景
(a)のサンゴからは、ポプリという自律した生き物が複数個集まることで、大きなシステムを構築することを学んだ。(b)のムカデからは、同期動作の重要性を学習した。足を構成する細胞が同期動作することで、たくさんの足が絡まずに、移動することを可能にしている。

 つまり生物にはマスター(指揮者)が存在しないにもかかわらず、それぞれが自律的に連携動作することで、信頼性が高い安定なシステム(系)を作り上げている。言い換えれば、自律性を備えた個体が集まることで、1つの大きなシステムを構成しているわけだ。しかも、進化によって新しい機能が追加されても、その安定性と信頼性はまったく損なわれない。

バグがゼロに

 そこで当社では、こうした生物細胞の特徴を取り入れたソフトウエア設計手法を開発した(図3)。細胞に相当する小規模なソフトウエア部品を組み合わせて、システムを作り上げることで、大規模な組み込みソフトウエアを実現する手法である。

図3 自律カプセル理論
生物の細胞から学んだポイントを、組み込みソフトウエア開発に適用した。細胞から学んだことは、静的な構造と動的な振る舞いの大きく2つの点に分けられる。静的構造については、カプセル化(閉じられた系)と共通構造、単一機能、動的な振る舞いについては、一定周期での反応と、同期動作を学んだ。これを反映させた組み込みソフトウエア設計手法が「自律カプセル理論」である。生物の細胞と同様に、自律性を備えた小規模なプログラムを最小の設計単位として、大規模なソフトウエアを構成する設計手法である。

 組み合わせるソフトウエア部品は、細胞と同様に、すべて同じ構造を採る(図4)。具体的には、入力端子とコア部、出力端子という3つの要素からなる共通構造である。コア部で処理する内容は1つだけに限定した。従って、1つのソフトウエア部品を実現する際に記述するプログラム・コード量は数行~数十行と少ない。さらに、ソフトウエア部品は、細胞と同じように、自律性を備えている。つまり、ソフトウエア部品自身が、処理に必要なデータを入力端子から取得し、処理した結果を出力端子に公開する。こうして作成したソフトウエア部品をグループ化して(組み合わせて)、さまざまなタスクを構成する(図5)。そして、タスクを複数組み合わせたものが、組み込みソフトウエアとなる。

図4 自律カプセルの構造
自律カプセル理論で使用するプログラム(自律カプセル)の構造はすべて同じである。すなわち、入力端子部とコア部、出力端子部の3つの要素からなる。入力端子部の役割は、ほかの自律カプセルが公開したデータを取得することにある。コア部は、ある1つの処理を実際に実行する部分である。処理内容(機能)は1つだけに限定しているため、記述するプログラム・コード量は数行~数十行と極めて少ない。出力端子部の役割は、コア部で処理した結果を公開することにある。

図5 グループ化とタスクの概念
最小の設計単位である自律カプセルを複数個組み合わせる(グループ化する)ことで、1つのタスクを構成する。ソフトウエア開発時は、タスク単位で考えると設計しやすい。

 こうしたソフトウエア設計手法を採用したため、バグは発生しづらい。実際に当社では、この設計手法を使い始めてからは、インバータ装置を出荷した後にバグが見つかるという事態は1件も起きていない。バグが発生しづらい理由の1つは、ソフトウエア部品のプログラム・コード量が極めて小さいことが挙げられる。従って、このソフトウエア部品をグループ化したタスクや、さらにタスクを複数個集めた組み込みソフトウエアでもバグは発生しづらいわけだ。

 このほか、仕様変更によるソフトウエアの改良や、新機能の追加に柔軟に対応できる上に、その際に信頼性を損なうことはほとんどないというメリットもある。ソフトウエア全体を細部にわたって見直すことなく、ソフトウエア部品を取り替えたり、新たなソフトウエア部品を追加するだけで済むからである。異常な状態が発生した際の対処も簡単である。例えば、オーバーフローや異常値が発生する可能性がある制御系には、リミッタの役割を果たすソフトウエア部品を追加し、その後に異常な状態に対処するソフトウエア部品を入れればよい。

 さらにメリットとして、ソフトウエアの構造が極めて単純なため、技術者の学習期間を短縮できることが挙げられる。このため、若手技術者や社内の他部署、協力会社などにソフトウエア技術を容易に移管できる。ソフトウエア技術者だけでなく、経営者や管理者にとっても、有益なソフトウエア設計手法といえるだろう。

粒度の細かいオブジェクト指向

 当社では、このソフトウエア設計手法を「自律カプセル理論」と呼んでいる。1つ1つのソフトウエア部品を「自律カプセル」と名付けた。

 この設計手法は基本的に、ソフトウエア工学におけるオブジェクト指向プログラミングと同じ考え方に基づく。しかし現在、ソフトウエア開発現場で使われているオブジェクト指向プログラミング手法と比べると、ソフトウエア部品(自律カプセル)のプログラム・コード量が圧倒的に少ない。この点が大きな違いといえるだろう。言い換えれば、自律カプセル理論の方が、粒度が極めて細かいわけだ。

 自律カプセル理論では、時計を模した円状の時間軸上に並べたトレイ「タイムスロット」に、作成した自律カプセルを投入するイメージで、1本の組み込みソフトウエアを組み上げていく(図6)。出力電圧のフィードバック・ループ制御プログラムといった頻繁に実行する必要がある自律カプセルは、すべてのタイムスロットに入れる。一方、電圧値や電流値を制御パネルなどに表示する表示用プログラムなど、実行周期が長い自律カプセルは、1つのタイムスロットだけに入れればよい。こうした仕組みを導入することで、ハード・リアル性能を確保すると同時に、実行周期が10μs程度と短いプログラムや、100 msと長いプログラムが混在するソフトウエアを比較的簡単に実現可能にしている。

図6 タイム・スケジューリング方式
時計を模した円状の時間軸上に並べたトレイ「タイムスロット」に、作成した自律カプセルを入れることで、ソフトウエアを構成する。出力電圧制御プログラムなどの頻繁に実行する必要がある自律カプセルは、すべてのタイムスロットに入れる。表示用プログラムなどの実行周期が長い自律カプセルは、1つのタイムスロットだけに入れればよい。

 なお、1つのタイムスロットに入れることができる自律カプセルの個数は、採用するDSPチップ(マイコン・チップ)の演算性能や、設計対象となる電源回路のスイッチング周波数、制御ブロックの構成方法などで決まる。例えば、スイッチング周波数が200kHzのDC-DCコンバータの場合、1周期は5μsとなる。前述のように演算に費やせる時間は1周期の50~60%であるため、1つのタイムスロットの全期間は2.5μ~3.0μsである。C++言語で10行のプログラム(アセンブリ言語で20命令程度のプログラム)の処理時間は0.2μ~0.4μsである。さらに自律カプセルは、プログラムを収めていない空の状態でも、その処理に0.2μs程度がかかるため、プログラムを収めた自律カプセルの処理時間は0.4μ~0.6μsになる。従って、1つのタイムスロットに入れられる自律カプセルの個数は4~6個になる。これ以上の自律カプセルを入れる必要がある場合は、DSPチップを処理性能が高い品種に変更したり、自律カプセルを複数個まとめて構成する「ジャンボ・カプセル」を採用するなどの工夫が必要になる。

専用のソフト開発ツールを用意

 当社では、自律カプセル理論に基づく、デジタル制御電源向け組み込みソフトウエア開発ツール「カプセルワークス(CapsuleWorks)」をすでに開発済みである。図7にメイン画面を示す。

図7 カプセルワークスのメイン画面
対応するOSは、米Microsoft社の「Windows XP」である。

 この開発ツールは、組み込みソフトウエア開発の上流工程、すなわちプログラム・コードの記述に向けたものだ。このため、プログラム・コードを実装するDSPやマイコンなど、いわゆるターゲットに向けたコンパイラやリンカーなどの機能は備えていない。こうした開発ツールは別途用意する必要がある。

 最初のステップは、自律カプセルの作成である。ただし、デジタル制御方式採用のDC-DCコンバータを対象に、自律カプセルの接続図をあらかじめ用意しており、しかもそれぞれの自律カプセルにプログラム・コードも実装してある(図8)。このプログラム・コードは、正常に動作することを確認済みであるため、プログラミング作業をしなくても、デジタル制御電源向けソフトウエアを作成できる。プログラム・コードの変更が必要な場合は、接続図上の自律カプセルをクリックし、表示されたプログラムに必要なコードを記述していけばよい。使用するプログラミング言語はC++言語である。

図8 自律カプセルの記述方法
カプセルワークスでは、あらかじめデジタル制御電源のブロック図を用意している。1つ1つのブロックが自律カプセルに相当する。従って、ブロック図に従って、自律カプセルのプログラム・コードを記述していけば、ソフトウエアを作成できる。このほか、ブロック図を使わずに、「カプセルエクスプローラ」を使って、1つ1つ記述していくことも可能だ。新しい自律カプセルのプログラム・コードを記述する場合は、共通構造に基づいた見本カプセルが表示される。このため、入力端子の変数や出力端子の変数、コア部での処理内容を記述するだけ自律カプセルを作成できる。開発者が共通構造を気にする必要はない。使用するプログラミング言語はC++言語である。

 もちろん、新しい自律カプセルも作成できる。共通構造をあらかじめ実装した見本カプセルを用意してあるので、これを使って、入力端子に取り込む別の自律カプセルの変数名や、出力端子から公開する変数名、コア部での処理内容などを記述するだけで、新たな自律カプセルを簡単に作成できる。

 次のステップは、自律カプセルを実行させるスケジュールの決定である。具体的には、前述のタイムスロットに自律カプセルを入れていく作業である(図9)。タイムスロットは、実行の優先度に応じて、全部で31個用意してある。具体的には、「最優先」が1つ、「高」が10個、「中」が10個、「低」が10個である。設計者は、リアルタイム処理の必要性や、実行の順番、ほかの自律カプセルとの関連性などを考慮して、自律カプセルをタイムカプセルに収める。

図9 タイム・スケジューリングの基本操作
優先度の高さによって、「最優先」と「高(10個)」、「中(10個)」、「低(10個)」の「タイムスロット」を用意した。求められるリアルタイム性能に従って、作成した自律カプセルを入れていくことで、スケジューリングが完了する。

 最後のステップでは、組み込みソフトウエアを実装するDSPやマイコンといった、ターゲット環境に対応したコンパイラやリンカーを用意する。例えば、ターゲット環境にTI社のDSPチップを選んだ場合は、同社の統合開発環境「Code Composer Studio IDE(Integrated Development Environment)」を利用する。この統合開発環境を使って、作成したプログラム・コードをコンパイルすることで、DSPチップに実装可能な実行ファイルを得る。

高い電源性能が得られる

 このほか当社では、カプセルワークスに加えて、デジタル制御方式を採用したDC-DCコンバータ・ボードも開発した(図10)。TI社のDSPチップ「TMS320F2808」を採用したボード「F2808 eZdsp スタータ・キット」を使ってDC-DCコンバータを制御する。カプセルワークスとDC-DCコンバータ・ボードを組み合わせて、「デジタル制御電源プラットフォーム」として販売している*1)。DC-DCコンバータ・ボードは非絶縁型で、入力電圧範囲は18~30V、出力電圧範囲は0~15V、出力電流は最大4Aである。

図10 デジタル制御方式を採用したDC-DCコンバータ・ボード
カプセルワークスのほか、米Texas Instruments社のDSP「TMS 320F2808」を搭載したボード「F2808 eZdsp スタータ・キット」や、デジタル制御DC-DCコンバータ・ボードなどで構成した。制御方式には「疑似PID(Proportional Integral Differential)」を採用した。パソコンとDC-DCコンバータ・ボードをシリアル・インターフェース(RS-232Cインターフェース)で接続することで、DC-DCコンバータの動作状態をパソコン画面に表示できる。さらにトレーニング用ソフトウエアを使えば、パソコンからDC-DCコンバータの出力電圧や出力電流などを設定することが可能だ。

 前述のようにカプセルワークスには、制御用ソフトウエアのプログラム・コードが収められているため、プログラミング作業をしなくても、デジタル制御電源のメリットを確認できる。消費電力をどの程度削減できるのかも簡単に確かめられる。さらに、トレーニング用ソフトウエアも添付した。このソフトウエアをパソコンにインストールし、パソコンとDC-DCコンバータ・ボードをシリアル・インターフェースで接続すれば、DC-DCコンバータの動作状態を取得してパソコン画面に表示できる。パソコン画面に表示したグラフィカルなコントロール・パネルを使って、DC-DCコンバータの出力電圧や出力電流を設定することも可能である。デジタル制御電源の動作原理や、仕組みなどを学べる。

 デジタル制御方式を採用したこのDC-DCコンバータ・ボードの電源性能は、アナログ制御方式とそん色ない。例えば、負荷変動(ロード・レギュレーション)特性は、出力電流が0Aから4Aに変化したときに、出力電圧の変動幅は-3%以内で、回復時間は50μsと短い(図11)。出力電流が4Aから0Aに変化したときは、出力電圧の変動幅は2%以内、回復時間は50μsである。アナログ制御方式を採用した高性能のDC-DCコンバータと同程度の負荷変動特性が得られている。

モーターやロボットへの適用も視野に

 今回当社は、自律カプセル理論を適用した、デジタル制御電源向け組み込みソフトウエア開発ツールを実用化した。今後は、崇城大学の教授である中原正俊氏が開発したスイッチング電源回路シミュレータ「SCAT」とカプセルワークスの連携を確保する予定である。これが実現できれば、カプセルワークス上で開発したソフトウエアを、実際のDC-DCコンバータに実装することなく、シミュレータ上で動作状態を確認することが可能になる。このため、ソフトウエア開発の作業効率をさらに高められる。

 さらに現在、自律カプセル理論の適用範囲を広げることも検討している。ターゲットとなるのは、エネルギを制御する電子機器の組み込みソフトウエア開発である。具体的には、モーター制御やロボット制御などを想定している。

 冒頭で述べたように現在、地球の温暖化は急速に進行しており、地球上の生物に未曾有の危機が迫っている。エネルギに関連するエレクトロニクス技術に携わる経営者や開発者は、温暖化抑制に対して可能な限りの手段を用いて、活動を始める必要があるだろう。当社は今後も、こうした活動の一助となる組み込みソフトウエア開発ツールを提供していく考えだ。

>>>前編に戻る

【注釈】
*1)カプセルワークスやDC-DCコンバータ・ボード、トレーニング用ソフトウエアなどを組み合わせた「デジタル電源プラットフォーム」の価格は、3年間のリース契約で月額8万円。カプセルワークス単体での販売は、現在検討中である。連絡先はウインズ(WINZ)。電話番号は055-924-9233。同社のウェブサイトは、http://www.winz-inc.co.jp/

【著者プロフィール】
中村良道氏は現在、ウインズで代表取締役社長を務めている。さらに芝浦工業大学 工学部 電気工学科の非常勤講師も兼務している。1980年に芝浦工業大学を卒業。その後、1988年にウインズの設立に携わる。以降、太陽光発電システムや燃料 電池システムなどに向けた系統連系インバータ装置のハードウエア/ソフトウエア開発をプロジェクト・リーダーとして取り組んできた。

【EE Times Japan 2008年3月号「Tech Paper」、pp.73~82掲載記事】

PR