什么是“AT”指令,如何使用?
AT指令是S7-SCL中特有的一個指令,初學者可能會忽略此指令,或者對其理解不夠深刻。AT指令在S7-SCL中有著非常重要的地位,很多應用程序都必須使用此指令。下面將對此指令進行詳細講解。
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,F(xiàn)rame2:
特點一:定義僅在塊內(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長度應小于等于所繼承的Buffer大小,否則編譯錯誤
注意:此處的UDT200長度應小于等于所繼承的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指令應用例子1:在STL中,用戶如果希望取得MB0的某一位的數(shù)值是非常容易的,例如第3位,直接尋址M0.2就可以了。而在S7-SCL中,由于其具備高級語言的特點,所以定義的變量的絕對地址一般是不顯現(xiàn)的。因此在STL中簡單的操作,在S7-SCL中卻復雜起來。但是通過使用AT指令即可解決這個問題。下圖中的例子中,當輸入的某個字節(jié),其輸出依次為此字節(jié)的8個位。
AT指令應用例子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 (復雜數(shù)據(jù)類型包括) :ARRAY, STRUCT, DATE_AND_TIME, STRING
在VASS標準中的應用實例:
pMeldFeld AT 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
原文標題:SCL_什么是“AT”指令,如何使用?及其在VASS標準中的應用
文章出處:【微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
AT
+關注
關注
2文章
191瀏覽量
65124 -
S7-SCL
+關注
關注
0文章
13瀏覽量
7721
原文標題:SCL_什么是“AT”指令,如何使用?及其在VASS標準中的應用
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論