这两天现场调试仪表通讯,遇到一个问题,仪表232转485读取称重数据,连续发送,发过来的数据偶尔有无效数据,导致数据异常,遂采用排序取中间值将无效值排除。
其实排序算法,论坛里有许多老贴了,写的已经很完善了!闲着没事,瞎琢磨一个,分享给有需要的人。
祥细程序就细贴了,说一下思路、功能和注意事项。
1、基本算法还是“冒泡法”。程序设置Flag标志位,当无数据交换,立即退出循环。
2、每一次内循环后,由于最后面的数据永远是最大或者最小的,因此下一周期,不再参与交换,太高了效率。
3、本程序自动多周期异步计算。假如100个数据,10个周期处理完成;200个数据可能自动分配50个周期;大于400个数据可能就需要400个周期处理完处理;目的就是要保证周期时间不超时。
4、可以设置升序、降序;设置输入排序、输出排序。
5、支持字节、整数、双整数、浮点数四种排序。
6、如需测试请通过EXCEl向VB区域填充数据。
欢迎大家指正!
测试500个浮点数如下。
注意事项:
1、本程序内部设定最大500个数据,实际测试500个浮点数据对PLC来说,时间已经很长了!对控制系统来说,风险还是比较大的。如需要更多数据,请自行子程序里更改。
2、本程序未内置看门狗复位指令。以上测试程序均为空程序下500浮点数测试结果。如有其它控制程序,则总时长可能会加长。请自行测试最终周期时间,防止超时停机。
3、排序期间,数据禁止刷新。
4、用户自行保证排序数据与数据类型一致。
5、程序需要占用15BYTES V区用以内部计算。
冒泡排序测试 SBR -0910.rar