Этот пример показывает, как сделать настройку параметра в реальном времени и регистрацию данных с Simulink® Real-Time™. После того, как скрипт создает и загружает модель осциллятора, xpcosc, к целевому компьютеру, это делает несколько выполнений с усилением 'Gain1/Gain' измененный (настроенный) перед каждым выполнением. Усиление развертывается от 0,1 до 0,7 на шагах 0,05. Индекс параметра 'Gain1/Gain' получен из целевого объекта Simulink Real-Time с помощью функционального GETPARAMID.
Возможности регистрации данных Simulink Real-Time используются, чтобы получить сигналы интереса во время каждого выполнения. Регистрируемые сигналы загружены на компьютер разработчика и построены. Наконец, 3-D график осциллятора вывод по сравнению со временем по сравнению с усилением отображен.
Используйте '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 Warning: This model contains blocks that do not handle sample time changes at runtime. To avoid incorrect results, only change the sample time in the original model, then rebuild the model. ### 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.
Установите время остановки на 0,2 с.
Задача 2: запустите модель и постройте результаты
Запустите модель, развертывающуюся через и изменяющую усиление (ослабляющий параметр) перед каждым выполнением. Постройте результаты, когда вы идете.
Получите индекс параметра 'Gain1/Gain'
Фигура графика существует?
Если не, создайте фигуру
Если да, сделайте его текущей фигурой
Задача 3: Цикл по затуханию фактора z
Установите фактор затухания (Gain1/Gain)
Запустите образцовое выполнение
Загрузка вывод и хранилище в матрице
Загрузите временной вектор
Отобразите данные на графике для текущего выполнения
Задача 4: создайте 3-D график (Осциллятор Вывод по сравнению со временем по сравнению с усилением)
Создайте график осциллятора вывод по сравнению со временем по сравнению с усилением.
Создайте 3-D график
tg = slrt; % create target object tg.SampleTime = 0.000250; tg.StopTime = 0.2; tPar = getparamid(tg, 'Gain1', 'Gain'); % run the model figh = findobj('Name', 'parsweepdemo'); if isempty(figh) figh = figure; set(figh, 'Name', 'parsweepdemo', 'NumberTitle', 'off'); else figure(figh); end y = []; flag = 0; % loop over damping factor for z = 0.1 : 0.05 : 0.7 if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end setparam(tg,tPar,2 * 1000 * z); start(tg); pause(2*tg.StopTime); outp = tg.OutputLog; y = [y, outp(:, 1)]; t = tg.TimeLog; plot(t, outp(:, 1)); set(gca, 'XLim', [t(1), t(end)], 'YLim', [-10, 10]); title(['parsweepdemo: Damping Gain = ', num2str(z)]); xlabel('Time'); ylabel('Output'); drawnow; end if ~flag % create 3-D plot delete(gca); surf(t(1 : 200), 0.1 : 0.05 : 0.7, y(1 : 200, :)'); colormap cool shading interp h = light; set(h, 'Position', [0.0125, 0.6, 10], 'Style', 'local'); lighting gouraud title('parsweepdemo: finished'); xlabel('Time'); ylabel('Damping Gain'); zlabel('Output'); end
Когда сделано, близко модель.
close_system('xpcosc',0);