В этом примере показано, как можно использовать защищенную модель из предыдущей версии (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.
Верхняя модель ссылается на два экземпляра защищенной модели. Параметры блока модели режима моделирования для «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