参数类型 ANY 的字节长度是 10,并包含关于数据类型(字节1),重复因子或需传输的数据类型的长度(字节2 和3),数据块编号(字节4),内存区域(字节6),位和字节的地址。
· ANY 参数类型的格式
· POINTER 参数类型的格式
下表包含一些关于如何配置含有ANY指针的ANY类型参数的功能块的例子:
No.
示例
1
功能块中的系统功能的参数化
下面的例子将说明如何为系统功能 SFC50“RD_LGADR” (读取模块逻辑地址)参数化 ANY 指针。例如对于功能块 FB1,按下述步骤编程:
1. 声明一个输入变量“test”和一个临时变量“test2”为 ANY 类型(图01)。
2. 例如,把 SFC50 的参数“PEADDR”传递给变量“test2”(图02)。
3. 通过判断 ANY 指针“test”,能够传递临时变量“test2”的数据。
图01
语句 LP##test先把地址加载到 Accu1,通过语句 LAR1把地址加载到地址寄存器 AR1 (可简写为:LAR1P##test)。每次读取地址寄存器 AR1 并存储数据(例如 T LW0)到临时变量“test2”(ANY 指针)中。Network1 中的语句复制数据传送到功能块 FB1 的 ANY 数据到临时变量“test2”。
图 02
2
动态提供一个数据块给 ANY 指针并传输数据块编号给 SFC84
在下面列出的程序例子中,功能块 FB1 的输入参数(SRCBLK_DB_NO及DSTBLK_DB_NO)将数据块编号赋值给 ANY 指针临时变量(SRCBLK_ANY及DSTBLK_ANY)。这些变量被传送给 SFC84 。
图.03 阐明了如何参数化 ANY 指针(临时变量)并将其传送给 SFC84。
图. 03
例如,功能块 FB1 在组织块 OB1中被调用,FB1 被相应的 DB 编号参数化。
图04
3
功能FC81"IBLKMOV"的参数化
FC81"IBLKMOV" 功能间接的传送数据区。以下示例说明如何参数化:
1. 指针在 OB100 中初始化。在本例中,DB1 的 2 个 WORD(从地址 50.0 开始)到 DB2(从地址 10.0 开始)。
2. 将读出地址的指针装在第一个块中。
3. 第二个块是为了初始化传送长度。下一个块中,目标地址被写在数据块中。
4. 的两个块与块运行无关,只是为了观察目的地址的数据变化。
图. 05
5. 于是"IBLKMOV" (FC81) 在 OB1 中被调用。
6. 标志位 M0.0 作用是为了只调用一次块。
7. 标志位 M10.1 确认数据记录传送无误。
8. "S_DATA","LEN" 和 "D_DATA"的变量必须以指针格式输入。这意味着变量 "P#DB1.DBX0.0" 被输入到 "S_DATA" 参数。 指针 "P#DB1.dbx10.0" 输入到 "LEN" 参数,而指针符号 ("P#DB1.DBX20.0") 作为在前面的位地址也写到 "D_DATA" 参数输入。 在屏幕显示里指针标识 (P#) 不是必要的。
9. Zui后输入的变量是标识传送数据的数据类型。在本例中,以参数B#16#04标识传送 "Word" 类型的数据。
图. 06
在 STEP7 鼠标点击 FC81 按 F1 键以获取在线帮助中 FC81 的更多信息。
注意事项:
为了能够把上述功能块 FB1用作多重背景,按下述步骤替换前两条语句(LP#test;和 LAR1;)。
No.
程序
注释
1
TAR2
将 AR2(多重背景)的地址写入 Accu1
2
AD DW#16#00FF_FFFF
隐藏不重要的信息
3
LAR1 P##test
把“test”的地址写入 AR1
4
+AR1
将 Accu1(来自多重背景)的地址添加到“test”的地址中并Zui终写入 AR1
结果是 #test 变量的地址存入了地址寄存器 AR1 中。要注意到 AR1 的增加是有限值范围的 (-32768... +32767),必须调整上面描述的例子在相应的程序中。