西門(mén)子PLC語(yǔ)句表編程:跳轉(zhuǎn)指令
一、 跳轉(zhuǎn)標(biāo)簽
跳轉(zhuǎn)的"目標(biāo)"地址由"標(biāo)簽",該標(biāo)簽稱(chēng)之為"跳轉(zhuǎn)標(biāo)簽"。跳轉(zhuǎn)標(biāo)簽最多4個(gè)字符,且第一個(gè)字符必須為字母。跳轉(zhuǎn)標(biāo)簽后必須帶有冒號(hào)":" ,且在行中必須位于程序語(yǔ)句之前。二、 跳轉(zhuǎn)指令
跳轉(zhuǎn)指令根據(jù)"跳轉(zhuǎn)"的機(jī)理,首先可分為"無(wú)條件跳轉(zhuǎn)"和"條件跳轉(zhuǎn)",除此之外,還有一個(gè)特殊的跳轉(zhuǎn)指令,可實(shí)現(xiàn)分支跳轉(zhuǎn)。1、 無(wú)條件跳轉(zhuǎn)指令JU
程序在執(zhí)行時(shí),遇到JU指令,無(wú)條件的跳轉(zhuǎn)到其"標(biāo)簽"所指示的代碼行繼續(xù)執(zhí)行。跳轉(zhuǎn)指令和跳轉(zhuǎn)目標(biāo)必須在同一個(gè)塊內(nèi)。需要注意的是:理論上,JU指令允許向前跳,也允許向后跳。向后跳屬于常規(guī)用法,一般沒(méi)什么問(wèn)題。但向前跳,容易形成死循環(huán),因此,一般不建議使用JU命令向前跳。2、 有條件跳轉(zhuǎn)指令
顧名思義,與無(wú)條件跳轉(zhuǎn)不同,有條件跳轉(zhuǎn)指令中斷原程序邏輯流,發(fā)生跳轉(zhuǎn)是需要條件的,根據(jù)跳轉(zhuǎn)條件的不同,它們又有不同的分類(lèi)。(1) 由RLO的狀態(tài)決定是否跳轉(zhuǎn)對(duì)于"JC"指令,當(dāng)邏輯運(yùn)算結(jié)果(RLO)為"1"時(shí),"跳轉(zhuǎn)"生效,中斷當(dāng)前的線性掃描,跳轉(zhuǎn)到"跳轉(zhuǎn)標(biāo)簽"所標(biāo)識(shí)的行繼續(xù)執(zhí)行。同樣,可以選擇向前跳,也可以向后跳。"JCN"指令與"JC"指令相反,當(dāng)"RLO"為"1"的時(shí)候,"跳轉(zhuǎn)"生效。另外:當(dāng)條件不滿足,不執(zhí)行跳轉(zhuǎn)的時(shí)候,該指令會(huì)將RLO置"1",然后繼續(xù)執(zhí)行下面的指令。(2) 帶BR位,由RLO狀態(tài)決定是否跳轉(zhuǎn)對(duì)于"JCB"指令,其與"JC"指令一樣,當(dāng)RLO為1時(shí),"跳轉(zhuǎn)"生效,中斷當(dāng)前的線性掃描,跳轉(zhuǎn)到"跳轉(zhuǎn)標(biāo)簽"所標(biāo)識(shí)的指令行繼續(xù)執(zhí)行。而與"JC"指令不同的是,"JCB"指令會(huì)"額外"的做一項(xiàng)工作:將RLO的狀態(tài)復(fù)制到BR(二進(jìn)制結(jié)果位)中。同樣,"JNB"指令,其觸發(fā)跳轉(zhuǎn)的條件為RLO=0,且也會(huì)將RLO狀態(tài)復(fù)制到BR中。(3) 由"狀態(tài)寄存器"的"BR"位決定跳轉(zhuǎn)與否狀態(tài)字的第4位和第5位分別為"溢出位OV"和"溢出狀態(tài)保持位OS"。當(dāng)算術(shù)運(yùn)算或浮點(diǎn)數(shù)比較指令執(zhí)行時(shí)出現(xiàn)錯(cuò)誤(如溢出、非法操作和不規(guī)范的格式等)時(shí),OV位會(huì)被置1,同時(shí)OS位也被置1。而如果后面同類(lèi)指令執(zhí)行結(jié)果正確,則OV位會(huì)被清0,但OS位仍然保持為1。只有JOS指令、塊調(diào)用指令和塊結(jié)束指令才能復(fù)位OS位。一般用于檢查算術(shù)運(yùn)算指令結(jié)果是否有溢出,若有溢出,可用JO、JOS指令進(jìn)行跳轉(zhuǎn),以做相應(yīng)的錯(cuò)誤處理。(5) 由條件碼1(CC1)和條件碼0(CC0)決定是否跳轉(zhuǎn)狀態(tài)字的第7位(CC1)和第6位(CC0)分別為條件碼1和條件碼0。這兩位綜合起來(lái)用于表示在累加器1(ACCU1)中產(chǎn)生的算術(shù)運(yùn)算或邏輯運(yùn)算的結(jié)果與"0"的大小關(guān)系、比較指令的執(zhí)行結(jié)果或移位指令的移出位的結(jié)果。CC1和CC0的狀態(tài)與"算術(shù)運(yùn)算"的結(jié)果的關(guān)系如下:3、 分支跳轉(zhuǎn)指令JL
在語(yǔ)句表的指令集中,還有一條特殊的跳轉(zhuǎn)指令,它能夠?qū)崿F(xiàn)向多路分支跳轉(zhuǎn)的功能,它就是分支跳轉(zhuǎn)指令JL,JL指令根據(jù)累加器1(ACCU1)的低字節(jié)中的數(shù)值大小來(lái)決定程序"沿著"哪一條分支執(zhí)行。由于一個(gè)字節(jié)的數(shù)值范圍為0~255,因此,JL指令最多可管理多達(dá)256條分支的程序。