您现在的位置是:首页 > PLC技术 > PLC技术
STEP 7的加载变量地址
来源:艾特贸易2018-04-28
简介下列语句给出了局部变量的起始地址: L P# name; LAR1 p#name; LAR2 P#name; 使用 name 作为局部变量名,这些语句把一个跨区的指针加载到累加器 1 或地址寄存器 AR1 或 AR2 中。区指针包含了变量
下列语句给出了局部变量的起始地址:
L P# name;
LAR1 p#name;
LAR2 P#name;
使用name作为局部变量名,这些语句把一个跨区的指针加载到累加器1或地址寄存器AR1或AR2中。区指针包含了变量第一个字节的地址。如果不能通过name唯一地识别局部变量,则需要在name前插入一个“#”,比如L P##name。根据所在块的不同,表1列出了允许name存在的变量区。
表1 允许装入的变量地址
1)与地址寄存器AR2有关的变量地址。
对于功能,块参数的地址不能直接加载到地址寄存器,在这里可以采用通过累加器1的方法(比如L P#name; LAR1;)。
对于使用关键字CODE_VERSION1编译的功能块(没有“多实例能力”),加载的是实例变量的绝对地址。
在“多实例能力”的功能块中,对于静态局部数据和块参数,加载的是相对于地址寄存器AR2的绝对地址。如果要计算实例数据块中变量的绝对地址,必须把AR2中的区内指针(仅指地址)和加载的变量地址相加。
举例1:
把变量地址加载到地址寄存器AR1
TAR2 ;
UD DW#16#OOFF_FFFF;
LAR1 P#name;
+AR1 ;
对于前两个语句,AR2中的地址加载到累加器,然后使用+AR1语句与AR1中的内容相加。结果,AR1包含了名称为#name的变量的地址。
举例2:
把变量地址加载到累加器1
TAR2 ;
UD DW#16#00FF_FFFF;
L P#name;
+D :
和举例1相似,这样的结果是累加器1包含了名称为#name的变量的地址。
如果区内指针的值为P#0.0,指针的加运算将被忽略。如果不把功能块用作局部实例,就属于这种情况。
注意:在“多实例能力”的功能块中寻址实例数据时,把AR2作为“基地址寄存器”来使用,“LAR2 P#name”将会覆盖地址寄存器AR2。
使用加载语句只能寻址一个完整的变量,而不是单个数组、结构或局部实例的组件。使用这些加载语句不能获得全局数据块或地址区输入、输出、外围I/O和位存储器中的变量。
表2给出了如何计算静态局部数据中INT变量和STRING变量的地址,以及如何使用这些地址。如果要使用作为局部实例调用的功能块中的示例程序,必须按照上面所述,把基地址和变量地址相加。
表2 装载变量地址(示例)
(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:)