1、对ANY与VARIANT两个数据类型有点混淆,手册中ANY的示例:P#M20.0BYTE10,VARIANT的示例:P#DB10.DBX10.0INT12,这两个示例从形式上是一样的。那么ANY与VARIANT数据类型有哪些异同呢?
2、手册中VARIANT符号示例如截图所示MY.DB.STRUCT1.PRESSURE1,这种表示方式是不是只指明了起始地址而没有指明地址的长度?那么我应该何时用绝对表示方式?何时用符号表示方式?
问题比较多,还请各位老师传到授业解惑。非常感谢。
问题补充:
我有个疑问,比如自由口发送指令SEND_PTP的BUFFER管脚是VARIANT数据类型,如果用符号寻址的话就指定了发送缓存区的首地址,那么发送长度从哪里指令呢?
图片说明:
cd375056e13d4e0a3bc10c80ad4fbd07
最佳答案
1、ANY和VARIANT都是指针型数据类型,西门子300/400/1500支持ANY类型,1200/1500支持VARIANT类型,见图示
2、ANY类型的参数指向数据区的起始位置,并指定其长度。ANY指针使用存储器中的10个字节。
3、VARIANT类型的参数是一个可以指向不同数据类型变量(而不是实例)的指针。VARIANT指针可以是一个元素数据类型的对象,例如INT或REAL。也可以是一个STRING、DTL、STRUCT数组、UDT或UDT数组。VARIANT指针可以识别结构,并指向各个结构元素。VARIANT数据类型的操作数在背景DB或L堆栈中不占用任何空间。但是,将占用CPU上的存储空间。
VARIANT类型的变量不是一个对象,而是对另一个对象的引用。VARIANT类型的各元素只能在函数的块接口中声明。因此,不能在数据块或函数块的块接口静态部分中声明,例如,因为各元素的大小未知。所引用对象的大小可以更改。
图片说明:
fd1c2f525fe122a435fCE1cf88586b68
提问者对于答案的评价:
谢谢回答。
手册中有107页有VARIANT数据类型的举例。个人感觉VARIANT的符号表示方法和绝对表示方法还是有挺大差异的。绝对表示方法P#DB10.DBX10.0INT12指定了起始地址和长度,而符号表示方法MyDB.Struct1.pressure1只指定了起始地址而没有指定长度。
有些指令如ATH的输入管脚中是有起始地址和长度两个输入,有些指令如SENDPTP的输入管脚中只有起始地址。这两种情况下用VARIANT的符号表示方法和绝对表示方法是否会有差异。问了400热线给出的回答是SENDPTP指令用的VARIANT输入如果用符号表示方法的话指针指向数组则长度为整个数组的长度,指针指向字符串则长度为整个字符串的长度。
个人感觉VARIANT的这两种表示方法还是有很大区别的,哪位老师有相关的资料或者范例可供分享呀?谢谢。