AUTOSAR コンポーネントと生成されたコードの設計とシミュレーション
動作アルゴリズムの実装、コンポーネントとコンポジションのシミュレーション、コンポーネント コードの生成を行い、AUTOSAR のコンポーネントを開発します。
AUTOSAR コンポーネントの Simulink 表現の開始
Simulink® で AUTOSAR コンポーネントを開発するには、まず、AUTOSAR ソフトウェア コンポーネントの Simulink 表現を作成します。AUTOSAR コンポーネントの作成は、ARXML コンポーネントの記述または既存の Simulink 設計から開始できます。
AUTOSAR ソフトウェア コンポーネントの記述を ARXML ファイルからインポートして初期の Simulink モデル表現を作成するには、例AUTOSAR コンポーネントの Simulink へのインポートまたは例AUTOSAR コンポジションの Simulink へのインポートを参照してください。
AUTOSAR ソフトウェア コンポーネントの初期のモデル表現を Simulink で作成するには、Simulink での AUTOSAR ソフトウェア コンポーネントの作成を参照してください。
この例は、スロットル位置制御システムをモデル化した、autosar_composition
という名前の AUTOSAR ソフトウェア コンポジションの Simulink 表現を使用します。このコンポジションには相互接続された 6 つの AUTOSAR ソフトウェア コンポーネント (4 つのセンサー/アクチュエータ コンポーネントと 2 つのアプリケーション コンポーネント) が含まれます。
コンポジション モデル autosar_composition
を開きます。
open_system('autosar_composition');
コンポーネント モデル間の信号線は AUTOSAR アセンブリ コネクタを表します。コンポーネント モデルとデータ入力端子および出力端子間の信号線は AUTOSAR デリゲーション コネクタを表します。
1 つのコンポジション モデルにおいて、コンポーネント モデルはレート ベース、関数呼び出しベース、または両者の混在が可能です。このコンポジションは、レート ベースのコンポーネント モデルを含んでいます。各コンポーネント モデルにおいて、Atomic サブシステムが AUTOSAR の周期的なランナブルをモデル化します。レート ベースのランナブル タスクをエクスポートされた関数と同じようにスケジュールするため、コンポーネント モデルは Model ブロック オプション [レートのスケジュール] を使用します。このオプションは、レートベースのモデルについて、モデルの周期的イベント ポートを表示します。
スロットル位置制御コンポジションの機能概要
コンポジション モデル autosar_composition
の目的は、アクセル ペダルからの入力とスロットルからのフィードバックを基に、自動車用スロットルを制御することです。このコンポジションの中で、コントローラー コンポーネントは 1 つのアクセル ペダル位置 (APP) センサーと 2 つのスロットル位置センサー (TPS) から入力値を受け取ります。コントローラーはその値をスロットル アクチュエータの入力値に変換します。スロットル アクチュエータは、スロットル位置を調整するハードウェア コマンドを生成します。
コンポジション モデルは、1 つのアクセル ペダル センサーおよび 2 つのスロットル センサー用のルート入力端子と、スロットル ハードウェアに対するコマンド用のルート出力端子を備えています。このコンポジションには、センサーの入力値がアナログ/デジタル コンバーター (ADC) の範囲に正規化された状態で届く必要があります。コンポジション コンポーネントは、3 つのセンサー、1 つのモニター、1 つのコントローラー、および 1 つのアクチュエータです。
センサー コンポーネント モデル
autosar_swc_pedal_sensor
は、コンポジションの入力端子から APP センサー HWIO 値を受け取り、それを APP センサー パーセント値に変換します。センサー コンポーネント モデル
autosar_swc_throttle_sensor
のプライマリ インスタンスとセカンダリ インスタンスは、コンポジションの入力端子から TPS HWIO 値を受け取り、それを TPS パーセント値に変換します。アプリケーション コンポーネント モデル
autosar_swc_monitor
は、どの TPS 信号をコントローラーに渡すかを決定します。アプリケーション コンポーネント モデル
autosar_swc_controller
は、ペダル センサーからの APP センサー パーセント値と、TPS モニターによって提供される TPS パーセント値を受け取ります。これらの値に基づいて、コントローラーは、スロットル アクチュエータに提供するスロットル コマンドのパーセント値を計算します。アクチュエータ コンポーネント モデル
autosar_swc_actuator
は、コントローラーによって提供されるスロットル コマンドのパーセント値を受け取り、それをスロットル コマンドの HWIO 値に変換します。
AUTOSAR コンポーネント アルゴリズムの開発
1 つ以上の AUTOSAR ソフトウェア コンポーネントの初期の Simulink 表現を作成した後、AUTOSAR 構成を調整し、アルゴリズム モデル コンテンツを作成することによりコンポーネントを開発します。
AUTOSAR コンポーネント アルゴリズムを開発するには、各コンポーネントを開き、コンポーネントの動作を実装する Simulink コンテンツを提供します。たとえば、autosar_composition
モデルに含まれる autosar_swc_controller
コンポーネント モデルを考えます。autosar_swc_controller
コンポーネントの初期表現は、Simulink に初めてインポートまたは作成された時点で、コントローラーの動作の初期スタブ実装を含んでいることが考えられます。
コンポーネント モデル autosar_swc_controller
は、このスロットル ポジション コントローラーの動作の実装を提供しています。コンポーネントは、ペダル位置センサーからの APP センサー パーセント値と、スロットル位置センサー モニターによる TPS パーセント値を入力として受け取ります。これらの値に基づき、コントローラーは "誤差" を計算します。これは、自動車の運転手が希望するスロットル位置 (ペダル センサーに基づく) と現在のスロットル位置の差です。Discrete PID Controller ブロックは、スロットル コマンドの割合を計算してスロットル アクチュエータに提供するために誤差値を使用します。スコープには、誤差値および Discrete PID Controller ブロックの出力値が経時的に表示されます。
autosar_composition
モデルのセンサー コンポーネント モデルおよびアクチュエータ コンポーネント モデルは、ルックアップ テーブルを使用して値変換を実装します。たとえば、autosar_swc_actuator
コンポーネント モデルを考えます。autosar_swc_actuator
コンポーネントの初期表現は、Simulink に初めてインポートまたは作成された時点で、アクチュエータの動作の初期スタブ実装を含んでいることが考えられます。
コンポーネント モデル autosar_swc_actuator
は、このスロットル ポジション アクチュエータの動作の実装を提供しています。コンポーネントは、コントローラーによって提供されるスロットル コマンドのパーセント値を受け取り、それをスロットル コマンドの HWIO 値に変換します。ハードウェア ブリッジ コマンド ルックアップ テーブルが出力値を生成します。
autosar_composition
モデルに含まれるモニター コンポーネント モデルは、どの TPS 信号がコントローラー コンポーネントを提供するかを選択するロジックを実装します。autosar_swc_monitor
コンポーネントの初期表現は、Simulink に初めてインポートまたは作成された時点で、モニターの動作の初期スタブ実装を含んでいることが考えられます。
コンポーネント モデル autosar_swc_monitor
は、このスロットル ポジション モニターの動作の実装を提供しています。このコンポーネントは、プライマリ スロットル位置センサーとセカンダリ スロットル位置センサーから TPS パーセント値を受け取り、どの TPS 信号をコントローラーに渡すかを決定します。Switch ブロックは、センサー選択ロジックに基づき、どの値が渡されるかを決定します。
AUTOSAR コンポーネントおよびコンポジションのシミュレーション
AUTOSAR コンポーネントを開発しながら、コンポーネント モデルを個別に、もしくはそれを含むコンポジション内でグループとしてシミュレートできます。
実装された Controller
コンポーネント モデルをシミュレートします。
open_system('autosar_swc_controller'); simOutComponent = sim('autosar_swc_controller'); close_system('autosar_swc_controller');
autosar_composition
モデルのシミュレーションを実行します。
simOutComposition = sim('autosar_composition');
AUTOSAR コンポーネント コードの生成 (Embedded Coder)
Simulink Coder と Embedded Coder ソフトウェアがある場合、各 AUTOSAR コンポーネントを開発しながら、Simulink でのテストまたは AUTOSAR ランタイム環境への統合を実行するための ARXML コンポーネント記述ファイルとアルゴリズム C コードを生成できます。
たとえば、実装された autosar_swc_controller
コンポーネント モデルをビルドするには、そのモデルを開きます。Ctrl+B キーを押すか、MATLAB コマンド slbuild('autosar_swc_controller')
を入力します。
モデルのビルドにより、ARXML 記述がエクスポートされ、AUTOSAR 準拠の C コードが生成され、生成ファイルが記述された HTML コード生成レポートが開きます。このレポートでは、生成ファイルを確認し、ハイパーリンクをクリックしてコンポーネント モデル内の生成コードとソース ブロック間を移動できます。
AUTOSAR のシステムレベル シミュレーションの代替方法
AUTOSAR コンポーネントとコンポジションの開発が終わった後、1 つのシステムレベルのシミュレーションに属するコンポーネントのグループをテストすることができます。次のことが可能です。
コンポジション内のコンポーネントをシミュレーション用に組み合わせる。
コンポーネント、スケジューラ、プラント モデル、および場合によっては基本ソフトウェア サービス コンポーネントおよび呼び出し元を用いてテスト ハーネスを作成する。そのテスト ハーネスを使用して開ループまたは閉ループのシステム シミュレーションを実行します。
Simulink Test を使用する開ループ シミュレーションの例については、Testing AUTOSAR Compositions (Simulink Test)を参照してください。例では、AUTOSAR コンポジション モデルについて back-to-back テストを実行します。
閉ループ シミュレーションの例については、モデル例 autosar_system
を開きます。このモデルは、AUTOSAR コンポジション モデル autosar_composition
についてシステムレベルのテスト ハーネスを提供します。
open_system('autosar_system');
システムレベルのモデル autosar_system
の目的は、自動車用スロットル位置制御システムにおけるプラントおよびコントローラー部分のシステムレベルのシミュレーションを実行することです。システムレベルのモデルは、閉ループ システムでコンポジション モデル autosar_composition
を、物理的なアクセル ペダル デバイスおよびスロットル デバイスのブロック表現と組み合わせます。モデルはペダル デバイス ブロックおよびスロットル デバイス ブロックから出力値を取り、その値をアナログ/デジタル コンバーター (ADC) の範囲に変換し、その値をコンポジションへの入力として提供します。システム モデルもまた、コンポジションによって生成されたスロットル コマンドの HWIO 値を受け取り、それをスロットル デバイス ブロックが受け入れ可能な入力値に変換します。システムレベルのスロットル位置スコープには、スロットル位置センサーの入力値に対するアクセル ペダル センサーの入力値が経時的に表示されます。
システムレベルのモデルをシミュレートする場合、スロットル位置スコープには、スロットル コンポジション モデルのスロットル位置コントロール アルゴリズムがどの程度アクセル ペダルの入力を追跡しているかが示されます。システムに変更を加えて、コンポジションの動作を改良できます。たとえば、コンポーネント アルゴリズムを変更して、アクセル ペダルの値とスロットル位置の値が近くなるようにしたり、センサー ソースを変更したりできます。
simOutSystem = sim('autosar_system');