(字节4),内存区域(字节6),位和字节的地址。
· ANY 参数类型的格式
· POINTER 参数类型的格式
下表包含一些关于如何配置含有ANY指针的ANY类型参数的功能块的例子:
No. | 示例 |
1 | 功能块中的系统功能的参数化 1. 声明一个输入变量“test”和一个临时变量“test2”为 ANY 类型(图01)。 2. 例如,把 SFC50 的参数“PEADDR”传递给变量“test2”(图02)。 3. 通过判断 ANY 指针“test”,能够传递临时变量“test2”的数据。 语句 L P##test先把地址加载到 Accu1,然后通过语句 LAR1把地址加载到地址寄存器 AR1 (可简写为:LAR1 P##test)。每次读取地址寄存器 AR1 并存储数据(例如 T LW0)到临时变量“test2”(ANY 指针)中。Network 1 中的语句复制数据传送到功能块 FB1 的 ANY 数据到临时变量“test2”。
|
2 | 动态提供一个数据块给 ANY 指针并传输数据块编号给 SFC84 图. 03 阐明了如何参数化 ANY 指针(临时变量)并将其传送给 SFC84。
例如,功能块 FB1 在组织块 OB1中被调用,FB1 被相应的 DB 编号参数化。
|
3 | 功能FC81 "IBLKMOV"的参数化 1. 指针在 OB100 中初始化。在本例中,DB1 的 2 个 WORD(从地址 50.0 开始)到 DB2 (从地址 10.0 开始)。 2. 将读出地址的指针装在第一个块中。 3. 第二个块是为了初始化传送长度。下一个块中,目标地址被写在数据块中。 4. 接下来的两个块与块运行无关,只是为了观察目的地址的数据变化。 |
图. 05 5. 于是"IBLKMOV" (FC 81) 在 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. 最后输入的变量是标识传送数据的数据类型。在本例中,以参数B#16#04标识传送 "Word" 类型的数据。
在 STEP 7 鼠标点击 FC81 然后按 F1 键以获取在线帮助中 FC 81 的更多信息。 |
注意事项:
为了能够把上述功能块 FB1用作多重背景,按下述步骤替换前两条语句(L P#test;和 LAR1;)。
No. | 程序 | 注释 |
1 | TAR2 | 将 AR2(多重背景)的地址写入 Accu1 |
2 | AD DW#16#00FF_FFFF | 隐藏不重要的信息 |
3 | LAR1 P##test | 把“test”的地址写入 AR1 |
4 | +AR1 | 将 Accu1(来自多重背景)的地址添加到“test”的地址中并最终写入 AR1 |
结果是 #test 变量的地址存入了地址寄存器 AR1 中。但是要注意到 AR1 的增加是有限值范围的 (-32768 ... +32767),所以必须调整上面描述的例子在相应的程序中。