请教一个西门子PLC编程问题.

最简单的问题啦,知道不能实现,但不知道为什么不能实现.
S7-200.
单点控制一个设备的起停,也就是按一下---开,再按一下---关.循环下去.

打不了梯形图,语言简述一下吧.
I0.0 Q0.0 Q0.0
||-----|P|------|\|-----(SET)

I0.0 Q0.0 Q0.0
||-----|P|------| |-----(RESET)

比如松下的FP0中就有KEEP一类,可简单实现些功能的指令,西门子的也有很多种,但我就是想知道我这样做梯形图毛病出在哪.
请高手不吝伺教.
wanghw1216程序写得好.用个辅助点避开一个扫描周期.
但是对于我的那两行程序想再追问一下:虽然SET和RESET谁在后谁起决定性作用.但是前面的条件是I0.0的上升沿啊.比如没有Q0.0时,要在I0.0的上升沿那个扫描周期才能使Q0.0置1.而在这个周期内,输入映象寄存器Q0.0的值还没有刷新,它的开点(我程序第二行中的Q0.0开点)还是断开的啊.这时,虽然有I0.0的上升沿,但因为没有Q0.0,所以我觉得满足不了RESET的条件啊.
而当下一个周期来到时,虽然有了Q0.0,但是没有了I0.0的上升沿,还是不能RESET.
必须要等到到下次再按下I0.0时才能RESET了.
也就是按一下开,再按一下关.

我这样分析哪里错了呢?
真诚求教!!

回 haoweng朋友,PLC扫描的确很快,但是我在输入条件中加了I0.0的上升沿,所以真正起作用的就只有I0.0接通瞬间的那一个周期,下一个周期这个条件就不成立了.所以我觉得我按一下按钮,只能改变一次,我哪里错了呢?
非常感谢大家,请朋友们帮助.

有一次我睡觉前躺在床上考虑过这个问题,那时候只考虑到用计数器可以实现,今天正好遇到你提出这个问题我又仔细考虑了一下原来不用计数器也能实现。 

你的这个程序差一点就对了,错就错在没有明确rst 和set的优先级上,r 和s的优先级是以谁在后面谁就高的原则,所以,你这个程序无论怎么弄最后都是rst,因为rst在set 后面。 

我对你这个程序调整了一下,并且经过仿真程序的测试,可以实现你的要求。 

程序是:

补充回答:你对plc输出映像区怎么刷新理解错误。输出还是输入以及其他一些存贮区(如中间寄存器m的存储区)都是程序执行到那里立即刷新。并不是你理解的,扫描完一个周期才刷新。但是对于输出映像区虽然已经刷新但并不马上输出结果。也就是说程序运行中输出映像区不断刷新但是对于物理输出触点没有影响,只有程序全部执行完了,才将输出映像区的内容一次性发到物理触点。“输出映像区在程序执行期间可能发生变化,但在整个程序未执行完毕之前不会到输出端口”(引自某西门子plc教材)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-02

没有Q0.0时,要在I0.0的上升沿那个扫描周期才能使Q0.0置1.而在这个周期内,输入映象寄存器Q0.0的值还没有刷新,它的开点(我程序第二行中的Q0.0开点)还是断开的啊.这时,虽然有I0.0的上升沿,但因为没有Q0.0,所以我觉得满足不了RESET的条件啊 

》》》》》》》》 

上面说法错误了 

你对程序执行、输出位的理解有偏差

程序执行时是对寄存器位修改 确实没有修改q0.0的映像寄存器 这不假 

但第二行q0.0的常开也没访问映像寄存器吖 它访问的是修改了的q0.0寄存器位(并不是映像啊) 

关键是把那个周期给找个中间继电器 错开一下 就可以了

如图 经过仿真 可以 通过了

第2个回答  2009-02-10
我做PLC行业有四年了~这样的问题我也总是范。但是我可以告诉大家,楼主所说的问题并不单单是程序逻辑上的问题,而是你在同一程序中使用了相同的硬件输出的地址,这在PLC的逻辑执行中是会出现和你设计结果不同的结果。同时我告诉大家,在一个工程中,切记是一个工程项目中,不能有两个相同的硬件输出地址,尽管你在逻辑上没有错误,但是在执行过程中CPU的刷新速度决定你所运行出的结果,即刷新到哪里就执行那一行的输出结果,所以在实际使用过程中会出现不同的结果。像楼主那样的运行结果会在PLC上电后I0.0开关一次就使Q0.0置位,当再一次使I0.0开关一次后就无法再复位了,因为在逻辑上这是不允许的,一个开点或闭点不能自己复位自己。所以再以后该程序会一直保持这一状态,直到PLC断电。
同意wanghw1216的程序~
不同意 songyijiang666的编写方式~最好不要出使硬件地址重复出现在一行或多行程序最后!
第3个回答  2009-01-31
带P的那个Q0.0只能在一个扫描周期内ON,下个扫描周期内,就算你的Q0.0是ON
的状态,也不会再改变输入输出映像寄存器了……
第4个回答  2009-02-12
西门子PLC和其他品牌不同,三菱或者发那克可以用Q点作为上升沿或是下降沿的符号。而在西门子PLC中这本身就是无效的。
第5个回答  2009-02-01
这样当然不行,PLC的扫描速度是很快的,你的手按下去时,都不知扫描了多少次了
相似回答