直播课堂
HOME
直播课堂
正文内容
pLC间接编程方法 3个案例就能学会S7-1200的间接寻址功能
发布时间 : 2025-06-20
作者 : 小编
访问数量 : 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可以编写出更复杂的一些功能块出来。

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

让你快速掌握S7-200SMART间接寻址使用技巧

对S7-200SMART PLC来说,寻址可分为直接寻址和间接寻址,直接寻址就是直接对数据进行赋值,那么间接寻址主要是用于什么地方?直接寻址与间接寻址它们之间有何区别?下面就带大家来学习间接寻址使用。

一、直接寻址与间接寻址区别

直接寻址就是直接对数据进行赋值,间接寻址主要用于需要在程序中修改地址的场合,特别是处理数据内容比较多的情况,使用间接寻址编程灵活,节省程序空间。

二、间接寻址说明

(1)间接寻址使用指针访问存储器中的数据,

(2)指针是包含另一个存储单元地址的双字存储单元。只能将V存储单元、L存储

单元或累加器寄存器(AC1、AC2、AC3)用作指针。

(3)要创建指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。指针只能对以下存储区进行间接访问:I、Q、V、M、S、AI、AQ、SM、T(仅限当前值)和C(仅限当前值)﹔不能对单个的位地址、HC、L存储区和累加器进行间接寻址。

三、间接寻址使用方法

使用间接寻址的方式存取数据主要分为以下三个步骤来实现:

(1)建立指针

使用间接寻址之前,应创建一个指针。指针以双字的形式存储要访问的存储器的地址,只能用V存储器、L存储器或者累加器AC作为指针。建立指针时,用双字传送指令MOVD将需要间接寻址的存储器起始地址送到指针中。指针的输入数应该以“&”符号开头来表明存储区的地址,注意不是其内容将移动到指令的输出操作数中。

(2)指针偏移

通过加减乘除运算指令使指针偏移,比如将VD100加上4,则此时VD100指向VB4。

(3)读取指针

操作数前加“*”号,表示指令中的操作数是一个指针。

将指针指向的地址存储的数据调取处出来,通过*VD100提取数据(*是取值符),见下图,就是把VB4的值传送给VB200。

四、取值符说明

“*+指针”使用在字节的位置,访问的是指针指向地址开始的字节变量。

“*+指针”使用在字的位置,访问的是指针指向地址开始的字变量。

“*+指针”使用在双字的位置,访问的是指针指向地址开始的双字变量。

五、间接寻址案例

案例:通过指针的方式,当按下I0.1按钮时:

把VB4的值复制到VB200。

把VW10的值复制到VW300。

把VD20的值复制到VD400。

(1)建立指针

(2)将指针通过ADD_DI(加整数指令)进行加4,从而指针指向VB4,后再将VB4通过MOV_B(字节传送指令)把VB4传送给VB200。

(3)将指针通过ADD_DI(加整数指令)进行加6,从而指针指向VB10,后再将VW10通过MOV_W(字节传送指令)把VW10传送给VW300。

(4)将指针通过ADD_DI(加整数指令)进行加10,从而指针指向VB20,后再将VD20通过MOV_DW(字节传送指令)把VD20传送给VD400。

六、演示效果

通过状态图表分别把VB4、VW10、VD20写入数值

按下I0.1按钮,通过状态图表监控VB200、VW300、VD400的值是否是VB4、VW10、VD20传送过去的值。

七、间接寻址使用注意事项

(1)间接寻址指针表示大小为:32位=双字

(2)建立指针偏移时,是按照偏移数量进行累计,而不是和指针指向的起始地址进行累计。

来源:技成培训网,作者:技成-徐陈爽,未经授权不得转载!

私信回复:西门子案例,领 【777个西门子案例程序】 ~

相关问答

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

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

三菱plc可以间接寻址吗?不用Z的?

楼主要明白,三菱的间接寻址就是通过V,Z这样的索引寄存器来做到的。如果你有使用IECDeveloper进行编程,那么可以通过数组的下标进行间接寻址。Regards楼主要...

如何通过以太网远程控制PLC?

远程控制plc可以通过远程电脑进行连接,这样需要使用现场有人配合,准备电脑甚至于改动线路。通过EMCP物联网云平台就可以实现在任何有外网的情况下实时监控、控...

如何实现PLC手机端监控及远程调试?

随着万物互联,移动互联的兴起,工业里已经有很多无线互联的产品了。PLC与电脑无线互联,PLC与手机无线互联,国外的,国产的都已经有了很广的应用。我们来看...

电脑怎么通过三菱触摸屏间接读取三菱plc程序?

要通过三菱触摸屏间接读取三菱PLC程序,需要遵循以下步骤:1.首先,将三菱PLC和三菱触摸屏连接,并确保连接正常。2.在三菱触摸屏上创建适当的画面,包括用于...

如何将手机与小型plc连接在一起?

用昆仑通态的方法是这样的:首先上一套网络版组态软件跟PLC建立好通讯(此时工控机上运行的组态软件就相当于服务器),然后用手机登陆服务器的域名就可以间接操...

PIC的标准编程语言分别是?

一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作...指令格...

电机怎么实现PLC和DCS的硬线连接控制方式?

有两种硬线连接方式:1)间接方式,DCS的DI/DO硬线直接接入PLC,通过PLC实现对电动机的启停控制。2)直接控制,电动机的已起、已停等反馈信号直接从就...有两种...

plc如何控制扫描周期?

PLC(可编程逻辑控制器)通过控制扫描周期来运行程序。在PLC中,扫描周期是指PLC循环地执行各个程序和任务所花费的时间。以下是一般情况下控制PLC扫描周期的方法...

西门子触摸屏能直接看plc程序吗?

西门子触摸屏本身不能直接查看PLC程序,因为触摸屏主要用于人机界面的操作与交互。PLC程序是一种特定的编程语言,通常需要使用专门的编程软件,如STEP7,来编写...

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

QQ

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

热线

188-0000-0000
专属服务热线

微信

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