電動機功率 | 4kW | 外形尺寸 | 6mm |
---|---|---|---|
應(yīng)用領(lǐng)域 | 環(huán)保,食品,地礦,印刷包裝,紡織皮革 | 重量 | 2kg |
西門子S7-1200PLC系統(tǒng)有五種不同模塊,分別為 CPU 1211C、CPU 1212C 、 CPU 1214C、CPU1215C和CPU1217C。其中的每一種模塊都可以進行擴展,以*您的系統(tǒng)需要??稍谌魏?CPU 的前方加入一個信號板,輕松擴展數(shù)字或模擬量 I/O,同時不影響控制器的實際大小。
![]() |
參考價 | ¥433 |
訂貨量 | 1 |
更新時間:2019-06-18 10:44:29瀏覽次數(shù):178
聯(lián)系我們時請說明是化工儀器網(wǎng)上看到的信息,謝謝!
西門子S7-1200PLC模塊吉林代理商
西門子S7-300/400參數(shù)類型Pointer的應(yīng)用
1.參數(shù)類型Pointer
使用參數(shù)類型Pointer(指針),可以在調(diào)用邏輯塊時,將變量的地址作為實參傳送給聲明的形參。Pointer可以直接指向一個數(shù)據(jù)塊中的變量,例如P#DB2. DBX4.0。Pointer只能用于形參中的IN、OUT(不能用于FB)、IN_OUT變量。
Pointer占6個字節(jié)(見圖4-26),字節(jié)0和字節(jié)1中的數(shù)值用來存放數(shù)據(jù)塊的編號。如果指針不是用于數(shù)據(jù)塊,DB編號為0。字節(jié)2~5與圖4-25中的寄存器間接尋址的雙字指針的的格式相同。
圖4-26 參數(shù)類型POINTER
Pointer的實參可以采用指針形式,例如P#M50.0和P#DB2. DBX4.0,也可以采用地址形式,例如將P#M50.0簡寫為M50.0,編譯時STEP 7會將它自動地轉(zhuǎn)換為指針格式。
ANY和Pointer分別為10B和6B,不能用32位的累加器1直接訪問它們,因此在OB1中調(diào)用塊時,CPU將ANY和Pointer的實參暫時保存在OB1的臨時局部數(shù)據(jù)區(qū)中。
2.FC1的程序設(shè)計
【例】 將同一地址區(qū)中相鄰的若干個字累加。地址區(qū)的起始地址由參數(shù)類型為Pointer的輸入?yún)?shù)Start_Addr提供。在項目“寄存器間接尋址”(見隨書光盤的同名例程)中生成FC1,其局部變量如表4-5所示。
表4-5 FC1的局部變量
下面是FC1中的程序,*條指令中的P##Start_Addr是OB1的局部數(shù)據(jù)區(qū)中保存參數(shù)Start_Addr的實參的地址,指令中的P#表示指針,第2個#號表示局部變量。
L P##Start_Addr //輸入的地址指針?biāo)屠奂悠?/span>1
LAR1 //累加器1的指針值送地址寄存器AR1
L 0
L W[AR1,P#0.0] //取指針第1個字內(nèi)的數(shù)據(jù)塊編號(見圖4-26)
=I
JC _001 //不是數(shù)據(jù)塊(編號為0)則跳轉(zhuǎn)
T #DB_No //保存數(shù)據(jù)塊的編號
OPN DB[ #DB_No] //用間接尋址打開指針的數(shù)據(jù)塊
_001:L D[AR1,P#2.0] //取指針內(nèi)數(shù)據(jù)區(qū)的起始地址(圖4-26中的第2~5個字節(jié))
LAR1 //保存到AR1,AR1指向要累加的數(shù)據(jù)的起始地址
L L#0 //32位整數(shù)0裝入累加器1
T #Result //累加和清零
L #Number //循環(huán)次數(shù)裝入累加器1的低字
BACK T #Sycle_C //暫存循環(huán)計數(shù)值
L W[ AR1,P#0.0] //取數(shù)據(jù)
ITD //轉(zhuǎn)換為雙整數(shù)
L #Result //取累加和
+D //累加
T #Result //保存累加和
+ AR1 P#2.0 //地址值增加兩個字節(jié),指到下一個字
L #Sycle_C //循環(huán)計數(shù)器值裝累加器
LOOP BACK //若循環(huán)計數(shù)器值的內(nèi)容減1后非0,跳轉(zhuǎn)到標(biāo)號BACK
3.OB1的程序設(shè)計
生成共享數(shù)據(jù)塊DB2,在DB2中生成用于保存累加和的雙整數(shù)Sum(見圖4-29),以及有5個整數(shù)元素的數(shù)組Aray。下面是OB1調(diào)用FC1的程序,分別累加DB2和M區(qū)中的5個字:
CALL FC 1
Start_Addr :=DB2.DBX4.0 //數(shù)據(jù)區(qū)起始地址
Number :=5 //需要累加的字?jǐn)?shù)
Result I_DB2:DBD0 //保存運算結(jié)果的雙整數(shù)
CALL FC
Start_Addr :=P#M 10 0 //數(shù)據(jù)區(qū)起始地址
Number :=5 //需要累加的字?jǐn)?shù)
Result :=MD20 //保存運算結(jié)果的雙整數(shù)
4.程序狀態(tài)監(jiān)控
在CPU運行時打開FC1,啟動程序狀態(tài)監(jiān)控(見圖4-27),監(jiān)控累加器1(STAND-ARD)、AR1和間接尋址(INDIRECT)的地址值。累加器1中的數(shù)字用十六進制格式顯示。
*次調(diào)用FC1時,執(zhí)行完*條指令后,累加器1中為16#870000a8,即2#1000 0111 0000 0000 0000 0000 1010 1000,由圖4-26和表4-3可知,這是地址P#V21.0,即*次調(diào)用FC1時OB1的局部變量LB21的地址。
第4條指令讀取Pointer的實參的*個字(數(shù)據(jù)塊編號),判別是不是數(shù)據(jù)塊。如果非零(表示是數(shù)據(jù)塊)則用16位存儲器間接尋址(DB[#DB_No])打開該數(shù)據(jù)塊。用指令“L D[AR1,P#2.0]”來讀取Pointer實參的2~5個字節(jié)(數(shù)據(jù)區(qū)的起始地址DBX4.0)。將該地址送入AR1后,AR1指向DB2. DBX4.0,監(jiān)控區(qū)中的AR1列顯示DB4.0。FC1中標(biāo)號BACK下面的第2條“L W[AR1,P#0.0]”指令取出的是DB2. DBW4的值。
為了驗證V區(qū)是調(diào)用FC1的OB1的局部數(shù)據(jù)區(qū),在FC1的第2條指令處設(shè)置一個斷點。執(zhí)行完第2條指令后,CPU進入HOLD(保持)模式。
此時打開CPU模塊信息對話框的“堆棧”選項卡,選中B堆棧中的OB1,點擊“L堆棧”按鈕,打開OB1的局部數(shù)據(jù)堆棧對話框(見圖4-28)。此時可以看到指針常數(shù)P#DB2. DBX4.0的值16#0002 8400 0020存放在從OB1的局部數(shù)據(jù)字節(jié)LB21開始的6個字節(jié)中。
圖4-28 L堆棧中的局部變量
圖4-29 DB2中的數(shù)據(jù)與運算結(jié)果
圖4-30 變量表中的數(shù)據(jù)與運算結(jié)果
5.程序運行的監(jiān)控
生成和打開名為“VAT累加”的變量表,在變量表中生成6個變量。圖4-29和圖4-30給出了兩次調(diào)用FC1被累加的5個字和累加的結(jié)果(雙整數(shù))。
參數(shù)類型是為邏輯塊的形參定義的數(shù)據(jù)類型,用于在調(diào)用邏輯塊時傳遞參數(shù)。除了簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型之外,還可以使用下列參數(shù)類型:
(1) Timer與Counter
使用參數(shù)類型Timer(定時器)和Counter(計數(shù)器),可以在調(diào)用邏輯塊時,分別將定時器和計數(shù)器的編號(例如T3、C21)作為實參傳遞給塊的形參(見圖4-16)。
(2) Block
使用參數(shù)類型Block_FC、Block_FB、Block_DB和Block_SDB,可以在調(diào)用邏輯塊時,分別將FC、FB、DB和SDB(系統(tǒng)數(shù)據(jù)塊)作為實參傳送給塊的形參。塊參數(shù)類型的實參應(yīng)為同類型的塊的地址編號(例如FB 2)或塊的符號名。
參數(shù)類型Timer、Counter、Block只能用于塊的輸入?yún)?shù)(IN)的形參。
西門子S7-1200PLC模塊吉林代理商