quote:以下是引用划痕在2011-09-20 10:01:55的发言:
处理方法如下——
在自定义的FB中第一个网络里这样写:
TAR1 #dwSAVE_Ar1
TAR2 #dwSAVE_AR2
在最后一个网络里这样写:
LAR1 #dwSAVE_Ar1
LAR2 #dwSAVE_AR2
处理原理:在自定义的FB使用地址寄存器时,首先将AR1和AR2保存起来(因为其他程序可能也在使用地址寄存器),然后在自定义的FB中使用AR1和AR2<注意对AR1和AR2的初始化!>,使用结束后将原来保存的AR1和AR2值还原,这样处理不会引起AR1和AR2使用的冲突!!类似于中断程序,对断点的保护一样!!
<以上是我的理解,当然还有很多不足之处,我也在思考中,还请多多指教>
我就是这么做的,但是根本不会管用。
你这样做,仅仅在你当前使用的FB、FC内暂存了AR而已。 当你使用FB,而且还要在该FB内使用AR2,请问,你这样处理行吗?
你这样做,仅能避免: 当某一个FB/FC正在执行(且该FB/FC内使用了AR2),此时产生了中断OB,而在中断OB内执行了某些操作,会导致AR或者ACC的变化。 故凡是可能被中断OB操作,或者其他方式调用的FC/FB最好暂存AR,完成操作后再恢复AR。
但是它不能解决我想在FB内使用AR2的问题, 按照我现在的理解就是在FB内不能使用AR2…… 想要用AR2,只能在FC内。 所以我这次做的配方程序就改用了FC+全局DB (全局DB用来存储配方数据)。