亦有资源网

C++语言基础到进阶学习资源汇总

PLC之ST语言的冒泡排序功能块编程

一、首先我们说下什么是冒泡排序:

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢 “浮” 到数列的顶端(或底端),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样。

二、再讲一下什么是功能块:

  • 在 PLC(可编程逻辑控制器)编程中,功能块(Function Block,简称 FB)是一种重要的程序组织单元。它将具有特定功能的一系列逻辑操作封装在一起,形成一个可以重复使用的模块。
  • 功能块类似于高级编程语言中的函数或对象,可以有输入参数(Input)、输出参数(Output)和内部状态变量(Static)。输入参数用于接收外部传入的数据,输出参数用于向外部输出计算或处理的结果,而内部状态变量则可以存储功能块内部使用的数据,并且在功能块的多次调用之间保持其状态。

三、看下实际编程代码

接下来,我们看下冒泡排序功能块的编写,我这里功能块里写了增序和降序两个排序功能,可根据需要选择对应的排序方法。

输入变量定义一个数组,m需要用一个全局的常量来,无法使用变量。用全局常量可以一键修改m的值,会方便一些。m为数组的个数。


当slect的值=1时,算法选择为降序,默认是0,增序的算法

四、冒泡排序的算法的代码核心就是两个for循环,一个控制比较的循环次数(外循环);另一个是控制相邻两个数据比较大小(内循环);

下面我以数组的的为[6, 5, 4, 3, 2, 1],m=5 来逐步执行冒泡排序增序的算法:看看是怎样一步步执行的。

1. 第1轮外循环 (i = 0):

? 内循环开始 (j = 0):

? 比较 a[0] 和 a[1]:6 > 5,交换它们位置。数组变为 [5, 6, 4, 3, 2, 1]。

? 比较 a[1] 和 a[2]:6 > 4,交换它们位置。数组变为 [5, 4, 6, 3, 2, 1]。

? 比较 a[2] 和 a[3]:6 > 3,交换它们位置。数组变为 [5, 4, 3, 6, 2, 1]。

? 比较 a[3] 和 a[4]:6 > 2,交换它们位置。数组变为 [5, 4, 3, 2, 6, 1]。

? 比较 a[4] 和 a[5]:6 > 1,交换它们位置。数组变为 [5, 4, 3, 2, 1, 6]。

? 内循环结束,数组变为 [5, 4, 3, 2, 1, 6]。

2. 第2轮外循环 (i = 1):

? 内循环开始 (j = 0):

? 比较 a[0] 和 a[1]:5 > 4,交换它们位置。数组变为 [4, 5, 3, 2, 1, 6]。

? 比较 a[1] 和 a[2]:5 > 3,交换它们位置。数组变为 [4, 3, 5, 2, 1, 6]。

? 比较 a[2] 和 a[3]:5 > 2,交换它们位置。数组变为 [4, 3, 2, 5, 1, 6]。

? 比较 a[3] 和 a[4]:5 > 1,交换它们位置。数组变为 [4, 3, 2, 1, 5, 6]。

? 内循环结束,数组变为 [4, 3, 2, 1, 5, 6]。

3. 第3轮外循环 (i = 2):

? 内循环开始 (j = 0):

? 比较 a[0] 和 a[1]:4 > 3,交换它们位置。数组变为 [3, 4, 2, 1, 5, 6]。

? 比较 a[1] 和 a[2]:4 > 2,交换它们位置。数组变为 [3, 2, 4, 1, 5, 6]。

? 比较 a[2] 和 a[3]:4 > 1,交换它们位置。数组变为 [3, 2, 1, 4, 5, 6]。

? 内循环结束,数组变为 [3, 2, 1, 4, 5, 6]。

4. 第4轮外循环 (i = 3):

? 内循环开始 (j = 0):

? 比较 a[0] 和 a[1]:3 > 2,交换它们位置。数组变为 [2, 3, 1, 4, 5, 6]。

? 比较 a[1] 和 a[2]:3 > 1,交换它们位置。数组变为 [2, 1, 3, 4, 5, 6]。

? 内循环结束,数组变为 [2, 1, 3, 4, 5, 6]。

5. 第5轮外循环 (i = 4):

? 内循环开始 (j = 0):

? 比较 a[0] 和 a[1]:2 > 1,交换它们位置。数组变为 [1, 2, 3, 4, 5, 6]。

? 内循环结束,数组变为 [1, 2, 3, 4, 5, 6]。

经过5轮外循环(每一轮确定一个最大值的位置),数组最终有序为 [1, 2, 3, 4, 5, 6]。


五、下面看几个比较的结果

数组[6,8,9,3,15,7]

数组[100,112,88,96,200,150]降序

数组[100,112,88,96,200,150]增序

五、工程实际应用

在工业控制中,嵌套循环通常用于多维数组的遍历、矩阵操作或对多个设备参数的逐一配置。编写时要确保逻辑清晰,避免出现意外的死循环或错误的逻辑控制。

#PLC编程##冒泡排序##ST语言#功能块#

#算法#

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言