quote:以下是引用youhm在2012-06-29 18:08:42的发言:
O #relayrqjidianq
问题就在这里,当#relayrqjidianq的实参是一个绝对地址引用的DB块数据时,这个形参#relayrqjidianq将用一个临时变量来处理这个参数,做为一个OUT参数,块开始执行不会读取实参到形参里,所以这个临时变量就没有被赋值,所以当你的输入实参是一个绝对地址引用的DB块数据时,这条指令就违背了临时变量先赋值后使用的原则,因为系统很多时候临时变量区域是重叠使用的,所以临时变量要先赋值后使用,不然就会引起错误。
如何避免这个问题呢?
1.可以使用IN_OUT替换OUT,因为IN_OUT在块开始时会读入实参到形参,所以临时变量也就被赋值了
2.可以用OPN指令先打开数据块,在参数输入DBXx.y这样的数据,或者是其他区域M、Q等,因为这些做为实参时是直接访问实参地址,而不会使用临时变量
是这样啊,我在OB1中没有使用DB块数据,而是将所有的IN,OUT变量直接连到实际的输入输出地址上,将IN-OUT地址用M点连接的,所以基本上是没有动用临时变量的。我简单描述一下我的程序把,是用软启来拖两台泵。启动时先将软启继电器送运行信号同时将软启接触器合闸,延时10S后跳开软启运行信号和软启动接触器,再延时2S后将工频接触器合上。先前做的程序涉及到临时变量就全部修改到现在这个程序,感觉不知道用IN,OUT,还是IN_OUT来做程序中的临时中间变量(程序中需要过渡的变量,非设置临时变量的类型),帮忙看一下啊