[西门子] 西门子SCL基础教学---冒泡排序

[复制链接]
查看20841 | 回复0 | 2024-3-11 18:49:10 | 显示全部楼层 |阅读模式
排序,在生活中很常用。在我们自动化工程师中,应该也很常用吧。

今天我们简单说一下冒泡排序。原理的话,就是比较前后两个数据的大小,根据设定的排序方法将数据按你设定的大小放进你的结果中。这里就简单说一下,如果需要详细了解,大家自行百度。

为了方便复用,我们可以做一个FC程序块。

代码也很简单,几行,这里我就贴图了。(主要是懒)



in和out没有任何数据类型。在InOut里面有一个array的不定长数组,为什么用这个呢,方便程序复用嘛。比如今天比较5个,明天比较10个,总不能天天来修改这个InOut的array的数值吧。

首先,通过语句获取到你这个输入进来的数组上下限,有了上下限,我们就知道了我们的循环次数了。

为什么循环次数是Low to Up - Low - 1呢,因为比较前后两个数据啊,比较到最后,那最后一个数据要么最大,要么最小,就没必要再次循环,而且,就算是循环了,他也没人去比较了啊,就导致了PLC报错,会出现一个提示:说区域长度错误。

然后就是循环排序,这里是从小到大排序。比较第一个和第二个数据的值,如果第一个大于第二个,则将第一个数据放进tBuf里面。data的当前位置就是data的第二个位置。然后data第二个位置就是tbuf的数据。其实就是按照顺序进行

大家可以自己看一下,理解一下,冒泡排序还是很简单的。



外部调用的话,就可以这样。通过start启动这个排序



结束之后,关掉这个排序,毕竟,还是要省点PLC的循环时间。你也可以将这个start做到这个FC里面去。毕竟,排序,需要用到再用,别没事就让他一直在循环。

你们也可以根据自身情况,比如再加一个in引脚,通过GOTO指令可以做一个从大到小和从小到大的一体块,方便以后使用。这里就不再演示了。

本帖子中包含更多资源

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

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

本版积分规则