Main Content

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

사용 패턴

Simulink If, elseif, else 구성에 대한 패턴

이러한 패턴은 if, elseif, else 구성에 사용됩니다.

함수Simulink 패턴

if, elseif, elseSwitch 블록이 사용될 때 구성됩니다.

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

Action Subsystem 사용 시 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 패턴

Action Subsystem을 사용한 케이스 구성.

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 Action Subsystem 사용

Switch 블록은 연관된 elseifelse 작업에 상수 값 할당만 포함되는 경우 간단한 if, elseif, else 구조를 모델링하는 데 사용됩니다.

예제 — 권장됨

간단한 if, elseif, else 구조의 경우 Switch 블록을 사용하세요.

예제 — 권장되지 않음

간단한 if, elseif, else 구조를 위해 IfIf Action Subsystem 블록을 사용합니다.

예제 — 권장됨

복잡한 if, elseif, else 구조의 경우 IfIf Action Subsystem 블록을 사용하세요.

예제 — 권장되지 않음

복잡한 if, elseif, else 구조에 Switch 블록을 사용합니다.

If, Elseif, Else Action Subsystem을 사용하여 여러 Switch 교체

조건 분기를 위해 Switch 블록을 자주 사용하는 것은 피해야 합니다. 대신 upper limit target를 사용해야 합니다(예: 최대 3개 레벨). 목표 값이 초과되면 if, elseif, else Action Subsystem을 사용하는 조건부 제어 흐름이 사용됩니다.

예제 — 권장되지 않음

네 가지 수준의 중첩.

예제 — 권장됨

네 번째 수준을 if Action Subsystem으로 설정하면 중첩이 단일 수준으로 제한됩니다.

예제 — 권장되지 않음

if Action Subsystem을 사용하여 나누지 않습니다.

C 코드 제한이 적용되는 경우 Atomic Subsystem + 함수 설정을 사용합니다. 이 경우 if, elseif, else Action Subsystem을 사용할 필요는 없지만 Switch 블록의 구성을 서브시스템에서 분할하고 캡슐화할 수 있습니다.

5단계 중첩 모델의 예 - 권장되지 않음

5단계 중첩 모델의 예 - 권장

Switch 블록에 중첩 계층을 피하는 설명 방법을 사용하십시오.

예시로 제공되었지만 if Action Subsystem은 일반적으로 고정 값을 전환하는 데 사용되지 않습니다. 이러한 권장 및 권장되지 않음 예제에서 사용자가 함수 변환 설정을 추가하지 않으면 생성된 C 코드는 동일합니다. (R2010b~R2013a에서 확인) C 코드는 제약이 없습니다.

조건부 제어 흐름을 사용하는 Action Subsystem의 사용 규칙

예제 — 권장됨

if Action Subsystem은 관련 작업에 상태 변수가 없으면 사용되지 않습니다.

예제 — 권장됨

5가지 중첩 수준을 사용하는 모델의 예입니다. 내부 상태가 없기 때문에 서브시스템을 사용한 계층화는 발생하지 않습니다.

예제 — 권장됨

Atomic Subsystem은 Action Subsystem을 사용하지 않고 Switch 블록의 양쪽을 분할하는 데 사용됩니다.

예제 — 권장되지 않음

불필요한 Action Subsystem을 사용하여 계층화합니다.

Action Subsystem을 사용하여 기능을 달성할 수 있는 경우 Action Subsystem을 사용한 계층화는 수행되지 않습니다.

권장되지 않음 예에서는 세 번째 레벨의 최하위 레벨인 Unit Delay 블록이 초기화되면 조건부 서브시스템 초기화가 먼저 상위 첫 번째 레벨에서 한 번 실행되고 두 번째 레벨에서 다시 실행되어 초기 값 설정의 총 두 배에 해당합니다. 불필요한 코드 생성을 방지하려면 상태 변수가 존재하지 않는 수준에 있는 조건부 서브시스템에는 나열하지 않는 것이 좋습니다.

이는 모델의 복잡성을 일정 수준까지 떨어뜨려 감소시킨다는 개념에 기반을 두고 있습니다. 이 규칙의 목적은 불필요한 초기화 실행을 방지하는 것입니다.

분기 조건 중첩이 깊은 구조를 갖는 시스템 분기의 경우 함수 변환을 사용하여 분할하여 코드 분기 중첩을 줄입니다. Switch 블록 전후의 함수는 각각의 서브시스템으로 구분되며, 원자 서브시스템+함수에는 함수 설정이 적용됩니다. 이로 인해 의도하지 않은 구현이 발생하고 불필요한 RAM 요구 사항이 발생할 수 있다는 점에 유의하세요.

오류 정보 테스트

Stateflow®에 사용되는 기능(그래픽 기능, MATLAB® 기능 등)에서 오류가 발생하면 오류 정보는 테스트를 용이하게 하는 모델 구조로 변환되어야 합니다.

함수에서 반환된 오류 정보를 검토하지 않으면 의도하지 않은 동작이 발생할 수 있습니다.

예제 — 권장됨

오류 정보는 모델 구조에 통합되어 사용자가 오류를 검토하고 대응할 수 있습니다.

예제 — 권장되지 않음

오류 정보는 모델 구조에 통합되지 않습니다.

조건에 대한 순서도 패턴

이러한 패턴은 Stateflow 흐름도 내의 조건에 사용됩니다.

함수플로우 차트 패턴

하나의 조건.

[condition]

최대 3개의 조건(약식)입니다.

(이 형식에서는 다른 논리 연산자를 사용할 수 없습니다. 대신 하위 조건을 사용하세요.)

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

두 개 이상의 조건 동작, 여러 줄 형식.

(한 줄에 2개 이상의 조건 동작은 허용되지 않습니다.)

action1; ... 
action2; ... 
action3; ... 

시각적으로 구분된 조건 동작입니다.

(이 형태는 이전 패턴과 결합될 수 있습니다.)

action1a; 
action1b; 
action2; 
action3;

If, Elseif, Else 구성에 대한 순서도 패턴

이러한 패턴은 Stateflow 흐름도 내의 If 구성에 사용됩니다.

함수플로우 차트 패턴

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 루프 구성

for ( index = 0;
			index < number_of_loops;
			index++ )
{
	action;
}

while 루프 구성

while ( condition )
{
	action;
}

While 루프 구성을 수행합니다.

do
{
	action;
}
while ( condition )

조건에 대한 상태 머신 패턴

이러한 패턴은 Stateflow 상태 머신 내의 조건에 사용됩니다.

함수상태 머신 패턴

하나의 조건

(condition)

최대 3개 조건, 약식

(이 형식에서는 다른 논리 연산자를 사용할 수 없습니다. 대신 하위 조건을 사용하세요.)

(condition1 && condition2) 
(condition1 || condition2)

두 개 이상의 조건, 여러 줄 형식

하위 조건은 괄호로 묶인 모두 동일한 유형의 논리 연산 집합입니다.

(이 형식에서는 다른 연산자를 사용할 수 없습니다. 대신 하위 조건을 사용하세요.)

(condition1 ... 
&& condition2 ... 
&& condition3) 

(condition1 ...
|| condition2 ...
|| condition3)

천이 동작에 대한 상태 머신 패턴

이러한 패턴은 Stateflow 상태 머신 내의 천이 동작에 사용됩니다.

함수상태 머신 패턴

하나의 천이 동작.

action;

두 개 이상의 천이 동작, 여러 줄 형식

(한 줄에 2개 이상의 천이 동작은 허용되지 않습니다.)

action1; 
action2; 
action3;

jc_0321상태 계층화 제한

단일 뷰어(하위 뷰어) 내에서 다중 계층화는 단일 뷰(하위 뷰)에 대한 제약 조건을 정의하여 제한됩니다. 하위 차트는 정의된 제약 목표를 초과할 때 화면을 전환하는 데 사용됩니다.

예제 — 권장됨

네 번째 수준은 하위 차트에 캡슐화됩니다.

예제 — 권장되지 않음

제약조건 목표는 3개 레벨로 설정되어 있으나 Level_4_a와 Level_4_b는 3개 이상의 레벨을 갖고 중첩되어 있습니다.

Stateflow 컨테이너당 상태 수

Stateflow 컨테이너당 상태 수는 다이어그램에서 볼 수 있는 상태 수에 따라 결정됩니다. 모든 상태는 표시되고 읽을 수 있어야 합니다.

Stateflow의 함수 호출

호출 대상의 Function-Call Subsystem에 상태가 존재하고 호출자의 상태가 비활성화될 때 상태의 "재설정"이 필요한 경우 호출자는 바인딩 작업을 사용해야 합니다.

Stateflow에서 사용 가능한 함수 유형

Stateflow에 사용되는 함수 유형은 필요한 처리에 따라 달라집니다.

그래픽 기능의 경우 다음을 사용하십시오.

  • If, elseif, else 논리

Simulink® 함수의 경우 다음을 사용하세요.

  • 전달 함수

  • Integrator

  • 테이블 룩업

MATLAB 함수의 경우 다음을 사용하세요.

  • 복잡한 방정식

  • If, elseif, else 논리