西门子PLC:通过指针轻松实现多个数据排列

在PLC编程时,经常会使用多个数据,在这些数据中找到想要的数据就变得非常困难了。就像我们在茫茫人海中要寻找那个“她”,该去哪寻找?那有没有简单的方法去实现这个复杂的任务呢?那这时候,我们就要考虑使用间接寻址的方式了,也就是我们通常所说的指针。话不多说我来一个示例吧!

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

第一轮:
1) 90 和 21比,90>21,则它们互换位置:21,90,132,-58,34

2) 90 和 132 比,90<132,则不用交换位置:21,90,132,-58,34
3)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,132
2) 90 和 –58 比,90>–58,则它们互换位置:21,-58,90,34,132

3) 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 轮。而且除了第一轮之外,每轮都不用全部比较。因为经过前面轮次的比较,已经比较过的轮次已经找到该轮次中最大的数并浮到右边了,所以右边的数不用比较也知道是大的。

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

t接下来,我们就用程序表达出这种冒泡法的思维,其中五个数据进行四轮排序,需要使用一个FOR循环语句,而每一轮的排序需要进行不同次数的比较,所以也需要使用FOR循环语句。而这两个FOR语句是嵌套关系。

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

子程序(SBR_0)

主程序(MAIN)

当主程序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)的数据进行比较得到依次再循环。

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

来源:技成培训网,作者:技成-郭彪,未经授权不得转载!

(0)

相关推荐

  • PLc中 的位  字节 字的关系

    plc位.字节.字.双字的关系 (1)位:最小的存储单位,非0则1,表达两个状态. (2)字节:每8个位组成一个字节.这样一个字节可以表达2的8次方(256)个状态,大于256个状态怎么表示?那就字. ...

  • 轻松理解西门子PLC间接寻址和指针

    学习PLC,我们必须熟悉PLC各存储器的符号.地址,我们日常所说的西门子PLC地址,都是直接寻址,如I2.2,MB20.VW34等,表面说它是各存储器的地址,实际表示是它的数据,如VW34是50,VW ...

  • 西门子PLC博途PID调节,一招教你轻松搞定

    启程自动化成立于2012年,培训项目主打西门子PLC编程系统集成.工业机器人编程.EPLAN电气设计.视觉等培训与技术服务的机构. 领取8套PLC视频教程点击进入PLC视频教程 只要一个安装博图软件的 ...

  • 西门子PLC编程经典实例

    一.小车往返运动 用S7-200实现小车往返的自动控制 ,控制过程为按下启动按钮 ,小车从左边往右边(右边往左边运动) 当运动到右边(左边)碰到右边(左边)的行程开关后 小车自动做返回运动,当碰到另一 ...

  • 西门子PLC编程接线图详解及梯形图程序实例

    一.电动机顺序启动.顺序停止控制(I/O分配表.PLC接线图.梯形图程序) 二.电动机的顺序启动.同时停止(I/O分配表.PLC接线图.梯形图程序) 三.电动机的顺序启动.逆序停止(I/O分配表.PL ...

  • 西门子PLC第三大坑,最近剖析了西门子两...

    西门子PLC第三大坑,最近剖析了西门子两大坑,引起了许多网友的反响,然而这些坑仍然在继续存在在300/400 和 S71200/1500中. 对于那些没有经过九九八十一难的读者来说,还是需要继续前赴后 ...

  • 西门子PLC编程应用实例:简易机械手的PLC控制

    蓝字   '电气达人"  今天,小编给大家介绍一个西门子PLC入门级应用实例,简易机械手的控制. 下面进入正题: 如上图所示,M1为控制机械手左右移动的电动机,M2为控制机械手上下升降的电动 ...

  • 西门子PLC与变频器的模拟量干扰处理实例

    技成PLC课堂 从0到1,带你学习PLC技能! 79篇原创内容 公众号 01 实例一 现象说明: 西门子PLC中AO点发出一路4-20mA电流控制信号,输出至西门子变频器,无法控制变频器启动. 故障查 ...

  • 西门子PLC系列1215C与触摸屏创建配方设置实例

    关于启程 启程自动化成立于2012年,培训项目主打西门子PLC编程系统集成.工业机器人编程.EPLAN电气设计.视觉等培训与技术服务的机构.推荐高薪就业,越努力越辛运 针对同一设备平台生产不同产品型号 ...

  • 西门子PLC编程技巧,经典实例讲解!

    技成PLC课堂 从0到1,带你学习PLC技能! 79篇原创内容 公众号 今天跟大家一起探讨一下具体应用程序的编写方法,我们以运料小车控制系统的编程方法为例进行讲解. 运料车主要用于搬运加工工件,在工矿 ...