[西门子] AB PLC | Studio 5000实现冒泡排序

[复制链接]
查看16459 | 回复0 | 2024-1-24 07:58:42 | 显示全部楼层 |阅读模式


前言:在实际的项目中,我们经常会遇到需要对数组中的元素进行排序,而排序又分为两种方式:升序--数值从小到大排列,降序--数值从大到小排列。提及数组的排序,又联想到了经典的排序算法--冒泡排序,如何选择合适的编程语言来实现这一算法呢,显然,梯形图(LD)、功能块图(FBD)两兄弟很难胜任,那么,就把这个重担交给擅长数据处理的结构化文本(ST)大哥吧。

01

测试环境

1. 操作系统:Windows 10 专业版 64位

2. 编程软件:Studio 5000 V32.00.00中文版

3. 硬件环境:CompactLogix 1769-L30ER

02

冒泡排序

1. 冒泡排序,英文Bubble Sort,是一种比较经典而又容易实现的排序算法,它重复地访问要排序的数组元素,依次比较两个相邻的元素,以升序为例,如果当前元素 > 相邻的下一个元素,那么就他们互换位置,紧接着往下比较,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”.


2. 冒泡排序算法的原理如下:.

    比较相邻的元素,升序为例,如果当前元素大于相邻的下一个元素(降序相反),就交换它们两个位置

    对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,最后的元素应该会是最大的数(或最小的数)

    针对所有的元素重复以上的步骤,除了最后一个

    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止


03

实现方法

1. 打开Studio 5000 V32.00.00中文版,在控制器标签域里面创建以下标签,其中myArray为REAL[20]数组.


2. 创建一个例程命名为BubbleSort,编程语言选择结构化文本(ST),这样就可以编写冒泡排序算法代码了,详见下图.


3. 下面说明一下冒泡排序算法的编写过程,首先需要求出数组的下限和上限,其中求数组尺寸大小,用到了SIZE指令,关于SIZE指令的用法,这里就不展开了,不熟悉的小伙伴可以查阅《LOGIX5000 控制器通用指令参考手册》,官方出版号:1756-rm003_-zh-p


4. 冒泡排序--升序代码:用到了2个FOR循环,第1个FOR循环用于访问数组中的每一个元素,第2个FOR循序用于相邻元素的两两比较,如果当前元素数值>相邻下一个元素数值,它们就交换位置,直到最后一个元素,无需再比较了,也没有比较的对象了,所以循环标签j的终值等于(数组上限-1-i).


5. 冒泡排序--降序代码:和升序方法相同,只是比较方式不同而已,当前元素数值<相邻下一个元素数值,它们就交换位置.


04

测试验证

1. 冒泡排序--升序测试,详见下面视频和图片.


video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_2002422106059341824



2. 冒泡排序--降序测试,详见下面视频和图片.


video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_2002507839109496833



结语:综上所述,本文首先介绍了冒泡排序的算法原理,并根据此算法编写ST代码,通过使用两个FOR指令、双循环来实现冒泡排序,最后在实际的控制器中测试验证成功。当然,本文案例是冒泡排序最基本、最原始的用法,仅仅用于数组元素的排序,那么,它还有更多用处吗,答案是肯定的,有时间了,下一篇文章分享一个实际的案例应用,同时,希望本文抛砖引玉,给大家一点启发和帮助。



【AB PLC工作室】

微信公众号ID:abseme



   坚持原创  注重实用



如果本文,对您有一点帮助或启示。

请分享给更多的朋友,对小编以示鼓励,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则