PLC中指针及间接寻址的应用

合集下载

plc指针的应用场景

plc指针的应用场景

PLC指针的应用场景1. 应用背景PLC(Programmable Logic Controller,可编程逻辑控制器)是一种专门用于工业自动化控制的计算机控制系统。

PLC控制器通过读取输入信号,经过逻辑运算和控制算法处理,再输出控制信号,实现对工业设备的自动化控制。

在PLC编程中,指针是一种重要的数据类型,用于存储和操作内存地址,具有灵活、高效的特点。

PLC指针的应用可以帮助工程师实现更加复杂和灵活的控制算法,提高自动化控制系统的性能和可靠性。

2. 应用过程PLC指针的应用过程可以分为以下几个步骤:步骤1:定义指针在PLC编程软件中,工程师可以通过声明和定义指针来创建一个指向特定数据类型的指针变量。

在定义指针时,需要指定指针的数据类型和初始值(即指向的内存地址)。

步骤2:赋值和操作指针工程师可以通过赋值操作将一个指针变量指向特定的内存地址。

通过指针的操作,可以读取和修改该内存地址上存储的数据。

指针的操作包括以下几个常用的操作:•读取指针所指向的内存地址上的数据:通过指针变量加上解引用运算符(*)可以读取指针所指向的内存地址上存储的数据。

•修改指针所指向的内存地址上的数据:通过指针变量加上解引用运算符(*)可以修改指针所指向的内存地址上存储的数据。

•移动指针:通过指针的加减运算可以移动指针指向的内存地址,实现对连续内存空间的读写操作。

步骤3:应用控制算法通过使用指针,工程师可以实现更加复杂和灵活的控制算法。

指针可以用于访问和操作不同的数据类型,包括整型、浮点型、结构体等。

通过指针的运算和操作,可以实现对多个变量的批量处理,提高控制算法的效率和可靠性。

步骤4:调试和优化在应用过程中,工程师需要对PLC程序进行调试和优化。

通过使用指针,工程师可以方便地监测和修改内存地址上的数据,帮助排查程序中的错误和问题。

指针的应用还可以提高程序的运行效率和资源利用率,从而优化控制系统的性能。

3. 应用效果PLC指针的应用可以带来以下几个效果:提高控制算法的灵活性和复杂性通过使用指针,工程师可以实现更加复杂和灵活的控制算法。

PLC中指针及间接寻址的应用

PLC中指针及间接寻址的应用

S7-200cpu允许使用指针对下述存储区进行间接寻址:I, Q, V, M, S, T和C。

但不能对独立的位或模拟量进行间接寻址。

指针为双字值,用来存放另一个存储器的地址,只能用V, L或累加器AC1,AC2和AC3作指针。

为了生成指针,必须用双字传送指令(MOVD)将某个位置的地址移入另一个位置或累加器作为指针。

MOVD &VB200,AC1MOVW *AC1,AC0对指令的操作数的指定方式,我将其理解为“寻址”。

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

对指令的操作数的指令方式大致的总结一下,可以概括为如下几个类型: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。

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)及偏移量必须写在方括号内。

plc指针的用法

plc指针的用法

plc指针的用法
1. 嘿,你知道吗?plc 指针就像是一把神奇的钥匙!比如说,在复杂的工业控制过程中,就像是在一个巨大的机器城堡里,指针可以精准地找到我们需要控制的那个部分,多厉害啊!
2. 哇塞,想想 plc 指针的用法,那可真是太有趣啦!就好像是你在一个混乱的仓库里,指针能一下子就带你找到特定的物品,比如准确控制某个电机的运转,这不是很神奇吗?
3. 哎呀,plc 指针的作用可不容小觑啊!它就如同在茫茫大海中为我们指明方向的灯塔。

比如在自动化生产线上,指针可以引导程序准确执行下一步操作,是不是超牛的?
4. plc 指针啊,简直就是一个超级小能手!好比在一场精彩的魔术表演中,它能神奇地实现各种变化。

像在一个大型设备的控制中,用指针轻松切换不同的工作模式,太妙啦!
5. 嘿呀,别小看了 plc 指针的用法哦!这简直就像一个隐藏的高手在幕后默默发挥作用。

比如在复杂的工艺流程中,指针悄悄就完成了关键步骤的控制,很神奇对吧?
6. 哇哦,plc 指针真的是太有意思啦!就好像是游戏里的秘密武器。

比如在一个智能控制系统中,凭借指针能迅速定位并解决问题,这多厉害呀!我觉得 plc 指针的用法真的特别重要,能让工业控制变得高效又精准呢!。

plc编程应用中的寻址方式

plc编程应用中的寻址方式

236 •电子技术与软件工程 Electronic Technology & Software Engineering程序设计• Program Design【关键词】PLC 400 寻址方式 粒料除尘装置本次项目使用的是西门子PLC 400系统,对塑料生产过程中的粒料除尘单元进行实时的控制和监测,由于除尘线较多且每条除尘线装置和设备基本相同,除尘过程控制基本一致。

如果采用传统的梯形图进行编程则程序步骤冗长且需定义的符号较多,调试过程中容易出错且后期维护需花费较多的时间,于是此次我们采用PLC 寻址方式中的地址寄存器寻址方式,对不同除尘线中的相同装置进行实际的操作和状态的监测。

1 系统硬件组成PLC 采用的是西门子412冗余CPU ,进行数据的存储,处理,计算;两个本地ET200M 控制站,分别装有数字量,模拟量模块,对现场仪表信号进行转换及采集。

CPU 和控制站通过PROFIBUS-DP 方式进行冗余通讯。

编程应用的是西门子STEP7 V5.5标准组态软件。

现场设备包括下料仓的模拟量调节阀和变频电机等。

2 PLC的软件编程2.1 PLC的寻址方式在PLC 系统当中分为很多个地址区域,在程序中可以根据对应的地址直接读取存储的PLC 编程应用中的寻址方式文/王一村数据,表1中列出了部分地址。

2.1.1 直接寻址直接寻址包括绝对地址和符号地址两种类型。

在PLC 程序当中我们可以直接使用输入(输出)信号,位存储器,数据块等地址。

在程序中直接调用这些存储区域的绝对地址是可以的,但是容易出错并且不太直观,如果我们给每个地址都命名一个符号(类似于起名字),这样程序看起来易读易懂。

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

例如:I0.1,Q1.1,DB2.DBB0等。

(2)符号寻址:给每一个绝对地址自定义一个符号(助记符)使编程过程明了且容易查找。

在STEP7当中如果准备用符号访问结构,数组,数据块,逻辑块等,则必须给这些绝对地址分配一个自定义的符号名。

欧姆龙PLC间接寻址的灵活应用

欧姆龙PLC间接寻址的灵活应用

欧姆龙PLC间接寻址的灵活应用在PLC控制系统中,需要经常对连续多个数据进行某项操作,比如产生一系统数据或者一系统数据执行连续运算或比较以及按时间来对数据进行存储等。

在小型PLC中无变址寄存器情况下,以间接寻址的方法将大大减少程序开销的容量,以及提高程序的可读性。

现以欧姆龙PLC来实现以上四项操作,其它系列PLC类似。

(因在执行平方根与除法运算的例程稍显复杂,故只有此例增加地址注释,其它程序段较小,故没有增加注释)。

一:对PLC连续D区产生一组连续的数据。

图1:对D1000开始的地址连续存储1-100的数据程序剖析:先初始化要应用的间接寻址寄存器D600,再选择需要产生的连续数据个数,本例使用FOR指令来连续循环执行操作,使用++B从而产生源数据,再使用MOV指令,将产生的源数据送至D600中指定的地址中去,注意*D600前的*号,同时间接寻址地址D600执行++B操作,为下一个循环指明直接地址作准备。

当循环指定次数&100到达后,将自动跳出FOR循环,将执行NEXT之后的程序。

当下次扫描周期到达时,程序将又从初始化间接寻址开始执行。

图2:监视PLC内的D1000开始地址内的数据数据剖析:进入PLC中的D区值进行监视D1000开始地址中,将会发现D1000至D1099分别存储为1-100的数据。

如果需要修改初始值时,可以在初始化时将D601输入相应的值即可,当然如果要产生200个数据,修改FOR后的数据由&100修改为&200即可。

二:对连续通道的数据执行算术运算(寻找执行平方根后为整数的数及寻找被指定数整除的数)。

图3:D5000存储来自于D1000执行的平方根后为整数的数,D4000存储来自于D1000内被3整除的数程序剖析:平方根ROOT指令源数据为32位,然而本次的源数据却是16位数据,同时因ROOT指令对平方根的余数不进行保留,故无法直接得到小数部分,也即无法精准得出执行平方根后是否为整数,故需将底16位置0(间接地将数据乘以#10000),即每次在执行ROOT之前需将底16位使用"MOV #0 *D606"来清零,同时使用MOVD指令来提取出D608中的底8位即就是执行平方根后的小数部分值,当D608为零时表示执行平方根操作后无小数产生,即将源地址中的数据送至新目标地址中去,这样就实现了寻找指定区域内整数平方根的数据。

90%的工程师,对PLC指针类型与间接寻址无从下手

90%的工程师,对PLC指针类型与间接寻址无从下手

90%的工程师,对PLC指针类型与间接寻址无从下手在西门子S7-300和S7-400的编程中经常需要调用一些系统功能或功能块,在输入参数时经常碰到有指针类型的参数,那么你对指针类型了解吗?我第一次接触指针一词是在学习C语言的时候,指针和链表是C语言中的一个重点难点。

在C语言中,指针即存储器地址,在西门子PLC中的指针也是指地址。

下面看看西门子POINTER类型的结构:参数类型POINTER存储下列信息:•DB编号(或0,如果数据没有存储在DB中)•CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)数据的地址(格式为字节.位)STEP 7提供指针格式:p#memory_area byte.bit_address. (如果形式参数被声明为参数类型POINTER,只需要指出存储区域和地址。

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

) 下面的实例说明如何为以M50.0开始的数据输入参数类型POINTER:P#M50.0存储器间接寻址:使用存储器间接寻址的程序语句包含一条指令,后面跟有[地址]标识符,最后是一个(地址必须括在方括号内)。

根据所用的地址标识符,该指令会将存储于指定地址的数据解释为字或双字指针。

完整的数据地址由地址标识符和指针构成,如下例所示。

间接寻址的优点是能在程序执行期间动态修改指令的数据地址。

存储器间接寻址使用以下两部分地址:1. 地址标识符对于由位逻辑运算寻址的位,可分配地址标识符I、Q、M、L、DIX或DBX。

对于由装载指令寻址的字节、字和双字,可使用存储区I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址标识符。

对于由传送指令寻址的字节、字和双字,可使用存储区I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址标识符。

plc寻址,在编什么程序时会用到?怎么更好地理解它?

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,那么指向的地址也就自动增加了,这样如果和循环指令配合使用,循环多少次就可以将一段连续的地址通过指针的变化,而将对应的地址全部快速的读取出来。

--这应该是使用指针的一个最明显且常用的优点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S7-200cpu允许使用指针对下述存储区进行间接寻址:I, Q, V, M, S, T和C。

但不能对独立的位或模拟量进行间接寻址。

指针为双字值,用来存放另一个存储器的地址,只能用V, L或累加器AC1,AC2和AC3作指针。

为了生成指针,必须用双字传送指令(MOVD)将某个位置的地址移入另一个位置或累加器作为指针。

MOVD &VB200,AC1
MOVW *AC1,AC0
对指令的操作数的指定方式,我将其理解为“寻址”。

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

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

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

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

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

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

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

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

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

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

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

且只能是双字(32bit)类型的地址。

③在建立指针时在存储器前加“&”这个符号的表示进行间接访问的区域的首地址,所以除定时器T及计数器C外都必须是以字节的形式出现的。

2:读取指针
在读取指针时,有如下几种不同的情况出现:
①以字节的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVB *VD10, VB30
译为:在VD10建立指针,指针指向以MB0为首地址的地址,读取在指针VD10所指向的首地址开始的一个字节(即以MB0开始的一个字节,很明显就是MB0本身),所以,读取指针时将MB0放到VB30。

②以字的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVW *VD10, MW20
译为:在VD10建立指针,指针指向以MB0为首的地址,读取在指针VD10所指向的首地址开始的一个字(即以MB0开始的一个字,很明显就是MW0),所以,读取指针时将MW0放到MW20。

③以双字的形式读取指针:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD40
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个双字(即以VB0开始的一个双字,很明显就是VD0),所以,读取指针时将VD0放到VD40。

3:修改指针
修改指针是在使用指针寻址中关健的一部分,修改指针是将指针指向的首地址进行适当的偏移,使之指向我们需要访问的地址,这样我们可以比较方便的使用在这一存储区的某一具体地址,使程序的灵活性有所增加。

修改指针的方法大致的可以概括为如下几种:
①使用加法或减法指令,对指针进行指定常数作为偏移量的修改指针。

②使用加“1”或减“1”指令,对指针进行1个单位(字节)的偏移。

下面将以实际情况为例来说明修改批指针的方法:
例1:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD40
+D 4, VD10
网络2:
LD M0.1
MOVD *VD10, VD44
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个双字(即以VB0开始的一个双字,很明显就是VD0),所以,读取指针时将VD0放到VD40。

然后对指针进行修改,对其指定4个单位的偏移量,即指针此时指向的首地址为VB4。

在下一网络中又以双字的形式读取指针。

所以,此时读取指针是将以VB4为首的一个双字传送至VD44(即VD4传送至VD44)。

例2:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVB *VD10, MB0
INCD VD10
网络2:
LD M0.1
MOVB *VD10, MB1
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个字节(即以VB0开始的一个字节,很明显就是VB0),所以,读取指针时将VB0放到MB0。

然后对指针进行修改,对其进行一个单位(字节)的偏移,即指针此时指向的首地址为VB1。

在下一网络中又以字节的形式读取指针。

所以,此时读取指针是将以VB1为首的一个字节传送至MB1(即VB1传送至MB1)。

在程序中,如果希望以连续的形式去间接访问地址(即:读取VB0后希望下一次读取的是VB1、读取VW0后希望下一次读取的是VW2、读取VD0后希望下一次读取的是VD4),修改指针时,需要注意以下问题:
①读取下一个字节:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVB *VD10, VB100
+D 1, VD10
网络2:
LD M0.1
MOVB *VD10, VB100
第一次读指针时,读取的是VB0。

第二次读指针时,读取的是VB1。

②读取下一个字:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVW *VD10, VW100
+D 2, VD10
网络2:
LD M0.1
MOVW *VD10, VW100
第一次读指针时,读取的是VW0。

第二次读指针时,读取的是VW2。

③读取下一个双字:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD100
+D 4, VD10
网络2:
LD M0.1
MOVD *VD10, VD100
第一次读指针时,读取的是VD0。

第二次读指针时,读取的是VD4。

综上所述,在以连续方式读取指针时:
⑴读取下一个字节,修改指针时“加1”。

⑵读取下一个字,修改指针时“加2”。

⑶读取下一个双字,修改指针时“加4”。

相关文档
最新文档