大家好,收到粉絲投稿,讓博主講下Static變量和Temp變量的區(qū)別,新入行的兄弟可能會對這兩個概念不太能理解。
那么本期通過幾個簡單的小示例,并且配合PLC程序執(zhí)行函數(shù)功能塊的工作原理,來講透Static和Temp的區(qū)別,為什么會有這兩種類型的變量,分別用于解決什么樣的問題,以及使用時的注意事項。
第一個例子,功能非常非常簡單,輸入?yún)?shù)req為True時,將變量自增一下,也就是加1,在Static區(qū)和Temp區(qū)分別建立了UDINT類型的變量來存儲總共收到了多少次有效請求。

來測試一下,可以看到,隨著請求信號req的變化,tempCounter一直是0,而statCounter則一直在累加。

這是為什么呢?同樣都是在FB功能塊內(nèi)部定義的變量,只是一個在Static區(qū),一個在Temp區(qū),為什么結(jié)果會不同?其實tempCounter會在短暫的一段時間里面,值是為1的,可以這樣試一下。

這恰好正是它們的區(qū)別所在,我們來從名稱上看,Temp的意思是臨時的,臨時也就意味著定義在它下面的變量,這些變量只是臨時存在的,只會在有限的時間內(nèi)存在,這個有限的時間是多少呢?那就是當(dāng)前這個塊的執(zhí)行時間,也就是當(dāng)程序執(zhí)行到這個塊時,才會將Temp區(qū)的變量創(chuàng)建出來,當(dāng)程序執(zhí)行完這個塊以后,就會將Temp區(qū)的變量銷毀。
而Static的意思是靜態(tài),靜態(tài)也就意味著它是一直存在的,而不是程序執(zhí)行時創(chuàng)建出來的,Static區(qū)的變量,在你將程序下載到PLC時就創(chuàng)建出來,并且一直存在了。
這也正是我們常常說的,Static區(qū)的變量是有記憶的,而Temp區(qū)的變量是沒有記憶。
Temp的人生是在不停的輪回,就像喝了孟婆湯,是沒有前世的記憶。而Static是長生不老的,是永恒的。
我們再從工作原理上看一下功能塊的執(zhí)行過程發(fā)生了什么?當(dāng)程序在Main OB中執(zhí)行到我們定義的功能塊時,會在通常叫做棧的存儲區(qū)給它分配一片區(qū)域,標(biāo)記為給它使用,在這片區(qū)域上將Temp區(qū)的變量創(chuàng)建出來,然后執(zhí)行功能塊程序,如果這個功能塊內(nèi)部還有函數(shù)或是功能塊時,在執(zhí)行到它的時候,同樣會在棧的區(qū)域上創(chuàng)建Temp區(qū)的變量,而在相應(yīng)的函數(shù)或是功能塊執(zhí)行結(jié)束時,會將棧上為它分配的區(qū)域標(biāo)記為未使用。
這也正是為什么說Temp區(qū)變量在使用時要初始化,因為那片存儲區(qū)域已經(jīng)被使用過,臟了,是不干凈的,你不知道上次留在里面的值是100還是0。

再來看第二個例子,比如我們有幾個FB和FC,互相間存在調(diào)用,然后我們在資源中的調(diào)用結(jié)構(gòu)就可以發(fā)現(xiàn),局部數(shù)據(jù),也就是臨時變量,是在調(diào)用執(zhí)行期間才會占用空間,而Static區(qū)數(shù)據(jù)是存在DB數(shù)據(jù)塊上的。



那為什么要有Temp變量,我全使用Static變量行不行?
當(dāng)然可以,但這會帶來兩個問題。我們來看這段程序

很簡單的一段統(tǒng)計產(chǎn)品良率的程序,這只是一小段程序,用了3個Temp變量,當(dāng)然可以將它們都定義成Static,不影響功能,但是會占用Static區(qū)的空間,我們知道PLC的工作空間是有限的,這是第一個問題,會不必要的增加空間占用。第二個問題是,我們?nèi)タ催@個DB數(shù)據(jù)塊時,會多很多這種用于臨時計算使用的變量,顯得不夠簡潔,特別是當(dāng)程序量比較大時。
所以,對于這類只是臨時中間計算使用,就把它存到Temp中去。
-
plc
+關(guān)注
關(guān)注
5051文章
14594瀏覽量
486893 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67502 -
變量
+關(guān)注
關(guān)注
0文章
616瀏覽量
29505
原文標(biāo)題:一文講透PLC中Static和Temp變量的區(qū)別
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
static函數(shù)與普通函數(shù)有什么區(qū)別?
static的全局變量與局部變量的使用,看完你就懂了
c語言static的作用
C語言register變量和extern及static等知識總結(jié)
C語言中static和extern的區(qū)別介紹
基于static變量來實現(xiàn)一個模塊的封裝
西門子PLC的局部變量使用技巧
為什么C++單例模式不能直接全部使用static變量和static函數(shù)呢?
JAVA中static、final、static final如何區(qū)分
Java中對static關(guān)鍵詞的介紹
什么是變量?PLC變量哪些部分組成?
PLC中Static和Temp變量的區(qū)別
評論