发布于 2009-06-05 11:38:38
0楼
不是不能在块里面用延时,
而是在块里面用延时存在隐患;
举例:
FC13
Network 1:
A M 0.1
= Q 0.0
Network 2:
A M 2.0
L S5T#10S
SD T 0
A T 0
= M 2.1
OB1 :
Network 1:
A M0.0
CALL FC13
程序原理的目的:
在OB1中当M0.0为1 的时候,调用FC13,为0时,不调用FC13
FC13 中使用了 定时器;
故障现象:
假设某个时刻,M0.0 M0.1 M2.0都为1,并且维持数值1的时间超过了10秒,那么Q0.1,M2.1也都会为1.
假设此时M0.0变为0, FC13不再被调用,
则:FC13中的 Q M,会保持原来状态,T,C 会继续工作,
继续假设这个时候M0.0 再次变为1 ,并且 此时M2.0也为1,由于定时器保持着 计时到达的状态,M2.1会立刻变为1!
这就出问题了,本来我们以为 M2.1会延时10秒的,结果没有,而是立刻变为1!
这种情况可能会导致某些在 FC被调用后必须延时执行的逻辑立刻执行。
对于上述现象,如果编程人员能够确保上述现象不构成对人身及财产的伤害,则可以使用,不采取任何措施,否则应当加入限制程序,比如OB1 在调用 FC13时:
OB1应该如下
A M 0.0
= L 20.0
A L 20.0
JNB _001
CALL FC 13
_001: NOP 0
A L 20.0
NOT
R Q 0.0
R T 0
NOP 0
就是在 M0.0为0 时候,复位 定时器
以上摘自《STEP7编程常见错误》
知其道 用其妙