恭喜,你发布的帖子
发布于 2017-09-26 08:51:25
23楼
楼主只是研究一下Variant这个类型而写的程序。
其实,真正使用并不需要去判断数据类型。
为什么?
因为 指令 VariantGet 指令在获取值的时候,就会检查数据类型是否正确。不正确,它就不传送!
既然如此,就不用去判断。
使用Variant的主要原因,正如楼主说的那样,是为了能用一个函数、函数块来实现(TIA未提供的)某种功能、某种计算。并且要求它能接受不同的数据类型。
而针对上述具体的某种功能、计算,往往数据类型是有限的。比如计算,数据类型就是整型、双整型、单精度实型和双精度实型这几种。你只需要声明这几个类型的TEMP局部变量,用VariantGet逐一获得对应的值即可,反正类型不对,不传送,ENO=0;只有正确的(唯一的)ENO=1。余下的计算处理就明确了数据类型。
,处理结束时,就把结果给VariantPut输出即可。(通常,计算Input 是啥,结果也是相同数据类型)
这种方法,确实如楼主所说,占用不少存储区。如果只是占用程序存储区,而不是工作存储区,还是可以接受的。(这点是我猜的。因为当你调用这个功能或功能块的时候,数据类型已经确定了。编译后,TIA不会把你没用到的也放到工作存储区中。就像基本指令MOVE,它各种有效数据类型都接受,但绝不会把所有类型的MOVE功能,都放到工作存储区中的。)
所以,就像Zane 版主所说那样,其实Variant就是个对变量的解释说明,更形象的如kayan大侠说的“更像个管道”。
谢谢关注!
个人认为,除非必要,否则那样写还是不妥的。
而为什么MOVE可以呢?我认为是CPU在系统层面对传入和传出类型进行了解析,而对VARIANT类型的判断需要在用户程序中完成。
Variant的类型按照高级编程语言的说法属于“推断类型”
请填写推广理由:
分享
只看
楼主