发布于 2007-09-17 22:48:54
0楼
参数传递:
如果FC的输入、输出或输入/输出参数被赋值为常量,或保存在DB中的参数,那么STL/LAD/FBD编辑器首先在主调L堆栈中保留必要的存储空间,然后复制—>带有输入和输入/输出参数-->L堆栈中实参的值。
对于输出参数,在L堆栈中保留存储区域,但没有初始化。
然后才实际切换到被调用FC,此时STL/LAD/FBD编辑器在每次传递一个区域交叉指针到被调FC的L堆栈区域。
跳转回主调块后,结果-->带有输入和输入/输出参数-->将复制到实参。
结果:
这个机制表明了在被调FC中,输入参数只能被扫描,输出参数只能被写入。
如果输入参数被写入,相应值被保存在L堆栈,但是在FC处理之后不能被复制到实参。同样,输出 参数只能写不能读。扫描输出参数时,从L堆栈读到未定义值,因为没有被初始化。
输入/输出参数引起的问题较少。它们在FC调用之前赋值为实参的值,在调用之后移除。
注意事项:
在被调FC中,必须写输出参数(避免使用指令如“S”和“R”),否则将从L堆栈中复制未定义值到实参。
如果不能确保写入输出参数,应选择使用输入/输出参数来代替。
学如逆水行舟,不进则退