Этот пример показывает, как отбыть срок и равноотстоящая от значения регистрация данных с 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.
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);