塊調(diào)用
鄭志武
發(fā)布于2013-01-18 00:24
144
0
標(biāo)簽:
根據(jù)工程需要需要數(shù)值轉(zhuǎn)換,但是fc105輸入只有整數(shù),不符合精度需要,需要精確到小數(shù)點(diǎn)后,于是就只好按照fc105幫助說明上面的公式自己做了個(gè)fc塊,聲明了in,out,temp等形參,實(shí)參都放在共享數(shù)據(jù)塊,供其他塊調(diào)用該fc時(shí)賦于實(shí)參,所有參數(shù)初始值都為零,但是做好后發(fā)現(xiàn)當(dāng)某個(gè)調(diào)用塊賦于被調(diào)用塊某個(gè)確定的參數(shù)值時(shí)就有一個(gè)正確的數(shù)值輸出(out),但問題是其他所有被調(diào)用塊的輸出都和前面調(diào)用塊的輸出(out)數(shù)值一樣,而輸入都是初始狀態(tài)并沒有改動(dòng),即使是程序有錯(cuò)也不會參數(shù)亂傳遞呀,如果用fb做,并且每個(gè)調(diào)用都創(chuàng)建不同的背景數(shù)據(jù)塊該問題就不會發(fā)生,而用fc105這樣的問題也不會出現(xiàn)!
問題補(bǔ)充:
為什么fc105不會出現(xiàn)上述情況
佳答案
這個(gè)可能是臨時(shí)變量方面的原因,fc的參數(shù)如果是絕對地址引用的db塊數(shù)據(jù)時(shí),比如db1.dbd0這種形式,fc將使用臨時(shí)變量來處理,對于一個(gè)out參數(shù)在塊結(jié)束是把用于形參的臨時(shí)變量值寫入out變量的實(shí)參里,而臨時(shí)變量使用要遵循先賦值后使用的原則,所以這種情況一定要保證在程序里對out變量寫入一個(gè)確定的數(shù)值,否則out變量將得到一個(gè)不確定的值,因?yàn)榕R時(shí)變量的區(qū)域在塊結(jié)束后可能被其他塊重復(fù)使用,這樣就出現(xiàn)了你問題描述的情況,你也可以用in_out替換out來避免這種情況,in_out類型在塊開始時(shí)會讀入實(shí)參到臨時(shí)變量。