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