詳細介紹
西門子XP216交換機
![]() | 6GK5216-0HA00-2AS6 SCALANCE XP216,受管理的 IE 交換機,,12個 10/100 Mbit/s M12 端口,,4x 10/100/1000 Mbit/s M12 端口 IP65,LED 診斷,, 錯誤信息觸點,, 冗余電源, PROFINET 輸入輸出設(shè)備,, 網(wǎng)絡(luò)管理,, 在冗余環(huán)路中可運行, 包含防塵蓋,,包含 電子手冊在 CD-ROM 上,, 可選配 C-PLUG |
問題:在S7-CPU中使用嵌套程序需要注意什么,,如何使用?
回答:S7-CPU支持嵌套程序,,但對于不同的CPU類型,,在使用時需要注意一些問題。
1. 不同的CPU類型,,支持的嵌套程序深度不同,,用戶可在CPU的技術(shù)數(shù)據(jù)中查到此參數(shù),以6ES7315-2AG10-0AB0為例,。
圖1:CPU的嵌套深度參數(shù)
2. 用戶可以按照如下方式使用嵌套功能:
a) 在某個優(yōu)先級組織塊中調(diào)用多個嵌套FC/FB,。例如,在OB1 (優(yōu)先級為1)調(diào)用FC1,,F(xiàn)C1中調(diào)用FC2,,F(xiàn)C2中調(diào)用FC3,等等,,一直到FC7,,與OB1共8層深度。如果在FC7 中又調(diào)用了FC8 ,,此時會導(dǎo)致CPU 停機,,在CPU在線信息界面中可查看到此情況,如圖2所示,。用戶也可在OB35(優(yōu)先級為12)調(diào)用FC11,,F(xiàn)C11中調(diào)用FC12,F(xiàn)C12中調(diào)用FC13,,等等,,一直到FC17。
圖2:嵌套調(diào)用
b) 在某個優(yōu)先級中調(diào)用某個FC,,此FC多次調(diào)用自身,。例如,在OB1 (優(yōu)先級為1)調(diào)用FC1,,F(xiàn)C1中仍然調(diào)用FC1,,用戶在FC1 的程序中必須編程累計FC1被調(diào)用的次數(shù),如果達到了7次,,則需要從FC1 中跳出調(diào)用(此方法即為軟件行業(yè)廣泛應(yīng)用的遞歸編程方法),。如果在FC1 調(diào)用自身次數(shù)超出了CPU允許的嵌套深度,此時會導(dǎo)致CPU 停機,。
3. 當用戶在使用嵌套功能時,,可能出現(xiàn)幾種錯誤:
a) The nesting depth of block calls (U-Stack) is too high(嵌套深度太高)。例如:
? 用戶在某個優(yōu)先級(如OB1)中調(diào)用嵌套程序深度超出所使用CPU支持深度,如第2節(jié)(a) 部分所描述,。
? 用戶在某個優(yōu)先級(如OB1)中調(diào)用嵌套程序深度超出所使用CPU支持深度,,如第2節(jié)(b) 部分所描述。
此時CPU將報16#4575錯,,如圖3所示:
圖3:同步錯誤嵌套1
b) The nesting depth of synchronous errors is too high(同步錯誤嵌套深度太高),。例如:
? 用戶在OB1中使用L DB1.DBB0 語句(CPU中并未下載DB1),
? 此時CPU出現(xiàn)編程錯誤,,將調(diào)用OB121,。
? 如果用戶在下載的OB121中又使用了L DB1.DBB0 指令,將導(dǎo)致CPU停機
此時CPU將報16#4573錯,,如圖4所示:
圖4:同步錯誤嵌套2
c) Error during allocation of local data (分配本地數(shù)據(jù)錯誤) ,。對于S7-CPU每個優(yōu)先級都有對本地數(shù)據(jù)大小的限制,如果用戶使用的范圍超出了此限制,,CPU將出現(xiàn)錯誤,。以6ES7315-2AG10-0AB0為例,其每個優(yōu)先級下的本地數(shù)據(jù)大小為512 BYTE,。如下錯誤使用都可能導(dǎo)致此錯誤:
? OB1 調(diào)用FC1,,F(xiàn)C1 中定義的local data(TEMP數(shù)據(jù)類型)與OB1中定義的local data(TEMP數(shù)據(jù)類型)總和超出了CPU 對此優(yōu)先級分配的local data 數(shù)量。
? OB1 中嵌套調(diào)用多個FC,, 這些FC 使用的local data 與OB1中定義的local data(TEMP數(shù)據(jù)類型)總和超過了分配給此優(yōu)先級的local data 數(shù)量,。
此時CPU將報16#3576錯,如圖5所示:
圖5:分配本地數(shù)據(jù)錯誤
? 對于S7-400CPU,, 用戶可以在硬件配置中調(diào)節(jié)每個優(yōu)先級下的本地數(shù)據(jù)大小,,以6ES7412-2XG04-0AB0為例,如圖6所示:
西門子XP216交換機
圖6:分配本地數(shù)據(jù)
4. 當用戶在使用嵌套功能出現(xiàn)錯誤時,,對于支持OB88的CPU(例如S7-400CPU),,可用通過下載OB88來防止CPU停機,此時CPU將處于SF狀態(tài),,但OB88不可以再出現(xiàn)嵌套使用錯誤,,否則CPU將進入停機狀態(tài)。對于不支持OB88的CPU(例如S7-300CPU),,當出現(xiàn)嵌套調(diào)用錯誤時,,無法避免CPU進入停機狀態(tài)。
問題3:S7-200 CPU內(nèi)的程序是否具有掉電保持特性,?
回答:S7-200 CPU內(nèi)的程序塊下載時,,會同時下載到EEPROM中,,也就是說程序下載后,,將保持。同樣,系統(tǒng)塊和數(shù)據(jù)塊下載時,,也會同時下載到EEPROM中,。
問題4:S7-200 CPU內(nèi)部的數(shù)據(jù)的掉電保持特性?
回答:S7-200系統(tǒng)手冊第四章——“PLC基本概念”一章中“理解S7--200如何保存和存儲數(shù)據(jù)”一節(jié)詳細介紹了S7-200 CPU內(nèi)數(shù)據(jù)的掉電保持特性,,建議用戶仔細閱讀,。
S7-200 CPU內(nèi)的數(shù)據(jù)分為RAM區(qū)和EEPROM區(qū)。
其中,,RAM區(qū)數(shù)據(jù)需要CPU內(nèi)置的超級電容或者外插電池卡才能實現(xiàn)掉電保持特性,。
對于CPU221和CPU222的內(nèi)置超級電容,能提供典型值約50小時的數(shù)據(jù)保持,。
對于CPU224,,CPU224XP,CPU224XPsi和CPU226的內(nèi)置超級電容,,能提供典型值約100小時的數(shù)據(jù)保持,。
超級電容需要在CPU上電時充電。為達到上述指標的數(shù)據(jù)保持時間,,需要連續(xù)充電至少24小時,。
當該時間不夠時,可以購買電池卡,,以獲得更長時間的數(shù)據(jù)保持時間,。
EEPROM區(qū)能實現(xiàn)數(shù)據(jù)保持,不依靠超級電容或者電池就可以保持數(shù)據(jù),。
問題5:S7-200 CPU內(nèi)部數(shù)據(jù)的工作順序,?
回答:S7-200 CPU一上電后,CPU先去檢查RAM區(qū)域中的數(shù)據(jù),,如果在超級電容或者電池有電的情況下,,數(shù)據(jù)并未丟失,則使用該RAM區(qū)的數(shù)據(jù),;如果超級電容或者電池沒電了,,導(dǎo)致數(shù)據(jù)丟失,則CPU去讀EEPROM中相應(yīng)的區(qū)域(包含數(shù)據(jù)塊中的數(shù)據(jù)定義內(nèi)容),,如果在EEPROM中存有保持的數(shù)據(jù),,則CPU將EEPROM中的數(shù)據(jù)寫回到RAM區(qū)中,再進行下面的工作,。
如果EEPROM中也沒有對應(yīng)存儲區(qū)的數(shù)據(jù)了,,則該存儲區(qū)的數(shù)據(jù)將變成0。
問題6:S7-200 CPU電池卡的使用注意事項,?
回答:新版S7-200 CPU電池卡有兩種型號,。
對于CPU221和CPU222,,由于其中沒有實時時鐘,則對應(yīng)的為時鐘電池卡,,訂貨號為:6ES7297--1AA23--0XA0,。
對于CPU224,CPU224XP,,CPU224XPsi和CPU226,,電池卡僅提供電池功能,訂貨號為:6ES7 291--8BA20--0XA0,,該款電池卡型號又叫做BC293,。
電池卡的壽命典型值約為200天,當插上電池卡后,,如果CPU處于工作狀態(tài)或者超級電容有電的情況下,,并不消耗電池卡的電量。當電池卡的電量消耗完畢之后,,該電池卡就報廢了,。
S7-200電池卡不能充電,使用完畢就不能再用了,,只能購買新的電池卡了,。
S7-200沒有檢測電池卡內(nèi)剩余電量的狀態(tài)位和這種功能。
新版S7-200 CPU電池卡不能用于老CPU,,即訂貨號為6ES7xxx-xxx21-0XB0和6ES7xxx-xxx22-0XB0以及更老版本的CPU,。
圖1
以上為兩種電池卡以及所在插槽位置。
電池卡的使用完整限制條件,,請參考《S7-200系統(tǒng)手冊》附錄A 技術(shù)規(guī)范—可選卡件一節(jié),。
問題7:S7-200 CPU內(nèi)EEPROM的使用方法?
回答:EEPROM的寫入分為如下幾種情況:
1,、MB0—MB13的設(shè)置,,只需要在系統(tǒng)塊—斷電數(shù)據(jù)保持中設(shè)置即可。
默認情況下,,系統(tǒng)塊設(shè)置如下圖藍框中所示,,即MB14—MB31,這些區(qū)域沒有對應(yīng)的EEPROM區(qū)域,,無須考慮EEPROM寫入次數(shù)限制,。
圖2
MB0—MB13如果在系統(tǒng)塊中設(shè)置成掉電保持區(qū)域,如圖2紅框中所示,,并將系統(tǒng)塊下載到CPU之后,,則這14個字節(jié)的數(shù)據(jù)在掉電的瞬間會將數(shù)值寫入EEPROM中,如果掉電時間超過超級電容和電池的保持時間之后,,再上電時,,CPU會將EEPROM中存儲的數(shù)據(jù)數(shù)值寫回到RAM中對應(yīng)的存儲區(qū),,實現(xiàn)保持數(shù)據(jù)的目的。
注意:實現(xiàn)該功能一定要將修改過的系統(tǒng)塊下載到CPU中,。
2、數(shù)據(jù)塊中定義的數(shù)據(jù),,如圖3所示,,當下載數(shù)據(jù)塊的時候,同時會將定義的數(shù)據(jù)下載到EEPROM中,,這樣,,當?shù)綦姇r間超過超級電容和電池的保持時間之后,再上電時,,CPU會將EEPROM中存儲的數(shù)據(jù)塊中定義的數(shù)據(jù)數(shù)值寫回到RAM中對應(yīng)的存儲區(qū),,實現(xiàn)保持數(shù)據(jù)的目的。也就是恢復(fù)成數(shù)據(jù)的初始設(shè)置值,。
注意:實現(xiàn)該功能一定要將定義好數(shù)據(jù)的數(shù)據(jù)塊下載到CPU中,。
圖3
3、使用SMB31和SMW32控制字來實現(xiàn)將V區(qū)的數(shù)據(jù)存到EEPROM中
特殊存儲器字節(jié)31 (SMB31)命令S7-200將V存儲區(qū)中的某個值復(fù)制到存儲器的V存儲區(qū),,置位SM31.7提供了初始化存儲操作的命令,。特殊存儲器字32 (SMW32)中存儲所要復(fù)制數(shù)據(jù)的地址。如圖4為S7-200系統(tǒng)手冊內(nèi)關(guān)于SMB31和SMW32的使用說明,。
圖4
采用下列步驟來保存或者寫入V存儲區(qū)中的一個特定數(shù)值:
1. 將要保存的V存儲器的地址裝載到SMW32中,。
2. 將數(shù)據(jù)長度裝載入SM31.0和SM31.1。具體含義如圖4所示,。
3. 將SM31.7置為1,。
圖5
注意:如果在數(shù)據(jù)塊中定義了某地址的數(shù)據(jù),而又使用這種辦法存儲同樣地址的數(shù)據(jù),,則當CPU內(nèi)超級電容或電池沒電時,,CPU再上電時將采用SMB31和SMW32存儲的數(shù)據(jù)。
問題8:EEPROM寫入次數(shù)的統(tǒng)計,?
回答:每次下載程序塊/數(shù)據(jù)塊/系統(tǒng)塊或者執(zhí)行一次SMB31.7置位的操作都算作對EEPROM的一次寫操作,,所以請注意在程序中一定不要每周期都調(diào)用SMB31/SMW32用于將數(shù)據(jù)寫入EEPROM內(nèi),否則CPU將很快報廢,。
問題9:不使用數(shù)據(jù)塊的方法,,如何在程序中實現(xiàn)不止一個V區(qū)數(shù)據(jù)的存儲?
回答:由于SMB31/SMW32一次多只能送入一個V區(qū)雙字給EEPROM區(qū)域,,因而當有超過一個雙字的數(shù)據(jù)需要送入EEPROM中時,,需要程序配合實現(xiàn)。具體操作方法可參照如下的例子,,即使用SMB31/SMW32送完一個數(shù)據(jù)(字節(jié)/字/雙字)之后,,通過一個標志位(如M0.0)來觸發(fā)下一個SMB31/SMW32操作,之后需要將上一個標志位清零,,以用于下一次的存儲數(shù)據(jù)的操作,。
由于SM31.7在每次操作結(jié)束之后都自動復(fù)位,因而不能使用它作為第二次觸發(fā)操作的條件,。