您现在的位置是:首页 > PLC技术 > PLC技术
STEP 7的ANY指针“变量”
来源:艾特贸易2018-04-28
简介ANY 参数必须使用在编译阶段定义过的数据区或变量来参数化。比如使用 SFC 20BLKMOV 把一个变量复制到数据区: CALL SFC20 ( SRCBLK := “ReC eiveMailbox”. Data, RET_VAL :=SFC20Error, DSTBLK :=P#DB63.DBX0.
ANY参数必须使用在编译阶段定义过的数据区或变量来参数化。比如使用SFC 20BLKMOV把一个变量复制到数据区:
CALL SFC20 (
SRCBLK := “ReC eiveMailbox”. Data,
RET_VAL :=SFC20Error,
DSTBLK :=P#DB63.DBX0.0 BYTE 8);
在运行时可以修改或重新定义变量或数据区,因为编辑器把一个确定的ANY指针指向了暂态局部数据中的实参。
如果实参自身也在暂态局部数据中,且实参数据类型为ANY,编辑器将会出现例外。此时将不再设置更多的ANY指针,编辑器将会把ANY变量当做指向实参的ANY指针。这意味着ANY变量的结构必须与ANY指针的结构相同。
然后就可以在运行时修改暂态局部数据中的ANY变量,给ANY参数指定其他实参。按照下列步骤使用ANY指针“变量”:
●应用数据类型为ANY的暂态局部变量(ANY变量的名称可以在块局部变量允许
的结构内自由地选择):
VAR_TEMP
ANY_POINTER :ANY;
END_VAR
●使用数值初始化ANY变量。
●初始化ANY参数,比如,在SFC 20中
CALL SFC20 (
SRCBLK :=“ReceiveMailbox”.Data,
RET_VAL :=SFC20Error,
DSTBLK :=ANY_POINTER);
这些程序并不限制SFC20 BLKMOV的使用,可以在任意块的所有ANY参数中使用它。
举例:如果要写一个复制块,用于在数据块中复制数据区。源操作数区和目标操作数区将被参数化。使用SFC 20 BLKMOV来复制。该块(一个功能FC)具有下列参数:
VAR_INPUT
QDB : INT; //Source data block
SSTA : INT; //Source starting address
NUMB : INT; //Number of bytes
DDB : INT; //Destination data block
DSTA : INT; //destination starting address
END_VAR
功能值将包含SFC 20的出错信息,并且如果直接使用SFC 20,功能值可以参与计算。另外,在错误事件中,状态位BR将设为“0”。
两个ANY变量,一个作为源操作数区的指针,一个作为目标操作数区的指针,对于块局部数据来说足够用了。
VAR_TEMP
SANY : ANY; //ANY pointer source
DANY : ANY; //ANYpointer destination
END_VAR
由于知道暂态局部数据中ANY指针的地址,就可以使用其绝对地址来编程,比如源指针的准备:
L W#16#1002 ; //Type BYTE
T LW 0;
L NUMB; //Number ofbytes
T LW 2
L QDB; //Source DB
T LW4:
L SSTA; //Start of the source
SLD 3;
OD DW#16#8400_0000;
T LD 6:
起始地址为LB 10的目标指针也用同样的方式来准备。它仅用于初始化SFC 20:
CALL SFC20 (
SRCBLK :=SANY,
RET_VAL :=RET_VAL,
DSTBLK :=DANY):
SFC 20的功能值RET_VAL使用功能FC的RET_VAL来初始化。
在原书磁盘上可以找到这个完整的小实例(程序“General Examples”中的功能FC 47)。
这样,可以给ANY指针赋任意值,可以在WORD字2或区指针中变换不同的类型,所以,从原理上来说,可以寻址任意变量或数据区,比如位存储区。
注意:如果暂态局部数据中的ANY指针指向的变量也位于所调用块的暂态局部数据中,必须输入V作为地址区,因为从被调用块的观点来看,这个变量位于前任块的暂态局部数据中。
(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:)
点击排行
