关于AR1,AR2及DB,DI的使用注意事项。1.数据块寄存器描述S7-300/400CPU拥有2个数据块寄存器,它们保存着当前打开的数据块编号:DB寄存器保存着打开的共享数据块编号;DI寄存器保存着打开的背景数据块编号;!注意:DI寄存器主要用于FB引用背景数据块,但也常用于程序中同时打开2个数据块的操作。举例:OPNDB1OPNDI2LDBW0TDIW0就能实现把DB1.DBW0赋给DB2.DBW0的功能。在线监视状态如上图:2.STEP7编程中,应清楚当前所打开的DB寄存器的内容,否则将会发生错误。下面2种常见的导致DB寄存器内容改变的例子,应在程序中予以避免。以绝对地址对DB块的访问如以下语句:OPNDB1当前打开的DB为DB1LDB2.DBW0绝对引用方式,此时打开的DB已变为DB2TDBW2DB2.DBW0→DB2.DBW2在线监视状态如上图:FB的多重背景调用;在程序中,在引用了一个多重背景FB后,应该重新打开一次所用的DB块。二:AR1,AR2在程序中的变化:为了清除程序中AR1,AR2寄存器内容的变化,我们来做一个实验。首先,我们建立一个FC1,程序内容如下,并在线监视其内容:在OB1中编写如下程序:监视后可以发现,在调用FC1后,AR1和AR2的内容已经发生了改变,如果在编程过程中调用FC1后没有注意到这一变化,势必给程序带来错误!解决办法:在FC1的程序块中,开始可以把AR1和AR2,以及DB,DI的值保存起来,在程序末尾,再将保存出来的值释放,恢复AR1,AR2,DB,DI的内容,具体如下:在FC1的临时变量中建立如下变量:AR1_SAVE:DINT;AR2_SAVE:DINT;DB_SAVE:INT;DI_SAVE:INT;在NETWORK1中编写如下程序:在程序的末尾编写如下程序:这样便保证了从FC返回后,确保寄存器内容的正确性,下面我们再来看看OB1中程序运行情况:可以看到,再调用FC1后,AR1,AR2的内容仍保持调用前的内容不变。综上,为了养成良好的编程习惯,确保FC功能块的正确执行,建议在所有的FC程序块中都加上如上的处理过程。