Время - и равноотстоящая от значения регистрация данных

Этот пример показывает, как отбыть срок и равноотстоящая от значения регистрация данных с Simulink® Real-Time™. После того, как скрипт создает и загружает модель осциллятора, xpcosc, к целевому компьютеру, это запускает приложение и данные логов в течение 0,2 секунд. Опция, чтобы регистрировать состояния выключена для этого примера.

В конце первого показа, время и выходные журналы (tg. TimeLog и tg. OutputLog), получены и построены на компьютере разработчика. Первоначально режим журналирования является равноотстоящим от времени, и каждая выборка регистрируется. Впоследствии, режим журналирования установлен в равноотстоящий от значения со значениями между 0,02 и 0.2 на шагах 0,02. Если переменная PARAM установлена в 1, усиление затухания 'Gain1/Gain' случайным образом выбрано и установлено в новое значение прежде, чем запустить каждое выполнение. В противном случае 'Gain1/Gain' считается постоянный.

Примечание: Для случая со случайной установкой усиления, результаты могут казаться неправильными из-за совместного воздействия изменения и усиление и равноотстоящий от значения параметр журналирования.

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

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

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

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

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

Определите, Открыт ли xpcosc

systems = find_system('type', 'block_diagram');
if all(~strcmp('xpcosc', systems))
  mdlOpen = 0;
  open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpcosc'));
else
  mdlOpen = 1;
end
if (mdlOpen), stateOption = get_param('xpcosc', 'SaveState'); end

Состояние поворота, выходящее из системы для этого примера.

set_param('xpcosc', 'SaveState', 'off');

Создайте модель и загрузите изображение, 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

Закройтесь или модель сброса

Закройте модель, если мы открыли ее или сбросили состояние, если это было уже открыто.

if (mdlOpen)
  set_param('xpcosc', 'SaveState', stateOption);
else
  bdclose('xpcosc');
end

Запустите модель, равноотстоящий от Установки значений параметр журналирования, постройте записанные данные

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

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

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

  • Установите время остановки на 0,2 с

  • Равноотстоящее от времени журналирование

tg = slrt;
tg.SampleTime = 0.000250;
tg.StopTime   = 0.2;
tg.LogMode = 'normal';
  • Запустите образцовое выполнение

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

start(tg);
tPar = getparamid(tg, 'Gain1','Gain');

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

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

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

figh = findobj('Name', 'dataloggingdemo');
if isempty(figh)
  figh = figure;
  set(figh, 'Name', 'dataloggingdemo', 'NumberTitle', 'off');
else
  figure(figh);
end

Ожидайте, пока выполнение не завершено.

while strcmp(tg.Status, 'running')
  pause(0.05);
end

Получите записанные данные и постройте его.

tm = tg.TimeLog;
op = tg.OutputLog;
plot(tm, op);
set(gca, 'XLim', [tm(1), tm(end)], 'YLim', [-10, 10]);
title(['Time equidistant logging, ' num2str(length(tm)) ' samples']);
drawnow;
PARAM = 1; flag = 0;

Цикл по равноотстоящему журналированию

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

  • Установите равноотстоящий от значения параметр журналирования на n.

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

  • Ожидайте, пока приложение не завершено.

  • Получите записанные данные и постройте его.

for vep = 0.02 : 0.02 : 0.2
  if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end
  if PARAM == 1
    setparam(tg, tPar, 2*1000*rand);
  end
  set(tg, 'LogMode', vep);
  start(tg);
  while strcmp(tg.Status, 'running')
    pause(0.05);
  end
  tm = tg.TimeLog;
  op = tg.OutputLog;
  plot(tm, op);
  set(gca, 'XLim', [tm(1), tm(end)], 'YLim', [-10, 10]);
  title(['Value equidistant logging (' num2str(vep) '): ' ...
       num2str(length(tm)) ' samples']);
  drawnow;
end

Остановите приложение

Когда сделано, мешайте приложению запуститься.

if ~flag, title('dataloggingdemo: finished'); end
stop(tg);