В этом примере показано, как использовать Simulink® Real-Time™ с журналом SDI данных сигнала. Сигналы регистрируются во время выполнения модели. В конце запуска интерфейс SDI отображает сигнал. Этот пример показывает, как получить сигналы от интерфейса SDI при помощи командной строки.
Откройте модель slrtex_file_logging
. Эта модель генерирует 20 синусоид, каждый имеющий различную амплитуду.
Примечание: Осциллографы типа 'цель' ограничиваются 10 сигналами.
Откройте модель.
mdlOpen = 0; systems = find_system('type', 'block_diagram'); if all(~strcmp('slrtex_file_logging', systems)) mdlOpen = 1; open_system(fullfile(matlabroot,'toolbox','slrt','slrtexamples','slrtex_file_logging')); end
Создайте модель и загрузите на целевой компьютер
Сконфигурируйте для немногословной сборки.
Сборка и приложение загрузки.
set_param('slrtex_file_logging','RTWVerbose','off'); rtwbuild('slrtex_file_logging');
### Starting Simulink Real-Time build procedure for model: slrtex_file_logging 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: slrtex_file_logging ### Created MLDATX ..\slrtex_file_logging.mldatx
Закройте модель, если мы открыли ее.
if (mdlOpen) bdclose('slrtex_file_logging'); end
Используя переменную объекта Simulink Real-Time, tg
, запустите модель.
tg = slrt('TargetPC1'); load(tg,'slrtex_file_logging'); start(tg); pause(5); 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');