杭州西門子電纜6XV1830-3EH10 杭州西門子電纜6XV1830-3EH10
潯之漫 智控技術(shù)有限公司 上海詩慕自動(dòng)化設(shè)備有限公司
本公司銷售西門子自動(dòng)化產(chǎn)品,*,質(zhì)量保證,價(jià)格優(yōu)勢
西門子PLC,西門子觸摸屏,西門子數(shù)控系統(tǒng),西門子軟啟動(dòng),西門子以太網(wǎng)
西門子電機(jī),西門子變頻器,西門子直流調(diào)速器,西門子電線電纜
我公司大量現(xiàn)貨供應(yīng),價(jià)格優(yōu)勢,*,德國*
- DB寄存器和AR1受到影響的操作
1. 使用完整的DB路徑(如L DB20.Val)或者調(diào)用FC/FB時(shí)使用DB塊完整地址作為其參數(shù),則DB寄存器內(nèi)容被覆蓋。
例如在OB1中調(diào)用FC1后,DB寄存器變成20。
OPN DB1
Call FC1
bbbbb(bit):DB20.DBX0.2
因此在編程的時(shí)候,OPN 指令打開數(shù)據(jù)塊,通過DBX x.y的方式訪問其中內(nèi)容, 但是如果在打開數(shù)據(jù)塊后DB寄存器的內(nèi)容被修改了,則DBX x.y的方式訪問變量則 會訪問到錯(cuò)誤的地址。可以通過使用符號尋址的方式或者使用完整路徑編程避免,當(dāng) 然重新使用 OPN指令也是可以的。
2. 調(diào)用FC時(shí)使用bbbbbb, array, structure ,UDT作為其形參或者調(diào)用FB時(shí)使用bbbbbb, array, structure 或者UDT作為其in out形參,在FC/FB程序中訪問這些地址則AR1寄存器內(nèi)容被覆蓋,因此當(dāng)使用AR1進(jìn)行間接尋址時(shí)需要注意AR1內(nèi)容的正確性。 - AR2地址寄存器和DI寄存器在FB中作為參數(shù)和靜態(tài)變量的基址尋址使用。AR2和DI如果被修改,會影響FB的參數(shù)訪問,如果希望在FB中使用DI寄存器或者地址寄存器AR2,必須預(yù)先保存它們中的內(nèi)容,并在使用后恢復(fù)它們,例如:
TAR2 #AR2_SAVE; //AR2寄存器狀態(tài)保存到#AR2_SAVE
L DINO;
T #DB2_SAVE; //DI寄存器狀態(tài)保存到#DB2_SAVE
User Program
LAR2 #AR2_SAVE; //AR2寄存器恢復(fù)到使用前狀態(tài)
OPN DI [#DB2_SAVE]; //DI寄存器恢復(fù)到使用前狀態(tài)
1.4 如何得到多重背景FB中的變量在背景DB里的偏移量呢?
可以用下面的方法處理:
TAR2 (得到多重背景FB在背景DB里的偏移地址)
AD DW#16#00FFFFFF (屏蔽掉存儲區(qū)ID,可參考32位指針格式)
L P##Variable (得到變量在多重背景FB里的地址)
+D (多重背景FB的偏移地址與變量在多重背景FB里地址相加,即得到實(shí)際偏移量)
LAR1
上述語句就是就得到了變量在背景DB中的偏移量,從而供后續(xù)程序處理。 1.5如何在程序中使用ANY 型指針? 簡要說明如下:
L P##bbbbb //指向存儲地址指針bbbbb首地址
//這個(gè)參數(shù)是一個(gè)Any類型,P##bbbbb指向參數(shù)bbbbb的值所在地址,這就是指針的指針
LAR1 //裝載到地址寄存器AR1中。
L W [AR1,P#4.0] //打開DB塊
// 由Any類型結(jié)構(gòu)知道Any類型的Byte4、Byte5存放的數(shù)據(jù)塊號
T #BLOCK_NO
OPN DB [#BLOCK_NO] //如果是DB塊,打開的DB塊。
L W [AR1,P#2.0] //判斷ANY指針中數(shù)據(jù)長度
// Any類型的Byte2、Byte3是重復(fù)系數(shù),如P#DB1.DBX0.0 Byte 8后面的Byte 8
_001:T #DATA_LEN //通常此處做loop循環(huán)!!
L D [AR1,P#6.0] //找出需要計(jì)算數(shù)據(jù)區(qū)的開始地址
// Any類型Byte6~Byte9是32位區(qū)域地址
理解Pointer、Any的類型的數(shù)據(jù)結(jié)構(gòu),對于正確使用指針有很大幫助。
為正確使用指針,應(yīng)仔細(xì)閱讀如下內(nèi)容:
"SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 參數(shù)類型 如下的程序?qū)崿F(xiàn)了SFC20的部分功能,可以作為Any使用的參考。
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_bbbbb
SRCBLK : ANY ;
END_VAR
VAR_OUTPUT
RETVAL : INT ;
DSTBLK : ANY ;
END_VAR
VAR_TEMP
LOOP : INT ;
BLOCK_NO_DB : WORD ;
BLOCK_NO_DI : WORD ;
SRC_ADD : DWORD ;
DST_ADD : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##SRCBLK; //讀取輸入any的首地址
LAR1 ; //裝載到ar1
L P##DSTBLK; //讀取輸出any的首地址
LAR2 ; //裝載到ar2
L W [AR1,P#4.0]; //打開DB塊
T #BLOCK_NO_DB;
L W [AR2,P#4.0]; //打開DI塊
T #BLOCK_NO_DI;
OPN DB [#BLOCK_NO_DB]; //打開DB塊
OPN DI [#BLOCK_NO_DI]; //打開DI塊
L D [AR1,P#6.0];
T #SRC_ADD; //讀取地址
L D [AR2,P#6.0];
T #DST_ADD; //讀取地址 L W [AR1,P#2.0]; //讀取循環(huán)次數(shù)
_001: T #LOOP;
L DBB [#SRC_ADD];
T DIB [#DST_ADD]; //賦值
//地址偏移1個(gè)字節(jié)
L P#1.0;
L #SRC_ADD;