西门子S71200用梯形图实现For循环

熟悉西门子1200系列PLC的朋友都知道,1200的梯形图不包含FOR循环指令,那么如何实现有如此需要的应用呢?

虽然1200中没有FOR循环的指令,但通过FieldRead(读取域)和FieldWrite(写入域)的指令可以实现类似的功能.按照它的说明:使用“读取域”指令从输入 MEMBER 所指定的域中读取指定元素,并将其内容传送到输出 VALUE 的变量中。使用输入 INDEX 指定待读取的域元素的下标。使用输入 MEMBER 指定待读取域的第一个元素。

根据这种思路,假设我们需要对一个Array的数据队列实现由低到高的排序,并将队列中的数据累加. 新建一个FC来实现它并测试:

接口如下:

其中Index做为循环指针,Index_1做为循环指针-1的中间变量.

#tmp_Value存放"DATA_SPEs".MultiRange.Set[Index]的数据;

#tmp_Value_1存放"DATA_SPEs".MultiRange.Set[Index-1]的数据,

比较#tmp_Value和#tmp_Value_1的大小,如果队列里上一个数据>下一个数据,则将数据互换.

程序如下:

  1. 初始化:


  1. 开始For循环:


  1. 循环内动作:数据互换并相加


  1. 循环指针+1并判断循环是否结束
  1. 结果输出:


6.测试程序:


结果是310.0,通过改变数据队列中的数据,

首先测试数据队列的排序,测试通过;

数据相加,测试通过.

有兴趣的朋友可以自己测试下.

原文链接:,转发请注明来源!