Main Content

S-Function이란?

S-Function(시스템 함수)은 Simulink® 환경의 기능을 확장하는 강력한 메커니즘을 제공합니다. S-Function은 MATLAB®, C, C++ 또는 Fortran으로 작성된 Simulink 블록에 대한 컴퓨터 언어 설명입니다. C, C++ 및 Fortran S-Function은 mex 유틸리티를 사용하여 MEX 파일로 컴파일됩니다(C MEX 함수 빌드하기 참조). 다른 MEX 파일과 마찬가지로 S-Function은 MATLAB 실행 엔진이 자동으로 불러오고 실행할 수 있는 동적으로 링크된 서브루틴입니다.

S-Function은 Simulink 엔진과 상호 작용할 수 있도록 하는 S-Function API라고 하는 특수 호출 구문을 사용합니다. 이 상호 작용은 엔진과 내장 Simulink 블록 사이에서 발생하는 상호 작용과 매우 비슷합니다.

S-Function은 일반적인 형식을 따르며 연속 시스템, 이산 시스템 및 하이브리드 시스템을 포함할 수 있습니다. 일련의 간단한 규칙을 따라 S-Function으로 알고리즘을 구현하고 구현한 알고리즘을 S-Function 블록을 사용하여 Simulink 모델에 추가할 수 있습니다. S-Function을 작성하고 그 이름을 S-Function 블록(User-Defined Functions 블록 라이브러리에서 사용 가능)에 배치한 후 마스크를 적용하여 사용자 인터페이스를 사용자 지정할 수 있습니다(블록 마스크 만들기 참조).

Simulink Coder™를 사용하는 경우 모델에 S-Function을 사용하여 코드를 생성할 수 있습니다. 또한 TLC(Target Language Compiler) 파일을 작성하여 S-Function에 대한 생성 코드를 사용자 지정할 수 있습니다. 자세한 내용은 S-Functions and Code Generation (Simulink Coder) 항목을 참조하십시오.

S-Function이 작동하는 방식

S-Function은 초기화, 업데이트, 도함수, 출력, 종료와 같은 시뮬레이션의 다양한 부분에서 블록이 작동하는 방식을 정의합니다. 시뮬레이션의 모든 스텝에서 특정 작업을 처리하기 위해 시뮬레이션 엔진이 메서드를 호출합니다. S-Function 기본 사항을 알려면 블록 입력, 상태 및 출력 간의 수학적 관계에 대한 기초 지식이 필요합니다. S-Function이 어떻게 작동하는지 이해하려면 먼저 Simulink가 모델을 시뮬레이션하는 방식, 즉 시뮬레이션 단계에 대한 수학 원리를 이해해야 합니다. 자세한 내용은 Simulation Phases in Dynamic Systems 항목을 참조하십시오.

Simulink 블록에 대한 수학 원리

Simulink 블록은 입력 세트, 상태 세트, 파라미터 세트 및 출력 세트로 구성되며, 여기서 출력은 시뮬레이션 시간, 입력, 파라미터 및 상태로 구성된 함수입니다.

다음 방정식은 입력, 출력, 파라미터, 상태 및 시뮬레이션 시간 간의 수학적 관계를 나타냅니다.

y=f0(t,x,u)                 (Outputs)x˙=fd(t,x,u)                 (Derivatives)xdk+1=fu(t,xc,xdk,u),   (Update)

여기서 x=[xc;xd].

시뮬레이션 단계

Simulink 모델의 실행은 단계적으로 진행됩니다. 초기화 단계에서는 Simulink 엔진은 라이브러리 블록을 모델에 통합하고, 신호 너비, 데이터형 및 샘플 시간을 전파하고, 블록 파라미터를 평가하고, 블록 실행 순서를 결정하고, 메모리를 할당합니다. 그런 다음 엔진은 시뮬레이션 루프에 진입하는데, 루프를 통과하는 각 단계를 시뮬레이션 스텝이라고 합니다. 각 시뮬레이션 스텝에서 엔진은 초기화 중에 결정된 순서대로 모델의 각 블록을 실행합니다. 각 블록에 대해 엔진은 현재 샘플 시간에 대한 블록 상태, 도함수 및 출력을 계산하는 함수를 호출합니다. 그런 다음 전체 시뮬레이션 루프는 시뮬레이션이 완료될 때까지 계속됩니다.

모델 초기화 - 모델이 시뮬레이션을 위해 준비되었습니다. 이 단계에서 블록 파라미터가 평가되고 블록 실행 순서가 결정되며 각 작업에 대한 메모리가 할당됩니다. 이 단계 후에 블록은 시뮬레이션 루프를 거칩니다.

연속 상태 및 연속 시간 업데이트 - 모델이 연속 상태인 경우에만 발생합니다. mdlOutputs, mdlDerivativesmdlZeroCrossing과 같은 보조 스텝 메서드를 수정하여 출력을 계산할 수 있습니다.

S-Function 콜백 메서드

S-Function은 각 시뮬레이션 단계에 필요한 작업을 수행하는 S-Function 콜백 메서드 세트로 구성됩니다. 모델을 시뮬레이션하는 동안 각 시뮬레이션 단계에서 Simulink 엔진은 모델의 각 S-Function 블록에 대해 적절한 메서드를 호출합니다. S-Function 콜백 메서드가 수행하는 작업은 다음과 같습니다.

  • 컴파일 — 이 단계에서 Simulink 엔진은 S-Function을 초기화합니다. 다음과 같은 세부 작업이 포함됩니다.

    • 모델에 라이브러리 블록 통합 및 신호 너비와 데이터형, 샘플 시간 전파

    • 입력 포트와 출력 포트의 개수 및 차원 설정

    • 블록 파라미터 평가 및 블록 실행 순서 결정

    • 메모리 및 저장 영역 할당

  • 출력 계산 — 이 상태에서는 모든 블록 출력 포트가 현재 시간 스텝에 대해 유효할 때까지, 즉 모든 출력값이 특정 오차 범위에 있을 때까지 출력이 계산됩니다.

  • 이산 상태 업데이트 — 이 호출에서 블록은 이산 상태 업데이트와 같은 작업을 스텝당 한 번 수행합니다.

  • 초기화 메서드 및 종료 메서드 — 이러한 선택적 메서드는 S-Function에 필요한 초기화 작업과 종료 작업을 한 번만 수행합니다. 초기화 작업에서 사용자 데이터 설정 또는 S-Function의 상태 벡터 초기화 등이 진행될 수 있습니다. 종료 메서드는 시뮬레이션이 종료되거나 S-Function 블록이 모델에서 삭제될 때 필요한 메모리 해제 작업 같은 모든 작업을 수행합니다.

  • 적분 — 연속 상태 및/또는 샘플링되지 않은 영점교차가 있는 모델에 적용됩니다. S-Function에 연속 상태가 있는 경우 엔진은 보조 시간 스텝에서 S-Function의 출력 및 도함수 부분을 호출합니다. 이는 솔버가 S-Function의 상태를 계산할 수 있도록 하기 위한 것입니다. S-Function에 샘플링되지 않은 영점교차가 있는 경우 엔진은 영점교차를 찾을 수 있도록 보조 시간 스텝에서 S-Function의 출력 및 영점교차 부분도 호출합니다.

특히 S-Function과 관련한 시뮬레이션 용어를 이해하려면 S-Function Concepts 항목을 참조하십시오.

모델에서 S-Function 사용하기

  1. C MEX S-Function을 모델에 통합하려면 Simulink 라이브러리 브라우저에서 S-function 블록을 끌어서 놓습니다. 마찬가지로, Level-2 MATLAB S-function을 모델에 통합하려면 Level-2 MATLAB S-function 블록을 모델로 끌어서 놓습니다.

  2. 블록 파라미터 대화 상자를 열고 S-Function 이름 필드에 S-Function 이름을 지정하여 S-function 블록에 대한 기능을 제공합니다. 예를 들어, 들어오는 신호에 2를 곱하는 C MEX S-Function을 추가하려면 timestwo를 입력하고 적용을 누릅니다.

참고

S-Function 블록에서 참조하는 동일한 이름의 C MEX 파일과 MATLAB 파일이 MATLAB 경로에 있는 경우 S-Function 블록은 C MEX 파일을 사용합니다.

S-Function에 파라미터 전달하기

S-function 블록과 Level-2 MATLAB S-Function 블록 둘 다 블록 파라미터 창을 통해 해당하는 S-Function에 전달할 파라미터 값을 지정할 수 있습니다. 이러한 필드를 사용하려면 S-Function에 필요한 파라미터가 무엇이고 어떤 순서로 필요한지 알아야 합니다. (알지 못하는 경우 S-Function의 작성자에 문의하거나 문서 또는 소스 코드를 참조하십시오.) S-Function에 필요한 순서대로 파라미터를 쉼표로 구분하여 입력합니다. 파라미터 값은 상수, MATLAB 또는 모델 작업 공간에 정의된 변수의 이름 또는 MATLAB 표현식일 수 있습니다.

다음 예제에서는 파라미터 필드를 사용하여 Level-2 MATLAB S-Function에 대한 사용자 정의 파라미터를 입력하는 방법을 보여줍니다.

이 예제에서 모델 msfcndemo_limintm은 샘플 S-Function msfcn_limintm.m을 통합합니다.

msfcn_limintm.m S-Function은 하한, 상한, 초기 조건에 해당하는 3개 파라미터를 받습니다. S-Function은 시간 적분이 하한과 상한 사이이면 입력 신호의 시간 적분을 출력하고, 시간 적분이 하한보다 작으면 하한을 출력하고, 시간 적분이 상한보다 크면 상한을 출력합니다. 예제의 대화 상자에서는 하한, 상한 및 초기 조건이 각각 -5.0, 5.0, 0으로 지정되었습니다. 범위는 입력이 진폭 5의 사인파인 경우의 결과 출력을 나타낸 것입니다.

S-Function에서 사용자 지정 파라미터에 액세스하는 방법에 대한 자세한 내용은 Processing S-Function ParametersHandle Errors in S-Functions 항목을 참조하십시오.

마스크 적용 기능을 사용하여 S-Function 블록에 대한 사용자 지정 대화 상자와 아이콘을 생성할 수 있습니다. 마스크 처리된 대화 상자를 사용하면 S-Function에 대한 추가 파라미터를 더 쉽게 지정할 수 있습니다. 마스크 적용에 대한 자세한 내용은 블록 마스크 만들기 항목을 참조하십시오.

S-Function을 사용하는 경우

다음을 포함하여 다양한 응용 사례에 S-Function을 사용할 수 있습니다.

S-Function의 가장 일반적인 용도는 사용자 지정 Simulink 블록을 생성하는 것입니다(블록 생성 기본 사항 참조). S-Function을 사용하여 범용 블록을 생성하면 모델에서 범용 블록을 여러 번 사용하면서 블록의 각 인스턴스에 따라 파라미터를 변동시킬 수 있습니다.

참고 항목

| | |

관련 항목