C S函数可以使用用户定义的数据类型进行通信。这些数据类型有两种广泛的类别:
金宝app®可识别的自定义数据类型 - 这些是来自a的自定义数据类型金宝appsimulink.aliaStype.
那金宝appsimulink.bus.
那金宝appsimulink.numerictype.
或者也可以与其他Simulink块交互的枚举数据类型。金宝app
不透明的数据类型 - 这些是仅用于编程的S函数块以了解它们的数据类型。您可以在其他Simulink块不需要使用数据类型的情况下定义不透明数据类型。金宝app
要通过Simulink识别的自定义数据类型,S函数金宝appmdlinitializatize
例程必须注册数据类型,使用ssregistertypefromnamedObject.
。
例如,以下代码在开始时放置mdlinitializatize
定义自定义数据类型金宝appsimulink.aliaStype.
对象命名U8.
在MATLAB®工作区。然后,该示例将自定义数据类型分配给第一个输出端口。
int id1;ssregistertypefromnamedObject(s,“U8”,&ID1);sssetoutportportypatype(s,0,ID1);
此外,您可以使用标识符ID1.
将此数据类型分配给S函数参数,dwork矢量和输入端口。
对于S函数需要使用通过Simulink的数据类型进行传送的情况,S函数金宝appmdlinitializatize
例程必须:
注册数据类型,使用ssregisterdatatype.
。
使用备份使用sssetDatatypesize.
。
指定表示数据类型的零的值,使用sssetdatatypezero.
。
在外部标题文件中定义用户定义的数据类型以包括在2级C S函数中。
/ *定义用户定义的数据类型* / typedef结构的结构{int8_t a;uint16_t b;MyStruct;
在开始时放置以下代码mdlinitializatize
设置自定义数据类型的大小和0表示形式mystruct.
。
/ *定义变量* / int_t状态;dtypeid身份证;mystruct tmp;/ *注册用户定义的数据类型* / id = ssregisterdatatype(s,“mystruct”);if(id == invalid_dtype_id)返回;/ *设置用户定义的数据类型* / status = sssetDatatypesize(s,id,sizeof(tmp))的大小;如果(status == 0)返回;/ *设置零表示* / tmp.a = 0;tmp.b = 1;status = sssetdatatypezero(s,id和tmp);
笔记
如果你有金宝appSimulink Coder™,您无法使用该软件生成包含宏来定义自定义数据类型的S函数的代码。您必须使用内联的S函数,该函数访问目标语言编译器函数以生成具有自定义数据类型的代码。有关更多信息,请参阅内联的S函数(金宝appSimulink编码器)。
sssetnuminputports.
|sssetnumoutputports.
|ssgetnuminpulpports.
|ssgetnumOutputports.