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

Шаблоны Simulink для If, elseif, else Построения

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

ФункцияШаблон Simulink

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 построения.

ФункцияШаблон 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 для логических построений

Эти шаблоны должны использоваться для логических построений.

Соединительная нормальная форма

Дизъюнктивная нормальная форма

Шаблоны Simulink для векторных сигналов

Эти шаблоны должны использоваться для векторных сигналов.

ФункцияШаблон 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 создать

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;
}

Построения цикла for шаблонов блок-схемы

Эти шаблоны должны использоваться, чтобы создать построения цикла в блок-схемах 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;

Разделение на уровни состояния jc_0321Limiting

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

Пример — рекомендуемый

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

Пример — не рекомендуемый

Ограничительная цель устанавливается к трем уровням, но Level_4_a и Level_4_b имеют больше чем три уровня и вкладываются.

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

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

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

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

Функциональные типы, доступные в Stateflow

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

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

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

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

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

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

  • Поиск по таблице

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

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

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