狀態(tài)字是學(xué)習(xí)s7-300/400的難點(diǎn)之一。狀態(tài)位一共9位,我曾經(jīng)有一個(gè)疑問,為什么從來沒有看到某些狀態(tài)位在用戶程序中應(yīng)用的例子?深入學(xué)習(xí)后才知道,有3個(gè)狀態(tài)位與用戶程序無關(guān),初學(xué)者完全可以不用管它們。它們是首次檢測(cè)位/fc、狀態(tài)位sta和“或”位or。
s7-200等plc用ld和ldi指令來表示電路塊開始的常開觸點(diǎn)和常閉觸點(diǎn)。s7-300/400沒有這樣的指令,它是用首次檢測(cè)位/fc的狀態(tài)為0來表示一個(gè)梯形邏輯程序段的開始,或串并聯(lián)電路塊的第一條指令。下面是一個(gè)程序段的程序:
a i0.0
a i0.1
= q0.0
執(zhí)行第一條a指令時(shí),首次檢測(cè)位為0,cpu將i0.0的值存入狀態(tài)字的第1位rlo(邏輯運(yùn)算結(jié)果)。這條指令并不做“與”運(yùn)算。因?yàn)榇藭r(shí)只有一個(gè)操作數(shù),也不可能做“與”運(yùn)算。
可以把第一條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)時(shí),cpu首先計(jì)算出兩條串聯(lián)電路的“與”運(yùn)算結(jié)果,它們分別用rlo和or位來保存,然后再對(duì)它們做“或”運(yùn)算。
從上面的分析可知,這3個(gè)狀態(tài)位用于cpu 的內(nèi)部操作或監(jiān)控,它們與用戶程序毫無關(guān)系。下面還有兩個(gè)有力的證據(jù)可以確認(rèn)這個(gè)結(jié)論。
1)指令“l(fā) stw”將狀態(tài)字裝載到 累加器1,但是它不裝載狀態(tài)字的 /fc、sta和or位。為什么?因?yàn)檫@3位與用戶程序無關(guān),用戶程序得到它們也沒用。
2)與狀態(tài)位有關(guān)的指令有邏輯控制指令和狀態(tài)位觸點(diǎn)指令,這些指令都與這3個(gè)狀態(tài)位無關(guān)。