前面给大家介绍了西门子S7-200系列PLC的间接寻址功能,接下来给大家介绍下西门子S7-1200系列PLC的间接寻址的功能,S7-1200系列的PLC间接寻址功能不同于S7-200系列PLC的间接寻址功能,S7-1200系列PLC的间接寻址功能主要是对DB块中所建立的数组进行寻址,根据对数组下标值的访问和修改来实现对数组中元素值的读取或写入。
在S7-1200PLC中,若需要根据数组下标值来对数组中元素的访问有两种方式可以实现,一是通过大家熟悉的梯形图来编写程序实现,二是可以通过SCL的编程方式来编写这样的程序实现。这里通过一个简单的例子为例,分别通过这两种方式如何实现通过索引数组的下标值来实现对数组中元素的访问。
例子说明:
假设需要从一组数据中找出一个最大值,并记录这个最大值是这组数据中的第几个数据。
先以大家相对来讲比较熟悉的梯形图的方式来实现此功能。这里我们需要用到通过读取域或写入域的指令,该指令根据索引的下标值来读取数值中相对应元素的值或写入数到数组中相对应的元素里。此例子中只需要用到读指令,指令位于移动操作指令中的“原有”文件夹中。
读取数组中元素值的指令格式如下:
名称 |
数据类型 |
功能描述 |
INDEX |
DINT |
数组的下标值 |
MEMBER |
取决数组中所建立元素的数据类型 |
数组中的第一个元素 |
VALUE |
取决数组中所建立元素的数据类型 |
存放根据下标值读取出来的数组元素中的值 |
举例:
表示把数据中的data这个数组中的data[5]这个元素的值读取出来放入到MW100这个变量中。
写入数组中元素值的指令格式如下:
名称 |
数据类型 |
功能描述 |
INDEX |
DINT |
数组的下标值 |
VALUE |
取决数组中所建立元素的数据类型 |
把该值写入到通过下表指定的对应的数组元素中 |
MEMBER |
取决数组中所建立元素的数据类型 |
数组中的第一个元素 |
举例:
表示把数据20写入到数据块1中的变量名为data的数组中的data[3]元素的存储器中。
在本例中,我们只需要用到第一个指令,接下来设计一个如例题中所要求的梯形图程序。
程序编写思路
本例题要去找出最大值,并把最大值所处的位置记录下来,编程思路:假设变量MAX_DATA作为最大值的存储器,然后根据下标值(INDEX)的多少去读取相应数值中对用的元素的值放于TEMP_DATA变量中,然后与MAX_DATA做比较,若MAX_DATA的值要小,则进行交换,同时记录INDEX值。然后INDEX加1,可以指向数组中的下一个元素。
注:流程图不太标准,但希望对大家理解这个编程思路有所帮助,接下来主要对程序的编写进行介绍。
(待续….)