主要内容

创建一个基本的C墨西哥人功能

关于C墨西哥人S-Functions

您可以创建C墨西哥人S-functions使用下列方法:

  • 手写功能,您可以编写一个C墨西哥人从头s函数。(创建一个基本的C墨西哥人功能提供了一个循序渐进的例子。)看到模板C S-Functions完整的骨架实现C墨西哥人的功能,您可以使用创建自己的S-functions作为起点。

  • s函数构建器——这个集成了一个C / c++代码块和构建一个C墨西哥人s函数根据您提供的规格和代码片段使用图形用户界面。这消除了需要你写S-functions从零开始。看到使用总线信号s函数构建器创建一个函数关于s函数构建器的更多信息。

  • 遗留代码的工具,这个工具构建一个C墨西哥人功能从现有的C代码和规格供应使用MATLAB®代码。看到C函数使用遗留代码工具集成更多信息将遗留C代码集成到模型金宝app®模型。

这些方法涉及到权衡易于编写一个函数支持的功能和特性。金宝app尽管手写S-functions支持广泛的功能,他们很难写。金宝apps函数构建器块简化的任务编写C墨西哥人S-functions但支持更少的特性。金宝app遗留代码工具提供了最简单的方法创建C墨西哥人S-functions从现有的C代码,但支持最少的特性。金宝app看到可用的功能实现更多信息在这些方法的特点和局限性写C墨西哥人功能。

如果你有金宝app仿真软件编码器™除了上述三种方法,金宝app仿真软件编码器产品提供一种方法来生成一个C墨西哥人从图形子系统功能。如果您是写C墨西哥人S-functions,您可以构建在仿真软件子系统和使用您的应用程序的各个部分的功能目标,将它转化成一个函数。金宝app生成的文件提供了有关如何实现特定区块内的一个函数。对于细节和限制使用功能目标,明白了加速模拟,重用代码,或保护知识产权利用s函数的目标(金宝app仿真软件编码器)。您可以开发一个功能代表外部代码使用的API与模型交互引擎。金宝app使用这个函数的代码生成器生成的代码。S-functions细节关于不同类型的代码生成S-Functions和代码生成(金宝app仿真软件编码器)

C墨西哥人功能必须提供的信息函数来模拟仿真软件引擎。金宝app仿真所得,引擎ODE求解器,C墨西哥人功能交互以执行特定的任务。这些任务包括定义初始条件和块特征,和计算衍生品、离散状态,和输出。

与MATLAB S-functions,仿真软件引擎与交互金宝appC墨西哥人s函数通过调用函数实现的回调方法。每个方法执行一个预定义的任务,比如计算块输出,模拟块所需的功能函数定义。然而,功能是免费的在每个方法执行任务根据s函数实现的功能。例如,mdlOutputs方法必须计算块输出在当前仿真时间。然而,s函数可以计算这些输出以任何方式是合适的函数。这个基于回调的API允许您创建S-functions,因此自定义块,任何想要的功能。

的回调方法集C墨西哥人S-functions可以实现比,可用于MATLAB S-functions大。C墨西哥人S-functions只需要实现回调方法的一个小子集s函数API。如果你块没有实现一个特定的功能,如矩阵信号,你可以自由地省略了回调方法需要实现一个功能。这允许您快速创建简单的块。

C墨西哥人的一般格式功能如下所示:

#定义S_FUNCTION_NAMEyour_sfunction_name_here#定义S_FUNCTION_LEVEL 2 # include“simstruc。h“静态孔隙mdlInitializeSizes (SimStruct * S) {}<附加功能的例程/代码>静态孔隙mdlTerminate (SimStruct * S) {} # ifdef MATLAB_MEX_FILE / *文件被编译为一个MEX-file吗?* / # include金宝app”模型。c / * MEX-file接口机制* /其他# #包括“cg_sfun。h " / * * / # endif登记代码生成功能

mdlInitializeSizes是第一个程序仿真软件引擎调用交互时功能。金宝app引擎随后调用其他函数方法(所有的开始mdl)。模拟结束时,引擎调用mdlTerminate

介绍基本的C墨西哥s函数的一个例子

本节提供了一个例子,一个C墨西哥人s函数,您可以使用C S-functions作为创建简单的模型。s函数的例子timestwo.c其输入输出两次。

下面的模型使用timestwos函数双振幅的正弦波和情节范围。

块功能指定对话框timestwo作为函数名;参数字段是空的。

timestwo功能包含此图所示的s函数回调方法。的功能,包括中描述的代码片段金宝app模型/仿真软件编码器接口

的内容timestwo.c如下所示。一个描述后提供的代码示例。

#定义S_FUNCTION_NAME timestwo / *定义,包括* / # define S_FUNCTION_LEVEL 2 # include“simstruc.h”
静态的空白mdlInitializeSizes(SimStruct * S) {ssSetNumSFcnParams (S, 0);如果(ssGetNumSFcnParams (S) ! = ssGetSFcnParamsCount (S)){返回;/ *参数不匹配报告的模型车* /}如果(!金宝appssSetNumInputPorts(年代,1))返回;ssSetInputPortWidth(年代,0,DYNAMICALLY_SIZED);ssSetInputPortDirectFeedThrough (0, 1);如果(! ssSetNumOutputPorts(年代,1))返回;ssSetOutputPortWidth(年代,0,DYNAMICALLY_SIZED);ssSetNumSampleTimes (S, 1);/ *照顾当指定例外——看到sfuntmpl免费代码。医生* / ssSetOptions(年代,SS_OPTION_EXCEPTION_FREE_CODE);}
静态的空白mdlInitializeSampleTimes(SimStruct * S) {ssSetSampleTime(年代,0,INHERITED_SAMPLE_TIME);ssSetOffsetTime(年代,0,0.0);}
静态的空白mdlOutputs(SimStruct * S, int_T tid) {int_T我;InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs (S, 0);real_T * y = ssGetOutputPortRealSignal (S, 0);int_T宽度= ssGetOutputPortWidth (S, 0);(我= 0;我<宽度;我+ +){* y + + = 2.0 * (* uPtrs[我]);}}
静态的空白mdlTerminate(SimStruct * S) {}
# ifdef MATLAB_MEX_FILE / *文件被编译为一个MEX-file吗?* / # include金宝app”模型。c / * MEX-file接口机制* /其他# #包括“cg_sfun。h " / * * / # endif登记代码生成功能

这个例子中有三个部分:

  • 定义,包括

  • 回调方法的实现

  • 金宝app仿真软件(或金宝app仿真软件编码器)产品的接口

定义,包括

从以下的例子定义语句。

#定义S_FUNCTION_NAME timestwo # define S_FUNCTION_LEVEL 2

第一个定义语句指定了函数的名称(timestwo)。第二个定义声明中指定的功能2级为更多信息格式(1级和2级S-functions,明白了转换1 C墨西哥人S-Functions)。

包括定义这两个项目后,例子simstruc.h,这是一个出访问头文件SimStruct数据结构和MATLAB应用程序编程接口(API)的功能。

#定义S_FUNCTION_NAME timestwo # define S_FUNCTION_LEVEL 2 # include“simstruc.h”

simstruc.h文件定义一个数据结构,称为SimStruct,仿真软件引擎使用维护金宝app功能的信息。的simstruc.h文件还定义了宏,使您的墨西哥人文件设置值和值(如块)的输入和输出信号的SimStruct(见关于SimStruct函数)。

回调方法的实现

下一个部分timestwo功能包含所需实现的回调方法。

mdlInitializeSizes

仿真软件金宝app引擎调用mdlInitializeSizes询问数量的输入和输出端口,端口的尺寸,和任何其他信息(如数量的州)所需的功能。

timestwo的实现mdlInitializeSizes指定以下信息:大小

  • 零参数

    因此,功能参数字段的功能块参数对话框必须是空的。如果它包含任何参数,则引擎报告参数不匹配。

  • 一个输入端和一个输出端口

    的宽度大小的动态输入和输出端口。这告诉引擎功能可以接受一个输入信号的宽度。默认情况下,动态的输入和输出端口的宽度相等时,s函数只有一个输入和输出端口。

  • 一个样品时间

    mdlInitializeSampleTimes回调方法指定样品的实际价值。

  • 除了免费代码

    指定exception-free加速你的s函数的执行代码。你必须小心当指定这个选项。一般来说,如果你的s函数不是与MATLAB交互环境,您可以安全地指定这个选项。更多细节,请参阅金宝app仿真软件与C S-Functions引擎交互

mdlInitializeSampleTimes

仿真软件金宝app引擎调用mdlInitializeSampleTimes设置功能的样品时间。一个timestwo只要驱动块执行块执行。因此,它有一个继承的样品时间,INHERITED_SAMPLE_TIME

mdlOutputs

引擎调用mdlOutputs在每个时间步长计算块输出。的timestwo的实现mdlOutputs乘以2的输入信号和写的答案输出。

线:

InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs (S, 0);

访问输入信号。的ssGetInputPortRealSignalPtrs宏返回一个向量指针,你必须访问使用

* uPtrs[我]

访问输入信号的更多细节,请参阅使用指针访问信号

线:

real_T * y = ssGetOutputPortRealSignal (S, 0);

访问输出信号。的ssGetOutputPortRealSignal宏返回一个指针指向一个数组,其中包含块输出。

线:

int_T宽度= ssGetOutputPortWidth (S, 0);

获得信号通过的宽度。的s函数循环输入计算输出。

mdlTerminate

引擎调用mdlTerminate为函数提供一个执行任务的机会的模拟。这是一个强制性的功能程序。的timestwos函数不执行任何终止行动,这个例程是空的。

金宝app/金宝app编码器接口

的功能,包括以下代码附加你的s函数模型或金宝app金宝app仿真软件编码器下载188bet金宝搏产品。

# ifdef MATLAB_MEX_FILE # include金宝app”模型。c cg_sfun其他# # include。h”# endif

需要这个拖车的所有功能。如果省略,任何试图编译功能将中止在构建的出口文件失败错误消息。

构建Timestwo例子

编译这个功能,输入

墨西哥人timestwo.c

在命令行中。的墨西哥人命令编译和链接timestwo.c文件使用默认的编译器。的墨西哥人命令创建一个动态可加载的可执行模型软件使用。金宝app如果您有多个MATLAB-supported编译器,您可金宝app以更改默认使用墨西哥人设置命令。看到改变默认的编译器和列表金宝app支持编译器

生成的可执行文件被称为一个墨西哥人s函数,墨西哥人代表“MATLAB可执行的地方。“墨西哥人文件扩展名因平台不同而有所不同。例如,在一个32位的微软®窗户®系统中,墨西哥人文件扩展名.mexw32