quote:以下是引用H.L在2011-03-21 22:40:04的发言:
我最近在调一套污水厂的系统,也正在考虑着如何将这个问题做的更好一些,我的工况是这样的:
1、液位从低到高分为n个液位,随着液位的上升,每到达一个液位时,启一台泵,反之停一台泵,液位值可设定。
2、泵的运行时间要均衡。
3、有故障的或处于现场控制状态的泵不参与自动控制启停。
4、运行时间最短的泵优先启动,但也要轮询控制,即刚停下的泵不允许再次启动,要轮询到另一台运行时间最短的泵上。
5、其中有带变频的泵,也在考虑在此基础上加上PID控制,以往是不做PID控制的。
6、最终目的就是使水量平稳些。
目前的想法是:
1、在每次液位到达需要启泵前先调用一次排序程序,排序时先将不满足条件(故障的、正在运行的、刚停止运行的、不在自控状态的)的这些泵去掉,然后去比较剩余泵的运行时间,只选择出时间最短的,这样只需要遍历一次就可以了。
2、排序的方法很多,我选择用两个指针,最终一个指向最短的这个时间值,一个指向其对应的泵的序号。
3、考虑做成功能块,将所有泵的运行时间放入一个连续的地址空间,将来用时只需指定一个起始地址,和几个标志位(用来决定哪些泵参与排序的),块的输出值一个是最短的时间,一个是泵的序号(标志位)。
4、停止时就采用先启先停的原则。
H.L
你的做法已经很接近循环移位法了,或许你表达的还不是那么清楚。刻意去比较最短运行时是没有意义的,总是在变化的,而且,最低的肯定是故障率最高的那台,有个恶性循环,一切顺其自然啦。