儲存器管理
CPU 提供了以下用於儲存使用者程式、資料和組態的儲存區:
● 裝載儲存器,用於非易失性地儲存使用者程式、資料和組態。將專案下載到 CPU
後,CPU 會先將程式儲存在裝載儲存區中。該儲存區位於儲存卡(如存在)或 CPU
中。CPU 能夠在斷電後繼續保持該非易失性儲存區。儲存卡支援的儲存空間比 CPU
內建的儲存空間更大。
● 工作儲存器是易失性儲存器,用於在執行使用者程式時儲存使用者專案的某些內容。CPU
會將一些專案內容從裝載儲存器複製到工作儲存器中。該易失性儲存區將在斷電後丟
失,而在恢復供電時由 CPU 恢復。
● 保持性儲存器,用於非易失性地儲存限量的工作儲存器值。斷電過程中,CPU
使用保持性儲存區儲存所選使用者儲存單元的值。如果發生斷電或掉電,CPU
將在上電時恢復這些保持性值。
要顯示編譯程式塊的儲存器使用情況,請右鍵單擊 STEP 7 專案樹中“程式塊”(Program
blocks)
資料夾中的塊,然後從上下文選單中選擇“資源”(Resources)。“編譯屬性”(Compiliation
properties) 顯示了編譯塊的裝載儲存器和工作儲存器。
要顯示線上 CPU 的儲存器使用情況,請雙擊 STEP 7 中的“線上和診斷”(Online and
diagnostics),展開“診斷”(Diagnostics),然後選擇“儲存器”(Memory)
保持性儲存器
將某些資料標記為保持性資料可以避免發生電源故障後造成資料丟失。該 CPU
允許您將以下資料配置為保持性資料:
● 位儲存器 (M):可以在 PLC
變量表或分配列表中定義位儲存器的保持性儲存器的大小。保持性位儲存器總是從
MB0 開始向上連續貫穿指定的位元組數。透過 PLC
變量表或在分配列表中透過單擊“保持性”(Retain) 工具欄圖示指定該值。輸入從 MB0
開始保留的 M 位元組個數。
注意:對於任何塊,都可透過在“程式塊”(Program blocks)
資料夾中選擇塊,然後選擇“工具 > 分配列表”(Tools > Assignment list)
選單命令來顯示分配列表。
● 函式塊 (FB) 的變數:如果 FB 為“最佳化塊訪問”(Optimized block access) 型別,則該
FB 的介面編輯器將包含“保持”(Retain)
列。在該列中,可以單獨為每個變數選擇“保持”(Retain)、“非保持”(Non-retain) 或“在
IDB 中設定”(Set in IDB)。將此類 FB 置於程式中時,和該 FB 對應的例項 DB
也將包含此“保持”(Retain) 列。在最佳化的 FB 中,如果在變數的“保持性”(Retain)
選項中選擇“在 IDB 中設定”(Set in IDB)(在背景資料塊中設定),那麼只能更改背景
DB 介面編輯器中某個變數的保持性狀態。
如果 FB 非“最佳化塊訪問”(Optimized block access) 型別,則該 FB
的介面編輯器將不包含“保持”(Retain) 列。將此類 FB 置於程式中時,和該 FB
對應的例項 DB 仍將包含一個可進行編輯的“保持”(Retain)
列。如果是這種情況,在選擇所有變數時為任意變數結果選擇“保持”(Retain)
選項。同樣,在取消選擇所有變數時為任意變數結果取消選擇該選項。
要檢視或修改 FB 是否已最佳化,開啟 FB 屬性然後選則屬性。
● 全域性資料塊的變數:在保持性狀態分配方面,全域性 DB 與 FB
類似。根據塊訪問設定情況,使用者可以定義全域性資料塊的單個變數或所有變數的保持
性狀態。
– 如果在 DB
建立時選擇“最佳化”(Optimized),則可以設定每個單獨變數的保持性狀態。
– 如果在建立 DB 時選擇“標準 - 與 S7-300/400 相容”(Standard - compatible with S7-
300/400),則該保持性狀態的設定將適用於該 DB
的所有變數;即變數要麼都具有保持性,要麼都沒有該 CPU 最多支援 10240 位元組的保持性資料。要了解可用保持性位元組數,請在 PLC
變量表或分配列表中單擊“保持性”(Retain) 工具欄圖示。儘管這裡是為 M
儲存器指定保持性範圍的地方,但第二個箭頭會指示可用於 M 和 DB
的總剩餘儲存空間。請注意,要保證該值的準確性,必須編譯帶有保持性變數的所有資料塊
系統和時鐘儲存器
使用 CPU 屬性可啟用“系統儲存器”和“時鐘儲存器”的相應位元組。
程式邏輯可透過這些函式的變數名稱來引用它們的各個位。
● 可以將 M 儲存器的一個位元組分配給系統儲存器。
該系統儲存器位元組提供了以下四個位,使用者程式可透過以下變數名稱引用這四個位:
– 第一個週期: (變數名稱“FirstScan”)在啟動 OB
完成後的第一次掃描期間內,該位設定為 1。
(執行了第一次掃描後,“首次掃描”位將設定為 0。)
– 診斷狀態變化: (變數名稱: “DiagStatusUpdate”)在 CPU
記錄了診斷事件後的一個掃描週期內設定為 1。 由於直到首次程式迴圈 OB
執行結束,CPU 才能置位“DiagStatusUpdate”位,因此使用者程式無法檢測在啟動
OB 執行期間或首次程式迴圈 OB 執行期間是否發生過診斷更改。
– 始終為 1(高)(Always 1 (high)): (變數名稱“AlwaysTRUE”),該位始終設定為
1。 – 始終為 0(低)(Always 0 (low)): (變數名稱“AlwaysFALSE”),該位始終設定為
0。 ● 可以將 M 儲存器的一個位元組分配給時鐘儲存器。
被組態為時鐘儲存器的位元組中的每一位都可生成方波脈衝。 時鐘儲存器位元組提供了 8
種不同的頻率,其範圍從 0.5 Hz(慢)到 10 Hz(快)。
這些位可作為控制位(尤其在與沿指令結合使用時),用於在使用者程式中週期性觸發動作系統和時鐘儲存器
使用 CPU 屬性可啟用“系統儲存器”和“時鐘儲存器”的相應位元組。
程式邏輯可透過這些函式的變數名稱來引用它們的各個位。
● 可以將 M 儲存器的一個位元組分配給系統儲存器。
該系統儲存器位元組提供了以下四個位,使用者程式可透過以下變數名稱引用這四個位:
– 第一個週期: (變數名稱“FirstScan”)在啟動 OB
完成後的第一次掃描期間內,該位設定為 1。
(執行了第一次掃描後,“首次掃描”位將設定為 0。)
– 診斷狀態變化: (變數名稱: “DiagStatusUpdate”)在 CPU
記錄了診斷事件後的一個掃描週期內設定為 1。 由於直到首次程式迴圈 OB
執行結束,CPU 才能置位“DiagStatusUpdate”位,因此使用者程式無法檢測在啟動
OB 執行期間或首次程式迴圈 OB 執行期間是否發生過診斷更改。
– 始終為 1(高)(Always 1 (high)): (變數名稱“AlwaysTRUE”),該位始終設定為
1。 – 始終為 0(低)(Always 0 (low)): (變數名稱“AlwaysFALSE”),該位始終設定為
0。 ● 可以將 M 儲存器的一個位元組分配給時鐘儲存器。
被組態為時鐘儲存器的位元組中的每一位都可生成方波脈衝。 時鐘儲存器位元組提供了 8
種不同的頻率,其範圍從 0.5 Hz(慢)到 10 Hz(快)。
這些位可作為控制位(尤其在與沿指令結合使用時),用於在使用者程式中週期性觸發動作CPU 在從 STOP 模式切換到 STARTUP 模式時初始化這些位元組。 時鐘儲存器的位在
STARTUP 和 RUN 模式下會隨 CPU 時鐘同步變化。
請大家多多支援,點贊關注