西门子 S7 间接寻址 说明

合集下载

s7寻址方式,直接寻址,间接寻址,指针使用

s7寻址方式,直接寻址,间接寻址,指针使用

偏移量0.0不起作用。输出Q10.0 等于8.7 (AR1) 加偏移量1.1。结果是10.0 ,而不是9.8,参见指针格式。
存储区域交叉寻址例程
在存储区域交叉寻址中,指针中包含指示存储区域的信息(例子中为 I 和 Q)。
L P#I8.7 把指针值及存储区域标识装载到累加器1
1. 直接地址:例如I0.0,Q1.7,PIW256,PQW512,MD20,T15,C16,DB1.DBB10,L10.0等
2. 符号寻址:例如qq,ww.aa等
二寻址
存储器间接寻址:16位指针,例如OPN DB[MW2]
LAR1 把存储区域I 和地址8.7装载到AR1
L P#Q8.7 把指针值和地址标识符装载到累加器1
LAR2 把存储区域Q和地址8.7装载到AR2
A [AR1,P#0.0] 查询输入位I8.7的信号状态
存储区域内部寻址例程
指针不包含指示存储区域的信息:
L P#8.7 把指针值装载到累加器1
LAR1 把指针从累加器1装载到AR1
A I[AR1,P#0.0] 查询I8.7的信号状态
= Q[AR1,P#1.1] 给输出位Q10.0赋值
32位指针,例如A I[MD0]
寄存器间接寻址:32位指针,例如A I[AR1,P#0.0],A [AR1,P#0.0]
1.2 S7-300/400寻址方式图解
2 如何使用指针
指针用来指向一个地址。使用这种寻址方式的优点在于可以在程序运行过程中实现变址。
A I[MD2] 查询I8.7的信号状态
= Q[MD2] 给输出位Q8.7赋值
存储区域内部寻址及交叉寻址
程序中采用这些寻址方式的语句包含一个指令以及下列内容:地址标识符、地址寄存器标识符、偏移量。地址寄存器(AR1、AR2)及偏移量必须写在方括号内。

关于S7-300和400的指针寻址功能说明

关于S7-300和400的指针寻址功能说明

关于S7-300和400的指针寻址功能说明Addressing for S7-300 and S7-400SLC A&D CSSeptember, 20041西门⼦⾃动化与驱动产品的在线技术⽀持 (3)2如何获得西门⼦⾃动化与驱动产品的资料 (4)3需设备选型及订货 (4)4西门⼦技术⽀持热线 (4)5西门⼦⾃动化产品的其它⽹站 (5)6S7-300/S7-400 PLC相关⼿册 (5)7缩写词含义 (5)8如何使⽤STEP 7软件的在线帮助 (6)8.1查找某个关键字或功能 (6)8.2想了解某个FB/FC的功能及管脚的定义 (7)9S7-300/400系统存储区域 (9)10S7-300/400 PLC寻址⽅式 (10)10.1直接寻址 (10)10.2间接寻址 (11)10.3S7-300/400寻址⽅式图解 (11)11如何使⽤指针 (11)12在程序中如何进⾏间接寻址 (12)1西门⼦⾃动化与驱动产品的在线技术⽀持⾸先,建议您访问Siemens A&D的产品与技术⽀持⽹站http://www4.ad.siemens.de/,主页如下所⽰:请选择语⾔种类为English。

在主页的Product Support中选择您关⼼的产品或信息,或利⽤Search引擎直接输⼊关键字搜索。

您还可以访问西门⼦(中国)⾃动化与驱动集团的主页/doc/ae8228340.html,如下图所⽰。

该⽹站同样可以提供⼤量的产品和系统的信息。

2如何获得西门⼦⾃动化与驱动产品的资料⾸先,建议您通过Siemens A&D的⽹站搜索并下载。

您还可以致电010-********转3785 /3726索取资料。

另外,还有⼤量的⼿册可以通过分销商订购,和其它产品的订货⽅式⼀样。

3需设备选型及订货如需设备选型及订货,请联系西门⼦⾃动化与驱动的销售⼯程师或当地西门⼦分销商。

分销商联系⽅式可致电010-********获得。

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存储区数据所实现的功能:本例程可以实现对区任意字节数据的访问。

图文详解S7-200SMART间接寻址方法

图文详解S7-200SMART间接寻址方法

图文详解S7-200SMART间接寻址方法PLC寻址分为直接和间接两种,前面已经介绍了直接寻址使用方法,本文介绍间接寻址如何使用,间接寻址类似于地球上经纬度定位方式,地球上任意一个地方都有一个与之相对于的经度和纬度值,这样定位不再分区域,可以延伸到全球。

间接寻址也是如此,PLC中只有一个存储数据的硬件(硬盘),所谓的I,Q,M,V等区只是西门子开发人员定义出来的逻辑分区,类似电脑C,D,E,F盘,其实都处在一个硬盘中,并且都有相对应得一个编号,如果能找到地址的编号,同样可以对其进行寻址,并且不再受存储区的限制,能够大批量的访问连续或有一定规律的地址,这就是间接寻址。

间接寻址分三步:1.建立指针,即获取需要访问存储区起始地址对应编号。

&为地址符号,是S7-200SMART中特殊的编程写法,&VB0代表VB0处在整个存储区的地址编号(指针),可以理解成我们的身份证号码,是一个很大的数值,必须存储在32位存储器中,如VD100,LD0,AC1(AC0不能做指针)等。

2. 间接访问。

通过访问指针指向地址来进行寻址。

间接寻址支持字节,字,双字方式访问,如下图所示:*为访问指针符号,*AC1代表AC1所指向地址的数值,以字节访问则代表一个字节,字访问代表一个字,双字访问代表一个双字。

3.指针偏移。

访问完一个地址后可以以该地址为起始,通过加/减方式对指针进行偏移,从而实现其它地址的访问。

通常字节偏移1,字偏移2,双字偏移4(位不支持间接寻址)总结:间接寻址与直接寻址各有千秋,直接寻址直观简单,适合单个或少量的寻址,不管有没有规律都可以使用,可以满足大部分寻址要求。

间接寻址适合批量且连续或有一定规律的地址,当寻址量较大时,可以将数据设计成有规律,用间接方式寻址可以少写很多步程序,使编程更加简单。

西门子S7-1200的间接寻址功能(2)

西门子S7-1200的间接寻址功能(2)

西门子S7-1200的间接寻址功能(2)
前面介绍了读取和写入数组中元素值的指令Field Read和Field Write两条指令,同时给大家简单的分析了程序的设计思路。

接下来就使用Field Read来实现本功能,在程序的设计过程中可能还需要用到循环跳转指令。

例子说明:
假设需要从一组数据中找出一个最大值,并记录这个最大值是这组数据中的第几个数据。

第一步:
添加一个全局DB块,并在DB块中建立一个变量名为data_1#,数据类型为数组的变量,用于存储需要找出最大的数据,同时建立一些相应的变量,如下图所示。

第二步:
初始化相应的存储器并把存储最大值的存储器的值设置为最小值。

程序如下所示:
第三步:
编写判断数据的挨个比较是否完成,当执行的次数与设定的次数相等时,则表示完成,可以跳出最大值查找的程序,让程序跳转到最后执行。

程序如下所示:
第四步:
编写读取数组中元素的值,然后与存储最大值的存储器中的值做比较,用于判断数据存储器存储的值是否是最大值,若不是最大值进行数据交换,同时记录位置,然后INDEX的值加1,同时记录执行次数并与设定次数做比较,如未达到设定次数,则跳转换前面继续通过Field Read指令读取数据出来继续做比较。

程序仅供参考,希望对大家在以后使用此功能上时有所帮助。

S7-200SMART系列PLC的间接寻址功能

S7-200SMART系列PLC的间接寻址功能

S7-200SMART系列PLC的间接寻址功能在PLC中使用的寻址方式分为直接寻址和间接寻址两种方式,所谓的直接寻址,就是直接使用存储区或寄存器的元件名称和地址编号,根据这个地址去找到该数据,而间接寻址,不直接给处存储区或寄存器的地址,而是通过对地址的地址进行访问来实习对存储区的数据读取,通俗的来讲,这个地址的地址就是一个编号或一个代号,这好比读书时每同学会有一个学号,老师在点名的时候,可以叫名字,也可以叫学号,叫名字就好比直接寻址,叫学号就好比间接寻址。

不管是叫名字还是叫学号,其实对应的都是同一个人。

如下图所示:VB0:就好比一个人的名字,而地址的地址16#08000000就相当于学号。

CPU会为每一个存储区分配一个32位大小的数值作为存储器地址的地址。

所有不管是通过间接寻址的方式还是直接寻址的方式其实是访问同一个存储器或是寄存器。

不同的PLC有不同的寻址方式,这里给大家介绍下西门子系列PLC的间接寻址的方式。

这里先给大家介绍下西门子S7-200系列的PLC的间接寻址的过程。

在S7-200系列PLC中,可以用间接寻址访问的存储有:输入过程映像区(I)、输出过程映像区(Q)、位存储器(M)、全局变量存储区(V)、顺控状态继电器(S)以及定时器(T)和计数器(C)。

在S7-200系列PLC中间接寻址的使用主要分为三步骤:(1)建立指针使用间接寻址对某个存储单元读写时,首先需要建立地址指针,指针为双字的长度,可作为指针的存储区有全局变量存储区V,局部变量存储区L和累加器(AC1\AC2\AC3),建立指针时,必须使用双字的传送指令(MOVD),将存储区中所要访问单元的地址装入用来作为指针的存储器单元或寄存器中。

如前面图中所示,若需要提取VB0地址的地址出来,则需要在VB0前面加上符号“&”即&VB0,&VB0所表示的就不是VB0的值了,而是VB0地址的地址即16#08000000.如下图所示:VD100表示指针,用于存储VB0这个存储器地址的地址。

西门子 S7-300的寻址方式

西门子 S7-300的寻址方式
2.直接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址的形式出现的,这种指令的寻址方式就叫直接寻址。
如:MOVD VD400 VD500
功能:将VD400中的双字数据传给VD500
3.间接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址的地址形式出现的,这种指令的寻址方式就叫间接寻址。
如:MOVD 2505 *VD500
*VD500是指存放2505的地址的地址。
如VD500中存放的是VB0,则VD0则是存放2505的地址。
该指令的功能:将十进制数2505传送给VD0地址中。
西门子 S7-300的寻址方式
S7-300编程语言的基本单位是语句,而语句的构成是指令,每条指令有两部分:一部分是操作码,另一部分是操作数。操作码是指出这条指令的功能是什么,操作数则指明了操作码所需要的数据所在。所谓寻址,就是寻找操作数的过程。S7-300 CPU的寻址分三种:立即寻址、直接寻址、间接寻址。
1.立即寻址
在一条指令中,如果操作码后面的操作数就是操作码所需要的具体数据,这种指令的寻址方式就叫立即寻址。
如:在传送指令中:MOV IN OUT——操作码“MOV”指出该指令的功能把IN中的数据传送到OUTD 2505 VD500
功能:将十进制数2505传送到VD500中,这里2505就是源操作数。因这个操作数的数值已经在指令中了,不用再去寻找,这个操作数即立即数。这个寻址方式就是立即寻址方式。而目标操作数的数值在指令中并未给出,只给出了要传送到的地址VD500,这个操作数的寻址方式就是直接寻址。

在S7-200中如何对于一个项目实例进行间接域寻址

在S7-200中如何对于一个项目实例进行间接域寻址

说明:
以下描述了在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自动化系统" 手册中可以找到关于该主题的进一步信息,另外通过在线帮助输入"直接和间接寻址"也是非常有用的.。

西门子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的间接寻址离不开数组。

西门子S7-300高级编程培训4间接寻址和地址寄存器

西门子S7-300高级编程培训4间接寻址和地址寄存器

Date: File:
2011-9-5 PRO2_04E.4
SITRAIN Training for
Automation and Drives
在程序中分析数据块DB相关信息 在程序中分析数据块 相关信息
用于DB寄存器的指令: 用于 寄存器的指令: 寄存器的指令
CDB:交换DB寄存器内容 :交换 寄存器内容
DB41 1.0 2.0 Meas_Value[1] Meas_Value[2]
#Ini_Value
-
32 #Counter 36 40
9.0 10.0 11.0 . . .
Meas_Value[9] Meas_Value[10] Meas_Value[11] 等等。 等等。
SIMATIC S7
Siemens AG 2001. All rights reserved.
组合指令 包含OPN D DB..) (包含 )
L DB19.DBW4
L “Values”.Number_1
A DB10.DBX4.7
的第4个字节的第 个字节的第7位开始扫描 从DB 10 的第 个字节的第 位开始扫描
SIMATIC S7
Siemens AG 2001. All rights reserved.
SITRAIN Training for
Automation and Drives
间接寻址示例
FC30:间接寻址示例 : Network(段) 1:使用间接寻址方式打开 ( :使用间接寻址方式打开DB L #dbnumber T MW 100 OPN DB[MW 100] Network (段) 2: L T L next: T L T L L -D T L LOOP P#18.0 MD 40 10 MB 50 0 DBW[MD 40] MD 40 P#2.0 MD 40 MB 50 next // 将DB号拷贝到 号拷贝到MW100 号拷贝到 // // 打开DB 打开 循环删除 // // // // // // // // // // // // 将终端地址( 将终端地址(DBW18)作为指针 ) 传送到MD 40; 传送到 ; 将循环计数器值设置为10 将循环计数器值设置为 传到MB 50中; 传到 中 装载初始值 传到DB50中; 传到 中 装载指针 并减去2个字节 并减去 个字节 然后再传回 到MD 40; ; 装载循环计数器 减去2个字节 条件满足则跳转; 个字节, 减去 个字节,条件满足则跳转;

S7-400间接寻址

S7-400间接寻址

详解西门子间接寻址【地址的概念】完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。

S7-300间接寻址及地址寄存器指令3

S7-300间接寻址及地址寄存器指令3

"Motor_1".speed AUTOMATE Technology (Shanghai) Co., Ltd.© 2014
ANY数据类型的结构 ANY数据类型指针
Byte n Byte n+2
16#10 复制系数
Data type
Byte n+4
DB号
Byte n+6 1 O O O _ O R R R _ O O O O _ O B B B Byte n+8 B B B B _ B B B B _ B B B B _ B X X X
参数类型
BLOCK_FB BLOCK_FC BLOCK_DB BLOCK_SDB COUNTER TIMER
标识符
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0E 13
标识符
17 18 19 1A 1C 1D
AUTOMATE Technology (Shanghai) Co., Ltd.© 2014
间接寻址及地址寄存器指令
上海冠致工业自动化有限公司
AUTOMATE Technology (Shanghai) Co., Ltd.© 2014
1
在STEP7软件中,使用变量地址的方式有很多种 ,有最直接的直接寻址方式,有间接寻址方式;每 种都有自己的使用范围,一下来讲讲比较难掌握的
间接寻址方式。
AUTOMATE Technology (Shanghai) Co., Ltd.© 2014
P#DB43.DBX0.0 REAL 8
EN FC 43 ENO Measured_values Sum
Mean_value
AUTOMATE Technology (Shanghai) Co., Ltd.© 2014

SIEMENSSTEP7间接寻址

SIEMENSSTEP7间接寻址
比较
02 Siemens Step7 中的间接寻址
Step7 中的间接寻址方式
01
间接寻址是通过间接地址指针来访问存储单元的寻址方 式。在 Step7 中,间接寻址主要应用于数组、结构体等 复杂数据类型的访问。
02
间接寻址通过使用指针变量来间接指向目标数据,从而 实现数据的间接访问。
03
间接寻址的地址计算涉及指针变量的值计算,以确定目 标数据的实际地址。
Siemens Step7 间 接寻址
目录
• 间接寻址简介 • Siemens Step7 中的间接寻址 • 间接寻址的编程示例 • 间接寻址的优缺点 • 间接寻址的常见问题与解决方案 • 间接寻址的未来发展与展望
间接寻址简介
01
定义与特点
01
定义
间接寻址是一种在编程中通过间接变量访问实际变量的 方法。在Siemens Step7中,间接寻址允许我们通过间 接变量来访问数据块中的数据。
间接寻址的地址计算
01
地址计算是间接寻址中关键的一步,它涉及到指针 变量的值调整和偏移计算。
02
地址计算通常涉及加减运算,以根据指针变量当前 指向的地址,计算出目标数据的实际地址。
03
地址计算过程中需要考虑数据类型的大小和字节顺 序,以确保正确访问目标数据。
间接寻址的指令应用
01
间接寻址在 Step7 中广泛应用于指令操作,如数据块读写、结 构体访问等。
数据块访问权限问题
总结词
在Step7中,数据块访问权限问题也是一个常见问题,可能导致程序无法正常访问数据 块。
详细描述
当使用间接寻址时,如果访问的数据块没有正确的访问权限,程序将无法读取或写入数 据块。为了避免这个问题,程序员需要确保数据块具有正确的访问权限,并且在使用间

西门子S7-1200FieldRead 和 FieldWrite 间接寻址指令

西门子S7-1200FieldRead 和 FieldWrite 间接寻址指令

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 区数据都不支持这个功能。

为什么FieldRead 和 FieldWrite指令的参数显示红色不正确?答:必须保证参数"MEMBER" 和 "VALUE" 的数据类型一致,如果一个是字节,一个是实数,就会显示红色不正确的提示,如图5.图5. 参数的正确设置。

西门子S7-300高级编程培训4间接寻址和地址寄存器

西门子S7-300高级编程培训4间接寻址和地址寄存器

32位指针的结构(内部区域):
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0000000000000BBBBBBBBBBBBBBBBXXX
215
20 22
20
未定义
字节地址(无符号整数)
// 将DB号拷贝到MW100 // // 打开DB
Network (段) 2:
L P#18.0
T MD 40
L 10
next: T MB 50
L0
T DBW[MD 40]
L MD 40
L P#2.0
-D
T MD 40
L MB 50
LOOP
next
循环删除
// 将终端地址(DBW18)作为指针 // 传送到MD 40; // 将循环计数器值设置为10 // 传到MB 50中; // 装载初始值 // 传到DB50中; // 装载指针 // 并减去2个字节 // 然后再传回 // 到MD 40; // 装载循环计数器
当访问FB中的INOUT参数时,如果该INOUT参数是复杂数据类型 (ARRAY、STRUCT、DATE_AND_TIME),则AR1寄存器和DB寄存 器内容将会被覆盖掉。
在装载地址寄存器和对目标变量进行寄存器间接寻址的时候, 不允许
访问局部参数
在STL/LAD/FBD编辑器内使用AR2
在对FB内部所有参数和静态变量进行寻址的时候,AR2寄存器和DI寄存 器均用作基址寄存器。
将ACCU1中的内容装载到ARn
LARn <地址> 将<地址>中的内容装载到ARn

(完整版)S7-200间接寻址解析

(完整版)S7-200间接寻址解析

(完整版)S7-200间接寻址解析对指令的操作数的指定方式,我将其理解为“寻址”。

下面将以我个人的理解对西门子S7-200的寻址方式进行描述,如有不当之处,还请广大读者指正。

在程序中绝大部分的指令都带有操作数,所谓的操作数,是执行这一指令时被这一指令加以操作、处理的数值。

对指令的操作数的指令方式大致的总结一下,可以概括为如下几个类型:1:指令的操作数为“立即数”,(如:15、16#F、2#1111等、、、、、、)。

LD M0.0MOVW +255, VW0+I +45, VW0这是一条加法指令,被加数为:255、加数为45执行这条指令后计算出来的“和”存放在VW0这一存储器内。

LD M0.0MOVB 15, VB0这是一条传指令,译为:将15传送至存储器VB0内。

2:指令的操作数没有直接的给出,而是给出它所在的地址。

LD M0.0MOVW VW0, VW4-I VW2, VW4这是一条减法指令,译为:将存储器VW0内的数值减去存储器VW2内的数值,将“差”存放在存储器VW4内。

3:指令的操作数没有直接的给出,而是给出它所在的地址的“地址”,在S7-200中,将这种寻址方式称之为“指针寻址”。

下面,我们一起来学习一下关于指针的使用方法:在使用指针进行间接寻址的过程中,会涉及到的两个符号:&:建立指针(进行间接访问的区域)*:读取指针(读取指针间接指定的地址)下面是使用指针的一般步骤:1:建立指针建立指针需要使用双字传送指令,如下所示:LD M0.0MOVD &MB0, VD10译为:在VD10建立指针,指针指向被间接访问的首地址MB0。

在建立指针时需要注意如下几个问题:①可以进行间接访问的区域,包括如下几个区域:I、Q、M、S、V、T(当前值)、C(当前值)。

在S7-200中位状态是不能进行间接指定的,所以这里特别强调只是访问定时器及计数器的当前值,而不是其位状态。

②可以作为建立指针的区域,包括如下几个区域:V、L、及累加器AC1至AC3。

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个字节元素的数组,设置各数组元素的初始值。

西门子间接寻址的详细介绍

西门子间接寻址的详细介绍

西门子间接寻址的详细介绍在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。

但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。

从寄存器到得出真正的地址数值单元,西门子提供了两种途径:1、区域内寄存器间接寻址2、区域间寄存器间接寻址地址寄存器间接寻址的一般格式是:〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或M[AR1,P#0.0] 。

〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。

但在这里,情况有所变化。

比较一下刚才的例子:DIX [AR1,P#1.5]X [AR1,P#1.5]DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。

但下面一个示例中的M呢?X只是指定了存储区域的尺寸符,那么存储区域符在哪里呢?毫无疑问,在AR1中!DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。

X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。

既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。

【AR的格式】地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。

s7-300,400间接寻址

s7-300,400间接寻址

字及双字的寻址,32位的地址指针可以使用一个双字表示。
第0位-第2位作为寻址操作的位地址。
第3位-第18位作为寻址操作的字节地址。
第19位-第31位没有定义。例如:I1.1用如下指针表示
I [0……01001]
存储器32位指针仅用于内部区域寻址。
寻址格式表示这: 地址存储器标示符 [32位地址指针]
LAR1/2 P#M20.0//装载地址指针P#M20.0到AR1或AR2中
L B [AR1/2, P#10.0]
装载指令 访问宽度 地址寄存器 地址偏移常量
000表示没有地址区,例如P#12.0
001表示输入地址区,例如P#I12.0
//16位地址指针不能访问到位。
opn db [mw20] // 打开DB块
打开指令 区域标识符 地址指针
如果MW20=2就是打开数据块DB2
CU C [MW20] //打开向上计数器[MW20]为指针
T MD 24 //
L 320 //320转换指针为P#40.0(320/8=40.0)
T MD 28 //并装载到MD28中。
L DB [MD20]//装载Dபைடு நூலகம்1.DBW4
L DB [MD24]//装载DB1.DBW20
如果MD10=48,表示的地址指针为6.0(48/8=6)
//32位内部区域指针可用常数表示,表示为P#字节.位。如:
常数“P#10.3”指向第10个字节的第3个位。
若把一个32位整形数转换为字节指针常数,从上述指针格式
可以看出,应该要把该数左移3位(或是X8)即可。如:
L L#100 //装入32位整形100
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Date: File:
2011-3-31 PRO2_04E.10
SITRAIN Training for
Automation and Drives
内部区域, 内部区域,寄存器间接寻址
AR 1或AR2中的内部区域指针: 或 中的内部区域指针: 中的内部区域指针
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SITRAIN Training for
Automation and Drives
间接寻址示例
FC30:间接寻址示例 : Network(段) 1:使用间接寻址方式打开 ( :使用间接寻址方式打开DB L #dbnumber T MW 100 OPN DB[MW 100] Network (段) 2: L T L next: T L T L L -D T L LOOP P#18.0 MD 40 10 MB 50 0 DBW[MD 40] MD 40 P#2.0 MD 40 MB 50 next // 将DB号拷贝到 号拷贝到MW100 号拷贝到 // // 打开DB 打开 循环删除 // // // // // // // // // // // // 将终端地址( 将终端地址(DBW18)作为指针 ) 传送到MD 40; 传送到 ; 将循环计数器值设置为10 将循环计数器值设置为 传到MB 50中; 传到 中 装载初始值 传到DB50中; 传到 中 装载指针 并减去2个字节 并减去 个字节 然后再传回 到MD 40; ; 装载循环计数器 减去2个字节 条件满足则跳转; 个字节, 减去 个字节,条件满足则跳转;
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.3
SITRAIN Training for
Automation and Drives
DB中地址标识符直接寻址 中地址标识符直接寻址
打开的数据块 OPN DB 19 OPN "Values" OPN DI 20 在数据块中装载和传递
间接寻址及地址寄存器指令
?
?
?
1 2
#Ini_Value
9 10 #Counter
L
W
[AR1,
P#200.0]
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.1
SITRAIN Training for
DB寄存器 寄存器 123 24
DI寄存器 寄存器
24 指令执行前: 指令执行前:
CDB
123 指令执行后: 指令执行后:
寄存器内容装载到ACCU1中 将DB寄存器内容装载到 寄存器内容装载到 中 L DBNO (将打开的DB号装载到ACCU1中) L DINO (将打开的DI号装载到ACCU1中) 装载数据块长度 L DBLG (将打开的DB的长度/字节装载到ACCU1中) L DILG (将打开的DI的长度/字节装载到ACCU1中)
Automation and Drives
STEP 7 中可能的寻址方式
寻址方式
直接寻址
间接寻址
绝对寻址
符号寻址
存储器间接寻址
寄存器间接寻址
16位指针 位指针 (DB, T, C) ) 示例: 示例: A I 4.0 L IW10 A "Mot_on" L #Num OPN DB[MW10] SP T["runtime"]
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.7
SITRAIN Training for
Automation and Drives
存储器间接寻址的特性
用于存储16位和 位指针的地址区域 用于存储 位和32位指针的地址区域: 位和 位指针的地址区域:
L DBB 1 L DBW 2 L5 T DBW 4 L ‘A’ L DIB28 ==I A DBX 0.0
装载数据字节1 装载数据字节 装载数据字2(字节2/3) 装载数据字 (字节 ) 装载数字5 装载数字 传递到字4 传递到字 装载ASCII字符 字符A 装载 字符 装载数据字节28 装载数据字节 比较 字节的第0位开始扫描 从0字节的第 位开始扫描 字节的第 从DB 19中装载数据字 中装载数据字4 符号访问变量 Number_1. DB19 具有变量名“Values” 具有变量名
Date: File:
2011-3-31 PRO2_04E.4
SITRAIN Training for
Automation and Drives
在程序中分析数据块DB相关信息 在程序中分析数据块 相关信息
用于DB寄存器的指令: 用于 寄存器的指令: 寄存器的指令
CDB:交换DB寄存器内容 :交换 寄存器内容
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.6
SITRAIN Training for
Automation and Drives
用于存储器间接寻址的指针结构
16位指针的结构: 位指针的结构: 位指针的结构
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
向FB和FC传递指针的特点 和 传递指针的特点
在参数里传递的指针不能直接用于存储器间接寻址。 用于存储器间接寻址而传递的指针,在访问之前必须拷贝到临时变量里去
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.8
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2011-3-31 PRO2_04E.5
SITRAIN Training for
Automation and Drives
存储器间接寻址
字格式的16位指针(用于对 、 、 进行寻址 进行寻址) 字格式的 位指针(用于对DB、T、C进行寻址) 位指针
附加访问宽度
字节,字,双字 字节, 字节, 字节,字,双字 字节, 字节,字,双字 字节, 字节,字,双字 字节,字,双字 字节, ---
含义
输入 输出 外设输入 外设输出 位(Bit)存储器 ) 定时器 计数器
字节( 字节(DBB), 字(DBW), 通过 寄存器寻址的数据 ) ) 通过DB寄存器寻址的数据 双字( 双字(DBD) ) 字节( 字节(DIB), 字(DIW), 通过 寄存器寻址的数据 ) ) 通过DI寄存器寻址的数据 双字( 双字(DID) ) 字节( ) 字节(LB), 字(LW), ) 双字 (LD) ) 本地数据堆栈
位(Bit)存储区(绝对寻址或符号寻址) 例如: OPN DB[MW30],OPN DI[“Motor_1”] 等。 A I[MD30],T QD["Speed_1"],等) 本地数据堆栈(绝对寻址或符号寻址, 例如: OPN DB[LW10],OPN DI[#DB_NO]等。 A I[LD10],T QD[#Par_Pointer],等。) 全局(共享) 数据块(只能进行绝对寻址,DB必须预先打开, 例如: OPN DB[DBW0] (覆盖掉DB寄存器内容!!!),OPN DI[DBW22]等。 A I[DBD10],T QD[DBD22],等。) 背景数据块(只能进行绝对寻址,DI必须预先打开, 例如: OPN DB[DIW20],OPN DI[DIW0] (覆盖掉DI寄存器内容!!!),等 。 A I[DID10], T QD[DID22]等。)
Automation and Drives
交叉区域, 交叉区域,寄存器间接寻址 区域
AR 1或AR 2中的交叉区域指针: 中的交叉区域指针: 或 中的交叉区域指针
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 B B B B B B B B B B B B B B B B X X X
215 20 22 20
未定义
字节地址(无符号整数)
位地址
指令语法规则: 指令语法规则:
LAR1 P#10.0 // 设置AR1 AR1: 00000000 0000 0000 0000 0000 0101 0000
L 11 T MW 60 OPN DB[MW 60] OPN DB 11
双字格式的32位指针(用于对I、Q、M...进行寻址 进行寻址) 双字格式的32位指针(用于对I、Q、M...进行寻址) 位指针
L T L P#24.0 MD 50 I W [MD50] L IW 24
存储 区域
访问 宽度
地址
SIMATIC S7
0 0 0 0 0 0 0 0 0 0 0 0 0 B B B B B B B B B B B B B B B B X X X
215 20 22 20
未定义
字节地址(无符号整数)
位地址
装载32位指针常量(内部区域): 装载 位指针常量(内部区域): 位指针常量
P#25.3 (P = 指针,字节地址= 25,位地址:3)
相关文档
最新文档