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
структура, используйте блок Switch.
Пример — Не рекомендуемый
Используя If и If Action Subsystem блокируется для простого if
, elseif
, else
структура.
Пример — рекомендуемый
Для комплексного if
, elseif
, else
структура, используйте блоки If Action Subsystem и If.
Пример — Не рекомендуемый
Используя блок Switch для комплексного if
, elseif
, else
структура.
If
, Elseif
, Else
Подсистема действия, чтобы заменить несколько переключателейЧастого использования блока Switch для раздвоения условия нужно избежать. Вместо этого цель верхнего предела должна использоваться (такие максимум как три уровня). Когда целевое значение превышено, условный поток управления с помощью if
, elseif
, else
подсистема действия должна использоваться.
Пример — Не рекомендуемый
Четыре уровня вложения.
Пример — рекомендуемый
Путем установки четвертого уровня как if
подсистема действия, вложение ограничивается одним уровнем.
Пример — Не рекомендуемый
Не делясь при помощи if
подсистема действия.
Используйте атомарную подсистему + установка функции, когда предел кода С будет применен. В этом случае нет никакой потребности использовать if
, elseif
, else
подсистема действия, но настройка блока Switch может разделяться и инкапсулироваться в подсистеме.
Пример модели с пятью уровнями вложения — Не рекомендуемый
Пример модели с пятью уровнями вложения — Рекомендуемый
Используйте метод описания, который старается не разделять на уровни вложения в блоке Switch.
В то время как обеспечено как пример, if
подсистема действия обычно не используется для переключения фиксированного значения. В них Рекомендуемых и Не Рекомендуемые примеры, сгенерированный код C будет тем же самым, если пользователь не добавит функциональную установку преобразования. (Подтвержденный в R2010b к R2013a), код С неограничен.
Пример — рекомендуемый
if
подсистема действия не должна использоваться, когда связанные действия не будут иметь переменной состояния.
Пример — рекомендуемый
Пример модели с помощью пяти уровней вложения. Разделение на уровни при помощи подсистемы не происходит, потому что нет никакого внутреннего состояния.
Пример — рекомендуемый
Атомарная подсистема используется, чтобы разделить любую сторону блока Switch, не используя подсистему действия.
Пример — не рекомендуемый
Разделение на уровни с помощью ненужной подсистемы действия.
Если функция может быть достигнута при помощи подсистемы действия, то разделение на уровни использования подсистемы действия не выполняется.
В Не Рекомендуемом примере, когда самый низкий блок Unit Delay уровня на третьем уровне инициализируется, условная инициализация подсистемы сначала выполняется одно время на верхнем первом уровне, и с другой стороны на втором уровне в течение в общей сложности двух раз настроек начального значения. Чтобы предотвратить генерацию ненужного кода, рекомендуется, чтобы листинг не был сделан в условных подсистемах, которые находятся на уровнях, где переменная состояния не существует.
Это основано на концепции, что сложность модели уменьшается путем припадания до уровня. Цель правила состоит в том, чтобы избежать выполнения ненужных инициализаций.
Для раздвоения систем, где вложенное множество условия раздвоения имеет глубинную структуру, разделенную при помощи функциональных преобразований, чтобы уменьшить вложение раздвоения кода. Функции до и после блока Switch разделены на соответствующие подсистемы, и функциональные настройки применяются к атомарному subsystem+function. Следует иметь в виду, возможно, что это может привести к неумышленной реализации и ненужным требованиям RAM.
Когда функции, которые используются в Stateflow® (графические функции, MATLAB® функции, и т.д.) результаты по ошибке, информация об ошибке должна быть преобразована в структуру модели, которая упростит тестирование.
Рассмотрение информации об ошибке, возвращенной функциями, может привести к непреднамеренному поведению.
Пример — рекомендуемый
Информация об ошибке включена в структуру модели, позволив пользователю рассмотреть и ответить на ошибки.
Пример — не рекомендуемый
Информация об ошибке не включена в структуру модели.
Эти шаблоны должны использоваться для условий в рамках блок-схем Stateflow.
Функция | Шаблон блок-схемы |
Одно условие.
[condition] |
|
До трех условий, краткая форма. (Использование различных логических операторов в этой форме не позволено. Используйте подусловия вместо этого.) [condition1 && condition2 && condition3] [condition1 || condition2 || condition3] |
|
Два или больше условия, многострочная форма. (Использование различных логических операторов в этой форме не позволено. Используйте подусловия вместо этого.) [condition1 ... && condition2 ... && condition3] [condition1 ... || condition2 ... || condition3] |
|
Условия с sub условиями. (Использование различных логических операторов, чтобы соединить подусловия не позволено. Использование скобок обязательно.) [(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
for ( index = 0; index < number_of_loops; index++ ) { action; } |
|
Построение цикла с условием продолжения
while ( condition ) { action; } |
|
Сделайте построение Цикла с условием продолжения. do { action; } while ( condition ) |
|
Эти шаблоны должны использоваться для условий в машинах состояния Stateflow
Функция | Шаблон конечного автомата |
Одно условие (condition) |
|
До трех условий, краткая форма (Использование различных логических операторов в этой форме не позволено, используйте sub условия вместо этого), (condition1 && condition2) (condition1 || condition2) |
|
Два или больше условия, многострочная форма Подусловием является набор логических операций, весь тот же тип, заключенный в круглые скобки. (Использование различных операторов в этой форме не позволено, используйте sub условия вместо этого.) (condition1 ... && condition2 ... && condition3) (condition1 ... || condition2 ... || condition3) |
|
Эти шаблоны должны использоваться для действий перехода в машинах состояния Stateflow.
Функция | Шаблон конечного автомата |
Одно действие перехода. action; |
|
Два или больше действия перехода, многострочная форма (Два или больше действия перехода в одной линии не позволены.) action1; action2; action3; |
|
В одном средстве просмотра (подсредство просмотра) несколько разделение на уровни должно быть ограничено путем определения ограничений для одного представления (подпредставление). Субдиаграммы должны использоваться, чтобы переключить экран, когда заданные ограничительные цели будут превышены.
Пример — рекомендуемый
Четвертый уровень инкапсулируется в субдиаграмме.
Пример — не рекомендуемый
Ограничительная цель устанавливается к трем уровням, но Level_4_a и Level_4_b имеют больше чем три уровня и вкладываются.
Количество состояний на контейнер Stateflow должно быть определено количеством состояний, которые могут быть просмотрены в схеме. Все состояния должны отобразиться и быть читаемыми.
Если состояние будет существовать в Function-Call Subsystem цели вызова, и “сброс” состояния требуется, когда состояние вызывающей стороны станет неактивным, вызывающая сторона должна использовать связывать действие.
Типы функций, используемые в Stateflow, должны зависеть от необходимой обработки.
Для графических функций используйте:
If
, elseif
, else
логика
Для Simulink® функции, используйте:
Передаточные функции
Интеграторы
Поиск по таблице
Для функций MATLAB используйте:
Комплексные уравнения
If
, elseif
, else
логика