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

CPU的各種指令和執(zhí)行流程
RISC-V基礎(chǔ)指令詳解
Erp指令能效

評論