重慶西門子S7-1200PLC模塊代理(優(yōu)勢價格)

STEP 7的數(shù)據(jù)類型:BOOL、BYTE、WORD、DWORD、CHAR
數(shù)據(jù)類型為BOOL的變量表示一個位值(比如輸入I 1.0)。數(shù)據(jù)類型為BYTE、WORD和DWORD的變量分別是8位、16位或32位的位串,不能對單獨位的值進行運算。
這些數(shù)據(jù)類型的特殊形式包括了BCD碼、與計數(shù)器相關的計數(shù)值,以及以ASCII碼形式表示字符的數(shù)據(jù)類型CHAR(如圖1所示)。
圖1 BCD碼和CHAR的表示形式
1.BCD碼
在STL中,BCD碼沒有特別的標識。可以使用數(shù)據(jù)類型16#(16進制)和數(shù)字0~9輸入一個BCD碼。
BCD碼在加載定時值或計數(shù)值以及在轉換功能時使用。當啟動定時器功能時需要定時值,數(shù)據(jù)類型S5TIME#是有效的(見下文)。而計數(shù)值可以使用數(shù)據(jù)類型16#或C#。一個計數(shù)值C#是介于000~999的BCD碼,其符號位通常為0。
一般來說,BCD碼是無符號數(shù)。和轉換功能一起,BCD碼的符號由左邊(高位)的十進制數(shù)提供,這將會導致數(shù)字序列中十進制數(shù)的丟失。
當BCD碼存儲在一個16位的字中時,符號位位于較高的十進制數(shù)中,此時只涉及第15位。信號狀態(tài)“0”表示該數(shù)值為正數(shù),“1”表示負數(shù)。符號不會影響個別十進制數(shù)的設置。同樣的設置適用于一個32位的字。
16位BCD碼有效的數(shù)值范圍為0~±999,32位BCD碼是0~±9 999 999。
2.CHAR
數(shù)據(jù)類型為CHAR(字符)的變量占用1字節(jié)。數(shù)據(jù)類型CHAR表示單個以ASCII碼形式保存的字符,比如‘A’??梢栽趩我栔惺褂盟械目纱蛴∽址?。
和STL加載語句結合時,一些特殊的字體如表1所示。比如,L‘$$’將會以ASCII碼的格式加載一個美元符號。
除此之外,在加載ASCII編碼格式的字符進入累加器時,可以使用數(shù)據(jù)類型CHAR的其他特殊形式。L‘a’將一個字符(此時為a)向右對齊加載到累加器中,L‘aa’加載兩個字符,L‘aaaa’則加載四個字符。
表1 CHAR的特殊字符
基本數(shù)據(jù)類型變量的大長度為1雙字,因此可以使用加載和傳送功能或二迸制邏輯運算來處理這種變量。
基本數(shù)據(jù)類型可以占用1位、1字節(jié)、1字或者1雙字。
1.聲明
varname是變量名
datatype是一個基本數(shù)據(jù)類型
pre-assignment是一個確定的值
數(shù)據(jù)類型(比如BOOL、REAL)的標識是關鍵字,它們也可以使用小寫字母書寫?;緮?shù)據(jù)類型的變量可以在符號表中聲明為全局變量,或者在聲明段中聲明為局部變量。
2.預賦值
在聲明段,該變量可以預賦值(不聲明為功能的塊參數(shù)或暫態(tài)變量),預賦值必須和變量的數(shù)據(jù)類型*。
3.應用
可以在相應聲明的塊參數(shù)(屬于同一種數(shù)據(jù)類型POINTER或ANY)中應用基本數(shù)據(jù)類型的變量,或者使用“一般的”STL語句(比如二進制校驗、加載功能等)來存取它。
4.變量保存
基本數(shù)據(jù)類型變量的保存和有關的地址一樣,包括塊參數(shù)在內(nèi)的所有地址都是允許的。
系統(tǒng)狀態(tài)表(SZL)描述了可編程序控制器當前的狀態(tài)。使用信息功能可以讀狀態(tài)表但不可以修改。因為完整的狀態(tài)表極其龐大,所以以子表和子表摘錄的形式來實現(xiàn)讀取操作。子表是虛擬表,就是說,僅當存在請求時,CPU的操作系統(tǒng)才生成有效的表。
SZL的ID用于識別子表,它包含了表適用的模塊類型、子表摘錄的數(shù)目以及實際SZL子轟數(shù)目(如圖1所示)。系統(tǒng)提供給所需的信息和指明子表對象的索引。標準的情況是,CPU提供自動化系統(tǒng)上的信息,但是FM和CP模塊同樣可以使用這些服務以便使信息有效(見模塊文檔)??赡艿?/span>CPU的系統(tǒng)狀態(tài)表在操作說明中描述。
圖1 SZL ID的結構
1.讀報頭信息
使用SZL ID W#16#OFFxx就可以讀取SZL子表的報頭信息,而不涉及相關的數(shù)據(jù)記錄,(xx=SZL子表的序號)。參數(shù)SZL_HEADER.N_DR(數(shù)據(jù)記錄數(shù)目)返回一次SZL作業(yè)模塊可以提供的、子表摘錄的數(shù)據(jù)記錄允許的大值。對于動態(tài)子表,該值可能要比實際可讀的數(shù)目大。數(shù)據(jù)記錄長度由參數(shù)SZL_HEADER.LENGTHDR。使用報頭信息中的這些數(shù)據(jù),在啟動時就能給相關的SZL子表創(chuàng)建一個足夠大的數(shù)據(jù)緩沖器。
2.SFC 51 RESYSST讀SZL子表
使用系統(tǒng)功能SFC 51 RESYSST聲以讀系統(tǒng)狀態(tài)表(SZL)的子表或子表摘錄。SFC 51的參數(shù)在表1中列出。
表1 SFC 51 RDSYSST的參數(shù)
REQ=“1”啟動讀操作,BUSY=“0”說明操作已經(jīng)完成了。操作系統(tǒng)可以準同步地執(zhí)行幾個異步的讀取操作,讀取操作的個數(shù)取決于所使用的CPU型號。如果SFC 51通過功能值(W#16#8085)報告缺少數(shù)據(jù)源,此時必須重新發(fā)送讀取請求。
參數(shù)SZL_ID和INDEX的內(nèi)容與CPU型號有關。如果不需要使用參數(shù)INDEX提供信息,則其設置無關緊要。參數(shù)SZL_HEADER的數(shù)據(jù)類型為STRUCT,變量LENGTHDR(數(shù)據(jù)類型WORD)和N_DR(WORD)作為其組件。LENGTHDR包含了數(shù)據(jù)記錄的長度,N_DR是所讀取數(shù)據(jù)記錄的序號。
使用參數(shù)DR來SFC 51要將數(shù)據(jù)記錄輸入其中的變量或數(shù)據(jù)區(qū)。比如,P#DB200.DBX0.0 WORD 256會在數(shù)據(jù)塊DB 200中提供一個從DBB0.0開始的、長度為256字的數(shù)據(jù)區(qū)。如果提供的區(qū)域不夠大,也能夠輸入其所能容納的盡可能多的數(shù)據(jù)記錄。只能傳輸完整的數(shù)據(jù)記錄,的區(qū)域必須少能夠容納一個數(shù)據(jù)記錄。
當一個診斷中斷即將到來或即將過去的時候,操作系統(tǒng)中斷用戶程序的掃描并調(diào)用組織塊OB 82。如果OB 82沒有編程,診斷中斷發(fā)生時,CPU將跳轉到STOP模式。可以通過使用系統(tǒng)功能SFC 39 DIS_IRT和SFC 40 EN_IRT來禁止或啟用OB 82,使用SFC 41DIS_AIRT和SFC 42 EN_AIRT來延遲或啟用它。
如果主站CPU處于STOP模式,PROFIBUS DPV1從站同樣可以產(chǎn)生診斷中斷。CPU處于模式STOP時,觸發(fā)的診斷中斷可以得到響應,但不處理。即使CPU進入RUN模式,也不會實現(xiàn)組織塊OB 82的調(diào)用。
表1給出了診斷中斷OB 82的啟動信息。啟動信息的*個字節(jié)內(nèi),B#16#39代表一個即將到來的診斷中斷,B#16#38代表一個即將過去的診斷中斷。第6個字節(jié)給出了地址標識(B#16#54代表一個輸入,B#16#55對應一個輸出),隨后的INT變量包含了產(chǎn)生診斷中斷的模塊地址。接下來的4字節(jié)包含了模塊提供的診斷信息。
表1 組織塊OB 82(診斷中斷)的啟動信息
可以在OB 82中使用系統(tǒng)功能SFC 59 RD_REC(讀數(shù)據(jù)記錄),來獲得詳細的出錯信息。OB 82退出之前,診斷信息是*的,就是說,它們保持“凍結”(狀態(tài))。OB 82的退出響應模塊上的診斷中斷。
模塊的診斷數(shù)據(jù)位于數(shù)據(jù)記錄DS 0和DS 1中,數(shù)據(jù)記錄DS 0包含了診斷數(shù)據(jù)的4字節(jié),描述了模塊的當前狀態(tài)。這4字節(jié)的內(nèi)容和OB 82的啟動信息的字節(jié)8~11的內(nèi)容相同。數(shù)據(jù)記錄DS 1包含了數(shù)據(jù)記錄DS 0內(nèi)的4字節(jié)。此外,還有模塊的診斷數(shù)據(jù)。
當使用的GPU具有DPV1能力和一個相應的從站時,可以使用系統(tǒng)功能塊SFB 54 RALRM來獲取更多的診斷中斷信息。
重慶西門子S7-1200PLC模塊代理(優(yōu)勢價格)