回收西門子模塊6ES75411AB000AB0 回收西門子模塊6ES75411AB000AB0
LARl 將數(shù)據(jù)塊存儲(chǔ)地址指針裝入地址寄存器1
L LW2 將數(shù)據(jù)緩沖器中的內(nèi)容裝入累加器1
T DBW[ARl,P#0.0] 將累加器的內(nèi)容存入數(shù)據(jù)塊中
L LD4 AR1+P#2.0→AR1
+ L#16 ACC1+(.._0001_0 000)
T LD4 調(diào)整模入模塊地址指針,指向下一通道Acc1+(bb bbbb bxxx)
L LD8
+ L#16
T LD8 調(diào)整數(shù)據(jù)塊存儲(chǔ)地址指針,指向下一存儲(chǔ)地址
L LW0 將循環(huán)次數(shù)計(jì)數(shù)器LW0的值裝入累加器1
LOOP NEXT 若累加器1的值不為0,將累加器減1繼續(xù)循環(huán);若累加
器為0,則結(jié)束
在FC100中,寄存器間接尋址指令OP NDB[LW0]使用了臨時(shí)本地?cái)?shù)據(jù)LW0,變量表中定義的臨時(shí)變量雖然也在L堆棧中,但不能用于存儲(chǔ)器間接尋址,從這里也可看出臨時(shí)本地?cái)?shù)據(jù)與臨時(shí)變量的區(qū)別。程序中LW2、LD4和LD8起的作用也可用臨時(shí)變量替代。
下面舉例說明如何使用FC100。在某應(yīng)用中,機(jī)架0的4號(hào)槽位安裝了一個(gè)8模入模塊(地址256開始),若要將前6個(gè)模入模塊信號(hào)讀回,存入DB50.DBW10開始的6個(gè)字單元中,可按下列形式調(diào)用FC100:
CALL FC100
PIW_Add:= 256
CH_LEN:= 6
DB_No:= 50
DBW_Addr:= 10
數(shù)據(jù)塊
數(shù)據(jù)塊定義在S7 CPU存儲(chǔ)器中,用戶可在存儲(chǔ)器中建立一個(gè)或多個(gè)數(shù)據(jù)塊。每個(gè)數(shù)據(jù)塊可大可小,但CPU對(duì)數(shù)據(jù)塊數(shù)量及數(shù)據(jù)總量有限制,如對(duì)于CPU314,用作數(shù)據(jù)塊的存儲(chǔ)器多為8 KB(8192 B),用戶定義的數(shù)據(jù)總量不能超出這個(gè)限制。對(duì)數(shù)據(jù)塊必須遵循先定義后使用的原則,否則,將造成系統(tǒng)錯(cuò)誤。
1. 定義數(shù)據(jù)塊
在編程階段和運(yùn)行程序中都能定義數(shù)據(jù)塊。大多數(shù)數(shù)據(jù)塊是在編程階段用STEP 7開發(fā)軟件包定義的,定義內(nèi)容包括數(shù)據(jù)塊號(hào)及塊中的變量(包括變量符號(hào)名、數(shù)據(jù)類型以及初始值等),定義完成后,數(shù)據(jù)塊中變量的順序及類型決定了數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu),變量的數(shù)量決定了數(shù)據(jù)塊的大小。數(shù)據(jù)塊在使用前,必須作為用戶程序的一部分下載到CPU中。
如果確實(shí)需要,還可以在程序運(yùn)行中動(dòng)態(tài)定義一個(gè)數(shù)據(jù)塊。動(dòng)態(tài)定義時(shí),數(shù)據(jù)塊號(hào)是自動(dòng)產(chǎn)生的,數(shù)據(jù)塊在存儲(chǔ)器中的位置是動(dòng)態(tài)分配的。由于要定義的數(shù)據(jù)塊有可能大于CPU存儲(chǔ)器(用于數(shù)據(jù)塊的部分)的剩余空間,因此動(dòng)態(tài)定義過程有可能失敗
2.訪問數(shù)據(jù)塊
在用戶程序中可能定義了許多數(shù)據(jù)塊,而每個(gè)數(shù)據(jù)塊中又有許多不同類型的數(shù)據(jù),因此,訪問時(shí)需要明確數(shù)據(jù)塊號(hào)和數(shù)據(jù)塊中的數(shù)據(jù)類型與位置。根據(jù)明確數(shù)據(jù)塊號(hào)的不同方法,可以用多種方法訪問數(shù)據(jù)塊中的數(shù)據(jù)。