请联系客服QQ
艾特贸易网首页

艾特贸易网

STEP 7的加载变量地址

提示:

下列语句给出了局部变量的起始地址:L P# name;LAR1 p#name;LAR2 P#name; 使用name作为局部变量名,这些语句把一个跨区的指针加载到累加器1或地址寄存器AR1或AR2中。区指针包含了变量第一个字节的地址。如果不能通过name唯一地识别局部变量,则需要在name前插入一个“#”,比如L P##name。根据所在块的不同,表1列出了允许

    下列语句给出了局部变量的起始地址:

    L    P# name;

    LAR1    p#name;

    LAR2    P#name;

    使用name作为局部变量名,这些语句把一个跨区的指针加载到累加器1或地址寄存器AR1AR2中。区指针包含了变量第一个字节的地址。如果不能通过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元每篇,请联系客服,谢谢!在线客服:艾特贸易网客服为您服务


(责任编辑: 艾特贸易网 )

  • 本文关键字:STEP7 

免责声明:本文章仅代表作者个人观点,与艾特贸易网无关。本站大部分技术资料均为原创文章,文章仅作为读者参考使用,请自行核实相关内容,如若转载请注明来源:艾特贸易网 http://www.aitmy.com