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