%% Link Generated Code to Requirements
% Link generated code to model 
% element requirements.  Using configuration parameters, you can specify whether 
% to include requirement descriptions as comments in the generated code.

%% Open Model
% Open the <matlab:rtwdemo_requirements |rtwdemo_requirements|> model.  
% The model contains Simulink(R) and 
% Stateflow(R) elements with associated requirements. 

model='rtwdemo_requirements';
open_system(model);
%% View Requirements
% You can view requirements linked to the model by using the Requirements 
% Editor. In the Simulink Editor, open the *Requirements Manager* app. 
% On the *Requirements* tab, click *Requirements Editor*. You can view 
% requirements specific to model objects by using the object context menu. 
% Right-click an element and select *Requirements* > *Open Outgoing Links dialog*.
% To view the requirements, use these commands:
%
% 1. To view the requirements for the |DiscretePulseGenerator| block,
% right-click the |DiscretePulseGenerator| block and select *Requirements* > *Open Outgoing Links dialog* 
% to open Outgoing Links Editor. Using Outgoing Links Editor, you can
% create, edit, and delete requirements traceability links.
clockblock='rtwdemo_requirements/clock';        
clockblockh=get_param(clockblock,'handle');  
rmi('edit',clockblockh);       
%%
% 2. To view the requirements, open the *Signal Builder* block by double-clicking it.
%   
sigbblock='rtwdemo_requirements/Signal Builder';                                              
open_system(sigbblock)
%%
% 3. To view the requirements for the Stateflow(R) state, open the Outgoing Links Editor. 
state=find(sfroot,'-isa','Stateflow.State','-and','Tag','req_state');                                                
rmi('edit',state.id); 

%%
% 4. To view the requirements for the Stateflow transition, open the Outgoing Links Editor. 
trans=find(sfroot,'-isa','Stateflow.Transition','-and','Tag','req_trans');                                                      
rmi('edit',trans.id);
%%
% 5. To view the requirements for the Stateflow function, open the Outgoing Links Editor. 
func=find(sfroot,'-isa','Stateflow.Function','-and','Tag','req_function');                                                     
rmi('edit',func.id); 

%% 
% Close the open windows.
close_system(sigbblock);
%% Set Configuration Parameters
% 
% Open the Configuration Parameters dialog box *Code Generation > Comments*
% pane. View the configuration parameter settings.
model = bdroot;
configSet = getActiveConfigSet(model);
openDialog(configSet);

%% Generate Code
% 
% Generate code for the model.
rtwbuild('rtwdemo_requirements')
%%
% In the generated code, view the comments containing the requirements.
% To view all the requirements, click the hyperlinked requirement comment.
rtwdemodbtype('rtwdemo_requirements_ert_rtw/rtwdemo_requirements.c',...
    '/* Function for Chart:','return result;',1,0);

%% Close Model

rtwdemoclean;
close_system('rtwdemo_requirements',0);


%% 
% Copyright 2019 The MathWorks, Inc.