狀態(tài)字是學(xué)習(xí)S7-300/400的難點之一。狀態(tài)位一共9位,我曾經(jīng)有一個疑問,為什么從來沒有看到某些狀態(tài)位在用戶程序中應(yīng)用的例子?深入學(xué)習(xí)后才知道,有3個狀態(tài)位與用戶程序無關(guān),初學(xué)者可以不用管它們。它們是檢測位/FC、狀態(tài)位STA和“或"位OR。
S7-200等plc用LD和LDI指令來表示電路塊開始的常開觸點和常閉觸點。S7-300/400沒有這樣的指令,它是用檢測位/FC的狀態(tài)為0來表示一個梯形邏輯程序段的開始,或串并聯(lián)電路塊的第一條指令。下面是一個程序段的程序:
A I0.0
A I0.1
= Q0.0
執(zhí)行第一條A指令時,檢測位為0,CPU將I0.0的值存入狀態(tài)字的第1位RLO(邏輯運算結(jié)果)。這條指令并不做“與"運算。因為此時只有一個操作數(shù),也不可能做“與"運算。
可以把第一條A指令改為O(“或")、X(“異或")指令,它們都是將該指令中I0.0的值保存到RLO。
狀態(tài)字的第2位為狀態(tài)位(STA),STA位與位邏輯指令中的位變量的值一致。它只是用于語句表的程序狀態(tài)監(jiān)控。
狀態(tài)字的第3位為或位(OR),在將兩條串聯(lián)電路并聯(lián)時,CPU首先計算出兩條串聯(lián)電路的“與"運算結(jié)果,它們分別用RLO和OR位來保存,然后再對它們做“或"運算。
從上面的分析可知,這3個狀態(tài)位用于CPU 的內(nèi)部操作或監(jiān)控,它們與用戶程序毫無關(guān)系。下面還有兩個有力的證據(jù)可以確認這個結(jié)論。
1)指令“L STW"將狀態(tài)字裝載到 累加器1,但是它不裝載狀態(tài)字的 /FC、STA和OR位。為什么?因為這3位與用戶程序無關(guān),用戶程序得到它們也沒用。
2)與狀態(tài)位有關(guān)的指令有邏輯控制指令和狀態(tài)位觸點指令,這些指令都與這3個狀態(tài)位無關(guān)