WriteToArrayDBL:写入装载存储器的 ARRAY 数据块 (S7-1500) 说明可以使用“写入装载存储器的 ARRAY 数据块”(Write to ARRAY data block in load memory)指 令将索引引用的元素写入装载存储器 ARRAY DB 块类型的数据块中。 ARRAY 数据块是仅包含一个 ARRAY of<数据类型> 的数据块。ARRAY 的元素可以是 PLC 数据 类型或其它任何基本数据类型。ARRAY通常从下限“0”开始计数。 如果 ARRAY 数据块使用块属性“仅存储在装载存储器”进行指定,则该数组数据块将仅存 储在装载存储器中。当 REQ 参数中检测到信号上升沿时,将执行该指令。参数 BUSY 的信号状态将为“1”。如果在 BUSY参数中检测到信号下降沿,则将终止该指令将 VALUE 参数中的值写入该数据块中。 在一个程序周期内,参数 DONE的信号状态为“1”。 如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 使能输入 EN 的信号状态为“0”。 •如果在执行该指令过程中发生错误。如果操作数“TagIn1”的信号状态为“1”且在操作数“TagReq”处检测到上升沿,将执行该指令。将读取“ArrayDB”中的第二个元素并输出到“VALUE”参数中。在操作数“TagBusy”处检测到下降沿时,将中止该指令的执行参数 VALUE 将不再变化。如果该指令执行成功,则使能输出 ENO 的信号状态为TRUE,置位输出“TagOut”。该指令执行后,操作数“TagDone”的信号 状态将为 TRUE。有关以上示例中编程代码的更多信息,请参见参数 声明 数据类型 存储区 说明 DB 1) Input DB_ANY I、Q、M、D、L待写入数据的 ARRAY 数据 块 INDEX Input DINT I、Q、M、D、 L、P 或常量 待写入数据的 DB 中的元素。标准值可以是常数、 全局变量或索引值。 VALUE 1) Input VARIANT D(全局数据块 的元素) L(可在块接口的“Input”、 “InOut”和 “Temp”部分进行 声明。) 指向待读取工作存储器中 的 DB 的指针,并写入该工作存储器的值。 不必使用“TEMP”部分的本 地常数或变量。 BUSY Output BOOL I、Q、M、D、L BUSY ="1":仍在写入到 数组数据块 DONE Output BOOL I、Q、M、D、L DONE = "1":该指令执行 成功ERROR Output INT I、Q、M、D、 L、P 错误信息: 如果在该指令执行期间出 错,则在参数 ERROR 中输出一个错误代码。 1) 该数据块必须创建为带有“优化”块属性。
如果操作数“TagIn1”的信号状态为“1”且在操作数“TagReq”处检测到上升沿,将执行该指令。在操作数“TagBusy”处检测到下降沿时,将立即终止该指令的执行并将参数 VALUE 中的值写入“ArrayDB”的第二个元素中。如果该指令执行成功,则使能输出 ENO 的信号状态为 TRUE,置位输出“TagOut”。该指令执行后,操作数“TagDone”的信号状态将为 TRUE。有关以上示例中编程代码的更多信息,请参见“Sample Library for InstructionsVARIANT(S7-1200, S7-1500) VariantGet:读出 VARIANT 变量值 (S7-1200, S7-1500) 说明可以使用“读出 VARIANT 变量值”指令读取 SRC 参数的 VARIANT 指向的变量值,并将其写 入 DST参数的变量。SRC 参数具有 VARIANT 数据类型。可以在 DST 参数上指定除 VARIANT 外的任何数据类型。 DST参数变量的数据类型必须与 VARIANT 指向的数据类型相匹配。 说明 要复制结构和ARRAY,可以使用“MOVE_BLK_VARIANT:块移动”指令。更多信息,请参见 “另请参见”。如果满足下列条件之一,则使能输出 ENO 的信号状态为“0”: • 使能输入 EN 的信号状态为“0”。 •数据类型不匹配。(不传送任何值。)VariantPut:写入 VARIANT 变量值 (S7-1200, S7-1500) 说明可以使用“写入 VARIANT 变量值”指令将 SRC 参数的变量值写入 VARIANT 所指向的 DST 参 数存储区中。 DST参数具有 VARIANT 数据类型。可以在 SRC 参数上指定除 VARIANT 外的任何数据类型。 SRC 参数变量的数据类型必须与VARIANT 指向的数据类型相匹配。 说明 要复制结构和 ARRAY,可以使用“MOVE_BLK_VARIANT指令:块移动”指令。更多信息,请 参见“另请参见”。 如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 使能输入EN 的信号状态为“0”。 • 数据类型不匹配。(不传送任何值。)CountOfElements:获取 ARRAY 元素个数(S7-1200, S7-1500) 说明 可以使用“获取 ARRAY 元素的数量”指令,查询 VARIANT 指针所包含的ARRAY 元素数量。 如果是一维 ARRAY,则输出 ARRAY 元素的个数。(上限与下限 +1 的差值)。如果是多维ARRAY,则输出所有维的数量。 如果要查询 ARRAY DB 中的各个元素,则可使用指令“ReadFromArrayDB”或“WriteFromArrayDB”。这是因为,在此可对元素数目进行更为精准的错误评估。 说明 实例 VARIANT指针可以不指向实例,也可不指向多重实例或多重实例的 ARRAY。 说明 数据块中的 ARRAY。 如果要查询数据块中 ARRAY中元素的个数,则不能在该块中激活块属性“数据块在设备中 写保护”(Data block write-protected in thedevice)。否则,参数 RET_VAL 将返回结果“0”,而 与 ARRAY 包含的元素数无关。 如果 VARIANT 变量不是ARRAY,也将返回结果“0”。 如果 VARIANT 指向 ARRAY ofBOOL,则填充元素包含在计数中。(例如,ARRAY[0..1] of BOOL 将返回 8)。 如果满足下列条件之一,使能输出ENO 将返回信号状态“0”: • 使能输入 EN 的信号状态为“0”。 • VARIANT 变量不是ARRAY。(其结果是“0”。)如果操作数“TagIn”返回信号状态“1”,则执行该指令。读取“#TagIn_Source”操作数的VARIANT 指向的变量的 ARRAY 元素数量,并输出到“TagOut_RetVal”操作数。符号化移动 (S7-1500)运行期间进行符号化访问 (S7-1500) 应用 借助“运行期间进行符号化访问”功能,外部应用程序在运行期间可以访问 PLC程序中的变 量。外部应用程序可以是 HMI 应用程序、OPC UA 功能或其它通信功能等。可读取或写入变 量。创建程序时,并不编写静态的读写访问。实际上,在运行期间动态执行读写访问。通过手动或通过程序控制的方式输入要在运行期间访问的符号变量名称。“运行期间进行符号化访问”功能可处理优化数据以及非优化数据。这意味着相对于只能访 问非优化数据的 ANY指针而言,此功能更加灵活高效。 例如,此功能可通过外部设备或应用程序来跟踪变量。 限制 下列限制适用于运行期间的符号化访问: •符号化访问仅适用于 S7-1500 固件版本 V3.0 及以上版本。 • 变量必须具有属性“可从 HMI/OPC UA/Web API访问”或“可从 HMI/OPC UA/Web API 写 入”。 下表列出了可访问的数据:工作原理要在运行期间访问变量,需要执行两步操作: 1. 通过 HMI 等方式输入的符号化变量名必需进行“解析”。即,在 PLC程序中需创建相应变量 的引用。引用属于类型化指针,可通过该指针在 PLC 程序中寻址变量。要解析符号变量,请使用异步指令“ResolveSymbols”。 2. 可通过专门的 Move 指令读取或写入变量值。Move指令属于同步指令。该指令通过之前生成 的引用寻址变量。步骤 1 示例以下示例说明了使用指令“ResolveSymbols”解析符号变量名称的工作原理: • 在参数 "nameList"中指定一个包含要解析的变量名称的 Array of WSTRING。 • 在参数 "referenceList" 中指定保存变量引用的Array of ResolvedSymbol (SDT)。 • 这两个数组的限值需相同。 随后在参数 "referenceList"中收到对每个符号变量名称的引用。引用包含在系统数据类型 “"ResolvedSymbol"”的结构中。步骤 2 示例以下示例说明了如何使用指令“MoveResolvedSymbolsToBuffer”读取变量值并将其写入缓冲 区中: • 在参数"src" 中,指定包含对已解析变量引用的 Array of ResolvedSymbol (SDT) 。 • 在 "dst"参数中指定 Array of BYTE 。该数组用作写入变量值的目标缓冲区。 执行指令"MoveResolvedSymbolsToBuffer" 时,会通过引用读取变量值,并将其写入目标缓 冲区。 另请参见:MoveResolvedSymbolsToBuffer:从已解析的符号中读取值并写入缓冲区中ResolveSymbols:解析多个符号(S7-1500) 说明 “解析多个符号”指令用于解析多个符号变量名称。执行该指令后,会收到对变量的引用。引用属于类型化指针,可用于对变量进行读写访问。 在 "nameList" 参数中指定 Array of WSTRING。运行期间会通过此数组传送待解析的变量名称。 该数组可位于优化的存储区或非优化存储区中。 在参数 "referenceList"中指定保存引用的 Array of ResolvedSymbol (SDT)。ARRAY 需位于优化存储区中。这两个数组的限值需相同。 符号变量名称以 WSTRING 格式传输,且长度不得超过 254 个 UTF-16字符。输入完全限定 的名称(包括命名空间)。不支持表示本地变量的限定符 #。支持数组中的元素,但必须指定固定下标才能访问元素。不支持通过可变下标(如myArray[myIndexTag])进行访问。