什么是“AT”指令,如何使用?
AT指令是S7-SCL中特有的一個(gè)指令,初學(xué)者可能會(huì)忽略此指令,或者對(duì)其理解不夠深刻。AT指令在S7-SCL中有著非常重要的地位,很多應(yīng)用程序都必須使用此指令。下面將對(duì)此指令進(jìn)行詳細(xì)講解。
AT指令可以使用戶能夠以不同的數(shù)據(jù)類型來訪問一個(gè)已經(jīng)聲明的變量。此指令類似于高級(jí)編程語言中的“繼承”概念。此指令有如下特點(diǎn):
· 特點(diǎn)一:定義僅在塊內(nèi)有效,在接口參數(shù)中不出現(xiàn)
· 特點(diǎn)二:在塊中可以使用其它數(shù)據(jù)類型的視圖
· 特點(diǎn)三:它只是讓另外一些變量繼承了某個(gè)變量的特性,僅僅數(shù)據(jù)類型是新的,其它特性相同。
下面將通過具體程序?qū)σ陨先齻€(gè)特點(diǎn)進(jìn)行說明,首先定義UDT100,UDT200,大小都為12個(gè)字節(jié),但結(jié)構(gòu)不同。
UDT100包括一個(gè)DATE_AND_TIME數(shù)據(jù)類型(8個(gè)字節(jié)),還包括一個(gè)實(shí)數(shù)(4個(gè)字節(jié));UDT200包括6個(gè)字(12個(gè)字節(jié));在FC2定義輸入?yún)?shù)Buffer, Frame1,Frame2:
特點(diǎn)一:定義僅在塊內(nèi)有效,在接口參數(shù)中不出現(xiàn)。塊內(nèi)定以的輸入?yún)?shù)有3個(gè),但僅在塊內(nèi)有效,在接口參數(shù)僅出現(xiàn)Buffer輸入?yún)?shù)
特點(diǎn)三:它只是讓Frame1繼承了Buffer的特性,僅僅數(shù)據(jù)類型是新的,其它特性相同。此處的UDT100長度應(yīng)小于等于所繼承的Buffer大小,否則編譯錯(cuò)誤
注意:此處的UDT200長度應(yīng)小于等于所繼承的Buffer大小,否則編譯錯(cuò)誤
注意:UDT100,UDT200繼承了Buffer特性
在OB1中調(diào)用FC2,并將一個(gè)數(shù)組賦值給Buffer輸入?yún)?shù)
特點(diǎn)一:塊內(nèi)定以的輸入?yún)?shù)有3個(gè),但僅在塊內(nèi)有效,在接口參數(shù)僅出現(xiàn)Buffer輸入?yún)?shù)
特點(diǎn)二:對(duì)于輸入?yún)?shù)Buffer得到的數(shù)據(jù),可以按照Frame1,或Frame2的格式來尋址。例如可以將 Buffer 的前8 個(gè)字節(jié)認(rèn)為是DATA_AND_TIME,送至臨時(shí)變量TEST_DT中
AT指令應(yīng)用例子1:在STL中,用戶如果希望取得MB0的某一位的數(shù)值是非常容易的,例如第3位,直接尋址M0.2就可以了。
而在S7-SCL中,由于其具備高級(jí)語言的特點(diǎn),所以定義的變量的絕對(duì)地址一般是不顯現(xiàn)的。
因此在STL中簡單的操作,在S7-SCL中卻復(fù)雜起來。但是通過使用AT指令即可解決這個(gè)問題。
下圖中的例子中,當(dāng)輸入的某個(gè)字節(jié),其輸出依次為此字節(jié)的8個(gè)位。
AT指令應(yīng)用例子2:在S7-SCL中,ANY數(shù)據(jù)類型的使用,經(jīng)常會(huì)伴隨著AT指令的使用,下面的例子演示了如何拆分改寫ANY數(shù)據(jù)類型中的內(nèi)容。程序執(zhí)行結(jié)果相當(dāng)于:
AT指令在使用當(dāng)中,還有如下注意事項(xiàng):
· AT指令用于對(duì)某個(gè)變量進(jìn)行其它數(shù)據(jù)類型的聲明時(shí),必須放在此變量的聲明語句后面
· AT指令生成的變量不可以初始化
· AT指令用于對(duì)某個(gè)變量其它數(shù)據(jù)類型的聲明時(shí),占用內(nèi)存大小要小于等于此變量的長度
· AT指令用于對(duì)某個(gè)變量其它數(shù)據(jù)類型的聲明時(shí),如下的組合是允許的:
(1)AT指令用于ANY類型在VAR_OUT中是不允許的
Elementary (基本數(shù)據(jù)類型包括) :BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME,
S5TIME, CHAR Complex (復(fù)雜數(shù)據(jù)類型包括) :ARRAY, STRUCT, DATE_AND_TIME, STRING
在VASS標(biāo)準(zhǔn)中的應(yīng)用實(shí)例:
pMeldFeldAT TempPointerMsys: STRUCT 變量格式是結(jié)構(gòu)
BYTE0:BYTE; // Byte 0
TYP :BYTE; //Byte 1 Daten/Parametertyp
ANZ :WORD; //Byte 2+3 Laenge der Variablen
DBNR :WORD; //Byte 4+5 DB-Nummer
BZ :DWORD;// Byte 6 故障信息號(hào)
END_STRUCT;
程序中
TempPointerMsys := Msys; 故障信息號(hào)給入變量
故障報(bào)警信息
MeldSend(AufrufNr := 1
,Anz_Meld:= 27
,pMeldFeld:= pMeldFeld.BZ 故障信息號(hào)被用來發(fā)出
,pMeldAbb := pMeldAbb.BZ
,MeldDB:= WORD_TO_INT(pMeldDBNR.DBNR)
,AenderungsID := AenderungsID
,Integritaet:= Integritaet
,Neustart:= Neustart
); // VOID
審核編輯:劉清
-
AT指令
+關(guān)注
關(guān)注
1文章
41瀏覽量
12158 -
S7-SCL
+關(guān)注
關(guān)注
0文章
13瀏覽量
7749
原文標(biāo)題:SCL_什么是“AT”指令,如何使用?及其在VASS標(biāo)準(zhǔn)中的應(yīng)用
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論