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