0.前言
西門子SIMATIC S7家族中的控制器按照應(yīng)用場(chǎng)合、性能等分為S7-1200、S7-200、S7-300、S7-400等各種不同的系列。而每一系列中又細(xì)分不同的型號(hào),例如,S7-400系列中有S7-412、S7-414、S7-416、S7-417等型號(hào)。不同系列、不同型號(hào)的控制器對(duì)應(yīng)不同的控制性能(運(yùn)算速度、內(nèi)存容量等)。本文基于S7-400系列控制器,詳細(xì)介紹內(nèi)存的類型、分配情況及實(shí)際使用過程中可能的內(nèi)存優(yōu)化方法。
1.內(nèi)存類型
S7-400型控制器的內(nèi)存按照功能的不同,可以分為:
√ 系統(tǒng)內(nèi)存(System Memory)--- 控制器的自身功能(M、T、C等)
√ 工作內(nèi)存(work Memory)--- 用于運(yùn)行程序;
√ 裝載內(nèi)存(Load Memory)--- 用于裝載程序;
其中,工作內(nèi)存部分又可以細(xì)分為:
√ 代碼工作內(nèi)存(Code Memory)--- 用于運(yùn)行程序的代碼部分;
√ 數(shù)據(jù)工作內(nèi)存(Data Memory)--- 用于運(yùn)行程序的數(shù)據(jù)部分;
S7-400型控制器的內(nèi)存按照集成方式的不同,可以分為:
√ 集成內(nèi)存(Integrated)--- 直接集成在控制器內(nèi)部隨控制器一起提供,無(wú)需額外訂購(gòu);
√ 擴(kuò)展內(nèi)存(Expanded)--- 通過擴(kuò)展存儲(chǔ)卡的方式擴(kuò)展提供,需要額外訂購(gòu);
一般情況下,控制器的工作內(nèi)存不可擴(kuò)展,而裝載內(nèi)存則可以通過FEPROM或RAM的方式進(jìn)行擴(kuò)展。如果希望和集成的RAM裝載內(nèi)存無(wú)縫擴(kuò)展使用,則擴(kuò)展的裝載內(nèi)存必須選用RAM類型。下圖為CPU 412的性能參數(shù)示例。

圖 1 CPU 412的性能參數(shù)示例
控制器內(nèi)存信息也可參考如下鏈接內(nèi)容:
22610157
2.內(nèi)存分配
控制器內(nèi)存詳細(xì)分配情況如下表所示。#
內(nèi)存類型
|
內(nèi)容
|
注釋信息
|
裝載內(nèi)存
|
系統(tǒng)數(shù)據(jù)/System Data
|
硬件組態(tài)數(shù)據(jù)
|
程序塊/Program Blocks
|
程序塊
|
(FBs,FCs,OBs,Symbols1),Comments1))
|
工作內(nèi)存
|
數(shù)據(jù)塊/Data Blocks
|
數(shù)據(jù)塊 (DBs)
|
(數(shù)據(jù)部分)
|
系統(tǒng)數(shù)據(jù)/System Data
|
硬件組態(tài)信息,非裝載內(nèi)存中的全部硬件組態(tài)數(shù)據(jù)
|
|
SFC動(dòng)態(tài)創(chuàng)建的DB塊/DBs Created by SFC
|
通過SFC21/22等動(dòng)態(tài)創(chuàng)建的數(shù)據(jù)塊
|
|
本地?cái)?shù)據(jù)/Local Data
|
各優(yōu)先級(jí)中斷所需的臨時(shí)數(shù)據(jù)存儲(chǔ)區(qū)
|
工作內(nèi)存
|
邏輯功能塊/Logic Blocks
|
邏輯功能塊 (FBs,FCs)
|
(代碼部分)
|
通信數(shù)據(jù)緩沖/Communication Data Buffer2)
|
通信功能所需的臨時(shí)緩沖區(qū)(動(dòng)態(tài)分配)
|
|
通信作業(yè)數(shù)據(jù)/Communication jobs Data ( 72字節(jié)/每作業(yè))
|
通信功能塊占用的通信作業(yè)數(shù)據(jù)區(qū)
|
|
輸入輸出映像區(qū)/PII/PIQ (12字節(jié)/每映像區(qū)字節(jié))
|
輸入/輸出過程映像區(qū)所占用的數(shù)據(jù)空間
|
|
診斷緩沖區(qū)/Diagnostic Buffer ( 32 字節(jié)/每記錄)
|
CPU診斷消息
|
系統(tǒng)內(nèi)存
|
M區(qū)間、定時(shí)器T、計(jì)數(shù)器C
|
M存儲(chǔ)區(qū)間、定時(shí)器/計(jì)數(shù)器存儲(chǔ)區(qū)間
|
功能塊/中斷堆棧
|
堆棧區(qū)級(jí)通信/診斷/本地?cái)?shù)據(jù)緩沖區(qū)
|
表格 1 控制器內(nèi)存分配祥表
1).通過 PLC?Save to Memory Card (EPROM)菜單才會(huì)下載到裝載內(nèi)存中
2).運(yùn)行時(shí)動(dòng)態(tài)分配
實(shí)際應(yīng)用過程中,當(dāng)前控制器的內(nèi)存占有率及分配情況可以通過控制器在線信息? Memory頁(yè)面查詢到,如下圖所示。

圖 2 控制器內(nèi)存在線分配情況
從該圖中可以看到內(nèi)存被劃分為四個(gè)部分:Load Memory RAM(裝載內(nèi)存RAM)、Load Memory EPROM(裝載內(nèi)存EPROM)、Work Memory Code(工作內(nèi)存Code)和Work Memory Data(工作內(nèi)存Data)。每個(gè)部分的實(shí)際占用狀況可以通過下側(cè)的Free(空閑內(nèi)存)、Assigned(已分配內(nèi)存)、Total(總內(nèi)存)、Largest Free Block(最大連續(xù)空閑內(nèi)存空間)和Max. Pluggable(最大可安插內(nèi)存量)看到。而每個(gè)部分詳細(xì)的內(nèi)部分配情況可以通過選擇相應(yīng)內(nèi)存列后,點(diǎn)擊右側(cè)的Details Memory Area按鈕查詢到,如下圖所示。

圖 3 裝載內(nèi)存詳細(xì)分配情況

圖 4 工作內(nèi)存 Code部分詳細(xì)分配情況

圖 5 工作內(nèi)存Data部分詳細(xì)分配情況
3.內(nèi)存優(yōu)化
根據(jù)上述介紹的內(nèi)容可以查看到實(shí)際控制器內(nèi)存的分配和使用情況,同時(shí)在項(xiàng)目組態(tài)階段,也可以參考表格1中的內(nèi)容,按照如下方式計(jì)算、檢查各部分的內(nèi)存需求情況,并對(duì)其進(jìn)行相應(yīng)優(yōu)化。
3.1 用戶程序內(nèi)存需求
在Simatic Manager中右鍵點(diǎn)擊Blocks文件夾? Object Properties可以打開如下對(duì)話框,切換到Blocks頁(yè)即可查詢當(dāng)前用戶程序的內(nèi)存需求情況。


圖 6 用戶程序內(nèi)存需求情況
從上圖中可以看到,用戶程序所需裝載內(nèi)存為5354 bytes,系統(tǒng)數(shù)據(jù)(硬件組態(tài))所需裝載內(nèi)存為7616 bytes,總和為12970 bytes,和CPU在線內(nèi)存分配情況吻合(見上圖 3 裝載內(nèi)存詳細(xì)分配情況中l(wèi)oad objects所示)。用戶程序所需工作內(nèi)存代碼部分為2682 bytes,所需工作內(nèi)存數(shù)據(jù)部分為630 bytes,和CPU在線內(nèi)存分配情況吻合(見上圖 4 工作內(nèi)存 Code部分詳細(xì)分配情況中l(wèi)ogic blocks部分所示和上圖 5 工作內(nèi)存Data部分詳細(xì)分配情況中data blocks部分所示)。
3.2 工作內(nèi)存數(shù)據(jù)部分? 本地?cái)?shù)據(jù)內(nèi)存需求
控制器中的本地?cái)?shù)據(jù)區(qū)用于存儲(chǔ)各優(yōu)先級(jí)中斷運(yùn)行的程序所需的臨時(shí)數(shù)據(jù),這部分存儲(chǔ)空間是在控制器啟動(dòng)初始化時(shí)完成預(yù)留分配。各功能塊所需的臨時(shí)數(shù)據(jù)存儲(chǔ)區(qū)大小可以通過功能塊屬性? General Part2中的Local data查詢到,如下圖所示。

圖 7 功能塊所需本地?cái)?shù)據(jù)大小
控制器中按照中斷的優(yōu)先級(jí)的方式分配本地?cái)?shù)據(jù)的大小,通過CPU的屬性對(duì)話框? Memory中設(shè)置,下圖所示本地?cái)?shù)據(jù)離線設(shè)置為8192 bytes,與上圖 5 工作內(nèi)存Data部分詳細(xì)分配情況中在線的Local data分配吻合。
離線程序中實(shí)際所需的本地?cái)?shù)據(jù)可以參考如下連接文檔進(jìn)行計(jì)算:
80027837
按照實(shí)際程序所需的本地?cái)?shù)據(jù)進(jìn)行下圖8所示的Local data的設(shè)置,可以優(yōu)化內(nèi)存的分配。

圖 8 CPU本地?cái)?shù)據(jù)分配
3.3 工作內(nèi)存代碼部分? 通信作業(yè)內(nèi)存需求
通信作業(yè)用于實(shí)現(xiàn)控制器和外圍設(shè)備的通信功能,每個(gè)通信作業(yè)在內(nèi)存中需要占用一定的存儲(chǔ)空間,這部分存儲(chǔ)空間是在控制器啟動(dòng)初始化時(shí)完成預(yù)留分配。離線的通信作業(yè)數(shù)可以參考上圖 8 CPU本地?cái)?shù)據(jù)分配中的Communication resources進(jìn)行設(shè)置。此處為300個(gè),參考表格1中的數(shù)據(jù),每個(gè)通信作業(yè)需要分配72 bytes的空間,總共所需300*72 = 21600 bytes,與上圖 4 工作內(nèi)存 Code部分詳細(xì)分配情況中在線的Communication jobs內(nèi)存分配吻合。
PCS 7系統(tǒng)中可以通過Chart reference data的統(tǒng)計(jì)數(shù)據(jù)查詢到離線程序所需的通信作業(yè)數(shù),Step 7系統(tǒng)下則只有下載程序后通過上圖4查詢到。查詢到實(shí)際程序所需的通信作業(yè)數(shù)后,預(yù)留一定余量后對(duì)圖8進(jìn)行設(shè)置,可以優(yōu)化內(nèi)存的分配。
3.4 工作內(nèi)存代碼部分? 輸入/輸出映像區(qū)內(nèi)存需求
輸入/輸出映像區(qū)為控制器預(yù)留的、用于存儲(chǔ)I/O的映像數(shù)據(jù)的區(qū)間,控制器按照一定的機(jī)制進(jìn)行I/O數(shù)據(jù)的動(dòng)態(tài)更新,可以優(yōu)化程序讀取I/O的速度和性能。PCS 7中要求必須基于映像區(qū)的方式進(jìn)行I/O信號(hào)的讀取,冗余控制系統(tǒng)中也要求基于映像區(qū)的方式進(jìn)行I/O信號(hào)的讀取。這部分存儲(chǔ)空間是在控制器啟動(dòng)初始化時(shí)完成預(yù)留分配。
通過CPU的屬性對(duì)話框? Cycle/Clock Memory頁(yè)面進(jìn)行設(shè)置,如下圖所示。

圖 9 CPU過程映像區(qū)分配
此處為1000 Process image input/1000 Process image output,參考表格1中的數(shù)據(jù),每個(gè)映像區(qū)字節(jié)需要分配12 bytes的空間,總共所需1000*12 = 12000 bytes輸入/輸出,與上圖 4 工作內(nèi)存 Code部分詳細(xì)分配情況中Process-image inputs、Process-image outputs內(nèi)存分配吻合。
實(shí)際程序中所需的映像區(qū)范圍可以通過I/O卡件的地址范圍查詢到,查詢到實(shí)際程序所需的映像區(qū)范圍后,預(yù)留一定余量后對(duì)圖9進(jìn)行設(shè)置,可以優(yōu)化內(nèi)存的分配。


圖 10 查詢I/O地址范圍
如上圖紅色標(biāo)識(shí)所示,輸入地址為0~515,則輸入映像區(qū)范圍最小設(shè)置為516字節(jié),輸出地址為0~515,則輸出映像區(qū)范圍最小設(shè)置為516字節(jié)。
注:地址范圍查詢時(shí)不用關(guān)心上圖10中Type列中帶*的輸入地址(卡件診斷地址)。此外圖9中的映像區(qū)范圍必須設(shè)置為偶數(shù)。
3.5 工作內(nèi)存代碼部分? 診斷緩沖區(qū)內(nèi)存需求
診斷緩沖區(qū)用于存儲(chǔ)CPU在線的診斷信息,以便用于診斷維護(hù)等。CPU在線信息中的Diagnose buffer即為此處所說(shuō)的診斷緩沖區(qū)。這部分存儲(chǔ)空間是在控制器啟動(dòng)初始化時(shí)完成預(yù)留分配。

圖 11 CPU在線診斷信息
通過CPU的屬性對(duì)話框? Diagnostics/Clock頁(yè)面進(jìn)行設(shè)置,如下圖所示。

圖 12 CPU 診斷緩沖區(qū)設(shè)置
此處為120條,參考表格1中的數(shù)據(jù),每條消息需要分配32 bytes的空間,總共所需120*32 = 3840 bytes,與上圖 4 工作內(nèi)存 Code部分詳細(xì)分配情況中Diagnose buffer內(nèi)存分配吻合。該消息存儲(chǔ)區(qū)間為Ring型存儲(chǔ)區(qū)間,如果消息條數(shù)充滿,例如,此處120條,則系統(tǒng)將用新的消息覆蓋最老的消息。根據(jù)實(shí)際項(xiàng)目情況進(jìn)行設(shè)置,設(shè)置范圍:最大3200條,最小100條。越大存儲(chǔ)的消息越多、時(shí)間越長(zhǎng)