用S7-200/300编程的三个实例的解析之四
一、网友求助:“由于以前没有接触过S7-200系列,编程不太熟悉。
现在需要控制1-9号共9个阀门循环起停,要求:1号一直常开,2号-9号分4组,每组2个。先开第一组(2个阀门)20S后停止,开第二组,也开20S后停止,然后开第三组,也开20S,然后停止,最后开第4组,也开20S,然后停止,然后再开第一组,如此往复循环着开。不知道该如何编写程序,还请各位大侠多帮忙,越详细越好。”
回复:楼主:按着你的要求编写如下程序,你看可行否?
二、网友求助:“如何在S7-300中实现时间累积及断电后继续计时?例如:有两个电机 轮流运行,A运行2天后停止轮换到B运行,B 运行2天后轮换到A,工作中间暂停(断电)后恢复运行的话,运行时间承接原来时间继续累积,直至时间里累到2天。”
回复:在S7-300的PLC硬件组态时设置时钟脉冲,用MB100作为时钟存储器,那么M100.5将产生频率为1HZ的秒脉冲输出。选用DB1.DBD20做加法器,DB1.DBD30置数为1,做加数用,DB1.DBD34置数为#16#2A300,即十进制数:172800(秒)表示二日的时间值,用它做比较值与DB1.DBD20的计数值比较,如DB1.DBD20值>=#16#2A300,表示时间到比较器输出为1,使DB1.DBX0.0=Q2.0=0(电机A停),DB1.DBX0.1=Q2.1=1(电机B运行)。。。DB1.DBD20及DB1.DBX0.0与DB1.DBX0.1位信号在PLC断电时,它能保持断电前的计数值及自身状态,复电后,程序将按断电前状态继续工作。详见下图:
三、有一网友求助:“有那们大虾知道西门子200PLC要写一个数据移位怎么写?就像三凌的“WSFR”指令一样,工作一次把当前值移入下一个寄存器。比如。工作一次当前值VB0的数据移入VB100,再工作一次把VB0的数据移入VB100,把VB100的数据移入VB101,以此类推!”
我的回复:编程的思路是这样:假设你有N个字节数据寄存器需要移位处理,在存入新数据之前,应先将原数据依次向后移动一个字节,再把新数据存入第一个字节里。为了确保各个字节的数据在移位时的正确无误,移位的顺序应该由后向前,即:先将N-1字节数据移到N字节,再将N-2移到N-1。。。直到将第一字节数移到第二字节里,之后方将新数据送入第一字节。S7-200指令,最大的移位是双字,你可以从最后字节N向前每4的字节定义一个双字,最后可能剩下3个以下的字节,你再定义它为字或字节。编程时先将最后的双字右移8位,这样就完成了将N-1移位到N,N-2移位到N-1, N-3移位到N-2,再将它前个双字的N-4送入N-3。再将前一个双字也做右移8位处理,再将它前一个双子的最后字节送入该双字的第一字节里。。。最后将新数据送入最前的第一字节里。下面举一例子:有8个字节需要移位处理,你可这样编程:先设第一字节地址为VB100、其他字节地址依次为VB101、VB102,,,,, VB107,可分为二个双字存储器:VD100、VD104,当须将当前值需存入数据区时,先将VD104左移8位,再将VB103的内容送入VB104,再将VD100左移8位,再将新的工作当前值MB10送入VB100即可。下面就是梯形图,供你参考。