В этом примере показано, как использовать Simulink® Real-Time™ с журналом SDI данных сигнала. Сигналы регистрируются во время выполнения модели. В конце запуска интерфейс SDI отображает сигнал. Этот пример показывает, как получить сигналы от интерфейса SDI при помощи командной строки.
Откройте модель xpcFileLogging
. Эта модель генерирует 20 синусоид, каждый имеющий различную амплитуду.
Примечание: Осциллографы типа 'цель' ограничиваются 10 сигналами.
Откройте модель.
mdlOpen = 0; systems = find_system('type', 'block_diagram'); if all(~strcmp('xpcosc', systems)) mdlOpen = 1; open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpcFileLogging')); end
Создайте модель и загрузите на целевой компьютер
Сконфигурируйте для немногословной сборки.
Сборка и приложение загрузки.
set_param('xpcFileLogging','RTWVerbose','off'); rtwbuild('xpcFileLogging');
### Starting Simulink Real-Time build procedure for model: xpcFileLogging 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: xpcFileLogging ### Created MLDATX ..\xpcFileLogging.mldatx ### Looking for target: TargetPC1 ### Download model onto target: TargetPC1
Закройте модель, если мы открыли ее.
if (mdlOpen) bdclose('xpcFileLogging'); end
Используя переменную объекта Simulink Real-Time, tg
, запустите модель.
tg = slrt('TargetPC1'); load(tg,'xpcFileLogging'); start(tg); pause(5);
Получите экран целевого компьютера, который отображает синусоиды в двух целевых осциллографах.
tg.viewTargetScreen();
Ожидайте, пока запуск не завершен.
while strcmp(tg.Status, 'running') pause(0.05); end
Чтобы просмотреть нанесенные на график данные сигнала, откройте Инспектора Данных моделирования.
Simulink.sdi.view
Можно также получить данные сигнала из SDI и отобразить данные на графике при помощи этих команд.
Получите все запуски
Получите информацию запуска
runIds = Simulink.sdi.getAllRunIDs(); run = Simulink.sdi.getRun(runIds(end)); signals=run.SignalCount; array=1;
Получите сигнал.
Получите объекты сигнала.
Примите только значения Синуса.
for signalIndex=1:signals signalID = run.getSignalIDByIndex(signalIndex); signalObj = Simulink.sdi.getSignal(signalID); if(~isempty(strfind(signalObj.Name,'Sine'))) signalArray(:,array)=signalObj.Values(:,1).Data; timeValues=signalObj.Values(:,1).Time; array=array+1; end end
Постройте сигналы.
plot(timeValues,signalArray); grid on; xlabel('Time (sec)'); ylabel('Amplitude');