Этот пример показывает, как проследить сигнал с помощью инициированного осциллографа хоста Simulink® Real-Time™ программного обеспечения. После того, как скрипт создает и загружает модель осциллятора, xpcosc, к целевому компьютеру, это добавляет осциллограф типа 'хост' приложения реального времени и сигналов 'Integrator1' и 'Генератор Сигнала' к осциллографу. Осциллограф затем сконфигурирован в триггерном режиме программного обеспечения.
Если триггер инициируется, осциллограф проверен, чтобы определить, когда его сбор данных завершен. Затем, данные об осциллографе загружены на компьютер разработчика и отображены на графике. Этот процесс повторяется 25 раз. Триггеру программного обеспечения повторно включают, каждый выполняется после случайной паузы (между 0 и 4 секундами). После каждого пятого выполнения усиление затухания 'Gain1/Gain' установлено в новое случайное значение (между 0 и 2000).
Используйте '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
Определите номер выборок
Установите фактор десятикратного уменьшения
Установите триггерный режим
Задача 3: проверяйте на фигуру графика
Фигура графика существует?
Если не, создайте фигуру
Если да, сделайте его текущей фигурой
Задача 4: Цикл, чтобы получить 25 блоков данных от объекта scope.
Измените параметр Gain1/Gain каждый пятый цикл приобретения к случайному значению между 0 и 2000.
Задача 5: Запустите объект scope и инициируйте случайным образом
Запустите объект scope
Ожидайте, пока объект scope не имеет 'готовое' состояние.
Рандомизируйте сумму времени ожидания прежде, чем инициировать осциллограф.
Ожидайте случайный период (0.. 4 s).
Триггер программного обеспечения объект scope.
Ожидайте, пока объект осциллографа не 'закончил' состояние.
Задача 6: Создайте временной вектор, загрузите данные об осциллографе и отобразите его.
Загрузите временной вектор
Загрузите полученные данные и график
tg = slrt; % 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 ='Software'; figh = findobj('Name', 'scsoftwaredemo'); % check for plot figure if isempty(figh) figh = figure; set(figh, 'Name', 'scsoftwaredemo', 'NumberTitle', 'off'); else figure(figh); end m = 1; flag = 0; % loop to acquire data for n = 1 : 25 if isempty(find(get(0, 'Children') == figh, 1)), flag = 1; break; end if ~m setparam(tg, tPar, 2*1000*rand); end m = rem(m + 1, 5); start(sc); % start scope object while ~strcmp(sc.Status, 'Ready for being Triggered'), end ttrigger = rand * 4; % randomized trigger time 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 trigger(sc); % software trigger scope while ~strcmpi(sc.Status,'finished') end t = sc.Time; % create time vector and display it plot(t, sc.Data); set(gca, 'XLim', [t(1), t(end)], 'YLim', [-10, 10]); drawnow; end if ~flag, title('scsoftwaredemo: finished'); end
Когда сделано, остановите приложение и закройте модель.
Модель Stop
Модель Close
stop(tg);
close_system('xpcosc',0);