fc块调用db块 db不能当输出
郑志武
发布于2012-12-27 17:49
9
0
标签:
用fc做了个程序块,在ob1中调用他在输出(out)的引脚中用了个db块
当我调用第二次fc输出也用db块。在测试当中只测试个fc时db置1,为什么第二个fc的输出引脚的db块也置1呢?(第二个fc根本没有满足条件)当我不用db块,我用q或者m不会出现上述情况,这是为什么?
问题补充:
我把out这个引脚改成in/out的引脚就好了应该不是楼下说的那样
佳答案
这个问题是因fc调用的参数传送机制引起的
当fc的参数是一个绝对地址引用的db块数据时(比如db1.dbx0.0),系统会为这个形参分配一个临时区域(就是v区,上一层程序的本地数据,即调用fc的块的l区),众所周知,临时变量要遵循先赋值后使用的原则,对于这样一个out类型的形参,块被开始调用时,并不会把实参(如db1.dbx0.0)赋值给形参,如果在fc块里没有对这个形参赋值,那么块结束时就会把一个不确定的值(其他块遗留在临时变量区域的值)赋值给实参,这样就会出现你描述的问题。
当这个参数是in/out类型时,fc块被调用开始时,会把实参(如db1.dbx0.0)赋值给形参(in参数的特性),这样既使在fc块里没有对形参赋值,形参也不会是一个不确定的值,而是把原来的实参值重新赋值给实参,所以结果就和out类型不一样。
所以在fc使用db块绝对地址引用的变量作为out类型变量实参时,一定要确保对形参赋值,否则就用in/out替换out类型。