详解西门子间接寻址(1)

合集下载

S7-200SMART间接寻址

S7-200SMART间接寻址

S7-200 SMART 间接寻址一、间接寻址概念:1、间接寻址是指用指针来访问存储区的数据。

指针以双字的形式存储其它存储区的地址,只能将V 存储单元、L 存储单元或累加器寄存器(AC1、AC2、AC3)用作指针。

注意:S7-200 SMART CPU 允许指针访问下列存储区:I、Q、V、M、S、AI、AQ、SM、T(仅限当前值)和C(仅限当前值)。

不能使用间接寻址访问单个位或访问HC、L 或累加器存储区。

2、指针存储的就是存储器的内存地址或编号,如下所示,VB0表示的是一个存储器,而内存地址:16#08000000则就是VB0这个存储区所对应的内存地址,通过对这个内存地址的改变就可以实现对不同的存储区的访问,这就是间接寻址的过程。

3、间接寻址的使用过程主要分为建立指针,改变指针,通过指针实现存储器三步骤。

二、建立指针:要创建指针,用“&”符号加上要访问的存储区地址可建立一个指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。

注意:修改指针的值时,请记住调整所访问数据的大小:访问字节时,指针值加1;访问定时器或计数器的字或当前值时,指针值加2;访问双字时,指针值加4。

三、修改指针:对指针中的数据进行修改,可以实现对存储地址的改变,如图所示通过对指针进行加法操作来改变指针中的所存的数据,该数据指向的是PLC中存储器的内存地址。

四、通过指针对数据进行存取:当指针的内容修改完后,需要根据修改后的指针的内容访问对应的存储区的数据,此时指令中的操作数是指针是,应该在操作数前面加上“*”号。

例程1.通过指针访问数据表所实现的功能:索引号VW1008=0时,将指定的配方0(VB100~VB104) 数据传送到(VB1500~VB1504) 索引号VW1008=1时,将指定的配方1(VB105~VB109) 数据传送到(VB1500~VB1504) 索引号VW1008=2时,将指定的配方2(VB110~VB114) 数据传送到(VB1500~VB1504) 索引号VW1008=3时,将指定的配方3(VB115~VB119) 数据传送到(VB1500~VB1504)例程2.通过指针存储数据表所实现的功能:索引号VW1008=0时,将(VB1500~VB1504)数据传送到指定的配方0(VB100~VB104) 索引号VW1008=1时,将(VB1500~VB1504)数据传送到指定的配方1(VB105~VB109) 索引号VW1008=2时,将(VB1500~VB1504)数据传送到指定的配方2(VB110~VB114) 索引号VW1008=3时,将(VB1500~VB1504)数据传送到指定的配方3(VB115~VB119)例程3.通过地址偏移量来访问V存储区数据所实现的功能:本例程可以实现对区任意字节数据的访问。

西门子PLC的寻址方式

西门子PLC的寻址方式

按位寻址:首先有一个存储器标识符用来区分当前使用PLC哪一种类型软元件,往下一位代表具体用的是哪个字节,一个字节有8个位,最后一位数字表示具体的哪个位,举例说明,I0.0首先I代表是用的PLC I 存储区,0代表是0字节,再往下的0代表的就是0字节具体第0个位;一个字节8个位,最大的位数就是0.7,没有0.8和0.9,下一个字节就是从1.0开始。

接下来再看一下按字节,字,双字寻址:如下图所示:学会按位寻址以后,对于按字节、按字以及双字寻址都是一样,首先:一个字节其实就是8个位,一个字就是16个位,一个双字就是32个位,可以理解为谁包含了谁;再看格式书写,第一位是存储器的标识符,第二位变为寻址方式的标识符,如B代表是按字节寻址,W代表的是按字寻址,D代表的是按双字寻址,最后一位代表的就是字节起始地址;举例说明VD0,V代表当前用的是PLC的V存储器,D代表的是按双字寻址,最后一位0代表被占用的起始字节,双字包含32个位,它共占用了从VB0开始到VB3这四个存储字节。

假设写的是VD1,那么它占用的起始字节就是从1开始,一共占用了VB1 VB2 VB3 VB4四个存储区。

1、四者的寻址方式不同,V0.0是按位寻址,VB0是按字节寻址,VW0是按字寻址,VD0是按双字寻址。

其中VD0由VBO、VB1、VB2、VB3组成,它包括VWO、VBO、V0.0;而VW0由VB0和VB1组成,它包括了VB0和V0.0;而VB0由VB0.0~VB0.7这八个位组成,它包括V0.0。

建议您把西门子的200基础知识好好看看,这些都是很有用的2、四者的寻址方式不同,V0.0是按位寻址,VB0是按字节寻址,VW0是按字寻址,VD0是按双字寻址。

VD0由VBO、VB1、VB2、VB3组成,它包括VWO、VBO、V0.0;VW0由VB0和VB1组成,它包括了VB0和V0.0;VB0由VB0.0~VB0.7这八个位组成,它包括V0.0。

S7-1200 间接寻址

S7-1200 间接寻址

S7-1200的间接寻址需要通过数据块中的数组来实现。

指令FieldRead通过索引(又称为下标)变量从数组中读取数值,指令FieldWrite 通过索引变量向数组中写数值,使用这两条指令可以实现间接寻址。

索引变量是间接寻址中的地址指针,它的值是要读写的数组元素的索引值。

地址指针就像收音机调台的指针,改变指针的位置,指针指向不同电台。

改变地址指针中的索引值,指针“指向”数组不同的元素。

间接寻址的优点是可以在程序处理期间,通过改变指针的值动态地修改指令中的地址。

首先生成一个名为“数据块1”的全局数据块DB2,在数据块中生成名为“数组1”的数组Array[1..10] of Int,其元素的数据类型为Int。

这两条指令没有列入指令列表和高级指令列表,编程时将收藏夹中的空逻辑框插入程序,点击其中红色的“??”,打开下拉式列表框,可以看到列表框底部的指令FieldWrite或FieldRead。

点击生成的指令框中的“???”,用列表设置要写入或读取的数据类型为Int(见下图)。

两条指令的参数MEMBER的实参必须是数组的第一个元素“数据块1”.数组1[1]。

指令的输入参数索引值“INDEX”是要读写的数组中的元素的下标,数据类型为DINT(双整数)。

参数“VALUE”是要写入数组元素的值或要读取的数组元素的值。

下图中的FieldWrite指令将常数25写入数组1中的元素“数组1[3]”。

FieldRead指令读取数组元素“数组1[3]”的值,将它保存到MW20。

改变INDEX 的值,可以读写别的数组元素的值。

循环程序用来完成大量的重复的操作。

S7-1200没有像S7-300的LOOP那样的循环程序专用的指令,为了编写循环程序,可以用FieldRead指令实现间接寻址,用普通指令来编写循环程序。

生成一个名为“循环程序”的项目。

首先生成全局数据块DB1,在DB1中生成有10个字节元素的数组,设置各数组元素的初始值。

2.1.4 间接寻址_PLC职业技能培训及视频精讲——西门子STEP 7_[共2页]

2.1.4 间接寻址_PLC职业技能培训及视频精讲——西门子STEP 7_[共2页]

第2章 PLC
快速提高
189
图2.1.1 STEP 7管理界面
图2.1.2 全局符号表 图2.1.3 使用符号地址程序例 (2)局域符号
请参考本章功能和功能块相关内容。

2.1.4 间接寻址
1.存储器间接寻址
A I[MD10] //检测I 位的状态,I 的地址由MD10的值决定
= Q[MD10]
//驱动Q 位,Q 的地址由MD10的值决定 L QD[MD10] //装载QD 的数值到累加器1中,QD 的地址由MD10的值决定
上面程序中I[MD10]和Q[MD10],像这种使用存储器给定地址的寻址方式,称为存储器间接寻址。

I[MD10]和Q[MD10]中的MD10称为指针,其里面的数值代表地址,例如P#3.5。

能作为指针使用的存储器有MD 、LD 、DBD 和DID ,而且必须是双字。

存储器指针的格式如图2.1.4所示,其中0~2位是地址的位编号(0~7),3~18位是字节的编号(0~65535)。

例如在图2.1.5所示程序中,MD10 = 2#111011,0~2位的数值是3,3~18位的数值是7,所示MD10指针值是P#7.3。

使用存储器寻址,该存储器的值是操作数的地址,改变该储存器的值相当于改变了操作数的地址,在循环等程序中经常使用存储器间接寻址。

值得注意的是,如果操作数是字节、字或双字,使用存储器间接寻址时,需要确保指针代表位地址的值为零,否则会出现寻址错误。

西门子PLC指令寻址方式

西门子PLC指令寻址方式

西门子PLC指令寻址方式西门子S7-200编程语言的基本单位是语句,而语句的构成是指令,每条指令有两部分:一部分是操作码,另一部分是操作数。

操作码指出这条指令的功能是什么,操作数则指明操作码所需要的数据所在。

所谓寻址,就是寻找操作数的过程。

S7-200 CPU的寻址分为三种:立即寻址、直接寻址和间接寻址。

1)立即寻址在一条指令中,如果操作码后面的操作数就是操作码所需要的具体数据,这种指令的寻址方式就叫立即寻址。

例如,在传送指令MOV IN OUT中,操作码“MOV”指出该指令的功能是把IN中的数据传送到OUT中,其中IN 为源操作数,OUT为目标操作数。

若该指令为MOVD 2505 VD500,则其功能为:将十进制数2505传送到VD500中,这里2505就是源操作数。

因这个操作数的数值已经在指令中,不用再去寻找,这个操作数即为立即数。

这个寻址方式就是立即寻址方式。

而目标操作数的数值在指令中并未给出,只给出了要传送到的地址VD500,这个操作数的寻址方式就是直接寻址。

2)直接寻址在一条指令中,如果操作码后面的操作数是以操作数所在地址的形式出现的,这种指令的寻址方式就叫直接寻址。

例如:MOVD VD400 VD500功能:将VD400中的双字数据传给VD500。

3)间接寻址在一条指令中,如果操作码后面的操作数是以操作数所在地址的地址形式出现的,这种指令的寻址方式就叫间接寻址。

例如:MOVD 2505 *VD500*VD500是指存放2505地址的地址。

若VD500中存放的是VDO,则VDO是存放2505的地址。

该指令的功能:将十进制数2505传送给VDO地址中。

S7-1200 间接寻址

S7-1200 间接寻址

S7-1200的间接寻址需要通过数据块中的数组来实现。

指令FieldRead通过索引(又称为下标)变量从数组中读取数值,指令FieldWrite 通过索引变量向数组中写数值,使用这两条指令可以实现间接寻址。

索引变量是间接寻址中的地址指针,它的值是要读写的数组元素的索引值。

地址指针就像收音机调台的指针,改变指针的位置,指针指向不同电台。

改变地址指针中的索引值,指针“指向”数组不同的元素。

间接寻址的优点是可以在程序处理期间,通过改变指针的值动态地修改指令中的地址。

首先生成一个名为“数据块1”的全局数据块DB2,在数据块中生成名为“数组1”的数组Array[1..10] of Int,其元素的数据类型为Int。

这两条指令没有列入指令列表和高级指令列表,编程时将收藏夹中的空逻辑框插入程序,点击其中红色的“??”,打开下拉式列表框,可以看到列表框底部的指令FieldWrite或FieldRead。

点击生成的指令框中的“???”,用列表设置要写入或读取的数据类型为Int(见下图)。

两条指令的参数MEMBER的实参必须是数组的第一个元素“数据块1”.数组1[1]。

指令的输入参数索引值“INDEX”是要读写的数组中的元素的下标,数据类型为DINT(双整数)。

参数“VALUE”是要写入数组元素的值或要读取的数组元素的值。

下图中的FieldWrite指令将常数25写入数组1中的元素“数组1[3]”。

FieldRead指令读取数组元素“数组1[3]”的值,将它保存到MW20。

改变INDEX 的值,可以读写别的数组元素的值。

循环程序用来完成大量的重复的操作。

S7-1200没有像S7-300的LOOP那样的循环程序专用的指令,为了编写循环程序,可以用FieldRead指令实现间接寻址,用普通指令来编写循环程序。

生成一个名为“循环程序”的项目。

首先生成全局数据块DB1,在DB1中生成有10个字节元素的数组,设置各数组元素的初始值。

西门子plc的4种寻址方式

西门子plc的4种寻址方式

西门子plc的4种寻址方式立即寻址是对操作数是常数或常量的寻址方式,其特点是操作数值直接表示在指令中,出现在指令中的操作数称为立即数。

有些指令的操作数是唯一的,为简化起见,并不在指令中写出。

立即寻址方式可用来提供常数、设置初值等。

常数值可分为字节、字、双字型等数据。

CPU以二进制方式存储所有常数。

在指令中可用十进制、十六进制、ASCII码或浮点数形式来表示操作数。

立即寻址示例:SET 说明:把RLO置1OW W#16#320 将常量W#16#320与ACCU1“或”运算L 1352 把整数1352装入ACCU1L‘ABCD’把ASCII码字符ABCD装入ACCU1L C#100 把BCD码常数100(计数值)装入ACCU1AW W#16#3A12 常数W316#3 A12与ACCU1的低位相“与”,运算结果在ACCU1的低字中。

存储器直接寻址包括对寄存器和存储器的直接寻址。

在直接寻址的指令中,直接给出操作数的存储单元地址,包括寄存器或存储器的区域、长度和位置,根据这个地址就可以立即找到该数据。

例如,用MW200指定位存储区中的字,地址为200;MB100表示以字节方式存取,MW100表示存取MB100、MB101组成的字,MD100表示存取MB100~ MB103组成的双字。

在指令中,数据类型应与指令标识符相匹配。

直接寻址编程示例:A IO.0 说明:对输入位10.0进行“与”逻辑操作S L20.0 把本地数据位I20.0置“l”= M115.4 使存储区位M115.4的内容等于RLO的内容L IB10 把输入字节IB10的内容装入ACCU1T DBD12 把ACCU1中的内容传送给数据双字DBD12中。

存储器间接寻址简称间接寻址。

该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。

该存储器一般称为地址指针,在指令中需写在方括号“[]”内。

西门子S7-1200 PLC的间接寻址功能及实例

西门子S7-1200 PLC的间接寻址功能及实例

S7-1200指针数据- 已解决问题看了这个问题的网友还看了∙西门子模拟量电压问题西门子博图V14安装步骤∙S7-200/S7-1200/S7-300 EPLAN宏下载S7-1200 怎么实现与上位机进行Modbus_TCP/TP通讯∙打开S7-PLCSIM V13就提示几个文件签名无效,然后报错退出。

关于博图软件怎样安装∙1200PLC编程时,同样是16个位,怎样把数组转换为INT?西门子plc1200编程软件下载∙wincc与s7-1200怎么通讯1200PLC不能与PC机链接,找不到设备,输入输出,如附件IF #EXCUTE = True THENPOKE_BLK(area_src:= #AREA_SRC, (* 源数据类型:16#81:I,16#82:Q,16#83:M,16#84:DB *) dbNumber_src:= #DB_NUM_SRC, (* 源数据块:非DB=0 *)byteOffset_src:= #START_BIT_SRC, (* 源数据起始位号 DB[#DB_NUM_SRC].DBB[#START_BIT_SRC] *)area_dest:= #AREA_TYPE, (* 目标存储类型:16#81:I,16#82:Q,16#83:M,16#84:DB *)dbNumber_dest:= #DB_NUM, (* 目标数据块:非DB=0 *)byteOffset_dest:= #START_BIT, (* 目标起始位位号 DB[#DB_NUM].DBB[#START_BIT] *)count:= #BYTE_COUNT); (* 复制长度字节 *)END_IF;图片说明:回答者:sunnic - 高级技术员第7级2016-08-14 17:08:21提问者对于答案的评价:谢谢已有1人评论展开6wenhua6:你好,我按照你做的,怎么不行西门子S7-1200循环程序间接寻址的方法循环程序的关键是间接寻址,西门子S7-1200的间接寻址离不开数组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

详解西门子间接寻址【地点的观点】完好的一条指令,应当包含指令符 +操作数(自然不包含那些单指令,比方 NOT 等)。

此中的操作数是指令要履行的目标,也就是指令要进行操作的地点。

我们知道,在 PLC 中划有各样用途的储存区,比方物理输入输出区 P、映像输入区 I 、映像输出区 Q、位储存区 M 、准时器 T、计数器 C、数据区 DB 和 L 等,同时我们还知道,每个地区能够用位( BIT )、字节( BYTE )、字( WORD )、双字( DWORD )来权衡,或许说来指定切实的大小。

自然准时器 T、计数器 C 不存在这类权衡体系,它们仅用位来权衡。

由此我们能够获得,要描绘一个地点,起码应当包含两个因素:1、储存的地区2、这个地区中详细的地点比方: A此中的 A 是指令符,是 A 的操作数,也就是地点。

这个地点由两部分构成:Q:指的是映像输出区:就是这个映像输出区第二个字节的第0 位。

由此,我们得出,一个切实的地点构成应当是:〖储存区符〗〖储存区尺寸符〗〖尺寸数值〗 .〖位数值〗,比如:。

DBX200.0此中,我们又把〖储存区符〗〖储存区尺寸符〗这两个部分合称为:地点表记符。

这样,一个切实的地点构成,又能够写成:地点表记符+ 切实的数值单元【间接寻址的观点】寻址,就是指定指令要进行操作的地点。

给定指令操作的地点方法,就是寻址方法。

在谈间接寻址以前,我们简单的认识一下直接寻址。

所谓直接寻址,简单的说,就是直接给出指令确实切操作数,象上边所说的, A ,就是直接寻址,对于 A 这个指令来说,就是它要进行操作的地点。

这样看来,间接寻址就是间接的给出指令确实切操作数。

对,就是这个观点。

比方:A Q[MD100] ,A T[DBW100] 。

程序语句顶用方刮号 [ ] 注明的内容,间接的指了然指令要进行的地点,这两个语句中的 MD100 和 DBW100 称为指针Pointer,它指向它们此中包含的数值,才是指令真实要履行的地点地区确实切地点。

间接由此得名。

西门子的间接寻址方式计有两大种类:储存器间接寻址和寄存器间接寻址。

【储存器间接寻址】储存器间接寻址的地点给定格式是:地点表记符 +指针。

指针所指示储存单元中所包含的数值,就是地点确实切数值单元。

储存器间接寻址拥有两个指针格式:单字和双字。

单字指针是一个 16bit 的构造,从 0-15bit,指示一个从 0-65535 的数值,这个数值就是被寻址的储存地区的编号。

双字指针是一个 32bit 的构造,从 0-2bit,共三位,依据 8 进制指示被寻址的位编号,也就是 0-7;而从 3-18bit,共 16 位,指示一个从 0-65535 的数值,这个数值就是被寻址的字节编号。

指针能够寄存在 M 、DI 、DB 和 L 地区中,也就是说,能够用这些地区的内容来做指针。

单字指针和双字指针在使用上有很大差别。

下边举例说明:L DW#16#35BX[MD2] BX[MD2] BW[MD2]这样的寻址是错误的提法,这里做个解说:DB[MW100].DBW[MD2] 这样的寻址构造就寻址原理来说,是能够理解的,但从 SIEMENS 程序履行机理来看,是非法的。

在实质程序中,对于这样的寻址,程序语句应当写成:OPN DBW[WM100] ,L DBW[MD2]事实上,从这个例子的中心思想来看,根本没有必需这样复杂。

但为何要用间接寻址呢?要澄清使用间接寻址的优势,就让我们从比较中,找答案吧。

例子告诉我们,它最后履行的是把 DB 的某个详细字的数据传递到位储存区某个详细字中。

这是针对数据块 100 的 1 数据字传递到位储存区第 1 字中的详细操作。

假如我们此刻需要对相同的数据块的多个字(连续或许不连续)进行传递呢?直接的方法,就是一句一句的写这样的详细操作。

有多少个字的传递,就写多少这样的语句。

毫无疑问,即便不知道间接寻址的道理,也应当理解,这样的编程方法是不合理的。

而假如使用间接寻址的方法,语句就简单多了。

【示例程序的构造剖析】我将示例程序从构造上做个区分,从头输入以下:输入 1:指定数据块编号的变量||L 100||T MW 100输入 2:指定字地点的变量|| L DW#16#8||TMD2操作主体程序OPN DB [MW 100]L DBW [MD 2]T MW[MD2]明显,我们根本不需要对主体程序(红色部分)进行简单而重复的复写,而只要改变 MW100 和 MD2 的赋值(绿色部分),就能够达成应用要求。

结论:经过对间接寻址指针内容的改正,就达成了主体程序履行的结果更改,这类改正是能够是动向的和静态的。

正是因为对真实的目标程序(主体程序)不做任何改动,而寻址指针是这个程序中独一要改正的地方,能够以为,寻址指针是主体程序的进口参数,就好似功能块的输入参数。

因此可使得程序标准化,拥有移植性、通用性。

那么又怎样动向改写指针的赋值呢?不会是另一种简单而重复的复写吧。

让我们以一个详细应用,来完美这段示例程序吧:将 DB100 中的 1-11 数据字,传递到 MW1-11 中在设计达成这个任务的程序以前,我们先认识一些背景知识。

【数据对象尺寸的区分规则】数据对象的尺寸分为:位(BOOL )、字节( BYTE )、字( WORD )、双字(DWORD )。

这仿佛是个简单的观点,但假如, MW10=MB10+MB11 ,那么能否是说, MW11=MB12+MB13 ?假如你的回答是一定的,我建议你持续看下去,不要跳过,因为这里的大意,会致使最后的程序的错误。

按位和字节来区分数据对象大小时,是以数据对象的bit 来偏移。

这句话就是说, 0bit 后就是 1bit,1bit 后一定是 2bit,以此类推直到 7bit ,达成一个字节大小的指定,再有一个 bit 的偏移,就进入下一个字节的 0bit 。

而按字和双字来区分数据对象大小时,是以数据对象的BYTE 来偏移!这就是说,MW10=MB10+MB11 ,其实不是说,MW11=MB12+MB13 ,正确的选项是MW11=MB11+MB12 ,而后才是 MW12=MB12+MB13 !这个观点的重要性在于,假如你在程序中使用了 MW10 ,那么,就不可以对MW11 进行任何的操作,因为, MB11 是 MW10 和 MW11 的交集。

也就是说,对于“将 DB100 中的 1-11 数据字,传递到 MW1-11 中”这个详细任务而言,我们只要要对 DBW1 、DBW3 、DBW5 、DBW7 、DBW9 、DBW11 这6 个字进行 6 次传递操作即可。

这就是独自分出一节,说明数据对象尺寸区分规则这个看似简单的观点的目的所在。

【循环的构造】要“将 DB100 中的 1-11 数据字,传递到 MW1-11 中”,我们需要将指针内容依据次序逐个指向相应的数据字,这类对指针内容的动向改正,其实就是遍历。

对于遍历,最简单的莫过于循环。

一个循环包含以下几个因素:1、初始循环指针2、循环指针自加减2、持续或许退出循环体的条件判断被循环的程序主体一定位于初始循环指针以后,和循环指针自加减以前。

比方:初始循环指针: X=0循环开始点 M被循环的程序主体:循环指针自加减: X+1=X循环条件判断: X≤10 ,False:GO TO M ;True: GO TO N循环退出点 N假如把 X 作为间接寻址指针的内容,对循环指针的操作,就等于对寻址指针内容的动向而循环的改正了。

【将 DB100 中的 1-11 数据字,传递到 MW1-11 中】L L#1 // 初始化循环指针。

这里循环指针就是我们要改正的寻址指针T#COUNTER_DOPN DB100L DBW [MD 102]T MW [MD 102]L L#2 // +2,是因为数据字的偏移基准是字节。

+DT MD 102 // 自加减循环指针,这是动向改正了寻址指针的重点L L#11 //循环次数 =n-1。

n=6。

这是因为,初次进入循环是无条件的,但已事实上履行了一次操作。

<=DJC M2有对于 T MD102 ,L L#11, <=D 的详尽剖析,请依据前方的内容推导。

【将 DB1-10 中的 1-11 数据字,传递到MW1-11 中】这里增添了对 DB 数据块的寻址,使用单字指针 MW100 储存寻址地点,相同使用了循环,嵌套在数据字传递循环外,这样,要达成“将 DB1-10 中的 1-11 数据字,传递到 MW1-11 中”这个任务,共需要 M1 循环 10 次×M2 循环 6 次 =60 次。

L 1T MW 100L L#1T MD 102M1: L MW 100T #COUNTER_WM2: 对数据字循环传递程序,同上例L #COUNTER_WL 1 //这里不是数据字的偏移,不过编号的简单递加,所以 +1 +IT MW 100L9 //循环次数 =n-1,n=10<=IJC M1经过示例剖析,程序是让寻址指针在对要操作的数据对象范围内进行遍向来编程,达成这个任务。

我们看到,这类对储存器间接寻址指针的遍历是鉴于字节和字的,怎样对位进行遍历呢?这就是下一个帖子要剖析的寄存器间接寻址的实例的内容了。

详解西门子间接寻址 <4>L[MD100]LAR1与L MD100LAR1有什么差别?当将MD100 以这类[MD100] 形式表示时,你既要在对MD100 赋值时考虑到所赋的值能否切合储存器间接寻址双字指针的规范,又要在使用这个寻址格式作为语句一部分时,能否切合语法的规范。

在你给出第一个例程的第一句: L [MD100] 上,我们看出它犯了后一个错误。

储存器间接寻址指针,是作为指定的储存地区确实切数值单元来运用的。

也就是说,指针不包含地区表记,它不过指了然一个数值。

所以,要在 [MD100] 前加上地区表记如: M 、DB 、I、Q、L 等,还要加上储存区尺寸大小如: X 、B、 W 、D 等。

在加储存地区和大小表记时,要考虑累加器加载指令 L 不可以对位地点操作,所以,只好指定非位的地点。

为了对照下边的寄存器寻址方式,我们这里,改正为: L MD[MD100] 。

并假设MD100=8Hex ,同时我们也假设 MD1=Hex 。

当把 MD100 这个双字作为一个双字指针运用时,其储存值的 0-18bit 将会依据双字指针的构造来从头“翻译”,“翻译”的结果才是指针指向的地点,因此MD100 中的 8Hex=1000B=,所以下边的语句:L MD[MD100]LAR1经过“翻译”就是:L MD1LAR1前方我们已经假设了 MD1= ,相同道理, MD1 作为指针使用时,对 0-18bit 应当经过构造的“翻译”,因为是传递给 AR 地点寄存器,还要对 24-31bit 进行地区寻址“翻译”。

相关文档
最新文档