程序实例 | 1200用SCL语言实现十个数排序
发布时间:2024-11-22
在编程过程中经常会遇到需要将几个数按从大到小或从小到大的顺序排序,这时候我们会想到用“冒泡法”,其思路是将相邻的数两两进行比较,如果符合要求则不变,不符合要求则交换,10个数就要比较9次,我们称为一轮,经过一轮比较后,只是相邻大小识别出来了,并没有真正实现排序,我们需要从头开始再比一轮,这样经过9轮比较才真正完成了排序,也就是需要比9*9=81次。这时我们就可以使用循环指令重复执行,程序就变得非常简洁了。1200梯形图没有FOR循环指令,但是我们可以用SCL语言进行编写,这样就使用FOR循环指令了。编程步骤如下:首先创建两个包含10个INT元素的数组,数组1为排序前,数组2为排序后。
“下标”为数组变量,当下标为0时,数组2[下标]表示数组2[0],为1时表示数组2[1]以此类推。循环记录1和循环记录2为FOR循环要使用的变量,记录当前循环到第几次。交换中转用于交换时临时存储中转数据。程序编写如下:黑色字体为程序部分,//后红色字体部分为注释。#数组2 := #数组1;// 将数组1赋值给数组2,用数组2去进行排序,这样可以保留数组1中数据的完整性。FOR #循环记录1 := 0 TO 8 DO//与最下面END_FOR配对,表示从第0次开始到第8次结束,总共循环9次。 FOR #循环记录2 := 0 TO 8 DO//与倒数第二个END_FOR配对,表示从第0次开始到第8次结束,总共循环9次。 IF #数组2[#下标] < #数组2[#下标 + 1] THEN//如果前一个数小于后一个则交换。 #交换中转 := #数组2[#下标];//先将数组2[下标]赋值给交换中转变量。 #数组2[#下标]:=#数组2[#下标 + 1];//再将数组2[下标+1]赋值给数组2[#下标] #数组2[#下标 + 1] := #交换中转; //再将交换中转赋值给数组2[#下标+1],这样就实现了数组2[下标]与数组2[下标+1]交换。 END_IF; #下标 := #下标 + 1;//将下标偏移一位,实现下一组比较 END_FOR; #下标 :=0;//比完一轮后跳出内循环,将下标清零重头再来下一轮比较END_FOR;完整程序如下图所示:
展开全文
其他新闻
- 西门子S7-300/400系列多重调用FB块如何监控? 2024-11-22
- 图文详解 | 西门子PLC控制步进驱动器 2024-11-22
- PLC数字信号和模拟信号输入和控制是怎么回事? 2024-11-22
- 西门子PLC移位指令下如何实现电机顺序启动逆序停止? 2024-11-22
- 用电路控制和用PLC控制三相电机点动/自锁有何区别呢? 2024-11-22
- 西门子1200与1500如何进行S7以太网通信 2024-11-22
- 使用西门子博途SCL编写水处理行业电机启动算法 2024-11-22
- 西门子1200博图里面下载PLC时,下载不了或者报错的几种常见原因及对策详解 2024-11-22
- 两台S7-200 smart Profinet通信案例,超详细! 2024-11-22
- 西门子200SMART PLC顺控指令详解 2024-11-22