三菱st语言for_三菱ST学习之FOR循环(从小到大排序)

一、从小到大排序

通过ST语言,将一组乱序的数据,按照从小到大的方式排列。

1.建立全局标签

a842058cda50e0140aac6daea2519e96.png

2.编写程序

fb2a86ad094fd1fcdbd28d4608f6e7fa.png

3.程序监控

先进行数组数据赋值,这里我们只排列6个数据,若想排列更多,更改一下数组数据数量多少即可;比如要排20个数据,只需建立一个0~19的数组,然后再将“Data_Bulk”的值更改为20。

ef8dc724a58edaeb50d12dc757afd603.png

执行后的结果显示

c21552f4c6106c799f5d220592bc1254.png

程序原理分析:

(地址[0]=56,地址[1]=22,地址[2]=31,地址[3]=8,地址[4]=22,地址[5]=40).

执行第一次外循环(0~5)

执行第一次内循环(0)

将地址[0]=56 和 地址[1]=22 进行比较,比较56>22,比较成立,则程序执行。先将地址[0]的值56存放到“数据暂储”单元;然后将地址[1]的值22赋值给地址[0];最后将“数据暂储”单元的值赋值到地址[1]中。即地址[0]=22,地址[1]=56。

执行第二次内循环(1)

将地址[1]=56 和 地址[2]=31 进行比较,比较56>31,比较成立,则程序执行。先将地址[1]的值56存放到“数据暂储”单元;然后将地址[2]的值31赋值给地址[1];最后将“数据暂储”单元的值赋值到地址[2]中。即地址[1]=31,地址[2]=56。

执行第三次内循环(2)

将地址[2]=56 和 地址[3]=8 进行比较,比较56>8,比较成立,则程序执行。先将地址[2]的值56存放到“数据暂储”单元;然后将地址[3]的值8赋值给地址[2];最后将“数据暂储”单元的值赋值到地址[3]中。即地址[2]=8,地址[3]=56。

执行第四次内循环(3)

将地址[3]=56 和 地址[4]=22 进行比较,比较56>22,比较成立,则程序执行。先将地址[3]的值56存放到“数据暂储”单元;然后将地址[4]的值22赋值给地址[3];最后将“数据暂储”单元的值赋值到地址[4]中。即地址[3]=22,地址[4]=56。

执行第次内循环(4)

将地址[4]=56 和 地址[5]=40 进行比较,比较55>40,比较成立,则程序执行。先将地址[4]的值56存放到“数据暂储”单元;然后将地址[5]的值40赋值给地址[4];最后将“数据暂储”单元的值赋值到地址[5]中。即地址[4]=40,地址[5]=56。

第一次外循环结束,内循环也结束了。最终排列出来的结果如下:

22、31、8、22、40、56;此时最大值已经排列在地址的最高位了。

执行第二次外循环(1~5)

执行第一次内循环(0)

将地址[0]=22 和 地址[1]=31 进行比较,比较22>31,比较不成立,则程序不执行。

执行第二次内循环(1)

将地址[1]=31 和 地址[2]=8 进行比较,比较31>8,比较成立,则程序执行。先将地址[1]的值31存放到“数据暂储”单元;然后将地址[2]的值8赋值给地址[1];最后将“数据暂储”单元的值赋值到地址[2]中。即地址[1]=8,地址[2]=31。

执行第三次内循环(2)

将地址[2]=31 和 地址[3]=22 进行比较,比较31>22,比较成立,则程序执行。先将地址[2]的值31存放到“数据暂储”单元;然后将地址[3]的值22赋值给地址[2];最后将“数据暂储”单元的值赋值到地址[3]中。即地址[2]=22,地址[3]=31。

执行第四次内循环(3)

将地址[3]=31 和 地址[4]=40 进行比较,比较31>40,比较不成立,则程序不执行。

执行第次内循环(4)

将地址[4]=40 和 地址[5]=56 进行比较,比较40>56,比较不成立,则程序不执行。

第二次外循环结束,内循环也结束了。最终排列出来的结果如下:

22、8、22、31、40、56;此时第二大值也已经排列好了。

执行第三次外循环(2~5)

执行第一次内循环(0)

将地址[0]=22 和 地址[1]=8 进行比较,比较22>8,比较成立,则程序执行。先将地址[0]的值22存放到“数据暂储”单元;然后将地址[1]的值8赋值给地址[0];最后将“数据暂储”单元的值赋值到地址[1]中。即地址[0]=8,地址[1]=22。

执行第二次内循环(1)

将地址[1]=22 和 地址[2]=22 进行比较,比较22>22,比较不成立,则程序不执行。

执行第三次内循环(2)

将地址[2]=22 和 地址[3]=31 进行比较,比较22>31,比较不成立,则程序不执行。

执行第四次内循环(3)

将地址[3]=31 和 地址[4]=40 进行比较,比较31>40,比较不成立,则程序不执行。

执行第次内循环(4)

将地址[4]=40 和 地址[5]=56 进行比较,比较40>56,比较不成立,则程序不执行。

第三次外循环结束,内循环也结束了。最终排列出来的结果如下:

8、22、22、31、40、56;此时第三大值也已经排列好了。通过观察我们发现数值已经完全排列好了,虽然我们的程序已经排列好,但我们的程序并没有运行结束,会继续运行下去,直至循环的结束,跳出循环为止。

此时细心的小伙伴可能已经发现出该程序有点小问题;即循环次数有点浪费,循环次数的多少,对CPU的运算还是有一定影响的,那我们要如何去解决这个问题呢?下一篇我们会对该程序进行优化,然后讲解。

最近天气降温,各位小伙伴儿要注意防寒保暖!另外祝各位小伙伴儿工作顺利,天天开心!

85d430438a8eb8e02d050e07a1d1aa00.png

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三菱ST语言编程,定时器是一种用于控制特定时间间隔的功能块。定时器可以用来实现一些需要在固定时间间隔内执行的任务,例如周期性的数据采集、定时报警等。 在ST语言,我们可以通过声明定时器变量来定义一个定时器,并设置定时器的时间周期。常用的定时器指令包括TON(定时器ON延时),TOF(定时器OFF延时)和TP(定时器脉冲延时)。 TON指令用于设定一个定时器,当定时器的累计时间达到设定的时间周期时,输出一个ON信号。TOF指令则在定时器完成计时后,输出一个OFF信号。TP指令提供了定时器的脉冲输出功能,当定时器的总时间达到设定的时间周期时,输出一个脉冲信号。 除了时间周期设置外,我们还可以通过使用定时器的运行指令,如EN、DN和RES来启动、停止和复位定时器。EN指令用于使定时器开始计时,DN指令用于停止定时器的计时,RES指令用于复位定时器的累计时间。 值得注意的是,定时器的时间周期单位为秒,可以根据具体需求进行设置。另外,三菱ST语言编程还可以通过使用定时器的输入指令,如ETRD、EH、EL等,来监测外部信号的状态并触发定时器的计时行为。 总之,三菱ST语言编程的定时器功能可以帮助我们实现一些需要按照设定的时间间隔执行的任务,提高自动化控制系统的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值