C S-Functions可以使用用户定义的数据类型进行通信。这些数据类型有两大类:
金宝app®可识别的自定义数据类型——这些是自定义数据类型金宝app仿真软件。AliasType
,金宝app仿真软件。公共汽车
,金宝app仿真软件。NumericType
,或者可以与其他Simulink块交互的枚举数据类型。金宝app
不透明数据类型——这些数据类型只用于编程理解它们的S-Function块。在其他Simulink块不需要使用数据类型的情况下,您可以定义不透明数据类型。金宝app
要通过Simulink,S函数注册识别的自定义数据类型金宝appmdlInitializeSizes
例程必须注册数据类型,使用ssRegisterTypeFromNamedObject
.
例如,下面的代码放在开头mdlInitializeSizes
对象定义自定义数据类型金宝app仿真软件。AliasType
对象命名与
在MATLAB®工作区。该示例然后将自定义数据类型分配给第一个输出端口。
int id1;ssRegisterTypeFromNamedObject(年代,“与”,id1);ssSetOutputPortDataType(年代,0,id1);
此外,您可以使用标识符id1
将该数据类型分配给s -函数参数、DWork向量和输入端口。
对于s -函数需要使用Simulink无法理解的数据类型进行通信的情况,s -函数金宝appmdlInitializeSizes
程序必须:
注册数据类型,使用ssRegisterDataType
.
使用。指定存储该数据类型实例所需的内存量(以字节为单位)ssSetDataTypeSize
.
使用。为数据类型指定表示零的值ssSetDataTypeZero
.
在外部头文件中定义用户定义的数据类型,以包含在2级C S-Function中。
/*定义用户定义的数据类型的结构*/ typedef struct{int8_T a;uint16_T b;} myStruct;
在开始时放置以下代码mdlInitializeSizes
设置自定义数据类型的大小和0表示形式myStruct
.
/*定义变量*/ int_T状态;DTypeId id;myStruct tmp;/*注册用户定义的数据类型*/ id = ssRegisterDataType(S, "myStruct");if(id == INVALID_DTYPE_ID) return;/*设置用户定义的数据类型的大小*/ status = ssSetDataTypeSize(S, id, sizeof(tmp));If (status == 0) return;/*设置0表示= 0;tmp。b = 1; status = ssSetDataTypeZero(S, id, &tmp);
如果你有金宝app仿真软件编码器™,则不能使用该软件为包含宏以定义自定义数据类型的s -函数生成代码。您必须使用内联s函数来访问目标语言编译器函数,以生成具有自定义数据类型的代码。有关更多信息,请参见内联S-Functions(金宝app仿真软件编码器)。
ssGetNumInputPorts
|ssGetNumOutputPorts
|ssSetNumInputPorts
|ssSetNumOutputPorts