直播课堂
HOME
直播课堂
正文内容
plc寻址编程实例 3个案例就能学会S7-1200的间接寻址功能
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

3个案例就能学会S7-1200的间接寻址功能

给大家介绍下西门子S7-1200系列PLC的间接寻址的功能。

S7-1200系列的PLC间接寻址功能不同于S7-200系列PLC的间接寻址功能,S7-1200系列PLC的间接寻址功能主要是对DB块中所建立的数组进行寻址,根据对数组下标值的访问和修改来实现对数组中元素值的读取或写入。

在S7-1200PLC中,若需要根据数组下标值来对数组中元素的访问有两种方式可以实现,一是通过大家熟悉的梯形图来编写程序实现,二是可以通过SCL的编程方式来编写这样的程序实现。

一、举例说明梯形图和SCL如何实现程序编写

这里通过一个简单的例子为例,分别通过这两种方式如何实现通过索引数组的下标值来实现对数组中元素的访问。

例子说明:

假设需要从一组数据中找出一个最大值,并记录这个最大值是这组数据中的第几个数据。

先以大家相对来讲比较熟悉的梯形图的方式来实现此功能。这里我们需要用到通过读取域或写入域的指令,该指令根据索引的下标值来读取数值中相对应元素的值或写入数到数组中相对应的元素里。此例子中只需要用到读指令,指令位于移动操作指令中的“原有”文件加中。

读取数组中元素值的指令格式如下:

举例:

表示把数据中的data这个数组中的data[5]这个元素的值读取出来放入到MW100这个变量中。

写入数组中元素值的指令格式如下:

举例:

表示把数据20写入到数据块1中的变量名为data的数组中的data[3]元素的存储器中。

在本例中,我们只需要用到第一个指令,接下来设计一个如例题中所要求的梯形图程序。

程序编写思路:

本例题要去找出最大值,并把最大值所处的位置记录下来,编程思路:假设变量MAX_DATA作为最大值的存储器,然后根据下标值(INDEX)的多少去读取相应数值中对用的元素的值放于TEMP_DATA变量中,然后与MAX_DATA做比较,若MAX_DATA的值要小,则进行交换,同时记录INDEX值。然后INDEX加1,可以指向数组中的下一个元素

注:流程图不太标准,但希望对大家理解这个编程思路有所帮助,接下来主要对程序的编写进行介绍。

二、用梯形图编写一个取最大值的程序

前面介绍了读取和写入数组中元素值的指令Field Read和Field Write两条指令,同时给大家简单的分析了程序的设计思路。接下来就使用Field Read来实现本功能,在程序的设计过程中可能还需要用到循环跳转指令。

例子说明:

假设需要从一组数据中找出一个最大值,并记录这个最大值是这组数据中的第几个数据。

第一步:

添加一个全局DB块,并在DB块中建立一个变量名为data_1#,数据类型为数组的变量,用于存储需要找出最大的数据,同时建立一些相应的变量,如下图所示。

第二步:

初始化相应的存储器并把存储最大值的存储器的值设置为最小值。程序如下所示:

第三步:

编写判断数据的挨个比较是否完成,当执行的次数与设定的次数相等时,则表示完成,可以跳出最大值查找的程序,让程序跳转到最后执行。程序如下所示:

第四步:

编写读取数组中元素的值,然后与存储最大值的存储器中的值做比较,用于判断数据存储器存储的值是否是最大值,若不是最大值进行数据交换,同时记录位置,然后INDEX的值加1,同时记录执行次数并与设定次数做比较,如未达到设定次数,则跳转换前面继续通过Field Read指令读取数据出来继续做比较。

三、使用SCL如何实现程序编写

在前面介绍了使用梯形图的方式来编写一个取最大值的程序,但在S7-1200PLC中,还支持SCL的编程,使用SCL的编程对一些复杂的数据处理会带来很大的方便,下面还是以前面的例子为例说明使用SCL如何编写程序实现。

例子说明:

假设需要从一组数据中找出一个最大值,并记录这个最大值是这组数据中的第几个数据。

使用SCL编程来完成这个例子,这里我们需要用到两个语句

(1) 用于条件判断的语句

IF (条件) THEN (执行语句)

END_IF;

解析:如果条件满足,则执行THEN后面的语句。

举例:IF “DATA_A”<100 HEN

“DATA_A”:= “DATA_A”+1;

END_IF;

如果DATA_A的值小于100,则DATA_A的值等于自身加1.

(2) 用于循环执行的语句

FOR (执行变量):= (起始值) TO (结束值)BY(自增量)DO (后面需要执行的语句);

END_FOR;

解析:从“起始值”开始循环到执行,每循环一次,“执行变量”的值会根据“自增量”的多少进行变化,直到执行到“结束值”时,停止循环执行。

举例:FOR “count”: = 0 TO 4 BY 1 DO

“Data[count]”=10;

END_FOR;

把数值10填入到数值Data中的Data[0]到Data[4]的五个元素中,第一次循环时把10填入到Data[0],第二次循环时把10填入到Data[1],依次下去。

了解这两条语句后,接下来我们可以设计一个程序,这里我们可以把他建立为一个功能块(FB),方便以后使用。

第一步:

添加一个全局DB块,在全局DB块中建立一个变量名为Data的数组,元素个数可以视情况进行设置。如下图所示,元素个数设置为5个。

第二步:

添加一个FB块,同时把编程语言选择为SCL的编程语言。然后在FB的接口去中分别去定义相应的变量,如下图所示:

第三步:

用SCL语言编写功能块程序,如下所示

第四步:

在OB1中调用该功能块,由于使用的是FB,因此在调用时需要分配相应的背景DB,如下图所示:

寄语:程序仅供参考,一个简单的小例子,抛砖引玉,希望大家能够使用SCL可以编写出更复杂的一些功能块出来。

本文由技成曾鑫老师原创,未经授权不得转载

西门子数据格式以及寻址,实例讲解清晰易懂,PLC编程必修课

PLC在应用时需要处理各种各样的数据,因此为了应付这些数据,它的存储单元就需要有多种格式,今天带大家了解一下,西门子1200PLC的数据格式.

西门子S7-1200 CPU中可以按照位、字节、字和双字,对存储单元进行寻址。二进制数的一位只有0或1两种不同的取值,可以用来表示数字量或称开关量的两种不同的状态,如触点的断开和接通线圈的通电和断电等。

八位二进制数组成一个字节,其中的第0位为最低位,第七位为最高位。

两个字节组成一个字,其中的第0位为最低位,第15位为最高位。

两个字组成一个双字,其中的第0位为最低位,第31位为最高位。

西门子S7-1200 CPU,不同的存储单元都是以字节为单位, 如图所示:

对位数据的寻址由字节地址和位地址组成,如I3.2,其中的区域标识符I表示输入映像区,字节地址为3,位地址为2,这种存取方式称为字节位寻址方式。

对字节的寻址,如MB2,其中的区域标识符M表示为存储区,2表示寻址单元的起始字节地址,B表示寻址长度为一个字节,即寻址为存储区中的第二个字节。

对字的寻址,如MW2,其中的区域标识符M表示为存储区,2表示寻址单元的起始字节地址,W表示寻址长度为一个字,即两个字节,寻址为存储区中从第二个字节开始的一个字,即字节2和字节3。请注意,两个字节组成一个字,遵循的是低地址、高字节的原则。以MW2为例,MB2为MW2的高字节,MB3为MW2的低字节。

对双字的寻址,如MD0,其中的区域标识符M表示为存储区,0表示寻址单元的起始字节地址,D表示寻址长度为一个双字,即两个字四个字节,寻址为存储区中从第0个字节开始的一个双字,即字节0、字节1、字节2和字节3。

寻址方式详解

分类:寻址方式从大的方面可以分成直接寻址和间接寻址。

直接寻址就像甲要和乙说话直接叫乙的名字就可以了,甲直接和乙建立联。

间接寻址就像甲要和乙说话,而乙在另外一个城市,甲就写了一封信通过邮递员送给乙,甲通过邮递员间接和乙建立联系,这就叫间接寻址。间接寻址中指针就充当了邮递员的角色。

直接寻址分为:绝对地址寻址,符号寻址

间接寻址分为:存储器间接寻址,寄存器间接寻址。

一、直接寻址

直接寻址是最简单的寻址方法,也是编程中最常用的寻址方式。

①绝对地址寻址

绝对地址寻址就是直接调用要使用的地址

示例:

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位地址指针]

示例:

DB [MW0] //表示对DB块进行寻址,MW0中如果存储的是1,那么该寻址结果为DB1,也就是通过该指令找到了DB1数据块。

T [MW2] //表示对计时器进行寻址,MW2中如果存放的是2,那么该寻址结果为T2,也就是通过该指令找到了计时器T2。

4)16位指针寻址程序示例

例1:

L 2 //将2进行装载

T MW 0 //将2传送到MW0

A I 0.0 //如果I0.0 = True

L S5T#10S //装载时间

SD T [MW0] //T开始计时

例2:

L 1 //将1进行装载

T MW 0 //将1传送到MW0

OPN DB [MW 0] //打开DB1

L 10 //将10进行装载

T DBW 0 //将10传送到DB1.DBW0中

L DBW 0 //将DB1.DBW0进行装载

T MW 2 //将DB1.DBW0传送到MW2中

【A2】32位指针寻址

1)32位指针存储空间

32位指针存储空间是32位,4个字节,通过这4个字节的空间来存放变量的地址。

2) 32位指针寻址范围

32位指针能对I、Q、M、L、数据块的位、字节、字、双字进行寻址,也就是这4个字节的存储空间中能对上述存储类型中的位、字节、字、双字的地址进行存储。

3)32位指针存储格式

4)32位指针寻址表示格式

32位指针寻址表示格式为:地址存储器标示符[32位地址指针]

示例:

I[MD0] //I表示输入存储区,MD0存储地址信息。

Q[MD4] //Q表示输出存储区,MD4存储地址信息。

5)32位指针三种寻址方法

①直接输入10进制数寻址(最复杂最不直观的寻址方式,不推荐使用)。

②将输入的10进制数左移3位进行寻址(比较直观的寻址方式)。

③利用 P#字节.位 格式进行寻址(最直观最方便的寻址方式,推荐使用)。

6)32位指针三种寻址方法举例

★例1 :直接输入10进制数寻址

该程序实现的是两个数相加的功能。

这里我们要重点理解为什么第六句将10传送到了MW4中,而不是MW32中,为什么第八句将15传送到了MW6中,而不是MW48中。

这是因为32,和48存放到指针中是按照32位二进制数进行存放的,下面我们通过将48存放到MD24来进行举例说明

由上图可知将48放进MD24则MW[MD24]指向了MW6

例2:左移3为进行寻址

由于将10进制数对应的2进制数左移三位后,字节存储区的二进制数和该10进制数对应的2进制数又相同了,而位存储区变为0,所以这样的寻址要比例1的寻址方式显得更为直观,便于使用和理解。

例3:以 P#字节.位 格式进行寻址

通过这个实例我们可以发现直接使用P#字节.位的寻址方式是最直观方便的。

B.寄存器间接寻址

寄存器间接寻址使用的是CPU的地址寄存器AR1和AR2

B1)寻址格式

区域标示符[AR1/AR2,P#X]

注:

①AR1/AR2表示地址寄存器AR1或者AR2,地址寄存器中只能存放地址。

②P#X表示偏移量X是偏移具体数值。

B2)寄存器间接寻址示例

相关问答

PLC的寻址方式?

所谓寻址方式,是指CPU根据程序中的变量地址,找到其对应的物理地址的方式。PLC支持多种方式的寻址,给程序开发提供了很大的自由空间。PLC的寻址方式可以分为直...

什么是PLC直接寻址和间接寻址?

直接寻址就是你的数据直接存放在寄存器D中。间接寻址就是你的数据存放在寄存器所表示数据的地址中。举个例子,你的数据是10,寄存器用D0,如果用直接寻址,那么1...

plc位寻址格式?

PLC(可编程逻辑控制器)的位寻址格式通常由寄存器地址、位号和操作符组成。寄存器地址表示要访问的寄存器或内存位置,位号表示在该寄存器或内存位置上要访问的...

plc寻址什么意思?

PLC寻址是指在编写PLC程序时,为了对特定的输入/输出(I/O)信号进行操作,需要准确地指定这些信号的位置,以便PLC能够正确读取和输出这些信号。这个过程被称为P...

s7-200plc的编址方式有哪四种?

S7-200PLC根据存储器的编程元件,把数据存储在不同的存储单元,通过每个单元的地址进行数据访问,访问数据的过程称为“寻址”,根据访问数据存取的方式不同.可...

西门子plc为什么要用间接寻址?

你应该是用的西门子的PLC吧,就直接拿一个应用的例子来解释吧。例如,直接寻址是你直接对一个区间的变量赋值或者搬移,例如MOV500,VB100;间接寻址是你对一个...

西门子PLC如何间接寻址?

在西门子PLC中,间接寻址有两种方式,一种是使用索引寄存器,即在程序中指定一个寄存器作为索引,通过一定的计算得到另一个寄存器的地址。另一种是使用指针,即...

plc中的块传送采用什么字寻址?

CPU以二进制方式存储所有常数。在指令中可用十进制、十六进制、ASCII码或浮点数形式来表示操作数。CPU以二进制方式存储所有常数。在指令中可用十进制、十六...

plc变址寻址的z跟v有区别吗?

三菱plc中VZ是变址寄存器,变址寄存器与通用寄存器相同,可以用于数据的读与写操作。进行32位数据处理时,V0~V7,Z0~Z7需组合使用,可组成8个32位的变址寄存器,...

plc中啥叫按字寻址?

按字寻址的意思是按照字长来寻址。PLC中的字是16个位为一组,字节为8个位为一组。有了这些变化,PLC就可以进行复杂的数据处理了,就不仅仅是处理通和断的物理...

 寂静岭4  杨君宁 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部