加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線13185520415
        公司新聞
        如何計算西門子 S7-400 CPU 所需的Local Data 大小
        發布時間: 2024-04-18 10:24 更新時間: 2024-11-24 08:00
        觀看如何計算西門子 S7-400 CPU 所需的Local Data 大小視頻

        如何計算當前程序所需的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 仍舊會停止運行

        聯系方式

        • 電  話:13510737515
        • 聯系人:董海波
        • 手  機:13185520415
        • 微  信:13185520415