我用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类型。
提问者对于答案的评价:
谢谢 非常感谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc245548.html