关于pointer数据类型的使用问题
刘玉蓉
发布于2014-10-24 17:38
10
0
标签:
想把P#200.0传递到FC块的IN形参中,请问FC块中应该怎么设置,怎么使用pointer类型的IN形参呢?还有怎么将pointer类型和any类型的数据传递到FC块中呢,请详细说明一下?后,如果同时打开了两个DB,怎么分别读出两个DB的数据?
佳答案
把P#200.0传递到FC块的IN形参中,操作比较简单,举例如下:在FC块的输入参数IN中建立一个IN1,Data Type(数据类型)为Pointer(指针),如果在主循环组织块OB1中调用FC1时,由于FC没有自己的背景数据块,因此FC的形式参数在调用时都必须赋予实际参数,在调用FC1时,形式参数IN1后面为红色问号,必须指定实际参数,否则程序不能完成,在IN1等号后面直接填写P#200.0即可,就把P#200.0传递到FC块的IN形参中
CALL FC 1
IN1:=P#200.0
将any类型的数据传递到FC块中也一样,如在FC2块中建立输入变量IN2,定义数据类型Data Type为Any(任意参数),同样在OB1中调用FC2,指定FC2中形式参数IN2的实际参数是传递数据块号如DB1,
CALL FC 2
IN1:=DB1
Pointer(指针)和Any(任意参数)都是参数数据类型,它们是用于FC或者FB的参数的数据类型,使用该参数,可以不确定类型和长度的数据通过参数传递给FC和FB。参数类型为程序提供了很高的灵活性,可以实现更通用的功能。一般:
Pointer:为6字节指针类型,传递DB块号和数据地址
Any:为10字节指针类型,传递DB块号、数据地址、数据数量以及数据类型
如果同时打开了两个DB,怎么分别读出两个DB的数据
关于如果同时打开了两个DB,怎么分别读出两个DB的数据,说明如下:在S7-300/400PLC中有两个数据块地址寄存器,数据块寄存器用于存储所有数据块的数据,多可以打开一个共享数据块DB和一个背景数据块DI。用OPEN DB指令打开一个共享数据块DB;用OPEN DI打开一个背景数据块DI。在STEP7中一般采用先打开后访问,即先打开那个数据块就读取该数据中的数据,注意不能交叉。在打开一个数据块的同时将关闭另一个数据块,如用指令OPN DB。。。打开共享数据块(自动关闭之前打开的共享数据块),或用指令OPN DI。。。打开一个背景数据块(自动关闭之前打开的背景数据块)。举例如下:
OPN DB1 //打开数据块DB1,作为共享数据块
L DBW2 //将DB1的数据字DBW2装入累加器1的低字中
T MW0 //将累加器低字中的内容传送到存储字MW0;
T DBW4 //将累加器1低字中的内容传送到DB1的数据字DBW4中
OPN DB2 //打开数据块DB2,作为背景数据块
L DBB2 //将DB2的数据字节DBB2装入累加器1低字的低字节中
T DBB10 //将累加器1低字中低字节的内容传送到DB2的数据字节DBB10