发布于 2004-09-21 19:16:58
0楼
试了试,果然会有错误动作。
查了半天,可能跟CPU的L stack有关。
All the temporary variables (TEMP) of an OB and its associated blocks are saved in the L stack.
这是S7帮助中的一句,并且好像在FC切换的时候,L stack并不清空。
在你的FC1中temp2的地址是0.0,FC2中temp2的地址也是0.0。此时若M1.0=1,则temp2=1,当退出FC1后L stack的地址0.0仍为1。进入FC2后m2.0=0,temp5不更新,则temp5=0.0=1,输出自然为1。再FC2中再加一个TEMP变量,如temp7,则其地址为0.1,把程序中temp5的地方换成temp7,则一切正常。或者不加变量,在FC1中调FC2也正常。
看来以后少用TEMP变量,用的话就尽量错开地址或者在块开始处初始化。并且L stack空间并不大,s7-300只有256Byte,超了要出错。
还有一个小问题,我在CPU诊断中如何看B stack的内容?我按照提示将PLC拨到STOP,它确说没有可用的entries,为什么?
高手们有什么办法,希望不吝赐教。