fc塊調(diào)用db塊 db不能當(dāng)輸出
鄭志武
發(fā)布于2012-12-27 17:49
9
0
標(biāo)簽:
用fc做了個(gè)程序塊,在ob1中調(diào)用他在輸出(out)的引腳中用了個(gè)db塊
當(dāng)我調(diào)用第二次fc輸出也用db塊。在測(cè)試當(dāng)中只測(cè)試個(gè)fc時(shí)db置1,為什么第二個(gè)fc的輸出引腳的db塊也置1呢?(第二個(gè)fc根本沒有滿足條件)當(dāng)我不用db塊,我用q或者m不會(huì)出現(xiàn)上述情況,這是為什么?
問題補(bǔ)充:
我把out這個(gè)引腳改成in/out的引腳就好了應(yīng)該不是樓下說的那樣
佳答案
這個(gè)問題是因fc調(diào)用的參數(shù)傳送機(jī)制引起的
當(dāng)fc的參數(shù)是一個(gè)絕對(duì)地址引用的db塊數(shù)據(jù)時(shí)(比如db1.dbx0.0),系統(tǒng)會(huì)為這個(gè)形參分配一個(gè)臨時(shí)區(qū)域(就是v區(qū),上一層程序的本地?cái)?shù)據(jù),即調(diào)用fc的塊的l區(qū)),眾所周知,臨時(shí)變量要遵循先賦值后使用的原則,對(duì)于這樣一個(gè)out類型的形參,塊被開始調(diào)用時(shí),并不會(huì)把實(shí)參(如db1.dbx0.0)賦值給形參,如果在fc塊里沒有對(duì)這個(gè)形參賦值,那么塊結(jié)束時(shí)就會(huì)把一個(gè)不確定的值(其他塊遺留在臨時(shí)變量區(qū)域的值)賦值給實(shí)參,這樣就會(huì)出現(xiàn)你描述的問題。
當(dāng)這個(gè)參數(shù)是in/out類型時(shí),fc塊被調(diào)用開始時(shí),會(huì)把實(shí)參(如db1.dbx0.0)賦值給形參(in參數(shù)的特性),這樣既使在fc塊里沒有對(duì)形參賦值,形參也不會(huì)是一個(gè)不確定的值,而是把原來的實(shí)參值重新賦值給實(shí)參,所以結(jié)果就和out類型不一樣。
所以在fc使用db塊絕對(duì)地址引用的變量作為out類型變量實(shí)參時(shí),一定要確保對(duì)形參賦值,否則就用in/out替換out類型。