centro
級別: *
|
一、CPU寄存器 CPU的寄存器用于尋址或處理數(shù)據(jù)。在相關(guān)命令(L, T,...)的配合下,可以在CPU存儲器區(qū)和寄存器之間進(jìn)行數(shù)據(jù)交換。 1)累加器: S7-300CPU有2個(gè)累加器,S7-400CPU有4個(gè)累加器,用于算術(shù)、比較指令或者用于其他字節(jié)、字及雙字指令。 2)地址寄存器:要S7-300/400有2個(gè)地址寄存器作為指針用于寄存器間接尋址。 3)數(shù)據(jù)塊寄存器:有2個(gè),數(shù)據(jù)塊寄存器里包含打開的(活動(dòng)的)數(shù)據(jù)塊的號碼。因此可能有2個(gè)DB同時(shí)打開,其中一個(gè)DB使用DB 寄存器,另一個(gè)作為背景DB 使用DI寄存器。打開DB時(shí),其長度自動(dòng)裝載到相應(yīng)的DB長度寄存器中。 4)狀態(tài)字:狀態(tài)字包含各個(gè)不同的狀態(tài)位,這些狀態(tài)位反應(yīng)程序執(zhí)行過程中各個(gè)指令的執(zhí)行結(jié)果或狀態(tài)。 二、存儲器區(qū)域 S7-300/400CPU 存儲器可以分為4個(gè)區(qū)域: 1)裝載存儲器用于存儲用戶程序,不包括符號地址賦值或注釋。裝載存儲器可以是RAM或者是FLASH EPROM存儲器。 2)工作存儲器用于存儲與執(zhí)行程序相關(guān)的那部分S7程序。程序只能在工作存儲區(qū)內(nèi)執(zhí)行。 3)I/O存儲區(qū)允許對所連接信號模塊的輸入和輸出進(jìn)行直接存取。 4)系統(tǒng)存儲區(qū)(RAM)包括過程映像輸入和輸出表、位存儲器、定時(shí)器和計(jì)數(shù)器等區(qū)域,此外還包括局部數(shù)據(jù)堆棧、塊堆棧和中斷堆棧。 三、狀態(tài)字 狀態(tài)字各位給出了有關(guān)指令狀態(tài)或結(jié)果的信息以及所出現(xiàn)的錯(cuò)誤。可以用二進(jìn)制邏輯操作將狀態(tài)位信號狀態(tài)直接集成到程序中,以控制程序執(zhí)行的流程。 1)首次檢查位:狀態(tài)字的0位稱作首次檢查位,如果/FC 位的信號狀態(tài)為“0”,則表示伴隨著下一條邏輯指令,程序中將開始一個(gè)新的邏輯串。FC前面的斜杠表示對FC取反。 2)邏輯運(yùn)算結(jié)果:狀態(tài)字的第1位為RLO 位(RLO= “邏輯運(yùn)算結(jié)果”),在二進(jìn)制邏輯運(yùn)算中用作暫時(shí)存儲位。比如,一串邏輯指令中的某個(gè)指令檢查觸點(diǎn)的信號狀態(tài),并根據(jù)布爾邏輯運(yùn)算規(guī)則將檢查的結(jié)果(狀態(tài) 位)與RLO位進(jìn)行邏輯門運(yùn)算,然后邏輯運(yùn)算結(jié)果又存在RLO位中。 3)狀態(tài)位:狀態(tài)位(第2位)用以保存被尋址位的值。狀態(tài)位總是向掃描指令(A,AN,O,…)或?qū)懼噶睿?,S,R,)顯示尋址位的狀態(tài)(對于寫指令,保存的尋址位狀態(tài)是本條寫指令執(zhí)行后的該尋址位的狀態(tài))。 4)OR位:在用指令OR執(zhí)行或邏輯操作之前,執(zhí)行與邏輯操作的時(shí)候,就需要用到OR這一狀態(tài)位。OR位表示先前執(zhí)行的與邏輯操作產(chǎn)生的值為“1”,于是, 邏輯操作或的執(zhí)行結(jié)果就已被確定為“1”。 5)OV位:溢出表示算術(shù)或比較指令執(zhí)行時(shí)出現(xiàn)了錯(cuò)誤。根據(jù)所執(zhí)行的算術(shù)或邏輯指令結(jié)果對該位進(jìn)行設(shè)置。 6)OS位:溢出存儲位是與OV位一起被置位的,而且在更新算術(shù)指令之后,它能夠保持這種狀態(tài),也就是說,它的狀態(tài)不會由于下一個(gè)算術(shù)指令的結(jié)果而改變。 這樣,即使是在程序的后面部分,也還有機(jī)會判斷數(shù)字區(qū)域是否溢出或者指令是否含有無效實(shí)數(shù)。OS位只有通過如下這些命令進(jìn)行復(fù)位:JOS(若OS = 1,則跳轉(zhuǎn))命令,塊調(diào)用和塊結(jié)束命令。 7)CC1及CC0位:CC1和CC0(條件代碼)位給出有關(guān)下列結(jié)果的相關(guān)信息: ? 算術(shù)指令結(jié)果 ? 或者,比較指令結(jié)果 ? 字邏輯指令,或 ? 在移位功能中,移出位相關(guān)信息。 可以用以下指令來檢查條件代碼CC1和CC0。 CC1 CC0 檢查完成后,如果: 0 0 A == 0 結(jié)果 = 0 (ACCU2 = ACCU1) 1 0 A > 0 結(jié)果 > 0 (ACCU2 > ACCU1) 0 1 A monitor功能激活的時(shí)候,BR位的值也會影響LAD/STL/FBD 編輯器中處理的塊的顯示。 BR位設(shè)置為“1”的調(diào)用塊,表明了狀態(tài)完成,否則即表明狀態(tài)未完成。 四、狀態(tài)指令 1)跳轉(zhuǎn)功能 使用跳轉(zhuǎn)功能,可以中斷程序線性處理過程而轉(zhuǎn)向塊的另一個(gè)位置接著執(zhí)行。程序分支的執(zhí)行可能無關(guān)任何條件,或者僅當(dāng)滿足特定條件后才執(zhí)行。 2)無條件跳轉(zhuǎn) JU 跳轉(zhuǎn)功能總是執(zhí)行的,也就是說,它的執(zhí)行不依賴于任何條件。JU跳轉(zhuǎn)功能可以中斷程序的線性處理過程而轉(zhuǎn)向跳轉(zhuǎn)標(biāo)號處執(zhí)行程序。JU 跳轉(zhuǎn)功能不論是在跳轉(zhuǎn)處,還是在目的標(biāo)號處都不影響狀態(tài)位。 3)帶有RLO和BR 依據(jù)RLO位和BR位的狀態(tài),程序可實(shí)現(xiàn)分支執(zhí)行。而且,能夠在RLO位檢查的跳轉(zhuǎn)功能,同時(shí)將其保存到BR位中去。 根據(jù)RLO位狀態(tài)而跳轉(zhuǎn)的功能(JC, JCN)指令,無論條件滿足與否,都將狀態(tài)位STA和RLO設(shè)置為“1”,將OR和/FC位設(shè)置為“0”。 具有RLO位狀態(tài)保存能力的跳轉(zhuǎn)功能指令(JCB, JNB)將RLO位的狀態(tài)保存到BR位中。其余的狀態(tài)位:STA、RLO、R和/FC位的處理方式與那些不保存RLO狀態(tài)的跳轉(zhuǎn)功能相同。 取決于BR位狀態(tài)的跳轉(zhuǎn)功能指令(JBI, JNBI),不論條件滿足與否,都將把狀態(tài)位STA設(shè)置為“1”,將OR位和/FC位設(shè)置為“0”。而RLO位和BR位的狀態(tài)則保持不變。 4)取決于OV和OS位, 如果有溢出發(fā)生,則執(zhí)行跳轉(zhuǎn)指令JO和JOS。在需要執(zhí)行多個(gè)連續(xù)指令的串運(yùn)算的跳轉(zhuǎn)功能 中,每次算術(shù)計(jì)算功能執(zhí)行完畢后,就必須要對OV 的狀態(tài)進(jìn)行評估。如果算術(shù)指令執(zhí)行后,其結(jié)果在所允許的數(shù)值范圍之內(nèi),而且之前產(chǎn)生的是一個(gè)溢出,則將OV 位復(fù)位。為了在串計(jì)算結(jié)束后檢測可能出現(xiàn)的數(shù)值范圍溢出,就必須要檢查OS位的狀態(tài)。OS位只能由塊調(diào)用和塊結(jié)束指令或者跳轉(zhuǎn)指令JOS進(jìn)行復(fù)位。 跳轉(zhuǎn)功能指令JO和JOS不會改變狀態(tài)字其余各位的狀態(tài)值。 5)根據(jù)CC0和CC1位: 根據(jù)狀態(tài)位CC0和CC1的狀態(tài),可以執(zhí)行某一程序功能。據(jù)此,您可以檢查計(jì)算狀態(tài)而跳轉(zhuǎn)的功能 ,結(jié)果是正值、零、或者負(fù)值? 根據(jù)狀態(tài)位C0和CC1的狀態(tài)而跳轉(zhuǎn)的跳轉(zhuǎn)功能指令不改變?nèi)魏螤顟B(tài)位的狀態(tài),而且邏輯操作結(jié)果RLO值也會“隨著”該跳轉(zhuǎn)功能帶到跳轉(zhuǎn)程序段中,供用戶程序其它邏輯操作之用(不改變/FC狀態(tài))。 示例 兩個(gè)整數(shù)相減并需進(jìn)行連續(xù)判斷: L MW2 L MW8 -I JZ ZERO // 如果結(jié)果等于“0”,則跳轉(zhuǎn)至標(biāo)號ZERO處 // 結(jié)果不等于“0”時(shí)所執(zhí)行的指令 ZERO: . // 結(jié)果等于“0”時(shí),所要執(zhí)行的指令 6)跳轉(zhuǎn)分配器 JL指令的跳轉(zhuǎn)分配器允許根據(jù)跳轉(zhuǎn)分支號,使程序跳轉(zhuǎn)到塊內(nèi)跳轉(zhuǎn)目標(biāo)程序段。JL指令是與JU跳轉(zhuǎn)功能表一起配合工作的。 該JU功能列表緊接在JL指令之后,它可以含有最大256個(gè)跳轉(zhuǎn)入口。JL指令所帶的標(biāo)號指向JU功能列表的末端,也即,指向列表后面的第一條指令。 在JL 和 :之間,只能是跳轉(zhuǎn)指令JU。如果“0”位于寄存器ACCU1-L-L中,那么就執(zhí)行第一個(gè)跳轉(zhuǎn)指令,如果“1”位于寄存器ACCU1-L-L,那么就執(zhí)行第二個(gè)跳轉(zhuǎn)指令,等等,依此類推。如果其中的數(shù)字大于列表長度,則JC分支跳轉(zhuǎn)到列表末端。 JL指令的執(zhí)行不依賴于任何條件,而且不會改變狀態(tài)位值。 7)Loop 指令 循環(huán)指令LOOP簡化了循環(huán)程序的編程。 要編寫一個(gè)循環(huán)指令程序,需將期望執(zhí)行的循環(huán)掃描數(shù)裝入寄存器ACCU1-L中。 LOOP 指令就會把累加器ACCU1右邊的字看成是一個(gè)16位無符號數(shù),范圍是0-65535。 LOOP 指令每執(zhí)行一次,ACCU1-L中的值就減1,接著將該值與0進(jìn)行比較。如果比較結(jié)果不等于0,程序就會跳轉(zhuǎn)到LOOP指令中所指定的標(biāo)號處;如果比較結(jié)果等于0,程序不發(fā)生跳轉(zhuǎn),而是執(zhí)行緊接下來的一條指令。 8)BE BE指令用來結(jié)束當(dāng)前程序塊中的程序執(zhí)行,BE始終是塊中的最后一條指令。 當(dāng)保存塊時(shí),該指令由PG自動(dòng)產(chǎn)生,因而不必單獨(dú)輸入,此BE指令是不可見的。 操作系統(tǒng)將程序返回到主調(diào)塊,并從程序調(diào)用操作后面的第一條指令開始接著執(zhí)行程序。當(dāng)前保存的局部數(shù)據(jù)區(qū)重新激活。 9)BEU BEU 指令象BE指令一樣,用來結(jié)束當(dāng)前程序塊中的程序執(zhí)行。與BE指令不同的是,可在塊內(nèi)重復(fù)編程BEU。緊接著BEU指令后面的程序段,只有在使用跳轉(zhuǎn)功能指向它的時(shí)候才得以執(zhí)行。 10)BEC BEC指令根據(jù)RLO位的值來結(jié)束塊。如果RLO = 1,則結(jié)束當(dāng)前塊的程序執(zhí)行,并且從程序調(diào)用語句后面的第一條指令開始接著執(zhí)行程序。如果RLO=0,則不執(zhí)行BEC指令。這時(shí),CPU將RLO位設(shè)置為“1”,執(zhí)行BEC后面的指令。 |
---|---|
|