PLC指针类型与间接寻址如何使用

发布时间:2024-03-05  

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


下面看看西门子POINTER类型的结构:


参数类型POINTER存储下列信息:

· DB编号(或0,如果数据没有存储在DB中)

· CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)

 

十六进制代码 存储区 描述
b#16#81 I 输入区域
b#16#82 Q 输出区域
b#16#83 M 位存储区域
b#16#84 DB 数据块
b#16#85 DI 背景数据块
b#16#86 L 本地的数据(L堆栈)
b#16#87 V 先前的本地数据

 

数据的地址(格式为字节.位)

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等形式的地址标识符。

要寻址定时器、计数器或块,可使用T、C、DB、DI、FB、FC形式的区域标识符。

2. 括在方括号"[ ]"内的字或双字指针的地址

字指针 - 含有定时器(T)、计数器(C)、数据块(DB、DI)或逻辑块(FC、FB)的标识号的字。字指针是十进制整数。

双字指针 - 指含有位、字节、字或双字的确切位置的双字。双字指针的格式为:P#字节.位。指针必须存储在下列区域之一,才能进行存储器间接寻址:

M - 位存储器

L  - 本地数据

D - 数据块(DB或DI)

STAT  静态数据(不是用于具有多重实例能力的块的静态数据)

注意如果要寻址使用存储器间接寻址的字节、字或双字,请确保指针的位号为双字格式0。

字指针实例:

L 5 //将指针值载入ACCU 1。T MW2 //将指针传送到MW2中。

L T[MW2] //将5号定时器的当前时间值载入ACCU 1。

L C[MW2] //将5号计数器的当前计数值载入ACCU 1。

OPN DB[MW2] //将数据块DB5作为共享数据块打开。

OPN DI[MW2] //将数据块DB5作为背景数据块打开。

双字指针实例:

L P#8.7 //将指针值载入ACCU 1。T MD2 //将指针传送到MD2中。A I [MD2] //扫描输入位8.7的状态,并将其= Q [MD2] //信号状态分配给输出位Q 8.7。

区域内寄存器间接寻址:

使用区域内寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符[地址寄存器标识符,地址]。区域内寄存器间接寻址使用以下两部分地址:

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等形式的地址标识符。

2. 方括号"[ ]"中的内容包括地址寄存器引用(AR1或AR2)、逗号分隔符","以及双字指针。

双字指针 - 指包含位、字节、字或双字的部分地址的双字。双字指针的格式为:P#字节.位。

注意请记住您现在使用的是两个格式为"P#字节.位"的指针。一个指针已被精确表示出来。另一个指针通过对地址寄存器AR1或AR2的引用来确定。如果要寻址字节、字或双字,请确保指针的位号为0。使用寄存器间接寻址的语句不更改地址寄存器的内容。

指针实例:

L P#8.7 //将指针值载入ACCU 1。LAR1   //用ACCU 1中的指针装载AR1。A I [AR1, P#0.0] //检查输入位I 8.7并将有符号的状态分配给Q 10.0。= Q [AR1, P#1.1] //确切地址8.7在AR1中。偏移量不对其产生影响。确切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,结果是10.0而不是9.8。

区域内寄存器间接寻址实例:

A    I [AR1,P#4.3]  对其位置是由AR1中的内容加上4个字节,再加上3个位计算得出的输入位,执行逻辑与运算。=    DIX [AR2, P#0.0] 将RLO位状态分配给位于AR2中的实例数据位。L    IB [AR1, P#10.0] 将输入字节载入ACCU 1中。地址由AR1的内容加上十个字节计算得出。T    LD [AR2,P#53.0] 将ACCU 1中的内容传送到本地双字中(该双字的位置由AR2的内容加上53个字节计算得出)。

区域内寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针均为不含存储区信息(如[AR1,P#4.3]中AR1=P#8.7,两个指针都不含有存储区信息),否则将会与方括号前的地址标示符表示的存储区冲突。

跨区域寄存器间接寻址:

使用跨区域寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符[地址寄存器标识符,地址]。

跨区域寄存器间接寻址使用以下两部分地址:

1. 对已寻址的数据对象(地址标识符)大小的规定数据对象大小规定    位(无规定表示是一个位)B   字节W   字D   双字

2. 方括号"[ ]"中的内容包括地址寄存器引用(AR1或AR2)、逗号分隔符","以及双字指针。双字指针 - 指包含位、字节、字或双字的部分地址的双字。指针具有以下区域内格式:P#字节.位。

注意事先必须已将跨区域双字指针载入到由寄存器间接地址引用的地址寄存器中。跨区域双字指针 - 包含位的部分地址(对于位逻辑指令)或字节、字或双字的部分地址(对于装载和传送指令)的双字。地址前面的区域标识符位于用来指定字节和位。跨区域双字指针格式为:P#区域标识符字节.位。

对于由位逻辑指令寻址的位,可以分配跨区域指针区域标识符I、Q、M、DIX或DBX。

对于由装载或传送指令寻址的字节、字和双字,可以分配跨区域指针区域标识符I、Q、M、DIX、DBX或P。    注意要在指针中指定外设输入或PI区域,请以P#Px.y形式输入指针。区域被指定为P。在跨区域指针中不能使用外设输出PQ区域。请记住您正使用两个指针:

作为偏移量,直接在地址中表示的区域内双字指针,例如P#4.0。

存储在地址寄存器(AR1或AR2)中的跨区域双字指针,例如P#Q4.0。

如果要访问通过直接寻址方式进行寻址的字节、字或双字,请确保这两个指针的位号均为0。使用寄存器间接寻址的语句不更改地址寄存器的内容。

跨区域寄存器间接寻址的第一个实例:

L P# I8.7 //将指针值和区域标识符载入ACCU 1。LAR1   //将存储区I和地址8.7存入AR1。L P# Q8.7 //将指针偏移量和区域标识符载入ACCU 1。LAR2  //将存储区Q和地址8.7存入AR2。A [AR1, P#0.0] //检查输入位I 8.7并将其信号状态分配给输出位Q 10.0。= [AR2, P#1.1] //偏移量0.0没有任何作用。输出位10.0由8.7 (AR2)加上1.1 (偏移量)得出,结果是10.0而不是9.8。跨区域寄存器间接寻址的第二个实例:

A I 0.0 JC M002 L P#M10.0 //将指针值和区域标识符载入ACCU 1。LAR1  //将存储区M和地址10存入ACCU 1。JU M001 M002: L P#Q0.3 //将指针值和区域标识符载入ACCU 1。LAR1  //将存储区Q和地址0.3存入ACCU 1。M001:A I 0.4 = [AR1, P#0.1] //I 0.0用于控制哪个指针用于此语句。将I 0.4的信号状态分配给存储器位M 10.1,或者分配给输出Q 0.4。

跨区域寄存器间接寻址实例A  [AR1,P#4.3] 对于其位置是由AR1中的内容加上4个字节,再加上3个位计算得出的位,执行逻辑与运算。位的存储区在AR1的位24、25和26中指出。= [AR2, P#0.0]     将RLO位信号状态分配给位于AR2中的位。位的存储区在AR1的位24、25和26中指出。L B [AR1, P#10.0]  将字节(其位置由AR1的内容加上10个字节计算得出)载入ACCU 1。位的存储区在AR1的位24、25和26中指出。T D [AR2,P#53.0]   将ACCU 1的内容传送到双字(该字的精确位置由AR2的内容加上53个字节计算得出)。位的存储区在AR1的位24、25和26中指出。

跨区域寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的地址寄存器中包含存储区信息(如[AR1,P#4.3]中AR1=P#Q0.3)。

区域内寄存器间接寻址和跨区域寄存器间接寻址的使用相当灵活,可以根据需要选择。由上面的说明可知,区域内寄存器间接寻址是针对存储区固定的间接寻址方式,寻址的存储区是确定的。而跨区域寄存器间接寻址则在指令中不确定存储区,存储区由地址寄存器中存储的指针中的信息确定,因而寻址的存储区是可变的。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    SIMATIC S7-1500 PLC S7-SCL寻址详解;寻址 寻址可分为直接寻址和间接寻址,以下分别介绍。 (1)直接寻址 直接寻址就是操作输的地址直接给出而不需要经过某种变换,图1所示是直接寻址......
    方式分为两种,直接寻址和间接寻址直接寻址又可以分为两种,绝对寻址和符号寻址直接寻址 PLC的数据存储空间,这里总结出直接访问数据存储空间的三个要素,存储区类型,地址索引和长度。 例如......
    --Immediate AddressingMOV A,#20h ;直接寻址--Direct AddressingMOV A,30h ;间接寻址--Indirect AddressingMOV A,@R0......
    西门子博途: 存储器间接寻址的应用;在 STL 中,以下选项可用于间接寻址: 存储器间接寻址 寄存器间接内部区域寻址 寄存器间接跨区域寻址 存储器间接寻址 对于存储器间接寻址,可以......
    ,P#4.3]中AR1=P#Q0.3)。 区域内寄存器间接寻址和跨区域寄存器间接寻址的使用相当灵活,可以根据需要选择。由上面的说明可知,区域内寄存器间接寻址是针对存储区固定的间接寻址方式,寻址......
    标示符在方括号前确定,方括号中的地址寄存器中包含存储区信息(如[AR1,P#4.3]中AR1=P#Q0.3)。 区域内寄存器间接寻址和跨区域寄存器间接寻址的使用相当灵活,可以根据需要选择。由上面的说明可知,区域内寄存器间接寻址是针对存储区固定的间接寻址......
    方法。 在谈间接寻址之前,我们简单的了解一下直接寻址。所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,AQ2.0,就是直接寻址,对于A这个指令来说,Q2.0就是......
    。 1.以累加器为目的操作数的指令 这组指令的功能是把源操作数的内容送人累加器A,源操作数有寄存器寻址直接寻址间接寻址和立即数寻址等方式,例如指令: 2.以Rn为目的操作数的指令 这组......
    方式主要有两种:直接寻址和间接寻址。 1.直接寻址1)编址       要了解存储器的寻址方法,须先掌握其编址方法。S7 -200 SMART PLC的存储单元编址有一定的规律,它将......
    关于三菱寻址方式的介绍;寻址简单的来讲就是指定地址,寻址方式一般分为直接寻址间接寻址直接寻址:直接给出地址,基本逻辑指令都是直接寻址方式,功能指令中,大部分也都是直接寻址。比如下面这段程序就是直接寻址......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>