[西门子PLC] 冒泡排序、选择排序算法——西门子1200FB块的封装

createh52个月前 (05-04)技术教程17

在讨论如何使用西门子S7-1200 PLC中的功能块(FB,Function Block)来实现冒泡排序或选择排序之前,我们需要了解几个关键点:

  • PLC编程环境:通常使用的是TIA Portal软件,它支持多种编程语言,如Ladder Diagram (LD), Structured Control Language (SCL), Function Block Diagram (FBD)等。
  • 数据类型和存储:PLC程序处理的数据类型以及如何在内存中存储这些数据对于实现排序算法非常重要。
  • 功能块的概念:功能块是一种可重用的程序结构,在TIA Portal中创建的功能块可以多次实例化并应用于不同的地方。

一、冒泡排序算法概述

冒泡排序的基本思想是通过不断地交换相邻两个元素的位置来将较大的元素逐渐向数组的后部移动。该过程重复进行直到没有更多的交换为止。
二、选择排序算法概述

选择排序的工作原理是遍历数组,找到最小(或最大)的元素,并将其放置在排序序列的起始位置。这个过程对剩余未排序的元素重复进行,直到整个数组排序完成。
三、实现步骤

步骤 1: 定义功能块

首先,你需要定义一个功能块来执行排序操作。你可以为冒泡排序和选择排序分别创建一个功能块。
步骤 2: 输入输出参数

定义功能块的输入输出参数:

  • Input:需要排序的数组及其长度。
  • Output:排序后的数组。

步骤 3: 编写排序逻辑

在功能块内部编写排序逻辑。这里以冒泡排序为例,简要说明其编程逻辑:
初始化变量:定义必要的局部变量,例如用于比较和交换的临时变量。主循环:外层循环控制比较的轮数。内循环:内层循环负责每次比较并根据条件进行元素交换。结束条件:当没有发生任何交换时,排序结束。
四、上干货FB块引脚分布及SCL语言分享为了帮助您更好地理解如何在西门子S7-1200 PLC中使用功能块(FB, Function Block)实现冒泡排序算法,我将提供一个具体的示例。我们将使用Structured Control Language (SCL)来编写这个功能块,因为它提供了更高级别的抽象,使得编写复杂的算法更为直观。(一)冒泡排序功能块设计

1.FB块引脚介绍
数据长度:用于选择排序数组长度的选择。逆序、顺序:当为0时为逆序排序、当为1时为正序排序。触发标志位:当为1时触发排序。数据输入:数据类型为数组。DONE:完成位,当排序完成时置1,两秒后置0。


2.数组排序前(以10个数组为例,实际可以自定义数组长度)


3.数组排序后(以10个数组为例,实际可以自定义数组长度)顺序排序


逆序排序


4.SCL语言


(二)选择排序功能块设计

1.FB块引脚介绍
正序、逆序:当为1时为逆序排序、当为0时为正序排序数组上限:一个数组需要排序的数组下限。
数组下线:一个数组需要排序的数组上限。
排序触发标志位:当置1时候排序开始排序完成后自动置0.
数据输入:需要排序的数组。
DONE:数组排序完成位。


2.数组排序前(以10个数组为例,实际可以自定义数组长度)


3.数组排序后(以10个数组为例,实际可以自定义数组长度)(1)顺序排序


(2)逆序排序


(3)选择排序范围只排1-3(逆序)





(4)选择排序范围只排1-3(正序)




(5)SCL语言

五、结论
冒泡排序和选择排序都是简单的排序算法,它们各有自己的应用场景和优缺点。下面是对这两种算法的用途和优点的总结:冒泡排序

用途:

  • 冒泡排序适用于小规模数据集的排序,因为它的实现简单,易于理解和实现。
  • 当数据基本有序时,冒泡排序的性能较好,因为在这种情况下它可以通过检测提前终止排序过程。

优点:

  • 简单易懂:冒泡排序的实现非常直观,容易理解和编码。
  • 稳定性:冒泡排序是稳定的排序算法,即相等的元素保持原有的顺序不变。
  • 原地排序:冒泡排序只需要常量级的辅助空间,即O(1)的额外空间复杂度。

选择排序

用途:

  • 选择排序同样适用于小规模数据集的排序,特别是在内存受限的情况下,因为它不需要额外的内存空间。
  • 当排序的数组较小且不需要特别高效的排序时,选择排序是一个不错的选择。

优点:

  • 简单易懂:选择排序的实现也很直观,容易理解和编码。
  • 原地排序:选择排序同样是原地排序算法,只需要常量级的辅助空间。
  • 较少的交换次数:相比冒泡排序,选择排序在最坏的情况下也需要较少的交换次数。

比较


  • 时间复杂度:两种算法的时间复杂度都是O(n^2),其中n是数组的长度。这意味着随着数据量的增加,排序时间会显著增加。
  • 空间复杂度:两者都是原地排序,空间复杂度为O(1)。
  • 稳定性:冒泡排序是稳定的排序算法,而选择排序不是。
  • 适应性:如果数据已经部分有序,冒泡排序的性能可能会比选择排序更好,因为它可以在没有更多交换的情况下提前结束排序。

总结


  • 对于非常小的数据集,冒泡排序和选择排序都是可行的选择。
  • 如果数据集较大,或者需要高效排序,那么建议考虑更高效的算法,如快速排序、归并排序等。
  • 如果稳定性很重要,那么可以选择冒泡排序。
  • 如果数据集已经部分有序,冒泡排序可能是更好的选择。

冒泡排序、选择排序算法——西门子1200FB块的封装-纯干货...

http://bbs.plcjs.com/forum.php?mod=viewthread&tid=499800&fromuid=42656

(出处: PLC论坛-全力打造可编程控制器专业技术论坛)

#非标自动化#

#西门子PLC#

相关文章

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

#头条创作挑战赛#学程序重要的思维,冒泡法排序冒泡法排序,从第一个数值开始分别与后面的数值对比大小。大与就互换位置,直到换到最后一个数字。排序前数组:10,47,3,82,55,90,38,60,21...

冒泡、插入、选择排序(C语言)(c语言冒泡排序需要注意什么)

以下排序算法默认从小到大的升序排序。冒泡排序思路从数组的第一个数a[0]开始,向后遍历,每次比较a[i]和a[i+1]的值若a[i]大于a[i+1],就交换两个位置的数的值。重复上述1和2的操作至a[...

常用排序算法:冒泡排序,快速排序

在生活中,我们离不开排序。例如上体育课时,同学们会按照身高顺序进行排队;又如每一场考试后,老师会按照考试成绩排名次。在编程的世界中,应用到排序的场景也比比皆是。例如当开发一个学生 管理系统时,需要按照...

冒泡排序算法(冒泡排序算法代码)

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,并且如果它们的顺序错误就交换它们。重复地进行这个过程直到整个列表都是有序的。以下是用C语言实现冒泡排序算法的示例代码:#inc...

冒泡排序:用Python轻松实现的排序算法

当涉及数据结构与算法,实际编程练习是非常重要的,因为理论知识只有通过实际应用才能真正理解和掌握。让我们以一个经典的排序算法——冒泡排序为例,逐步讲解如何实现它、计算时间复杂度以及一些优化思路。1. 冒...

一文解读Python嵌套循环实现冒泡排序

冒泡排序是数据结构中的一种经典算法,手工地实现冒泡排序,对于锻炼自己的编程逻辑有很大的帮助,本节就带领大家用循环结构实现冒泡排序算法。冒泡排序算法的实现思想遵循以下几步:1、比较相邻的元素,如果第一个...