1 SFC 51簡(jiǎn)介
1.1 程序功能介紹
通過(guò)系統(tǒng)功能SFC 51 "RDSYSST" (讀取系統(tǒng)狀態(tài)),可以讀取系統(tǒng)狀態(tài)列表或部分系統(tǒng)狀態(tài)列表,例如指示燈狀態(tài),序列號(hào),從站狀態(tài)等等。
調(diào)用SFC 51時(shí),通過(guò)將值“1”賦給輸入?yún)?shù)REQ來(lái)啟動(dòng)讀取。如果可以立即讀取系統(tǒng)狀態(tài),則SFC將在BUSY輸出參數(shù)中返回值0。如果BUSY包含值1,則尚未完成讀取功能。 表1 SFC51參數(shù)說(shuō)明 參數(shù) | 描述 | | REQ | 輸入?yún)?shù) | REQ = 1:?jiǎn)?dòng)處理 | SSL_ID | 輸入?yún)?shù) | 將要讀取的系統(tǒng)狀態(tài)列表或部分列表的ID號(hào) | INDEX | 輸入?yún)?shù) | 部分列表中對(duì)象的類(lèi)型或編號(hào)。 | RET_VAL | 輸出參數(shù) | 如果執(zhí)行SFC時(shí)出錯(cuò),則RET_VAL參數(shù) | 將包含錯(cuò)誤代碼。 | BUSY | 輸出參數(shù) | TRUE:尚未完成讀取。 | SSL_HEADER | 輸出參數(shù) | LENTHDR是SSL列表或SSL部分列表的數(shù)據(jù)記錄的長(zhǎng)度。 | • 如果僅讀取了SSL列表的標(biāo)題信息,則N_DR包含屬于它的數(shù)據(jù)記錄數(shù)。 | • 否則,N_DR包含傳送到目標(biāo)區(qū)域的數(shù)據(jù)記錄數(shù)。 | DR | 輸出參數(shù) | SSL列表讀取或SSL部分列表讀取的目標(biāo)區(qū) | 域: | • 如果僅讀取了SSL列表的標(biāo)題信息, | 則不能評(píng)估DR的值, | 而只能評(píng)估SSL_HEADER的值。 | • 否則,LENTHDR和N_DR的乘積將指 | 示已在DR中輸入了多少字節(jié)。 |
2 讀取CPU指示燈
可以通過(guò)SFC 51讀取CPU的指示燈狀態(tài),使用的SSL_ID參數(shù)為16#74(16#19)讀取全部指示燈狀態(tài) 或者16#174(16#119)讀取單個(gè)指示燈狀態(tài) 2.1 編程
首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)塊,用來(lái)存放讀取出來(lái)的指示燈狀態(tài)結(jié)果 
圖1 創(chuàng)建DB1,存放讀取結(jié)果 打開(kāi)OB1,在OB1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類(lèi)型設(shè)置為Struct(結(jié)構(gòu))
圖2 創(chuàng)建名為length的結(jié)構(gòu)變量 雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類(lèi)型的變量,本例中分別為size和number:
圖3 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員 編寫(xiě)SFC51程序: CALL "RDSYSST"
REQ :=TRUE
SZL_ID :=W#16#74 //讀取全部指示燈狀態(tài)
INDEX :=W#16#0
RET_VAL :=MW0
BUSY :=M2.0
SZL_HEADER:=#length
DR :=P#DB1.DBX0.0 BYTE 500 //結(jié)果輸出到DB1數(shù)據(jù)塊中
DB1存放的結(jié)果即為模塊的指示燈狀態(tài),每個(gè)指示燈有4個(gè)字節(jié)的長(zhǎng)度來(lái)描述。
前兩個(gè)字節(jié)表示燈的類(lèi)型(見(jiàn)表二),表示是SF燈還是BF燈等等。
第三個(gè)字節(jié)表示燈是亮還是滅,如果為1則燈亮,如果為0則燈的狀態(tài)是滅。
第四個(gè)字節(jié)表示燈是否閃爍,0表示不閃,1表示正常閃爍(2hz),2,表示慢閃(0.5hz)
燈的類(lèi)型列表如下(不同的CPU會(huì)有不同數(shù)目的指示燈): 表2 前兩個(gè)字節(jié)的含義 16#1 | SF | 16#2 | INTF | 16#3 | EXTF | 16#4 | RUN | 16#5 | STOP | 16#6 | FORCE | 16#7 | CRST | 16#8 | BAF | 16#9 | USR | 16#A | USR1 | 16#B | BUS1F | 16#C | BUS2F | 16#D | REDF | 16#E | MSTR |
注意事項(xiàng):
關(guān)于系統(tǒng)功能SFC51的更多詳情請(qǐng)參閱STEP 7的在線(xiàn)幫助,或者通過(guò)Start > SIMATIC > DOCUMENTATION選擇手冊(cè)“System Software for S7-300/400 System and Standard Functions” 3 讀取Profibus DP從站 狀態(tài) 3.1 編程
首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)塊,用來(lái)存放讀取出來(lái)的狀態(tài)結(jié)果 
圖4 創(chuàng)建DB1,存放讀取結(jié)果 打開(kāi)OB1,首先在OB1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類(lèi)型設(shè)置為Struct(結(jié)構(gòu))
圖5 創(chuàng)建名為length的結(jié)構(gòu)變量 雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類(lèi)型的變量,本例中分別為size和number:
圖6 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員 編寫(xiě)SFC51程序: CALL "RDSYSST"
REQ :=TRUE
SZL_ID :=W#16#294 //讀取從站是否存在
INDEX :=W#16#1
RET_VAL :=MW0
BUSY :=M2.0
SZL_HEADER:=#length
DR :=P#DB1.DBX0.0 BYTE 500 //結(jié)果輸出到DB1數(shù)據(jù)塊中
在本例中,P#DB1.DBX0.0 BYTE 500中為每個(gè)DP從站(16 x 8 = 128)保留一位,地址為Address 1的DP從站的狀態(tài)保存在第三個(gè)字節(jié)的Bit 1位中, 地址為Address 3的DP從站的狀態(tài)保存在第三個(gè)字節(jié)的Bit 3位中,依次類(lèi)推。如果從站對(duì)應(yīng)的位未被置位,則表明那個(gè)DP從站沒(méi)有通信上或不存在。
舉例:從DB1.DBW2開(kāi)始,每個(gè)位對(duì)應(yīng)一個(gè)bit,例如3號(hào)站對(duì)應(yīng)的位是DB1.DBX2.3 ,站點(diǎn)存在的位為1,不存在的為0。 注意事項(xiàng):
關(guān)于系統(tǒng)功能SFC51的更多詳情請(qǐng)參閱STEP 7的在線(xiàn)幫助,或者通過(guò)Start > SIMATIC > DOCUMENTATION選擇手冊(cè)“System Software for S7-300/400 System and Standard Functions”
4讀取CPU的序列號(hào)
4.1 編程
說(shuō)明:
通過(guò) SFC 51“RDSYSST”可以從系統(tǒng)狀態(tài)列表(SSL)中讀取下列標(biāo)識(shí)數(shù)據(jù):
下面的表格指明了可以從不同型號(hào)和固件版本的 CPU 讀取其它哪些標(biāo)識(shí)數(shù)據(jù)。為此使用 SFC 51 和 SSL ID W#16#011C。 表3 INDEX說(shuō)明 索引 | 名稱(chēng) | S7-300/C7 | S7-400 | W#16#0001 | 自動(dòng)化系統(tǒng)的名稱(chēng) | 從固件版本 V2.2 起 | 支持 | W#16#0002 | CPU 的名稱(chēng) | 從固件版本 V2.2 起 | 支持 | W#16#0003 | CPU 的設(shè)備 ID | 從固件版本 V2.2 起 | 支持 | W#16#0004 | 版權(quán)條目 | 從固件版本 V2.2 起 | 支持 | W#16#0005 | CPU 的序列號(hào) | 從固件版本 V2.2 起 | 從 MLFB | 6ES741x-xxx04-0AB0 起 | W#16#0006 | 為操作系統(tǒng)保留 | - | - | W#16#0007 | CPU 型號(hào)名稱(chēng) | - | 支持 | W#16#0008 | MMC 或 MC 的序列號(hào) (參見(jiàn)條目號(hào):19215608) | 從固件版本 V2.0 起 | - | (CPU317:從 V2.1 開(kāi)始) |
需要注意,老CPU升級(jí)到上表版本也無(wú)法實(shí)現(xiàn)此功能。
首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)塊,用來(lái)存放讀取出來(lái)的狀態(tài)結(jié)果 
圖7 創(chuàng)建DB1,存放讀取結(jié)果 打開(kāi)OB1,首先在OB1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類(lèi)型設(shè)置為Struct(結(jié)構(gòu))
圖8 創(chuàng)建名為length的結(jié)構(gòu)變量 雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類(lèi)型的變量,本例中分別為size和number: 
圖9 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員 編寫(xiě)SFC51程序: CALL "RDSYSST"
REQ :=TRUE
SZL_ID :=W#16#11C //讀取CPU 的序列號(hào)
INDEX :=W#16#5
RET_VAL :=MW0
BUSY :=M2.0
SZL_HEADER:=#length
DR :=P#DB1.DBX0.0 BYTE 500 //結(jié)果輸出到DB1數(shù)據(jù)塊中
結(jié)果如下圖: 
圖10 CPU序列號(hào) 注意事項(xiàng):
關(guān)于系統(tǒng)功能SFC51的更多詳情請(qǐng)參閱STEP 7的在線(xiàn)幫助,或者通過(guò)Start > SIMATIC > DOCUMENTATION選擇手冊(cè)“System Software for S7-300/400 System and Standard Functions” 5 讀取存儲(chǔ)卡的序列號(hào) 5.1 編程
描述:
為了獲得 MMC 卡的序列號(hào),必須使用 SFC 51 "RDSYSST" 讀出系統(tǒng)狀態(tài)列表 (SSL) :
• SSL ID W#16#011C "元件的標(biāo)識(shí)"
• Index W#16#0008 "存儲(chǔ)卡的序列號(hào)"
對(duì)于所有的帶有 MMC 卡的 S7-300 CPU 和 C7 從固件版本 V2.0 起都可以讀出存儲(chǔ)卡的序列號(hào),(CPU 317: 從 V2.1 起)。
從S7-400的V5版本起,存儲(chǔ)卡上保存唯一的序列號(hào)。
首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)塊,用來(lái)存放讀取出來(lái)的狀態(tài)結(jié)果 
圖11 創(chuàng)建DB1,存放讀取結(jié)果 打開(kāi)OB1,首先在OB1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類(lèi)型設(shè)置為Struct(結(jié)構(gòu)) 
圖12 創(chuàng)建名為length的結(jié)構(gòu)變量 雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類(lèi)型的變量,本例中分別為size和number: 
圖13 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員 編寫(xiě)SFC51程序:
CALL "RDSYSST"
REQ :=TRUE
SZL_ID :=W#16#11C //讀取MMC 的序列號(hào)
INDEX :=W#16#8
RET_VAL :=MW0
BUSY :=M2.0
SZL_HEADER:=#length
DR :=P#DB1.DBX0.0 BYTE 500 //結(jié)果輸出到DB1數(shù)據(jù)塊中 結(jié)果如下: 
圖14 MMC序列號(hào) 注意事項(xiàng):
關(guān)于系統(tǒng)功能SFC51的更多詳情請(qǐng)參閱STEP 7的在線(xiàn)幫助,或者通過(guò)Start > SIMATIC > DOCUMENTATION選擇手冊(cè)“System Software for S7-300/400 System and Standard Functions”
|