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