PLC的各種功能指令中,傳送指令的使用非常頻繁,且相對簡單。一說到簡單,我猜已經有很多人蠢蠢欲動,迫不及待地想徵服這個傳送指令了。#三菱PLC入門#
那麼,廢話不多說,我們開始這次的學習分享吧!
在學習各種傳送指令之前,我們得先了解什麼是傳送指令!
一、傳送指令是什麼
區別於信息傳遞中的數據通信,我們今天講的PLC中的數據傳送指令是針對PLC內部軟元件之間的數據傳送。基於之前所學的各種軟元件,確切地說,傳送指令是應用於各種字元件之間的數據傳送。
每個字元件都存有自己的數據,有的字元件非常霸道,想把自己的數據霸佔別的字元件,在別的字元件上也存上自己的數據,這個霸佔的過程就是通過傳送指令實現的。
傳送指令就像是各個字元件之間數據戰爭的武器,你霸佔我,我霸佔你,槍林彈雨,烽火連天。
在三菱FX 2N中,傳送指令有 MOV、SMOV、CML、BMOV、FMOV五種,它們傳送數據的形式各不相同。那到底有哪些不同呢?我們接著往下看。
二、MOV傳送指令
從編程手冊中可以看到,MOV指令的操作數源址(S·)可以適用於所有的字元件,即S可以是任何的字元件,包括各種組合位元件、常數K、H等,而操作數終址(D·)除了不能是KnX、K、H外,可適用於其他字元件。且源址和終址都可進行變址尋址。
當驅動條件X0成立時,PLC將源址S中的數據傳送到終址D中,此時S的內容不變,而D的內容變得和S一樣。這就像我上文提到了,霸道S將自己的數據硬塞給D,並把D原來的數據給擠掉了,簡直是欺元件太甚!
MOV指令比較簡單,它是功能指令中應用最多的基本功能指令。MOV指令可以通過組合位元件的形式對各種位元件進行清零和置位,或者對各種字元件進行讀寫操作。
如下圖所示,執行MOV K15 K2Y0後,將K15用二進位數表示,並控制Y0~Y7的狀態。此時Y0~Y3的狀態變為1(ON),Y4~Y7的狀態變為0(OFF)。
再如MOV D10 D20,將D10的內容傳送到D20中,若D10的內容為(H98),則執行該指令後D20的內容也變為(H98)。
依次類推,MOV C0 D10 、MOV T0 D20、DMOV D0 D5等指令的理解相信難不倒大家,例如MOV T0 D20:將定時器T0的當前值傳送到D20中……
MOV指令更多的應用,還是要結合實際的案例分析才能深刻體會,本身該該指令的理解也不難,所以,在這裡我不再過多闡述。
三、SMOV數位傳送指令
所謂數位(digit),就是以4個二進位數組成的數據量,類似於字節由8位二進位數組成,字由16為二進位數組成。顯然,一個字節可以由兩個數位組成,一個字可以由4個數位組成。
基於對數位的理解,SMOV數位傳送指令就是將數據按數位為單位進行傳送。從編程手冊中可以看到,SMOV指令的動作為SMOV S· m1 m2 D· n,其中S、D是數據傳送的源址和終址,這個和MOV指令類似。
上文提到,一個字可以由4個數位組成,依此將這4個數位從右到左排列,編號分別為K1、K2、K3、K4,如上圖所示。
這樣我們就可以很快地解讀SMOV指令。如SMOV D0 K4 K2 D10 K2 : 將D0寄存器按數位劃分,從K4開始的連續2個數位的內容傳送到D10的K2、K1兩個數位中,如下圖所示。
所以,在傳送數據的時候,連續數位是按從左到右排的,當m1=K4時,最多可以傳送4個連續數位K4、K3、K2、K1的內容;當m1=K3時,最多可以傳送3個連續數位K3、K2、K1的內容,依次類推。
顯然,m1、m2、n之間有著一定的約束關係,即只有當m1≥m2,n≥m2,SMOV指令才有意義。例如SMOV S· m1 m2 D· n 中,若m1=K2,對S而言,只有K2、K1的內容可以傳送,K4、K3的內容無法傳送。
另外,SMOV指令執行有兩種模式:BCD碼執行模式和十六進位數執行模式。當特殊繼電器M8168=OFF時,SMOV指令執行BCD碼模式;當特殊繼電器M8168=ON時,SMOV指令執十六進位數模式。
所謂BCD碼其實就是十進位數,如上圖所示,當M8168=OFF時,將D0的內容(K9864)中的「986」傳送到D10中。顯然,此時D0的內容只能為K0000~K9999。只有當SMOV指令執行十六進位數執行模式時,D0中的內容可以為H0000~HFFFF。
SMOV數位傳送指令的理解也不難,在應用的過程中注意m1、m2、n的大小就行了。
四、CML取反傳送指令
CML取反傳送指令,顧名思義,就是將數據取反後再傳送。所謂取反,就是將「1」變為「0」,將「0」變為「1」,如下圖所示,執行指令CML D0 D10,若D0的內容為(K13),將K13轉換為二進位數後取反,再傳送到D10中。
CML
反傳送指令更為簡單,在這裡我也不再過多講解。
五、BMOV成批傳送指令
BMOV成批傳送指令,和上文的幾種傳送指令有比較大的區別,因為它所傳送的數據比較多,是用於多個字元件之間數據傳送。
簡單理解就是將首地址為S的n個字元件的數據傳送到以D為首地址的字元件中,其中n是傳送字元件的個數,n≤512。
例如BMOV D0 D10 K10:將D9~D0的數據分別傳送到D19~D10中。
在應用BMOV指令時要注意的兩點,一是字元件的編號重複問題。
如下圖所示,執行指令BMOV D10 D11 K5,若按編號小的元件開始傳送,先是D10的內容傳送到D11中,然後D11的內容傳送到D12中,D12的內容傳送到D13中……顯然,傳送完畢後D15~D10的內容相同,均為D10的內容。
根據以上字元件編號重複的問題,在三菱FX 2N中,作出以下規定:
(1)當源址編號大於終址編號時,其傳送順序從編號小的到編號大的;
(2)當源址編號小於終址編號時,其傳送順序從編號大的到編號小的;
所以上圖的指令BMOV D10 D11 K5中,源址D10小於終址D11,其傳送順序從編號大的開始,也就是先把D14的內容傳送到D15中,然後把D13的內容傳送到D14中……這樣就不會造成D11~D14的內容無法傳送的問題。
在應用BMOV指令時要注意的另外一點是數據傳送方向的問題。BMOV指令不僅可以將源址的數據傳送給終址,也可以調轉方向,將終址的數據傳送給源址,也就是說BMOV指令可以雙向傳送數據。
BMOV指令的數據傳送方向是由特殊繼電器M8024的狀態決定的,當M8024=OFF時,傳送方向是從源址傳向終址;當M8024=ON時,傳送方向是從終址傳向源址。
六、FMOV多點傳送指令
知道了BMOV成批傳送指令後,再來看FMOV多點傳送指令會簡單很多,如果說MOV指令是一對一、BMOV指令是多對多,那麼FMOV指令就是一對多。
如上圖的編程手冊所示,當驅動條件X0成立時,將字元件S的內容傳送到起始地址為D的n個字元件中。像上文所說的,數據的傳送就像是字元件之間的相互霸佔,而各種指令就是數據傳送的武器。
MOV指令就像是手槍,霸道S通過MOV指令只能將自己的數據傳送給一個D,把D原來的數據給擠掉;FMOV指令就像是M416步槍,霸道S通過FMOV指令將自己的數據傳送給一批D,把n個D原來的數據都給擠掉。可見FMOV指令的威力有多大。
不管是什麼傳送指令,其歸根結底也就是數據的傳送,我們只有在理解了這些指令的含義之後,才能理解它們在梯形圖中的作用。
另外,我所分享的內容也只不是皮毛,想要熟練掌握這些傳送指令,還是要結合實際程序案例分析。
那麼,這次的學習分享就到這裡啦,共勉!
註:本文章內容都是基於三菱FX PLC所寫
選自《三菱FX系列PLC功能指令詳解》第二章第12~16課時
(技成培訓原創,作者:楊思慧,未經授權不得轉載,違者必究!)