SIEMENS_PLC间接寻址及地址寄存器指令
- 格式:ppt
- 大小:332.50 KB
- 文档页数:23
西门子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地址中。
详解西门子间接寻址【地址的概念】完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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地址的概念完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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地址与寄存器modbus协议地址寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是⽂本显⽰器。
PLC地址⼀般采⽤10进制描述,共有5位,其中第⼀位代码寄存器类型。
第⼀位数字和寄存器类型的对应关系如表1所⽰。
PLC地址例如40001、30002等。
寄存器modbus协议地址指通信时使⽤的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作⽤,所以只需说明后4位数,⽽且需转换为4位⼗六进制地址。
例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址⼀般使⽤16进制描述。
再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。
在实际编程中,由于前缀的区分作⽤,所以只需说明后4位数,⽽且需转换为4位⼗六进制地址。
⽀持 Modbus 协议的设备或软件,使⽤时⽤户直接设置或看到的应 当是 Modbus 数据地址。
Modbus 地址所访问的数据,是通过各种 “功能”读写⽽来。
功能码是 Modbus 地址的底层。
如果 Modbus 通 信的⼀⽅提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。
使⽤ modbus 地址时应注意下述问题:1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使⽤的 modbus 地址,它是基于1的地址,即同类元件的⾸地址为1。
西门⼦plc 的 modbus 地址是基于0的地址。
2)美国的 modbus 地址左起第2位⽤来表⽰元件的类型,例如 i0.0的 modbus 地址为010001。
因为数据类型已经包含在功能码中了,西门⼦的 i0.0的 modbus 地址实际上为000000, i2.0的 modbus 地址为 000016(或⼗六进制数16#0010) ,⽽不是010017。
西门子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中。
存储器间接寻址简称间接寻址。
该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。
该存储器一般称为地址指针,在指令中需写在方括号“[]”内。
举个例子比较容易理解。
比如MOV DM0010 DM0020,这句就是直接寻址,意思是把DM0010的数据放入DM0020中。
再比如MOV @DM0010 DM0020,这句就是间接寻址,意思是把DM0010中所指的数据放入DM0020中,如果这时DM0010中的数据为&50(&代表的是十进制数),那么这句话的含义就是把DM0050的数据放入DM0020,这时DM0010就是起的指针作用,指向的是DM0050中的数据。
以上举例是以OMRON的PLC程序为例,其他PLC可能程序写法不同,但是理解是一样的。
一、直接寻址方式指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
如MOV BX, [1234H]二、寄存器间接寻址方式操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。
在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。
如MOV BX,[DI]1. MOV AX, ES:[1000H]源操作数的寻址方式是?直接寻址2. MOV AX, BAH[DI]源操作数的寻址方式是?寄存器相对寻址3. MOV AX, COUNT[BX]源操作数的寻址方式是?寄存器相对寻址4. MOV AX, COUNT[AX]源操作数的寻址方式是?MOV AX, COUNT[BX]寄存器相对寻址,MOV AX, COUNT[AX]是错的5. MOV [AX], COUNT[BX][DI]源操作数的寻址方式是?相对基址变址寻址6. MOV [BX], COUNT[BX][DI]源操作数的寻址方式是?相对基址变址寻址7. MOV AX, COUNT[BX][BP]源操作数的寻址方式是?错的8. MOV AX, COUNT[BX][SI]源操作数的寻址方式是?相对基址变址寻址。
1.直接地址:例如I0.0,Q1.7,PIW256,PQW512,MD20,T15,C16,DB1.DBB10,L10.0等2.符号寻址:例如qq,ww.aa等二者的详细描述参见下文:1.1间接寻址1.存储器间接寻址:16位指针,例如OPN DB[MW2]32位指针,例如A I[MD0]2.寄存器间接寻址:32位指针,例如A I[AR1,P#0.0],A [AR1,P#0.0]1.2S7-300/400寻址方式图解2如何使用指针指针用来指向一个地址。
使用这种寻址方式的优点在于可以在程序运行过程中实现变址。
指针用于存储器间接寻址程序中用于存储器间接寻址的语句包含一个指令、一个地址标识符、以及一个偏移量(偏移量必须在方括号内给出)。
下面给出一个双字格式的指针的例子:L P#8.7 把指针值装载到累加器1T I[MD2] 把指针值传送到MD2A I[MD2] 查询I8.7的信号状态= Q[MD2] 给输出位Q8.7赋值存储区域内部寻址及交叉寻址程序中采用这些寻址方式的语句包含一个指令以及下列内容:地址标识符、地址寄存器标识符、偏移量。
地址寄存器(AR1、AR2)及偏移量必须写在方括号内。
存储区域内部寻址例程指针不包含指示存储区域的信息:L P#8.7 把指针值装载到累加器1LAR1 把指针从累加器1装载到AR1A I[AR1,P#0.0] 查询I8.7的信号状态= Q[AR1,P#1.1] 给输出位Q10.0赋值偏移量0.0不起作用。
输出Q10.0 等于8.7 (AR1) 加偏移量1.1。
结果是10.0 ,而不是9.8,参见指针格式。
存储区域交叉寻址例程在存储区域交叉寻址中,指针中包含指示存储区域的信息(例子中为 I 和 Q)。
L P#I8.7 把指针值及存储区域标识装载到累加器1LAR1 把存储区域I 和地址8.7装载到AR1L P#Q8.7 把指针值和地址标识符装载到累加器1LAR2 把存储区域Q和地址8.7装载到AR2A [AR1,P#0.0] 查询输入位I8.7的信号状态= [AR2,P#1.1] 给输出位Q10.0赋值偏移量0.0不起作用。