Stateflow 차트에서 Simulink 함수 재사용하기
Simulink® 함수는 사용자가 상태 동작과 천이 동작에서 Simulink 서브시스템을 호출할 수 있도록 해 주는 그래픽 객체입니다. Simulink 함수는 MATLAB®의 독립 실행형 Stateflow® 차트에서 지원되지 않습니다.
Simulink 함수는 설계의 효율성을 증진하고 모델의 가독성을 향상할 수 있습니다. 일반적인 응용 사례는 다음과 같습니다.
Simulink 블록을 필요로 하는 함수를 정의
여러 제어기의 실행 스케줄링
Stateflow 차트의 Simulink 함수가 제공하는 이점은 다음과 같습니다.
Function-Call Subsystem 블록 없음
출력 이벤트 없음
신호 선 없음
Simulink 함수는 차트, 상태 또는 서브차트의 어디에나 있을 수 있습니다. 함수의 위치에 따라 함수를 호출할 수 있는 상태와 천이가 결정됩니다.
하나의 상태 또는 서브차트와, 그 하위 상태 내에서만 함수를 호출하려면 해당 상태 또는 서브차트에 Simulink 함수를 배치하십시오. 이 함수는 해당 상태 또는 서브차트의 부모에서 이름이 동일한 다른 모든 함수를 재정의합니다.
차트의 어디서나 함수를 호출하려면 차트 수준에 Simulink 함수를 배치하십시오.
모델에 있는 임의의 차트에서 함수를 호출하려면 Simulink Function (Simulink) 블록을 사용하여 함수를 Simulink 캔버스에 직접 정의하십시오. 자세한 내용은 Simulink Functions Overview (Simulink) 항목을 참조하십시오.
Simulink 함수에서 Stateflow 데이터에 액세스하려면 해당 데이터를 Simulink 함수에 대한 입력으로 포함시켜야 합니다.
이 Simulink 함수의 이름은 sim_fcn입니다. 이 함수는 3개의 인수(a, b, c)를 받고 2개의 출력값(x, y)을 반환합니다.

이 함수에는 첫 번째 인수에 25의 이득을 곱하고 나머지 두 인수를 복소수 출력 신호로 결합하는 Simulink 서브시스템이 포함되어 있습니다.

Simulink 함수를 정의한 후에는 Stateflow 차트 또는 Simulink 모델의 어느 곳에나 배치할 수 있습니다. 또한, 이 함수는 동일한 모델이나 다른 모델 내에서 원하는 횟수만큼 재사용할 수 있습니다.
참고
모델 참조 내의 Stateflow 차트에서 전역 Simulink Function을 호출할 수 없습니다. 이 문제를 해결하려면 Stateflow 차트에 새 Simulink Function을 만드십시오. 이 Simulink Function 내부에 원래의 전역 Simulink Function을 호출하는 Function Caller 블록을 포함하십시오. Function Caller 블록에 대한 자세한 내용은 Function Caller (Simulink) 항목을 참조하십시오.
Simulink 함수 정의하기
객체 팔레트에서 Simulink 함수 아이콘
을 클릭합니다.차트 캔버스에서 새 Simulink 함수의 위치를 클릭합니다.
함수의 시그니처 레이블을 입력합니다.
함수의 시그니처 레이블은 함수의 이름과 인수 및 반환 값의 형식 이름을 지정합니다. 시그니처 레이블의 구문은 다음과 같습니다.
여러 개의 반환 값과 여러 개의 입력 인수를 지정할 수 있습니다. 각 반환 값과 입력 인수는 스칼라이거나, 벡터이거나, 값으로 구성된 행렬일 수 있습니다. 반환 값이 1개뿐인 함수의 경우 시그니처 레이블에서 대괄호를 생략하십시오.[return_val1,return_val2,...] = function_name(arg1,arg2,...)모든 인수와 반환 값에는 고유한 변수 이름을 사용해야 합니다.
함수를 프로그래밍하기 위해 함수 상자를 더블 클릭하여 Simulink 편집기를 엽니다. 처음에 편집기는 함수 호출 Trigger (Simulink) 블록 한 개와 함수 시그니처에 부합하는 Inport (Simulink) 블록 및 Outport (Simulink) 블록을 포함합니다. Trigger 블록은 삭제할 수 없습니다.
Simulink 편집기에서, 블록을 추가하여 Simulink 서브시스템을 만들고 Inport 블록과 Outport 블록에 연결합니다.
Inport 블록과 Outport 블록을 구성합니다.
각 블록을 더블 클릭하여 블록 파라미터 대화 상자를 엽니다.
신호 특성 탭에서 입력 파라미터 또는 반환 값의 데이터형과 포트 차원을 입력합니다.
확인을 클릭합니다.
참고
Simulink 함수의 Inport 블록은 데이터형과 포트 차원을 상속할 수 없습니다. 자세한 내용은 Simulink 함수 사용 지침 항목을 참조하십시오.
상태와 천이에서 Simulink 함수 호출하기
임의의 상태 동작이나 천이 동작 또는 다른 함수에서 Simulink 함수를 호출할 수 있습니다.
Simulink 함수를 호출하려면 함수 시그니처를 사용하고 함수 시그니처에 각 형식 인수에 대한 인수 값을 포함하십시오.
[return_val1,return_val2,...] = function_name(arg1,arg2,...)두 인수의 데이터형이 다른 경우 이 함수는 인수를 형식 인수의 데이터형으로 형변환합니다.
Simulink 함수의 속성 지정하기
Simulink 함수의 속성은 블록 파라미터 대화 상자에서 수정할 수 있습니다.
Stateflow 편집기에서 Simulink 함수를 마우스 오른쪽 버튼으로 클릭합니다.
속성을 선택합니다.
Simulink 함수 속성을 편집합니다.
이러한 속성은 모델 탐색기에서도 수정할 수 있습니다. 자세한 내용은 Model Explorer (Simulink) 항목을 참조하십시오.
Simulink 함수 속성에 대한 설명은 Subsystem (Simulink) 항목을 참조하십시오.
Simulink 함수의 추가 속성은 Stateflow.SLFunction 객체를 사용하여 프로그래밍 방식으로 지정할 수 있습니다. Stateflow 프로그래밍 인터페이스에 대한 자세한 내용은 Stateflow API 개요 항목을 참조하십시오.
Simulink 함수를 사용하여 Simulink 블록에 액세스하기
이 예제에서는 차량 시스템의 변속 로직 모델링을 비교할 수 있습니다. 첫 번째 모델은 Simulink 함수를 사용하지 않지만, 두 번째 모델은 사용합니다.
Simulink 함수를 사용하지 않고 모델링하기
이 모델은 Simulink 모델의 Function-Call Subsystem인 run()을 사용하여 변속 기어의 임계값을 계산합니다. 그런 다음 Stateflow 차트는 출력 이벤트 CALC_TH()를 사용하여 서브시스템을 호출합니다.

Function-Call Subsystem에 대한 자세한 내용은 Function-Call Subsystem 사용하기 (Simulink) 항목을 참조하십시오.
Simulink 함수를 사용하여 모델링하기
Simulink 함수를 사용하여 이 동일한 기능을 구현할 수 있습니다. 이 Stateflow 차트에서 Simulink 함수 calc_th는 임계값 계산에 사용됩니다.

selection_state의 during 동작에는 Simulink 블록이 포함된 calc_th에 대한 함수 호출이 포함되어 있습니다.
이 모델링 방법은 모델에 있는 객체를 최소화합니다.

이 예제에 대한 자세한 내용은 Model a Car with Automatic Transmission 항목을 참조하십시오.
Simulink 함수를 사용하여 여러 제어기의 실행 스케줄링하기
이 예제에서는 여러 제어기의 실행을 스케줄링하는 두 가지 방법을 비교할 수 있습니다. 첫 번째 모델은 Simulink 함수를 사용하지 않지만, 두 번째 모델은 사용합니다.
Simulink 함수를 사용하지 않고 모델링하기
이 모델은 Function-Call Subsystem을 사용하여 각 제어기를 모델링합니다. 이 모델에는 서브시스템의 실행을 스케줄링하기 위해 Stateflow 차트에 출력 이벤트가 포함되어 있습니다.

각 출력 이벤트에 대해, 신호 선은 Stateflow 차트와 대응 Function-Call Subsystem을 연결해야 합니다.
Simulink 함수를 사용한 모델 방법
Stateflow 차트의 Simulink 함수를 사용하여 각 제어기를 모델링할 수도 있습니다. 이 모델은 함수 호출을 사용하여 서브시스템의 실행을 스케줄링합니다.

이 모델링 방법은 모델에 있는 객체를 최소화합니다.

이 예제에 대한 자세한 내용은 서브시스템이 지정된 시간에 실행되도록 스케줄링하기 항목을 참조하십시오.
Simulink 함수 사용 지침
차트 초기화 중 실행되는 디폴트 천이에서 Simulink 함수 호출 안 함
참고 항목
Simulink Function (Simulink) | Trigger (Simulink) | Inport (Simulink) | Outport (Simulink) | Signal Conversion (Simulink) | Bus Creator (Simulink) | Mux (Simulink)