发布于 2006-06-19 19:35:05
0楼
BR仅仅是一个系统位,没啥特殊的。当你用梯型图编程的时候,系统会自动管理BR位。 而当你用STL编程的时候,并且如果你想知道在一段即有“字”操作,又有“位”操作的程序段中,“字”操作是否正常? 这时你可以借助管理BR位检测出来! 因为S7-200和S7-300里对于“字”的操作是不同的,前者要依赖于RLO状态,而后者不论RLO状态如何,L和T都会执行,比如:
LD I1.1
MOVW 2,VW0
以上为200系统,那么只有当I1.1为1时,下面的MOVE指令才会执行!
而对于300的系统
A I1.1
L 2
T DB1.DBW0 不论I1.1的状态如何,系统都会把2赋值给DB1.DBW0. 若想达到和S7-200同样的效果,则需要用跳转指令,比如指令JNB(当RLO为0时进行跳转,且不管RLO的状态如何,都会把RLO赋值给BR位),那么你可能会想如下操作:
A I1.1
JNB _001
L 2
T DB1.DBW0
_001:NOP 0
以上程序也是仅当I1.1为1时,系统会把2赋值给DB1.DBW0 。 可是光有这些还是不够的。 因为系统不是万能的,它也有出错的时候! 意思是即使你I1.1=1了,系统执行了那条赋值指令了,可是系统在执行赋值指令的时候出错了呢? 这是有可能的! 若你想检测那条赋值指令(即,关于“字”的操作)是否正确执行了?这时你就需要管理BR位了! 如下
A I1.1
JNB _001
L 2
T DB1.DBW0
SET //若以上的赋值操作正确执行了,系统才会往下执行(PLC是从上往下扫描的,这时强制RLO=1
SAVE //把RLO赋值给BR,即BR=1
CLR //清除掉RLO,即RLO=0 (因为上面的SET强制为1,这时要清零)
_001:NOP 0
A BR //仅当I1.1为1时,赋值指令才会执行,同是仅当赋值指令正确执行了,BR位才会为1 !!!
= Q0.0
再反过来如果你熟悉S7-200的话,知道它的字操作后面有个ENO吗? 就是这个能流表达了和BR同样的意义。
I can do it