首先,-1.#IND出現的原因是程序在做除法時出現除數為0的情況。如圖1
圖1
從圖1可以看到,這里有三行數學運算的代碼,除數分別是變量Rated_Power_SUM、Rated_Power,第
三行與第二行的除數相同,最后運算結果儲存在變量Set_Power等變量中。眾所周知,在做除法運算時,除數不
能為0,所以在這三行代碼中存在一個問題:那就是當系統運行時,若這兩個除數變量的值為0,則最后運算的結
果是有問題的,會出現圖2中的情況:
圖2
從圖2可以看出,第一行代碼的運算結果所儲存的變量Set_Power顯示的值為-1.#IND。
如果把此變量顯示在WINCC界面中,會顯示如圖3:
圖3
從圖3可以看出,在WINCC的運行界面中的輸入輸出域之中都顯示有感嘆號,代表着數據異常或者通訊異常。
原因就是運算時除數出現為0的情況,導致最后的結果數據異常。
那么應該怎么解決這個問題呢?
我們可以從程序上解決,怎么解決呢?小編已更改完畢,在這里直接上圖,如圖4:
圖4
從圖4可以看出,程序在原來的基礎上增加了IF判斷語句,判斷的是下一行代碼中的除數變量的值,當除數
變量的值不為0時,才允許繼續進行下面的運算;若除數變量的值為0,則跳過這一段代碼。若代碼中的除數直接
是一個常量,則只需注意這常量不能賦值為0。很簡單吧?最后附上更改代碼的效果圖:
圖5
圖6
從圖5可以看出,除數變量已經不再顯示-1.#IND,而是顯示數字0;而圖6可以看出WINCC界面中對應的輸
入輸出域顯示也已經正常,不再顯示感嘆號,這也是我們想要的效果。
總結而言,當除數用的是變量時,需要注意該變量不能為0。
歡迎各位大神點評指教。