quote:以下是引用youhm在2011-12-10 15:09:25的发言:
这是由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变量实际就是操作实参,不存在把一个不确定的临时变量值写入实参的情况。
谢谢,不过我还是不明白,V区指的是FC1中的L区吗?为什么DB块用V区,而M,I,Q不用V区?为什么置为复位出现这种情况,而线圈没问题???