间接寻址及寄存器指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内容页码
STEP 7 中可能的寻址方式 (2)
变量直接寻址 (3)
DB中地址标识符直接寻址 (4)
在程序中分析DB信息 (5)
存储器间接寻址 (6)
用于存储器间接寻址的指针结构
(7)
存储器间接寻址的特性 (8)
间接寻址示例 (9)
练习4.1:用间接寻址的方法进行循环编程 (10)
内部区域,寄存器间接寻址 (11)
交叉区域,寄存器间接寻址 (12)
用于装载地址寄存器的指令 (13)
其它用于地址寄存器的指令
(14)
寄存器间接寻址的特性 (15)
练习4.2:用寄存器间接寻址的方法进行循环编程 (16)
POINTER类型和ANY类型数据的块参数 (17)
POINTER类型的结构和参数赋值 (18)
ANY数据类型的结构 (19)
ANY数据类型参数赋值 (20)
ANY (21)
参数类型间接赋值
评估ANY型指针传递 (22)
练习4.3:用于求和及计算平均值的功能 (23)
直接寻址使用直接寻址,存储单元地址可以直接包含在指令中,也就是说,地址标识符指明了指令所要处理数值的地址。
了指令所要处理数值的地址
符号寻址在控制程序中,可以进行绝对地址寻址(比如:I 1.0)或进行符号地址寻址(
比如“开始信号”)。符号地址是使用名称来代替绝对地址。
使用有意义的名称使程序的可读性增强。不过,在使用符号寻址时,要注意区分局
部符号(在块的声明部分)和全局符号(符号表)。
间接寻址使用间接寻址,可以寻址那些只有在程序运行时才确定其地址的地址标识符。
例如,通过间接寻址,可以对程序的一些部分进行反复扫描(循环编程),由此,每
次扫描所用到的地址被赋予不同的地址数值。
次扫描所用到的地址被赋予不同的地址数值
关于间接寻址,要注意区分以下两种情况:
•存储器间接寻址:寻址的地址指针位于用户储存器存储单元里(比
如MD30)。
使用存储器间接寻址,也可以为位于保存寻址地址标识符指针的存储器中的变量赋予符号化名称。
•寄存器间接寻址:在访问之前,要将指向寻址地址的指针装载到其中一个S7处理器地址寄存器(AR1或AR2)中去。
警告用于使用间接寻址时,只有在程序运行期间才计算地址,所以,就会有这样的潜在的危险性,即存储器被意外覆盖,进而导致PLC的意外动作。
变量的直接寻址使用直接寻址方法,可以对那些基本类型变量进行寻址,其中所谓的基本变量是指其长度最多不超过4个字节。简单变量由下面几个部分组成:
个字节简单变量由下面几个部分组成
•一个变量标识符(比如:“IB”,表示输入字节)
•存储区内一个确切的地址(存储单元位置)(字节地址或位地址),它由地址标识符所确定。
地址或者简单变量也可以通过全局、符号名(符号表)来进行寻址。
外围设备与S5不同的是,访问外围设备的时,必须要区分是输入还是输出。但是,仍然只能只读(L PIW)访问外设输入,只写访问(T PQW)外设输出。
本地数据使用STEP 7,也可以绝对访问本地数据堆栈,例如:
• A L 12.6 (扫描地址为12.6的本地数据位捕捉信号状态= 1)
•L LW 12(将本地数据字装载到ACCU1中)
DBX/DIX也可以在数据块内直接访问简单变量:
• A DBX 12.6 (扫描地址为12.6的本地数据位捕捉信号状态= 1
数据块DB必须预先打开)。
•L DB5.DBW10(将DW10装载到DB5中)
复杂变量可以访问那些具有复杂数据类型(诸如结构或数组等)的局部变量。
对复杂变量来说,只能对其组成部分进行绝对访问,这是因为其组成部分为基本数
据类型。
概述CPU将两个数据块寄存器用于处理数据地址,当前打开的数据块号就存储在这些寄存器中
存器中。
访问数据块之前,首先必须用这两个数据块寄存器中的一个将其打开。
可以使用如下指令来打开数据块:
•OPN DBx或OPN DIx
或者借助于数据块地址标识符组合寻址来打开,比如:
•L DBx.DBWy(但没有L DIx.DIWy这种形式!)
在这种情况下,数据块DB号x也被装入DB寄存器中。
寻址在STEP7中,数据块是一个字节一个字节地组织起来的,所以,为了对BIT(位)、BYTE(字节)、WORD(字)或DWORD (双字)长度的数据进行直接地址访问
,每种情况都要给出字节地址。
符号访问为了进行符号访问,需要在符号列表里输入数据块的符号名。您可以使用DB Editor (数据编辑器)来为数据块的各个变量分配符号名。
现在可使用指令L “Values”..Number_1实现对数据元素的完全符号访问。该操作将打
开DB19(其中“Values”为DB 19的符号名)并装载DBW 2(其中Number_1为
_
DBW2符号名)。
DB, DI寄存器这两个寄存器里包含了当前打开的数据块的有效数据块号。在一级调用中,可以同时打开两个数据块。
时打开两个数据块
在STL编程语言中,习惯上使用第一个DB寄存器来访问共享(全局)数据块DB,而
使用第二个DB寄存器来访问背景DB。因此,这两个寄存器也分别被称作DB寄存器
和DI寄存器。
但是,CPU对对此并不进行区分,对每一个数据块,均可以使用这两个寄存器中的
任何一个予以打开(即使是两个数据块同时打开的情况下)。
CDB CDB(交换DB寄存器里的内容)指令是将DB寄存器和DI寄存器里的内容予以交换,也即,将DB寄存器里的内容传递到DI寄存器中去,同时也将DI寄存器里的内容传递
到DB寄存器中去。该指令既不影响ACCU1中的内容值,也不影响状态位。
L DBLG,L DILG:这些指令的功能是以字节为单位读出当前所打开的数据块的数据长度,。通过这种数据长度信息,用户程序就可以在访问数据块DB之前,测试数据块的长度是否达到所
要求的长度。
L DBNO,L DINO:这些指令的功能是读出当前打开的数据块号。