基于模型开发过程之变量篇——枚举量…

来源:互联网 发布:js 调用java代码 编辑:程序博客网 时间:2024/06/07 18:42

基于模型开发过程之变量篇——枚举量的用法

一、枚举类型

1C语言中的定义

先来回顾一下,在C语言中枚举类型定义的一般形式为:

enum  枚举名{ 枚举值表 };

在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。

C语言中使用的枚举量的例子如下:

enum weekday{ sun,mon,tue,wed,thu,fri,sat};

enum weekday a,b,c;

a=sun;

b=mon;

c=tue;

 

2Matlab中的定义

Matlab中定义的枚举变量被归为类,如果不加载其他类属性或父类,则其没有对应可转换的数字,但可使用char(…)函数,对其进行转换显示出对应表达的字符,也可进行相等或不等判断。

Matlab中枚举类型的定义都是使用M文件定义的。

定义方式如下:

classdef 

        enumeration

                  

        end

end

 

例如,定义一个枚举变量类型weekdays,如下定义:

classdef weekdays

   enumeration

       Monday,Tuesday,Wednesday,Thursday,Friday

   end          

end

 

保存为m文件,文件名需要和类名称相同,可以在工作空间浏览器中看到

 基于模型开发过程之变量篇——枚举量的用法

 

定义一个枚举变量时,直接使用.对其进行赋值即可,例如在命令窗口输入:

a=weekdays.Thursday

 

则,得到一个weekdays类型的枚举变量,值为Thursday,使用char(a)则得到文本值

’Thursday’

 

3Simulink中的定义

Simulink中定义的枚举变量也是类,但是需要为所定义的枚举类型定义一个专有父类Simulink.IntEnumType同时必须要给每个枚举元素进行值的指定,而不像C语言中是可以仅指定其中部分值。

 

具体的定义方式如下,定义一个m文件

classdef

enumeration

 

end

end

 

例如:

classdef weekdays

enumeration

Monday(0),Tuesday(2),Wednesday(3),Thursday(4),Friday(5)

end

end

 

备注:如果是较早版本的simulinkmatlab应该如下定义,即在类名称前添加类型定义。

classdef (Enumeration)weekdays

enumeration

Monday(0),Tuesday(2),Wednesday(3),Thursday(4),Friday(5)

end

end

 

 

三、在SimulinkStateflow中设置枚举常量和枚举变量的方法

1、在matlab工作路径的文件夹下定义出m文件

2、所需定义的模块或者信号中选择Datatype,可以使用Model Explorer中定义

 基于模型开发过程之变量篇——枚举量的用法

 

3、也可以在信号属性中定义

基于模型开发过程之变量篇——枚举量的用法

4、在simulink中对常量模块赋值时,需要采用类似如下结构体的方式:
基于模型开发过程之变量篇——枚举量的用法

5、在stateflow中使用信号时,运用规则和C语言一样,可以直接使用枚举元素对枚举变量赋值,而不需要使用类似结构体的方式,定义方式在Explorerstateflow中定义,注意:在模型层中的定义是无效的。

 

 

四、在使用枚举的一些好处

1、直接的好处是极大提高了程序的或模型的可读性。

2、使用枚举变量定义数据时比用define更为严谨,避免对枚举元素进行修改。

3变量或常量的取值必须固定在枚举元素的范围内,避免随意定义引起不容易发现的错误。

 

0 0
原创粉丝点击