Argo Embeticsについて
- 組込みソフトウェア開発を対象とした構造化モデリングツールです。
図のように、モデリングを行うことでソフトウェアの開発を行います。
制御対象の情報や入力~出力までのデータの流れ、制御ロジック等と、 MPUの情報を入力してモデルデータを作成します。
モデルデータからC言語のソースコードを自動で生成します。
- システム構成と入出力。
Argo Embeticsは統合開発環境です。 実行環境情報の入力からモデルの編集、ソースコードの生成まで一連の操作を行うことができます。
作成したモデル情報はツール内部に保持され、保存時にXMLファイルとして出力されます。
開発はプロジェクト単位で行い、プロジェクトフォルダ配下にモデルの情報が保存されます。
- 特徴
Argo Embeticsは、以下の特徴を持ちます。
プラットフォームアクセス処理独立によるプラットフォーム非依存
MPU制御のモデルを制御ロジックのモデルから独立させているため、 制御ロジックを表すモデルはプラットフォームに依存しません。 それにより、MPUやデバイスなどのプラットフォーム変更時の影響を最小限に留めます。
ソフトウェア駆動フレームワークの自動生成
Argo Embeticsを使って開発するソフトウェアの機能は、プロセスという単位で実行されます。 各プロセスの実行部分は、モデルの設定に応じて自動で作成されるため、ユーザは任意の タイミングを設定するだけでソフトウェアを駆動できます。
プロセス駆動のタイミングには、常駐、インターバル、外部トリガの3種類の駆動方法があります。
構造化モデリングによるモデル駆動開発
Argo Embeticsでは、構造化モデリングによるモデル駆動開発を行います。
それにより、ソフトウェアの構造、振る舞い、実行タイミングを全てツール上で 設計することができて、生成するソースコードとの同期も取るこができます。
上のような特徴により、Argo Embeticsを使用すると、関係者との情報共有が容易になり、 重要な判断も迅速に行うことができます。
また、ソースコードではなくモデルを再利用することで、設計情報もそのまま再利用することができ、 コードと設計の乖離も最小限に防ぐことができます。
- 構造化モデリングとは
Argo Embeticsで使用するモデルは、構造化モデリングをベースとします。
構造化モデリングは、UMLによるモデリングとは異なり、オブジェクトではなく 振る舞いを主体とした設計を行います。
そこではソフトウェアの構造はデータフローダイアグラム(DFD)と呼ばれる図で表現します。
ソフトウェアの振る舞いは、DFDの中のプロセスという単位で表され、 そのプロセスに対して実際の振る舞いの方法(ロジック)を設計していきます。

ソフトウェアの振る舞いは、ロジックという要素によって表現できますが、上の図では そのロジック(プロセス)を実行するタイミングは定義されません。
プロセスの実行タイミングは構造化モデリングの図では定義されません。 Argo Embeticsでは、タスクという要素を使うことでプロセスの実行タイミングを定義します。
- Argo Embeticsが扱うモデル
Argo Embeticsでは、5つにグループ分けされたモデルを使って開発を行います。
- ハードウェアモデル
センサやアクチュエータ等の制御の対象を表します。
- 要求モデル
機能要件や制約条件、タイミング条件といった要件定義を表します。
- 機能モデル
ソフトウェアの構造、振る舞いを表します。
構造化モデリングの核となるモデルです。
- タイミングモデル
ソフトウェアの振る舞いの実行タイミングを表します。
- プラットフォームモデル
実行環境の情報を表します。
MPUそのものの情報とデバイスを含んだターゲットボードの情報の 2階層で構成されます。
モデルは以下のように階層化されます。
図のように、システムの全体像から実行環境までをくまなくモデリングできます。
詳細は、「Argo Embeticsが扱うモデル」を参照してください。
- ハードウェアモデル
- 生成するコード
Argo Embeticsが生成するコードは、C言語のソースコードです。
全体のフレームワーク、タスク関数、ロジック関数、データ宣言、 プラットフォームアクセス関数を出力します。
作成したロジックが関数として出力され、そのロジック関数は定義済みの タイミングでタスク関数から実行されます。
外部入出力データアクセスや、インターバル駆動、外部トリガ駆動の処理は プラットフォームモデルを利用して、適切なMPU制御処理として生成されます。
フレームワークからの実際の処理の呼出しは以下のような流れになります。
- [メインループ] -> [タスク] -> [ロジック] -> [入れ子ロジック]
- [割込み処理] -> [割込み関数] -> [タスク] -> [ロジック] -> [入れ子ロジック]
外部入出力データのアクセスは以下のような流れになります。
- [外部入出力データ] -> [ポートアクセス]
- [外部入出力データ] -> [モジュール関数] -> [レジスタアクセス]
3種類のロジックは、以下のようにコードに変換されます。
- 状態遷移図(STD)
状態遷移図は、その状態遷移をswitch文のコードに変換します。
- 真理値表
真理値表は、その条件パターンを左から順に評価し、入れ子のif文の コードに変換します。
- 手続き記述
手続き記述は、記述したとおりのコードに変換します。
- [メインループ] -> [タスク] -> [ロジック] -> [入れ子ロジック]