运用指针轻松实现多个数据排列

在PLC编程时,经常会运用多个数据,在这些数据中找到想要的数据就变得十分困难了。就像咱们在茫茫人海中要寻找那个“她”,该去哪寻找?那有没有简略的办法去完成这个复杂的使命呢?那这时候,咱们就要考虑运用间接寻址的方式了,也便是咱们一般所说的指针。

t比如对下面这个序列进行从小到大排序:90, 21, 132, -58, 34

第一轮: 1) 90 和 21比,90>21,则它们交流方位:21,90,132,-58,34

  1. 90 和 132 比,90<132,则不必交流方位:21,90,132,-58,343)132 和 –58 比,132>–58,则它们交流方位:21,90,-58,132,34

4)132 和 34 比,132>34,则它们交流方位:21,90,-58,34,132

到此第一轮就比较完了。第一轮的结果是找到了序列中最大的那个数,并浮到了最右边。比较时,每轮中第n 次比较是新序列中第 n 个元素和第 n 1 个元素的比较(假设 n 从 1 开端)。

第二轮:

  1. 21 和 90 比,21<90,则不必交流方位:21,90,-58,34,1322) 90 和 –58 比,90>–58,则它们交流方位:21,-58,90,34,132

  2. 90 和 34 比,90>34,则它们交流方位:21,-58,34,90,132

到此第二轮就比较完了。第二轮的结果是找到了序列中第二大的那个数,并浮到了最右边第二个方位。

第三轮:

  1. 21 和 –58 比,21>–58,则它们交流方位:-58,21,34,90,132

  2. 21 和 34 比,21<34,则不必交流方位:-58,21,34,90,132到此第三轮就比较完了。第三轮的结果是找到了序列中第三大的那个数,并浮到了最右边第三个方位。

第四轮:

  1. –58 和 21 比,–58<21,则不必交流方位。至此,整个序列排序完毕。从小到大的序列便是“–58 21 34 90 132”。从这个比如中还可以总结出,如果有 n 个数据,那么只需求比较 n–1 轮。并且除了第一轮之外,每轮都不必悉数比较。因为通过前面次序的比较,现已比较过的次序现已找到该次序中最大的数并浮到右边了,所以右边的数不必比较也知道是大的。

至此,整个顺序的摆放咱们就做完了,这种排序办法咱们称为冒泡排序法。这种办法的原理是; 从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。以从小到大排序为例,第一轮比较后,所稀有中最大的那个数就会浮到最右边;第二轮比较后,所稀有中第二大的那个数就会浮到倒数第二个方位……就这样一轮一轮地比较,最终完成从小到大排序。

接下来,咱们就用程序表达出这种冒泡法的思想,其间五个数据进行四轮排序,需求运用一个FOR循环句子,而每一轮的排序需求进行不同次数的比较,所以也需求运用FOR循环句子。而这两个FOR句子是嵌套联系。

现在往VW0,VW2,VW4,VW6,VW8这5个地址中存放5个数据90, 21, 132, -58, 34,然后进行从小到大是顺序摆放

子程序(SBR_0)

运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放
运用指针轻松完成多个数据摆放

当主程序M0.0接通,子程序程序解读:

程序段1:

VW20为要循环的次序,5个数据,4轮即可

VW22则为每轮需求比较的次数

程序段2:

运用外循环FOR,循环次数存储在VW24中,循环的次序次数为4(VW20)

程序段3:

创建指针VD100及查找第一个数据

程序段4:

运用内循环FOR,循环次数为4。

程序段5:

指针VD100加2存入VD104,则VD104指向VB2的开端地址。

程序段6:

判别VD104(VW2)的数据与VD100(VW0)的数据,当VW2的数据小与VW0的数据则交流方位。

所以此刻的数据是21,90, 132, -58, 34。

程序段7:

指针VD100加2,指针指向VB2为开端的地址。

程序段9:

总的次数减1,VW22等于3

接下来,程序跳转到程序段4,循环次数为3次,因为前两个数据比较完了,进行后4个数据比较只需求比较3次。

程序段5中的VD100在上一个循环现已指向了VB2开端的地址,在这个循环是加上2则VD104的数据指向VB4开端的地址。程序段6中VD104(VW4)的数据与VD100(VW2)的数据进行比较得到依次再循环。

结束语:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。整个程序的逻辑是把大的数据往后挪,挪完只后即可找到相对较大的数据。