三菱FX PLC學(xué)習(xí)之?dāng)?shù)值運(yùn)算指令(下)
吳翠萍
發(fā)布于2020-10-16 15:33
14
2
標(biāo)簽:三菱PLC,三菱FX PLC
【點(diǎn)擊領(lǐng)取】三菱案例 | 西門子案例 | 電工手冊(cè) | 工具箱 軟件
【點(diǎn)擊獲取】三菱PLC例程117個(gè)|西門子PLC例程777個(gè)
【點(diǎn)擊下載】2020新電工仿真軟件
在上篇文章中,我們知道了如何在PLC中區(qū)分?jǐn)?shù)值的正負(fù),并知道了什么是整點(diǎn)數(shù)和浮點(diǎn)數(shù)。那么,這次我們接著學(xué)習(xí)PLC的各種數(shù)值運(yùn)算指令。
所謂數(shù)值運(yùn)算,就是通過加減乘除來實(shí)現(xiàn)數(shù)值的變換。然,在三菱FX PLC 2N中,這些個(gè)加減乘除具體又是怎樣實(shí)現(xiàn)的呢?
一、BIN數(shù)的四則運(yùn)算指令
BIN數(shù),即帶符號(hào)的二進(jìn)制整數(shù),它的四則運(yùn)算指令包括加、減、乘、除指令。
(1)ADD(加)指令、SUB(減)指令
從編程手冊(cè)的截圖中,可以看到,ADD指令和SUB指令都有脈沖執(zhí)行型和連續(xù)執(zhí)行型兩種,且都可用于16位和32位。當(dāng)然,它們的適用軟元件為字軟元件。
加、減指令都有兩個(gè)源操作數(shù)(S1·)、(S2·)和一個(gè)目的操作數(shù)(D·),它們?cè)谔菪螆D中的形式如下圖所示。在ADD指令中,其代表的含義為(S1) (S2)=(D),將S1中的數(shù)值加上S2中的數(shù)值,然后把和存放到D中。同理,在SUB指令中,其代表的含義為(S1)-(S2)=(D),將S1中的數(shù)值減去S2中的數(shù)值,然后把差存放到D中。
看過上篇文章的都知道,BIN數(shù)是帶有符號(hào)的,所以它們?cè)谶\(yùn)算的過程中,也要考慮到符號(hào)的影響。加、減指令在執(zhí)行后要影響到三個(gè)標(biāo)志位,如下圖所示。
M8022這個(gè)進(jìn)位標(biāo)志位,看過我系列文章的人可能還有點(diǎn)印象,其實(shí)我在寫到移位指令就提到過它。不記得的可以回顧一下移位指令的內(nèi)容。
小學(xué)生都知道,兩個(gè)數(shù)相加減會(huì)涉及到借位和進(jìn)位的問題,例如十進(jìn)制數(shù)運(yùn)算7 8=15,其中的1就是進(jìn)位,15-7=8中的1被借位。同理,PLC的BIN數(shù)四則運(yùn)算也要考慮進(jìn)位和借位問題,當(dāng)兩個(gè)數(shù)相加,它們的和大于(D)所能保存的大值后,M8022狀態(tài)為ON。同理,兩個(gè)數(shù)相減,它們的差小于(D)所能保存的小值后,M8021狀態(tài)為ON。
所謂(D)所能保存的大值或小值,是指這些參與運(yùn)算的字軟元件所能保存的數(shù)值限值,包括符號(hào)位在內(nèi)。例如上圖的例子,(D0)=K32767,執(zhí)行指令A(yù)DD D0 K1 D10后,和為K32768,一個(gè)16位的字元件,所能保存的大正整數(shù)為K32767(包括符號(hào)位),所以D10超出大值,此時(shí)進(jìn)位標(biāo)志位M8022為ON,另外,從圖中可以看到,D10的值變?yōu)?,所以此時(shí)M8020也為ON。同理,減法的溢出也是大同小異,我在此就不再舉例,大家感興趣的,可以用軟件編程驗(yàn)算一下結(jié)果。
ADD指令和SUB指令比較簡(jiǎn)單,實(shí)際運(yùn)用不用我多說大家也知道,反正哪里需要加減,哪里就會(huì)出現(xiàn)它們。但要注意的一點(diǎn)是,PLC每掃描一個(gè)周期,這些指令就執(zhí)行一次,此時(shí),重復(fù)執(zhí)行加、減運(yùn)算可能不是我們需要的,所以應(yīng)該選擇脈沖執(zhí)行型指令A(yù)DDP、SUBP或邊沿觸發(fā)型驅(qū)動(dòng)條件。
(2)MUL(乘)指令、DIV(除)指令
從編程手冊(cè)的截圖中,可以看到,MUL指令和DIV指令也有脈沖執(zhí)行型和連續(xù)執(zhí)行型兩種,且都可用于16位和32位,但終址D只有在16位運(yùn)算時(shí)才可以用V、Z字元件。
和加、減指令一樣,乘、除指令都有兩個(gè)源操作數(shù)(S1·)、(S2·)和一個(gè)目的操作數(shù)(D·),它們?cè)谔菪螆D中的形式如下圖所示。不一樣的地方在于乘法指令和除法指令的目的操作數(shù),在用于16位運(yùn)算時(shí)目的操作數(shù)占兩個(gè)字元件D、D 1,用于32位運(yùn)算時(shí)目的操作數(shù)占四個(gè)字元件D、D 1、D 2、D 3。這是很顯然的,因?yàn)槌朔ㄋ玫姆e往往比因數(shù)大很多,若此時(shí)僅用一個(gè)字元件(16位運(yùn)算時(shí))保存結(jié)果是不夠的。另外,除法運(yùn)算在無法整除的時(shí)候,就會(huì)有余數(shù),所以就要用多一個(gè)字元件來保存余數(shù)(16位運(yùn)算時(shí))。
在MUL指令中,這些操作數(shù)代表的含義為(S1)×(S2)=(D 1,D),將S1中的數(shù)值乘以S2中的數(shù)值,然后把積存放到D 1,D兩個(gè)連續(xù)字元件中。同理,在DIV指令中,其代表的含義為(S1)÷(S2)=(D)…(D 1),將S1中的數(shù)值除以S2中的數(shù)值,然后把商存放到D中,把余數(shù)存放到D 1中。其梯形圖形式如下圖所示,16位和32位所占用的字元件有所不同。
MUL指令和DIV指令也比較簡(jiǎn)單,實(shí)際運(yùn)用也不用我多說。和加、減指令一樣,PLC每掃描一個(gè)周期,這些指令就執(zhí)行一次,此時(shí),重復(fù)執(zhí)行乘、除運(yùn)算可能不是我們需要的,所以應(yīng)該選擇脈沖執(zhí)行型指令MULP、DIVP或邊沿觸發(fā)型驅(qū)動(dòng)條件。
除法運(yùn)算的除數(shù)是不能為零的,PLC中也一樣,若除數(shù)為0,錯(cuò)誤標(biāo)志位M8067=ON。
知道了BIN數(shù)的四則運(yùn)算指令后,我們接著來看加1、減1指令。
二、加1指令I(lǐng)NC和減1指令DEC
加1、減1,顧名思義,是指該指令執(zhí)行一次,數(shù)值加1或減1,。INC指令和DEC指令只有目的操作數(shù)(D·),其梯形圖形式如下圖所示。
INC指令和DEC指令在執(zhí)行的過程中不會(huì)影響到標(biāo)志位M8020、M8021、M8022。當(dāng)采用連續(xù)執(zhí)行型時(shí),顯然,D會(huì)不斷地進(jìn)行加1或減1操作,此時(shí)若超出其限值會(huì)怎樣呢?其實(shí),INC指令和DEC指令是一個(gè)單位累加(累減)環(huán)形計(jì)數(shù)器,如下圖所示。
在執(zhí)行INC指令時(shí),若當(dāng)前值為-1,加1 后其值就變?yōu)?,再加1就變?yōu)?;若當(dāng)前值為32767(H7FFF),加1后變?yōu)?32768(H8000)。同理,在執(zhí)行DEC指令時(shí),若當(dāng)前值為1,減1 后其值就變?yōu)?,再減1就變?yōu)?1;若當(dāng)前值為-32768(H8000),減1后變?yōu)?2767(H7FFF)。
談及INC指令,我就會(huì)想到一道題:求1 2 3 …… 99的和。這道題用INC指令顯然可以很簡(jiǎn)單的實(shí)現(xiàn)計(jì)算,如下圖所示。這是我隨手編的一段程序,結(jié)合INC指令和ADD指令就可以算出1 2 3 …… 99=4950。當(dāng)然,這只是隨手編的,大家也可以嘗試一下其他方法。
INC指令和DEC指令
經(jīng)常和變址尋址配合應(yīng)用在累加或累減及檢索等程序中。例如把D0~的D100的數(shù)值相加等,在這里我就不編程序啦。
知道了四則運(yùn)算指令和加1、減1指令后,我們繼續(xù)來學(xué)習(xí)一個(gè)比較繞的指令:求補(bǔ)碼指令NEG。
三、求補(bǔ)碼指令NEG
NEG指令和INC指令、DEC指令一樣,只有一個(gè)操作數(shù),驅(qū)動(dòng)條件成立時(shí),將D的數(shù)值求補(bǔ)碼,然后將結(jié)果送回到D中去。
上篇文章提到,在PLC中,正數(shù)(符號(hào)位為0)直接用其原碼表示,而(符號(hào)位為1)負(fù)數(shù)就用其補(bǔ)碼表示。而NEG指令是直接對(duì)數(shù)值進(jìn)行求反加1(包括符號(hào)位),不管當(dāng)前值是正數(shù)還是負(fù)數(shù),所以,其求出來的結(jié)果,和定義上的補(bǔ)碼有所出入。
例如-3在寄存器中用補(bǔ)碼表示(HFFFD),用NEG指令求補(bǔ)后,結(jié)果為 3(H0003);再如 6在寄存器中用原碼表示(H0006),用NEG指令求補(bǔ)后,結(jié)果為-6的補(bǔ)碼(HFFFA)。
顯然,NEG指令其實(shí)是求相反數(shù)的指令,當(dāng)然,這是基于負(fù)數(shù)本就是用補(bǔ)碼表示的前提下的。
學(xué)到這里,已經(jīng)有7個(gè)指令了,為了不那么累,這次的分享學(xué)習(xí)就先到這里吧!
注:本文章內(nèi)容都是基于三菱FX PLC 2N所寫
選自《三菱FX系列PLC功能指令詳解》第五章第29~38課時(shí)
技成培訓(xùn)網(wǎng)原創(chuàng),作者:楊思慧,未經(jīng)授權(quán)不得轉(zhuǎn)載,違者必究~

技成培訓(xùn)
微信公眾號(hào):jcpeixun
|

技成電工課堂
微信公眾號(hào):jcdgkt
|

技成PLC課堂
微信公眾號(hào):jc-plc
|