www.gusucode.com > ecoder 案例源码程序 matlab代码 > ecoder/PILCustomTargetExample.m

    %% Configure Processor-In-The-Loop (PIL) for a Custom Target
% Create a target connectivity configuration by
% using target connectivity APIs. With a target connectivity
% configuration, you can run PIL simulations on custom embedded hardware.
%
% You learn how to:
%
% * Adapt the build process to support PIL.
% * Configure a tool for downloading and starting execution of a PIL
%   executable on your target hardware.
% * Configure a communication channel between host and target to support
%   PIL simulation on the target.
%
% Start with a model configured for software-in-the-loop (SIL) simulation.
% This example guides you through the process of creating a target
% connectivity configuration so that you can simulate the model in
% PIL mode. The example runs entirely on your host machine. You can follow
% the same steps to create a connectivity configuration for your own
% embedded target hardware.
%
% This example requires Embedded Coder(R).
% 
% See also <docid:ecoder_examples.example-rtwdemo_sil_pil_script> and 
% <docid:ecoder_examples.bu5jike-1>.

%   Copyright 2008-2013 The MathWorks, Inc.

%% Preliminaries
% Later in this example, you will add a folder to the search path. Create
% the folder path.
sl_customization_path = fullfile(matlabroot,...
    'toolbox',...
    'rtw',...
    'rtwdemos',...
    'pil_demo');
%%
% If this folder is already on the search path, remove it.
if strfind(path,sl_customization_path)
    rmpath(sl_customization_path)
end
%%
% Reset customizations.
sl_refresh_customizations
%%
% Create a temporary folder (in your system's temporary folder) for the
% build and inspection process.
currentDir = pwd;
rtwdemodir();
%% Test Generated Code with SIL Simulation
% Simulate a model configured for SIL. Verify the generated code compiled
% for your host platform by comparing the SIL simulation behavior
% with the normal simulation behavior.
%
% Make sure that the example model is newly opened.
close_system('rtwdemo_sil_modelblock',0);
close_system('rtwdemo_sil_counter',0)
open_system('rtwdemo_sil_modelblock')
%%
% The CounterA Model block displays the text (SIL), which indicates that   
% its referenced model is configured for SIL simulation.
%
% Run a simulation of the system.
set_param('rtwdemo_sil_modelblock','StopTime','10');
sim('rtwdemo_sil_modelblock');

%% Target Connectivity Configuration
% Start work on a target connectivity configuration for PIL.
%
% Make a local copy of the target connectivity configuration classes.
src_dir = ...
    fullfile(matlabroot,'toolbox','coder','simulinkcoder','+coder','+mypil');
if exist(fullfile('.','+mypil'),'dir')
    rmdir('+mypil','s')
end
mkdir +mypil
copyfile(fullfile(src_dir,'Launcher.m'), '+mypil');
copyfile(fullfile(src_dir,'TargetApplicationFramework.m'), '+mypil');
copyfile(fullfile(src_dir,'ConnectivityConfig.m'), '+mypil');
%%
% Make the copied files writable.
fileattrib(fullfile('+mypil', '*'),'+w');
%%
% Update the package name to reflect the new location of the files.
coder.mypil.Utils.UpdateClassName(...
    './+mypil/ConnectivityConfig.m',...
    'coder.mypil',...
    'mypil');
%%
% Verify that you now have a folder +mypil in the current folder, which has
% the files Launcher.m, TargetApplicationFramework.m, and 
% ConnectivityConfig.m.
dir './+mypil'
%% Review Code to Launch the PIL Executable
% The class that configures a tool for launching the PIL executable is
% mypil.Launcher. Open this class in the editor.
edit(which('mypil.Launcher'))
%%
% Review the content of this file. The method setArgString supplies 
% additional command-line parameters to the executable. These
% parameters can include a TCP/IP port number. For an embedded processor
% implementation, you can choose to hard-code these settings.
%% Configure the Overall Target Connectivity Configuration
% View the class mypil.ConnectivityConfig.
edit(which('mypil.ConnectivityConfig'))
%%
% Review the content of this file. You should be able to identify:
%
% * The creation of an instance of rtw.connectivity.RtIOStreamHostCommunicator
%   that configures the host side of the TCP/IP communications channel.
% * A call to the setArgString method of Launcher that configures
%   the target side of the TCP/IP communications channel.
% * A call to setTimer that configures a timer for execution time measurement
%
% To define your own target-specific timer for execution time profiling,
% you must use the Code Replacement Library to specify a replacement for
% the function code_profile_read_timer. Use a command-line API or 
% the crtool user interface.
%% Review the Target-Side Communications Drivers
% View the file rtiostream_tcpip.c.
rtiostreamtcpip_dir=fullfile(matlabroot,'rtw','c','src','rtiostream',...
    'rtiostreamtcpip');
edit(fullfile(rtiostreamtcpip_dir,'rtiostream_tcpip.c'))
%%
% Scroll down to the end of this file. See that this file contains a TCP/IP
% implementation of the functions rtIOStreamOpen rtIOStreamSend, and
% rtIOStreamRecv. These functions are required for the target platform to
% communicate with the host machine. You must provide an implementation for 
% each of these functions that is specific to your target hardware and 
% communication channel.
%% Add Target-Side Communications Drivers to the Connectivity Configuration
% The class that configures additional files to include in the build is
% mypil.TargetApplicationFramework. Open this class in the editor.
edit(which('mypil.TargetApplicationFramework'))
%% Use sl_customization to Register the Target Connectivity Configuration
% To use the new target connectivity configuration, you must provide an
% sl_customization file. The sl_customization file registers your new target
% connectivity configuration and specifies the required conditions for its 
% use. The conditions specified in this file can include the name of your 
% system target file and your hardware implementation settings.
%
% You can view the sl_customization file. For this example, you do not have
% to make changes to the file.
edit(fullfile(sl_customization_path,'sl_customization.m'))
%%
% Add the sl_customization folder to the search path and refresh the
% customizations.
addpath(sl_customization_path);
sl_refresh_customizations;
%% Test Generated Code with PIL Simulation
% Run the PIL simulation.
close_system('rtwdemo_sil_modelblock',0)
open_system('rtwdemo_sil_modelblock')
set_param('rtwdemo_sil_modelblock/CounterA','SimulationMode','processor-in-the-loop (pil)');
set_param('rtwdemo_sil_modelblock','StopTime','10');
sim('rtwdemo_sil_modelblock');
%%
% Review the preceding messages. Confirm that the simulation ran without 
% errors. You have now implemented a target connectivity configuration
% for PIL. You can use the same APIs to implement a connectivity configuration
% for your own combination of embedded processor, download tool, and
% communications channel.
%% Cleanup
% Remove the search path for this example.
rmpath(sl_customization_path)
%%
% Reset customizations.
sl_refresh_customizations
%%
% Close the models.
close_system('rtwdemo_sil_modelblock',0)
close_system('rtwdemo_sil_counter',0)

rtwdemoclean;
cd(currentDir)