quote:以下是引用8709在2011-12-07 18:33:23的发言:quote:以下是引用youhm在2011-12-05 11:06:21的发言:
注意参数的传递就可以了,如果OUT类型的参数使用了DB块绝对地址引用(如DB1.DBX0.0),那么要保证在FC里一定要对这个OUT变量刷新,否则可能得到一个不确定的值,或者是使用IN_OUT类型替代OUT类型。
不是很理解,请大侠解释!
因为传递如DB1.DBW0这样的实参,实际是使用临时变量来操作的,就和S7-200里调用子程序一样,而其他区域如MW0这样的实际传递是地址。
比如FC一个OUT参数使用DB1.DBW0,在FC里为其分配一个临时变量(处于V区,也就是调用这个FC的块的L区),在FC里对OUT参数写入就是先写入这个临时变量,块执行结束后,再由临时变量写入到实参DB1.DBW0,如果在FC里没有执行对这个OUT参数写入,那么临时变量也就没有被赋值,将会是一个不确定的值,块结束后会把这个不确定的值写入到DB1.DBW0,如果改成IN_OUT类型,则块开始会把实参DB1.DBW0的值读入对应的临时变量,既使在块里没有执行对这个形参的写入操作,因为临时变量已经读入了原来的值,块结束后会把临时变量里原来的值写入实参DB1.DBW0。