数值工具选板中另一个工具函数是数值强制转换成枚举数据类型,这是一个非常有用的工具函数,NI公司的状态机工具包就使用了这种方法。枚举、数值和字符串三者之间的转换是非常常用的,借助于这个专题,重点讨论一下三者之间的相互转换问题。
枚举类型本质上是无符号整数数据类型,可以选择U8、U16、U32,虽然它代表的是无符号整数,但是具有区别于一般无符号整数的特殊性,体现在三个个方面。
1、固定的数值范围。枚举类型根据其包含的项目个数,确定了具体的取值范围,比如包含5个项目的枚举类型,它的取值范围是0、1、2、3、4,以此类推。
2、自动回卷特性。如同一般的整数数据类型一样,枚举类型允许加减操作,比如对对最后一个项目执行加一操作,则结果为第0个项目,如果对第0个项目执行减一操作,则自动回卷到最后一个项目。
3、通过枚举数据类型,可以用字符串的方式表示一个整数,使它的意义更加明确。
由于枚举数据类型本质上是数值数据类型,因此可以直接相互转换。
既然枚举数据类型是用字符串的方式表示一个整数,那自然应该可以和字符串进行相互转换。枚举和字符串相互转换可以通过属性节点,这是比较常用但是效率非常低的用法,也可以通过字符串操作函数实现,这是推荐的用法。
既然枚举数据类型和整型数以及字符串可以直接进行相互转换,OPENG提供的转换函数目的何在?我们先看一下它的程序框图。
从程序框图上看,OPENG的数字枚举转换函数通过变体数据,将数值数据转换成枚举数据,上面的分析中数值类型是可以直接转换成枚举的数据类型的,之所以采用这种转换方式,主要的目的是为了便于实现状态机或者条件分支结构。
NI公司的状态机工具包就使用了上面的方法。
状态机工具包一切随缘老师的一篇文章专门介绍它的使用方法,如上图红色标记所示,它使用了数值转换成枚举的函数,但是这个函数是无法打开的,其实它使用的就是OPENG描述的方法。