Пред - и постинициирование осциллографа хоста

Этот пример показывает пред - и постинициирование инициированного сигналом осциллографа хоста Simulink® Real-Time™. После того, как скрипт создает и загружает модель осциллятора, xpcosc, к целевому компьютеру, это добавляет осциллограф типа 'хост' приложения реального времени и сигналов 'Integrator1' и 'Генератор Сигнала' к осциллографу. Осциллограф затем сконфигурирован, чтобы включить 'Генератор Сигнала сигнала', когда это достигает 0.0 на возрастающем наклоне (значение сигналов переходит отрицательное к положительному). Предварительное инициирование установлено в 12 выборок, означая, что эти 12 выборок, собранных до триггера, также хранятся в векторе данных осциллографа хоста.

Если триггерное условие соблюдают, осциллограф проверен, чтобы определить, когда его сбор данных завершен. Затем, данные об осциллографе загружены на компьютер разработчика и отображены на графике. Этот процесс повторяется 25 раз. После каждого пятого выполнения усиление затухания 'Gain1/Gain' установлено в новое случайное значение (между 0 и 2000) и переключатели осциллографа между 12 демонстрационными предварительными триггерами и режимом постзапуска.

Объяснение для выбора 12 выборок: образцовый шаг расчета составляет 250 мкс. Поскольку фактор десятикратного уменьшения для осциллографа установлен в 4, различие между двумя полученными выборками составляет 1 мс. Блок 'Signal Generator' выводит прямоугольную волну на уровне 20 герц (50 мс на волну). Поэтому приобретение будет переключено на 12 мс (приблизительно 1/4 прямоугольной волны) каждый раз, когда осциллограф обновляется.

Проверяйте связь между разработкой и целевыми компьютерами

Используйте 'slrtpingtarget', чтобы протестировать связь между разработкой и целевыми компьютерами.

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

Открытый, сборка и модель загрузки к целевому компьютеру

Откройте модель осциллятора, xpcosc. При настройках опций Simulink Real-Time параметра конфигурации модели системный конечный файл был установлен в slrt.tlc. Следовательно, создавание модели создаст исполняемое изображение, xpcosc.mldatx, который может быть запущен на компьютере, загруженном с Ядром Simulink Real-Time.

open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpcosc'));

Создайте модель и загрузите изображение, xpcosc.mldatx, к целевому компьютеру.

  • Сконфигурируйте для немногословной сборки.

  • Сборка и приложение загрузки.

set_param('xpcosc','RTWVerbose','off');
rtwbuild('xpcosc');
### Starting Simulink Real-Time build procedure for model: xpcosc
### Generated code for 'xpcosc' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: xpcosc
### Created MLDATX ..\xpcosc.mldatx
### Looking for target: TargetPC1
### Download model onto target: TargetPC1

Запустите модель, Рандомизируйте Параметр 'Усиления', Отобразите Данные об Осциллографе Хоста на графике

Этот код выполняет много задач.

Задача 1: создайте целевой объект

Создайте переменную MATLAB®, tg, содержа целевой объект Simulink Real-Time. Этот объект содержит информацию, запрошенную, чтобы связаться с и управлять целевым компьютером.

  • Создайте целевой объект Simulink Real-Time

  • Установите шаг расчета на 250us

  • Установите время остановки на высокое значение (10 000 с)

  • Запустите образцовое выполнение

Задача 2: Создайте, сконфигурируйте, и график к осциллографу хоста во время каждого выполнения.

  • Получите индекс параметра 'Gain1/Gain'

  • Получите индекс сигнала 'Integrator1'

  • Получите индекс 'Генератора Сигнала сигнала'

  • Задайте (добавляет) объект scope хоста

  • Добавьте сигналы сигнализировать о списке объекта scope

  • Определите номер выборок

  • Установите фактор десятикратного уменьшения

  • Установите триггерный режим

  • Установите триггерный сигнал 'Сигнализировать о Генераторе'

  • Установите пороговый уровень

  • Установите триггерный наклон

  • Установите предварительное инициирование на 12 выборок

Задача 3: проверяйте на фигуру графика

Фигура графика существует?

  • Если не, создайте фигуру

  • Если да, сделайте его текущей фигурой

Задача 4: Цикл, чтобы получить 25 блоков данных от объекта scope.

  • Измените параметр Gain1/Gain каждый пятый цикл приобретения к случайному значению между 0 и 2000.

  • Переключитесь между пред - и постинициирование

  • Запустите объект scope

Задача 5: Ожидайте, пока объект scope не 'закончил' состояние.

  • Создайте временной вектор, загрузите данные об осциллографе и отобразите его.

  • Загрузите временной вектор

  • Загрузите полученные данные и график

tg = SimulinkRealTime.target; % create target object
tg.SampleTime = 0.000250;
tg.StopTime   = 10000;
start(tg);
tPar = getparamid(tg, 'Gain1', 'Gain'); % get indexes
signals(1) = getsignalid(tg, 'Integrator1');
signals(2) = getsignalid(tg, 'Signal Generator');
sc = addscope(tg, 'host'); % define scope object
addsignal(sc, signals);
sc.NumSamples  = 200;
sc.Decimation  = 4;
sc.TriggerMode   = 'Signal';
sc.TriggerSignal = signals(2);
sc.TriggerLevel  = 0.0;
sc.TriggerSlope  = 'rising';
sc.NumPrePostSamples = -12;
figh = findobj('Name', 'scprepostdemo'); % check for plot figure
if isempty(figh)
  figh = figure;
  set(figh, 'Name', 'scprepostdemo', 'NumberTitle', 'off');
else
  figure(figh);
end
m = 1; flag = 0; % loop to acquire data packages
for n = 1 : 25
  if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end
  if ~m
    setparam(tg, tPar, 2*1000*rand);
    sc.NumPrePostSamples = -sc.NumPrePostSamples;
  end
  m = rem(m + 1, 5);
  start(sc);
while ~strcmpi(sc.Status,'finished'), end; % wait for scope finished
  t = sc.Time;
  plot(t, sc.Data);
  if (sc.NumPrePostSamples < 0)
    textString = '(Pre-Triggered)';
  else
    textString = '(Post-Triggered)';
  end
  title(['scprepostdemo: ', num2str(n), ' of 25 data packages ' textString]);
  set(gca,'XLim',[t(1), t(end)], 'YLim', [-10, 10]);
  drawnow;
end
if ~flag, title('scprepostdemo: finished'); end

Остановите и закройте модель

Когда сделано, остановите приложение и закройте модель.

Остановите модель модели Close

stop(tg);
close_system('xpcosc',0);