メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Simulink とターゲット ハードウェアの間のエクスターナル モードの接続性の設定

R2026a

エクスターナル モード シミュレーションについて、target 名前空間を使用して Simulink® とターゲット ハードウェアの間の接続性を指定できます。

次の図は、エクスターナル モード シミュレーションのコンポーネントの概要を示したものです。

target 名前空間は、コンポーネントの実装用のクラスを提供します。次の表に主なクラスを示します。

コンポーネントクラス目的
ターゲット ハードウェアtarget.BoardMATLAB® にターゲット ハードウェアの記述を提供します。
展開ツール target.SystemCommandExecutionTool

次の目的でクラスを使用できます。

  • 開発用コンピューターからターゲット アプリケーションを実行するためのシステム コマンドを取得する。

  • ターゲット アプリケーションの実行サービスの実装を記述する。

  • ターゲット アプリケーションの実行を管理するツール用の MATLAB サービス インターフェイスを提供する。

[カスタム ハードウェア上で実行] アプリの [監視と調整]、[展開]、[接続]、および [開始] の機能を提供するには、target.ExecutionTool を使用する必要があります。

target.ExecutionService
target.ExecutionTool
接続性 target.ExternalModeSimulink とターゲット ハードウェアの間のデータ転送用の通信プロトコルを提供します。
target.CommunicationInterfaceターゲット ハードウェアに通信チャネルと rtiostream API 実装の詳細を提供します。
target.TargetConnectionターゲット ハードウェアへの開発用コンピューターの接続に関する詳細を提供します。

XCP エクスターナル モード シミュレーションの接続性のカスタマイズ

ERT (ert.tlc) および GRT (grt.tlc) システム ターゲット ファイルを使用して生成されるコードについて、XCP 通信プロトコルを使用したエクスターナル モード シミュレーションを実行できます。

  • 開発用コンピューター上。

  • 他のターゲット ハードウェア上 (サポート パッケージを使用)。

カスタム ターゲット ハードウェアのシステム ターゲット ファイルが ERT または GRT システム ターゲット ファイルから派生している場合、target 名前空間のクラスを使用して接続性をカスタマイズします。たとえば target.ExternalMode や target.CommunicationInterface です。

この例では、XCP ベースのエクスターナル モード シミュレーションの接続性をカスタマイズする方法を示します。Simulink とターゲット ハードウェアの間の接続性を設定するには、次を行います。

  1. MATLAB にターゲット ハードウェアの記述を提供する target.Board オブジェクトを作成します。コード生成をサポートするために、オブジェクトをプロセッサに関連付けます。

    processor = target.get('Processor', 'Intel-x86-64 (Windows64)');
    board = target.create('Board', ...
                    'Name', 'Example Intel Board', ...
                    'Processors', processor);
  2. 次のいずれかのクラスを使用します。

    • target.ExecutionTool — [カスタム ハードウェア上で実行] アプリの [監視と調整]、[展開]、[接続]、および [開始] の機能に必要な getApplicationStatus メソッドを提供します。

    • target.SystemCommandExecutionTool — getApplicationStatus メソッドはこのクラスでは使用できません。[カスタム ハードウェア上で実行] アプリの [監視と調整]、[展開]、[接続]、および [開始] の機能は完全にはサポートされません。

    手順 3 と手順 4 では、ターゲット アプリケーションをターゲット ハードウェアにダウンロードできるツールが利用可能であることが前提となります。

  3. MyImplementationClass というクラスで MATLAB サービス インターフェイスを実装します。疑似コードの実装の例については、実行ツール テンプレートを参照してください。

    classdef MyImplementationClass < target.ExecutionTool
        properties (Access=private)
        …
        end
    
        methods
        …
        end
    
        methods (Access=private)          
        …
        end
    end

    ターゲット アプリケーションの実行に関する詳細を含む target.ExecutionService オブジェクトを作成します。このオブジェクトで、ターゲット アプリケーションをターゲット ハードウェアで実行するために必要なツールを記述します。

    matlabExecution = ...
                      target.create('ExecutionService', ...
                                    'Name', 'My Application Launcher');
    matlabExecution.APIImplementation = ...
                      target.create('APIImplementation', ...
                                    'Name', 'MyServiceImplementation');
    matlabExecution.APIImplementation.BuildDependencies = ...
                      target.create('MATLABDependencies');
    matlabExecution.APIImplementation.BuildDependencies.Classes = ...
                                    {'MyImplementationClass'};
    matlabExecution.APIImplementation.API = ...
                      target.get('API', 'ExecutionTool');

    target.ExecutionService オブジェクトを target.Board オブジェクトに関連付けます。

    board.Tools.ExecutionTools = matlabExecution;

  4. 開発用コンピューターからターゲット アプリケーションを実行するためのシステム コマンドを取得する target.SystemCommandExecutionTool オブジェクトを作成します。

    executionTool = target.create('SystemCommandExecutionTool', ...
                    'Name', 'My Execution Tool');            
    executionTool.StartCommand.String = 'customDownloadTool';
    executionTool.StartCommand.Arguments = {'$(EXE)'};

    target.SystemCommandExecutionTool オブジェクトを target.Board オブジェクトに関連付けます。

    board.Tools.ExecutionTools = executionTool;

  5. ターゲット ハードウェアに通信チャネルと rtiostream API 実装の詳細を提供する target.CommunicationInterface オブジェクトを作成します。

    rtiostream API について、BuildDependencies オブジェクトを使用して、ターゲット アプリケーションでコンパイルするソース ファイルを指定します。この例では、開発用コンピューターでエクスターナル モード シミュレーションを実行できる付属の TCP/IP rtiostream 実装ソース ファイルを使用します。ターゲット ハードウェアについては、独自の rtiostream 実装を提供します。

    buildDependencies = target.create('BuildDependencies', ...
                    'SourceFiles', ...
                    {fullfile('$(MATLAB_ROOT)', ...
                                  'toolbox', 'coder', ...
                                  'rtiostream', ...
                                  'src', ...
                                  'rtiostreamtcpip', ...
                                  'rtiostream_tcpip.c')});
    
    apiImplementation = target.create('APIImplementation', ...
                    'Name', 'TCP x86 RTIOStream Implementation', ...
                    'API', target.get('API', 'rtiostream'), ...
                    'BuildDependencies', buildDependencies);
    
    tcpComms = target.create('CommunicationInterface', ...
                    'Name', 'Windows TCP Interface', ...
                    'Channel', 'TCPChannel', ...
                    'APIImplementations', apiImplementation);
    TCP チャネルを指定するために、この例では名前と値の引数 'Channel', 'TCPChannel' を使用します。シリアル通信チャネルの場合は、名前と値の引数 'Channel', 'RS232Channel' を使用して指定できます。

    target.CommunicationInterface オブジェクトを target.Board オブジェクトに関連付けます。

    board.CommunicationInterfaces = tcpComms;

  6. Simulink とターゲット ハードウェアの間のデータ転送用の通信プロトコルを提供するオブジェクトを作成します。

    1. target.XCPPlatformAbstraction クラスを使用して、XCP プラットフォーム抽象化レイヤーのカスタム実装を利用します。このレイヤーで、静的なメモリ アロケーターとその他のプラットフォーム抽象化機能を提供します。

      xcpPlatformAbstraction = target.create('XCPPlatformAbstraction', ...
                      'Name', 'XCP Platform Abstraction');
      
      xcpPlatformAbstraction.BuildDependencies.Defines = {'XCP_CUSTOM_PLATFORM'};
      customPlatformAbstractionPath = 'pathToImplementationFolder';
      xcpPlatformAbstraction.BuildDependencies.SourceFiles = ...
                      {fullfile(customPlatformAbstractionPath, 'myXCPPlatform.c')};
      xcpPlatformAbstraction.BuildDependencies.IncludePaths = ...
                      {customPlatformAbstractionPath};
    2. target.XCPTCPIPTransport クラスを使用して、ASAM の仕様に従って通信メディアに対してメッセージを送受信する XCP トランスポート層を実装します。この例では、トランスポート プロトコルは TCP/IP です。シリアル トランスポートの場合は、target.XCPTCPIPTransport を target.XCPSerialTransport に置き換えます。

      xcpTransport = target.create('XCPTCPIPTransport', ...
                      'Name', 'XCP Transport');

    3. ターゲット ハードウェアの XCP プロトコル スタックを表す target.XCP オブジェクトを作成します。

      xcpConfiguration = target.create('XCP', ...
                      'Name', 'XCP Configuration', ...
                      'XCPTransport', xcpTransport, ...
                      'XCPPlatformAbstraction', xcpPlatformAbstraction);

    4. XCP プロトコル スタックで利用できる XCP エクスターナル モード接続性オプションを表すオブジェクトを作成します。

      extModeConnectivity = ... 
                   target.create('XCPExternalModeConnectivity', ...                
                   'Name', 'External Mode Connectivity', ...
                   'XCP', xcpConfiguration);

      メモ

      XCP スタックによってターゲット ハードウェア リソースの使用をより詳細に制御する場合は、XCP パラメーター MaxCTOSize、MaxDTOSize、および MaxODTEntrySizeDAQ の値を指定できます。以下に例を示します。

      extModeConnectivity.XCP.XCPTransport.MaxCTOSize = 16
      extModeConnectivity.XCP.XCPTransport.MaxDTOSize = 256
      extModeConnectivity.XCP.XCPTransport.MaxODTEntrySizeDAQ = 128

    5. エクスターナル モード プロトコル スタック オブジェクトを作成します。

      externalMode = target.create('ExternalMode', ...
                      'Name', 'External Mode', ...
                      'Connectivities', extModeConnectivity);

      メモ

      このオブジェクトは単一の target.create の呼び出しで作成できます。

      externalMode = target.create('ExternalMode', ...
              'Name', 'External Mode', ...
              'XCPTransportLayer', 'TCP', ...
              'Defines', {'XCP_CUSTOM_PLATFORM'}, ...
              'SourceFiles', {fullfile('pathToImplementationFolder', 'myXCPPlatform.c')}, ...
              'IncludePaths', {'pathToImplementationFolder'});
    6. オブジェクトをターゲット ハードウェアでサポートされる通信プロトコルのリストに追加します。

      board.CommunicationProtocolStacks = externalMode;
      

  7. Simulink とターゲット ハードウェアの間の接続を指定するオブジェクトを作成します。

    connection = target.create('TargetConnection', ...
                          'Name', 'Host Process Connection', ...
                          'Target', board, ...
                          'CommunicationType', 'TCPChannel', ...
                          'IPAddress', 'localhost', ... 
                          'Port', '17725')

  8. ボード オブジェクトと接続オブジェクトを内部データベースに追加し、すべての MATLAB セッションでオブジェクトを保持します。

    target.add(board, 'UserInstall', true);
    target.add(connection, 'UserInstall', true);

  9. Simulink エディターの [ハードウェア] タブで、[ボード] リストから [Example Intel Board] を選択します。

    または、コンフィギュレーション パラメーター HardwareBoard を使用できます。コマンド ウィンドウで次のように入力します。

    set_param(gcs,'HardwareBoard','Example Intel Board')

  10. [接続] リストから、TCP/IP アドレス localhost およびポート番号 17725 に対応する接続を選択します。

    または、モデル パラメーター HardwareConnection を使用できます。コマンド ウィンドウで次のように入力します。

    set_param(gcs,'HardwareConnection','TargetConnection-Host Process Connection')
    他の場所で定義された接続について、この表は HardwareConnection に指定できる引数の値を示します。

    定義場所指定
    [MEX ファイルの引数] フィールドTargetConnection-External Mode Connection
    [AUTOSAR コード生成オプション] ペインTargetConnection-Adaptive AUTOSAR Connection
    Linux ランタイム マネージャーの [ターゲットの構成] セクションの [名前] フィールドTargetConnection-Linux Runtime Manager Connection for targetName。ここで targetName は [名前] フィールドの値

TCP/IP またはシリアルのエクスターナル モード シミュレーションの接続性のカスタマイズ

TCP/IP またはシリアルのエクスターナル モード シミュレーションについて、次のワークフローを通じて接続性をカスタマイズできます。

  • トランスポート プロトコルと通信プロトコルを実装する。

  • target 名前空間を使用してターゲット アプリケーションの実行ツールを指定する。

Simulink とターゲット ハードウェアの間の接続性の設定にはXCP エクスターナル モード シミュレーションの接続性のカスタマイズで説明したワークフローを使用しますが、次の点が異なります。

実行ツール テンプレート

この節では、target.ExecutionTool サービス インターフェイスの疑似コードの例を示します。このツールは、ターゲット ハードウェアでアプリケーションを開始して追跡します。

classdef MyExecutionTool < target.ExecutionTool

  methods        
    function errFlag = startApplication(this)
      % Call "customDownloadTool" to download the application.
      [status, result] = ...
       system(sprintf('customDownloadTool %s', this.Application));
      if status == 0
        errFlag = false;                
      else
        disp(result);
        errFlag = true;
      end
    end

    function errFlag = stopApplication(~)
      % Add code here to stop the application, if possible.
      errFlag = false;
    end

    function [status, errFlag] = getApplicationStatus(~)
      % Add code here to return the application status, if known.
      status = target.ApplicationStatus.Unknown;
      errFlag = false;
    end
  end
end

参考

トピック

外部の Web サイト