在 STL 中间接寻址 (S7-1500) 在STL 中,以下选项可用于间接寻址: • 存储器间接寻址 • 寄存器间接内部区域寻址 • 寄存器间接跨区域寻址 存储器间接寻址对于存储器间接寻址,可以在变量中存储地址。变量可以是 WORD 或 DWORD 数据类型。变 量可以位于存储器区域“数据”(DB 或DI)、“位存储器” (M) 或“临时本地数据” (L) 中。 在 S7-1500 中,FB 参数也可用于保存地址。如果变量位于数据块中,那么必须是一般访问 数据块。 下列示例显示的是存储器间接寻址的应用:寄存器间接内部区域寻址寄存器间接寻址使用其中一个地址寄存器(AR1 或 AR2)来获取操作数的地址。寄存器间接跨区域寻址如果是寄存器间接跨区域寻址,则需使用地址寄存器来建立操作数全部地址的索引。即,位 地址和字节地址,以及存储区。可能的存储区有“输入”(I)、“输出” (Q)、“I/O” (P)、“位存 储器” (M)、“临时本地数据” (L) 和“数据”(DB或 DI)。 如果操作数被载入数据块,那么 必须为一般访问数据块,否则操作数必须有保留设置“在 IDB 中设置”。在指令中,仅编写操作数宽度。 可能的操作数宽度为位、字节、字和双字。 下列示例显示的是寄存器间接跨区域寻址的应用:S7-1500中的特性 在 S7-1500 中,特殊规则通过地址寄存器和数据块寄存器应用于数据交换: • 在块之外,寄存器中的值不再存在。块中的语言改变时,寄存器也将复位。 • 如果通过寄存器间接寻址访问 BYTE、WORD 或 DWORD类型的操作数,则地址必须以字节限 制开始。
间接寻址 (S7-300, S7-400)通过指针间接寻址 (S7-300, S7-400) 说明对于间接寻址,要求特定的数据格式,应包含地址或者还包含操作数的范围和数据类型。 该 数据格式称为指针。 以下提供的是指针类型: •POINTER (S7-300/400) • ANY (S7-300/400) • VARIANT(S7-1200/1500)有关指针数据类型的详细信息,请参见“另请参见”部分。 说明 在 SCL 中,指针数据类型的使用受到限制。唯一的选择是可以将其转发至被调用块。 示例 以下举例说明了使用区域内指针进行间接寻址:在 SCL 中间接寻址 (S7-300,S7-400) 数据块的间接寻址 (S7-300, S7-400) SCL 中数据块的间接寻址 可以使用转换函数WORD_TO_BLOCK_DB 来间接寻址数据块。 要将 DB 号指定为 WORD 数据类型的变量或表达式。 语法以下语法可用于间接寻址数据块:变量的间接寻址 (S7-300, S7-400) SCL 中变量的间接寻址间接寻址类似于juedui地址寻址。 指定圆括号中的偏移量而非地址。 偏移量由一个字节变量组成,如果是布尔型操作数,有一字节变量和一位变量。 字节和位变量必须是 INT 数据类 型。 PLC变量表的定时器和计数器无法以这种方法间接寻址。ARRAY 元素的间接寻址 (S7-300, S7-400) 说明 要寻址 ARRAY元素,可以输入整型变量以及常量作为下标。使用变量时,将在运行时计算 下标。例如,在程序循环中,每次循环都使用不同的下标。 说明下标变量 [i] 在开始块调用时读取一次,无法在处理期间由被调用的块进行更改。 在调用块并将间接索引的 ARRAY 元素("".["i"]) 作为输入/输出参数 (InOut) 传输到块时,无法在处理块时更改下标变量的值。值必须写入到与读取值时相同的 ARRAY 元素中。在 STL 中间接寻址 (S7-300, S7-400) 地址寄存器的基本知识 (S7-300,S7-400) 简介 两种地址寄存器可用于操作数的间接寻址:地址寄存器 1 (AR1) 和地址寄存器 2 (AR2)。地址寄存器长度相等,有 32 位。可以在地址寄存器中存储内部区域指针和跨区域指针。要定 义操作数的地址,可以在程序中调用存储的数据。通过加载和传递指令可以在寄存器和其它可用存储区之间交换数据。在 STL 中间接寻址 (S7-300, S7-400) 在 STL中,以下选项可用于间接寻址: • 存储器间接寻址 • 寄存器间接内部区域寻址 • 寄存器间接跨区域寻址 存储器间接寻址对于存储器间接寻址,可以在变量中存储地址。变量可以是 WORD 或 DWORD 数据类型。变 量可以位于存储器区域“数据”(DB 或DI)、“位存储器” (M) 或“临时本地数据” (L) 中。 下列示例显示的是存储器间接寻址的应用:寄存器间接内部区域寻址寄存器间接寻址使用其中一个地址寄存器(AR1 或 AR2)来获取操作数的地址。如果是寄存器间接内部区域寻址,那么仅通过地址寄存器索引位地址和字节地址(如 P#10.0)。在编写指令之前,不输入地址寄存器中的地址所应用到的存储区。 地址寄存器 中的地址随后移动到指令中指定的存储区。可能的存储区有“输入”(I)、“输出” (Q)、“I/O”(PI 或 PQ)、“位存储器” (M)、“临时本地 数据” (L)和“数据”(DB 或 DI)。 输入寄存器间接内部区域寻址时,在指定地址寄存器之后指定偏移量。 这一偏移量被添加到地址寄存器的内容中,而不会改变地址寄存器。 该偏移量还具有指针的格式。 必须指定 指针,必须作为常量输入寄存器间接跨区域寻址如果是寄存器间接跨区域寻址,请使用地址寄存器来建立操作数全部地址的索引,即,位地 址和字节地址,以及存储区。可能的存储区有“输入”(I)、“输出” (Q)、“I/O” (P)、“位存储 器” (M)、“临时本地数据” (L) 和“数据”(DB或 DI)。 在指令中,仅编写操作数宽度。 可 能的操作数宽度为位、字节、字和双字。下列示例显示的是寄存器间接跨区域寻址的应用:使用结构化数据类型时填充字节 非优化存储区中的填充字节在非优化存储区中,结构化数据类型将与偶数起始地址(可被 2 整除)对齐。如果先前的数据类型导致结构化数据类型的起始地址处于奇数地址或结束地址处于偶数地址, 则填充字节将自动插入到相应位置。举例来说,如果长度为七个字节的数组在数据块中跟随三个单字节,则会在数组前后均自动插入一个填充字节。例如,前三个字节位于地址“0.0”到“2.0”。后续数组位于地址“4.0”到“10.0”。随后的单个字节将获得地址“12.0”。 填充字节对于数据存储不可见(例如在 DB 中),但在复制结构时将发挥作用。如果要在 SIMATIC CPU 和外部设备之间传输预定义形式和大小的结构化数据类型,则遵循非优化数据存储的规则。复制结构化数据类型时的填充字节 复制由基本数据类型组成的结构化数据类型时,要区分用于计算填充字节的同一规则集是否适用于源和目标系统。 • 如果规则集适用于源和目标,则存储区将作为一个整体进行复制,这意味着变量之间的所有填充位和填充字节也将被复制。 • 否则,必须单独复制每个基本变量。在这种情况下,目标系统中的填充位和填充字节的值保持不变。只有布尔型数组的填充位会被复制。 填充字节可见的示例场景 下表显示了填充字节可见的一些场景: 数据类型 指令示例 示例场景• Struct • PLC 数据类型 • 数组 • Serialize (页 926)、 Deserialize(页 920)、 • WRREC (页 2798)、RDREC (页 2778)、 • TSEND_C(页 5519)、TRCV_C (页5535)、PUT (页5486)、GET (页 5480) •MoveResovledSymbolsToBuff e (页 2204)r、MoveResolvedSymbolsFromB uffer (页 2209) • 具有结构化元素的结构 •I/O(制造商特定数据记录) • I/O 设备地址空间中的结构 • 与其它制造商的 I/O 进行通信 • 在 Linux 下使用硬件• 设备的驱动程序标准存储区中的问题示例 已创建以下嵌套结构作为“typeHARTrequest”PLC数据类型,以作为数据记录发送到外部设 备。(见绿色边框。)问题:PLC 数据类型“typeHARTrequest”的实际长度为 11个字节。以字节为单位的几个奇数 长度也会导致在 PLC 数据类型中填充字节。(见红色标记。)包括所有填充字节在内,PLC 数据类型有14 个字节的长度用于数据交换。SIMATIC CPU 的寻址地址范围将与外部 设备用于数据交换的地址范围不匹配。解决方法:将标记为蓝色的数组更改为五个单字节。新“typeHARTrequest”PLC 数据类 型的长度为 12个字节(包括末尾的填充字节)。错误原因 简介 在 TIA Portal中,可根据不同的错误类型和原因,确定相应的响应机制,对错误相应可采用各种不同的编程语言。但具体的响应机制显示则取决于所有的编程语言。错误的确定需视具体情况而定。例如,加法运算过程中发生溢出可能是因为返回错误值而导致的错误。但在某些情况下,加法溢出是系统预定义的且可以接受,不再认为一种错误。在创建程序代码时,必须充分了解可能会发生的各种状况。例如,在编程通信连接时,就必须意识到所创建的连接随时可能会被中断。为了防止这一状况的发生,必须在程序中设置相 应的的故障响应。这是因为发生连接中断时将导致T_SEND 程序块无法进行消息传输。只有 采取了相应措施,在连接中断时系统才能发送信号通知操作员消息无法传输。由于指令 T_SEND无法防止连接中断,可通过 T_SEND 的输出错误信息加以提示。程序员不应该 忽略该指令的输出。在下文中,我们将其统称为错误,该错误在系统中为预定义的行为。