step7寻址方式

合集下载

西门子STEP7中的绝对寻址和符号寻址

西门子STEP7中的绝对寻址和符号寻址

西门子STEP7中的绝对寻址和符号寻址绝对寻址和符号寻址在STEP 7程序中,使用地址如I/O信号、位内存、计数器、定时器、数据块和功能块。

完全可以在程序中访问这些地址,但是如果使用地址符号,程序将更容易阅读(例如,Motor_A_On或其它符合公司或行业内代码系统的符号)。

然后,可以通过此符号访问用户程序中的地址。

绝对地址绝对地址包含地址标识符和内存位置(例如,Q 4.0, I 1.1, M 2.0, FB21)。

符号地址如果将符号名分配给绝对地址,可以使程序更易读,并能简化故障排除。

STEP 7可以自动地将符号名称翻译成所需要的绝对地址。

如果愿意使用符号名称访问ARRAY、STRUCT、数据块、本地数据、逻辑块和用户自定义数据类型,在使用符号寻址数据前,必须首先将符号名称分配给绝对地址。

例如,可以将符号名称MOTOR_ON分配给地址Q 4.0,然后在程序语句中将MOTOR_ON作为地址使用。

使用符号地址,更容易识别程序中的元素与过程控制项目的组件的匹配程度。

支持编程在编程语言梯形图、功能块图和语句表中,可以输入地址、参数和块名称,作为绝对地址或符号。

使用菜单命令视图> 显示> 符号表示法,可以在地址的绝对表示法和符号表示法之间切换。

为了更容易使用符号地址编程,可以显示绝对地址和属于符号的符号注释。

可以使用菜单命令视图> 显示> 符号信息激活此信息。

这意味着每个STL语句后的行注释中包含更多的信息。

不能编辑该显示;任何改变都必须在符号表或变量声明表中开展。

下列图显示在STL中的符号信息。

当打印输出一个块时,具有语句注释或符号注释的当前画面表示也被打印。

共享符号与局部符号符号使您能够采用具有某种意义的符号名来代替绝对地址开展工作。

短符号和长注释的有效结合,可使编程更容易、程序文档的质量更好。

应注意区分局部(指定块)符号和共享符号之间的不同。

显示共享符号或局部符号程序代码段中的共享符号与局部符号之间的差异可区分如下:来自符号表中的符号(共享符号)将显示在引号".."内。

STEP7——POINTER指针详解

STEP7——POINTER指针详解

参数类型POINTER的格式下图给出了存储在每个字节中的数据类型。

参数类型POINTER存储下列信息:•DB编号(或0,如果数据没有存储在DB中)•CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)十六进制代码存储区描述b#16#81I输入区域b#16#82Q输出区域b#16#83M位存储区域b#16#84DB数据块b#16#85DI背景数据块b#16#86L本地的数据(L堆栈)b#16#87V先前的本地数据•数据的地址(格式为字节.位)STEP 7提供指针格式:p#memory_area byte.bit_address.(如果形式参数被声明为参数类型POINTER,只需要指出存储区域和地址。

STEP 7将自动地重定输入指针的格式。

) 下面的实例说明如何为以M50.0开始的数据输入参数类型POINTER:•P#M50.0•M50.0 (如果形式参数声明为POINTER)。

使用参数类型POINTER指针用于指向地址。

这种寻址方式的优点是可以在程序处理期间动态地修改语句的地址。

存储器间接寻址的指针使用存储器间接寻址的程序语句由指令、地址标识符和偏移量组成(偏移量必须在方括号内给出)。

双字格式指针的实例:区域内部和区域交叉寻址的指针使用这些寻址方式的程序语句包含指令和下列部分:地址标识符、地址寄存器标识符、偏移量。

地址寄存器(AR1/2)和偏移量必须在方括号内一起指定。

区域内部寻址的实例指针不包含存储器区的指示:偏移量0.0没有影响。

输出10.0由8.7 (AR1)加上偏移量1.1计算出来。

结果是10.0而不是9.8,参见指针格式。

区域交叉寻址的实例在区域交叉寻址中,存储区域在指针中指出(在实例I和Q中)。

偏移量0.0没有影响。

输出10.0由8.7 (AR2)加上偏移量1.1计算出来。

结果是10.0而不是9.8,参见指针格式。

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。

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

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

step7中的难点:间接寻址示例,中文详细注释

step7中的难点:间接寻址示例,中文详细注释

FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据,复制到另一个块的指定位置。

TITLE = //标题,这里没有指定AUTHOR : BaiZH //作者感谢您,BaiZH,通过您的这个例子我基本入明白了//接寻址的用法。

不过具体在什么情况下使用我还得继续努//力。

FAMIL Y : IR //分类NAME : DBtoDB //名称VERSION : 0.1 //版本V AR_INPUT //输入型变量声明开始SRC_DB : INT ; //Source DB Block Number //整型值,要复制的源数据块块号SRC_SttAddr : INT ; //Start Address of the Sending Data in SRC_DB//源数据块的要复制的数据起始地址SendNum : INT ; //Words Number Need Sending //要复制的数据量DST_DB : INT ; //Destination DB Block Number //目标数据块号DST_SttAddr : INT ; //Start Address of the Receiving Data in DST_DB //目标数据块中数据起始地址END_V ARV AR_IN_OUT //输入输出变量声明Enable : BOOL ; //Enable Bit //使能此功能块位END_V ARV AR_TEMP //声明临时变量DB_LOAD_TEMP : INT ; //存放临时数据块块号Loop_Val : INT ; //Send Data Loop Value //循环次数DB_SAVE : INT ; //保存进入此函数前,系统已经打开的数据块号DI_SA VE : INT ; //同上AR1_SA VE : DWORD ; //保存进入此函数前,地址寄存器1中的值AR2_SA VE : DWORD ; //同上END_V ARBEGIN //在STEP7的BLOCK中编辑时的程序主要从这里开始NETWORKTITLE =Send Data//Move data from DB to DBA #Enable; //使能位,ENABLE为1执行以下程序JCN END; //否则跳转到最后TAR1 #AR1_SA VE; // Save AR and Opened DB //保存进入此函数前的数据到临时变量中,以备离开时复原TAR2 #AR2_SA VE;L DBNO; //同上,保存调用前的现场数据,以备调用完毕复原主程序的现场数据T #DB_SA VE; //一个DBNO,一个DINO,是因为要同时打开两个数据块,只能一个背景数据块,一个共享数据块。

PLC STEP-7编程技术

PLC STEP-7编程技术

例3 设计一个3个按钮控制一个灯的电路,要求3个按钮位于不同位 置。按任意一个按钮灯亮,再按任意一个按钮灯灭。
图 例4多台电机顺序起动顺序停止PLC控制梯形图程序 图 例5多台电机顺序起动顺序停止PLC控制梯形图程序
3.7STEP7指令系统(二) 指令系统( 指令系统
定时器指令 1.脉冲定时器:--(SP) 2.扩展脉冲定时器--(SE) 3.开通延时定时器--(SD) 4.保持型开通延时定时器--(SS) 5.关断延时定时器--(SF) 数据装载和传送指令(MOVE)
注意:时间基准反映了定时器的分辨率,时间基准越小,分
辨率越高,可定时的时间越短;时间基准越大,分辨率越 低,可定时的时间越长。
1、脉冲定时器 --(SP)
--(SP)指令是产生指定时间宽度脉冲的 定时器。
LAD 参数 <地址> 数据类型 TIMER 存储区 T 说明 地址表示要 起动的计时 器号
时间值
正跳变
<地址>
BOOL
Q、M、D
例4 多台电动机的PLC控制,要求:有5台电动机M1~M5,每台 电机都有自己的起停按钮,起动时必须按照顺序才能起动,即 当电动机M1起动运行以后,电动机M2才能起动,依次类推。 停止时也必须M1停止以后,M2才能停止,依次类推。 例5 多台电动机的PLC控制,要求:有5台电动机M1~M5,每台 电机都有自己的起停按钮,起动时必须按照顺序才能起动,即 当电动机M1起动运行以后,电动机M2才能起动,依次类推, 直到M5起动。停止时顺序相反,即必须M5停止以后,M4才 能停止,依次类推,直到M1停止。
0 1
1
1
1
1
1
0
位逻辑指令 正跳沿(上升沿)检测指令

STEP7的基本数据类型及其用法汇总

STEP7的基本数据类型及其用法汇总

STEP7的基本数据类型及其用法汇总STEP7有3种数据类型:1. 基本数据类型2. 由基本数据类型组合而成的复合数据类型;3. 用来传送FB块和FC块参数的参数数据类型本文首先介绍一下基本数据类型。

STEP7的基本数据类型总共有7种,分别为:位(bit)、字节(Byte)、字(Word)、双字(Double Word)、整型数(INT)、双整型数(DINT)以及实数(REAL)。

1. 位(bit)取值:1、0寻址方式:地址标识符+字节地址+位地址。

图1 基本数据类型:位(bit)2. 字节(Byte)8位二进制数组成一个字节。

其中,第0位为最低位(LSB),第7位为最高位(MSB)。

寻址方式:地址标识符+B+字节地址,其中,'B'即代表字节。

图2 基本数据类型:字节(Byte)3. 字(Word)相邻的两个字节组成一个字,16位。

字用来表示无符号数,范围:[0000,FFFF]16进制,或[0,65535]10进制寻址方式:地址标识符+W+首字节地址,其中,'W'代表字。

图3 基本数据类型:字(Word)4. 双字(Double Word)相邻的两个字组成一个双字,32位。

双字也用来表示无符号,范围:[00000000,FFFFFFFF]16进制寻址方式:地址标识符+D+首字节地址,其中,'D'代表双字。

图4 基本数据类型:双字(Double Word)5. 整型数(INT)整数是有符号数,占16位。

最高位为符号位,0:正数;1:负数。

取值范围为:[-32768,32767]。

6. 双整型数(DINT)双整数也是有符号数,占32位。

最高位为符号位,0:正数;1:负数。

取值范围为:[-2147483648,2147483647]。

7. 浮点数(REAL)标准的浮点数格式如图5所示,占32位。

最高位为符号位,0:正数;1:负数。

图5 基本数据类型:浮点数(REAL)浮点数的优点是用32位的空间可以表示非常大和非常小的数。

STEP7编址详解

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。

其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。

这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。

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

在谈间接寻址之前,我们简单的了解一下直接寻址。

所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。

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

对,就是这个概念。

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

程序语句中用方括号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。

间接由此得名。

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

在 STEP 7 (TIA 博途) 中,如何在 SCL 程序中实现间接寻址

在 STEP 7 (TIA 博途) 中,如何在 SCL 程序中实现间接寻址

在STEP 7 (TIA 博途) 中,如何在SCL 程序中实现间接寻址?S7-300/400 控制器使用SCL 有两种方法可以进行间接寻址。

•变量的间接寻址•DB 块的间接寻址变量的间接寻址类似于绝对寻址。

只是在括号内定义一个偏移量来替换掉地址值。

对于数据块的间接寻址,可以使用转换函数"WORD_TO_BLOCK_DB" 进行转换。

下图中的例子,描述了在S7-300/400 中如何使用间接寻址来访问DB 块中的数据。

图. 01如果希望通过间接寻址访问S7-300/400 的M,I 区和Q 区,需要使用指令%MX(), %MB(), %MW(), %EX(), %EB(), %EW(), %AX(), %AB()和%AW()。

在访问区域前面必须添加百分号。

如下图2 所示。

图. 02SIMATIC S7-1200/1500 控制器可使用表01 中指令来实现间接寻址。

指令描述POKE 写存储器地址POKE_BOOL 写存储器位PEEK 读存储器地址PEEK_BOOL 读存储器位POKE_BLK 写存储区表01可通过如图3 所示,使用PEEK 和POKE 指令来访问数据块中的数据。

图. 03注意PEEK 和POKE 指令无法在S7-300/400 中使用。

更多关于间接寻址及指令使用的相关信息,请参阅STEP 7 (TIA 博途) 在线帮助。

图. 04 是如何在S7-1200/S7-1500中使用"POKE_BLK" 指令实现间接寻址的例子。

源DB(标签名"DB_Number_SRC") 的数据被拷贝到目的DB (标签名"DB_Number_DES") 中。

Fig. 04表01 所列相关指令详细信息请参阅STEP 7 (TIA 博途) 在线帮助。

创建环境该FAQ 相关截图由STEP 7 (TIA 博途) V13 创建。

step7地址详解

step7地址详解

西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:单字和双字。
这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:
现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
通过L L#+10 ,我们知道存放在MD104中的值应该是:
MD104:0000 0000 0000 0000 0000 0000 0000 1010
当是对P区域寻址时,AR=800xxxxx
当是对I区域寻址时,AR=810xxxxx

step7的使用方法

step7的使用方法

异步错误组织块
OB80~OB87:异步错误中断。异步错误 是PLC的功能性错误。它们与程序执行时 不同步地出现,不能跟踪到程序中的某个 具体位置。 在运行模式下检测到一个故障 后,如果已经编写了相关的组织块,则调 用并执行该组织块中的程序。如果,发生 故障时,相应的故障组织块不存在,则 CPU将进入STOP模式。
中间输出单元 信号流反向指令 复位线圈 置位线圈 复位置位触发器和置位复位触发器
位逻辑指令
程序实例
对应时序图如下所示:
位逻辑指令
时序图
位逻辑指令 正跳沿(上升沿)检测指令
位逻辑指令 负跳沿(下降沿)检测指令
位逻辑指令
地址正跳沿检测 地址负跳沿检测
SAVE指令
位逻辑指令 地址上升沿检测指令示例
1. FC和FB的变量声明表的差别
2.FC和FB参数赋值不同
FC没有自己的背景数据块 FB有自己的背景数据块 FC的参数必须指定实参 FB的参数可根据需要决定是否指定实参
3.1.3系统功能SFC和系统功能块SFB
SFC和SFB是预先编好的可供用户调用的 程序块,它们已经固化在S7PLC的CPU中, 其功能和参数已经确定。一台PLC具有哪 些SFC和SFB功能,是由CPU型号决定的。 具体信息可查阅CPU的相关技术手册。通 常SFC和SFB提供一些系统级的功能调用, 如通讯功能、高速处理功能等。注意:在 调用SFB时,需要用户指定其背景数据块 (CPU中不包含其背景数据块),并确定 将背景数据块下载到PLC中。
lad参数数据类型存储区说明地址timer地址表示要起动的计时器号时间值s5time定时时间值s5time格式4保持型开通延时定时器ss上图中的程序对应的时序图如图所示4保持型开通延时定时器sslad参数数据类型说明存储区地址timer要启动的计时器号如t0bool启动输入端tvs5time定时时间s5time格bool复位输入端bool定时器的状态biword当前时间整数格式bcdword当前时间bcd码格关断延时定时器sf相当于继电器控制系统中的断电延时时间继电器

SIEMENS STEP7 间接寻址ppt课件

SIEMENS STEP7 间接寻址ppt课件

Date: File:
2021/3/23 SSP2_03C.24
Information and Training Center Knowledge for Automation
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: File:
2021/3/23 SSP2_03C.25
Information and Training Center Knowledge for Automation
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: File:
2021/3/23 SSP2_03C.22
Information and Training Center Knowledge for Automation
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: File:
2021/3/23 SSP2_03C.1
Information and Training Center Knowledge for Automation
立即寻址的例子
SIMATIC S7
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: File:
2021/3/23 SSP2_03C.23
Information and Training Center Knowledge for Automation
SIMATIC S7
Siemens AG 2000. All rights reserved.

S7PLC系统存储区域和寻址方式

S7PLC系统存储区域和寻址方式

S7 CPU的系统存储区域分为下表中列出的地址区域。

在程序中可以根据相应的地址直接读取数据。

直接寻址
在STEP7程序中可以使用输入输出信号(I/O),位存储区(M),计数器(C),计时器(T),数据块(DB)以及功能块(FB)等地址。

你可以直接访问这些绝对地址,但是如果给绝对地址以符号(助记符)程序将更易读懂(例如Motor_A_On, 或者根据你的公司或者工程中的代码使用别的标识符),而一个你的用户程序中的地址也就可以用一个符号来访问。

绝对地址:
绝对地址由一个地址标识符和存储器位置组成。

例如I 0.0,Q 1.7,PIW 256,PQW 512,MD 20,T 15,C 16,DB1.DBB 10,L1 0.0等。

符号寻址:
如果给绝对地址分配符号可使程序易读而简化故障查找。

STEP7能自动翻译符号名为要求的绝对地址。

如果你准备用符号名访问数组,结构,数据块,局部变量,逻辑块及用户自定义数据类型,那么你必须在此之前先分配符号名给绝对地址。

例如,你可以分配符号名’Motor_On’给地址Q 4.0,然后在程序语句中使用符名’Motor_On’作为地址。

如需在程序中显示DB里所定义的符号,可以给该DB块定义一个符号。

不能在符号表给DB块中某地址单独定义符号。

间接寻址
间接寻址分为存储器间接寻址和寄存器间接寻址,间接寻址的指针分为16位指针和32位指针,而32位指针又分为内部区域寻址与交叉区域寻址。

问题如何在STEP7中使用间接寻址编写循环程序解答间接寻址

问题如何在STEP7中使用间接寻址编写循环程序解答间接寻址

问题:如何在STEP 7中使用间接寻址编写循环程序?解答:间接寻址允许寻址地址在程序运行期间才可以确定的操作数。

这意味着,程序的一部分可以重复执行。

在每个运行周期内,循环编程为所使用的操作数分配不同的地址。

在下载中包含了所附的程序“LoopAddr”的详细信息。

通过循环程序,将输入变量“Input_1”和“Input_2”的数值放入100个连续放置的存储单元中。

该程序包含了一个功能FC10,其IN变量为“Input_1”和“Input_2”( 类型为DWORD),并包含了编号为“DB_No”(类型为WORD)的数据块,以及一个声明为:“Value:ARRAY[1..100] of REAL”的数据块DB10。

在循环程序的每个运行期间内,将数值“Input_2”与来自“Input_1”的初始值相加,或者加到后面的总和上,然后将结果保存到数据块中计算得到的地址内。

例如,如果“Input_1”分配的数值为0.5,而“Input_2”数值为1.5,则第一个0.5保存在地址0.0中,而将计算得到的和(0.5+1.5=2.0)保存在后面的地址(4.0)中,下一个计算和(2.0+1.5=3.5)又保存在随后的地址(8.0)中,以此类推。

表1:在DB10中计算出来地址下保存“Input_1”、“Input_2”和相加结果的两个实例。

在FC10的第一部分中,调用系统功能SFC24“TEST_DB”,然后评估参数“RET_VAL”。

通过SFC24,接收到位于CPU的工作存储区中的数据块的信息。

如果DB是写保护的,则检测并检查所选DB的数据字节数。

如果“RET_VAL”的错误代码不等于零,则通过一个命令跳转来终止程序。

“RET_VAL”可能会返回下列错误编号:∙0000:没有错误发生。

∙80A1:数据块的编号为零,或者大于该CPU所允许的最大编号。

∙80B1:给定的数据块不在CPU中。

∙80B2:使用关键字UNLINKED生成数据块。

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中,数据块访问权限问题也是一个常见问题,可能导致程序无法正常访问数据 块。
详细描述
当使用间接寻址时,如果访问的数据块没有正确的访问权限,程序将无法读取或写入数 据块。为了避免这个问题,程序员需要确保数据块具有正确的访问权限,并且在使用间

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

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

0 0 0 0 0 0 0 0 0 0 0 0 0 BBBBBBBBBBBBBBBBXXX
215
20 22 20
未定义
字节地址(无符号整数)
位地址
指令语法规则:
LAR1 P#10.0
// 设置AR1 AR1: 00000000 0000 0000 0000 0000 0101 0000
LM W
[AR1, P#200.0]
Date: File:
2023/11/8 PRO2_04E.12
SITRAIN Training for
Automation and Drives
用于装载地址寄存器的指令
装载地址寄存器
LARn (n =1 or 2): 将ACCU1中的内容装载到ARn LARn <地址> 将<地址>中的内容装载到ARn LARn P#<地址> 将<地址>中的地址装载到ARn
Date: File:
2023/11/8 PRO2_04E.7
SITRAIN Training for
Automation and Drives
存储器间接寻址的特性
用于存储16位和32位指针的地址区域:
位(Bit)存储区(绝对寻址或符号寻址) 例如: OPN DB[MW30],OPN DI[“Motor_1”] 等。
交叉区域,寄存器间接寻址
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
1 0 0 0 0 RRR0 0 0 0 0 BBBBBBBBBBBBBBBBXXX

西门子PLC寻址方式

西门子PLC寻址方式

寻址方式
所谓寻址方式是指指令得到操作数的方式,可以直接或间接给出操作数的地址。

STEP-7有4种寻址方式:立即寻址、存储器直接寻址、存储器间接寻址和寄存器间接寻址。

1、立即寻址
立即寻址是对常数或常量的寻址方式,其特点是操作数直接包含其中,或指令操作数是唯一的。

2、存储器直接寻址
存储器直接寻址的特点是直接给出存储器的存储单元地址。

3、存储器间接寻址
存储器间接寻址的特点是用指针进行寻址。

操作数存储在由于指针给出的存储单元中,根据要描述的地址复杂程度,地址指针可以是字或双字的,存储指针的存储器也应是字或双字的。

对于T、C、FB、FC、DB,由于其地址范围为-,可使用字指针;对于I、Q、M等,可能要使用双字指针。

使用双字指针时,必须保证指针中的位编号为“0”。

4、寄存器间接寻址
寄存器间接寻址的特点是通过地址寄存器寻址。

S7中有两个地址寄存器:AR1和AR2,地址寄存器的内容加上偏移量形成地址指针,指向操作数所在的存储单元。

寄存器间接寻址有两种形式:区域内寄存器间接寻址和区域司寄存器间接寻址。

  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 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,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。

间接由此得名。

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

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

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

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

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

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

指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。

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

下面举例说明:L DW#16#35 //将32位16进制数35存入ACC1 T MD2 //这个值再存入MD2,这是个32位的位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2 T MW100 //这个值再存入MW100,这是个16位的位存储区域OPN DBW[MW100] //打开DBW10。

这里的[MW100]就是个单字指针,存放指针的区域是M区,MW100中的值10,就是指针间接指定的地址,它是个16位的值!-------- L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10 T MD104 //这个值再存入MD104,这是个32位的位存储区域A I[MD104] //对I1.2进行与逻辑操作!=DIX[MD2] //赋值背景数据位DIX6.5!-------- A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MD2] //赋值给Q6.5 -------- A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MW100] //错误!!没有Q10这个元件--------------------------------------------------------------------------------------------------- 从上面系列举例我们至少看出来一点:单字指针只应用在地址标识符是非位的情况下。

的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。

这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC 和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。

相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。

不过,有得必有失,在对非位的区域进行寻址时,
必须确保其0-2bit为全0!总结一下:单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制。

也正是由于双字指针是一个具有位的指针,因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。

现在,我们来分析一下上述例子中的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] 。

〖寄存器,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位。

当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:其0-2bit,指定bit位,3-18bit指定byte字节。

其第31bit固定为0。

AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX 这样规定,就意味着AR 的取值只能是:0.0 ——65535.7 例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。

而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。

相关文档
最新文档