技术论坛

关于Variant数据类型在LAD中的简单用法。

将好帖分享好友
作者 主题
至圣

经验值: 118524
发帖数: 21185
精华帖: 780
主题:【分享】关于Variant数据类型在LAD中的简单用法。
精华帖精华帖星级5级 推荐帖


只看楼主 只看精华 楼主 2017-09-27 16:03:08

 在1200/1500版区中,有不少关于Variant的疑惑、讨论。根据我对这个Variant的学习和使用,

结合各位大侠的表述,说一下我对它的认识和理解。


一、什么情况下,会考虑使用Variant?
如果你想做一个通用功能的函数、函数块,而被处理的数据类型是不确定的(被处理数据可能是

整数;也可能是实数等等);但执行的功能是一样的时候,就要考虑使用Variant。


二、Variant用在哪里?
Variant主要用在这个通用的函数(FC)、函数块(FB)的接口处和它们的局部变量中。(如果

是一个专用的函数、函数块,数据类型都是确定的,你不需要用Variant。)


三、Variant到底是什么?
Variant在使用上,虽然把它称为指针,但实际上,它是在函数、函数块上开了一个个不占用

空间的“口子”,对于函数要处理的各种数据类型变量,都可以通过它进入函数(只是进入哦,

函数内的计算,不能在此取得数值)。


四、在哪里可以取得进入函数的Variant变量的值呢?
取得Variant变量的值是要用VariantGet获得,用VariantPut输出。


下面用个简单例子来详细说明:

首先注意到,用Variant做函数,它只支持固件版本4.0以上的1200PLC。


例如:我需要个通用的功能函数,来处理一个数值的1/2,然后输出。根据以往项目经验,主要是处理整数

,双精度整数、实数、长实数四种。准备写个通用函数放到全局库中,各项目可以调用。(否则我需要针对不同的数据类型写四个FC。)


1、首先,新建个FC(取个名字HafB)
2、在函数输入接口处写个变量,数据类型选择Variant;在输出接口也写个变量,数据类型也选

Variant。为了处理出错,添加个状态字。
然后使用中间局部变量,添加可能需要的各种数据类型,用它们来获取实际使用时的值。最后用

个布尔值变量,控制本函数的ENO。
见下图:

 


3、写FC程序
程序很简单,写出一个程序段,然后就是复制-拷贝-粘贴,然后再用鼠标按住那几个声明的变量

拖-拽-放。


 


每一个处理程序段中,都是从VariantGet指令获取这个数据类型的数值,然后处理计算,发送到

输出,然后置位旗标。


4、函数测试


为方便测试,我建了个数据类型(一股脑的把四种类型都写进去);然后建个全局DB,使用这个

自定义数据类型,分别作测试函数的输入和输出。
下图:

 

然后

在主循环OB1中拖入4个写好的FC(HafB),打开上述DB,用鼠标按住变量旗标,拖入到各自的

FC接口。下载硬件配置,下载全部程序,启动运行。
故意用个不在范围的数据类型,看看FC是如何处理的。

 

 

至此,一个简单地、通用的FC就完成了。可以拖到自己的全局库中,供以后调用啦。


 


学而时习之,不亦说乎?温故而知新,不亦乐乎?
将好帖分享好友
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1426773&b_id=50&s_id=76&num=26&myreply=0&pno=0&af=0&c_floor=&GoWeb=0

至圣

经验值: 118524
发帖数: 21185
精华帖: 780
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 楼主 1楼 2017-09-27 16:35:21

 注意到了么?在这个通用的FC中,不需要做调用进来的变量类型判断

这是由于,在你实际编程,调用这个通用FC时,由进入接口的数据类型,在经过VariantGet 获得值,那些中间局部变量的数据类型,就确定了。VariantGet的说明很清楚,非对应的数据类型不传送,其ENO=0

这只是简单的一个说明使用方法的例子。如果需要更复杂一些的。还可以声明中间局部变量为Variant,作为不同计算中间的通用“管道”,用一点来传递不同的数据类型,达到在一个FC、FB中去做二次计算用。






学而时习之,不亦说乎?温故而知新,不亦乐乎?
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 118524
发帖数: 21185
精华帖: 780
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 楼主 2楼 2017-09-27 16:57:22

 

在上述主循环OB中,我拖入了5个相同的FC,分别使用了4个不同的正确的数据类型,和一个错误的数据类型。

在线运行时,你可以分别双击每一个FC。看看它对于这个数据类型是如何处理的。每一个数据类型的都要看看。包括错误的是如何处理的。


正确处理实数的。

 

双击OB中错误数据类型的FC,如下图:


 

我想,通过这个例子,应该知道Variant的含义和简单用法了。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 37285
发帖数: 5107
精华帖: 47
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 3楼 2017-09-27 21:57:16




受益匪浅!


工业起重机防摇摆 QQ:404136820 AntiSwayControl
将好帖分享好友
以下网友喜欢您的帖子:

  
游侠

经验值: 501
发帖数: 22
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 4楼 2017-09-27 22:54:11

有空照着楼主的方法试验下,


书山有路,学海无涯。
将好帖分享好友
以下网友喜欢您的帖子:

  
侠士

经验值: 1112
发帖数: 82
精华帖: 1
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 5楼 2017-09-28 08:37:26
总结的很好,收藏了
 
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 13567
发帖数: 2017
精华帖: 16
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 6楼 2017-09-28 09:20:12

一个机械在讲程序。。。。。


工控毁我青春!
将好帖分享好友
以下网友喜欢您的帖子:

  
侠圣

经验值: 3722
发帖数: 486
精华帖: 1
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 7楼 2017-09-28 09:49:46

简洁实用,收藏备用,感谢分享。


永无止境!
将好帖分享好友
以下网友喜欢您的帖子:

  
游士

经验值: 290
发帖数: 19
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 8楼 2017-09-28 10:22:18

谢谢楼主分享,写的很详细,受益匪浅


 
将好帖分享好友
以下网友喜欢您的帖子:

  
侠士

经验值: 1457
发帖数: 49
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 9楼 2017-09-28 10:46:42

感谢分享!

“VariantGet 获得值,那些中间局部变量的数据类型,就确定了。VariantGet的说明很清楚,非对应的数据类型不传送,其ENO=0。”学习了!


没有最好,只有更好!
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 62566
发帖数: 12587
精华帖: 119
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 10楼 2017-09-28 11:22:20


谢谢乐版的分享,收藏了


 
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 118524
发帖数: 21185
精华帖: 780
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 楼主 11楼 2017-09-28 13:35:47
以下是引用HUANGZE75在2017-09-28 11:22:20的发言 >


谢谢乐版的分享,收藏了

这里有一点要说明。这个VariantGet、VariantPut只支持PLC版本4.0以上的(现售的)。换句话说,最好使用TIA V14。

使用 TIA V14还会带来一些更多的使用方法。方便更进一步的做成库。

 比如:你可以在接口处使用Variant来接受未知个数、未知类型的数组,(一维的数组比较方便、保险。),用CountOfElements 来获取数组的元素个数。

后面即可按前述,分类型,逐个处理啦。

此外,如果是已知类型,未知元素个数,你还可以声明 Array [*] of Type 的数组。

那些IS_Type 的判断数值类型的指令,看似都是从前版本用的。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
将好帖分享好友
以下网友喜欢您的帖子:

  
游侠

经验值: 312
发帖数: 18
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 12楼 2017-09-28 16:26:51

帖子很好,收藏。


工业非标设备控制系统开发设计及调试维修
将好帖分享好友
以下网友喜欢您的帖子:

  
奇侠

经验值: 7898
发帖数: 1662
精华帖: 4
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 13楼 2017-09-29 15:13:56

虽然不太明白,还是感觉很厉害的样子。


学无止境
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 33422
发帖数: 3081
精华帖: 93
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 14楼 2017-09-29 23:15:44

感谢y版分享,学习了。虽然还没有机会用1200,但感觉越来越近了。


http://blog.163.com/xiuzhang_2000/
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 11034
发帖数: 651
精华帖: 5
回复:关于Variant数据类型在LAD中的简单用法。
推荐帖


只看楼主 只看精华 15楼 2017-09-30 07:57:39

前几天刚好看到1200/1500编程直到书中关于Variant数据类型的介绍,经过版主的精彩解说,收益匪浅!


人生如逆水行舟,不进则退。
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 15963
发帖数: 1452
精华帖: 2
回复:关于Variant数据类型在LAD中的简单用法。


只看楼主 只看精华 16楼 2017-09-30 09:55:44

谢谢分享。


我回来了!继续努力!
将好帖分享好友
以下网友喜欢您的帖子:

  
新手

经验值: 35
发帖数: 5
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。


只看楼主 只看精华 17楼 2017-10-01 14:50:49


,好强不错


 
将好帖分享好友
以下网友喜欢您的帖子:

  
奇侠

经验值: 5279
发帖数: 786
精华帖: 5
回复:关于Variant数据类型在LAD中的简单用法。


只看楼主 只看精华 18楼 2017-10-03 10:09:00

非常不错,有空按照楼主的项目测试一下。




drongh
将好帖分享好友
以下网友喜欢您的帖子:

  
至圣

经验值: 12989
发帖数: 618
精华帖: 0
回复:关于Variant数据类型在LAD中的简单用法。


只看楼主 只看精华 19楼 2017-10-04 08:33:35

写的真的!


相信自己可以适应一切
将好帖分享好友
以下网友喜欢您的帖子:

  
收起
关于Variant数据类型在LAD中的简单用法。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。