文档

配置自定义数据类型

C s -函数中的自定义数据类型

C S-Functions可以使用用户定义的数据类型进行通信。这些数据类型有两大类:

  • 金宝app®可识别的自定义数据类型——这些是自定义数据类型金宝app仿真软件。AliasType金宝app仿真软件。公共汽车金宝app仿真软件。NumericType,或者可以与其他Simulink块交互的枚举数据类型。金宝app

  • 不透明数据类型——这些数据类型只用于编程理解它们的S-Function块。在其他Simulink块不需要使用数据类型的情况下,您可以定义不透明数据类型。金宝app

在C s函数金宝app中的Simulink可识别数据类型

要通过Simulink,S函数注册识别的自定义数据类型金宝appmdlInitializeSizes例程必须注册数据类型,使用ssRegisterTypeFromNamedObject

例如,下面的代码放在开头mdlInitializeSizes对象定义自定义数据类型金宝app仿真软件。AliasType对象命名在MATLAB®工作区。该示例然后将自定义数据类型分配给第一个输出端口。

int id1;ssRegisterTypeFromNamedObject(年代,“与”,id1);ssSetOutputPortDataType(年代,0,id1);

此外,您可以使用标识符id1将该数据类型分配给s -函数参数、DWork向量和输入端口。

在C s函数中使用不透明数据类型

对于s -函数需要使用Simulink无法理解的数据类型进行通信的情况,s -函数金宝appmdlInitializeSizes程序必须:

  1. 注册数据类型,使用ssRegisterDataType

  2. 使用。指定存储该数据类型实例所需的内存量(以字节为单位)ssSetDataTypeSize

  3. 使用。为数据类型指定表示零的值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仿真软件编码器)。

另请参阅

|||

相关话题