主要内容

S-Function이란?

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

s函数은仿真软件엔진과상호작용할수있도록하는s函数API라고하는특수호출구문을사용합니다。이상호작용은엔진과내장仿真软件블록사이에서발생하는상호작용과매우비슷합니다。

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

仿真软件编码器™를사용하는경우모델에S-Function을사용하여코드를생성할수있습니다。또한TLC(目标语言编译器)파일을작성하여s函数에대한생성코드를사용자지정할수있습니다。자세한내용은s函数和代码生成(仿真软件编码器)항목을참조하십시오。

S-Function이작동하는방식

s函数은초기화,업데이트,도함수,출력,종료와같은시뮬레이션의다양한부분에서블록이작동하는방식을정의합니다。시뮬레이션의모든스텝에서특정작업을처리하기위해시뮬레이션엔진이메서드를호출합니다。s函数기본사항을알려면블록입력,상태및출력간의수학적관계에대한기초지식이필요합니다。s函数이어떻게작동하는지이해하려면먼저仿真软件가모델을시뮬레이션하는방식,즉시뮬레이션단계에대한수학원리를이해해야합니다。자세한내용은动态系统的仿真阶段항목을참조하십시오。

动态仿真模块블록에대한수학원리

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

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

y f 0 t x u ) (输出) x ˙ f d t x u ) (金融衍生品) x d k + 1 f u t x c x d k u ) (更新)

여기서 x x c x d

시뮬레이션단계

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

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

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

S-Function콜백메서드

s -命令功能은각시뮬레이션단계에필은각시뮬레이션단계에필S-Function콜백메서드세트로구성됩니다。모델을시뮬레이션하는동안각시뮬레이션단계에서仿真软件엔진은모델의각s函数블록에대해적절한메서드를호출합니다。S-Function콜백메서드가수행하는작업은다음과같습니다。

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

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

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

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

    • 메모리및저장역할당

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

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

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

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

특히S-Function과관련한시뮬레이션용어를이해하려면函数的概念항목을참조하십시오。

모델에서S-Function사용하기

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

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

참고

s函数블록에서참조하는동일한이름의C墨西哥人파일과MATLAB파일이MATLAB경로에있는경우s函数블록은C墨西哥人파일을사용합니다。

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

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

다음예제에서는파라미터필드를사용하여所二级MATLAB函数에대한사용자정의파라미터를입력하는방법을보여줍니다。

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

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

S-Function에서사용자지정파라미터에액세스하는방법에대한자세한내용은处理函数的参数处理s - function中的错误항목을참조하십시오。

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

S-Function을사용하는경우

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

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

참고 항목

|||

관련 항목

Baidu
map