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