Настройте опции окружения во время выполнения

Когда вы используете Simulink® программное обеспечение для создания и выполнения модели и использования генератора кода для создания кода C or C++, учитывайте ваше строение для до трёх окружений во время выполнения:

  • MATLAB® компьютер разработчикатера, которая запускает MathWorks® программное обеспечение во время разработки приложений.

  • Время выполнения производственного оборудования окружения в котором вы развертываете приложение, когда оно запускается в производство.

  • Тест оборудования во время выполнения окружения в котором вы тестируете разрабатываемое приложение перед развертыванием.

Окружение во время выполнения может служить в нескольких емкостях, но окружения во время выполнения остаются концептуально различными. Часто тестовым оборудованием является компьютер разработчика MATLAB. Как правило, производственное оборудование отличается от разработки MATLAB или тестирования. Многие типы производственного оборудования могут сделать немного больше, чем запустить загруженный исполняемый файл.

Предоставьте информацию о производственной аппаратной плате и компиляторе, который вы используете с ней, когда:

  • Вы используете программное обеспечение Simulink, чтобы симулировать модель, для которой вы позже генерируете код

  • Вы используете генератор кода для создания кода для развертывания на производственном оборудовании

Программное обеспечение использует информацию о плате и компиляторе, чтобы получить bit-true согласие для результатов операций с целым числом и фиксированной точками, выполненных в симуляции и в коде, сгенерированном для производственного оборудования. Генератор кода использует информацию, чтобы создать код, который выполняется с максимальной эффективностью.

Когда вы генерируете код для проверки на тестовом оборудовании, предоставляйте информацию о тестовой аппаратной плате и компиляторе, который вы используете. Генератор кода использует эту информацию для создания кода, который обеспечивает bit-true согласие между результатами из:

  • Целое число и операции с фиксированной точкой, выполненные в симуляции

  • Сгенерированный код запускается на производственном оборудовании

  • Сгенерированный код запускается на тестовом оборудовании

Вы можете достичь bit-true согласия для результатов, даже если производственное и тестовое оборудование отличаются. Там, где стандарт C не полностью определяет поведение, компиляторы для двух типов оборудования могут использовать различные значения по умолчанию.

Сконфигурируйте производственное и тестовое оборудование

Можно задать симуляцию модели или генерацию кода для определенной аппаратной платы и ее типа устройства. Например, можно задать размер данных, упорядоченное расположение байтов и поведение компилятора, такие как целочисленное округление. Можно настроить:

Сконфигурируйте производственное оборудование, выбрав Configuration Parameters > Hardware Implementation. По умолчанию на панели Аппаратная реализация перечислены только Hardware board, Device vendor и Device type поля параметров. Если вы не установили пакеты аппаратной поддержки, Hardware board перечисляет значения None или Determine by Code Generation system target file, и Get Hardware Support Packages. После установки пакета аппаратной поддержки в список также входит соответствующее имя аппаратной платы. Если вы выбираете имя аппаратной платы, появляются параметры для этой платы. Чтобы задать детали устройства, такие как размер данных и упорядоченное расположение байтов, нажмите Device details.

Сконфигурируйте тестовое оборудование на панели Configuration Parameters Hardware Implementation > Advanced parameters >. Чтобы включить параметры для настройки сведений о тестовом оборудовании, отключите параметр Configuration Parameters Hardware Implementation > Advanced parameters > Test hardware is the same as production hardware >. Код, сгенерированный для тестового оборудования, выполняется в окружении, заданной параметрами тестового оборудования. Код ведет себя так, как если бы он выполнялся в окружении, указанной для производственного оборудования. Для получения дополнительной информации смотрите Тестирование Оборудования Факторов.

Значения по умолчанию появляются как начальные значения на панели «Аппаратная реализация», когда:

  • Вы задаете System target file на панели Code Generation.

  • Системный целевой файл задает микропроцессор по умолчанию и его аппаратные свойства.

Вы не можете изменить параметры, которые имеют только одно возможное значение. Параметры, которые имеют несколько возможных значений, обеспечивают список допустимых значений. Если вы задаете свойства оборудования вручную на Hardware Implementation панели, проверьте, что эти значения согласуются с системным целевым файлом. В противном случае сгенерированный код может не скомпилироваться или выполнить, или может выполнить, но привести к неправильным результатам.

Параметры аппаратной реализации описывают оборудование и компилятор свойства программного обеспечения MATLAB. Генератор кода использует информацию, чтобы создать код для окружения выполнения, которая запускается максимально эффективно. Сгенерированный код дает bit-true согласие для результатов целого числа и операций с фиксированной точкой в симуляции, производственном коде и тестовом коде.

Для получения дополнительной информации о конкретных параметрах смотрите Панель аппаратной реализации. Чтобы увидеть пример возможностей Hardware Implementation панели, смотрите rtwdemo_targetsettings пример модели. Для получения дополнительной информации о конфигурировании аппаратной реализации смотрите:

Настройка аппаратной платы

Укажите аппаратную плату, которая запускает код, сгенерированный из вашей модели. Выберите значение для Configuration Parameters > Hardware Implementation > Hardware board.

Панель Аппаратная реализация идентифицирует системный целевой файл, выбранный на Configuration Parameters > Code Generation.

Чтобы сконфигурировать тестовое оборудование, используйте панель Configuration Parameters Hardware Implementation > Advanced parameters >.

Чтобы включить параметры для настройки сведений о тестовом оборудовании, установите ProdEqTarget на off.

Способы задать Оборудование плату

ЕслиВыбрать

Меню содержит имя аппаратной платы, которую вы хотите использовать.

Имя этой аппаратной платы.

Если вы выбираете имя аппаратной платы, появляются параметры для этой платы.

Меню не содержит имя аппаратной платы, которую вы хотите использовать.

Get Hardware Support Packages.

Это значение открывает программу установки пакета поддержки. Установите требуемый пакет поддержки. После установки пакета поддержки меню содержит соответствующие имена аппаратных плат.

В строении модели используется системный целевой файл ert.tlc, realtime.tlc, или autosar.tlc.

None.

Для аппаратной реализации не задана плата оборудования.

Строение модели не использует системный целевой файл ert.tlc, realtime.tlc, или autosar.tlc.

Determine by Code Generation system target file.

Генератор кода использует указанный системный целевой файл, чтобы определить аппаратную реализацию.

Укажите поставщика устройств

Чтобы указать поставщика микропроцессора аппаратного устройства, используйте параметр Device vendor. Выбор определяет доступные микропроцессоры в Device type меню. Если имя поставщика не отображается, выберите Custom Processor. Затем используйте параметр Device type, чтобы задать микропроцессор.

Укажите тип устройства

Чтобы задать имя микропроцессора из поддерживаемых устройств, перечисленных для выбора Device vendor, используйте параметр Device type. Если микропроцессор не отображается в меню, измените Device vendor на Custom Processor. Затем укажите сведения об устройстве для пользовательского устройства.

Если вы выбираете тип устройства, для которого системный целевой файл задает свойства оборудования по умолчанию, свойства появляются как начальные значения. Вы не можете изменить значение параметров только с одним возможным выбором. Параметры, которые имеют несколько возможных значений, обеспечивают меню. Выберите значения для вашего оборудования.

Установите длины битов для типов данных устройств

Параметры Number of bits описывают native word size микропроцессора и битовые длины данных char, short, int и long. Для успешной генерации кода:

  • Длины битов должны быть такими, чтобы char < = short < = int < = long.

  • Длины битов должны быть кратны 8 с максимум 32.

  • Длина бита для длинных данных не должна быть меньше 32.

The rtwtypes.h файл задает имена целого типа. Значения, которые вы предоставляете, должны соответствовать размерам слов, определенным в компиляторе limits.h заголовочный файл. Генератор кода сопоставляет свои имена целому типу с соответствующими именами целого типа Simulink.

Если ANSI отсутствует® Доступен тип C с соответствующим размером слова, но доступен больший тип ANSI C, генератор кода использует больший тип для int8_T, uint8_T, int16_T, uint16_T, int32_T, и uint32_T. Когда генератор кода использует больший тип, получившиеся записанные значения (для примера, логгирования MAT-файла) могут иметь различные типы данных, чем записанные значения для симуляции.

Приложение может использовать целочисленные данные длиной от 1 (без знака) или 2 (со знаком) бит до 32 бит. Если целочисленная длина совпадает с длиной доступного типа, генератор кода использует этот тип. Если соответствующий тип недоступен, генератор кода использует наименьший доступный тип, который может хранить данные, генерируя код, который не использует ненужные биты более высокого порядка. Например, на оборудовании, которое поддерживает 8-битные, 16-битные и 32-битные целые числа, для сигнала, заданного как 24 бита, генератор кода реализует данные как int32_T или uint32_T.

Код, который использует эмулированные целочисленные данные, не является максимально эффективным. Этот код может быть полезен во время разработки приложения для эмуляции целочисленных длин, которые доступны только на производственном оборудовании. Эмуляция не влияет на результаты выполнения.

Во время генерации кода программное обеспечение проверяет совместимость типов данных моделей с типами данных, которые вы задаете для производственного оборудования.

  • Если ни одна из длин, заданных для целых чисел производственного оборудования, не равна 32 битам, программа генерирует ошибку.

  • Если длины типов данных, которые использует модель, меньше доступных целочисленных длин производственного оборудования, программное обеспечение генерирует предупреждение.

Отображение Целых типов от генератора кода до Simulink

Генератор кода Целого типаФункции Simulink Целого типа
boolean_Tboolean
int8_Tint8
uint8_Tuint8
int16_Tint16
uint16_Tuint16
int32_Tint32
uint32_Tuint32

Установите упорядоченное расположение байтов для устройства

Параметр упорядоченное расположение задает, используется ли оборудование Big Endian (первый наиболее значительный байт) или Little Endian (первый наименее значимый байт) упорядоченное расположение байтов. Если осталось следующим Unspecifiedгенератор кода производит код, который определяет конечность оборудования. Эта настройка является наименее эффективной.

Установите частное округление для знакового целого деления

ANSI C не полностью задает метод частного округления для компиляторов, используемый при делении одного целого числа со знаком на другое. Итак, поведение зависит от реализации. Если оба целых чисел положительны, или оба отрицательны, частное должно округлиться вниз. Если любое целое число положительно, а другое отрицательно, частное может округлиться вверх или вниз.

Параметр Signed integer division rounds to инструктирует генератор кода о том, как компилятор округляет результат целочисленного деления со знаком. Предоставление этой информации не меняет операцию компилятора. Это описывает только это поведение генератору кода, который использует информацию для оптимизации кода, сгенерированного для целочисленного деления со знаком. Значения параметров:

  • Zero - Если частное находится между двумя целыми числами, компилятор выбирает в результате целое число, которое ближе к нулю.

  • Floor - Если частное находится между двумя целыми числами, компилятор выбирает целое число, которое ближе к отрицательной бесконечности.

  • Undefined - Если Zero или Floor не описывать поведение компилятора или, если это поведение неизвестно, выберите это значение.

Избегайте выбора Undefined. Когда генератор кода не знает поведение округления с целым делением со знаком компилятора, сборка модели генерирует дополнительный код.

Поведение частного округления компилятора изменяется в соответствии с этими значениями.

Вы можете получить реализацию компилятора для округления с целым делением со знаком из документации компилятора. Если документация недоступна, можно определить это поведение путем эксперимента.

Пример частного округления для нуля, пола и неопределенного значения

NDИдеальный N/DНульПолНеопределенный

33

4

8.25

8

8

8

-33

4

-8.25

-8

-9

-8 или -9

33

-4

-8.25

-8

-9

-8 или -9

-33

-4

8.25

8

8

8 или 9

Установите арифметическое поведение при сдвиге вправо для целых чисел со знаком

ANSI C не определяет поведение правых сдвигов на отрицательных целых числах для компиляторов. Итак, поведение зависит от реализации. Опция Shift right on a signed integer as arithmetic shift инструктирует генератор кода о том, как компилятор реализует правые сдвиги на отрицательных целых числах. Предоставление этой информации не меняет операцию компилятора. Это описывает только это поведение генератору кода, который использует информацию для оптимизации кода, сгенерированного для арифметических сдвигов вправо.

Если компилятор C реализует сдвиг со знаком целого числа правом как арифметикой сдвиг вправо, выберите опцию. В противном случае снимите опцию. Арифметический сдвиг вправо заполняет биты, освобожденные правым сдвигом, значением самого значимого бита, что указывает на знак числа в обозначении с дополнением двух. Опция выбрана по умолчанию. Если ваш компилятор обрабатывает правые сдвиги как арифметические сдвиги, эта настройка является предпочтительной.

  • Когда вы выбираете опцию, генератор кода производит эффективный код каждый раз, когда модель Simulink выполняет арифметические сдвиги на подписанных целых числах.

  • Когда опция очищена, генератор кода производит полностью портативный, но менее эффективный код для реализации сдвигов правой арифметики.

Вы можете получить реализацию компилятора для арифметических правых сдвигов из документации компилятора. Если документация недоступна, можно определить это поведение путем эксперимента.

Обновление Релиза 14 Оборудования Строения

Если ваша модель была создана до релиза 14, и вы не обновили модель, параметр Configure current execution hardware device (TargetUnknown) значение 'on' по умолчанию.

Чтобы обновить Вашу модель, очистите коробку для Configuration Parameters> Hardware Implementation> Advanced parameters> Test hardware> <reservedrangesplaceholder0>.Or в Командном окне, напечатайте:

cs = getActiveConfigSet('your_model_name');
set_param(cs,'TargetUnknown','off');

Это обновление вашей модели:

  • Включает параметр Test Hardware is the same as production hardware (ProdEqTarget), устанавливая параметр равным 'on'.

  • Копирует параметр Production device vendor and type (ProdHWDeviceType) значение параметра Test device vendor and type (TargetHWDeviceType).

Чтобы завершить обновление:

  1. Снимите флажок для Configuration Parameters > Hardware Implementation > Advanced parameters > Test hardware > Test Hardware is the same as production hardware. Примените этот шаг, только если ваше производственное и тестовое оборудование отличается.

  2. Установите параметры в Configuration Parameters > Hardware implementation > Advanced parameters, чтобы соответствовать вашим производственным и тестовым системам.

  3. Сохраните модель.

Факторы о производственном оборудовании

Когда вы конфигурируете производственное оборудование, примите во внимание следующие точки:

  • Производственное оборудование может иметь размеры слов и другие характеристики оборудования, которые отличаются от компьютера разработчика MATLAB. Можно прототипировать код на оборудовании, которое отличается от производственного оборудования или компьютера разработчика MATLAB. При производстве кода генератор кода учитывает эти различия.

  • Продукт Simulink использует часть информации в производственном аппаратном строении. Эта информация позволяет симуляциям без генерации кода давать те же результаты, что и выполнение сгенерированного кода. Для примера результаты могут обнаружить условия ошибки, возникающие на производственном оборудовании, такие как аппаратное переполнение.

  • Генератор кода производит код, который обеспечивает bit-true согласие с результатами Simulink для целочисленных и фиксированных операций. Сгенерированный код, который эмулирует недоступные длины данных, запускается менее эффективно, чем без эмуляции. Эмуляция не влияет на согласие bit-true с Simulink для целого числа и результатов с фиксированной точкой.

  • Если вы изменяете окружения во время выполнения во время разработки приложения, перед генерацией или регенерацией кода перенастройте параметры аппаратной реализации для нового окружения во время выполнения. Когда код выполняется на оборудовании, для которого он не был сгенерирован, бит-истинное согласие не всегда достигается для результатов целого числа и операций с фиксированной точкой в симуляции, производственном коде и тестовом коде.

  • Чтобы скомпилировать код, сгенерированный из модели, используйте параметр Integer rounding mode на блоках модели, чтобы симулировать поведение округления компилятора C, который вы намереваетесь. Этот параметр появляется на панели Signal Attributes в диалоговых окнах параметров блоков, которые могут выполнять арифметику целого числа знаком, таких как блоки Product и n-D Lookup Table.

  • Для большинства блоков значение Целочисленного режима округления полностью определяет поведение округления. Для блоков, которые поддерживают данные с фиксированной точкой и самый простой режим округления, значение Signed integer division rounds to также влияет на округление. Для получения дополнительной информации смотрите Precision (Fixed-Point Designer).

  • Когда модели содержат блоки Model, конфигурируйте модели, на которые они ссылаются, чтобы использовать идентичные аппаратные настройки.

Тестирование Оборудования Факторов

По умолчанию тестовое аппаратное строение аналогично строению для производственной аппаратуры. Сгенерированный код можно использовать для проверки в окружении, идентичной производственному окружению.

Если тестовые и производственные окружения отличаются, можно сгенерировать код, который запускается на тестовом оборудовании, как если бы он выполнялся на производственном оборудовании:

  1. Чтобы включить тестовые аппаратные параметры, снимите флажок для Configuration Parameters > Hardware Implementation > Advanced parameters > Test hardware > Test hardware is the same as production hardware. Или, в типе Командного окна:

    cs = getActiveConfigSet('your_model_name');
    set_param(cs,'ProdEqTarget','off');
  2. Укажите типы устройств через тестовое оборудование (Target*) параметры.

Если вы выбираете системный целевой файл, который задает микропроцессор по умолчанию и его аппаратные свойства, эти значения и свойства по умолчанию появляются как начальные значения.

Параметры с одним возможным значением не могут быть изменены. Если вы изменяете свойства оборудования, проверяйте, что их значения согласуются с системным целевым файлом. В противном случае сгенерированный код может не скомпилироваться или выполнить, или может выполнить, но привести к неправильным результатам.

Пример настройки производственного оборудования, которая влияет на симуляцию в режиме Normal Mode

Изменение некоторых настроек производственного оборудования, например ProdLongLongMode и ProdIntDivRoundTo, может повлиять на результаты симуляции в режиме normal mode. В следующем примере моделируется сумматор с четырьмя входами. В первой симуляции ProdLongLongMode отключен. Во второй симуляции ProdLongLongMode включен. На графике выходов симуляции вы наблюдаете небольшие различия между выходными значениями в области значений временных шагов 125-175.

model = 'hwSettingEffect';
new_system(model) 
open_system(model)

% Create adder
pos = [140   140   200   340];
add_block('simulink/Math Operations/Add', ...
          [model '/sum_int32'], ...
          'Inputs','++++', ...
          'SaturateOnIntegerOverflow', ...
          'on', ...
          'Position', ...
          pos)

pos = [75   155   105   175];
add_block('built-in/Inport',[model '/In1'],'Position',pos)
set_param([model '/In1'], 'OutDataTypeStr', ...
          'int32','PortDimensions','1','SampleTime','1');
add_line(model, 'In1/1','sum_int32/1')

pos = [75   205   105   225];
add_block('built-in/Inport',[model '/In2'],'Position',pos)
set_param([model '/In2'], 'OutDataTypeStr', ...
           'int32','PortDimensions','1','SampleTime','1');
add_line(model, 'In2/1','sum_int32/2')

pos = [75   255   105   275];
add_block('built-in/Inport',[model '/In3'],'Position',pos)
set_param([model '/In3'], 'OutDataTypeStr', ...
          'int32','PortDimensions','1','SampleTime','1');
add_line(model, 'In3/1','sum_int32/3')

pos = [75   305   105   325];
add_block('built-in/Inport',[model '/In4'],'Position',pos)
set_param([model '/In4'], 'OutDataTypeStr', ...
           'int32','PortDimensions','1','SampleTime','1');
add_line(model, 'In4/1','sum_int32/4')

pos = [275   230   305   250];
add_block('built-in/Outport',[model '/Out1'],'Position',pos)
add_line(model, 'sum_int32/1','Out1/1')

% Specify input data
t = 0:200;
peakValue = 1.5e9;
in1 = peakValue * sin(t*2*pi/100);
in2 = peakValue * cos(t*2*pi/70);
in3 = -peakValue * sin(t*2*pi/40);
in4 = -peakValue * cos(t*2*pi/30);
set = Simulink.SimulationData.Dataset;
set = set.addElement(1, timeseries(int32(in1),t,'Name','sig1'));
set = set.addElement(2, timeseries(int32(in2),t,'Name','sig2'));
set = set.addElement(3, timeseries(int32(in3),t,'Name','sig3'));
set = set.addElement(4, timeseries(int32(in4),t,'Name','sig4'));

set_param(model, 'LoadExternalInput', 'on');
set_param(model, 'ExternalInput', 'set');

set_param(model, 'StopTime', '50');

% Disable production hardware setting and run first simulation
set_param(model, 'ProdLongLongMode', 'off');
[~, ~, y1] = sim(model, 200);

% Enable production hardware setting and run second simulation
set_param(model, 'ProdLongLongMode', 'on');
[~, ~, y2] = sim(model, 200);

plot([y1 y2]);
figure(gcf);

Различие в поведении происходит из-за типа данных аккумулятора в блоке Sum. Значение Accumulator data type параметров блоков установлено равным Inherit: Inherit via internal rule. В данном примере получившийся тип данных аккумулятора имеет ширину 64 бита, если используется C long long тип данных включен. В противном случае она составляет 32 бита в ширину. В зависимости от входных значений для блока sum, 32-битный аккумулятор может насыщаться, когда 64-битный аккумулятор не делает. Поэтому поведение в режиме normal mode может зависеть от ProdLongLongMode настройка. В обоих случаях поведение режима normal mode и поведение производственного оборудования совпадают побитово.

Похожие темы