Documentation Center

  • Trial Software
  • Product Updates

Contents

Signal Tracing Using Software Triggering

This example shows how to trace a signal using a software triggered Simulink® Real-Time™ host scope. After the script builds and downloads the oscillator model, xpcosc, to the target computer, it adds a scope of type 'host' to the target application and the signals 'Integrator1' and 'Signal Generator' to the scope. The scope is then configured in the software trigger mode.

Once the trigger is initiated, the scope is monitored to determine when its data acquisition is complete. Next, the scope data is uploaded to the host computer and plotted. This process repeats 25 times. The software trigger is re-enabled each run after a random pause (between 0 and 4 seconds). After every fifth run, the damping gain 'Gain1/Gain' is set to a new random value (between 0 and 2000).

Check Connection Between Host and Target Computer

Use 'slrtpingtarget' to test for a host-target connection.

if ~strcmp(slrtpingtarget, 'success')
  error(message('xPCTarget:examples:Connection'));
end

Open, Build, and Download Model to the Target Computer

Open the oscillator model, xpcosc. Under the model's configuration parameter Simulink Real-Time option settings, the system target file has been set to slrt.tlc. Hence, building the model will create an executable image, xpcosc.dlm, that can be run on a PC booted with the Simulink Real-Time kernel.

open_system('xpcosc');

Build the model and download the image, xpcosc.dlm, to the target computer.

set_param('xpcosc','RTWVerbose','off'); % Configure for a non-Verbose build.
rtwbuild('xpcosc');                     % Build and download application.
### Starting Simulink Real-Time build procedure for model: xpcosc
### Successful completion of build procedure for model: xpcosc
### Looking for target: TargetPC
### Download model onto target: TargetPC

Run Model, Randomize 'Gain' Parameter, Plot Host Scope Data

Create the MATLAB® variable, tg, containing the Simulink Real-Time target object. This object allows you to communicate with and control the target computer.

tg = slrt;                              % Create a Simulink Real-Time target object
tg.SampleTime = 0.000250;               % Set sample time to 250us
tg.StopTime   = 10000;                  % Set stop time to a high value (10000s)
start(tg);                              % Start model execution

Create, configure, and plot to the host scope during each run.

tPar = getparamid(tg, 'Gain1', 'Gain');             % Get index of parameter 'Gain1/Gain'
signals(1) = getsignalid(tg, 'Integrator1');        % Get index of signal 'Integrator1'
signals(2) = getsignalid(tg, 'Signal Generator');   % Get index of signal 'Signal Generator'

sc = addscope(tg, 'host');              % Define (add) a host scope object
addsignal(sc, signals);                 % Add signals to signal list of scope object

sc.NumSamples  = 200;                   % Set number of samples
sc.Decimation  = 4;                     % Set decimation factor
sc.TriggerMode ='Software';             % Set trigger mode

figh = findobj('Name', 'scsoftwaredemo');% Does the plot figure exist?
if isempty(figh)
  figh = figure;                        % No: Create figure
  set(figh, 'Name', 'scsoftwaredemo', 'NumberTitle', 'off');
else
  figure(figh);                         % Yes: Make it the current figure
end

% Loop to acquire 25 data packages from the scope object.
m = 1; flag = 0;
for n = 1 : 25
  if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end
  % Change parameter Gain1/Gain every fifth acquisition loop
  % to a random value between 0 and 2000.
  if ~m
    setparam(tg, tPar, 2*1000*rand);
  end
  m = rem(m + 1, 5);

  start(sc);                            % Start scope object

  % Wait until scope object has 'ready' state.
  while ~strcmp(sc.Status, 'Ready for being Triggered'), end

  % Randomize the amount of wait time before triggering scope.
  % Wait a random period (0..4s).
  ttrigger = rand * 4;
  title(['scsoftwaredemo: ', num2str(n), ...
         ' of 25 data packages, will be triggered in ', ...
         num2str(ttrigger), 's']);
  pause(ttrigger);
  if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end

  % Software trigger the scope object.
  trigger(sc);

  % Wait until scope-object has 'finished' state.
  while ~strcmpi(sc.Status,'finished');
  end

  % Create time vector, upload scope data and display it.
  t = sc.Time;                          % Upload time vector
  plot(t, sc.Data);                     % Upload acquired data and plot
  set(gca, 'XLim', [t(1), t(end)], 'YLim', [-10, 10]);
  drawnow;
end
if ~flag, title('scsoftwaredemo: finished'); end

Stop and Close Model

When done, stop the application and close the model.

stop(tg);                               % Stop model
close_system('xpcosc',0);               % Close model
Was this topic helpful?