湖南西控自动化设备有限公司
主营产品: 工程型传动 通用变频器与通用伺服 数控系统 伺服电机 FA工厂自动化 PA过程自动化 Simoreg DC Master、Sinamics DC Master、Sinamics G130/G150、S120 装机装柜型/柜机、S150柜机等系列产品 保外的现场服务和室内维修,不包含水冷装置 Sinamics V20、部分G120C 和G120、G120X、G120XA,V90和配套的1FL6电机等系列产品保内及保外的 室内维修、现场服务,以及保内更换服务。保内标准服务类型由翩唉啊搏碍臂哎阿哎唉熬癌 唉啊哀挨安挨艾挨包爸焙 蚌安岔挨哀靶柏材挨宾哀挨捌安熬袄唉 伴义 828D数控系统保内和保外的现场服务 进口1FK2、1FK7、1FT2、1FT7、1PH81、1PH82等系列产品的保内及保外的室内维修、现场服务,以及保内更换服务 西门子 PLC 、HMI、SCADA 、 IPC、SIMOTION 等产品及网络相关产品的保外现场服务(具体服务产品、类型,以西门子派遣为准)。PLC : S7-200、S7-200 Smart、S7-300、S7-400、S7-1200和S7-1500等系列HMI : TP系列、OP系列、MP系列,精简面板、精智面板和移动面板;SCADA : SIMATIC WinCC及其选件,Portal WinCC Advanced / Professional及其选件;IPC: SIMATIC Flat Panel 系列、SIMATIC Panel PC 系列、SIMATIC BOX PC系列利I SIMATIC Rack PC 系列;SIMOTION: SIMOTION 系列相关产品 西门子过程自动化产品的保外现场服务具体服务产品、类型,以西门子派遣为准)。包括: S7-400,S7-400H,S7-410,故障安全型产品,ET200PA,ET 200SP,ET200ISP,SITOP电源产品,Scalance交换机,PCS 7软件
九江市西门子中国(授权)一级代理商-西门子选型-西门子技术支持-西门子维修服务

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

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

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

例子说明:

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

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

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

图片

图片

举例:

图片

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

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

图片

图片

举例:

图片

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

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


程序编写思路:

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

图片

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

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

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

例子说明:

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

第一步:

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

图片

第二步:

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

图片

第三步:

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

图片


第四步:

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

图片


图片


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

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

例子说明:

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

使用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),方便以后使用。



展开全文
相关产品
拨打电话 微信咨询 发送询价