Main Content

AUTOSAR クライアント/サーバー通信の構成

Simulink® では、シミュレーションとコード生成用の AUTOSAR クライアント/サーバー通信をモデル化できます。使用する Simulink のブロックや上位のワークフローの詳細については、クライアント/サーバー インターフェイスを参照してください。

AUTOSAR サーバーおよびクライアントをモデル化するには、次のいずれかまたは両方を実行します。

  • AUTOSAR サーバーおよびクライアントを ARXML コードからモデルにインポートする。

  • AUTOSAR サーバーおよびクライアントを Simulink ブロックから設定する。

このトピックでは、Simulink ブロックから開始する AUTOSAR サーバーおよびクライアントの構成に関する例を示します。

AUTOSAR サーバーの構成

この例では、Simulink Function ブロックを AUTOSAR サーバーとして構成する方法について説明します。この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある次のファイルを使用します。

ファイルを作業フォルダーにコピーする場合、MATLAB® ファイルとモデル ファイルを併置します。

  1. AUTOSAR サーバーを作成および設定するモデルを開くか、モデル例 mControllerWithInterface_server.slx を開きます。

  2. Simulink Function ブロックをモデルに追加します。モデル例は 2 つの Simulink Function ブロック (doOverridereadData) を提供します。

  3. サーバー関数を実装するように Simulink Function ブロックを構成します。関数のプロトタイプを構成し、サーバー関数のアルゴリズムを実装します。

    モデル例では、readData という名前の Simulink Function ブロックのコンテンツが readData という名前のサーバー関数を実装します。

    次のものが含まれます。

    • サーバー関数のトリガー ポートを表す Trigger ブロック readDataTrigger ブロックのプロパティでは、[トリガー タイプ][関数呼び出し] に設定されています。また、[Simulink 関数として扱う] オプションが選択されています。

    • 関数のプロトタイプ [Data,ERR,NegCode]=readData(Op) に対応する Argument Inport ブロック Op および Argument Outport ブロック DataERRNegCode

      メモ

      サーバー関数の引数を構成するときは、Inport ブロックおよび Outport ブロックの[信号属性] タブで、信号データ型、端子の次元、信号タイプを指定しなければなりません。サーバー関数の引数に信号属性が指定されていない場合、AUTOSAR の構成は検証に失敗します。

    • 関数 readData のアルゴリズムを実装するブロック。この例では、少数の単純なブロックが最小限の操作によって DataERR および NegCode の出力値を提供します。Constant ブロックはサーバー関数用に定義されたアプリケーション エラーの値を表します。呼び出し側から渡された Op の値は無視されます。実際のアプリケーションでは、アルゴリズムはより複雑な操作を実行します。たとえば、渡された Op の値に基づく実行パスの選択、アプリケーションで必要な出力データの生成、エラー状況の確認などです。

  4. サーバー関数が Simulink 内で動作する場合は、AUTOSAR 用に構成されたモデル内で Simulink Function ブロックをセットアップします。たとえば、現在のモデルを AUTOSAR 向けに構成するか、ブロックを AUTOSAR のモデルにコピーします。

    モデル例は AUTOSAR モデルであり、Simulink Function ブロックの readData がコピーされています。関数 readData に対する意味のある Op 入力値の代わりに、Simulink データ転送ライン CurVal は関数のアルゴリズムで使用されている入力値を提供します。

  5. AUTOSAR サーバーを構成するために必要な要素を、一般的な作成順序で以下に示します。

    • AUTOSAR クライアント/サーバー (C-S) インターフェイス

    • C-S インターフェイスがクライアント要求を処理する 1 つ以上の AUTOSAR オペレーション

    • サーバー オペレーションに対するクライアント要求を受信する AUTOSAR サーバー ポート

    • 各サーバー オペレーションに対して、クライアント要求を実行する AUTOSAR サーバー ランナブル

    AUTOSAR ディクショナリを開きます。モデルで AUTOSAR C-S インターフェイスを表示するには、[C-S Interfaces] ビューに移動します。モデル例には既にクライアント/サーバー インターフェイスが含まれています。

    C-S インターフェイスがまだモデルに存在しない場合は作成します。

    1. C-S インターフェイスのビューで [追加] ボタン をクリックします。このアクションによって [Add Interfaces] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスでは、新しい C-S インターフェイスに名前を付け、そのインターフェイスに関連付けるオペレーションの数を指定します。その他のパラメーターは既定値のままにします。[追加] をクリックします。C-S インターフェイスのビューに新しいインターフェイスが表示されます。

  6. [C-S Interfaces] の下で、C-S インターフェイスがクライアント要求を処理する AUTOSAR サーバー オペレーションを 1 つ以上作成します。各オペレーションはモデルの Simulink サーバー関数に対応します。

    [C-S Interfaces] を展開し、サーバー オペレーションを追加する個別の C-S インターフェイスを展開します (モデル例では、CsIf1 を展開します)。インターフェイスに対するオペレーションを表示するには、[Operations] を選択します。モデル例には既に doOverride および readData という名前の AUTOSAR サーバー オペレーションが含まれています。

    サーバー オペレーションがまだモデルに存在しない場合は作成します (C-S インターフェイスに Operation1 という名前のプレースホルダー オペレーションがある場合は、安全に削除できます)。

    1. オペレーションのビューで [追加] ボタン をクリックします。このアクションによって [Add Operation] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスで [Operation Name] を入力します。対応する Simulink サーバー関数の名前を指定します。

    3. 対応する Simulink サーバー関数に引数がある場合、その関数を [Simulink Function] リストから選択します。このアクションによって、AUTOSAR オペレーションの引数が Simulink サーバー関数の引数に基づいて自動的に作成されます。[OK] をクリックします。オペレーションとその引数がオペレーションのビューに表示されます。

  7. AUTOSAR サーバー オペレーションに対してリストされた引数を確認します。[Operations] を展開し、個別のオペレーション (たとえば、readData) を展開して [Arguments] を選択します。リストされている引数は Simulink サーバー関数のプロトタイプに対応しています。

  8. モデルの AUTOSAR サーバー ポートを表示するには、サーバー ポートのビューに移動します。[AtomicComponents] を展開し、構成中の個別のコンポーネントを展開して [ServerPorts] を選択します。モデル例には既に sPort という名前の AUTOSAR サーバー ポートが含まれています。

    サーバー ポートがまだモデルに存在しない場合は作成します。

    1. サーバー ポートのビューで [追加] ボタン をクリックします。このアクションによって [Add Ports] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスで、新しいサーバー ポートに名前を付け、サーバー オペレーションを設定した C-S インターフェイスを選択します。[追加] をクリックします。サーバー ポートのビューに新しいポートが表示されます。

  9. 各 AUTOSAR サーバー オペレーションに対して、クライアント要求を実行する AUTOSAR サーバー ランナブルを設定します。モデルの AUTOSAR ランナブルを表示するには、[Runnables] を選択します。モデル例には既に Runnable_readData という名前の readData のサーバー ランナブルが含まれています。

    モデルにまだ適切なサーバー ランナブルが存在しない場合は作成します。

    1. ランナブルのビューで [追加] ボタン をクリックします。このアクションによって新しいランナブルのテーブル エントリが追加されます。

    2. 新しいランナブルを選択し、その名前とシンボルを設定します。ランナブルで指定する [symbol] の名前は Simulink のサーバー関数名と一致しなければなりません(モデル例では、Runnable_readData[symbol] の名前は関数名の readData です)。

    3. サーバー ランナブルをトリガーするオペレーション起動イベントを作成します (モデル例では、サーバー ランナブル Runnable_readData のイベント event_readData を定義しています)。

      1. [Events] の下の [イベントの追加] をクリックします。新しいイベントを選択します。

      2. [イベント タイプ][OperationInvokedEvent] を選択します。

      3. [イベント名] を入力します。

      4. [Event Properties] の下で、サーバー関数用に以前作成したサーバー ポートおよび C-S オペレーションに対応する [トリガー] 値を選択します (モデル例では、Runnable_readData に対して選択された [トリガー] の値は sPort.readData であり、サーバー ポート sPort とオペレーション readData を組み合わせています)。[適用] をクリックします。

    この手順によりコンフィギュレーションの AUTOSAR ディクショナリ ビューでの AUTOSAR サーバーの構成は完了します。

  10. コンフィギュレーションのコード マッピング エディター ビューに切り替えて、Simulink サーバー関数を AUTOSAR サーバー ランナブルにマッピングします。

    1. コード マッピング エディターを開きます。[Functions] タブを選択します。

    2. Simulink サーバー関数を選択します。その関数を AUTOSAR ランナブルにマッピングするには、[Runnables] フィールドをクリックし、使用可能なサーバー ランナブルのリストから対応するランナブルを選択します。モデル例では、Simulink 関数 readData が AUTOSAR ランナブル Runnable_readData にマッピングされています。

  11. AUTOSAR コンポーネントの構成を検証するには、[検証] ボタン をクリックします。エラーが報告された場合、エラーを修正し、検証を再試行します。検証が成功するまで繰り返します。

  12. モデルの C コードと ARXML コードを生成します。

AUTOSAR サーバーを構成した後で、対応する AUTOSAR クライアント呼び出しをAUTOSAR クライアントの構成に記載されているように構成します。

AUTOSAR クライアントの構成

AUTOSAR サーバーの構成に記載されているように AUTOSAR サーバーを構成した後で、対応する AUTOSAR クライアント呼び出しを構成します。この例では、Function Caller ブロックを AUTOSAR クライアント呼び出しとして構成する方法について説明します。この例では、matlabroot/help/toolbox/autosar/examples/mControllerWithInterface_client.slx のファイルを使用します。

  1. AUTOSAR クライアントを作成および設定するモデルを開くか、モデル例 mControllerWithInterface_client.slx を開きます。

  2. Function Caller ブロックをモデルに追加します。モデル例は Runnable3_Subsystem 内にある readData という名前の Simulink Function ブロックを提供します。

  3. 対応する Simulink Function ブロックを呼び出すように Function Caller ブロックを構成します。ブロックをダブルクリックして開き、ブロック パラメーターを編集してサーバー関数のプロトタイプを指定します。

    モデル例では、readData Function Caller パラメーターがAUTOSAR サーバーの構成の AUTOSAR サーバー例で使用されているサーバー関数 readData の関数プロトタイプを指定しています。次にサーバー例の関数 readData を示します。

    Function Caller パラメーターには関数プロトタイプと引数仕様のフィールドが含まれています。プロトタイプ内の関数名は、対応するサーバー オペレーションに対して指定された [Operation Name] と一致していなければなりません。AUTOSAR サーバーの構成のオペレーション作成手順を参照してください。引数のタイプと次元もサーバー関数の引数と一致していなければなりません。

    メモ

    この時点で関数呼び出しのシミュレーションを実行する場合は、Function Caller ブロックを一般的なモデルまたは対応する Simulink Function ブロックをもつテスト ハーネスに配置しなければなりません。この例にはシミュレーションは必要ありません。

  4. 関数呼び出しが Simulink 内で完全に形成される場合は、AUTOSAR 用に構成されたモデル内で Function Caller ブロックをセットアップします。たとえば、現在のモデルを AUTOSAR 向けに構成するか、ブロックを AUTOSAR のモデルにコピーします。

    ヒント

    AUTOSAR コンポーネントをマッピングおよび設定する前にモデルで Function Caller ブロックを作成 (またはコピー) する場合、引数を手動で作成するのではなく、ソフトウェアによって AUTOSAR のオペレーション引数を事前設定するというオプションがあります。AUTOSAR クライアント ポートの完全な設定や Simulink 関数呼び出しの完全なマッピングと共に引数を作成するには、AUTOSAR コンポーネントのクイック スタートを使用して既定のコンポーネントを作成します。詳細については、Simulink での AUTOSAR ソフトウェア コンポーネントの作成を参照してください。

    モデル例は AUTOSAR モデルであり、Function Caller ブロックの readData がコピーされています。ブロックは入力端子、出力端子および信号線に接続され、関数の引数のデータ型や次元と一致しています。

    メモ

    AUTOSAR モデルの Function Caller ブロックを追加または変更するたびに、AUTOSAR コンフィギュレーションにおいて関数呼び出しの更新を行います。コード マッピング エディターを開きます。ダイアログ ボックスで [更新] ボタン をクリックします。このアクションによって、モデルで Simulink データ転送、関数呼び出し、数値型の読み込みや更新が行われます。更新が完了すると、追加した関数呼び出しがコード マッピング エディターの [Function Caller] タブに表示されます。

  5. 次に、AUTOSAR クライアントを構成するために必要な要素を一般的な作成順序で示します。

    • AUTOSAR クライアント/サーバー (C-S) インターフェイス

    • AUTOSAR サーバー モデルで定義した Simulink サーバー関数に一致する 1 つ以上の AUTOSAR オペレーション

    • C-S インターフェイスによって提供されたサーバー オペレーションに対するクライアント要求を受信するための AUTOSAR クライアント ポート

    AUTOSAR ディクショナリを開きます。モデルで AUTOSAR C-S インターフェイスを表示するには、[C-S Interfaces] ビューに移動します。モデル例には既に csInterface という名前のクライアント/サーバー インターフェイスが含まれています。

    C-S インターフェイスが AUTOSAR の構成内にまだ存在しない場合は作成します。

    1. C-S インターフェイスのビューで [追加] ボタン をクリックします。このアクションによって [Add Interfaces] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスでは、新しい C-S インターフェイスに名前を付け、そのインターフェイスに関連付けるオペレーションの数を指定します。その他のパラメーターは既定値のままにします。[追加] をクリックします。C-S インターフェイスのビューに新しいインターフェイスが表示されます。

  6. [C-S Interfaces] の下で、AUTOSAR サーバー モデルで定義した Simulink サーバー関数に一致する AUTOSAR オペレーションを 1 つ以上作成します。

    [C-S Interfaces] を展開し、AUTOSAR オペレーションを追加する個別の C-S インターフェイスを展開します (モデル例では、CsInterface を展開します)。インターフェイスに対するオペレーションを表示するには、[Operations] を選択します。モデル例には既に readData という名前の AUTOSAR オペレーションが含まれています。

    モデルにまだ AUTOSAR オペレーションが存在しない場合は作成します (C-S インターフェイスに Operation1 という名前のプレースホルダー オペレーションがある場合は、安全に削除できます)。

    1. オペレーションのビューで [追加] ボタン をクリックします。このアクションによって [Add Operation] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスで [Operation Name] を入力します。対応する Simulink サーバー関数の名前を指定します。クライアント モデルには Simulink サーバー関数のブロックは含まれないため、[Simulink 関数] の設定は [なし] のままにします。[OK] をクリックします。オペレーションのビューに新しいオペレーションが表示されます。

  7. AUTOSAR オペレーションの引数を追加します。

    1. [Operations] を展開し、個別のオペレーション (たとえば、readData) を展開して [Arguments] を選択します。

    2. 引数のビューで、各関数引数につき 1 回ずつ [追加] ボタン をクリックします。たとえば、引数 OpDataERR および NegCode をもつ readData の場合、[追加] ボタンを 4 回クリックします。クリックするたびに、新しい引数エントリが 1 つ作成されます。

    3. 各引数エントリを選択し、関数のプロトタイプと一致するように引数の [Name][Direction] を設定します。

  8. モデル内の AUTOSAR クライアント ポートを表示するには、クライアント ポートのビューに移動します。[AtomicComponents] を展開し、構成中の個別のコンポーネントを展開して [ClientPorts] を選択します。モデル例には既に cPort という名前の AUTOSAR クライアント ポートが含まれています。

    クライアント ポートがまだモデル内に存在しない場合は作成します。

    1. クライアント ポートのビューで [追加] ボタン をクリックします。このアクションによって [Add Ports] ダイアログ ボックスが開きます。

    2. このダイアログ ボックスで、新しいクライアント ポートに名前を付け、C-S インターフェイスを選択します。[追加] をクリックします。クライアント ポートのビューに新しいポートが表示されます。

    この手順によりコンフィギュレーションの AUTOSAR ディクショナリ ビューでの AUTOSAR クライアントの構成は完了します。

  9. コンフィギュレーションのコード マッピング エディター ビューに切り替え、Simulink 関数呼び出しを AUTOSAR クライアント ポートおよび C-S オペレーションにマッピングします。

    1. コード マッピング エディターを開きます。[Function Callers] タブを選択します。

    2. Simulink 関数呼び出しを選択します。[ClientPort] フィールドをクリックし、使用可能な AUTOSAR クライアント ポートのリストからポートを選択します。[Operation] フィールドをクリックし、使用可能な AUTOSAR C-S オペレーションのリストからオペレーションを選択します。このモデル例では、Simulink 関数呼び出し readData が AUTOSAR クライアント ポート cPort および C-S オペレーション readData にマッピングされています。

  10. AUTOSAR コンポーネントの構成を検証するには、[検証] ボタン をクリックします。エラーが報告された場合、エラーを修正し、検証を再試行します。検証が成功するまで繰り返します。

  11. モデルの C コードと ARXML コードを生成します。

AUTOSAR クライアント/サーバーのエラー処理の設定

AUTOSAR は、クライアント/サーバーのエラー処理に関するアプリケーション エラー ステータスのメカニズムを定義します。事前定義された、可能性のあるエラーと一致する値に対して、AUTOSAR サーバーはエラー ステータスを返します。AUTOSAR クライアントはエラー ステータスを受信し、それに応答します。クライアント/サーバーのエラー処理ガイドラインに従う AUTOSAR ソフトウェア コンポーネントは、Diagnostic Event Manager (DEM) などの AUTOSAR 基本ソフトウェアにエラー ステータスを提供する可能性があります。

Simulink では、以下のことができます。

  • クライアント/サーバーのエラー処理を実装する ARXML コードをインポートする。

  • クライアント/サーバー インターフェイスのエラー処理を設定する。

  • クライアント/サーバーのエラー処理のための C および ARXML コードを生成する。

クライアント/サーバーのエラー処理を実装する ARXML コードをインポートする場合、インポーターは対応するサーバー呼び出しポイント (Function Caller ブロック) の場所にエラー ステータス端子を作成します。

AUTOSAR のクライアント/サーバー エラー処理を Simulink で実装する方法は以下のとおりです。

  1. AUTOSAR サーバーが返す、可能性のあるエラー ステータスの値を Simulink のデータ型に定義します。1 つ以上のエラー コードを 0 ~ 63 (等値を含む) の範囲で定義します。基となるストレージのデータ型は符号なしの 8 ビット整数でなければなりません。データ スコープは Exported でなければなりません。たとえば、列挙型の appErrType を定義します。

    classdef(Enumeration) appErrType < uint8
    
       enumeration
          SUCCESS(0)
          ERROR(1)
          COMM_MODE_LIMITATION(2) 
          OVERFLOW(3)
          UNDERFLOW(4)
          VALUE_MOD3(5)
       end
    
       methods (Static = true)
          function descr = getDescription()
             descr = 'Definition of application error type.';
          end
    
          function hdrFile = getHeaderFile()
             hdrFile = '';
          end
    
          function retVal = addClassNameToEnumNames()
              retVal = false;
          end
          
          function dataScope = getDataScope()
              dataScope = 'Exported';
          end
       end
    
    end

    メモ

    モデル内の可能性のあるエラーを表すように定義した Simulink データ型は、ARXML コードにインポートおよびエクスポートされる AUTOSAR の可能性のあるエラーに直接影響しません。C-S インターフェイスまたは C-S オペレーションに関するエクスポートされた、可能性のあるエラーを変更するには、AUTOSAR プロパティ関数を使用します。このトピックでは例を提供します。

  2. AUTOSAR サーバーをモデル化する Simulink Function ブロックのエラー ステータス出力引数を定義します。エラー ステータスの引数を唯一の関数出力として設定するか、他の出力に追加します。たとえば、エラー ステータスの値を出力 err で返す Simulink Function ブロックがあります。

    この Simulink Function ブロックはエラー ステータスを返すアルゴリズムを実装します。

  3. モデル内でエラーの可能性のある値の型を参照します。エラー出力端子の Argument Outport ブロック パラメーターで、エラー ステータスのデータ型を指定します。この場合は、appErrType です。[端子の次元] を 1 に、[信号タイプ]real に設定します。

  4. クライアント/サーバー インターフェイスでエラー引数の AUTOSAR プロパティを設定します。AUTOSAR ディクショナリを開き、[C-S Interfaces] を展開し、AUTOSAR オペレーションの [Arguments] ビューに移動します。引数を追加するには、[追加] ボタン をクリックします。引数名を設定し、[Direction][Error] に設定します。

  5. AUTOSAR クライアントの呼び出しをモデル化する各 Function Caller ブロックで、エラー端子を作成します。たとえば、fcnWErr の呼び出しをモデル化する Function Caller ブロックがあります。

    この Function Caller ブロック パラメーターで、同じエラー ステータスのデータ型を指定します。

    手順 4 で示した AUTOSAR ディクショナリの [Arguments] ビューの情報と一致するように、エラー引数の AUTOSAR プロパティを設定します。

この関数に関して生成された C コードは、可能性のあるエラーを処理するためにモデル内で定義された、構成済みの関数シグネチャやロジックを反映しています。

appErrType fcnWErr(real_T x1, real_T x2)
{
  appErrType rty_err_0;
  if (...) == 0.0) {
    rty_err_0 = ...;
  } else {
    rty_err_0 = ...;
  }

  return rty_err_0;
}

さらに、この例で使用される列挙型クラス定義では、エラーの可能性のある型定義が含まれるヘッダー ファイル appErrType.h ビルドによって生成されます。

エクスポートされた ARXML コードにはエラーの可能性のある型定義が含まれており、それらを参照します。

<POSSIBLE-ERRORS>
   <APPLICATION-ERROR …>
      <SHORT-NAME>SUCCESS</SHORT-NAME>
      <ERROR-CODE>0</ERROR-CODE>
   </APPLICATION-ERROR>
   <APPLICATION-ERROR …>
      <SHORT-NAME>ERROR</SHORT-NAME>
      <ERROR-CODE>1</ERROR-CODE>
   </APPLICATION-ERROR>
   …
   <APPLICATION-ERROR …>
      <SHORT-NAME>UNDERFLOW</SHORT-NAME>
      <ERROR-CODE>4</ERROR-CODE>
   </APPLICATION-ERROR>
   <APPLICATION-ERROR …>
      <SHORT-NAME>VALUE_MOD3</SHORT-NAME>
      <ERROR-CODE>5</ERROR-CODE>
   </APPLICATION-ERROR>
</POSSIBLE-ERRORS>

AUTOSAR プロパティ関数を使用して、ARXML コードにエクスポートされた、可能性のあるエラーをプログラムによって変更したり、C-S オペレーション引数の [方向] プロパティを [エラー] に設定することができます。

次の例では、C-S インターフェイス (fcnWErr) の可能性のあるエラーに UNDERFLOW および VALUE_MOD3 を追加します。

>> arProps = autosar.api.getAUTOSARProperties(bdroot)
>> get(arProps,'fcnWErr','PossibleError')
ans = 
    'fcnWErr/SUCCESS'    'fcnWErr/ERROR'    'fcnWErr/COMM_MODE…'
    'fcnWErr/OVERFLOW'
>> get(arProps,'fcnWErr/OVERFLOW','errorCode')
ans =
           3
>> add(arProps,'fcnWErr','PossibleError','UNDERFLOW')
>> set(arProps,'fcnWErr/UNDERFLOW','errorCode',4)
>> add(arProps,'fcnWErr','PossibleError','VALUE_MOD3')
>> set(arProps,'fcnWErr/VALUE_MOD3','errorCode',5)
>> get(arProps,'fcnWErr','PossibleError')
ans = 
    'fcnWErr/SUCCESS'    'fcnWErr/ERROR'    'fcnWErr/COMM_MODE…'
    'fcnWErr/OVERFLOW'    'fcnWErr/UNDERFLOW'    'fcnWErr/VALUE_MOD3'

また、C-S オペレーションにおいて可能性のあるエラーにアクセスすることもできます。次の例では、C-S インターフェイス fcnWErr 上のオペレーション fcnWErr に関する可能性のあるエラーをリストします。

>> arProps = autosar.api.getAUTOSARProperties(bdroot)
>> get(arProps,'fcnWErr/fcnWErr','PossibleError')
ans = 
    'fcnWErr/SUCCESS'    'fcnWErr/ERROR'    'fcnWErr/COMM_MODE…' 
    'fcnWErr/OVERFLOW'

次の例では、C-S オペレーション引数 err の方向を Error に設定します。

>> arProps = autosar.api.getAUTOSARProperties(bdroot)
>> set(arProps,'fcnWErr/fcnWErr/err','Direction','Error')
>> get(arProps,'fcnWErr/fcnWErr/err','Direction')
ans =
    Error

AUTOSAR サーバー ランナブルの同時実行制約

以下のブロックおよびモデル化パターンは、AUTOSAR サーバー ランナブルの同時実行と互換性がありません。

  • Simulink 関数内の以下のブロック

    • Unit Delay などの状態をもつブロック。

    • Triggered SubsystemEnabled Subsystem などのゼロクロッシング ロジックをもつブロック。

    • Stateflow® チャート

    • その他の Simulink Function ブロック

    • インライン化されていないサブシステム

    • 副次的な影響をもつレガシの C の関数呼び出し

  • Simulink 関数内の次のモデル化パターン

    • データ ストア メモリ (インスタンスごとのメモリなど) への書き込み

    • グローバル ブロック信号への書き込み (静的メモリなど)

AUTOSAR サーバー ランナブルの同時実行制約を強制するには、ランナブルの canBeInvokedConcurrently プロパティを使用します。このプロパティは AUTOSAR ディクショナリの [Runnables] ビューにあります。

サーバー ランナブルの canBeInvokedConcurrentlytrue に設定されている場合は、サーバー ランナブルの同時実行と互換性のないブロックおよびモデル化パターンが AUTOSAR の検証によってチェックされます。Simulink 関数に互換性のないブロックまたはモデル化パターンが含まれている場合は、検証によってエラーが報告されます。canBeInvokedConcurrentlyfalse に設定されている場合は、サーバー ランナブルの同時実行と互換性のないブロックおよびモデル化パターンは検証によってチェックされません。

AUTOSAR サーバー ランナブル ([OperationInvokedEvent] をもつランナブル) に対してのみ、canBeInvokedConcurrentlytrue に設定できます。プロパティ canBeInvokedConcurrently はタイミング イベントなどの他のイベント トリガーをもつランナブルではサポートされていません。サーバー ランナブル以外で canBeInvokedConcurrentlytrue に設定した場合、AUTOSAR の検証は失敗します。

ランナブルの canBeInvokedConcurrently プロパティをプログラムによって設定するには、AUTOSAR プロパティ関数 set を使用します。次の例では、Runnable_readData という名前の AUTOSAR サーバー ランナブルについて、ランナブルの canBeInvokedConcurrently プロパティを true に設定します。

addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples'));
open_system('mControllerWithInterface_server')
arProps = autosar.api.getAUTOSARProperties('mControllerWithInterface_server');
SRPath = find(arProps,[],'Runnable','Name','Runnable_readData')
SRPath =
  1×1 cell array
    {'SWC_Controller/ControllerWithInterface_ar/Runnable_readData'}
invConc = get(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData',...
  'canBeInvokedConcurrently')
invConc =
  logical
   0
set(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData',...
  'canBeInvokedConcurrently',true)
invConc = get(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData',...
  'canBeInvokedConcurrently')
invConc =
  logical
   1

AUTOSAR サーバーおよびクライアントのプログラムによる構成とマッピング

AUTOSAR クライアント/サーバー インターフェイスの AUTOSAR プロパティをプログラムで設定するには、AUTOSAR プロパティ関数 setget などを使用します。

AUTOSAR のクライアントとサーバーについて、Simulink から AUTOSAR へのマッピング情報をプログラムによって設定するには、次の関数を使用します。

AUTOSAR のプロパティ関数と map 関数を使用するスクリプトの例については、AUTOSAR クライアント/サーバーインターフェイスの設定を参照してください。

参考

| | | |

関連する例

詳細