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