Main Content

枚举

要生成枚举数据类型,请在 MATLAB® 文件中定义枚举类。然后,使用该枚举类作为模型中信号、模块参数和状态的数据类型。

C 构造

typedef enum {
  Choice1 = 0,
  Choice2
} myEnumType;

过程

在当前文件夹中,创建 MATLAB 文件 ex_myEnumType.m。该文件定义枚举类 ex_myEnumType

classdef ex_myEnumType < Simulink.IntEnumType
    
    enumeration
        Choice1(0)
        Choice2(1)
    end %enumeration
    
    methods (Static)
        function retVal = getHeaderFile()
            retVal = 'myEnumHdr.h';
        end %function
        
        function retVal = getDataScope()
            retVal = 'Exported';
        end %function
    end %methods
    
end %classdef

1.打开模型 ex_pattern_enum,它有一个 Enumerated Constant 模块和一个 Multiport Switch 模块。

2.在模型数据编辑器中,选择参数选项卡。

3.在模型中,点击 Enumerated Constant 模块。

4.在模型数据编辑器中,使用列将常量值设置为 myChoice。在 myChoice 旁边,点击操作按钮(含三个纵点),然后选择创建

5.在“创建新数据”对话框中,将设置为 Simulink.Parameter(ex_myEnumType.Choice1),然后点击创建。名为 myChoiceSimulink.Parameter 对象出现在基础工作区中。该对象存储 ex_myEnumType 类型的枚举值 Choice1

6.在代码生成选项卡上,将存储类设置为 ExportedGlobal。使用此设置时,对象在生成的代码中作为全局变量出现。

7.在模型数据编辑器中,选择信号选项卡。

8.在模型中,选择 Enumerated Constant 模块的输出信号。

9.在模型数据编辑器中,使用数据类型列将信号数据类型设置为 Enum: ex_myEnumType

10.选择 Multiport Switch 模块。

11.在属性检查器中,进行如下设置:

  • 数据端口顺序设置为 Specify indices

  • 数据端口索引设置为 enumeration('ex_myEnumType')。此表达式返回 ex_myEnumType 的所有枚举成员。

12.将模型配置参数文件打包格式设置为 Modular。使用此设置时,在生成的代码中,ex_myEnumType 的定义可以出现在指定的头文件 myEnumHdr.h 中。

13.要编译模型并生成代码,请按 Ctrl+B

结果

查看生成的头文件 myEnumHdr.h。该文件定义枚举数据类型。

typedef enum {
  Choice1 = 0,                         /* Default value */
  Choice2
} ex_myEnumType;

查看源文件 ex_pattern_enum.c。该文件定义变量 myChoicestep 函数中的算法使用 myChoice 将其中一个输入信号传送到输出信号。

ex_myEnumType myChoice = Choice1;      /* Variable: myChoice

/* Model step function */
void ex_pattern_enum_step(void)
{
  /* MultiPortSwitch: '<Root>/Multiport Switch' incorporates:
   *  Constant: '<S1>/Constant'
   */
  if (myChoice == Choice1) {
    /* Outport: '<Root>/Data Out' incorporates:
     *  Inport: '<Root>/Data In 1'
     */
    rtY.DataOut = rtU.DataIn1;
  } else {
    /* Outport: '<Root>/Data Out' incorporates:
     *  Inport: '<Root>/Data In 2'
     */
    rtY.DataOut = rtU.DataIn2;
  }

  /* End of MultiPortSwitch: '<Root>/Multiport Switch' */
}

另请参阅

相关主题