參考價(jià): | 面議 |
- 6ES7422-1BL00-0A 產(chǎn)品型號(hào)
- 西門子/SIEMENS 品牌
- 經(jīng)銷商 廠商性質(zhì)
- 上海市 所在地
訪問次數(shù):265更新時(shí)間:2018-04-18 09:52:59
6ES7422-1BL00-0AA0SIMATIC S7-400,SM 422數(shù)字量輸出模塊,光隔離,32 DO, 24V DC,0.5A
西門子SM422數(shù)字量模塊
西門子SM422數(shù)字量模塊
問題:如何計(jì)算當(dāng)前程序所需的Local Data大小并合理設(shè)置S7 400 CPU屬性中的Memory選項(xiàng)卡中的Local Data,S7 400 CPU中的Local data設(shè)置不當(dāng)會(huì)導(dǎo)致什么問題?
回答:Local data顧名思義為本地?cái)?shù)據(jù),在西門子控制器中有一部分內(nèi)存空間被設(shè)置為L(zhǎng)區(qū)間,它被用于控制器在運(yùn)行程序時(shí)存儲(chǔ)臨時(shí)數(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選項(xiàng)卡用于設(shè)置Local data的分配。如果相應(yīng)OB塊實(shí)際運(yùn)行所需的Local data大于硬件組態(tài)中所設(shè)置的Local Data大小,那么相應(yīng)的程序?qū)o法運(yùn)行,CPU將報(bào)告INTF錯(cuò)誤,甚至更為嚴(yán)重的情況下CPU可能會(huì)停止運(yùn)行。但如果盲目將Local Data的分配設(shè)置過大,將會(huì)浪費(fèi)一部分寶貴的CPU內(nèi)存空間。
S7 300CPU中的Local data不可修改,每個(gè)優(yōu)先級(jí)固定設(shè)置為256 bytes,S7 400的Local data則可以人為修改。由此可以看出正確設(shè)置S7400 CPU的Local Data的大小非常重要。在控制器硬件組態(tài)中CPU屬性? Memory選項(xiàng)卡的Local Data區(qū)域用于設(shè)置基于優(yōu)先級(jí)的Local Data(如下圖所示):
Pic1: Local Data的分配
在PCS7組態(tài)的項(xiàng)目中,在編譯CFC程序后,系統(tǒng)將會(huì)自動(dòng)計(jì)算各OB塊所需的Local Data大小,可以通過交叉索引(Chart reference data ? Local data,如下圖所示)查詢到。
Pic2: Chart reference data ? Local data
而普通的由用戶采用Step7編程方式編寫的程序,程序功能塊及OB塊各自的調(diào)用結(jié)構(gòu)由用戶自行控制,需要在編寫完整個(gè)程序之后自行計(jì)算。
在手動(dòng)計(jì)算Local Data時(shí),需要獲取如下信息:
1. 各OB塊、FB塊、FC塊各自獨(dú)立運(yùn)行時(shí)所需的Local Data大小
可以通過如下方式查詢到:在Block文件夾中選擇相應(yīng)功能塊,右鍵 屬性? General - Part2中即可查看到,如下圖所示:
Pic3: 功能塊所需的Local Data
注:嵌套調(diào)用時(shí),上一級(jí)功能塊將不會(huì)計(jì)算其嵌套調(diào)用的FB/FC所需的Local data大??;在上圖中將不會(huì)累加嵌套功能塊所需的Local data大??;
2. 整個(gè)程序的調(diào)用結(jié)構(gòu)(Call structure)
由于功能塊不會(huì)計(jì)算其嵌套調(diào)用的功能塊所需到Local data大小,因此為了zui后計(jì)算整個(gè)OB所需到Local Data,必須了解整個(gè)程序的調(diào)用結(jié)構(gòu)。打開任何一個(gè)功能塊,點(diǎn)擊左側(cè)的Call Structure即可查詢到,如下圖所示;
Pic4: 程序調(diào)用結(jié)構(gòu)
3. 當(dāng)前程序下所使用的所有OB的優(yōu)先級(jí)
由于CPU屬性設(shè)置中的Local Data分配基于優(yōu)先級(jí)進(jìn)行設(shè)置,因此需要查看所有當(dāng)前程序使用的OB塊的中斷優(yōu)先級(jí),打開硬件組態(tài)中CPU屬性查看,如下圖所示;
Pic5: 查看OB的優(yōu)先級(jí)
獲得所有上述信息后,即可計(jì)算當(dāng)前程序所需的Local data大小。假設(shè)當(dāng)前項(xiàng)目下使用的功能塊及OB塊上述相關(guān)信息如下表所示:
OB的調(diào)用關(guān)系如上圖Pic4所示。根據(jù)調(diào)用結(jié)構(gòu)計(jì)算,單獨(dú)運(yùn)行各OB塊時(shí)所需的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)先級(jí) 1 所需Local Data大小至少為526 + 20 + 20 = 566 bytes;
優(yōu)先級(jí)12所需的Local Data大小至少為526 + 20 + 20 = 566 bytes;
注:為什么上述優(yōu)先級(jí)1和12中需要加入 兩個(gè)20呢,因?yàn)槌绦蜻\(yùn)行的任何位置都有可能會(huì)執(zhí)行OB121、OB122,所以需要加上OB121和OB122所需的本地?cái)?shù)據(jù)。PCS7中(Pic2所示)進(jìn)行各優(yōu)先級(jí)所需Local data大小計(jì)算時(shí)已經(jīng)自動(dòng)加入了這部分的大小。
具體的計(jì)算法則可以歸納為一下幾點(diǎn):
1. 從內(nèi)往外,從低往高;
即:基于程序的調(diào)用結(jié)構(gòu),從zui低層、zui內(nèi)層逐步往上、往外計(jì)算;
2. 同級(jí)取zui大,內(nèi)外求和;
即:程序調(diào)用結(jié)構(gòu)中,同層FB/FC中所需的Local data取各所需Local data中的zui大值;某一優(yōu)先級(jí)所需的Local Data大小取所有相同優(yōu)先級(jí)OB所需的Local Data的zui大值;上下調(diào)用層級(jí)各自所需Local Data需求和;
3. 結(jié)果疊加OB121(編程錯(cuò)誤)、OB122(I/O讀取錯(cuò)誤);
即:zui終計(jì)算出的某優(yōu)先級(jí)所需的Local data大小需要疊加上OB121、OB122所需的Local data;
如果項(xiàng)目中CPU設(shè)置的Local Data小于程序所需Local Data大小時(shí)會(huì)有如下后果:
1. PCS7中,如果項(xiàng)目硬件組態(tài)設(shè)置的CPU的Local data大小小于程序所需的Local data大小的情況下,PCS7項(xiàng)目在編譯時(shí)將提示如下相應(yīng)警告信息:
/******************************************************************************************
W: Local data requirements for the priority class 1:
The local data requirements (890 bytes, including OB121 and OB122) of organization block OB1 exceed the configured local data stack of the corresponding priority class on the connected offline CPU.
/******************************************************************************************
如果實(shí)際運(yùn)行的CPU中的Local Data設(shè)置小于正在下載的程序所需的Local data大小將提示如下錯(cuò)誤信息,下載程序?qū)⒔K止:
/******************************************************************************************
Download to CPU SIMATIC H Station(1)CPU_417-4H_R0S7 Program(1) on 1/12/2009 10:26:16 PM (entire program)
E: Local data requirements (890 byte, inclusive OB121 and OB122) for organization block OB1 is larger than the local data stack configured in the connected online CPU for the corresponding priority class 1.
/******************************************************************************************
2. Step7編寫的程序則不會(huì)校驗(yàn)Local data分配的情況,如果實(shí)際運(yùn)行的CPU中的Local Data設(shè)置小于正在下載的程序所需的Local data大小,則在下載程序后運(yùn)行該優(yōu)先級(jí)下的程序時(shí),CPU將報(bào)告INTF錯(cuò)誤,該優(yōu)先級(jí)的程序?qū)o法執(zhí)行,并將觸發(fā)OB88(Process interrupt OB)錯(cuò)誤中斷。在CPU的診斷緩沖區(qū)中將生成類似如下的診斷信息:
/******************************************************************************************
Event 1 of 160: Event ID 16# 3576
Error when allocating local data
Caused by OB: Cyclic interrupt OB (OB 35), Priority class: 12
OB number: 35
Module address: 72
Requested OB: Processing abort OB (OB88)
Priority class: 28
Internal error, Incoming event
04:04:28.026 PM 01/14/1994
/******************************************************************************************
如果程序中沒有插入OB88,則CPU將停止運(yùn)行;在冗余CPU的情況下,在主CPU運(yùn)行,啟動(dòng)從CPU時(shí)將調(diào)用優(yōu)先級(jí)為28的OB72。如果在優(yōu)先級(jí)為28的中斷中出現(xiàn)Local Data不足的情況,則主從CPU都將停止運(yùn)行。CPU的診斷緩沖區(qū)將生成類似如下的診斷信息:
/******************************************************************************************
Event 2 of 374: Event ID 16# 4570
STOP due to processing error (OB not loaded or not possible, or no FRB)
Breakpoint in user program: CPU redundancy error OB (OB72)
Priority class: 28
OB number: 72
Module address: 6
Previous operating mode: RUN (redundant mode)
Requested operating mode: STOP (internal)
Event occurred in the standby CPU in rack 1
Internal error, Incoming event
04:08:33.523 PM 01/14/1994
/******************************************************************************************
注:任何優(yōu)先級(jí)為28的OB中出現(xiàn)Local data不足的情況都將導(dǎo)致該OB無法執(zhí)行,CPU診斷緩沖區(qū)中將報(bào)告該OB無法執(zhí)行或未裝載的錯(cuò)誤。如果未裝載該OB會(huì)導(dǎo)致CPU停止運(yùn)行,則即便程序中已經(jīng)加載了這些OB,但由于該OB出現(xiàn)Local Data不足而導(dǎo)致無法執(zhí)行,CPU仍舊會(huì)停止運(yùn)行。
1 本文描述的的TCP通訊適用范圍
TCP通訊是眾多的S7-300/S7-400通訊方式之一,可以在:CPx43-1、集成PN口的CPU、調(diào)用套接字編寫的程序、第三方支持開發(fā)以太網(wǎng)通訊的設(shè)備之間相互通訊。
本文描述的TCP通訊,僅適用于CP343-1/CP443-1(支持TCP通訊的版本)之間,建立TCP connection,調(diào)用AG_Send / AG_Recv的情形。對(duì)于CPx43-1通過TCP連接接收其他設(shè)備發(fā)送的數(shù)據(jù),如果對(duì)方設(shè)備可以協(xié)調(diào)使用本文方法也可以使用。
CPx43-1的TCP通訊,在發(fā)送接收固定長(zhǎng)度數(shù)據(jù)時(shí)沒有任何問題。但是在設(shè)備應(yīng)用過程中,往往有不同長(zhǎng)度的數(shù)據(jù)需要在兩個(gè)S7 PLC之間傳輸,如果不做處理,會(huì)出現(xiàn)接收數(shù)據(jù)錯(cuò)位或接收數(shù)據(jù)延遲超出預(yù)期時(shí)間。
解決的方法有多種,如設(shè)置通訊中可能出現(xiàn)的zui長(zhǎng)的數(shù)據(jù)長(zhǎng)度作為接收區(qū)(AG_Recv的RCV參數(shù))的固定長(zhǎng)度,其他小于該長(zhǎng)度的數(shù)據(jù)發(fā)送,也按此zui大長(zhǎng)度進(jìn)行發(fā)送(接收將出現(xiàn)多余字節(jié))。這種方法是值得*的。又如,可以設(shè)置接收區(qū)長(zhǎng)度為1字節(jié), 把對(duì)方發(fā)過來的數(shù)據(jù)逐字節(jié)逐字節(jié)的接收,也可以解決問題,但是這種方法是不*的,因?yàn)檫@種方式會(huì)使TCP接收變得極其緩慢,遠(yuǎn)遠(yuǎn)低于對(duì)方發(fā)送的速度。
本文示例介紹另外一種方式。
2 示例使用的主要PLC模塊
軟件: STEP 7 V5.5 SP1
3 示例工作機(jī)制
示例假定發(fā)送方可以自由定制發(fā)送數(shù)據(jù)的內(nèi)容及長(zhǎng)度,且zui大數(shù)據(jù)發(fā)送量小于接收CPx43-1的zui大TCP數(shù)據(jù)包長(zhǎng)度(如CP343-1的TCP數(shù)據(jù)包zui大為240字節(jié))。
實(shí)現(xiàn)的方法是,把一個(gè)數(shù)據(jù)包分割成2個(gè)部分接收,約定前部分為整包有效發(fā)送數(shù)據(jù)長(zhǎng)度,后部分為有效數(shù)據(jù)。示例的*部分按1字節(jié)作為長(zhǎng)度處理,發(fā)送方按此格式發(fā)送。
3.1 發(fā)送流程
發(fā)送方在發(fā)送之前,在AG_Send的Send參數(shù)*個(gè)字節(jié)加入數(shù)據(jù)長(zhǎng)度,后跟待發(fā)送數(shù)據(jù)串,Len參數(shù)為數(shù)據(jù)長(zhǎng)度加1個(gè)字節(jié), 然Act = True觸發(fā)發(fā)送。
3.2 接收流程
先把AG_Recv的RCV參數(shù)長(zhǎng)度設(shè)置為一個(gè)字節(jié)接收,NDR = True后,把RCV的長(zhǎng)度調(diào)整為接收到的字節(jié)所設(shè)定的長(zhǎng)度,再次啟動(dòng)接收,把有效數(shù)據(jù)完整的一次接收,這樣不會(huì)發(fā)生錯(cuò)位。
4 相關(guān)參考
示例中所涉及的TCP組態(tài)及基本編程,請(qǐng)參考下載中心文檔“通過CP343-1實(shí)現(xiàn)S7-300之間的以太網(wǎng)通訊”編號(hào)為A0020 ;對(duì)于ANY 指針的格式,請(qǐng)參考請(qǐng)參考下載中心文檔“S7-300和S7-400尋址”,編號(hào)F0215 。