問題1:數(shù)據(jù)塊的初始值有什么作用?
回答:數(shù)據(jù)塊的初始值僅對于一個數(shù)據(jù)塊的離線組態(tài)有意義。如果用戶離線創(chuàng)建了一個新的數(shù)據(jù)塊或者在離線組態(tài)的過程中在數(shù)據(jù)塊里創(chuàng)建了一個新的變量,如果用戶不做任何修改,新建的變量會使用系統(tǒng)默認值作為初始值,如果用戶為此變量指定了其它數(shù)值作為初始值,數(shù)據(jù)塊將會多占用相應(yīng)變量長度的load memory。在此后的操作中(數(shù)據(jù)塊的上傳及下載),只要數(shù)據(jù)塊的結(jié)構(gòu),變量的數(shù)據(jù)類型沒有發(fā)生改變,變量的初始值都沒有實際作用,只起到變量類型定義的作用。
如果用戶不給此新建的變量指定實際值,初始值會被用作變量的實際值。
用戶可以給變量指定實際值,初始值可以與實際值不同。
問題2:數(shù)據(jù)塊的實際值有什么作用?
回答:數(shù)據(jù)塊中的每個變量都有自己的實際值,如果用戶不自行指定,系統(tǒng)將使用初始值作為變量的實際值;如果用戶自行指定變量的實際值,則變量的初始值與實際值可能不相同。
如果用戶在data view 視圖下,在菜單命令中執(zhí)行edit →initialize data block,數(shù)據(jù)塊中所有變量的實際值都將被初始值覆蓋(用戶執(zhí)行此操作需要格外謹慎,需要確認不再需要數(shù)據(jù)塊中的實際值)。
問題3:數(shù)據(jù)塊如何實現(xiàn)斷電保持特性?
回答:為了斷電保存數(shù)據(jù),s7-300cpu中的work memory劃分為兩部分,其中一部分類型為ram(斷電丟失),一部分為nvram(斷電保持),如果數(shù)據(jù)塊為斷電保持,則此數(shù)據(jù)塊需要占用具備斷電保持特性的work memory部分。當cpu 經(jīng)歷power on→power off→ power on或者restart過程后,數(shù)據(jù)塊中的數(shù)據(jù)不會丟失。
注意:
當用戶在s7-300cpu 項目中插入新的數(shù)據(jù)塊時,系統(tǒng)默認其屬性為斷電保持。
數(shù)據(jù)塊斷電保持是work memory 的特性,與load memory(mmc) 無關(guān)。
問題4:具備斷電保持特性的數(shù)據(jù)塊何時會丟失當前值?
回答:如下操作會導致數(shù)據(jù)塊丟失當前值
• memory reset 操作(手動開關(guān)操作及step7 中菜單操作)
• cpu在沒有mmc卡的情況下上電(實際是因為此情況導致了cpu執(zhí)行memory reset操作)
• 插入損壞mmc卡/錯誤mmc卡的情況下上電(實際是因為此情況導致了cpu執(zhí)行memory reset操作)
• cpu損壞
• 下載數(shù)據(jù)塊,且離線數(shù)據(jù)塊中的actual value 與當前數(shù)據(jù)塊中的數(shù)值不同
注意:memory reset操作將刪除標志位、s7 定時器和 s7 計數(shù)器地址區(qū)的值,而不管這些區(qū)域是否已定義為保持或非保持屬性。對于停止/啟動(stop/run)操作模式或斷電/上電(power off/on ),如果標志位、s7 定時器和 s7 計數(shù)器地址區(qū)已定義為保持,則保持它們的數(shù)值;否則,這些區(qū)域的數(shù)值將丟失且被初始化為“0”。
問題5:如何使mmc卡中的數(shù)據(jù)塊與work memory中的數(shù)據(jù)塊保持一致?
回答:當用戶第一次將數(shù)據(jù)塊下載到cpu 后,如果用戶程序及用戶監(jiān)控/修改操作對數(shù)據(jù)塊未進行過任何修改,則mmc卡中的數(shù)據(jù)塊與work memory中的數(shù)據(jù)塊內(nèi)容是一致的(這種情況在實際應(yīng)用中很少出現(xiàn))。
一般情況下,用戶程序及用戶的監(jiān)控/修改操作都會影響數(shù)據(jù)塊的當前值,此數(shù)值位于work memory中,這樣mmc卡中的數(shù)據(jù)塊有可能與work memory中的數(shù)據(jù)塊內(nèi)容不一致。對于不同的數(shù)據(jù)塊屬性,此情況會有所不同,可分為3種:
1. 勾選了un-linked 選項的數(shù)據(jù)塊
此數(shù)據(jù)塊只存儲于mmc卡,不存在與work memory數(shù)據(jù)一致問題
2. 勾選了non-retain選項的數(shù)據(jù)塊
由于此類數(shù)據(jù)塊斷電不保持,所以在每次斷電后,work memory中數(shù)據(jù)塊當前值丟失;cpu再上電后,mmc卡中數(shù)據(jù)塊被復制到work memory中,兩者將保持數(shù)據(jù)一致。
3. 未勾選non-retain選項的數(shù)據(jù)塊
由于此類數(shù)據(jù)塊斷電保持,所以在每次斷電后,work memory中數(shù)據(jù)塊當前值保持;cpu再上電后,mmc卡中數(shù)據(jù)塊有可能與work memory中數(shù)據(jù)不一致。
解決辦法:
1. 需要work memory中數(shù)據(jù)塊作為保留值:請參考問題11的操作
2. 需要mmc卡中數(shù)據(jù)塊作為保留值:執(zhí)行reset 操作
問題6:數(shù)據(jù)塊的“non-retain”“un-linked”屬性對于數(shù)據(jù)塊的內(nèi)存占用有何影響?
回答: s7-300 cpu從版本v2.0.12開始,開始支持具備“non-retain”屬性的數(shù)據(jù)塊。s7-300 cpu中的work memory劃分為兩部分,其中一部分類型為ram(斷電丟失),一部分為nvram(斷電保持),有關(guān) cpu 中可供保持數(shù)據(jù)塊使用的主存儲器空間信息,可參看手冊“s7-300 cpu 31xc and cpu 31x, technical data”的第六章和第七章,條目 id: 12996906。
數(shù)據(jù)塊的屬性對于數(shù)據(jù)塊的內(nèi)存占用影響情況請參考下表:
內(nèi)存區(qū)域
load memory
work memory
work memory
(retentive )
數(shù)據(jù)塊屬性
non-retain不勾選(系統(tǒng)默認)
是
否
是
non-retain勾選
是
是
否
un-linked
是
否
否
以cpu 315(6es7-315-2eh13-0ab0, firmware v2.6.7)為例,其work memory 共256kb,其中可以斷電保持的work memory共128kb, 而load memory 取決于所使用mmc的容量。用戶可以下載的具備斷電保持屬性的數(shù)據(jù)塊總量為128kb;如果用戶還需要使用更多的數(shù)據(jù)塊,可以新建數(shù)據(jù)塊,并在其屬性中勾選non-retain選項,則另外還可以下載128kb數(shù)據(jù)(如果考慮到用戶程序還需要占用此部分的work memory,所以實際使用中達不到此數(shù)值);如果用戶還需要使用更多的數(shù)據(jù)塊,可以新建數(shù)據(jù)塊,并在其屬性中勾選un-linked 選項,則此數(shù)據(jù)塊只存儲于mmc中,用戶可以使用sfc83/84 對其進行讀寫。
問題7:用戶下載數(shù)據(jù)塊時,其過程是什么樣的?
回答:以下列出了用戶下載數(shù)據(jù)塊時,3種常見過程
1. 數(shù)據(jù)塊屬性中勾選了un-linked 選項
2. 數(shù)據(jù)塊屬性中未勾選un-linked 選項,未勾選non-retain選項
download
3. 數(shù)據(jù)塊屬性中未勾選un-linked 選項,勾選non-retain選項
download
問題8:用戶使用step7監(jiān)視/修改(monitor/modify)的數(shù)據(jù)塊中的數(shù)值,位于什么存儲區(qū)?
回答:用戶使用step7監(jiān)視(monitor)功能時,讀到的數(shù)值來自于cpu的work memory。用戶使用step7修改(modify)功能時,修改的是位于cpu的work memory中的數(shù)據(jù)塊的數(shù)值。
注意:使用monitor/modify 無法修改mmc卡中的initial value及actual value
注意:使用monitor/modify 無法監(jiān)控un-linked類型數(shù)據(jù)塊
問題9:用戶使用step7中upload station to pg操作時,數(shù)據(jù)塊來自于什么存儲區(qū)?
回答:當用戶使用step7中upload station to pg操作時,數(shù)據(jù)塊的initial value來自于load memory中的initial value;數(shù)據(jù)塊的actual value來自于work memory中的actual value;
問題10:如何讀出mmc中數(shù)據(jù)塊的actual value?
回答:有時候用戶需要將實時運行數(shù)據(jù)按照特定規(guī)律歸檔,即使cpu損壞或者cpu復位操作也不會造成這些數(shù)據(jù)丟失,這些數(shù)據(jù)可以定期(或根據(jù)用戶程序編制需求)通過sfc84存儲到mmc 卡上(不推薦使用copy ram to rom功能,此操作需要cpu停機)。當用戶需要將這些數(shù)據(jù)時,就需要將這些數(shù)據(jù)塊的actual value讀出。用戶無法通過使用step7中upload station to pg操作實現(xiàn)此功能。為了實現(xiàn)此功能,用戶可以通過兩種方法實現(xiàn):
1. 使用西門子專用讀卡器,通過菜單命令file → memory card →open 打開mmc文件夾,將其中的數(shù)據(jù)塊復制到另一個s7 block 文件夾中,則此文件夾中的數(shù)據(jù)塊中的actual value是來自于mmc中數(shù)據(jù)塊的actual value。
2. 使用sfc83,通過程序?qū)mc中數(shù)據(jù)塊的actual value寫至某個數(shù)據(jù)塊中,上載此數(shù)據(jù)塊,則此數(shù)據(jù)塊中的actual value與mmc中數(shù)據(jù)塊的actual value相同(注意:僅僅是數(shù)值相同)
問題11:如何將cpu數(shù)據(jù)塊中當前值作為參數(shù)保存到項目中?
回答:建議用戶為參數(shù)數(shù)據(jù)塊新建一個s7 program文件夾,以方便日后的調(diào)試工作。
方法1步驟:
1. 打開原來項目中的數(shù)據(jù)塊,在菜單中選擇file → open online,則打開了在線數(shù)據(jù)塊,
2. 在菜單中選擇file → store read-only,在提示界面下,選擇新建的s7 promgram/blocks文件夾。則此數(shù)據(jù)塊被以只讀的方式存儲,用戶可以監(jiān)視此數(shù)據(jù)塊,但無法在計算機上修改其actual value。其屬性為block read-only。
3. 將此數(shù)據(jù)塊下載到cpu中(完成對mmc卡的覆蓋)。
缺點:備份數(shù)據(jù)塊在step7 編輯環(huán)境下為只讀屬性,數(shù)據(jù)塊與普通數(shù)據(jù)塊操作不同,日后更改困難
優(yōu)點:備份數(shù)據(jù)塊在step7 編輯環(huán)境下為只讀屬性,不會被錯誤更改
方法2步驟:
1. 將在線的cpu中的數(shù)據(jù)塊復制到新建的s7 program/blocks文件夾中,
2. 將此數(shù)據(jù)塊下載到cpu中(完成對mmc卡的覆蓋)。
缺點:備份數(shù)據(jù)塊沒有變量名及注釋,不便于識別
優(yōu)點:備份數(shù)據(jù)塊與普通數(shù)據(jù)塊操作相同
方法3步驟:
1. 將在線的cpu中的數(shù)據(jù)塊復制到新建的s7 program/blocks文件夾中,
2. 在菜單中選擇plc → copy ram to rom(完成對mmc卡的覆蓋)。
缺點:會導致cpu停機(copy ram to rom操作),備份數(shù)據(jù)塊沒有變量名及注釋,不便于識別,操作會影響所有的數(shù)據(jù)塊,所有數(shù)據(jù)塊load memory中的actual value都將被work memory 中的actual value覆蓋。
問題12:如何使cpu數(shù)據(jù)塊中當前值不被程序更改?
回答:用戶可以將數(shù)據(jù)塊的db is write-protected in the plc屬性勾選并下載。
問題13:step 7功能“copy ram to rom”有何作用?
回答:copy ram to rom會把work memory 中的數(shù)據(jù)塊數(shù)值寫至mmc卡中數(shù)據(jù)快的 actual value 中。
問題14:使用sfc 82有何注意事項?
回答:sfc 82只能生成 non-retain,un-linked ,read-only 類型的數(shù)據(jù)塊
sfc 82可能需要多個掃描周期才可完成,觸發(fā)調(diào)用sfc82后,需要把觸發(fā)條件復位
sfc 82對mmc卡有寫操作,mmc 僅允許進行 100,000 次寫訪問,超過此次數(shù),mmc卡將損壞
問題15:使用sfc 83有何注意事項?
回答:sfc 83可能需要多個掃描周期才可完成,觸發(fā)調(diào)用sfc83后,需要把觸發(fā)條件復位
sfc 83多用于讀取un-linked類型的數(shù)據(jù)塊
問題16:使用sfc 84有何注意事項?
回答:sfc 84可能需要多個掃描周期才可完成,觸發(fā)調(diào)用sfc84后,需要把觸發(fā)條件復位
sfc 84對mmc卡有寫操作,mmc 僅允許進行 100,000 次寫訪問,超過此次數(shù),mmc卡將損壞
sfc 84多用于寫un-linked類型的數(shù)據(jù)塊,對于斷電保持的數(shù)據(jù)塊也可以進行寫操作,但只有在cpu復位的情況下才可查看到sfc84最后一次寫操作的數(shù)值。
參考例子:
例子1:如果生成變量,并使用默認值,其源代碼將不包含初始值
源代碼:
data_block db 6
title =
version : 0.1
struct
test1 : int ; //初始值為默認值時,都為此類格式
test2 : int := 1234;
test3 : int := 1234;
end_struct ;
begin
test1 := 0;
test2 := 1234;
test3 := 1234;
end_data_block
例子2:work memory中數(shù)據(jù)保持區(qū)接近被占用100%的情況,此時無法下載斷電保持數(shù)據(jù)塊,但可以下載“non-retain”、“un-linked”數(shù)據(jù)塊及程序。