各位大哥大神好,我第一次在这里求助,希望大家给我一个好的思路。
我要做的程序是一个恒压供水加减泵的程序,老方法大家都知道,假如4台泵,那么最直白的就是1~2~3~4,这样循序渐进,在供水当中,还有一个必要的功能,那就是定时轮换水泵功能,那就意味着在开发了循环加减泵后,还要另外单独写一段定时轮换的程序,这样一来工作量就会大大增加。
我现在有有一个好的想法,就是加减泵时是根据时间进行增加或者减少,就是说系统会自动判断所有水泵的运行时间,每次加泵都会从用时最少的那一台水泵开始启动,而每次退出水泵时就会从用时最长的水泵开始关闭,这样一来,加减泵循环程序和定时轮换程序就合二为一,而且更科学的平衡了每一台水泵的运行时间。
那么问题来了:我现在给每一台泵写了时间判断程序,写了加泵程序,也写了减泵程序,但是我认为我的方法太死板和被动,哪儿不正常就补哪里,类似与拆东墙补西墙,拆来补去的最后还是有毛病,这样的思路我觉得肯定不对的,而且随着程序的进度,越到后面就越缭乱。
我现在很想知道西门子有没有这样的时间累积判断用时最长输出程序,或者这样的库文件,再或者,哪位大哥可以教教小弟,给我一个好的思路。
最佳答案
大概的思路:
各泵各自累计运行时间,并存储到一个带断电保持型存储区V。
假设,这时需要投入泵运行前,先排列一下那些泵运行时间最短,这个是你需要交流的问题。
要做这样的控制,首先需要确认一个连续的地址区代表这些泵的时间运行,假设定义泵运行时间寄存器1#(VW100);2#(VW102),以此类推、、、、、、这样就需要新建一个以&指针&VB100,如何因为泵运行时间累加是VW(字),需要连续加2个字节指针地址,将指针地址往下移动到下一台泵的运行时间地址中进行比较,所比较的结果只能是2个结果,即大于或者小于。假设取大于(VW100>VW102),则进行数据地址置换,反之,指针地址下移,保小舍大。这样3次比较后(采用循环指令for/next),就可以得到一个或几个相同运行时间的数据。
将这个地址对应的运行最短时间的对应泵作为待启动泵的其中一个启动条件。
提问者对于答案的评价:
我大概就是这么做的,现在在互锁逻辑方面越做越乱,假如1号泵如果运行了,那么1号就不会再参与了,二号启动了剩下的判断就不能再判断2泵时间,理论上很简单,实际编写起来快乱套了
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc129511.html