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

Шаблоны 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]; 
}

Сохранение минимального значения/максимального значения

Использование Switch и 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 конструкция

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

Шаблоны Графика потока для конструкций Case

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

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

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

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

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

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

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

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

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

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

  • Интерполяция таблиц

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

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

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