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ì)象的類型或編號(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é)果
打開ob1,在ob1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類型設(shè)置為struct(結(jié)構(gòu))
圖2 創(chuàng)建名為length的結(jié)構(gòu)變量
雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類型的變量,本例中分別為size和number:
圖3 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員
編寫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é)表示燈的類型(見表二),表示是sf燈還是bf燈等等。
第三個(gè)字節(jié)表示燈是亮還是滅,如果為1則燈亮,如果為0則燈的狀態(tài)是滅。
第四個(gè)字節(jié)表示燈是否閃爍,0表示不閃,1表示正常閃爍(2hz),2,表示慢閃(0.5hz)
燈的類型列表如下(不同的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的在線幫助,或者通過(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é)果
打開ob1,首先在ob1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類型設(shè)置為struct(結(jié)構(gòu))
圖5 創(chuàng)建名為length的結(jié)構(gòu)變量
雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類型的變量,本例中分別為size和number:
圖6 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員
編寫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位中,依次類推。如果從站對(duì)應(yīng)的位未被置位,則表明那個(gè)dp從站沒有通信上或不存在。
舉例:從db1.dbw2開始,每個(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的在線幫助,或者通過(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ō)明
索引
名稱
s7-300/c7
s7-400
w#16#0001
自動(dòng)化系統(tǒng)的名稱
從固件版本 v2.2 起
支持
w#16#0002
cpu 的名稱
從固件版本 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)名稱
-
支持
w#16#0008
mmc 或 mc 的序列號(hào) (參見條目號(hào):19215608)
從固件版本 v2.0 起
-
(cpu317:從 v2.1 開始)
需要注意,老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é)果
打開ob1,首先在ob1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類型設(shè)置為struct(結(jié)構(gòu))
圖8 創(chuàng)建名為length的結(jié)構(gòu)變量
雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類型的變量,本例中分別為size和number:
圖9 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員
編寫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的在線幫助,或者通過(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é)果
打開ob1,首先在ob1的臨時(shí)變量區(qū)創(chuàng)建一個(gè)變量length,類型設(shè)置為struct(結(jié)構(gòu))
圖12 創(chuàng)建名為length的結(jié)構(gòu)變量
雙擊length變量,進(jìn)入結(jié)構(gòu)變量成員定義,創(chuàng)建兩個(gè)word類型的變量,本例中分別為size和number:
圖13 創(chuàng)建length的結(jié)構(gòu)變量的兩個(gè)word成員
編寫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的在線幫助,或者通過(guò)start > simatic > documentation選擇手冊(cè)“system software for s7-300/400 system and standard functions”