如果使用指向地址的指针,则可能在在线更改期间移动地址的内容。如果使用绝对地址,则在线更改期间地址的内容不会更改。 |
.语法:
%<内存区域前缀> ( <大小前缀> )? <内存位置>
<内存区域前缀> : I | Q | M
<大小前缀> : X | B | W | D
<内存位置> : <数字> ( .<数字> )* // 根据目标系统而定
定义地址时,使用特定的字符串来表示存储器的位置和大小。地址用百分号(%)标记,后跟内存范围前缀,可选的大小前缀和内存范围位置。用于寻址内存位置的编号取决于目标系统。
内存范围前缀 | |
---|---|
I | “输入”的输入内存范围 对于通过输入驱动器的物理输入,“传感器” |
Q | “输出”的输出内存范围 对于通过输出驱动器的物理输出,“执行器” |
M | 内存范围标志 |
大小前缀 | 数据类型 | 数据宽度 |
---|---|---|
没有大小前缀 | 一位 | |
X | 一位 | |
B | BYTE | 8位 |
W | WORD | 16位 |
D | DWORD | 32位 |
.例如
%QX7.5 %Q7.5 | 输出位7.5的单个位地址 |
%IW215 | 输入字215的字地址 |
%QB7 | 输出字节7的字节地址 |
%MD48 | 标志存储器中存储位置48处的双字地址 |
%IW2.5.7.1 | 输入字的字地址; 解释取决于当前控制器配置 |
VAR wVar AT %IW0 : WORD; END_VAR | 带有输入字地址信息的变量声明 |
VAR xActuator AT %QW0 : BOOL; END_VAR | 布尔变量声明 注意:对于布尔变量,如果未指定单个位地址,则会在内部分配一个字节。xActuator的值更改会影响从QX0.0到QX0.7的范围。 |
VAR xSensor AT IX7.5 : BOOL; END_VAR | 布尔变量声明,其中明确指定了单个位地址。在访问时,只读取输入的7.5位。 |
确保地址有效,如下所示:
要在应用程序中映射有效地址,必须知道过程映像中所需的位置(适用的存储范围):输入存储范围(I),输出存储范围(Q)和标志存储范围(M)—参见上文。此外,你还必须指定所需的大小前缀:BYTE, WORD, DWord(请参见上文:X, B, W, D)
当前的设备配置和设备设置(硬件结构,设备描述,I / O设置)起着决定性的作用。请特别注意在具有“字节寻址模式”的设备和具有“面向字的IEC寻址模式”的设备的位地址解释中的差异。例如,在字节寻址设备中,位地址%IX5.5的点之前的数字寻址字节5。另一方面,在字寻址设备中,它寻址字5。相反,使用字或字节地址进行寻址与设备类型无关:%IW5始终对字5进行寻址,字节地址%IB5始终对字节5进行寻址。无论大小和寻址方式如何,都可以使用相同的地址信息寻址不同的存储单元。
下表显示了位,字节,字和双字的字节寻址和面向字的IEC寻址的比较。它还显示了在字节寻址情况下存在的重叠内存范围(另请参见下表下方的示例)。
关于语法,请注意IEC寻址模式始终是面向字的。在这种情况下,字号位于该点之前,而位数位于该点之前。
N = 字节数