全局数据块中的变量可以按符号名或地址进行寻址。对于符号寻址,可以使用数据块的名称和变量名,并用圆点分隔。数据块的名称用引号括起来。
对于寻址,可以使用数据块的编号和数据块变量的地址,并用圆点分隔。地址标识符 % 被自动设置为地址的前缀。
S7-1200/1500 提供了一个选项,用于访问编程期间处于未知状态的数据块。为此,请在访问块的块接口中创建一个 DB_ANY 数据类型的块参数。数据块名称或数据块编号将在运行期间传送到此参数。为了访问数据块的内部变量,请使用 DB_ANY 数据类型的块参数名称以及变量的地址,并用圆点分隔。
说明 将带存储器预留区的 DB 传送至参数 DB_ANY。 无法将带存储器预留区的 DB 传送至数据类型为“DB_ANY”的块参数。 |
说明 按地址对 DB 变量寻址 以下变量无法进行寻址: 优化访问块中的变量。 LWORD、LINT、ULINT、LREAL、LTIME、LTOD 和 LDT 数据类型的变量。 佳做法是对这些变量使用更为便捷的符号寻址。 |
ARRAY 数据块
ARRAY 数据块是一种特殊类型的全局数据块。这些数据块包含一个任意数据类型的 ARRAY。例如,可以是 PLC 数据类型 (UDT) 的 ARRAY。
可通过关键字“THIS”寻址 ARRAY 数据块中的元素。然后再在方括号中指定下标。下标可以是一个常量,也可以是一个变量。变量类型的下标大可支持长度为 32 位的整数。
寻址 ARRAY 数据块的扩展选项位于“指令”(Instructions) 任务卡的“移动”(Move) 区域中。例如,可以通过这些指令对数据块名称进行间接寻址。
语法
"".TagName
%.absoluteAddress
#.%absoluteAddress
"<arraydbname".this[#i]..
SCL:
"<arraydbname"."this"[#i]..
下表内容为数据块中变量可能的地址:
BOOL | %DBn.DBXx.y | %DB1.DBX1.0 | DB1 中的数据位 1.0 |
BYTE, CHAR, SINT, USINT | %DBn.DBBy | %DB1.DBB1 | DB1 中的数据位 1 |
WORD, INT, UINT | %DBn. DBWy | %DB1.DBW1 | DB1 中的数据字 1 |
DWORD, DINT, UDINT, REAL, TIME | %DBn.DBDy | %DB1.DBD1 | DB1 中的数据双字 1 |
示例
以下示例为全局数据块变量的寻址:
"Motor".Value | 全局数据块 "Value" 中变量 "Motor" 的符号寻址。 |
%DB1.DBX1.0 | 全局数据块 "DB1" 中变量 "DBX1.0" 的寻址。 |
#MyDBAny.%DBX30.0 | 运行期间在 "MyDBany" 参数上传递的全局数据块中 "DBX30.0" 变量的寻址。 |
"MyARRAY_DB".THIS[#MyIndex].MyComponent.MyComponentElement | 寻址 ARRAY 数据块。通过 "MyIndex" 变量指定 ARRAY 下标。ARRAY 元素具有 2 个附加子结构:“MyComponent”和“MyComponentElement”。 |