Этот пример показывает, как использовать 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 ### Generated code for 'xpcFileLogging' is up to date because no structural, parameter or code replacement library changes were found. ### 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 = SimulinkRealTime.target; 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');