德國西門子SM422數(shù)字量模塊
德國西門子SM422數(shù)字量模塊
問題:如何計算當(dāng)前程序所需的Local Data大小并合理設(shè)置S7 400 CPU屬性中的Memory選項卡中的Local Data,S7 400 CPU中的Local data設(shè)置不當(dāng)會導(dǎo)致什么問題?
回答:Local data顧名思義為本地數(shù)據(jù),在西門子控制器中有一部分內(nèi)存空間被設(shè)置為L區(qū)間,它被用于控制器在運行程序時存儲臨時數(shù)據(jù)。由于編寫FB/FC程序的需要和OB中調(diào)用功能塊結(jié)構(gòu)的不同,不同的OB由于調(diào)用不同的FB/FC,因此所需的Local data的大小各不相同(被調(diào)用的FB/FC將占用當(dāng)前調(diào)用他的OB塊的Local Data資源)。在控制器硬件組態(tài)中的CPU屬性設(shè)置中,Memory選項卡用于設(shè)置Local data的分配。如果相應(yīng)OB塊實際運行所需的Local data大于硬件組態(tài)中所設(shè)置的Local Data大小,那么相應(yīng)的程序?qū)o法運行,CPU將報告INTF錯誤,甚至更為嚴重的情況下CPU可能會停止運行。但如果盲目將Local Data的分配設(shè)置過大,將會浪費一部分寶貴的CPU內(nèi)存空間。
S7 300CPU中的Local data不可修改,每個優(yōu)先級固定設(shè)置為256 bytes,S7 400的Local data則可以人為修改。由此可以看出正確設(shè)置S7400 CPU的Local Data的大小非常重要。在控制器硬件組態(tài)中CPU屬性? Memory選項卡的Local Data區(qū)域用于設(shè)置基于優(yōu)先級的Local Data(如下圖所示):
Pic1: Local Data的分配
在PCS7組態(tài)的項目中,在編譯CFC程序后,系統(tǒng)將會自動計算各OB塊所需的Local Data大小,可以通過交叉索引(Chart reference data ? Local data,如下圖所示)查詢到。
Pic2: Chart reference data ? Local data
而普通的由用戶采用Step7編程方式編寫的程序,程序功能塊及OB塊各自的調(diào)用結(jié)構(gòu)由用戶自行控制,需要在編寫完整個程序之后自行計算。
在手動計算Local Data時,需要獲取如下信息:
1. 各OB塊、FB塊、FC塊各自獨立運行時所需的Local Data大小
可以通過如下方式查詢到:在Block文件夾中選擇相應(yīng)功能塊,右鍵 屬性? General - Part2中即可查看到,如下圖所示:
Pic3: 功能塊所需的Local Data
注:嵌套調(diào)用時,上一級功能塊將不會計算其嵌套調(diào)用的FB/FC所需的Local data大?。辉谏蠄D中將不會累加嵌套功能塊所需的Local data大??;
2. 整個程序的調(diào)用結(jié)構(gòu)(Call structure)
由于功能塊不會計算其嵌套調(diào)用的功能塊所需到Local data大小,因此為了zui后計算整個OB所需到Local Data,必須了解整個程序的調(diào)用結(jié)構(gòu)。打開任何一個功能塊,點擊左側(cè)的Call Structure即可查詢到,如下圖所示;
Pic4: 程序調(diào)用結(jié)構(gòu)
3. 當(dāng)前程序下所使用的所有OB的優(yōu)先級
由于CPU屬性設(shè)置中的Local Data分配基于優(yōu)先級進行設(shè)置,因此需要查看所有當(dāng)前程序使用的OB塊的中斷優(yōu)先級,打開硬件組態(tài)中CPU屬性查看,如下圖所示;
Pic5: 查看OB的優(yōu)先級
獲得所有上述信息后,即可計算當(dāng)前程序所需的Local data大小。假設(shè)當(dāng)前項目下使用的功能塊及OB塊上述相關(guān)信息如下表所示:
OB的調(diào)用關(guān)系如上圖Pic4所示。根據(jù)調(diào)用結(jié)構(gòu)計算,單獨運行各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的設(shè)置如下:
優(yōu)先級 1 所需Local Data大小至少為526 + 20 + 20 = 566 bytes;
優(yōu)先級12所需的Local Data大小至少為526 + 20 + 20 = 566 bytes;
注:為什么上述優(yōu)先級1和12中需要加入 兩個20呢,因為程序運行的任何位置都有可能會執(zhí)行OB121、OB122,所以需要加上OB121和OB122所需的本地數(shù)據(jù)。PCS7中(Pic2所示)進行各優(yōu)先級所需Local data大小計算時已經(jīng)自動加入了這部分的大小。