如何设置带有”ANY”或”POINTER”数据类型的功能块?

描述:
参数类型 ANY 的字节长度是 10,并包含关于数据类型(字节1),重复因子或需传输的数据类型的长度(字节2 和3),数据块编号(字节4),内存区域(字节6),位和字节的地址。你可以在STEP7的在线帮助中找到相关的更多信息:n

  • ANY 参数类型的格式n
  • POINTER 参数类型的格式

下表包含一些关于如何配置含有ANY指针的ANY类型参数的功能块的例子:n

  1. Parameterization of a system function in the function block
  2. Dynamic supply of a data block to the ANY pointer and transfer of the DB number on an SFC84
  3. Parameterization of the function FC81 “IBLKMOV”
No. 示例
1

功能块中的系统功能的参数化
下面的例子将说明如何为系统功能 SFC50 “RD_LGADR” (读取模块逻辑地址)参数化 ANY 指针。例如对于功能块 FB1,按下述步骤编程:n

  1. 声明一个输入变量“test”和一个临时变量“test2”为 ANY 类型(图01)。n
  2. 例如,把 SFC50 的参数“PEADDR”传递给变量“test2”(图02)。n
  3. 通过判断 ANY 指针“test”,能够传递临时变量“test2”的数据。

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图01n

语句 L P##test 先把地址加载到 Accu1,然后通过语句 LAR1 把地址加载到地址寄存器 AR1 (可简写为:LAR1 P##test)。每次读取地址寄存器 AR1 并存储数据(例如 T LW0)到临时变量“test2”(ANY 指针)中。Network 1 中的语句复制数据传送到功能块 FB1 的 ANY 数据到临时变量“test2”。n

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图 02

2动态提供一个数据块给 ANY 指针并传输数据块编号给 SFC84
在下面列出的程序例子中,功能块 FB1 的输入参数(SRCBLK_DB_NO及DSTBLK_DB_NO)将数据块编号赋值给 ANY 指针临时变量(SRCBLK_ANY及DSTBLK_ANY)。这些变量然后被传送给 SFC84 。

图. 03 阐明了如何参数化 ANY 指针(临时变量)并将其传送给 SFC84。

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图. 03

例如,功能块 FB1 在组织块 OB1中被调用,FB1 被相应的 DB 编号参数化。

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图04

3功能FC81 “IBLKMOV”的参数化
FC81 “IBLKMOV”功能间接的传送数据区。以下示例说明如何参数化:

  1. 指针在 OB100 中初始化。在本例中,DB1 的 2 个 WORD(从地址 50.0 开始)到 DB2 (从地址 10.0 开始)。
  2. 将读出地址的指针装在第一个块中。
  3. 第二个块是为了初始化传送长度。下一个块中,目标地址被写在数据块中。
  4. 接下来的两个块与块运行无关,只是为了观察目的地址的数据变化。

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图. 05

  1. 于是”IBLKMOV”(FC 81) 在 OB1 中被调用。
  2. 标志位 M0.0 作用是为了只调用一次块。
  3. 标志位 M10.1 确认数据记录传送无误。
  4. “S_DATA”, “LEN”和 “D_DATA”的变量必须以指针格式输入。 这意味着变量 “P#DB1.DBX0.0″被输入到 “S_DATA” 参数。指针 “P#DB1.dbx10.0” 输入到 “LEN” 参数,而指针符号 (“P#DB1.DBX20.0”) 作为在前面的位地址也写到 “D_DATA” 参数输入。在屏幕显示里指针标识 (P#)不是必要的。
  5. 最后输入的变量是标识传送数据的数据类型。在本例中,以参数B#16#04标识传送 “Word”类型的数据。

如何设置带有"ANY"或"POINTER"数据类型的功能块?
图. 06

在 STEP 7 鼠标点击 FC81 然后按 F1 键以获取在线帮助中 FC 81 的更多信息。

注意事项:
为了能够把上述功能块 FB1用作多重背景,按下述步骤替换前两条语句(L P#test;和 LAR1;)。

No.

程序注释
1TAR2

将 AR2(多重背景)的地址写入 Accu1

2AD DW#16#00FF_FFFF

隐藏不重要的信息

3LAR1 P##test把“test”的地址写入 AR1
4+AR1

将 Accu1(来自多重背景)的地址添加到“test”的地址中并最终写入 AR1

结果是 #test 变量的地址存入了地址寄存器 AR1 中。但是要注意到 AR1 的增加是有限值范围的 (-32768 … +32767),所以必须调整上面描述的例子在相应的程序中,更多的信息参考下面的条目:

  • 如何创建和跟新多重背景?
    条目号18723826

关键字:
间接寻址,PL (以前的本地数据)

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc333480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论