s7-300/400/1500 plc中,sfc14/15用于將分站的io數(shù)據(jù)批量讀取到db塊中。move(l t)指令只能最多傳送4byte。因此,使用sfc14/15能夠簡化程序段。
laddr 硬件地址,16進(jìn)制
ret_val 返回值,0表示無故障,其它值表示故障
record 數(shù)據(jù)塊指針,例如( p#db13.dbx0.0 byte 100),注意byte和數(shù)據(jù)長度之間有空格。
80b1故障
在使用中,碰到了80b1故障,幫助文件的描述為
the length of the specified destination area is not identical to the user data
length configured with step 7.
即,db塊中的數(shù)據(jù)長度,和分站的數(shù)據(jù)長度不一致。
網(wǎng)絡(luò)結(jié)構(gòu)
我使用的網(wǎng)絡(luò)是315-2pn/dp和simotion d435-2pn/dp進(jìn)行的idevice通訊。simotion作為idevice從站,分配了i/o各100個byte。plc作為主站,以下是plc側(cè)的硬件配置。simotion的地址為300(16#12c)
故障現(xiàn)象
100個byte的通訊量比較大,我實際需要的大約為80個,因此我定義了db3,包含80個byte。在ob1中調(diào)用sfc14之后,出現(xiàn)了801b報警。
解決方法
db塊中的數(shù)據(jù)長度,需要和硬件組態(tài)中定義的分站數(shù)據(jù)長度一致。將db3改為100個byte。故障消失。
解決的方法很簡單,就是db塊的數(shù)據(jù)長度,要和分站長度一致。但解決這個問題的過程中也被一些因素誤導(dǎo),花了一些時間。例如,分站的數(shù)據(jù)長度,對于idevice,并沒有32byte/64byte這樣的限制。另外,sfc14/15在小于4byte時,并不檢查數(shù)據(jù)長度。