熟悉西门子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的大小,如果队列里上一个数据>下一个数据,则将数据互换.
程序如下:
- 初始化:
- 开始For循环:
- 循环内动作:数据互换并相加
- 循环指针+1并判断循环是否结束
- 结果输出:
6.测试程序:
结果是310.0,通过改变数据队列中的数据,
首先测试数据队列的排序,测试通过;
数据相加,测试通过.
有兴趣的朋友可以自己测试下.
