局部數(shù)據(jù)堆棧L堆棧保存有:
1、塊的本地數(shù)據(jù)的臨時變量
2、組織塊的啟動信息
3、關(guān)于傳送參數(shù)的信息
4、梯形圖程序中邏輯的中間結(jié)果
當(dāng)對組織塊編程時,可以聲名臨時變量(TEMP)只在塊執(zhí)行期間可用,然后它將被覆蓋。在首次訪問本地數(shù)據(jù)堆棧之前,必須對本地數(shù)據(jù)初始化。除此之外,每個組織塊還需要20個字節(jié)的本地數(shù)據(jù)來存儲它們的啟動信息。
CPU只能為當(dāng)前執(zhí)行的塊的臨時變量(本地數(shù)據(jù))提供有限的存儲空間。該存儲器區(qū)本地數(shù)據(jù)堆棧的大小取決于CPU。本地數(shù)據(jù)堆棧被各優(yōu)先級均分(默認)。也就是說每個優(yōu)先級都有它自己的本地數(shù)據(jù)區(qū),從而保證了較高的優(yōu)先級和它們的OB自身的本地數(shù)據(jù)有可用的空間。
下圖用一個實例給出了優(yōu)先級的本地數(shù)據(jù)分配,其中在L堆棧中,OB1被OB10中斷,而后者又被OB81中斷。
注意事項:
1、當(dāng)使用臨時變量時,請牢記它們僅在相關(guān)塊內(nèi)有效或僅可作為在該塊中調(diào)用的其它塊的以前本地數(shù)據(jù)使用。尤其,當(dāng)在關(guān)閉并重新打開塊時,不能確保臨時變量具有與完成上一次塊調(diào)用時相同的數(shù)值。當(dāng)調(diào)用塊時,臨時變量被定義為未定值,且當(dāng)在塊中初次使用臨時變量時,必須重新初始化。 2、OB和它相關(guān)的塊中所有的臨時變量(TEMP)都保存在L堆棧中。如果使用了過多的嵌套的層,在執(zhí)行塊時,L堆棧可能會溢出。 3、如果超出一個L堆棧的允許大小,CPU將切換到STOP模式。 4、測試程序中的L堆棧(臨時變量)。 5、同步錯誤OB的本地數(shù)據(jù)需求也必須加以考慮。
分配本地數(shù)據(jù)給優(yōu)先級 本地數(shù)據(jù)堆棧中,并不是每個優(yōu)先級都需要同樣大小的存儲空間。在STEP 7中,通過分配參數(shù),可以為S7-400 CPU和CPU 318的各個優(yōu)先級分配不同大小的本地數(shù)據(jù)區(qū)。任何不需要的優(yōu)先級都可以將其取消。這樣S7-400 CPU和CPU 318中其它優(yōu)先級的存儲器區(qū)便增大了。在程序執(zhí)行期間,取消激活的OB將被忽略,以節(jié)省循環(huán)時間。 而對于其它的S7-300 CPU,每個優(yōu)先級被分配了固定大小的本地數(shù)據(jù)(256個字節(jié)),不能對其修改。
|