Argo Embetics チュートリアル

はじめに

Argo Embeticsは組込みソフトウェア開発に特化した構造化モデリングツールです。 特に制御系の組込みソフトウェア開発のための統合開発環境を提供します。 構造化設計に基づいた5つのモデルによって、使いやすいモデル駆動開発(MDD)を実現します。 作成したモデルデータは、C言語のソースコードに自動で変換されます。



このチュートリアルでは、以下の項目について説明します。


先に、よく使われる言葉を説明します。

次に、同梱のサンプルモデルの内容を説明します。
sampleフォルダには、以下のzipファイルがあります。全て同じマイコンを対象としていますが モデルの種類は異なります。
プラットフォームモデルの読み込み方法、使用方法は、チュートリアルの後半に記載しています。
各サンプルの詳細は、サンプル同梱のREADMEを参照してください。


このチュートリアルではプロジェクトの作成からソースコードの生成までの流れと 簡単な画面の操作方法を説明していきます。

まずは「インストールガイド.pdf」にしたがってインストールを完了し、 Argo Embeticsを起動してください。



一度もプロジェクトを開いていない場合は上の図のような画面になっています。 「ファイル」メニューの「新規プロジェクトの作成」で表示される画面です。 一度でもプロジェクトを開いている場合は前回開いたプロジェクトが表示されます。

では、画面の操作説明のため、サンプルプロジェクトを開いてみましょう。 サンプルプロジェクトは、同梱のファイル:「sample.zip」を展開して使用します。

まず、「プロジェクトの新規作成」ダイアログを閉じて、 「ファイル」メニューの「プロジェクトを開く」、または以下のボタンを クリックして、ファイルダイアログを表示させます。

ファイルダイアログ上で、サンプルプロジェクトの「mpic01_kit_01.eprj」 を選択します。



以下の画面が表示されます。



画面の操作方法

Argo Embeticsの画面は主に以下の図のように分かれています。





次に、画面の操作方法に入る前に、モデルの構成を説明します。

Argo Embeticsで扱うモデルは、5つのグループで構成されます。 5つのグループは以下の図のような階層構造を取ります。

論理構成




実行タイミング構成






モデルの詳細はヘルプを参照してください。

論理構成、タイミング構成のどちらにおいても、処理の単位はプロセス要素になります。 プロセスの処理内容は、ロジックによって記述します。
論理構成上の処理の階層は、

「機能要件」-「DFD」-「プロセス」-「ロジック」

となります。「ロジック」の内容は処理コードと1対1です。

タイミング構成上の処理の階層は、

(ハードウェア割込み) ->「タイマ/外部割込み」-「タスク」-「プロセス」-「ロジック」
または
(mainループ) ->「タスク」-「プロセス」-「ロジック」

となります。


入出力データの階層は、

「外部入出力データ」-「ポートデータ」- (実ポート)
または
「外部入出力データ」-「モジュール」- (実ポート)

となります。

このような構成を取ることにより、マイコン周りのレジスタの設定等を 意識することなく、組み込みソフトウェアの開発を行えます。
外部デバイスに対しては、どのデバイスがどのポートに接続しているかが わかれば制御できます。
また、プラットフォームの変更に対しても柔軟に対応できます。





では、簡単な画面の操作方法を説明します。

メインメニュー



メインメニューでよく使用するものを説明します。


モデルデータ管理画面

モデルデータ管理画面はモデルの構成をツリー状に表示します。
以下の3種類のツリーでモデルの構成を表します。


モデルデータ管理画面の要素を選択して右クリックすると、 使用できるメニューが表示されます。
モデルの各要素を編集するには、右クリックの「編集」かダブルクリックで 編集画面が表示されます。
「エクスポート」メニューが表示される項目は、エクスポート可能です。



モデル要素編集画面

モデル要素の画面には、一覧画面と編集画面があります。 モデル要素の編集画面には、一覧も含め、大きく5つの種類があります。
全ての画面において、「Update」、または「OK」ボタンで更新します。
「Close」ボタンはありませんので、「×」ボタンで画面を閉じます。


編集画面の入力方法には4つの種類があります。

プロジェクトの作成

では、簡単なプロジェクトを作成してみましょう。 プロジェクトは、既存のものを読み込んでも構いませんが、 ここでは新規に作成してみます。

以下の手順で実行していきます。
  1. 新規プロジェクトの作成
  2. プラットフォームモデルデータのインポート
  3. 入出力ポートの設定
    1. ポートデータの有効化
    2. 入出力設定
  4. モデルの作成
    1. コンテキストダイアグラムの作成
    2. 外部データの追加
    3. ロジックの作成
    4. 外部入出力データのリンク
  5. ソースコード生成
    1. ソースコード生成
    2. ビルド
    3. ロード
ここでは、同梱のサンプルプロジェクトに合わせて、制御ボードに 「株式会社マルツ電波」社の「PICマイコン学習キット(MPIC-KIT)」を 想定してプロジェクトを作成してみます。 このボードは、マイコンに「PIC16F819」を使用しています。

1. 新規プロジェクトの作成

まず、以下のボタンからダイアログを表示し、新規プロジェクトを作成します。


以下の「プロジェクトの新規作成」ダイアログが表示されます。 ここにプロジェクトを作成するパスと作成方法を選択します。



プロジェクトフォルダには任意のパスを指定します。
但し既に作成済みのプロジェクトが存在するフォルダは指定できません。
指定したフォルダ名がプロジェクト名になり、同時にプロジェクトファイルが作成されます。
「作成方法」は「空のプロジェクトを作成」を選択します。

プロジェクトの作成に慣れてきたら他の方法も試してみてください。

新規プロジェクトを作成すると、以下のファイル/フォルダが作成されます。
Argo Embeticsでは、この単位でソフトウェアの開発を行います。

2. プラットフォームモデルのインポート

エクスポートされるプラットフォームモデルには、 の2種類がありますが、ここではレジスタモデルを読み込んで 設定を行うところからはじめます。

※通常のインポートでは、読み込んだモデル要素は追加されますが、 プラットフォームモデルのインポートの場合、カレントプロジェクトの プラットフォームモデルの内容は上書きされます。

まず、「ファイル」メニューの「モデルをインポート」-「フォルダから」を選択すると、 ダイアログが表示されます。



ダイアログのモデルファイルに、同梱のファイル:「PIC16F819.xml」 を指定します。


インポートが完了すると、以下の図のように、「PIC16F819」のマイコンの 情報が読み込まれます。


読み込むのはレジスタモデルのみですが、インタフェースモデルも 自動で作成されます。
インポート完了時点でいったんプロジェクトを保存しておきましょう。
プロジェクトの上書き保存は、「ファイル」メニューか以下のボタンで実行します。


3. 入出力ポートの設定

ポートの入出力設定は、ポートデータの編集画面、または プラットフォームモデルリンク画面の「プラットフォームモデル有効化」タブ で行います。
また、使用するポートデータは有効化する必要があります。
※ポートデータに限らず、メイン以外のプラットフォームモデル要素は 有効化しなければ使用できません。
プラットフォームモデルリンク画面は「表示」メニューから選択します。


インポートした直後は、 「プラットフォームモデル有効化」タブは以下のようになっています。


  1. ポートデータの有効化
    プラットフォームモデル要素は、チェックボックスをONにすることで 有効化できます。

  2. 入出力設定
    ポートデータの入出力の設定状況は、要素名の右に「(入力)」のように 表示されます。要素を右クリックして、「入出力変更」を選択すると、 入出力が切り替わります。


「Update」ボタンをクリックすることで変更が反映されます。

ポートの入出力の設定は、対象ボードの仕様を確認して行わなければなりませんが、 このボードには、ボタンとLEDが付いていますので、まず2つのポートだけを使用して、 ボタンでLEDを制御する、簡単なモデルを作成してみましょう。

ボードの解説書を読むと、ボタンSW1はポートA4に、LED4はポートB7に 接続していることがわかります。
また、ボタンは押下時にLow(0)、LEDもLow(0)で点灯しますので、 制御の際には注意が必要です。

まず、ポートA4とポートB7を有効化し、それぞれ、入力、出力に設定します。


「Update」ボタンで変更を反映します。


4. モデルの作成

ここまでで、モデルを作成する準備は完了です。 モデルの作成は、以下の手順で行っていきます。
  1. コンテキストダイアグラムの作成

    モデルの作成は、コンテキストダイアグラムから始まります。
    ここに制御対象のH/W要素を追加して、ハードウェアの構成を作ります。
    コンテキストダイアグラムは、モデルデータ管理画面の、 「H/Wモデル/要求モデル」-「コンテキストダイアグラム」の 右クリックから表示できます。


    この時点ではコンテキストダイアグラムは空の状態です。


    画面上部の、「H/W要素」、「機能要件」のボタンをそれぞれクリックし、 入出力H/W要素と機能要件をそれぞれ1つずつ追加します。


  2. 外部データの追加

    入出力データは、H/W要素と機能要件をマウスでドラッグすることで 追加できます。


    外部データはプラットフォームモデルとリンクするモデルです。
    今の時点で対応するポートがわかっているのでここでリンクを行います。

    [外部データとポートデータのリンク]
    まず外部入力データから設定します。画面アイテムの右クリックメニュー、 またはダブルクリックで編集画面が表示されます。




    まず、「シンボル」のプルダウンに先ほどの「RA4/AN4」のポートが表示 されますのでそのポートを選択します。
    プルダウンに何も表示されない場合は「3. 入出力ポートの設定」に戻って 操作を行ってください。


    次に、ポートに設定する値を選択します。
    前述したように、ボタン、LEDともにONが0、OFFが1の値を取りますので、 「値グループ」のプルダウンで「Negative ON/OFF」を選択します。
    初期値には、プルダウンから「OFF」を選択します。
    また、名称を「ボタン状態」などに変更するとわかりやすくなります。


    変更したら「Update」ボタンで確定します。
    同様に外部出力データも編集します。


    変更したら「Update」ボタンで確定します。
    外部データの画面は「×」ボタンで閉じます。
    外部データの名称変更により、コンテキストダイアログの表示は 以下のようになっているはずです。


    コンテキストダイアログも「Update」ボタンで確定します。
    次はロジックの作成です。


  3. ロジックの作成

    機能要件の画面アイテムを右クリックし、「ロジック作成」-「手続き記述」 を選択します。


    以下のような画面が表示されるので、「編集」チェックボックスをONにして、 編集可能にします。


    作成する処理は、

    「ボタン押下中にLEDを点灯させる」

    という簡単な処理にしましょう。

    C言語の文法で書くと、以下のようになります。

    if( ボタン状態 == ON ){
        LED状態 = ON;
    }else{
        LED状態 = OFF;
    }

    これをArgo Embeticsのコードエディタ上で入力する場合は 以下のように行います。
    まず、「if(」と入力します。

    すると、以下のように自動でif文が作成されます。


    そのままキャレット位置を変更せずに、「使用可能データ」の「ボタン状態」 をダブルクリックします。
    すると、以下のようにデータが挿入され、判定値の選択候補が表示されます。


    ※フォーカスがはずれるとメニューは消えますが、「=」の後で " "(スペース)を入力すると、再度表示されます。

    「ON (ON)」を選択すると、以下のように判定文が作成できます。


    同様にして次は「LED状態」の設定処理を入力します。
    まず、コード上で改行とインデントを入れて、キャレットを 入力の開始位置に移動します。


    そのままキャレット位置を変更せずに、「使用可能データ」の「LED状態」 をダブルクリックします。
    すると、以下のようにデータが挿入され、設定値の選択候補が表示されます。


    「ON (ON)」を選択すると、設定値が挿入されます。
    ※「;」は挿入されないため、追加します。


    同様にして、else文も作成します。"}else{"は直接入力します。
    元のコードを作成しているので、コピー/ペーストでも構いません。


    以上で目的のif文が作成できます。
    「編集」チェックボックスをOFFにして、目的のコードになっていることを 確認しましょう。


    問題がなければ「Update」ボタンで確定します。

  4. 外部入出力データのリンク
    既に外部入出力データのリンクは、作成済みですが、ここでは プラットフォームモデルリンク画面を使用したリンクを説明します。
    メインメニューの「表示」-「プラットフォームモデルリンク」で 画面を表示します。
    外部データのリンクは「外部データリンク」タブで行います。


    左に「外部データ」、右に設定可能なプラットフォームモデルの 「ポートデータ」が表示されます。
    外部データのリンクは、右の「シンボル」のプルダウンで 目的のポートを指定することで作成できます。
    入出力のリンクを「ポートデータ」ではなく、「モジュール」要素の 関数に指定することも可能です。その場合は、「アクセス方法」プルダウンの 「関数」を選択します。すると、「シンボル」のプルダウンには 「モジュール」要素の関数が表示され、選択可能になります。
以上でモデルデータの作成は完了ですが、コンテキストダイアグラム上で、H/W要素や 機能要件の内容を編集すると、以下のようにさらにわかりやすい図が出来上がります。
要素の編集画面は、画面アイテムの右クリックで表示できます。


次はいよいよソースコードの生成を行います。


5. ソースコード生成

モデルデータが作成できていればソースコード生成はボタン1つです。 ここではその後のビルドとロードまで行ってみます。
  1. ソースコード生成

    ソースコード生成は、メインメニューの「生成」-「ソースコード生成」、または 以下のボタンで実行できます。
    ※Basic Editionの場合、ボタンは使用できません。


    生成が完了すると、以下のメッセージが表示されます。


    チェックボックスをONにして「OK」をクリックすると、出力したフォルダを表示します。


    作成したモデルにエラーがある場合は以下のようにメッセージが表示されます。
    エラーの行をダブルクリックすると、該当要素の編集画面が表示されます。


    ソースコードの生成方法は、「プロジェクト構成」画面で指定できます。
    「環境設定」タブで生成するパスを指定します。



    「生成ソースの設定」タブで生成方法の細かな設定を行います。



    「開始処理」タブで、独自の開始処理を追加することができます。



  2. ビルド

    生成したソースコードをビルドします。
    Standard Edition以上であれば、「プロジェクト構成」画面の「ビルドコマンド」タブに コマンドを設定して、Argo Embetics上からビルドを行うことができます。


    設定したビルドコマンドは、「生成」メニュー、またはツールバーから実行できます。


    コマンドラインで実行する場合は、以下のコマンドを実行します。

    picc --CHIP=16f819 --RUNTIME=+stackcall 生成ソースファイルパス

    このプラットフォームモデルは「HI-TECH C」のコンパイラ使用を前提にしていますので コマンドも「HI-TECH C」に合わせています。
    「HI-TECH C」の情報は、http://www.htsoft.com/ を参照してください。
    ビルドに成功すると、hexファイルが作成されます。


  3. ロード

    ビルドで作成されたhexファイルをターゲットボード(マイコン)にロードします。
    コマンドを使用してロード可能な場合は、ビルドと同様に、「プロジェクト構成」画面の 「ロードコマンド」タブにコマンドを設定して、Argo Embetics上からロードを行うことができます。
    コマンドロードができない場合やBasic Editionの場合は、指定されたツール等を 使用してロードを行ってください。
いかがでしたか。目的の制御は実行できましたでしょうか。
ここまででプロジェクト作成からソースコード生成、ビルド・ロードまでの流れを簡単に説明してきました。
この後は、他のロジックや、DFDを使用したモデリング、インターバルタイマを使用したモデリングについて 説明していきます。

その他のモデリング方法

その他のモデリング方法として、以下のようなモデリングを説明していきます。
  1. 真理値表を利用したロジック
  2. STD(状態遷移図)を利用したロジック
  3. DFD(データフローダイアグラム)の作成
  4. インターバル駆動プロセスの作成

A. 真理値表を利用したロジック

入力条件に応じて処理が変わるような場合には真理値表のロジックを利用できます。
まずは、コンテキストダイアグラム上で機能要件を右クリックし、 設定済みのロジックを削除します。


次に再度、機能要件を右クリックし、真理値表を追加します。


メニューを選択すると、以下のような真理値表の編集画面が表示されます。


真理値表は以下のような構成を取ります。


入力条件を設定し、条件の組み合わせを「*/T/F」のパターンで記述します。
「*/T/F」は、それぞれ、 の意味です。
選択した条件パターン毎に処理コードを記述できます。
入力条件は、左から順に評価されます。
コード生成時には、真理値表の内容が、if文のコードとして生成されます。

作成した直後は、入力データを基にデフォルトの条件が設定されています。 変更する場合は、それぞれ以下のように編集を行います。



B. STD(状態遷移図)を利用したロジック

ある状態を保持しつつ、その状態に応じて処理が変わるような場合には STD(状態遷移図)のロジックを利用できます。
まずは、コンテキストダイアグラム上で機能要件から設定済みのロジックを削除し、 STDを追加します。


メニューを選択すると、以下のようなSTDの編集画面が表示されます。


STDは以下のような構成を取ります。


チャートエディタ上に、「始点/終点」と「状態」、「状態遷移」を追加して STDを作成します。それぞれ以下のボタンを選択した状態でエディタ上を ドラッグすると追加できます。「状態遷移」の追加は、両端を「始点/終点」 と「状態」に合わせてドラッグします。




C. DFD(データフローダイアグラム)の作成

ここまでは、機能要件に直接ロジックを作成してきましたが、実はその際に DFDとプロセスも同時に作成されています。
機能要件を右クリックすると、「DFD表示」のメニューがあることがわかります。


これを選択すると、作成されたDFDの編集画面が表示されます。


これがDFDです。
DFDを使用すると、機能を明確に切り分けたり、それぞれに起動タイミングを 設定したりすることができます。
DFDはデータの流れと処理(プロセス)を表現します。 データの流れは矢印で表され、プロセスはブロックで表されます。

プロセスは処理の単位です。プロセスは独自の起動タイミングを持つことができ、 その処理内容はロジックで定義されます。
※DFDはデータの流れを表すだけで、処理の順番は規定しません。 プロセスだけが起動タイミングを持ちます。 (最終的にはタスクがプロセスの起動を管理します。)

上の図の「ボタン状態」、「LED状態」はそれぞれ、コンテキストダイアグラムで 追加した外部入出力データです。
「LED制御」はプロセスを表し、コンテキストダイアグラムで作成したロジックを 自身のロジックとして持ちます。
コンテキストダイアグラムの機能要件にロジック追加を行うと、上のような DFDが自動で作成されます。


DFDでは、プロセスを分割することができます。 プロセスを分割することで、機能分割を行うことができます。
DFDの構造は、以下のようになっています。



D. インターバル駆動プロセスの作成

インターバルタスクを使用して、プロセスを一定の間隔で実行する方法を説明します。
まず、DFDのプロセスを右クリックして「起動タイミング」-「インターバル駆動に変更」 メニューを選択します。


それによって、インターバルタスクが自動で追加され、使用可能なタイマとリンク された状態になります。
次に詳細なインターバル間隔を設定します。再度右クリックして、今度は 「起動タイミング」-「編集」を選択します。

自動で作成されたインターバルタスクの編集画面が表示されます。


プロセスの実際の起動はタスクから行われます。
タスクは処理(プロセス)の実行タイミングを管理します。
したがって、タスクの実行タイミングを変更すれば、 プロセスの実行タイミングの変更が行えます。


デフォルトのインターバル間隔は10msecになっています。
「オプション」タブを表示すると、対応するタイマのインターバルが 表示されています。こちらもインターバル間隔は10msecです。



どちらも10msecなので、10msec間隔で駆動する場合は変更は不要です。
もしインターバルを変更する場合、2通りの方法があります。
インターバル駆動ではなく、外部割込みによる駆動を行う場合には、 タイマではなく、外部割込みとリンクする必要があります。
タスクと、プラットフォームモデルのタイマや外部割込みのリンクには、 上記の方法以外に、プラットフォームモデルリンク画面を用いる方法もあります。
まず、プラットフォームモデルリンク画面の「タスクのタイミング」タブを表示します。


この画面には、作成済みの全てのタスク(常駐タスク以外)が表示されます。 左側が作成済みのタスク、右側が使用可能なタイマ、または外部割込みの情報です。
「タイミング要素」プルダウンから適切な要素を選択することで、 タスクとプラットフォームモデルのタイミング要素をリンクすることができます。

通常、インターバルタスクのインターバル間隔は、プロセスの起動間隔として 使用しますが、STDなどの場合、状態遷移の条件に利用することが可能です。
以下のSTDの状態遷移条件には、「dly(5)」というコードが記述されています。
これは、「状態1」が5回繰り返されると条件を満たすことを意味します。


これを利用して、このロジックを持つプロセスを10msecのインターバル駆動に 設定すると、「状態1」が5回繰り返されるということは、50msecのディレイを 実装することになります。
このようにして、インターバルタスクとSTDを組み合わせて時間で変化する 処理を記述することができます。

「dly(回数)」のコードは「ディレイ」といって、遅延回数を指定する コードです。STDの編集画面で追加できます。 「挿入メニュー」の「ディレイ設定」を選択して子画面から入力します。




プラットフォームモデルの読み込み

「プロジェクト作成」の章で、プラットフォームレジスタモデルのインポートを行いましたが、 ここではそれ以外の2通りの読み込み方法を説明します。
  1. ボードの設定まで含めたプラットフォームモデルの読み込み

    「ボードの設定まで含めたプラットフォームモデル」とは、通常、 プラットフォームモデルと呼ぶモデルです。モデルの範囲は、以下のようになります。


    インポートの方法は、レジスタモデルの場合と変わりはなく、メインメニューの 「ファイル」-「モデルをインポート」を選択し、ダイアログにエクスポート済みの ファイルを指定すれば読み込みが行えます。

    プラットフォームモデルを読み込んだ場合、コンテキストダイアグラムを作成するところから 開発を開始します。既にモデルができている状態でプラットフォームモデルを読み込んだ場合、 つまり実行環境を切り替えた場合は、外部データやタスクなどのプラットフォームモデルとの リンク部分を再度設定しなおします。プラットフォームモデルモジュールを直接ロジックで 使用している場合はコードの見直しが必要です。 リンクが切れている場合はソースコード生成でエラーが発生します。

  2. H/W要素や外部データの設定まで含めたプラットフォームモデルの読み込み

    「H/W要素や外部データの設定まで含めたプラットフォームモデル」のことを 「H/Wプラットフォームモデル」と呼びます。
    「H/Wプラットフォームモデル」は、エクスポートされたモデルではなく、 プロジェクトそのものです。
    完成されたモデルから、機能要件以下の処理要素を除いたプロジェクトを指します。

    「H/Wプラットフォームモデル」の読み込みは、メインメニューの 「ファイル」-「新規プロジェクトの作成」を選択します。



    作成方法は「別のプロジェクトを基に作成」を選択し、 作成するプロジェクトパスと、基にするプロジェクトファイルを指定します。

    H/Wプラットフォームモデルを読み込んだ場合、開発は、機能の作りこみだけになります。 外部データは既にプラットフォームモデルとリンク済みの状態になっています。 この場合はコンテキストダイアグラムの機能要件から開発を開始します。 コンテキストダイアグラムでマウスをドラッグすると、 該当のH/W要素に登録済みの外部データが選択候補として表示されます。




以上でArgo Embeticsのチュートリアルは終了です。
さらに詳細な説明は、ヘルプを参照してください。


Argo Embeticsで利用可能なプラットフォームモデルは、 アルゴソリューションズのWebサイトからダウンロードできます。
また、再利用可能なモジュールやロジックなどもご用意してあります。 それらを組み合わせてArgo Embeticsを様々な開発にご利用ください。

Argo Embeticsや弊社に関するお問い合わせは

argo-embetics@argo-s.com

までご連絡ください。

Argo Embeticsに関する最新情報は、

http://www.argo-s.com/ae/

で取得できます。















アルゴソリューションズ株式会社 TEL 022-227-2344
Mail info@argo-s.com
仙台市青葉区一番町2-7-12 グリーンウッド仙台一番町ビル6F URL http://www.argo-s.com/


COPYRIGHT (C) 2010-2011 Argo Solutions Co.,Ltd. ALL RIGHTS RESERVED.