块调用
郑志武
发布于2013-01-18 00:24
144
0
标签:
根据工程需要需要数值转换,但是fc105输入只有整数,不符合精度需要,需要精确到小数点后,于是就只好按照fc105帮助说明上面的公式自己做了个fc块,声明了in,out,temp等形参,实参都放在共享数据块,供其他块调用该fc时赋于实参,所有参数初始值都为零,但是做好后发现当某个调用块赋于被调用块某个确定的参数值时就有一个正确的数值输出(out),但问题是其他所有被调用块的输出都和前面调用块的输出(out)数值一样,而输入都是初始状态并没有改动,即使是程序有错也不会参数乱传递呀,如果用fb做,并且每个调用都创建不同的背景数据块该问题就不会发生,而用fc105这样的问题也不会出现!
问题补充:
为什么fc105不会出现上述情况
佳答案
这个可能是临时变量方面的原因,fc的参数如果是绝对地址引用的db块数据时,比如db1.dbd0这种形式,fc将使用临时变量来处理,对于一个out参数在块结束是把用于形参的临时变量值写入out变量的实参里,而临时变量使用要遵循先赋值后使用的原则,所以这种情况一定要保证在程序里对out变量写入一个确定的数值,否则out变量将得到一个不确定的值,因为临时变量的区域在块结束后可能被其他块重复使用,这样就出现了你问题描述的情况,你也可以用in_out替换out来避免这种情况,in_out类型在块开始时会读入实参到临时变量。