При наличии лицензии Embedded Coder ® сгенерированный код C из предыдущих версий (R2010a и более поздних) можно интегрировать с сгенерированным кодом из текущей версии, если исходные модели односкоростные, а сгенерированный код C - из:
Процессы построения модели или подсистемы верхнего уровня, использующие неиспользуемый интерфейс кода функции.
Процессы построения ссылок на модели с одним или несколькими экземплярами, которые подавляют мониторинг состояния ошибок (SuppressErrorStatus является on).
Если можно повторно использовать существующий код без изменений, можно сократить затраты на повторную обработку.
Рассмотрим модель системы управления.

Controller
Блок модели ссылается на модель, состоящую из трех компонентов:
P1 является блоком Model, который ссылается на модель, разработанную с предыдущей версией, например, R2015b. Созданный код модели с автономным интерфейсом кода находится в папке P1_ert_rtw.
C1 является блоком модели, который ссылается на модель, разрабатываемую в текущей версии.
P2 - блок подсистемы, разработанный с предыдущей версией, например, R2016a. Созданный код подсистемы находится в папке P2_ert_rtw.
P3 является блоком Model, который ссылается на модель, разработанную с предыдущей версией, например, R2016b. Созданный код модели с интерфейсом ссылочного кода модели находится в папке slprj/ert/P3.
Для интеграции кода из предыдущих версий с кодом, созданным из текущей версии, используйте следующий рабочий процесс:
Рабочий процесс интеграции кода между версиями не поддерживает:
Экспорт моделей функций для кода ERT.
Функция Simulink и вызывающая функция блокируют границы кода ERT, генерируемого различными версиями.
Интеграция сгенерированного кода из версий перед R2010a.
Импорт созданного кода из текущей версии в предыдущую (прямая совместимость).
Экспорт файлов, расположенных в корневой папке MATLAB ® предыдущей версии, например файлов библиотеки блоксета.
Экспорт и импорт сгенерированного кода из моделей с неинлинированными S-функциями.
В конце процесса построения модели в отчете о создании кода отображаются общие файлы, которые непосредственно используются интеграционной моделью, например: Controller. В отчете не отображаются общие файлы, используемые компонентами модели, например: P1 и P2.
Если модель имеет:
Блок SIL или PIL перекрестного выпуска не позволяет выполнять быстрое моделирование режима ускорителя.
Блок модели, который ссылается на модель, содержащую блок SIL или PIL перекрестного выпуска, нельзя запустить режим ускорения или моделирование режима быстрого ускорения.
Можно выполнить:
Моделирование SIL верхней модели моделей, содержащих блоки SIL или PIL перекрестного выпуска. Модели не должны содержать блоки модели AUTOSAR перекрестного выпуска.
Моделирование SIL блока модели ссылочных моделей, содержащих блоки SIL или PIL перекрестного выпуска. Ссылочные модели не должны содержать блоки модели AUTOSAR перекрестного выпуска.
Сведения о других ограничениях интеграции кода AUTOSAR для всех версий см. в разделе Импорт кода AUTOSAR из предыдущих версий.
Simulink.Bus ПоддержкаДля использования объекта шины в качестве типа данных в интеграции кода ERT кросс-версии используйте один из этих подходов.
| Подход | Экспорт кода | Импорт кода |
|---|---|---|
| Автоматический |
В предыдущей версии перед созданием кода установите Генератор кода создает |
В текущей версии, перед запуском При построении интеграционной модели в процессе построения используется |
| Экспортированная шина |
В предыдущей версии перед созданием кода укажите эти свойства
Генератор кода создает Для R2010a и R2010b, |
В текущей версии, перед запуском При построении интеграционной модели, включающей импортированный блок SIL или PIL, в процессе построения используется Если импортированный код из R2010a или R2010b, укажите эти свойства
При построении интеграционной модели в процессе построения используется |
| Импортированная шина |
В предыдущей версии перед созданием кода укажите эти свойства
Для R2010a и R2010b, |
В текущей версии после импорта сгенерированного кода не требуется изменять При построении интеграционной модели, включающей импортированный блок SIL или PIL, в процессе построения используется Если импортированный код из R2010a или R2010b, укажите эти свойства
При построении интеграционной модели в процессе построения используется |
Когда импортированный код ERT из предыдущей версии реализует входной или выходной порт через глобальную переменную, код, генерируемый из интеграционной модели, зависит от свойств сигнала, подключенного к порту в интеграционной модели.
Если сигнал интеграционной модели не отображается на сгенерированную кодовую переменную, имя которой совпадает с именем сигнала в импортированном коде, генерируемый код:
Определяет переменную, если она объявлена, но не определена в импортированном коде.
Создает дополнительный код для копирования данных между переменной, созданной из интеграционной модели, и переменной в импортированном коде.
Если сигнал интеграционной модели соответствует переменной с тем же именем, что и сигнал в импортированном коде, переменная, используемая импортированным кодом, также используется кодом, сгенерированным из интеграционной модели. Для сигнала необходимо использовать совместимый класс хранения.
| Свойство класса хранения | Поддержка значения свойства |
|---|---|
| Напечатать | Unstructured только |
| Доступ к данным |
Не удается подключить порт, реализованный как Не удается подключить порт, реализованный как |
| Объем данных |
Если импортированный код объявляет, но не определяет переменную (т.е. код генерируется из сигнала, который использует
Если импортированный код определяет переменную (т.е. код генерируется из сигнала, который использует
|
Компоненты текущей и предыдущей версий могут взаимодействовать через глобальные хранилища данных, связанные с Simulink.Signal объекты в базовом рабочем пространстве MATLAB или словаре данных Simulink. Описанный здесь поток операций применим к интеграции кода ERT для всех версий.
Перед созданием кода компонента модели в старой версии настройте память хранилища данных для использования класса хранения, который импортирует внешний код.
Если в процессе построения верхней модели или подсистемы создается код, задайте свойство класса Storage для Simulink.Signal объекты к одному из следующих классов:
ImportedExtern
ImportedExternPointer
ImportFromFile пользовательский класс хранения
Если процесс построения ссылки на модель генерирует код, можно также использовать следующие классы:
ExportedGlobal
ExportToFile пользовательский класс хранения
В текущей версии перед запуском crossReleaseImport, определить Simulink.Signal объект в базовой рабочей области MATLAB или словарь данных Simulink для каждого глобального хранилища данных компонента, который требуется импортировать:
Для имени объекта и свойств объекта «Тип данных», «Сложность» и «Размеры» укажите значения, соответствующие значениям соответствующего объекта в компоненте, который требуется импортировать.
Для свойства класса Storage укажите совместимое значение. Если предыдущее значение версии равно ImportedExtern, укажите одно из следующих значений для текущей версии:
ImportedExtern
ExportedGlobal
ImportFromFile или ExportToFile пользовательский класс хранения.
Если предыдущее значение версии равно ImportedExternPointer, затем укажите ImportedExternPointer для текущей версии.
Для свойства Идентификатор (Identifier) укажите соответствующее значение, только если свойство указано для объекта в компоненте, который требуется импортировать.
Сохранить Simulink.Signal объекты. Объекты требуются при каждом моделировании или построении импортированного блока SIL или PIL.
Дополнительные сведения см. в разделе Хранилища данных в сгенерированном коде.
Рабочий процесс интеграции кода ERT для всех версий поддерживает настройку параметров в модели интеграции, которая содержит код компонента с настраиваемыми параметрами из предыдущих версий.
В текущей версии перед запуском crossReleaseImport, для каждого настраиваемого параметра компонента, который требуется импортировать:
Определение Simulink.Parameter в базовом рабочем пространстве MATLAB или в словаре данных Simulink.
Для имени объекта и свойств объекта «Тип данных», «Сложность» и «Размеры» укажите значения, соответствующие значениям объекта предыдущей версии. Если имя переменной в импортированном исходном коде не совпадает с именем объекта, для свойства «Идентификатор» укажите значение, соответствующее имени переменной.
Если в предыдущем объекте версии используется GetSet пользовательский класс хранения, укажите:
Соответствующее значение для свойства объекта класса Storage.
Файл заголовка, определяющий get и set функции доступа. Дополнительные сведения см. в разделе Управление представлением данных путем настройки свойств класса хранения и доступа к данным через функции с помощью класса хранения GetSet.
Поддержка GetSet пользовательский класс хранения из предыдущей версии применяется только для R2011a и более поздних версий.
Для кода, созданного процессом сборки верхней модели или подсистемы в предыдущей версии, применяются следующие ограничения:
Если настраиваемый параметр, заданный Simulink.Parameter для объекта в предыдущей версии установлен класс хранения ExportedGlobal и класс хранения Simulink.Parameter объект в текущей версии также ExportedGlobalпри построении интеграционной модели возникает ошибка.
В операционной системе Mac, если настраиваемый параметр указан Simulink.Parameter для объекта в предыдущей версии установлен класс хранения ExportedGlobal, невозможно построить модель интеграции, если класс хранения Simulink.Parameter объект в текущей версии (с тем же именем или псевдонимом): ImportedExtern. Чтобы обойти это ограничение, измените параметры по умолчанию:
Получите инструмент построения из цепочки инструментов по умолчанию.
tc = coder.make.getDefaultToolchain;
cComp = tc.getBuildTool('C Compiler');Извлеките стандартные параметры компилятора Си.
stdMaps = cComp.SupportedStandard.getLangStandardMaps;
optionValues = stdMaps.getCompilerOptions('*'); Удалить -fno-common из стандартных параметров компиляторов C и C++.
optionToRemove = '-fno-common'; optionsToKeep = strrep(optionValues, optionToRemove, ''); c_standard_opts_id = '$(C_STANDARD_OPTS)'; custToolChainOpts = get_param(model,'CustomToolchainOptions'); custToolChainOpts{2} = ... strrep(custToolChainOpts{2}, c_standard_opts_id, optionsToKeep); set_param(model, 'CustomToolchainOptions',custToolChainOpts);
С помощью повторно используемой ссылочной модели можно задать уникальные значения аргументов модели для каждого экземпляра ссылочной модели в родительской модели. Импортируйте ранее созданный код для повторно используемой ссылочной модели в текущую версию в качестве параметризованного блока SIL или PIL перекрестного выпуска, а затем вставьте несколько экземпляров блока в интеграционную модель. Для каждого экземпляра блока можно указать уникальные значения аргументов модели.
Обновить существующую папку с общим кодом.
sharedCodeUpdate(sourceFolder,destinationFolder)
Импорт созданного кода для повторно используемой ссылочной модели в текущую версию в качестве параметризованного блока перекрестного освобождения, например блока SIL.
handleSILBlock = crossReleaseImport(reusableReferencedModelcodeLocation, ... configSetIntegrationModel, 'SimulationMode', 'SIL');
В интеграционной модели замените, например, два экземпляра ссылочной модели экземплярами блока SIL перекрестного выпуска.
open_system(integrationModel);
blockInstanceName1 = 'refModelInstanceName1';
blockinstanceName2 = 'refModelInstanceName2';
SILBlockFullName = getfullname(handleSILBlock);
replace_block(integrationModel, 'Name', blockInstanceName1, ...
SILBlockFullName, 'noprompt');
replace_block(integrationModel, 'Name', blockInstanceName2, ...
SILBlockFullName, 'noprompt');Предположим, что повторно используемая ссылочная модель имеет аргументы модели и paramAи значения для ссылочных экземпляров модели, paramB и refModelInstanceName1, являются переменными рабочей области. В этом случае можно указать значения аргументов для экземпляров блоков перекрестного выпуска, которые являются переменными рабочей области.refModelInstanceName2
pathToBlockInstanceName1 = [integrationModel, '/', blockInstanceName1]; pathToBlockInstanceName2 = [integrationModel, '/', blockInstanceName2]; set_param(pathToBlockInstanceName1, 'paramA', 'paramA_instName1'); set_param(pathToBlockInstanceName1, 'paramB', 'paramB_instName1'); set_param(pathToBlockInstanceName2, 'paramA', 'paramA_instName2'); set_param(pathToBlockInstanceName2, 'paramB', 'paramB_instName2');
Чтобы задать уникальные значения аргументов модели для экземпляров блоков в интеграционной модели, назначьте значения переменным рабочей области, , paramA_instName1, paramB_instName1, и paramA_instName2.paramB_instName2
В предыдущей версии предположим, что был разработан компонент модели, создан код для компонента, протестирован и развернут созданный код. Теперь в текущей версии требуется добавить элементы к компоненту модели и использовать компонент модели при разработке системы и создании кода. Перед продолжением можно сравнить функциональное поведение компонента модели и созданный код из предыдущей версии.
Чтобы проверить числовую эквивалентность между компонентом модели и кодом, созданным в предыдущей версии, используйте Simulink Test™. Менеджер тестов (Simulink Test) позволяет выполнять обратные тесты и сравнения выходных данных:
Включение компонента модели в текущую версию в качестве блока модели с параметром блока режима моделирования, равным Normal.
С помощью блока «Модель» создайте модель верхнего уровня, определяющую входные данные теста.
Импортируйте код, созданный в предыдущей версии, в текущую версию как блок SIL.
С помощью блока SIL создайте другую модель верхнего уровня, определяющую те же самые входные данные теста.
В диспетчере тестов создайте тест эквивалентности, в котором выполняется моделирование верхних моделей и сравнение выходных данных.
Запустите тестовый случай и просмотрите результаты.
Дополнительные сведения см. в разделе Тестирование двух имитаций эквивалентности (Simulink Test).
Примечание
Если требуется сравнить поведение сгенерированного кода из текущей и предыдущей версий, на шаге 1 задайте следующие параметры блока модели:
Установить режим моделирования в значение Software-in-the-loop (SIL) или Processor-in-the-loop (PIL).
Установка для интерфейса Code значения Top model.
При установке пакета поддержки встроенного кодера для стандарта AUTOSAR можно импортировать в текущую версию код компонента AUTOSAR, созданный в предыдущей версии.
При выполнении crossReleaseImport, функция импортирует код AUTOSAR как блок модели перекрестного выпуска вместо блока SIL или PIL. Параметр режима моделирования блока модели имеет значение Software-in-the-loop (SIL) или Processor-in-the-loop (PIL). Включение блока «Модель» в текущую модель выпуска.
Применяются следующие ограничения:
Рабочий процесс перекрестного выпуска не поддерживает память для каждого экземпляра, которая получает доступ к NVRAM.
Настраиваемые параметры должны быть сопоставлены с параметрами калибровки AUTOSAR или внутренними параметрами калибровки AUTOSAR.
Если в исходной модели используются исполнения или символьные размеры (исполнения размеров), импортированная модель может использовать только те же варианты и конфигурации символьных размеров, которые использовались при создании кода в предыдущей версии.
crossReleaseImport | sharedCodeMATLABVersions | sharedCodeUpdate