首页 理论教育 使用Variant数据类型定义PLC参数类型示例

使用Variant数据类型定义PLC参数类型示例

时间:2023-06-30 理论教育 版权反馈
【摘要】:参数类型还可以是PLC数据类型。下面是使用绝对地址的Variant数据类型的例子:P#DB5.DBX10.0 INT12和%MW10,前者相当于数据类型Any,用来表示一个地址区,其起始地址为DB5.DBW10,一共12个连续的Int(整数)变量。

使用Variant数据类型定义PLC参数类型示例

参数类型是传递给被调用块的形参的数据类型。参数类型还可以是PLC数据类型。

1.Timer和Counter类型(S7-1500)

参数类型Timer和Counter分别占两个字节,用于指定在被调用代码块中使用的SIMATIC定时器和计数器。如果使用Timer和Counter参数类型的形参,其实参必须是SIMATIC定时器和计数器,例如T3和C8。

2.Block_FB、Block_FC和Block_DB(S7-1500)

参数类型Block_FB、Block_FC和Block_DB分别占两个字节,用于指定在被调用代码块中用作输入的块,参数的声明决定要使用的块的类型(例如FB、FC和DB),它们的实参应为块地址,例如FB3。

3.Void

参数类型Void不保存数值,它用于函数不需要返回值的情况(见图4-1中Ret_Val的数据类型)。

4.Pointer指针

指针数据类型(Pointer、Any和Variant)包含地址信息而不是实际的数值。

Pointer类型的参数是一个指向特定变量的指针,它在存储器中占用6个字节(见图2-21),字节0和字节1是数据块的编号。如果指针不是用于数据块,DB编号为0。用x表示的最低3位是变量的位地址,用b表示的16位是变量的字节地址。字节2用来表示CPU中的存储区,存储区的编码见表2-6。

978-7-111-58719-4-Chapter02-45.jpg

图2-21 Pointer指针的结构

2-6 Pointer指针中的存储区编码

978-7-111-58719-4-Chapter02-46.jpg

P#20.0是内部区域指针,不包含存储区域。P#M20.0是包含存储区域M的跨区域指针,P#DB10.DBX20.0是指向数据块的DB指针,指针中有数据块的编号。

输入指针时可以省略“P#”,编译时STEP7会将它自动转换为指针形式。如果使用前缀P#,则只能指向“标准”访问模式的存储区。

5.Any指针(www.xing528.com)

指针数据类型Any指向数据区的起始位置,并指定其长度。Any指针使用存储器中的10个字节(见图2-22),字节4~9的意义与图2-21中Pointer指针的0~5号字节相同。字节1(数据类型编码)的意义见表2-7。存储区编码与表2-6基本上相同,但是未使用编码16#1和16#2。

Any指针可以用来表示一片连续的数据区,例如P#DB2.DBX10.0 BYTE 8表示DB2中的DBB10~DBB17这8个字节。在这个例子中,全局数据块的编号为2,重复系数(数据长度)为8,数据类型的编码为B#16#02(Byte)。

Any指针也可以用地址作实参,例如DB2.DBW30和Q12.5,但是只能指向一个地址。

978-7-111-58719-4-Chapter02-47.jpg

图2-22 Any指针的结构

2-7 数据类型的编码

978-7-111-58719-4-Chapter02-48.jpg

6.Variant指针

Variant类型的参数是一个可以指向不同数据类型的变量的指针,它可以是基本数据类型的变量,还可以是String、DTL、Struct类型的Array、UDT或UDT类型的数组。Variant指针可以识别结构,并指向各个结构元素。Variant数据类型的操作数不占用背景数据块或工作存储器的空间,但是要占用CPU的存储空间。

经作者实验,它的实参可以是复杂数据类型或它的元素,例如字符串、结构、数组,包括多层嵌套的复杂数据类型或它的元素,例如结构中的数组或数组的元素,结构中的DTL或它的元素。它的实参可以是连续的地址区,因此可以取代数据类型Any。

Variant类型的变量不是一个对象,而是对另一个对象的引用。Variant类型的单个元素只能在函数和函数块的块接口的输入参数、InOut参数和临时数据区中声明为形参。数据类型Variant不能在数据块或函数块的块接口静态部分中声明,例如因为各元素的大小未知,或所引用对象的大小可以更改。

调用含有Variant类型参数的块时,可以将这些参数连接到任意数据类型的变量。调用某个块时,除了传递变量的指针外,还会传递变量的类型信息。块代码随后可以根据运行期间传递的变量类型来执行。

例如,函数的块参数为Variant数据类型,可以在程序中的某个地方传递整数数据类型的变量,而在程序中的另一个地方传递PLC数据类型的变量。借助Variant指令,函数可以正确响应这种情况,而不会出错。

下面是使用符号地址的Variant数据类型的例子:MyDB.Struct1.pressure1,MyDB、Struct1和pressure1分别是用小数点分隔的数据块、结构和结构的元素的符号地址。

下面是使用绝对地址的Variant数据类型的例子:P#DB5.DBX10.0 INT12和%MW10,前者相当于数据类型Any,用来表示一个地址区,其起始地址为DB5.DBW10,一共12个连续的Int(整数)变量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈