SIEMENS STEP7 间接寻址
- 格式:ppt
- 大小:1.82 MB
- 文档页数:39
FieldRead 和FieldWrite 间接寻址指令从STEP7 Basic V10.5 + SP2 以上可以使用 FieldRead 和 FieldWrite 指令对数组单元进行间接寻址.指令的调用:STEP7 Basic V10.5 + SP2 版本软件在指令树里无法直接找到 FieldRead 和FieldWrite 指令,调用这两个指令必须先从工具栏中调用一个空指令块,双击问号,从下拉菜单中选择添加指令,操作步骤如图1.图1. 调用 FieldRead 和 FieldWrite 指令从TIA V11起 FieldRead 和 FieldWrite 指令就可以在指令树里直接找到了。
创建DB块,并建立 Array 数据类型的变量图2. 创建DB块并定义数组FieldRead 指令INDEX: 要读取的数组的单元号MEMBER: 数组单元首地址VALUE: 存储读出的数据下例中是读取数组单元[1]中的数据11,并保存在参数 VALUE: MB110 中。
图3. 读取数组单元中的数据FieldWrite 指令INDEX: 要写入的数组的单元号VALUE: 要写入的数据MEMBER: 数组单元首地址下例中是向数组单元[2]中写入数值5。
图4. 向数组单元中写入数据常见问题为什么软件里无法找到 FieldRead 和 FieldWrite 指令?答:只有 STEP7 Basic V10.5 + SP2 以上的版本才支持 FieldRead 和FieldWrite指令,并且指令树里也无法找到,只能通过调用空指令块,并在下拉菜单里选择使用这两个指令。
FieldRead 和 FieldWrite指令是否可以对其它数据区或数据类型实现间接寻址?答:FieldRead 和 FieldWrite指令只能对DB块中的数组单元进行间接寻址访问,DB 块中的其它数据类型以及其它数据区如M, I,Q 区数据都不支持这个功能。
step编程的地址概念详解及示例标签:无标签step7编程的地址概念详解及示例完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。
当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。
由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0其中的A是指令符,Q2.0是A的操作数,也就是地址。
这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第0位。
由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。
DB X 200 . 0其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
通过L L#+10 ,我们知道存放在MD104中的值应该是:MD104:0000 0000 0000 0000 0000 0000 0000 1010当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:0000 0000 0000 0000 0000 0000 0000 1010 = 1.2【地址寄存器间接寻址】在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L 直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。
但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。
从寄存器到得出真正的地址数值单元,西门子提供了两种途径:1、区域内寄存器间接寻址2、区域间寄存器间接寻址地址寄存器间接寻址的一般格式是:〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或M[AR1,P#0.0] 。
说明:
以下描述了在STEP 7 MicroWIN中可能的一种间接寻址使用.
例子中包含了OB1,一个数据块和一个状态表.
OB1包含4段程序。
500)this.width=500" border=0>
图1:在SFC功能块中的4段程序
注意第2段程序:
*AC1 中的(*)星号意味着正使用AC1所指向的地址内容,而并非AC1本身的值另一部分是数据块.
500)this.width=500" border=0>
图2:需要一个状态表用于测试和监控.
500)this.width=500" border=0>
图3:下载程序到控制器中,然后打开状态表,点击"Table Status" 观察变化.
首先保持监控当前的状态,可以看到VB200 到VB210 的值为1-10.而VB 220 之后全为空白.
当I0.0 为1时,这两点将被创建.
当I0.1为1时,从VB200 开始的连续前4个字节将被传送到VB220-VB223 中.
在第3段程序中将I0.0 置0可以分别增加1个地址字节,通过触发I0.2的上升沿可以增加多个地址字节.
在第4段程序中将I0.0 置0可以分别减少1个地址字节,通过触发I0.3的上升沿可以减少多个地址字节.
从入口条目为1109582.的"S7-200自动化系统" 手册中可以找到关于该主题的进一步信息,另外通过在线帮助输入"直接和间接寻址"也是非常有用的.。