设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
西门子SCL编程实例—冒泡排序算法的实现 ...
返回列表
发新帖
[西门子]
西门子SCL编程实例—冒泡排序算法的实现
[复制链接]
131
|
0
|
2024-4-25 16:59:41
|
显示全部楼层
|
阅读模式
最近使用西门子PLC的高速计数器模块采集编码器信号,直接使用模块输出的瞬时速度跳变有点大,为了能让屏幕上显示的速度体现实时速度且平稳,需要在程序上进行处理一下,用更加专业的说法就是速度滤波。这里说的速度滤波就是一种数据处理算法。由于速度的跳变是在一个速度值左右来回跳变,所以选择的处理方法是算术平均数法。通过采集相同时间速度值N个,存入一个数组,然后对数组内的速度值进行排序,将最大值和最小值去掉后,计算平均值,将计算的平均值作为实时速度值在屏幕上显示。平均值的计算很简单,这里主要说一下里面涉及到的排序方法——冒泡排序如何通过SCL程序语言实现。 冒泡排序属于排序算法的一种,其排序原理是通过比较相邻的两个数据,根据大小交换位置,经过几轮比较后,数据就会按照从大到小或者从小到大的顺序排列储存。以下是冒泡排序算法的图解过程:
清楚明白冒泡排序算法的具体原理后,接下来就是要用SCL语言来实现,以下就是SCL语言实现冒泡算法的具体代码:
变量声明
//#Array:存储数据的数组//#Array_Lower:数组下限编号,通过指令LOWER_BOUND(ARR := #Array, DIM := 1)来获取//#Array_Upper:数组上限编号,通过指令UPPER_BOUND(ARR := #Array, DIM := 1)来获取//#Array_Lower := LOWER_BOUND(ARR := #Array, DIM := 1);//#Array_Upper := UPPER_BOUND(ARR := #Array, DIM := 1);//#Cycle_Limit:外循环次数//#Cycle_Num:每次循环的比较册数FOR #Cycle_Limit := #Array_Lower TO #Array_Upper-1 DO FOR #Cycle_Num := #Array_Lower TO #Array_Upper-#Cycle_Limit-1 DO IF #Array[#Cycle_Num]<#Array[#Cycle_Num+1] THEN #Array_Temp := #Array[#Cycle_Num + 1]; #Array[#Cycle_Num + 1] := #Array[#Cycle_Num]; #Array[#Cycle_Num] := #Array_Temp; END_IF; END_FOR;END_FOR; SCL语言属于一种高级语言,所以冒泡排序实现的代码和C语言、JAVA等高级语言的实现代码很相似。由于PLC程序的执行是一种循环反复执行过程,所以在使用冒泡排序的时候可以考虑加入一个使能控制命令。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
founderchip
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』