PLC寻址
PLC执行指令及寻址

1、PLC程序:由指令与操作数组成;
2、操作数分为:立即数和操作数地址;
3、执行指令时对操作数地址的操作方式:1、取数;2、存数;
4、寻址:寻找操作数地址;
5、寻址的意义:通过寻址操作,指令可以对操作数地址进行取数或存数;
6、寻址方式:1、直接寻址;2、间接寻址;
7、操作数地址分为:1、物理地址;2、逻辑地址;逻辑地址和物理地址是一一对应的;以及所对应的存
储空间也是对应的;
8、直接寻址:通过逻辑地址查找操作数
9、间接寻址:通过物理地址查找操作数
间接寻址的使用过程:
(1)、根据逻辑地址提取物理地址,借助于符号&提取逻辑地址对应的物理地址;提取出来的物理地址是8个16进制数字,所以存放物理地址的空间必须是32位空间;
(2)、根据物理地址所表示的存储空间进行存取数据;
【1】、读取物理地址所对应的存储空间里面的数据;借助于*来读取物理地址所对应的存储空间里面的数据;字节方式间接寻址
字方式间接寻址
双字方式间接寻址
(3)、地址偏移,通过修改物理地址来实现地址偏移;
如果是字节寻址方式间接寻址,则可以通过
如果是字寻址方式间接寻址,则可以通过
如果是双字寻址方式间接寻址,则可以通过
【2】、对物理地址所表示的存储空间存放数据;
1、字节寻址:
2、字寻址
3、双字寻址。
西门子PLC 寻址

指针不包含指示存储区域的信息:
L P#8.7 把指针值装载到累加器1
LAR1 把指针从累加器1装载到AR1
A 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,参见指针格式。
下面给出一个双字格式的指针的例子:
L P#8.7 把指针值装载到累加器1
T I[MD2] 把指针值传送到MD2
A I[MD2] 查询I8.7的信号状态
= Q[MD2] 给输出位Q8.7赋值
存储区域内部寻址及交叉寻址
程序中采用这些寻址方式的语句包含一个指令以及下列内容:地址标识符、地址寄存器标识符、偏移量。地址寄存器(AR1、AR2)及偏移量必须写在方括号内。
存储区域交叉寻址例程
在存储区域交叉寻址中,指针中包含指示存储区域的信息(例子中为 I 和 Q)。
L P#I8.7 把指针值及存储区域标识装载到累加器1
LAR1 把存储区域I 和地址8.7装载到AR1
L P#Q8.7 把指针值和地址标识符装载到累加器1
LAR2 把存储区域Q和地址8.7装载到AR2
A [AR1,P#0.0] 查询输入位I8.7的信号状态
= [AR2,P#1.1] 给输出位Q10.0赋值
偏移量0.0不起作用。输出Q10.0 等于8.7 (AR2) 加偏移量1.1。结果是10.0 ,而不是9.8,参见指针格式。
存储器(双字) MD
定时器 定时器 (T) T 该区域提供定时器的存储
计数器 计数器(C) C 该区域提供计数器的存储
数据块 数据块,用"OPN DB"打开 DB 数据块中包含了程序的信息。可以定义为所
plc寻址方式

plc寻址方式数据文件既可以依据上面的文件地址形式直接寻址,也支持间接寻址、变址寻址及符号寻址。
1.间接寻址所谓间接寻址,就是用另一个地址的值来代替某一规律地址中的寻址单元,如文件号、元素号、位号等。
替代地址必需是下列类型的数据文件之一:N、T、C、R、B、I、O或S,任何T、C或R3字元素的地址必需是子元素(即字)的地址。
2.变址寻址所谓变址寻址,就是实际地址为用户选择的元素地址加上一个偏移量。
偏移量放在处理器状态文件的偏移量字(S:24)中,因此处理器是在基地址加上偏移量后形成的地址上开头操作。
变址寻址用变址符“#”直接放在文件类型标识符前面来识别,如#N7:5。
3.符号寻址所谓符号寻址,就是用一个名称代替一个地址,因此地址就可同实际应用联系起来。
其名称用一字母字符开头,最多可包括十个下列字符:A~Z(大、小写)、0~9、()、下划线和@。
4.程序常数在一些指令中,可以将整数或浮点常数直接输入到梯形图中,而不通过数据表。
5.物理寻址物理寻址也就是I/O模块在物理框架中的位置,常以第几框架第几槽中的第几个端子表示。
如第0个框架中的1号槽放了一个32点输入模块,要指出其5号端子,其物理地址就是0框架1号槽5号端子。
6.规律地址规律地址是对应于内存中的地址,常以第几号机架( Rack)第几号I/O 组(Group)的第几位来表示。
其中一个机架由8个I/O组组成。
一个I/O 组对应于一个输入映像表字(16位)和一个输出映像表字(16位),相当于16个输入端子和16个输出端子。
如I:021/12中的I代表输入模块,02代表2号机架,1代表1号I/O组,斜杆后的12代表12号端子。
西门子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-200 PLC寻址指令

✓(2)各元件介绍 ✓输入继电器(I) ✓输出继电器(Q) ✓通用辅助继电器(M) ✓特殊标志继电器(SM) ✓变量存储器(V) ✓局部变量存储器(L) ✓顺序控制继电器(S)
✓定时器(T) ✓计数器(C) ✓模拟量输入映像寄存器(AI)、模拟量
输出映像寄存器(AQ) ✓高速计数器(HC) ✓累加器(AC)
1.直接寻址 (1)编址 要了解存储器的寻址方法,必须先掌握其编址方法。S7-
200系列PLC的存储单元编址有一定的规律,它将存储器按 功能不同划分成若干个区,如I区(输入继电器区)、Q区 (输出继电器区)、M区、SM区、V区、L区等,由于每个 区又有很多存储单元,这些单元需要进行编址。
PLC存储区常采用以下方式编址: 1)I、Q、M、SM、S区按位顺序编址,如I0.0~I15.7、M0.0~M31.7。 2)V、L区按字节顺序编址,如VB0~ VB2047、LB0~ LB63。 3) AI、AQ区按字顺序编址,如AIW0~AIW30、AQW0~ AQW30。 4)T、C、HC、AC区直接按编号大小编址,如T0~ T255、C0~C255、
S7-200数据存储区及元件(内部资源)的 功能
外部输入点
输入端子
• 1. 输入/输出映像寄存器:S7-200 PLC编址范围(I0.0~I15.7) 输入映像寄存器(该区域可以按位操作又称输入继电器) 输入继电器线圈由外部信号驱动,常开触点和常闭触点供用
户编程使用。
输入继电器用来接收外部输入的开关量信号。它 和对应的输入端子相连,同时提供无数的常开和常闭 触点用于编程
双字来存取存储区的数据。
• 4. 顺序控制继电器(S)存储区 S又称状态元件,以实现顺序控制和步进控制。 S7-200 PLC编址范围S0.0~S31.7,可以按位、字节、字或双
plc网口通讯的寄存器寻址

plc网口通讯的寄存器寻址现代工业自动化领域中,PLC(可编程逻辑控制器)扮演着重要的角色。
在PLC的通讯过程中,寄存器的寻址是不可或缺的一环。
本文将从PLC网口通讯的基本原理出发,探讨寄存器寻址的概念、方法和应用。
一、PLC网口通讯基本原理PLC网口通讯是指通过局域网或广域网实现PLC与其他设备之间的数据交换。
这对于不同部门或不同工作站之间的信息共享和协作非常重要。
在PLC网口通讯中,寄存器扮演着数据传输的媒介。
因此,正确的寄存器寻址是确保数据通讯准确、高效的关键。
二、寄存器寻址的概念寄存器是PLC中的一个重要组成部分,它相当于一个内存空间,用于存储数据或控制信号。
寄存器分为输入寄存器、输出寄存器、标志寄存器和数据寄存器等不同类型。
寄存器寻址就是通过指定寄存器的地址来实现对其数据的读写操作。
三、寄存器寻址的方法1. 直接寻址法:直接寻址法是最简单直接的寻址方法,通过指定寄存器的具体地址来读写其中的数据。
例如,PLC的输入寄存器的地址范围是1到65535,我们可以通过指定地址来获取或修改其对应的数据。
2. 相对寻址法:相对寻址法是以某个基准地址为参考点进行寻址的方法。
通过指定一个初始地址和一个偏移值,来计算出最终要操作的寄存器地址。
这种方法在一些需要多次读写相邻寄存器数据的场景中非常实用。
3. 间接寻址法:间接寻址法是通过寄存器中存储的值来确定最终要操作的寄存器地址。
比如,我们可以将一个数据寄存器中存储的地址作为间接地址进行读写操作。
这种方法在需要动态切换寄存器操作对象的情况下非常有用。
四、寄存器寻址的应用寄存器寻址在PLC网口通讯中扮演着极为重要的角色。
通过正确的寄存器寻址,我们可以实现以下功能:1. 数据采集与监测:通过读取输入寄存器中的数据,我们可以获取与外部设备的交互信息,如传感器信号、按钮状态等。
同时,通过修改输出寄存器中的数据,可以实现对外部设备的控制。
2. 远程数据交互: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地址中。
plc寻址,在编什么程序时会用到?怎么更好地理解它?

plc寻址,在编什么程序时会用到?怎么更好地理解它?你这个问题问的不够严谨。
说一点我个人关于寻址的看法吧,PLC中的寻址应该说可以分为直接寻址和间接寻址。
直接寻址就是对最长见的变量存储区中的位,字节,字等变量的直接读取和引用,此时这个地址是一个非常明确准确的地址。
而间接寻址,就像是一个存储空间中装着一个指示牌,这个指示牌是指向CPU知道的一个明确准确的地址的,或者说指示牌是指向一个直接寻址时候的地址的。
说起来是有点绕的,还是看一个图片吧:这个图片是西门子200PLC编程时候,使用到直接寻址和间接寻址的情况,西门子300PLC中间接寻址还存在16位/32位存储器的间接寻址以及64位指针的寻址,更加不好说清楚,所以这里还是以西门子200的来说,说起来比较简单一点!这个图片中把MB0的内容传送到VB0,这MB0和VB0都是PLC 中具体的存储区域,对这些预设的存储区域地址的直接读写,就可以称为直接寻址!而&MB0其实就相当于创建了一个间接寻址用的指针,并且把这个指针装在VD4中,这样VD4中的内容不是MB0中的值,而是MB0在CPU寻址时候的机器码地址,监控的时候是一串16进制的数据,我之前写过一些关于西门子200指针的文章和问答,有兴趣可以去看一下。
VD4中不是装着MB0中的值,而是装着一个指向某个地址的指针,如果想知道指针指向的地址中的值到底是多少,那么就可以用*VD4去把MB0中的值给取出来。
--这两段话就是间接寻址的大概意思了,间接寻址就引入一个指针的概念,存放的是指针指向的地址而非内容!以上简单的说了直接寻址和间接寻址的不同,那么引入间接寻址在什么时候会用到呢?也简单的说一下,间接寻址其实主要是利用了指针,如果程序中想办法将指针的值+1,那么指向的地址也就自动增加了,这样如果和循环指令配合使用,循环多少次就可以将一段连续的地址通过指针的变化,而将对应的地址全部快速的读取出来。
--这应该是使用指针的一个最明显且常用的优点。
西门子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的寻址方式

按位寻址:首先有一个存储器标识符用来区分当前使用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。
1200plc变址寻址的写法

1200plc变址寻址的写法
在PLC编程中,变址寻址是一种非常常见的技术,它允许我们
使用一个变量来指示要访问的内存地址。
这种方法可以极大地简化
程序的编写和维护。
下面我将从不同的角度来讨论1200系列PLC的
变址寻址的写法。
首先,对于Siemens 1200系列PLC,通常使用的是STEP 7或
者TIA Portal软件进行编程。
在这两种软件中,变址寻址的写法可
以通过符号地址和直接地址两种方式来实现。
对于符号地址,我们可以在程序中定义变量,并给定一个名称,然后使用该名称进行地址访问。
比如,我们可以定义一个变量"MyVariable",然后在程序中直接使用该变量名进行操作,如MyVariable+1。
这样,在实际的PLC内存中,MyVariable会被映射
到一个具体的地址,程序中的操作会被转换成对应的地址访问。
对于直接地址,我们可以直接使用内存地址来进行操作。
比如,我们可以使用M100来表示内存地址100,然后进行读写操作。
这种
方式相对来说更加直接,但可读性稍差一些。
另外,对于1200系列PLC,还可以使用标签地址的方式进行变址寻址。
标签地址是一种结合了符号地址和直接地址的方式,它允许我们使用一个标签来表示具体的内存地址,从而方便地进行编程和维护。
总的来说,对于1200系列PLC的变址寻址的写法,可以使用符号地址、直接地址和标签地址这三种方式来实现。
在实际编程中,根据具体的需求和习惯选择合适的方式进行编程,以提高程序的可读性和可维护性。
三菱PLC的寻址方式

1、直接寻址
所谓直接寻址,就是直接给出指令的确切操作数。
基本逻辑指令都是直接寻址方式。
例如:LD X0,就是直接寻址。
又比如:MOV D0 D100,也是直接寻址。
2、立即寻址
立即寻址的特点是其操作数就是一个十进制或十六进制的常数。
例如:MOV K100 D0,其操作数K100为立即寻址。
3、变址寻址
变址寻址就是利用变址寄存器V,Z来进行地址修改的寻址方式。
变址操作数是两个编程元件的组合,变址操作数的操作地址为编程元件的编号,其编址号加上变址寄存器的数值为地址的编程元件。
例如:D2V0,它表示从D2开始向后偏移(V0)个单元的寄存器,若V0=K8,则将编址号2加上变址寄存器数值8,即K2+K8=K10,则变址操作后的地址为D10。
但是它有特殊情况,对于位元件X和Y,是以八进制编址的,则有所不同。
例如:X2V0,若V0=K8,则K2+K8=K10,由于X是以八进制编址的,变址操作后的地址不是X10,而是X12。
同样的,组合位元件KnX和KnY也是如此。
艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
如需进一步了解台达PLC、西门子PLC、施耐德plc、欧姆龙PLC的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城/。
指针

指针S7-300/400 PLC寻址方式一、直接寻址1、绝对地址2、符号地址二、间接寻址1、存储器间接寻址(包括16位指针与32位指针)2、寄存器间接寻址(只有32位指针)存储器间接寻址1、16位指针:用于定时器、计数器、程序块(DB、FC、FB)的寻址,16位指针被看作一个无符号整数(0~65535),它表示定时器(T)、计数器(C)、数据块(DB、DI)或程序块(FB、FC)的号,16位指针的格式如下:寻址格式表示为:区域标识符[ 16位地址指针]例如使一个计数器向上计数表示为:CU C [ MW20 ]上述指令中,’C’为区域标识符,而’MW20’为一个16位指针。
例1//用于定时器L 1 A I0.0T MW0 L S5T#10SA I0.0 →SD T1L S5T#10SSD T[MW0]例2//用于打开DB块L 20T LW20OPN DB[LW20]2、32位指针:用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针可以使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:存储器32指针仅用于内部区域寻址。
寻址格式表示为:地址存储器标识符[ 32位地址指针]例如写入一个M的双字表示为:T MD [ LD0 ]‘MD’为区域标识符及访问宽度,而‘LD0’为一个32位指针。
32位内部区域指针可用常数表示,表示为P# 字节.位。
如常数P# 10.3为指向第10个字节第3位的指针常数。
若把一个32位整型转换为字节指针常数,从上述指针格式可以看出,应要把该数左移3位(或是乘8)即可。
如:L L#100 //Accu0装入32位整形100SLD 3 //左移3位T LD0 //LD0得到P#100.0指针常数例:DB块间接寻址举例OPN DB 1 //打开DB1。
OPN DI 3 //打开DB3,最多可以同时打开两个DB块。
plc寻址方式

举个例子比较容易理解。
比如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]源操作数的寻址方式是?相对基址变址寻址。
plc字节寻址的格式

plc字节寻址的格式
一、直接寻址
直接寻址是最简单的寻址方法,也是编程中最常用的寻址方式。
①绝对地址寻址
绝对地址寻址就是直接调用要使用的地址
示例:
I0.0 Q1.0 MW0
②符号寻址
符号寻址就是通过符号表中的绝对地址的命名进行寻址
二、间接寻址
间接寻址是比较复杂的寻址方式,也是我们这里重点讲解的地方,间接寻址需重点理解指针的概念
指针:理解指针主要需要理解指针的两个特性。
A.存储性:存储性指的是指针也是一段存储空间,它的存储内容是地址。
B.指向性:因为指针存放的内容是地址,那么指针中存的是哪一个地址,我们就说指针指向了这个地址所对应的存储空间,这就是指针的指向性。
A.存储器间接寻址
【A1】16位指针寻址:
1)16位指针存储空间
16位指针存储空间是16位,2个字节,通过这2个字节的空间来存放变量的地址。
2)16位指针寻址范围
16位指针只能对计时器(T),计数器(C),数据块(DB,DI)的号,程序块(FB,FC)的号进行寻址,也就是这2个字节的存储空间中只能存放计时器的编号,计数器的编号,数据块的编号,程序块的编号。
3)16位指针寻址表示格式
16位指针寻址表示格式为:区域标示符[16位地址指针]。
西门子PLC寻址方式

寻址方式
所谓寻址方式是指指令得到操作数的方式,可以直接或间接给出操作数的地址。
STEP-7有4种寻址方式:立即寻址、存储器直接寻址、存储器间接寻址和寄存器间接寻址。
1、立即寻址
立即寻址是对常数或常量的寻址方式,其特点是操作数直接包含其中,或指令操作数是唯一的。
2、存储器直接寻址
存储器直接寻址的特点是直接给出存储器的存储单元地址。
3、存储器间接寻址
存储器间接寻址的特点是用指针进行寻址。
操作数存储在由于指针给出的存储单元中,根据要描述的地址复杂程度,地址指针可以是字或双字的,存储指针的存储器也应是字或双字的。
对于T、C、FB、FC、DB,由于其地址范围为-,可使用字指针;对于I、Q、M等,可能要使用双字指针。
使用双字指针时,必须保证指针中的位编号为“0”。
4、寄存器间接寻址
寄存器间接寻址的特点是通过地址寄存器寻址。
S7中有两个地址寄存器:AR1和AR2,地址寄存器的内容加上偏移量形成地址指针,指向操作数所在的存储单元。
寄存器间接寻址有两种形式:区域内寄存器间接寻址和区域司寄存器间接寻址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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存入ACC1T MD2 //这个值再存入MD2,这是个32位的位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2T MW100 //这个值再存入MW100,这是个16位的位存储区域OPN DBW[MW100] //打开DBW10。
这里的[MW100]就是个单字指针,存放指针的区域是M 区,MW100中的值10,就是指针间接指定的地址,它是个16位的值!--------L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10T 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详解西门子间接寻址<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内容的要求,或者说规定不同。
AR:1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。
聪明的你,肯定可以联想到,这是用于指定存储区域的。
对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:区域标识符26、25、24位P(外部输入输出)000I(输入映像区)001Q(输出映像区)010M(位存储区)011DB(数据块)100DI(背景数据块)101L(暂存数据区,也叫局域数据)111如果我们把这样的AR内容,用HEX表示的话,那么就有:当是对P区域寻址时,AR=800xxxxx当是对I区域寻址时,AR=810xxxxx当是对Q区域寻址时,AR=820xxxxx当是对M区域寻址时,AR=830xxxxx当是对DB区域寻址时,AR=840xxxxx当是对DI区域寻址时,AR=850xxxxx当是对L区域寻址时,AR=870xxxxx经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。
84000000-840FFFFF指明了要寻址的范围是:DB区的0.0——65535.7。
例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。
我们看到,在寄存器寻址指针[AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?【P#指针】P#中的P是Pointer,是个32位的直接指针。
所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。
这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。
例如:● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0 ★L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0● L P#MB100 //错误!必须按照byte.bit结构给定指针。