Этот пример показывает, как проследить сигналы с инициированным осциллографом хоста Simulink® Real-Time™ осциллографа. После того, как скрипт создает и загружает модель осциллятора, xpcosc
, это добавляет два осциллографа типа 'host'
к приложению реального времени. Первый осциллограф сконфигурирован, чтобы включить 'Генератор Сигнала сигнала' (единственный сигнал, добавленный к этому осциллографу). Сигнал 'Integrator1' также добавляется к второму осциллографу. Определите объем 2, сконфигурирован, чтобы быть инициированным первым осциллографом (т.е. он инициирован одновременно, первый осциллограф инициирован). Это синхронизирует осциллографы.
Затем, осциллографы запущены и проверены, чтобы определить, когда сбор данных завершен. Данные из обоих осциллографов затем загружены на компьютер разработчика и отображены на графике. Несмотря на то, что оба осциллографа начинают сбор данных одновременно, Осциллограф 2 получает данные по более длинной записи времени путем увеличения фактора десятикратного уменьшения от 4 до 10. Этот процесс повторяется 25 раз. После каждого пятого выполнения усиление затухания '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
Установите время остановки на высокое значение
Запустите образцовое выполнение
Задача 2: Создайте, сконфигурируйте, и график к осциллографу хоста во время каждого выполнения.
Получите индекс параметра 'Gain1/Gain'
Получите индекс сигнала 'Integrator1'
Получите индекс 'Генератора Сигнала сигнала'
Задайте (добавляет) первый объект scope хоста
Задайте (добавляет) второй объект scope хоста
Задача 3: Установите свойства первого объекта scope
Добавьте 'Генератор Сигнала', чтобы сигнализировать о списке
Определите номер выборок
Установите фактор десятикратного уменьшения
Установите триггерный режим
Установите триггерный сигнал 'Сигнализировать о Генераторе'
Установите пороговый уровень
Установите триггерный наклон
Задача 4: Установите свойства второго объекта scope
Добавьте оба сигнала сигнализировать о списке
Определите номер выборок
Установите фактор десятикратного уменьшения
Установите триггерный режим
Установите триггерный осциллограф на первый объект scope
Задача 5: проверяйте на фигуру графика
Фигура графика существует?
Если не, создайте фигуру
Если да, сделайте его текущей фигурой
Задача 7: Цикл, чтобы получить 25 блоков данных от объекта scope.
Измените параметр Gain1/Gain каждый пятый цикл приобретения к случайному значению между 0 и 2000.
Запустите второй осциллограф (ожидает, пока не инициировано первым осциллографом),
Запустите первый осциллограф
Ожидайте объекты until и scope 'закончили' состояние.
Задача 8: определите объем временного вектора отображения объектов
Первый объект scope: создайте временной вектор, загрузите данные об осциллографе и отобразите его.
Загрузите временной вектор
Загрузите полученные данные и график
Второй объект 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'); scs = addscope(tg, 'host'); % add scopes scs(2) = addscope(tg, 'host'); addsignal(scs(1), signals(2)); % set scope object properties scs(1).NumSamples = 200; scs(1).Decimation = 4; scs(1).TriggerMode = 'Signal'; scs(1).TriggerSignal = signals(2); scs(1).TriggerLevel = 0.0; scs(1).TriggerSlope = 'Rising'; addsignal(scs(2),signals); % sect scope object properties scs(2).NumSamples = 200; scs(2).Decimation = 10; scs(2).TriggerMode = 'Scope'; scs(2).TriggerScope = scs(1).ScopeId; figh = findobj('Name', 'scscopedemo'); % check for plot figure if isempty(figh) figh = figure; set(figh, 'Name','scscopedemo','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); scs(2).start; scs(1).start; while ~strcmpi(scs(1).Status,'finished') || ... ~strcmpi(scs(2).Status,'finished') end % wait for scope objects to finish subplot(2, 1, 1); % first scope object displays time vector t1 = scs(1).Time; plot(t1, scs(1).Data, 'g'); set(gca, 'XLim', [t1(1), t1(end)], 'YLim', [-10, 10]); ylabel('Scope 1'); title(['scscopedemo: ', num2str(n), ' of 25 data packages']); subplot(2,1,2); % second scope object displays time vector t2 = scs(2).Time; plot(t2, scs(2).Data); set(gca,'XLim',[t2(1),t2(end)],'YLim',[-10,10]); ylabel('Scope 2'); drawnow; end if ~flag subplot(2, 1, 1); title('scscopedemo: finished'); end
Когда сделано, остановите приложение и закройте модель.
Модель Stop
Модель Close
stop(tg);
close_system('xpcosc',0);