行業快訊


先賦值后使用

 1、TEMP區的問題
在《本地數據TEMP》這篇文章中我們用一個簡單的加法程序向大家演示了TEMP區的使用,但是我們在主程序OB1中只調用了1次,當我們多次調用這個程序的時候大家就會發現一個問題,無論我們調用幾次,做幾次加法運算都只能算出一個結果,如1-1所示我們在主程序中調用了三次FC1,雖然只是在第一次的調用中激活了加法運算,但是可以發現程序段2和程序段3雖然并沒有進行計算但是卻得出了和程序段1相同的結果。

                                      

 

1-1
那么問題出在哪里呢,其實問題的關鍵就出在了本地數據TEMP區,讓我們一起來回顧一下FC1的程序吧。
接口
 
1-2
接口數據類型
接口
數據類型
add1
INT
add2
INT
add3
INT
add3_3
INT
start
BOOL
 
1
FC1
在這個程序中我們可以看到,加法的運算結果是先存放到本地數據add3中然后再由add3傳送到輸出接口add3_3
 
1-4

這里我們可以看到本地數據add3的起始地址是0.0由于是Int數據類型,因此add3占用的是FC1的本地數據LW0這個存儲空間,由FC1程序可以看出只要add3被賦值,那么FC1就一定會將add3中的內容進行輸出,因此當我們在主程序OB1中激活了第一段的加法,第二第三段在沒有激活的情況下就跟著將第一段的結果一起輸出了。

2、先賦值后使用
那么該如何避免這種情況的發生呢?這里我們就一定要用到先賦值后使用的方法,來避免這種情況的發生。那么怎么使用才算是先賦值后使用呢?其實非常簡單,就是一定要保證建立好的本地數據時時刻刻都被占用,這個方法讓我總結就是一個蘿卜一個坑,先來先占,后到的蘿卜PLC會自動給他分配別的本地數據區的位置,這樣就不會出現上面那種相互干擾的情況出現了。那么TEMP區的本地數據怎么才算被時時刻刻都被占用呢?下面我們還是用這個加法的程序給大家舉例。我們要做的只是把13中的常開觸點start和接口start一并刪除即可,刪除后如21所示。
 
2-1

那么為什么我們只需要將第一段加法指令前面的常開觸點刪除就可以達到先賦值后使用的效果呢?其實大家可以仔細想一想,當加法指令前有常開觸點的時候,如果當這個常開觸點是斷開的時候我們這個加法指令是不進行計算的,當不進行計算的時候本地數據add3就不處于被占用的狀態,達不到時時刻刻都被占用的效果,而當我們把這個常開觸點刪除后add3就不存在不被占用的情況了,換句話說就是現在add3已經達到了被時時刻刻占用的效果了,這就是先賦值后使用,由22可見使用了先賦值后使用以后就不會再出現輸出結果相互干擾的情況了。
 
2-2
-------------------------------
作者:馬樂
版權所屬: 技成培訓網