問題: S7-400中保持?jǐn)?shù)據(jù)傳輸?shù)囊恢滦允褂玫氖鞘裁礄C理?......
問題:
S7-400中保持?jǐn)?shù)據(jù)傳輸?shù)囊恢滦允褂玫氖鞘裁礄C理?
解答:
一致的數(shù)據(jù)指的是就內(nèi)容來說是一致的,而 且它所描述了在某個時間點的一個稱之為一致性數(shù)據(jù)的過程狀態(tài)。要保持?jǐn)?shù)據(jù)的一致性,它在傳輸或處理過程中不得被更新或改動。< /span>
樣例 1:< /span>
為了對CPU在循環(huán)程序處理過程中有一致的過程信號的映像,在程序處理前就把過程信號讀入輸入的過程映像中,并 且在程序處理后又寫到輸出的過程映像。然后,在程序處理過程中,用戶程序在對操作數(shù)區(qū)輸入(I)和輸出(Q) 尋址時并不直接訪問信號模塊,而是訪問CPU 的內(nèi)部存儲區(qū)里的過程映像 。< /span>
樣例 2:
如果一個通訊塊(比如 SFB 14 “GET”, SFB 15 “PUT”)被較高優(yōu)先級的過程警報OB所中斷,就有可能出現(xiàn)不一致性。 現(xiàn)在,如果在該過程警報OB中的用戶程序更改了已經(jīng)部分被通訊塊處理過的數(shù)據(jù),那樣的話被傳輸?shù)臄?shù)據(jù)中,部分是過程警報處理以前時間的數(shù)據(jù),部 分則是過程警報處理以後時間的數(shù)據(jù),這意味著,此數(shù)據(jù)是不一致的。
SFC 81 "UBLKMOV"
使用 SFC 81 “UBLKMOV”,把一個內(nèi)存區(qū)(源區(qū))的內(nèi)容一致地復(fù)制到另一個內(nèi)存區(qū)(目標(biāo)區(qū))里 。復(fù) 制過程不得被操作系統(tǒng)的任何其它動作所打斷。
使用SFC 81 “UBLKMOV”,可復(fù)制下列內(nèi)存區(qū):
- 位存儲器
- DB 內(nèi)容
- 輸入的過程映像
- 輸出的過程映像
可復(fù)制的zui大數(shù)據(jù)量為 512 字節(jié)。請注意與CPU性能有關(guān)的限制。有關(guān)的限制可從操作列表中看到。
既然復(fù)制過程不能打斷,在使用 SFC 81“UBLKMOV” 時,可增大CPU對報警的響應(yīng)時間。
源區(qū)和目標(biāo)區(qū)不得互相交迭。如 果的目標(biāo)區(qū)大于源區(qū),那么只把與源區(qū)里同樣多的數(shù)據(jù)復(fù)制到目標(biāo)區(qū)。如果的目標(biāo)區(qū)小于源區(qū),那 么只把目標(biāo)區(qū)能接收的那么多的數(shù)據(jù)復(fù)制入目標(biāo)區(qū)。
通訊塊和功能之間的一致性
對 S7-400 ,通 訊作業(yè)不在循環(huán)程序的執(zhí)行處來處理,而是在程序循環(huán)過程中的一個固定的時間段里處理。從系統(tǒng)來講,數(shù)據(jù)格式字節(jié),字 和雙字永遠可以得到一致性的處理,就是說傳輸一個字節(jié),一個字(兩個字節(jié))或雙字(4個字節(jié))是不會被打斷的。
如果通訊塊(比如 SFB 12 “BSEND”)只能成對使用(象SFB 12 “BSEND” 和 SFB 13 “BRCV”) 而且它訪問公共數(shù)據(jù)在用戶程序中被調(diào)用,那么也訪問本身數(shù)據(jù)區(qū),比如通過 “DONE”參數(shù)對該數(shù)據(jù)區(qū)的訪問,是可以協(xié)調(diào)的。通 過這些通訊塊局部傳輸?shù)臄?shù)據(jù)的一致性,因而可以在用戶的程序里得到保證。
使用 S7 的通訊功能時動作是不一樣的。用這些功能時目標(biāo)設(shè)備 (比如 SFB 14 “GET”, SFB 15“PUT”) 里的用戶程序不要求通訊塊。在編程時就必須把一致性數(shù)據(jù)的大小已經(jīng)考慮在內(nèi)。
訪問 CPU的工作內(nèi)存
操作系統(tǒng)的通訊功能是以固定長度數(shù)據(jù)包來訪問CPU的工作內(nèi)存。此數(shù)據(jù)包的大小與CPU性能有關(guān),S7-400 CPU是32個字節(jié)。< /span>
這樣就確保了在使用通訊功能時報警響應(yīng)時間不會被延長。由于這種訪問與用戶程序異步,你無法一致地傳輸任意個數(shù)字節(jié)的數(shù)據(jù)。< /span>
下面將解釋為保證數(shù)據(jù)一致性所要遵循的規(guī)則。
用于 SFB 14 "GET" 或讀變量的一致性規(guī)則
如果是 SFB 14 “GET”,只要遵循下列規(guī)則就可一致性地傳輸數(shù)據(jù)。
- 主動CPU(數(shù)據(jù)接收方):通過調(diào)用SFB 14讀出OB中接收區(qū)的數(shù)據(jù),或者,如果無法這樣做的話,r 在SFB 14的處理結(jié)束后讀出接收區(qū)的數(shù)據(jù)。
- 被動CPU (數(shù)據(jù)發(fā)送方):按照被動CPU (數(shù)據(jù)發(fā)送方)規(guī)定的數(shù)據(jù)塊的大小寫入與發(fā)送區(qū)大小等量的數(shù)據(jù)。
- 被動 CPU (數(shù)據(jù)發(fā)送方):在封鎖中斷的情況下把要發(fā)送的數(shù)據(jù)寫入發(fā)送區(qū)。< /span>
下圖給出了一個無法保證數(shù)據(jù)傳輸一致性的例子。因為它沒有遵守一致性規(guī)則的第二條:被動 CPU (數(shù)據(jù)發(fā)送方)的數(shù)據(jù)塊大小為 8 個字節(jié),而傳輸?shù)膮s是 32 個字節(jié)。
圖 1:數(shù)據(jù)傳輸?shù)睦?/span>
用于 SFB 15“PUT”或?qū)懽兞康囊恢滦砸?guī)則
對于 SFB 15 “PUT”,如果遵循下列規(guī)則,數(shù)據(jù)傳輸將具有一致性:
- 主動CPU (數(shù)據(jù)發(fā)送方): 把來自調(diào)用SFB 15 的OB 中的數(shù)據(jù)寫入發(fā)送區(qū)。如果不可能,在 *次調(diào)用 SFB 15 結(jié)束后寫入發(fā)送區(qū)。
- 主動CPU (數(shù)據(jù)發(fā)送方):把按照被動 CPU (數(shù)據(jù)發(fā)送方)的塊大小的數(shù)據(jù)寫入發(fā)送區(qū)。< /span>
- 被動CPU (數(shù)據(jù)接收方): 在封鎖中斷的情況下,從接收區(qū)里讀出收到的數(shù)據(jù)。< /span>
下圖為一個數(shù)據(jù)傳輸?shù)睦印S?于一致性規(guī)則的第二條沒有得到遵守<被動CPU(數(shù)據(jù)接收方)的數(shù)據(jù)塊大小只有32 個字節(jié),而發(fā)送的卻是64個字節(jié)>,無 法保證數(shù)據(jù)的一致性。
圖 2:無 法保證一致性的數(shù)據(jù)傳輸
通過SFC 81 “ UBLKMOV”可在S7-400 的用戶程序里實現(xiàn)跨幾個變量的大數(shù)據(jù)塊一致性傳輸(不可中斷的塊移動)。
這樣,例如通過SFB 14 “ GET”, SFB 15 “PUT”以及讀/寫變量,可實現(xiàn)對此數(shù)據(jù)的一致性訪問。
從一臺 DP 標(biāo)準(zhǔn)從站讀出一致性數(shù)據(jù),/ 然后把它一致性地寫入一臺 DP 標(biāo)準(zhǔn)從站。
通過SFC 14 “DPRD_DAT”從一臺 DP 標(biāo)準(zhǔn)從站一致性地讀出數(shù)據(jù)
通過SFC 14 “DPRD_DAT”(從一臺 DP 標(biāo)準(zhǔn)從站讀出一致性數(shù)據(jù)), 從一臺DP標(biāo)準(zhǔn)從站一致性地讀出數(shù)據(jù)。如果數(shù)據(jù)傳輸中無錯誤,則讀出的數(shù)據(jù)被輸入由RECORD的目標(biāo)區(qū)。< /span>
目標(biāo)區(qū)必須與你已經(jīng)用STEP 7為選定的模塊組態(tài)好的長度一致。每次調(diào)用SFC 14只能訪問一個模塊/DP ID 的數(shù)據(jù)(從組態(tài)好的起始地址)。
通過 SFC 15“DPWR_DAT” 把數(shù)據(jù)一致性地寫入一臺 DP 標(biāo)準(zhǔn)從站
通過 SFC 15“DPWR_DAT”( 把數(shù)據(jù)一致性地寫入一臺DP標(biāo)準(zhǔn)從站)把 RECORD 里的數(shù)據(jù)一致性地傳輸入賦址好的DP 標(biāo)準(zhǔn)從站。
源區(qū)的長度必須與通過 STEP 7 為選定模塊組態(tài)好的長度一致。
注意:
PROFIBUS DP標(biāo)準(zhǔn)定義了傳輸一致性用戶數(shù)據(jù)的上限(見下一節(jié))。通常的DP標(biāo)準(zhǔn)從站遵守這些限制。對于較老的CPU (<1999),對 傳輸一致性用戶數(shù)據(jù)存在與 CPU 有關(guān)的限制。
請參考這些CPU的技術(shù)數(shù)據(jù)。在關(guān)鍵字 “DP 主站 -每臺DP 從站的用戶數(shù)據(jù)” 下去尋找CPU 可以一致性地從一臺DP標(biāo)準(zhǔn)從站讀出數(shù)據(jù)和一致性地寫入一臺DP標(biāo)準(zhǔn)從站的數(shù)據(jù)的zui大長度,一些近期CPU的此項指標(biāo)已經(jīng)超過標(biāo)準(zhǔn)DP從站可能或接受的數(shù)據(jù)長度值。< /span>
一致性傳輸用戶數(shù)據(jù)到一臺 DP 從站的上限zui大值
PROFIBUS DP標(biāo)準(zhǔn)規(guī)定了傳輸一致性用戶數(shù)據(jù)到DP從站的上限。這就是為什么在一臺DP標(biāo)準(zhǔn)從站里,可用一個數(shù)據(jù)塊來一致性地傳輸zui大達64 個字 = 128 字節(jié)的用戶數(shù)據(jù)。
當(dāng)組態(tài)時,你定義了一致性區(qū)的大小。該大小用特殊的代碼格式(德語縮寫: SKF)表示為64 個字 = 128 字節(jié)(輸入用128個字節(jié),128個字節(jié)用于輸出)設(shè)置的一致性數(shù)據(jù)zui大長度。再長就不可行了。
這個上限只適用于純用戶數(shù)據(jù)。診斷數(shù)據(jù)和參數(shù)被分組到完整的數(shù)據(jù)紀(jì)錄里,因而總是得到一致性地傳輸。< /span>
在通常的代碼格式里(德語縮寫: AKF),可為一致性數(shù)據(jù)設(shè)置zui大長度16 個字 = 32 個字節(jié) (32 個字節(jié)用于輸入,32 個字節(jié)用于輸出)。再長就不可行了。
在本文里請同樣注意, 通常在一個非系統(tǒng)主站 (通過GSD連接)上的CPU 41x 作為 DP 從站時,必 須是用一般代碼格式才可加以組態(tài)?;谶@個理由,作為PROFIBUS DP上從站的 CPU 41x 的傳輸內(nèi)存的zui大長度為16 個字 = 32個字節(jié)。
不使用SFC 14 或 SFC 15 時的一致性數(shù)據(jù)訪問
一致性數(shù)據(jù)訪問 大于 4 個字節(jié)時,對于下列的CPU 是可行的(不用SFC 14或SFC 15)。要 被一致性傳輸?shù)囊粋€ DP 從站的數(shù)據(jù)區(qū)數(shù)據(jù)是被傳輸?shù)揭粋€過程映像分區(qū)的。這樣在此區(qū)域里的信息永遠是一致的。然后可用 裝載/傳輸命令 (比如L EW 1) 來訪問過程映像。
這為訪問一致性數(shù)據(jù)提供了特別方便和有力的選項(低運行開銷)。這一方案又為地結(jié)合和參數(shù)化驅(qū)動或其它 DP 從站成為可能。< /span>
它適用于下列CPU。固件版本 3.0 以上:
S7-400 CPU | MLFB |
CPU 412-1 | 6ES7 412-1XF03-0AB0 |
CPU 412-2 | 6ES7 412-2XG00-0AB0 |
CPU 414-2 | 6ES7 414-2XG03-0AB0 |
CPU 414-3 | 6ES7 414-3XJ00-0AB0 |
CPU 416-2 | 6ES7 416-2XK02-0AB0 |
CPU 416-3 | 6ES7 416-3XL00-0AB0 |
CPU 417-4 | 6ES7 417-4XL00-0AB0 |
CPU 414-4H | 6ES7 414-4HJ00-0AB0 |
CPU 417-4H | 6ES7 417-4HL01-0AB0 |
表 1:支持一致性數(shù)據(jù)訪問的CPU(不用 SFC14/SFC15)
當(dāng)你進行直接訪問時 (比方說 L PEW 或 T PAW),沒有 I/O 訪問錯。
從 采用SFC14/15 方案轉(zhuǎn)向采用過程映像方案時的注意要點:< /b>
- 當(dāng)從SFC14/15 方案轉(zhuǎn)向過程映像方案時,不建議同時使用系統(tǒng)功能以及過程映像?;旧现v,在用系統(tǒng)功能 SFC15 寫時,過程映像是被追蹤的,但 讀出的時候就不被追蹤了。 這意味著,過程映像值與系統(tǒng)功能 SFC14 的值之間的一致性是無法保證的。< /span>
- 在SFC 14/15 方案里,SFC 50 “RD_LGADR”輸 出的地址區(qū)不同于過程映像方案的地址區(qū)
- 如果使用 CP 443-5 ext,同時使用系統(tǒng)功能以及過程映像會導(dǎo)致出現(xiàn)下列出錯消息:“ 沒有對過程映像的讀/寫”,或是“不可能再用SFC 14/15 進行讀/寫”。
樣例:
下面的例子 (過程映像分區(qū) 3 “TPA 3”)顯示了 HW Config 中一種可能的組態(tài)。- TPA 3 在輸出處:這50 個字節(jié)在過程映像分區(qū)3 里是一致的(下拉列表 “一致性范圍 -> 總長度”),因而可以通過一般的 “Load input xy”命令來讀它。
在輸入下的下拉列表里選擇 “過程映像分區(qū) -> ---” 意味著過程映像里沒有存儲內(nèi)容。只 能用系統(tǒng)功能SFC14/15來處理它。