发布于 2011-12-10 15:09:25
1楼
这是由FC的参数传递方式引起的,当FC的参数是一个绝对地址引用的DB块数据时,将为这个参数分配一个临时区域用于参数值的传递,就像你这种情况DB1.DBX0.1做为一个OUT参数的实参,为其分配的临时区域处于V区,这个V区是上一层程序的本地数据,也就是调用这个FC的块的临时变量区域L区,做为一个临时变量,如果你在FC里没有对它OUT进行赋值,那么它将会是一个不确定的值,块执行完后就会把这个具有不确定值的临时变量写入OUT变量的实参DB1.DBX0.1,如果使用IN_OUT类型的话,FC块开始会读入实参DB1.DBX0.0到临时变量,所以即使在FC没没有执行对输出OUT的写入,临时变量里也不会是一个不确定的值,块结束后会把临时变量里读入原来的值写如IN_OUT的实参。当FC的参数使用M、I、Q等区域时参数传递的是地址,也就是说在FC里操作OUT变量实际就是操作实参,不存在把一个不确定的临时变量值写入实参的情况。