如何計算當前程序所需的Local Data 大小并合理設置S7 400 CPU 屬性中的Me mory選項卡中的Local Data,S7 400 CPU 中的Local data 設置不當會導致什么問題?
Local data 顧名思義為本地數據,在西門子控制器中有一部分內存空間被設置為L 區間,它被用于控制器在運行程序時存儲臨時數據。由于編寫FB/FC 程序的需要和OB 中調用功能塊結構的不同,不同的OB 由于調用不同的FB/FC,因此所需的Local data 的大小各不相同(被調用的FB/FC 將占用當前調用他的OB 塊的Local Data 資源)。在控制器硬件組態中的CPU 屬性設置中,Memory 選項卡用于設置Local data 的分配。如果相應OB 塊實際運行所需的Local data 大于硬件組態中所設置的Local Data 大小,那么相應的程序將無法運行,CPU 將報告INTF 錯誤,甚至更為嚴重的情況下CPU 可能會停止運行。但如果盲目將
Local Data 的分配設置過大,將會浪費一部分寶貴的CPU 內存空間。
S7 300CPU 中的Local data 不可修改,每個優先級固定設置為256 bytes,S7- 400 的Localdata 則可以人為修改。由此可以看出正確設置S7400 CPU 的Local Data 的大小非常重要。在控制器硬件組態中CPU 屬性?? Memory 選項卡的Local Data 區域用于設置基于優先級的Local Data(如下圖所示):
在 PCS7 組態的項目中,在編譯CFC 程序后,系統將會自動計算各OB 塊所需的Local Data 大小,可以通過交叉索引(Chart reference data -Local data,如下圖所示)查詢到。
而普通的由用戶采用Step7 編程方式編寫的程序,程序功能塊及OB 塊各自的調用結構由用戶自行控制,需要在編寫完整個程序之后自行計算。
在手動計算 Local Data 時,需要獲取如下信息:
1. 各OB 塊、FB 塊、FC 塊各自獨立運行時所需的Local Data 大小可以通過如下方式查詢到:在 Block 文件夾中選擇相應功能塊,右鍵屬性?? General -
Part2 中即可查看到,如下圖所示:
注:嵌套調用時,上一級功能塊將不會計算其嵌套調用的FB/FC 所需的Local data 大??;在上圖中將不會累加嵌套功能塊所需的Local data 大?。?/p>
2. 整個程序的調用結構(Call structure)
由于功能塊不會計算其嵌套調用的功能塊所需到 Local data 大小,因此為了Zui后計算整個OB 所需到Local Data,必須了解整個程序的調用結構。打開任何一個功能塊,點擊左側的Call Structure 即可查詢到,如下圖所示;
3. 當前程序下所使用的所有OB 的優先級
由于 CPU 屬性設置中的Local Data 分配基于優先級進行設置,因此需要查看所有當前程序使用的OB 塊的中斷優先級,打開硬件組態中CPU 屬性查看,如下圖所示;
獲得所有上述信息后,即可計算當前程序所需的Local data 大小。假設當前項目下使用的功能塊及OB 塊上述相關信息如下表所示:
OB 的調用關系如上圖Pic4 所示。根據調用結構計算,單獨運行各OB 塊時所需的Local data 如下:
OB1: OB1 + Max(Sum(FB1,FC1), FC1) =26+Max(Sum(100,400), 400)=526
OB35: OB35 + Sum(FB1,FC1) =26+Sum(100,400)=526
OB121: OB121=20
OB122: OB122=20
Zui終 CPU 屬性中Local data 的設置如下:
優先級 1 所需Local Data 大小至少為526 + 20 + 20 = 566 bytes;
優先級 12 所需的Local Data 大小至少為526 + 20 + 20 = 566 bytes;
注:為什么上述優先級 1 和12 中需要加入兩個 20 呢,因為程序運行的任何位置都有可能會執行OB121、OB122,所以需要加上OB121 和OB122 所需的本地數據。PCS7 中(Pic2所示)進行各優先級所需Local data 大小計算時已經自動加入了這部分的大小。
具體的計算法則可以歸納為一下幾點:
1. 從內往外,從低往高;
即:基于程序的調用結構,從Zui低層、Zui內層逐步往上、往外計算;
2. 同級取Zui大,內外求和;
即:程序調用結構中,同層 FB/FC 中所需的Local data 取各所需Local data 中的Zui大值;某一優先級所需的Local Data 大小取所有相同優先級OB 所需的Local Data 的Zui大值;上下調用層級各自所需Local Data 需求和;
3. 結果疊加OB121(編程錯誤)、OB122(I/O 讀取錯誤);
即:Zui終計算出的某優先級所需的 Local data 大小需要疊加上OB121、OB122 所需的Local data;
如果項目中CPU 設置的Local Data 小于程序所需Local Data 大小時會有如下后果:
1. PCS7 中,如果項目硬件組態設置的CPU 的Local data 大小小于程序所需的Local data大小的情況下,PCS7 項目在編譯時將提示如下相應警告信息:
2. Step7 編寫的程序則不會校驗Local data 分配的情況,如果實際運行的CPU 中的LocalData 設置小于正在下載的程序所需的Local data 大小,則在下載程序后運行該優先級下的程序時,CPU 將報告INTF 錯誤,該優先級的程序將無法執行,并將觸發OB88(Processinterrupt OB)錯誤中斷。在CPU 的診斷緩沖區中將生成類似如下的診斷信息:
如果程序中沒有插入 OB88,則CPU 將停止運行;
在冗余CPU 的情況下,在主CPU 運行,啟動從CPU 時將調用優先級為28 的OB72。如果在優先級為28 的中斷中出現Local Data 不足的情況,則主從CPU 都將停止運行。CPU 的診斷緩沖區將生成類似如下的診斷信息:
注:任何優先級為 28 的OB 中出現Local data 不足的情況都將導致該OB 無法執行,CPU診斷緩沖區中將報告該OB 無法執行或未裝載的錯誤。如果未裝載該OB 會導致CPU 停止運行,則即便程序中已經加載了這些OB,但由于該OB 出現Local Data 不足而導致無法執行,CPU 仍舊會停止運行
- 在西門子PLC中數字量模塊參數中的術語“漏型” 和“源型”是什么意思 2024-11-24
- 西門子PLC模擬量接線問題的解決方法 2024-11-24
- 西門子S7-1200 高速計數功能簡介 2024-11-24
- 加密的西門子S7-300PLC MMC處理方法? 2024-11-24
- 當不能卸載STEP 7時,該怎么辦? 2024-11-24
- 首次調用Alarm8P(SFB35)塊,怎樣避免OB 1初始化過程花費太長時間? 2024-11-24
- 西門子S7系列PLC以哪種格式存儲POINTER參數類型? 2024-11-24
- 怎樣編程間接訪問一個ARRAY類型變量的元素? 2024-11-24
- 西門子通訊任務中,在哪些OB中必須調用SFB? 2024-11-24
- 是否可以將數據塊的當前值作為初始值從AS傳送到項目中? 2024-11-24
- 通過TeleService建立PRODAVEMPI和樣列程序之間的通訊時,為什么會出現錯誤 2024-11-24
- 哪些軟件里含有西門子CP5511,CP5512,CP5611,RS232 的驅動? 2024-11-24
- 對西門子模擬量模塊而言,如何處理未使用的通道? 2024-11-24
- 當一個DP從站出故障,如何在輸入的過程映像被清成“0”以前保存它們? 2024-11-24
- 西門子點到點的通信中,協議 3964(R)和RK 512 之間的區別是什么? 2024-11-24
聯系方式
- 電 話:13510737515
- 聯系人:董海波
- 手 機:13185520415
- 微 信:13185520415