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

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

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

  • Сгенерируйте новый код в текущем релизе.

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

  • ERT

  • На основе ERT

  • AUTOSAR Classic

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

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

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

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

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

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

  • Выполняйте симуляции.

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

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

Если вы хотите повторно создать защищенную модель с различными настройками, можно экспортировать модель 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);

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

Чтобы открыть отчет защищенной модели, на одном из блоков 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

Верхняя модель ссылается на два образцов защищенной модели. Параметры Симуляции режима Блока Model для «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

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

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

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

См. также

Похожие темы