三菱st语言for_三菱ST之FOR循环(找最值、求和、求均值)

  • Post author:
  • Post category:其他


前面两篇我们分析了怎样通过ST语言对一组数据进行排序。今天我们接着分享,如何通过ST语言,求出一组数据的最大值、最小值、和值、均值。
1.建立全局标签声明变量

4a1113f372f3d40ac00584f671ae0900.png

2.程序的编写

c980f1cad00eed866db6714a42e6da20.png

如果数组数据是”FLOAT”型的,那两段转换就可以省去,我这里主要想演示的是转换指令的运用,因为前面没有对转换语句进行专门的讲解,这里就顺带的提一下。
3.程序监控首先还是先对
数组数据进行赋值,如下图所示:

a9aca953820946c2b240001eebc4cb46.png

然后将“Data_Bulk”数据写为6,按下M0执行程序。

8f1256f4fd814427e22634d4c780c2dc.png

接下来我们分别验证一下,程序执行的结果是否正确呢?
验证和值

a00dfe75ab139dc48aed8d8dbfdc2368.png

验证平均值

ff737d0bf3a33da4375c83386b4003c8.png

通过验证,我们发现程序执行的结果是正确的;有兴趣的小伙伴儿,可以将程序拿去自己验证一下,然后将数组的数据数量适当的增加一些。接下来我们开始程序的解析:

17720e0db50b72d4fb9ad871fd46d23d.png

根据控制器的扫描原理(从上往下,从左往右),当我们按下M0触发程序执行的时候,这两段程序从上往下依次执行(一个扫描周期,后面的程序也在这一个扫描周期内执行,只是谁先谁后的问题);我们先将和值清零,平均值清零;若没有这两段程序,当我们第二次触发M0时,会在上一次值的基础上进行累加。比如第一次和值为50,按下按钮再一次执行,和值为100(前提是数据没有改变,若改变,那就是这次的和值+上次的和值,均值同理)。

479f7823aa9ce0d65f9928a255d24bf2.png

上图这几段程序的原理解析:

先将数组地址[0]的数据,
分别赋值给最大值和最小值。这样做是为了方便后面的比较,以
地址[0]为基准,跟后面的地址做比较(需要注意的是IF条件满足,那我们前面赋值的最大值和最小值会根据IF的满足,重新植入新的数据,就不在是地址[0]的数据了)。

如果IF成立,“Array_1[Cycle_1]”的值大于“Maximum_Value”,那就将“Array_1[Cycle_1]”的值送给“Maximum_Value”,然后再用“Maximum_Value”的值和后面的值做比较,比较出来的值就是最大值。
如果循环开始到结束,IF都不成立,那地址0的数据就是最大值。
下面的最小值也同理。

7f4418c14550c8c378b1754d004c0fee.png

第一段程序,是对每个地址的值进行累加求和(Array_1[Cycle_1]的地址是根据循环进行偏移的)。第二段和第三段程序,是转换程序,主要是用于求平均值,平均值一般大多数情况下都是浮点数,所以需要进行转换。第四段是根据和值除以数据个数得出的平均值。今天就分享到这里,祝各位小伙伴儿工作顺利!

41ddafee0fff42d1c8365ac279e3f7d5.png



版权声明:本文为weixin_33872754原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。