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

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

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

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

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

  • ERT

  • Основанный на ERT

  • Классика AUTOSAR

  • GRT (требуемый Embedded Coder)

  • Основанный на 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.

Протестируйте Код в модели Protected

Ссылки топ-модели два экземпляра защищенной модели. Параметром блока 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 'gcc'.
MEX completed successfully.
### Starting SIL simulation for component: rtwdemo_crossrelease_protected_counter
### Stopping SIL simulation for component: rtwdemo_crossrelease_protected_counter

Сравните Выходные параметры от обоих блоков Model

Чтобы просмотреть симуляцию выход и сравнить значения сигналов от блоков 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);

Сгенерируйте код от топ-модели

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

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

Смотрите также

Похожие темы