图标准化编程技巧(十一)设备均衡运行算法
在水处理行业,经常碰到多台同样的水泵并列运行的情况,工艺要求根据液位、压力或流量的设置自动启动或停止水泵,并且要求所有水泵的总运行时间要尽量均衡。为了实现均衡运行,懒惰的厂家就在上位画面里给每台泵人工设置一个启动优先级,每隔一段时间人工调整优先级,实现均衡运行。这种方法实现简单,但是需要人工调整,实际效果并不好。还有厉害的厂家采用排序的方式,按照总运行时间给所有水泵做一个大排序,按照队列顺序控制起停。但冒泡排序也不是人人都会,所以现场还是要求人工设置启动优先级的方法比较普遍。
我在封装水泵恒液位或恒流量控制模块的时候,将设备均衡运行功能也一并封装在里面。我采用的算法如下:
1、启动水泵时选择停止的水泵中运行时间最短的;
2、停止水泵时选择运行的水泵中运行时间最长的;
3、不为了实现均衡而主动切换水泵;
这样我只需要确定停止水泵中运行时间最短的和运行水泵中运行时间最长的这两个泵就可以了。找停止水泵中运行时间最短我的做法是设置一个T_MIN变量,每个比较周期先赋一个比较大的值,然后逐个跟运行中的水泵的运行时间比较哪个小,如果比T_MIN小就将其运行时间赋值给T_MIN并记录泵编号,一轮比较最后剩下的就是了。同样找运行水泵中运行时间最长的就反过来操作就行了。
采用这种方法后不需要对所有水泵运行时间做大排序就可以方便实现均衡运行。