В этом примере показано, как можно использовать защищенную модель от предыдущего релиза (R2018b вперед) к:
Протестируйте числовую эквивалентность между защищенной моделью и ее ранее сгенерированным кодом.
Сгенерируйте новый код в текущем релизе.
Рабочий процесс в этом примере поддерживает только защищенные модели, которые задают эти системные типы конечного файла:
ERT
Основанный на ERT
Классика AUTOSAR
GRT (требуемый Embedded Coder)
Используйте предсгенерированную защищенную модель 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);
Чтобы открыть защищенный отчет модели, на одном из блоков Model, щелкают правой кнопкой мыши по значку значка защищенной модели и затем нажимают "Display report". Или, откройте отчет из командной строки.
protectedModel = 'rtwdemo_crossrelease_protected_counter';
Simulink.ModelReference.ProtectedModel.displayReport(protectedModel);
Отчет показывает, что защищенная модель была сгенерирована при помощи Simulink Coder 9.0 (R2018b).
Чтобы открыть представление только для чтения защищенной модели, щелкните правой кнопкой мыши по значку значка защищенной модели и затем нажмите "Show web view". Или, откройте представление только для чтения из командной строки.
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 режима Simulation для "CounterA" и "CounterB" является Software-in-the-loop (SIL)
и Accelerator
соответственно. Когда вы запускаете симуляцию топ-модели, "CounterA" запускает сгенерированный код из защищенной модели, в то время как "CounterB" запускает защищенную модель.
simOut = sim(model); Simulink.sdi.view;
### Preparing to start SIL simulation ... Building with 'Microsoft Visual C++ 2017 (C)'. MEX completed successfully. ### Starting SIL simulation for component: rtwdemo_crossrelease_protected_counter ### Stopping SIL simulation for component: rtwdemo_crossrelease_protected_counter
Чтобы просмотреть симуляцию выход и сравнить значения сигналов от блоков Model, используйте Инспектора Данных моделирования.
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);
Можно сгенерировать код от топ-модели, сославшись на код, который содержится в защищенной модели.
rtwbuild(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 56.017s