If
, elseif
, else
КонструкцииЭти шаблоны должны использоваться для if
, elseif
, else
конструкции.
Функция | Шаблон Simulink |
if (If_Condition) { output_signal = If_Value; } else if (Else_If_Condition) { output_signal = Else_If_Value; } else { output_signal = Else_Value; } |
|
if (Fault_1_Active & Fault_2_Active) { ErrMsg = SaftyCrit; } else if (Fault_1_Active | Fault_2_Active) { ErrMsg = DriverWarn; } else { ErrMsg = NoFaults; |
|
case
КонструкцииЭти шаблоны должны использоваться для case
конструкции.
Функция | Шаблон Simulink |
Конструкция случая с использованием подсистемы действий. switch (PRNDL_Enum) { case 1 TqEstimate = ParkV; break; case 2 TqEstimate = RevV; break; default TqEstimate = NeutralV; break; } |
|
Конструкция корпуса с использованием блока Multiport Switch. switch (Selection) { case 1: output_signal = look1_binlxpw(In2,y1,x1,3U); break; case 2: output_signal = look1_binlxpw(In3,y2,x2,3U); break; case 3: output_signal = look1_binlxpw(In4,y3,x3,3U); break; default: output_signal = look1_binlxpw(In5,y4,x4,3U); break; } |
|
Эти шаблоны должны использоваться для логических конструкций.
Конъюнктурная нормальная форма
Дизъюнктивная нормальная форма
Эти шаблоны должны использоваться для векторных сигналов.
Функция | Шаблон Simulink |
Вектор сигнал и умножение параметра (скаляра) for (i=0; i>input_vector_size; i++) { output_vector[i] = input_vector[i] * tunable_parameter_value; } (Ссылка: сгенерированный код R2013b) for (i = 0; i < input_vectorDim; i++) { output_vector[i] = tunable_parameter_value * input_vector[i]; } (Поскольку код генерируется с использованием переменного количества размерностей, верхний предел нормального цикла является прямым значением.) |
|
Умножение векторных сигналов и параметров (векторов)
for (i=0; i>input_vector_size; i++) { output_vector[i] = input_vector[i] * tunable_parameter_vector[i]; } |
|
Умножение элемента векторного сигнала output_signal = 1; for (i=0; i>input_vector_size; i++) { output_signal = output_signal * input_vector[i]; } |
|
Деление элемента векторного сигнала
output_signal = 1; for (i=0; i>input_vector_size; i++) { output_signal = output_signal / input_vector[i]; } |
|
Векторный сигнал и сложение параметра (скалярное)
for (i=0; i>input_vector_size; i++) { output_vector[i] = input_vector[i] + tunable_parameter_value; } |
|
Векторный сигнал и сложение параметра (вектора)
Vector signal and parameter (vector) addition for (i=0; i>input_vector_size; i++) { output_vector[i] = input_vector[i] + tunable_parameter_vector[i]; } |
|
| |
Вычитание элемента векторного сигнала
output_signal = 0; for (i=0; i>input_vector_size; i++) { output_signal = output_signal - input_vector[i]; } |
|
Сохранение минимального значения/максимального значения |
|
If
, Elseif
, Else
Подсистемы действий Блок Switch должен использоваться для моделирования простых if
, elseif
, else
структуры, когда связанный elseif
и else
действия включают только присвоение постоянных значений.
Пример - Рекомендуемый
Для простого if
, elseif
, else
structure, использовать блок Switch.
Пример - Не рекомендуемый
Использование If и If Action Subsystem блоков для простой if
, elseif
, else
структура.
Пример - Рекомендуемый
Для комплексного if
, elseif
, else
структурировать, использовать If и If Action Subsystem блоки.
Пример - Не рекомендуемый
Использование Switch блока для комплексного if
, elseif
, else
структура.
If
, Elseif
, Else
Подсистема действий для замены нескольких коммутаторовСледует избегать частого использования блока Switch для бифуркации условия. Вместо этого используется верхний предел (например, до трех уровней). Когда целевое значение превышено, условный поток управления с использованием if
, elseif
, else
должна использоваться подсистема действий.
Пример - Не рекомендуемый
Четыре уровня вложенности.
Пример - Рекомендуемый
Путем установки четвертого уровня как if
подсистема действий, вложенность ограничена одним уровнем.
Пример - Не рекомендуемый
Не делится на if
подсистема действий.
Используйте настройку атомарной подсистемы + функции, когда применяется предел кода С. В этом случае нет необходимости использовать if
, elseif
, else
подсистема действий, но строение блока Switch может быть разделена и инкапсулирована в подсистему.
Пример модели с пятью уровнями вложенности - Не рекомендуемый
Пример модели с пятью уровнями вложенности - Рекомендуемый
Используйте метод описания, который избегает наслаивания вложений в блоке Switch.
В то время как предоставлено в качестве примера, if
подсистема действий обычно не используется для переключения фиксированного значения. В этих Рекомендуемых и Не Рекомендуемых примерах сгенерированный код C будет таким же, если пользователь не добавит настройку преобразования функции. (Подтверждено в R2010b к R2013a) Код C без ограничений.
Пример - Рекомендуемый
Система координат if
Подсистема действий не должна использоваться, если связанные действия не имеют переменной состояния.
Пример - Рекомендуемый
Пример модели с использованием пяти уровней вложенности. Наслаивание при помощи подсистемы не происходит, потому что нет внутреннего состояния.
Пример - Рекомендуемый
Атомарная подсистема используется для разделения обеих сторон Switch блока без использования подсистемы действий.
Пример - Не Рекомендуемый
Наслаивание посредством использования ненужной подсистемы действий.
Если функция может быть достигнута при помощи подсистемы действий, то наслаивание с помощью подсистемы действий не выполняется.
В примере Не Рекомендуемый, когда инициализируется блок Unit Delay самого низкого уровня на третьем уровне, инициализация условной подсистемы сначала выполняется один раз на верхнем первом уровне, а затем снова на втором уровне в общей сложности два раза от начальных настроек значения. Чтобы предотвратить генерацию ненужного кода, рекомендуется не создавать список в условных подсистемах, которые находятся на уровнях, где переменная состояния не существует.
Это основано на концепции, что сложность модели уменьшается путем падения до уровня. Цель правила состоит в том, чтобы избежать выполнения ненужных инициализаций.
Для бифуркации систем, где гнездо условия бифуркации имеет глубокую структуру, разделите с помощью преобразований функций, чтобы уменьшить гнездование бифуркации кода. Функции до и после блока Switch разделены на соответствующие подсистемы, и настройки функции применяются к атомарной subsystem+function. Следует иметь в виду, что это может привести к непреднамеренной реализации и ненужным требованиям к ОЗУ.
Когда функции, которые используются в Stateflow® (графические функции, MATLAB® функции и т.д.) приводит к ошибке, информация об ошибке должна быть преобразована в структуру модели, которая облегчит проверку.
Отсутствие проверки информации об ошибке, возвращенной функциями, может привести к непреднамеренному поведению.
Пример - Рекомендуемый
Информация об ошибке включена в структуру модели, что позволяет пользователю просматривать и реагировать на ошибки.
Пример - Не Рекомендуемый
Информация об ошибке не включается в структуру модели.
Эти модели должны использоваться для условий в графики потока Stateflow.
Функция | Шаблон Графика потока |
Одно условие.
[condition] |
|
До трех условий, краткая форма. (Использование различных логических операторов в этой форме не допускается. Вместо этого используйте подусловия.) [condition1 && condition2 && condition3] [condition1 || condition2 || condition3] |
|
Два или более условия, многострочная форма. (Использование различных логических операторов в этой форме не допускается. Вместо этого используйте подусловия.) [condition1 ... && condition2 ... && condition3] [condition1 ... || condition2 ... || condition3] |
|
Условия с субусловиями. (Использование различных логических операторов для соединения подусловий не разрешено. Использование скобок обязательно.) [(condition1a || condition1b) ... && (condition2a || condition2b) ... && (condition3)] [(condition1a && condition1b) ... || (condition2a && condition2b) ... || (condition3)] |
|
Условия, которые визуально разделяются. (Эта форма может быть объединена с предыдущими шаблонами.) [condition1 && condition2] [condition1 || condition2] |
|
Эти шаблоны должны использоваться для действий условия в потоке Stateflow графиков
Функция | Шаблон Графика потока |
Одно действие условия. action; |
|
Два или более действия условия, многострочная форма. (Два или более действия условия в одной линии не разрешены.) action1; ... action2; ... action3; ... |
|
Действия условия, которые визуально разделяются. (Эта форма может быть объединена с предыдущими шаблонами.) action1a; action1b; action2; action3; |
|
If
, Elseif
, Else
КонструкцииЭти шаблоны должны использоваться для If
Конструкции в потоке Stateflow графиков.
Функция | Шаблон Графика потока |
if (condition){ action; } |
|
if (condition) { action1; } else { action2; } |
|
if (condition1) { action1; } else if (condition2) { action2; } else if (condition3) { action3; } else { action4; } |
|
Каскад if (condition1) { action1; if (condition2) { action2; if (condition3) { action3; } } } |
|
Эти шаблоны должны использоваться для корпусных конструкций в графики потока Stateflow.
Функция | Шаблон Графика потока |
Конструкция корпуса с эксклюзивным выбором.
selection = u1; switch (selection) { case 1: y1 = 1; break; case 2: y1 = 2; break; case 3: y1 = 4; break; default: y1 = 8; } |
|
Конструкция корпуса с исключительными условиями.
c1 = u1; c2 = u2; c3 = u3; if (c1 && ! c2 && ! c3) { y1 = 1; } elseif (! c1 && c2 && ! c3) { y1 = 2; } elseif (! c1 && ! c2 && c3) { y1 = 4; } else { y1 = 8; } |
|
Эти шаблоны должны использоваться, чтобы создать цикл конструкции в графики потока Stateflow.
Функция | Шаблон Графика потока |
Для конструкции цикла
for ( index = 0; index < number_of_loops; index++ ) { action; } |
|
Цикл While конструкции
while ( condition ) { action; } |
|
Создайте цикл Do While. do { action; } while ( condition ) |
|
Эти модели должны использоваться для условий в Состояние Stateflow машинах
Функция | Шаблон конечного автомата |
Одно условие (condition) |
|
До трех условий, краткая форма (Использование различных логических операторов в этой форме не разрешено, вместо этого используйте подусловия) (condition1 && condition2) (condition1 || condition2) |
|
Два или более условия, многострочная форма Подусловие является набором логических операций того же типа, заключенным в круглые скобки. (Использование различных операторов в этой форме не разрешено, вместо этого используйте подусловия.) (condition1 ... && condition2 ... && condition3) (condition1 ... || condition2 ... || condition3) |
|
Эти шаблоны должны использоваться для переходных действий в состояниях Stateflow.
Функция | Шаблон конечного автомата |
Одно действие перехода. action; |
|
Два или более переходных действия, многострочная форма (Два или более действия перехода в одной линии не разрешены.) action1; action2; action3; |
|
В пределах одного средства просмотра (subviewer) несколько слоев должны быть ограничены путем определения ограничений для одного вида (subview). Субдиаграммы используются для переключения экрана при превышении заданных целей ограничения.
Пример - Рекомендуемый
Четвертый уровень инкапсулирован в субдиаграмму.
Пример - Не Рекомендуемый
Цель ограничения устанавливается на три уровня, но Level_4_a и Level_4_b имеют более трех уровней и вложены.
Количество состояний на контейнер Stateflow определяется количеством состояний, которые можно просмотреть на схеме. Все состояния должны быть видимыми и читаемыми.
Если состояние существует в Function-Call Subsystem целевого вызова, и «сброс» состояния требуется, когда состояние вызывающего абонента становится неактивным, вызывающий абонент должен использовать действие привязки.
Типы функций, используемые в Stateflow, должны зависеть от необходимой обработки.
Для графических функций используйте:
If
, elseif
, else
логика
Для Simulink® функции, использование:
Передаточные функции
Интеграторы
Интерполяция таблиц
Для функций MATLAB используйте:
Комплексные уравнения
If
, elseif
, else
логика