exponenta event banner

Шаблоны использования

Шаблоны Simulink для If, elseif, else Конструкции

Эти шаблоны должны использоваться для if, elseif, else конструкции.

ФункцияУзор симулятора

if, elseif, else при использовании блока Switch.

if (If_Condition)
{
	output_signal = If_Value;
}
else if (Else_If_Condition)
{
	output_signal = Else_If_Value;
}
else
{
	output_signal = Else_Value;
}

if, elseif, else конструирование при использовании и действие подсистемы

if (Fault_1_Active & Fault_2_Active)
{
	ErrMsg = SaftyCrit;
}
else if (Fault_1_Active | Fault_2_Active)
{
	ErrMsg = DriverWarn;
}
else
{
	ErrMsg = NoFaults;

Шаблоны Simulink для case Конструкции

Эти шаблоны должны использоваться для case конструкции.

ФункцияОбразец симулятора

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

switch (PRNDL_Enum)
{
	case 1
		TqEstimate = ParkV;
		break;
	case 2
		TqEstimate = RevV;	
		break;
	default 
		TqEstimate = NeutralV;
		break;
}

Конструкция варианта с использованием блока мультипортового коммутатора.

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 Подсистемы действий

Блок переключения должен использоваться для простого моделирования if, elseif,else структуры при связывании elseif и else действия включают только назначение постоянных значений.

Пример - Рекомендуется

Для простого if, elseif, else используйте блок Switch.

Пример - не рекомендуется

Использование блоков подсистемы действий If и If для простого if, elseif, else структура.

Пример - Рекомендуется

Для комплекса if, elseif, else используйте блоки If и If Action Subsystem.

Пример - не рекомендуется

Использование блока Switch для комплекса if, elseif, else структура.

Использование If, Elseif, Else Подсистема действий для замены нескольких коммутаторов

Следует избегать частого использования блока переключателя для раздвоения условий. Вместо этого используется верхний предел (например, до трех уровней). При превышении целевого значения условный поток управления использует if, elseif, else должна использоваться подсистема действий.

Пример - не рекомендуется

Четыре уровня вложенности.

Пример - Рекомендуется

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

Пример - не рекомендуется

Не деление с помощью if подсистема действий.

При применении предела кода C используйте параметр atomic subsystem + function. В этом случае нет необходимости использовать if, elseif, else подсистема действий, но конфигурация блока коммутатора может быть разделена и инкапсулирована в подсистему.

Пример модели с пятью уровнями вложенности - не рекомендуется

Пример модели с пятью уровнями вложенности - рекомендуется

Используйте метод описания, который позволяет избежать слоёв вложенности в блоке Switch.

В то время как предоставляется в качестве примера, if подсистема действий обычно не используется для переключения фиксированного значения. В этих примерах рекомендуется и не рекомендуется генерируемый код C будет таким же, если пользователь не добавит параметр преобразования функций. (Подтверждено в R2010b к R2013a) Код C не ограничен.

Правила использования для подсистем действий с использованием потока условного управления

Пример - Рекомендуется

Один if подсистема действий не должна использоваться, если связанные действия не имеют переменной состояния.

Пример - Рекомендуется

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

Пример - Рекомендуется

Атомарная подсистема используется для разделения любой стороны блока коммутатора без использования подсистемы действий.

Пример - не рекомендуется

Многоуровневое использование лишней подсистемы действий.

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

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

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

Для бифуркации систем, в которых гнездо условий бифуркации имеет глубокую структуру, разделение с использованием преобразований функций для уменьшения вложенности бифуркации кода. Функции до и после блока 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 конструкция

if (condition){
	action;
}

If, else конструкция

if (condition) {
	action1; 
}
else {
	action2; 
}

If, elseif, else конструкция

if (condition1) {
	action1;
}
else if (condition2) {
	action2; 
}
else if (condition3) {
	action3;
}
else {
	action4;
}

Каскад if конструкция.

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;

jc_0321Limiting Многоуровневое управление состоянием

В пределах одного просмотра (subviewer) несколько слоев должны быть ограничены путем определения ограничений для одного вида (subview). Вложенные диаграммы должны использоваться для переключения экрана при превышении определенных целей ограничения.

Пример - Рекомендуется

Четвертый уровень инкапсулируется в подшаге.

Пример - не рекомендуется

Цель ограничения устанавливается на три уровня, но Level_4_a и Level_4_b имеют более трех уровней и вложены.

Количество состояний на контейнер потока состояний

Количество состояний на контейнер Stateflow определяется количеством состояний, которое можно просмотреть на диаграмме. Все состояния должны быть видимыми и читаемыми.

Вызов функции от Stateflow

Если состояние существует в подсистеме Function-Call целевого объекта вызова, и требуется «сброс» состояния, когда состояние вызывающего абонента становится неактивным, вызывающий абонент должен использовать действие привязки.

Типы функций, доступные в потоке состояний

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

Для графических функций используйте:

  • If, elseif, else логика

Для функций Simulink ® используйте:

  • Передаточные функции

  • Интеграторы

  • Поиск таблицы

Для функций MATLAB используйте:

  • Комплексные уравнения

  • If, elseif, else логика