주요 콘텐츠

Stateflow 차트에서 Simulink 함수 재사용하기

R2026b

Simulink® 함수는 사용자가 상태 동작과 천이 동작에서 Simulink 서브시스템을 호출할 수 있도록 해 주는 그래픽 객체입니다.

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)을 반환합니다.

Stateflow chart with a Simulink function called sim_fcn.

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

Simulink subsystem with a gain block and a magnitude-angle to complex block.

Simulink 함수를 정의한 후에는 Stateflow 차트 또는 Simulink 모델의 어느 곳에나 배치할 수 있습니다. 또한, 이 함수는 동일한 모델이나 다른 모델 내에서 원하는 횟수만큼 재사용할 수 있습니다.

참고

모델 참조 내의 Stateflow 차트에서 전역 Simulink Function을 호출할 수 없습니다. 이 문제를 해결하려면 Stateflow 차트에 새 Simulink Function을 만드십시오. 이 Simulink Function 내부에 원래의 전역 Simulink Function을 호출하는 Function Caller 블록을 포함하십시오. Function Caller 블록에 대한 자세한 내용은 Function Caller (Simulink) 항목을 참조하십시오.

Simulink 함수 정의하기

  1. 객체 팔레트에서 Simulink 함수 아이콘 을 클릭합니다.

  2. 차트 캔버스에서 새 Simulink 함수의 위치를 클릭합니다.

  3. 함수의 시그니처 레이블을 입력합니다.

    함수의 시그니처 레이블은 함수의 이름과 인수 및 반환 값의 형식 이름을 지정합니다. 시그니처 레이블의 구문은 다음과 같습니다.

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    여러 개의 반환 값과 여러 개의 입력 인수를 지정할 수 있습니다. 각 반환 값과 입력 인수는 스칼라이거나, 벡터이거나, 값으로 구성된 행렬일 수 있습니다. 반환 값이 1개뿐인 함수의 경우 시그니처 레이블에서 대괄호를 생략하십시오.

    모든 인수와 반환 값에는 고유한 변수 이름을 사용해야 합니다.

  4. 함수를 프로그래밍하기 위해 함수 상자를 더블 클릭하여 Simulink 편집기를 엽니다. 처음에 편집기는 함수 호출 Trigger (Simulink) 블록 한 개와 함수 시그니처에 부합하는 Inport (Simulink) 블록 및 Outport (Simulink) 블록을 포함합니다. Trigger 블록은 삭제할 수 없습니다.

  5. Simulink 편집기에서, 블록을 추가하여 Simulink 서브시스템을 만들고 Inport 블록과 Outport 블록에 연결합니다.

  6. Inport 블록과 Outport 블록을 구성합니다.

    1. 각 블록을 더블 클릭하여 블록 파라미터 대화 상자를 엽니다.

    2. 신호 특성 탭에서 입력 파라미터 또는 반환 값의 데이터형과 포트 차원을 입력합니다.

    3. 확인을 클릭합니다.

    참고

    Simulink 함수의 Inport 블록은 데이터형과 포트 차원을 상속할 수 없습니다. 자세한 내용은 Simulink 함수 사용 지침 항목을 참조하십시오.

상태와 천이에서 Simulink 함수 호출하기

임의의 상태 동작이나 천이 동작 또는 다른 함수에서 Simulink 함수를 호출할 수 있습니다.

Simulink 함수를 호출하려면 함수 시그니처를 사용하고 함수 시그니처에 각 형식 인수에 대한 인수 값을 포함하십시오.

[return_val1,return_val2,...] = function_name(arg1,arg2,...)

두 인수의 데이터형이 다른 경우 이 함수는 인수를 형식 인수의 데이터형으로 형변환합니다.

Simulink 함수의 속성 지정하기

Simulink 함수의 속성은 블록 파라미터 대화 상자에서 수정할 수 있습니다.

  1. Stateflow 편집기에서 Simulink 함수를 마우스 오른쪽 버튼으로 클릭합니다.

  2. 속성을 선택합니다.

  3. 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()를 사용하여 서브시스템을 호출합니다.

Model old_sf_car with a function-call subsystem .

Function-Call Subsystem에 대한 자세한 내용은 Function-Call Subsystem 사용하기 (Simulink) 항목을 참조하십시오.

Simulink 함수를 사용하여 모델링하기

Simulink 함수를 사용하여 이 동일한 기능을 구현할 수 있습니다. 이 Stateflow 차트에서 Simulink 함수 calc_th는 임계값 계산에 사용됩니다.

Stateflow chart with a Simulink function.

selection_state의 during 동작에는 Simulink 블록이 포함된 calc_th에 대한 함수 호출이 포함되어 있습니다.

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

Modified Simulink model without function-call subsystems.

이 예제에 대한 자세한 내용은 Model a Car with Automatic Transmission 항목을 참조하십시오.

Simulink 함수를 사용하여 여러 제어기의 실행 스케줄링하기

이 예제에서는 여러 제어기의 실행을 스케줄링하는 두 가지 방법을 비교할 수 있습니다. 첫 번째 모델은 Simulink 함수를 사용하지 않지만, 두 번째 모델은 사용합니다.

Simulink 함수를 사용하지 않고 모델링하기

이 모델은 Function-Call Subsystem을 사용하여 각 제어기를 모델링합니다. 이 모델에는 서브시스템의 실행을 스케줄링하기 위해 Stateflow 차트에 출력 이벤트가 포함되어 있습니다.

Simulink model with three function-call subsystems.

각 출력 이벤트에 대해, 신호 선은 Stateflow 차트와 대응 Function-Call Subsystem을 연결해야 합니다.

Simulink 함수를 사용한 모델 방법

Stateflow 차트의 Simulink 함수를 사용하여 각 제어기를 모델링할 수도 있습니다. 이 모델은 함수 호출을 사용하여 서브시스템의 실행을 스케줄링합니다.

Stateflow chart with three Simulink functions.

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

Modified Simulink model without function-call subsystems.

이 예제에 대한 자세한 내용은 서브시스템이 지정된 시간에 실행되도록 스케줄링하기 항목을 참조하십시오.

Simulink 함수 사용 지침

인수 이름에 영숫자를 사용함으로써 Inport 블록의 이름과 Output 블록의 이름이 Stateflow 차트의 식별자 명명 규칙과 호환되도록 할 수 있습니다.

Simulink 함수의 Inport 블록은 데이터형과 크기를 상속할 수 없습니다. double형 스칼라가 아닌 각 Inport 블록의 데이터형과 포트 차원을 설정해야 합니다.

Simulink 함수의 Outport 블록은 서브시스템 내 연결에 따라 크기와 데이터형을 상속할 수 있습니다. 이러한 블록의 데이터형과 포트 차원은 상속된 것으로 지정할 수 있습니다.

팁

Inport 블록의 속성을 용이하게 업데이트할 수 있도록 데이터형과 크기를 파라미터로 지정할 수 있습니다.

Simulink 함수의 Outport 블록은 불연속 신호를 지원하지 않습니다. 함수에 불연속 신호를 출력하는 블록이 포함되어 있는 경우 불연속 출력과 Outport 블록 사이에 Signal Conversion (Simulink) 블록을 삽입하십시오. 그러면 출력 신호가 연속이 됩니다.

불연속 신호를 출력할 수 있는 블록으로는 Bus Creator (Simulink) 블록과 Mux (Simulink) 블록 등이 있습니다. Bus Creator 블록의 경우, 블록이 가상 버스를 출력하면 출력이 불연속입니다. 비가상 버스로 출력을 선택하면 출력 신호가 연속이고 변환이 필요하지 않습니다. 자세한 내용은 Create Nonvirtual Buses (Simulink) 항목을 참조하십시오.

무어 차트에서는 Simulink 함수를 사용할 수 없습니다. 이 제한은 차트 실행 중에 무어 의미 체계를 위반하는 일이 발생하지 않도록 합니다.

차트 속성 초기화 시 차트 실행(진입)을 선택한 경우에는 차트가 처음 웨이크업 상태가 될 때 실행되는 디폴트 천이에서 Simulink 함수를 호출할 수 없습니다. 호출할 경우, 차트는 시뮬레이션 중에 런타임 오류를 생성합니다.

연속시간 차트에서는 보조 시간 스텝 중에 Simulink 함수를 호출할 수 없습니다. 대신, 주 시간 스텝 중에 발생하는 동작(상태 entry 동작 또는 exit 동작과 천이 동작)에서 Simulink 함수를 호출하십시오. 상태 during 동작이나 천이 조건에서 Simulink 함수를 호출하면 시뮬레이션 중에 런타임 오류가 발생합니다.

Simulink 함수는 HDL 코드 생성을 지원하지 않습니다. Simulink 함수가 포함된 차트에 대한 HDL 코드를 생성하면 시뮬레이션 중에 런타임 오류가 발생합니다.

인수를 Simulink 함수에 참조 방식으로 전달하면 시뮬레이션 중에 런타임 오류가 발생합니다.

참고 항목

(Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink)

도움말 항목