西门子PLC编程中的间接寻址
西门子PLC指针寻址教学

L 11 T MW 60
OPN DB[MW 60]
OPN DB 11
z 双字格式的32位指针(用于对I、Q、M...进行寻址)
L P#24.0 T MD 50
LI
W
[MD50]
L IW 24
存储 访问 区域 宽度
地址
SIMATIC S7
Siemens AG 2001. All rights reserved.
地址标识符
Bit 31=0: 内部区域 Bit 31=1: 交叉区域
字节地址(无符号整数)
位地址
z 地址标识符:
000 I/O
010 输出(PIQ) 100 DB寄存器中的数据 110 自有本地数据
001 输入(PII)
011 位(Bit)存储器 101 DB寄存器2中的数据(DI) 111 调用块的LD(本地数据)
本地数据堆栈
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2013-4-26 PRO2_04E.3
SITRAIN Training for
Automation and Drives
DB中地址标识符直接寻址
打开的数据块
在数据块中装载和传递
A DBX 0.0
从0字节的第0位开始扫描
L DB19.DBW4 从DB 19中装载数据字4
L “Values”.Number_1 符号访问变量
Number_1. DB19 具有变量名“Values”
A DB10.DBX4.7 从DB 10 的第4个字节的第7位开始扫描
SIMATIC S7
Siemens AG 2001. All rights reserved.
CS_CJ系列PLC间接寻址的几种情况

CS/CJ系列PLC间接寻址的几种情况1以二进制方式指定的DM/EM间接地址当在一个DM或EM地址前加入一个@前缀时,该字内容指定另一个作为操作数,内容可以是000~7FFF(0~32767),对应于DM或EM区中所要求的字地址。
当该字的内容在000和7FFF之间时,则指定了D0000~D32767之间的对应字;当字的内容在8000~FFFF (32768~65535)之间时,则指定了当前EM区EM0_00000~EM0_32767之间的对应字。
如下图,D200中内容#0200,则程序将常数#0020传递到D512中。
当PC设置中选择二进制方式时,DM区和EM区地址当作连续存储地址使用,如果一个间接地址的DM字大于32767,那么EM零区号中的一个字将被制定。
例如:间接寻址的DM字为8001的十六进制(32769),那么将被指定零区号E00000;如果一个间接寻址的EM字所含值大于32767,那么在下一个EM区的一个字将被指定。
例如,就间接寻址区2区号EM字为8001的十六进制值(十进制位32769),那么E3_00001将被指定。
2以BCD方式指定间接DM/EM间接地址当在一个DM或EM地址前加入一个*前缀时,该字内容指定另一个字的BCD内容作为操作数,内容可以是0000~9999,对应于DM或EM区中所要的字地址。
3寻址检索寄存器(DR,IR的间接寻址)使用MOVR指令将一个字或者位的内部I/O内存地址传送到一个索引寄存器(IR0~IR15)使用MORW将一个定时器或计数器的PV内部I/O内存地址传送到一个索引寄存器。
把含在IR寄存器的I/O内存地址中的字或位作为操作数用。
在索引寄存器前面放一“,”表示间接寻址。
(根据指令或操作数决定所指定的位或字)如下图,将W100.00放入索引寄存器IR0,使用“,IR0”触发W200.00,当W100.00置1,W200.00导通。
把偏移值(-2048~+2047)加到包含在索引寄存器IR中的内存地址上,并且把结果地址当作操作数用。
S7-300和S7-400寻址

S7-300和S7-400寻址Addressing for S7-300 and S7-400Single - FAQ Edition (2010年-9月)摘要本文对S7-300, S7-400 PLC编程过程中,所涉及的寻址方式方法,做了简单介绍及简单示例。
关键词STEP7, 编程,寻址,间接寻址,S7-300, S7-400Key Words STEP7, Programming, Addressing, Indirection addressing, S7-300,S7-400目录S7-300和S7-400寻址1.S7-300/400系统存储区域2.S7-300/400 PLC寻址方式2.1直接寻址2.1.1绝对地址:2.1.2符号寻址:2.2间接寻址2.2.1存储器间接寻址2.2.2寄存器间接寻址2.2.3 FB/FC的指针参数传递1 S7-300/400系统存储区域S7 CPU的系统存储区域分为下表中列出的地址区域。
在程序中可以根据相应的地址直接读取数据。
►16位指针:16位地址指针用于定时器、计数器、程序块(DB、FC、FB)的寻址,16位指针被看作一个无符号整数(0~65535),它表示定时器(T)、计数器(C)、数据块(DB、DI)或程序块(FB、FC)的号,16位指针的格式如下:图1寻址格式表示为:区域标识符[ 16位地址指针]例如使一个计数器向上计数表示为:CU C [ MW ]上述指令中,’C’为区域标识符,而’MW20’为一个16位指针。
16位指针存储器间接寻址举例://用于定时器L 1T MW0 //将1传送到MW0A I0.0 //如果I0.0 = TrueL S5T#10SSD T[MW0] //T1开始计时// 上述指令可等同于:A I0.0L S5T#10SSD T1//用于打开DB块L 20T LW20OPN DB[LW20] //打开DB20//程序调用L 2T LW20UC FC[LW20] //调用FC2L 41T DBW30UC FB[DBW30] //调用FB41►32位指针:32位地址指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针可以使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:图 2存储器32指针仅用于内部区域寻址。
详解西门子间接寻址 (2)

详解西门子间接寻址【地址的概念】完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT 等)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。
当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。
由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A其中的A是指令符,是A的操作数,也就是地址。
这个地址由两部分组成:Q:指的是映像输出区:就是这个映像输出区第二个字节的第0位。
由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:。
DB X 200 . 0其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A ,就是直接寻址,对于A这个指令来说,就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
西门子plc指针的概念及应用资料

plc地址的概念完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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 .其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符 + 确切的数值单【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
浅谈西门子PLC的“SCL语言”编程[指南]
![浅谈西门子PLC的“SCL语言”编程[指南]](https://img.taocdn.com/s3/m/cab3d60d4a73f242336c1eb91a37f111f1850da5.png)
浅谈西门子PLC的“SCL语言”编程[指南] 浅谈西门子PLC的“SCL语言”编程随着现代工控技术的不断发展,可能很多使用过PLC的技术人员都有这么一个感受:传统的‘梯形图’编程方式在面对越来越复杂的控制要求时,已显得力不从心。
其实,现在很多大品牌的中高级PLC都支持国际电工委员会IEC61131标准中规范的五种编程语言的混合编程,即梯形图(LD)、结构化文本(ST)、流程图(SFC)、指令表(IL)和功能块(FB)。
在这五种编程语言中,我认为梯形图,结构化文本是一种不错的组合,用梯形图写逻辑控制,用结构化文本写计算,这样可以加快编程效率并且使程序的可读性大大提高。
而流程图编程则非常适用于一些“顺序控制”场合。
至于指令表和功能块,我个人认为实用性并不太大。
西门子S7系列PLC在国内工控领域中使用很广,它的编程软件Step7默认情况下只支持梯形图和指令表编程,但通过安装“S7-SCL”软件包和“S7-Graph”软件包可实现结构化文本和流程图编程。
下面,笔者就结合自己的一些使用经验介绍一下如何在Step7中用结构化文本编程。
一、什么是结构化文本编程结构化文本是一种类似于计算机高级语言的编程方式,它的语法规范接近计算机中的PASCAL语言。
具体的语法规则大家可参考西门子的相关手册,在此就不做详细介绍。
下图为Step7中的SCL编程界面:二、 S7-SCL软件包的安装在Step7 中,结构化文本编程被称为结构化控制语言(Structured Control Language),缩写为SCL. Step7 V5.3的软件包中已包含了S7-SCL软件包,在安装Step7 V5.3时,系统会提示是否要安装S7-SCL,把复选框打钩即可,见下图:Step7 V5.3的软件包里包含了SCL软件包和流程图编程软件包S7-GRAPH三、 SCL软件包的使用SCL软件包用于以“源文件”的方式编写功能块、函数块。
步骤如下: 第一步:当Step7中已正确安装SCL软件包后,会有如下界面正确安装了SCL软件包后,就可以用这种方式来建立Source File第二步:进入SCL编程界面,并选择准备编写的程序块的类别选择你所要编写的程序块的类型确定你所编写的程序块编号,本例中编写的是FC1第三步:编写程序并编译程序编写完毕后按这两个按钮中的任何一个进行编译编译后生产FC1经过以上四步,就完成了一个用SCL编写功能块的全过程, FC1的源程序,保存在“Sources”文件夹中,可随时打开进行修改。
西门子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中。
存储器间接寻址简称间接寻址。
该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。
该存储器一般称为地址指针,在指令中需写在方括号“[]”内。
西门子PLC指针编程

寄存器间接寻址
POINTER数据 类型指针
ANY数据类型 指针
FB块形参的 编程
//////////////////////////////////////////////////////////////////////// ///L///1//2/////////////////////
T LW 20 UC FC [LW 20] //无条件调用FC12 L 13 T MW 20 A I 2.3 CC FB [MW 20] //如果I2.3为1,调用FB13。
TAR2 <D> : 将AR1存储的地址指针传输给指明的变量中。
CAR
: 交换AR1和AR2的内容。
A&D CS2 FA 崔坚
SIMATIC Technical Consulting 2007 8月
Page 14
A&D AS CS2 FA Systems Support
寻址方式 直接寻址
存储区地址指针
POINTER数据 类型指针
ANY数据类型 指针
FB块形参的 编程
32位地址指针
地址寻址表示格式为: 地址存储器标识符[32位地址指针],例如指针存储于LD20中, 装载M存储器一个字节表示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本栏论题:西门子PLC编程中的间接寻址[601]
1、地址的概念
我们知道,完整的一条指令,应该包含指令符+操作数(不包括那些单指令)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
在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位。
因此一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX0.0。
其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+确切的数值单元
2、间接寻址的概念
寻址,就是指定指令要进行操作的地址。
给定指令操作的位址方法,就是寻址方法。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,这样看来,间接寻址就是间接的给出指令的确切操作数。
比如:A Q[MD0],A T[DBW4]。
程序语句中用方刮号[]标明的内容,间接的指明了指令要进行的位址,这两个语句中的MD0和DBW4称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
3、间接寻址的两种方法
西门子的间接寻址方式有两大类型:内存间接寻址和寄存器间接寻址。
(1)、内存间接寻址
内存间接寻址的地址给定格式是:地址标识符+指针。
指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
内存间接寻址具有两个指针格式:单字和双字。
单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。
双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。
单字指针和双字指针在使用上有很大区别。
单字指针只应用在地址标识符是非位的情况下。
的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位构来说,只能用双字指针。
这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。
相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。
不过,有得必有失。
(在对非位的区域
进行寻址时,必须确保其0-2bit为全0!)
总结一下:
单字指针的内存间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制。
也正是由于双字指针是一个具有位的指针。
(因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。
)
(2)、地址寄存器间接寻址
在先前所说的内存间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。
但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。
从寄存器到得出真正的地址数值单元,西门子提供了两种途径:
a、区域内寄存器间接寻址
b、区域间寄存器间接寻址
地址寄存器间接寻址的一般格式是:
〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5]或M[AR1,P#0.0]。