恭喜,你发布的帖子
发布于 2021-02-02 09:12:37
16楼
楼上多以面向过程的思路解决问题,在泵的数量不多的情况下,编程还是可以的,程序运行的效率也高。但是如果参与的泵的数量比较多的话,编程就比较复杂了。
用面向对象的方法相对思路就简单一些。泵作为一个类,定义“累计运行时间”,“运行状态”,“启动序号”三个属性。于是楼主的要求就可以简单的转换为如下表述:
1、启动泵:在达到启动下一台泵的条件时(按启动按钮或高频低压超时),就是把”运行状态“为”停止“的泵中”累计运行时间“最小值的泵挑出来启动,并把“运行状态”改为“正在运行”,同时这台泵把”启动序号“设置为所有”运行状态“为”正在运行“的泵的数量
2、停泵:低频高压超时,就是把”运行状态“为”正在运行“的泵中,”启动序号“最大的那台泵筛选出来停止,把这台泵的“运行状态”改为“停止”,把“启动序号”置零。
3、故障:当泵的“运行状态”为“故障”时,自动停这台泵,启用它相应的备用泵(由于楼主这方面要求并不完整清晰,这里只能给个笼统的说法了)
可见,用面向对象方法,改变泵的数量时,并不需要改变程序。3台泵是这个程序,30台泵也是这个程序,不过是把for的循环次数调整一下,只要给“泵的数量”这个变量赋值就可以了,
比较得出最大或最小的值有很多种方法,有些方法比较笨,在数量少的情况下比较没有问题,在数量多的时候呈几何倍的增长,这也就是为何有2楼的Z版的方法和其他各类优化的比较方法了。这类的办法可以极大的优化程序量达到想要的目的。正因为比较有很多种方法,因此我并没有明确说思路采用哪种比较方法,只要能实现此功能即可。
对于水泵台数控制为何说标准化是7台泵而不是10台,20台甚至100台,因为在实际情况下7台泵已经可以应付99%的应用场景了,再多的台数只会徒增程序而实际用不到。在7台的比较中可以用你的办法,用Z版的办法,也可以用最原始的两两比较的办法,程序量不是太大都可以接收的。
为何我强调程序记录设备当前运行时间,当前停止时间,总运行时间。因为这3种时间并不仅给你程序使用,而更重要的是给客户使用,客户通过观看水泵的使用时间可以直观了解水泵的当前运行状况,也可以帮助其了解下次该启哪台泵,该停哪台泵。同时通过时间的报表记录更可以清楚了解某一天哪台泵运行了多少小时,某个月哪台泵运行了多少小时,这个涉及到设备的日常运营管理的。
好的中控系统并不是设备控制没问题才是好的,这是最基本的东西,客户并不会因为你写的程序好坏而说你的系统好,因为程序客户是不知道的,只有程序很多问题的时候客户才知道你的程序烂,当你的程序没有问题的时候客户并不知道你的程序好!因此现在好的中控系统关键还是在界面,在功能,在管理等方方面面。PLC程序是关键,是重要,但只能在你的心里有个执念:我要将PLC程序写好,稳定性要高,方方面面的问题都要考虑到,安全性是第一位!
请填写推广理由:
分享
只看
楼主