exponenta event banner

Использование защищенных моделей предыдущих версий для тестирования SIL и генерации кода

В этом примере показано, как можно использовать защищенную модель из предыдущей версии (R2018b и далее) в:

  • Проверка численной эквивалентности между защищенной моделью и ранее сгенерированным кодом.

  • Создать новый код в текущей версии.

Рабочий процесс в этом примере поддерживает только защищенные модели, которые задают следующие типы системных целевых файлов:

  • ERT

  • На основе ERT

  • AUTOSAR классический

  • GRT (требуется встроенный кодер)

  • На основе GRT (требуется встроенный кодер)

Защищенная модель

Использовать предварительно созданную защищенную модель rtwdemo_crossrelease_protected_counter.slxp, который был создан в R2018b году.

Защищенная модель позволяет пользователю:

  • Откройте вид модели только для чтения.

  • Запустить моделирование.

  • Использовать сгенерированный код.

Защищенная модель поддерживает целевой файл системы ERT, а содержащийся в нем код - «Читаемый исходный код» и поддерживает интерфейс кода «Ссылка на модель».

Если требуется повторно создать защищенную модель с различными настройками, можно экспортировать модель. rtwdemo_crossrelease_unprotected_counter из текущей версии в формат, который может использоваться в MATLAB R2018b. В текущей версии выполните следующие команды:

load_system('rtwdemo_crossrelease_unprotected_counter');
Simulink.exportToVersion('rtwdemo_crossrelease_unprotected_counter', ...
    'rtwdemo_crossrelease_protected_counter.slx', ...
    'R2018b');
close_system('rtwdemo_crossrelease_unprotected_counter', 0);

Защищенная модель была создана в MATLAB R2018b с помощью следующей команды:

Simulink.ModelReference.protect('rtwdemo_crossrelease_protected_counter', ...
    'Mode', 'CodeGeneration', ...
    'OutputFormat', 'MinimalCode', ...
    'ObfuscateCode', false, ...
    'WebView', true, ...
    'Report', true)

Открыть верхнюю модель

Открытый rtwdemo_crossrelease_protected_model, верхняя модель, которая ссылается на защищенную модель.

model = 'rtwdemo_crossrelease_protected_model';
open_system(model);

Открыть отчет о защищенной модели

Чтобы открыть отчет о защищенной модели, на одном из блоков модели щелкните правой кнопкой мыши значок значка защищенной модели и выберите «Показать отчет». Или откройте отчет из командной строки.

protectedModel = 'rtwdemo_crossrelease_protected_counter';
Simulink.ModelReference.ProtectedModel.displayReport(protectedModel);

Отчет показывает, что защищенная модель была создана с помощью Simulink Coder 9.0 (R2018b).

Открыть представление только для чтения

Чтобы открыть представление защищенной модели только для чтения, щелкните правой кнопкой значок значка защищенной модели и выберите команду «Показать веб-представление». Или откройте вид только для чтения из командной строки.

Simulink.ModelReference.ProtectedModel.displayWebview(protectedModel);

Объединить общий служебный код

При интеграции кода из нескольких версий можно указать общий служебный код, используемый в окончательном построении.

Укажите папку общего кода для модели верхнего уровня.

mkdir('sharedCode');
set_param(model, 'ExistingSharedCode', fullfile(pwd, 'sharedCode'));

Использовать sharedCodeUpdate для объединения файлов общих утилит защищенной модели с содержимым папки общего кода.

Simulink.ModelReference.ProtectedModel.CurrentTarget.clear(protectedModel);
sharedCodeUpdate('rtwdemo_crossrelease_protected_counter.slxp', 'sharedCode', 'Interactive', false);
The following files will be copied from rtwdemo_crossrelease_protected_counter.slxp:slprj/ert/_sharedutils to sharedCode/R2018b:

    rtwtypes.h

Files copied from rtwdemo_crossrelease_protected_counter.slxp:slprj/ert/_sharedutils to sharedCode/R2018b.

Тестирование кода в модели Protected

Верхняя модель ссылается на два экземпляра защищенной модели. Параметры блока модели режима моделирования для «CounterA» и «CounterB»: Software-in-the-loop (SIL) и Accelerator соответственно. При выполнении моделирования модели верхнего уровня «CounterA» запускает сгенерированный код из защищенной модели, а «CounterB» запускает защищенную модель.

simOut = sim(model);
Simulink.sdi.view;
### Preparing to start SIL simulation ...
Building with 'gcc'.
MEX completed successfully.
### Starting SIL simulation for component: rtwdemo_crossrelease_protected_counter
### Stopping SIL simulation for component: rtwdemo_crossrelease_protected_counter

Сравнение выходных данных обоих блоков модели

Для просмотра выходных данных моделирования и сравнения значений сигналов из блоков модели используйте инспектор данных моделирования.

simulationRunObj =  Simulink.sdi.getCurrentSimulationRun(model);
counterASignal = getSignalsByName(simulationRunObj, 'counterA');
counterBSignal = getSignalsByName(simulationRunObj, 'counterB');
Simulink.sdi.compareSignals(counterASignal.ID, counterBSignal.ID);
Simulink.sdi.view(Simulink.sdi.GUITabType.CompareRuns);

Создать код из верхней модели

Можно создать код из верхней модели со ссылкой на код, содержащийся в защищенной модели.

slbuild(model);
### Starting build procedure for: rtwdemo_crossrelease_protected_model
### Successful completion of build procedure for: rtwdemo_crossrelease_protected_model

Build Summary

Top model targets built:

Model                                 Action                       Rebuild Reason                                    
=====================================================================================================================
rtwdemo_crossrelease_protected_model  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 23.044s

См. также

Связанные темы