什么是“AT”指令,如何使用?
AT指令是S7-SCL中特有的一個(gè)指令,初學(xué)者可能會(huì)忽略此指令,或者對其理解不夠深刻。AT指令在S7-SCL中有著非常重要的地位,很多應(yīng)用程序都必須使用此指令。下面將對此指令進(jìn)行詳細(xì)講解。
AT指令可以使用戶能夠以不同的數(shù)據(jù)類型來訪問一個(gè)已經(jīng)聲明的變量。此指令類似于高級編程語言中的“繼承”概念。此指令有如下特點(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,F(xiàn)rame2:
特點(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)二:對于輸入?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中,由于其具備高級語言的特點(diǎn),所以定義的變量的絕對地址一般是不顯現(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指令用于對某個(gè)變量進(jìn)行其它數(shù)據(jù)類型的聲明時(shí),必須放在此變量的聲明語句后面
· AT指令生成的變量不可以初始化
· AT指令用于對某個(gè)變量其它數(shù)據(jù)類型的聲明時(shí),占用內(nèi)存大小要小于等于此變量的長度
· AT指令用于對某個(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í)例:
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; 故障信息號給入變量
故障報(bào)警信息

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
原文標(biāo)題:SCL_什么是“AT”指令,如何使用?及其在VASS標(biāo)準(zhǔn)中的應(yīng)用
文章出處:【微信公眾號:機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
AT
+關(guān)注
關(guān)注
2文章
202瀏覽量
66701 -
S7-SCL
+關(guān)注
關(guān)注
0文章
13瀏覽量
7933
原文標(biāo)題:SCL_什么是“AT”指令,如何使用?及其在VASS標(biāo)準(zhǔn)中的應(yīng)用
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
工業(yè)網(wǎng)絡(luò)跨網(wǎng)段互聯(lián):S7/TCP?轉(zhuǎn) Profinet?實(shí)施案例
在TIA Portal V21中基于S7-1200 G2使用SCL語言設(shè)計(jì)Modbus RTU輪詢程序
電子工程師必備:TPD7S019 7通道集成ESD解決方案深度剖析
西門子S7-1500 PLC和S7-300 PLC Profibus-DP通訊的組態(tài)實(shí)例
浮點(diǎn)指令(三)
蜂鳥E203擴(kuò)展浮點(diǎn)指令設(shè)計(jì)(1)
RISC-V指令集手冊中F指令部分
浮點(diǎn)指令擴(kuò)展中16位指令的處理
模擬I2C通信失敗,出現(xiàn)SCL、SDA line low錯(cuò)誤怎么解決?
天拓四方分享:什么事S7-1200 G2++?
plc以太網(wǎng)通訊模塊實(shí)現(xiàn):S7-200與S7-1200借PPI助力農(nóng)業(yè)自動(dòng)化發(fā)展
MPI 轉(zhuǎn)以太網(wǎng)模塊案例:西門子 S7-300PLC 借此與 S7-1200、觸摸屏及 ModbusRTU 變頻器通訊
S7-300借MPI轉(zhuǎn)以太網(wǎng)聯(lián)控S7-1200、HMI及Modbus變頻器方案
NVME控制器設(shè)計(jì)之指令控制
S7-1200與歐姆龍智能儀表Modbus通信案例
如何使用S7-SCL中的“AT”指令?
評論