如何在STEP7中将IN、OUT和IN-OUT参数的ANY指针地址参数载入地址寄存器AR1?

例如,语句“LAR1  P##PointerInput”在一个
函数
(FC)中是无效的(图. 01)。当输入一个命令或者试图保存一个块时将会得到如下错误信息:

30:9: “Compilation of the Network 1 is not possible, because it still contains invalid statements.”

然而,同样的语句在一个功能块(FB)中是有效的。此错误信息只是次要信息,如果语句在保存时被标记成红色此信息就总是被显示出来。当将ANY指针载入到地址寄存器AR1和AR2 时,必须注意以下功能块和函数:

  • 在FB情况下,传输的ANY指针被保存到为其分配的情景数据块中。
  • 在FC情况下,传输的ANY指针被保存到调用的本地数据栈中。

ANY指针样例程序

图. 01

对于FB语句“LAR1 P##PointerInput”是有效的。

图. 02

在FC中,地址必须首先通过语句“L P#PointerInput”载入到Accu1中并从那里通过语句LAR1载入到AR1寄存器中。 FB和FC之间的不同之处是语句“LAR1 P##VariableName”

  • 在FC中只能访问TEMP变量(本地数据堆栈)。
  • 在FB中也能访问IN, OUT, IN-OUT和STAT变量。

图.03给出了在FC中如何访问一个TEMP变量的样例。

图. 03

图.04 给出了一个在FC中ANY变量(IN变量)的数据是如何传送的 样例。数据从地址寄存器AR1中传送到临时变量以作进一步的处理。例如,IN变量“Input”(类型 :ANY)的地址首先载入到Accu1并从那里再载入到AR1寄存器。基本地址能从地址寄存器AR1传送到临时变量“bit_adr”(类型:DWORD)。

 
图. 04

,例如,语句“LAR1  P##PointerInput”在一个
函数
(FC)中是无效的(图. 01)。当输入一个命令或者试图保存一个块时将会得到如下错误信息:

30:9: “Compilation of the Network 1 is not possible, because it still contains invalid statements.”

然而,同样的语句在一个功能块(FB)中是有效的。此错误信息只是次要信息,如果语句在保存时被标记成红色此信息就总是被显示出来。当将ANY指针载入到地址寄存器AR1和AR2 时,必须注意以下功能块和函数:

  • 在FB情况下,传输的ANY指针被保存到为其分配的情景数据块中。
  • 在FC情况下,传输的ANY指针被保存到调用的本地数据栈中。

ANY指针样例程序

图. 01

对于FB语句“LAR1 P##PointerInput”是有效的。

图. 02

在FC中,地址必须首先通过语句“L P#PointerInput”载入到Accu1中并从那里通过语句LAR1载入到AR1寄存器中。 FB和FC之间的不同之处是语句“LAR1 P##VariableName”

  • 在FC中只能访问TEMP变量(本地数据堆栈)。
  • 在FB中也能访问IN, OUT, IN-OUT和STAT变量。

图.03给出了在FC中如何访问一个TEMP变量的样例。

图. 03

图.04 给出了一个在FC中ANY变量(IN变量)的数据是如何传送的 样例。数据从地址寄存器AR1中传送到临时变量以作进一步的处理。例如,IN变量“Input”(类型 :ANY)的地址首先载入到Accu1并从那里再载入到AR1寄存器。基本地址能从地址寄存器AR1传送到临时变量“bit_adr”(类型:DWORD)。

 
图. 04

如何在STEP7中将IN、OUT和IN-OUT参数的ANY指针地址参数载入地址寄存器AR1?

相关文章:

你感兴趣的文章:

标签云: