点击【 大 中 小 】,可以选择字体的大小,以便你阅读.
6台泵自动轮换问题
有一变压器冷却项目,1台变压器有6台冷却泵,A.当变压器低压侧(二次输出)投入时,需要轮换启动2台冷却泵(即每隔2小时
轮换启动,每次要保证有2台泵运行);B.当变压器高压侧(一次输入)投入时,需要轮换启动3台冷却泵(即每隔2小时
轮换启动,每次要保证有3台泵运行),当冷却泵故障退出运行后,将按排列顺序自动启动备用冷却器。请问:如何对以轮换进行简单有效的组态?
当A条件向B转换时,怎样判断并启动第3台泵,当B条件向A转换时,怎样判断并退出第3台泵?循环排列方式要本着均衡、对称的原则。
以下是对《6台泵自动轮换问题》的回复:
匿名回复:
怎么没有人回复阿?是我没有说清楚吗?
匿名回复:
-----系统初始化(开始)-------
1.分配6个Word内存(水泵编号),将这6个Word内容分别初始化为1,2,3,4,5,6
2.定义变量:V1(需要开启台数)V2(当前开启台数)V3(水泵输出缓存)V4(循环计数器)V5(保存水泵编号首地址)V6(水泵运行输入缓存)V7(水泵故障输入缓存)
------系统初始化(结束)-------
------每隔2小时执行1次(开始)-------
1.用循环移位指令对6个Word进行移位(注意:每次必须移1个Word)。这样第一次移位后,数据应该是2,3,4,5,6,1下一次应该是3,4,5,6,1,2依此类推。
------每隔2小时执行1次(结束)-------
------每次故障执行1次(开始)-------
1.将水泵切换程序执行1次。
------每次故障执行1次(结束)-------
------水泵切换程序(开始)-------
1.将V2、V3和V5设置为0
2.循环:如果(V4 <= 6)并且(V2 <= V1)则->如果将"常数1"左移@V5(间接寻址)位,然后和V6和V7进行AND操作,如果结果位0(说明此泵未开,并且没有故障),则将V2加1。然后将结果对V3进行1次OR操作。
3.跳出循环后,将V3内容复制到物理输出。
------水泵切换程序(结束)-------
如果条件A满足要求,则将V1设为2,如果条件B满足要求,则将V1设为3
匿名回复:
补充:每隔2小时还应该将水泵切换程序执行1次。 :)
匿名回复:
谢谢microtomato
还有没有更简单的方法啊?
匿名回复:
microtomato:
能不能把程序贴上来,这样看的更好理解一些.
匿名回复:
to microtomato:
对你的方法,我有几个疑问,清执教:
1,定义变量:V4的循环计数是给哪个计数?V5(保存水泵编号首地址),这个在程序中怎么做?
2,能否将水泵切换程序在详细的说一遍。
匿名回复:
还有,我用的S7-300,再STEP7 V5.2里该如何定义V变量?
匿名回复:
定义的变量V能否用字代替?
匿名回复:
不要没事找事,用的着这样吗?这和在空调系统压缩机启动退出不是一回事吗?
匿名回复:
回candy2000:
1.真够死板的:) 我这里的V1、V2等只是1个代号而已,你可以在符号表里面进行定义啊,比如V1代表DB1.DBW100,当然你也可以不起V1这样讨厌的名字。
2.V4的功能就是给循环体进行计数,每循环1次,该计数值+1。如果V4的值=6,则说明已经把所有的6台泵都检测过了,此时就可以退出循环。V2是当前已经开启的水泵台数,每当找到1台完好的泵,则该计数值+1。如果V2=V1,则说明已经开启了足够多数量的水泵,此时就退出循环。
3.V5这个变量的内容就是你存放“水泵编号”这块内存的起始地址。比如你把代表“水泵编号”的1,2,3,4,5,6放在了DBW100开始的6个字,那么V5就应该初始化为100,这样间接寻址时就会自动到DBW100去取数据了。如果V5=101,那么程序就去取DBW101的数据了。当然你也可以找块你喜欢的地方保存这些数据。
4.程序的运作方式就是这样:
(a)每隔2小时(也就是你的切换时间)对6台泵的启动优先级进行排序。然后调用“水泵切换程序”
(b)每次故障(无论哪台泵发生故障),都调用一次“水泵切换程序”
(c)在“水泵切换程序”中,(1)首先将代表“当前水泵运行台数”的变量初始化为0(2)根据水泵的优先级依次检测水泵的启动条件是否满足要求,如果满足要求则开(并且把“当前水泵运行台数”这个变量+1),反之则找下1台。(3)如果“当前水泵运行台数”变量=“需要运行的台数”,则跳出循环(可以开的水泵已经够多了)。(4)如果循环了6次(你的水泵一共就6台)“当前水泵运行台数”还是小于“需要运行的水泵台数”,则跳出循环(所有水泵中就这么几台是好的)。(5)刷新输出。
5.这里的移位指令移位的具体位数就是“水泵编号”的值。比如1号泵就移1位,2号泵就移2位。(假设你代表水泵故障和水泵运行的输入端是从1开始的,比如I0.1是1号泵的运行,I1.1是1号泵的故障,如果从0开始,则前面的移位数就必须减1)这样你就得到了1个用于比较的参考值。然后将这参考值和故障输入和运行输入进行比较,将比较结果和输出缓冲或1下就能决定该泵是否运行了。
------------------------------
设你的I0.1~I0.6依次是1~6号泵的故障输入(如果故障,则对应输入端为on),I1.1~I1.6依次是1~6号泵的运行输入(如果运行,则对应输入端为on),I2.1~I2.6依次是泵的运行输出(如果运行,则对应输出端为on)
如果现在要知道2号泵是否可以运行:(1)将常数1左移2位,得到二进制0000000000000100,然后把整个故障输入取1下反再对该二进制进行一次AND操作,如果现2号泵没有故障,则得出结果仍然为0000000000000100,如果2号泵有故障,则结果为0000000000000000。此时再把整个运行输入取1下反,再对刚才的结果进行一次AND操作。如果2号泵没有运行,则原先为0000000000000100计算结果还是0000000000000100。如果2号泵已经运行了,则计算结果就是0000000000000000。经过2次判断后,将计算结果和输出缓冲区进行OR操作。这样就把2号泵的输出状态写下去了。这下应该明白了吧 :)
匿名回复: