常用低壓電器與可編程序控制器第7章課件_第1頁
常用低壓電器與可編程序控制器第7章課件_第2頁
常用低壓電器與可編程序控制器第7章課件_第3頁
常用低壓電器與可編程序控制器第7章課件_第4頁
常用低壓電器與可編程序控制器第7章課件_第5頁
已閱讀5頁,還剩229頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第7章可編程序控制器程序編制7.1梯形圖的編程規(guī)則7.2OMRONPLC指令系統(tǒng)概述7.3CPM1A系列常用指令7.4CPM1A系列應(yīng)用指令7.1梯形圖的編程規(guī)則圖7-1梯形圖示例梯形圖的編程規(guī)則主要體現(xiàn)為以下幾點(diǎn):(1)梯形圖由多個梯級組成,每個輸出元素可構(gòu)成一個梯級。輸出元素主要指繼電器線圈或指令。(2)每個梯級可由多個支路組成,每個支路可容納多個編程元素,最右邊的元素必須是輸出元素。(3)梯形圖兩側(cè)的豎線(OMRONPLC梯形圖右側(cè)的母線省略)類似電器控制圖的電源線,稱作母線(BUSBAR)。編程時要從母線開始,按梯級從上至下,每個梯級從左到右的順序編制。左側(cè)總是安排輸入接點(diǎn),并且把并聯(lián)接點(diǎn)多的支路靠近最左端。圖7-2梯形圖的轉(zhuǎn)換(a)錯誤的梯形圖形式;(b)轉(zhuǎn)換后的正確形式梯形圖中的繼電器不是物理繼電器,其每個繼電器和輸入接點(diǎn)均為存儲器中的一位。相應(yīng)位為“1”狀態(tài)時,表示繼電器線圈通電或常開接點(diǎn)閉合或常閉接點(diǎn)斷開。梯形圖中的繼電器接點(diǎn)可在編制程序時無限引用,既可常開又可常閉。圖7-2中的輸入接點(diǎn)和輸出線圈不是物理接點(diǎn)和線圈。用戶程序的運(yùn)算是根據(jù)PLC內(nèi)I/O映像區(qū)每位的狀態(tài),而不是運(yùn)算時現(xiàn)場開關(guān)的實(shí)際狀態(tài)進(jìn)行的。7.2OMRONPLC指令系統(tǒng)概述1.指令格式指令格式是由操作碼和操作數(shù)組成的。操作碼規(guī)定CPU應(yīng)該執(zhí)行什么操作,由助記符構(gòu)成。操作數(shù)可以是I/O繼電器、IR、SR、HR、TR、AR、LR、TC、DM以及立即數(shù)。通常用繼電器區(qū)的縮寫加上通道號或繼電器號作為指令的操作數(shù);但I(xiàn)/O繼電器沒有縮寫符,可直接采用繼電器號或通道號來表示。常數(shù)也可作為指令操作數(shù),但使用時需在常數(shù)前加上“?!碧栒f明。常數(shù)可以是十進(jìn)制數(shù),也可以是十六進(jìn)制數(shù),視指令需要而定。OMRONCPM1A系列PLC也支持間接尋址,間接尋址的操作數(shù)用*DM××××表示。這種操作數(shù)是以DM××××中的數(shù)據(jù)為地址的另一個DM通道中的數(shù)據(jù)。DM××××中的內(nèi)容必須是BCD碼,且不得超出DM區(qū)的范圍。表7-1系統(tǒng)標(biāo)志項

3.指令的微分和非微分形式指令具有微分和非微分兩種形式。CPM1A系列的應(yīng)用指令多數(shù)兼有這兩種形式。微分指令要在其助記符前加標(biāo)記@。兩種指令的區(qū)別是:對于非微分指令,只要其執(zhí)行條件為ON,則每個掃描周期都將執(zhí)行該指令;微分指令僅在其執(zhí)行條件由OFF變?yōu)镺N時才執(zhí)行一次,如果執(zhí)行條件不發(fā)生變化,或者從上一個掃描周期的ON變?yōu)镺FF,則該指令不執(zhí)行。7.3CPM1A系列常用指令7.3.1梯形圖指令1.輸入/輸出和位邏輯運(yùn)算指令輸入/輸出和位邏輯運(yùn)算指令包括8條PLC梯形圖中的基本指令。它主要用于處理梯形圖中繼電器接點(diǎn)的各種連接,執(zhí)行時通過系統(tǒng)結(jié)果寄存器及系統(tǒng)堆棧作為中間單元,完成對指定繼電器狀態(tài)的輸入/輸出及邏輯處理。表7-2列出了這些指令的名稱、格式、梯形圖符號、操作數(shù)的范圍及指令的功能。圖7-3輸入/輸出指令示例(a)指令編程;(b)指令表2.邏輯塊與指令和邏輯塊或指令——ANDLD和ORLD邏輯塊與指令A(yù)NDLD和邏輯塊或指令ORLD用于處理復(fù)雜邏輯塊操作。表7-3列出了指令的格式、操作數(shù)范圍、梯形圖符號及指令的功能。表7-3ANDLD和ORLD指令

1)?ANDLD指令圖7-4ANDLD指令示例(a)指令編程;(b)指令表2)ORLD指令圖7-5ORLD指令示例(a)指令編程;(b)指令表圖7-6利用ANDLD和ORLD指令示例(a)指令編程;(b)指令表7.3.2鎖存繼電器指令——KEEP表7-4KEEP指令

當(dāng)00000為ON時,其指定位20000也會置ON,并保持ON直到復(fù)位為止。在此期間,不管00000是否保持ON或變?yōu)镺FF,當(dāng)00007置ON時,其指定位20000被復(fù)位,置為OFF;當(dāng)00000與00007端同時為ON時,00007端優(yōu)先。7.3.3置位指令和復(fù)位指令——SET、RESET表7-5SET和RESET指令

圖7-9DIFU和DIFD指令示例(a)指令編程;(b)指令表;(c)工作波形圖DIFU和DIFD指令常用在下面的幾種場合:(1)利用DIFU和DIFD指令的操作位作為某指令的執(zhí)行條件,使某條指令只在該操作位由OFF變?yōu)镺N時或由ON變?yōu)镺FF時執(zhí)行一次。(2)利用DIFU和DIFD指令產(chǎn)生脈沖信號。7.3.5空操作指令和結(jié)束指令——NOP、END表7-7NOP和END指令

在編程中一般不需要NOP指令,也沒有它的梯形圖符號。當(dāng)程序中出現(xiàn)NOP時,程序?qū)?zhí)行下一條指令。該指令主要用于程序修改。當(dāng)程序被清除后,NOP被寫入對應(yīng)的地址。NOP可以通過功能代碼00寫入。該指令不影響任何標(biāo)志位。END指令作為程序的最后一條用,它可保證END后面的指令不被執(zhí)行。當(dāng)有時要調(diào)試程序時,END可以放在程序的任何一個位置來執(zhí)行這點(diǎn)以前的指令,但調(diào)試后必須刪除它以執(zhí)行剩下的程序。如果程序沒有END指令,系統(tǒng)將出現(xiàn)“NOENDINST”的錯誤信息,且不執(zhí)行任何指令。圖7-10是END指令的示例。圖7-10END指令示例指令編程;(b)指令表7.4CPM1A系列應(yīng)用指令7.4.1定時/計數(shù)指令1.定時器指令和高速定時器指令——TIM和TIMH定時器指令TIM和高速定時器指令TIMH在輸入條件為ON時開始計時,從設(shè)定值SV起,以定時單位進(jìn)行減1運(yùn)算,當(dāng)減為0時計時時間到。表7-8列出了TIM、TIMH指令的名稱、格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-8TIM、TIMH指令

定時器TIM指令的定時單位為0.1s,延時時間可在0~999.9s范圍內(nèi)選擇。若定時時間到,則定時器的輸出為ON且保持;當(dāng)輸入條件變?yōu)镺FF時,定時器復(fù)位,輸出變?yōu)镺FF并停止定時,其當(dāng)前值PV恢復(fù)為SV。圖7-11TIM指令示例(a)指令編程;(b)指令表;(c)工作波形圖2.計數(shù)器指令——CNT計數(shù)器指令CNT在復(fù)位端R為OFF的情況下,根據(jù)CP端的輸入脈沖進(jìn)行減法計數(shù)。計數(shù)器預(yù)置數(shù)SV可在0~9999范圍內(nèi)選擇,當(dāng)計數(shù)達(dá)到0時,停止計數(shù),輸出為ON且保持。只要復(fù)位端R為ON,計數(shù)器即復(fù)位為OFF并停止計數(shù),且當(dāng)前值PV恢復(fù)為SV。計數(shù)器有掉電保持功能。表7-9列出了CNT指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-9CNT指令

圖7-12是CNT指令的應(yīng)用示例。計數(shù)器CNT001內(nèi)的預(yù)置數(shù)為50,在復(fù)位端R為OFF的條件下,通過觸點(diǎn)00000送至計數(shù)輸入端CP的脈沖被計數(shù)(脈沖上跳沿有效)。CNT001每接到一個脈沖作一次減1運(yùn)算,當(dāng)接到第50個脈沖時,其預(yù)置數(shù)減為0,CNT001狀態(tài)則由OFF變?yōu)镺N,對應(yīng)CNT001的觸點(diǎn)接通,繼電器01001變?yōu)镺N。一旦CNT001復(fù)位端R的狀態(tài)變?yōu)镺N,則計數(shù)器CNT001復(fù)位,由ON變?yōu)镺FF,繼電器01001的狀態(tài)也由于觸點(diǎn)CNT001的斷開而變?yōu)镺FF,CNT001內(nèi)部預(yù)置數(shù)恢復(fù)為50,待復(fù)位端變?yōu)镺FF后即可開始重新計數(shù)。圖7-12(c)是圖7-12(a)梯形圖的工作波形。圖7-12CNT指令示例(a)指令編程;(b)指令表;(c)工作波形圖3.可逆計數(shù)器指令——CNTRCNTR指令是一個可逆的遞增/遞減循環(huán)計數(shù)器,計數(shù)器根據(jù)增值輸入(ACP)和減值輸入(SCP)的變化對0和設(shè)定值(SV)之間計數(shù)。在復(fù)位端R為OFF的情況下,從ACP端輸入計數(shù)脈沖為加計數(shù);從SCP端輸入計數(shù)脈沖為減計數(shù);加/減計數(shù)有進(jìn)/借位時,輸出ON一個計數(shù)脈沖周期。只要復(fù)位R端為ON,計數(shù)器即復(fù)位為OFF并停止計數(shù),且不論加計數(shù)還是減計數(shù),其當(dāng)前值(PV)均變?yōu)?。若從ACP端和SCP端同時輸入,計數(shù)脈沖則不計數(shù),當(dāng)前值(PV)不變??赡嬗嫈?shù)器有掉電保持功能。表7-10CNTR指令

圖7-13CNTR指令示例(a)指令編程;(b)指令表如圖7-13所示,當(dāng)復(fù)位端R的觸點(diǎn)00003為ON時,CNTR046復(fù)位,當(dāng)前值(PV)變?yōu)?000,此時既不進(jìn)行加計數(shù),也不進(jìn)行減計數(shù)。當(dāng)00003變?yōu)镺FF時計數(shù)器開始計數(shù),其計數(shù)過程如下:若觸點(diǎn)00002為OFF,則由00001輸入計數(shù)脈沖時為加計數(shù)器。00001每輸入一個計數(shù)脈沖,CNTR046的當(dāng)前值(PV)加1。當(dāng)PV=0200時,若再輸入一個計數(shù)脈沖,則PV值變?yōu)?000(有進(jìn)位),同時CNTR046的輸出變?yōu)镺N。當(dāng)再來一個計數(shù)脈沖時,PV=1,CNTR046的輸出變?yōu)镺FF,且開始下一個循環(huán)的計數(shù)。若00001為OFF,則由00002輸入計數(shù)脈沖時為減計數(shù)器。00002每輸入一個計數(shù)脈沖,CNTR046的當(dāng)前值(PV)減1。當(dāng)PV=0000時,若再輸入一個計數(shù)脈沖,PV變?yōu)?200(有借位),同時CNTR046的輸出變?yōu)镺N。當(dāng)再來一個計數(shù)脈沖時,PV=199,且CNTR046的輸出變?yōu)镺FF,并開始下一個循環(huán)的計數(shù)。由上述操作過程可見,CNT和CNTR指令的主要區(qū)別在于:當(dāng)計數(shù)器CNT達(dá)到設(shè)定值后,只要不復(fù)位,其輸出就一直為ON,即使計數(shù)脈沖仍在輸入;而計數(shù)器CNTR達(dá)到設(shè)定值后,其輸出為ON,只要不復(fù)位,在下一個計數(shù)脈沖到來時,計數(shù)器CNTR立即變?yōu)镺FF,且開始下一輪計數(shù),即CNTR是個循環(huán)計數(shù)器。7.4.2互鎖指令和解除互鎖指令——IL、ILC互鎖指令I(lǐng)L和解除互鎖指令I(lǐng)LC常用于控制程序的流向。當(dāng)IL的輸入條件為ON時,IL和ILC之間的程序正常執(zhí)行;當(dāng)IL的輸入條件為OFF時,IL和ILC之間的程序不執(zhí)行。在這種情況下,IL和ILC之間的部分程序中所涉及的內(nèi)部器件將做如下處理:所有OUT和OUTNOT指令的輸出位為OFF;所有定時器都復(fù)位;KEEP指令的操作位、計數(shù)器、移位寄存器以及SET和RESET指令的操作位都保持IL為OFF以前的狀態(tài)。表7-11IL和ILC指令

圖7-14IL和ILC指令應(yīng)用示例(a)指令編程方式一;(b)指令編程方式二;(c)指令表圖7-15多個IL指令配一個ILC指令實(shí)例(a)指令編程方式一;(b)指令編程方式二;(c)指令表7.4.3暫存繼電器——TRTR不是編程指令,但編程中常需要用暫存繼電器TR存儲當(dāng)前指令的執(zhí)行結(jié)果或梯形圖分支點(diǎn)上存在的執(zhí)行條件,即保存結(jié)果寄存器的當(dāng)前內(nèi)容。這是因?yàn)橹噶钚性诜祷胤种c(diǎn)執(zhí)行一個分支行上的其他指令之前執(zhí)行了右側(cè)指令,使得執(zhí)行條件可能發(fā)生改變而不能完成本來的操作。它與互鎖IL和解除互鎖ILC指令同樣可作為處理程序分支的方法。CPM1A系列PLC有編號為TR0~TR7的8個暫存繼電器。如果某個TR位被設(shè)置在一個分支點(diǎn)處,則分支前面的執(zhí)行結(jié)果就會存儲在這個TR位中,但在同一分支程序段中,同一TR號不能重復(fù)使用。由于TR不是編程指令,因此只能與LD或OUT等基本指令一起使用。圖7-16使用暫存繼電器TR處理分支示例(a)指令編程;(b)用TR處理分支;(c)用IL/ILC處理分支7.4.4跳轉(zhuǎn)指令和跳轉(zhuǎn)結(jié)束指令——JMP、JME表7-12JMP和JME指令

當(dāng)程序中有多個跳轉(zhuǎn)時,就可使用跳轉(zhuǎn)號N來區(qū)分不同的JMPN/JMEN對。在00和49之間的任何一個兩位數(shù)都可以作為一個跳轉(zhuǎn)編號,但除00外,同一編號只能在程序中使用一次。當(dāng)N取00時,JMP00/JME00可以在程序中多次被使用。JMP00和JME00之間的指令被跳轉(zhuǎn)時,指令雖不執(zhí)行但仍被掃描,因此執(zhí)行的時間比其他跳轉(zhuǎn)號的執(zhí)行時間長。跳轉(zhuǎn)號不是00的JMPN/JMEN之間的指令則完全跳轉(zhuǎn),不需要掃描時間。發(fā)生跳轉(zhuǎn)時,JMPN/JMEN指令對中所有的繼電器、定時器、計數(shù)器均保持跳轉(zhuǎn)前的狀態(tài)。跳轉(zhuǎn)指令可以嵌套使用,但必須是不同跳轉(zhuǎn)號的嵌套,如JMP00-JMP01-JME(05)01-JME00等。另外,和IL/ILC指令一樣,多個JMP00可以共用一個JME00。盡管在進(jìn)行程序檢查時會出現(xiàn)錯誤信息“JMP-JMEERR”,但程序仍會正常執(zhí)行。圖7-17是使用跳轉(zhuǎn)指令的示例。圖7-17跳轉(zhuǎn)JMP和JME指令示例(a)指令編程方式一;(b)指令編程方式二;(c)指令表圖7-18多個JMP00共用一個JME00示例(a)指令編程;(b)指令表當(dāng)?shù)谝粋€JMP00條件是ON,并且第二個JMP00條件是OFF時,輸出01000的ON/OFF狀態(tài)取決于00001和00002的狀態(tài),而輸出01001和計數(shù)器仍保持它們的狀態(tài)。當(dāng)兩個JMP00在同一時間的條件都是ON時,程序的執(zhí)行與沒有JMP00指令時一樣。將JMP/JME與IL/ILC指令進(jìn)行比較后可以發(fā)現(xiàn),由于在JMP/JME分支起作用時,I/O位、計時器等的狀態(tài)被保持,因此JMP/JME常用于控制需要一個持續(xù)輸出的設(shè)備(例如氣動裝置和液壓裝置),而IL?/?ILC分支用于控制那些不需要一個持續(xù)輸出的設(shè)備,例如電子儀器。7.4.5數(shù)據(jù)移位指令1.移位寄存器指令——SFT移位寄存器指令SFT由三個執(zhí)行條件IN、SP和R控制。當(dāng)復(fù)位端R為OFF時,隨著SP端移位脈沖的上升沿,St到E通道中的所有數(shù)據(jù)按位依次左移一位,E通道中數(shù)據(jù)的最高位溢出丟失,IN端的數(shù)據(jù)移進(jìn)St通道中的最低位;當(dāng)復(fù)位端R為ON時,St到E所有通道均復(fù)位為零,且移位指令不執(zhí)行。表7-13SFT指令

注:St和E必須在同一區(qū)域,且St≤E。移位寄存器SFT指令的執(zhí)行情況如圖7-19所示。當(dāng)移位脈沖SP由OFF變?yōu)镺N時,始通道到末通道之間的所有位向左移一位,此時IN端狀態(tài)移入St寄存器的最低位,即如果IN端為ON,則將一個“1”移入寄存器;如果IN端為OFF,則將一個“0”移入寄存器。E寄存器最左位(最高位)溢出丟失。圖7-19SFT指令執(zhí)行情況圖7-20是SFT指令的應(yīng)用示例。例中,SFT指令的首通道為HR00,末通道為HR01,以特殊輔助繼電器25502產(chǎn)生的秒脈沖作為移位脈沖,以00000的ON、OFF狀態(tài)作為輸入數(shù)據(jù)。在PLC上電后的第一個掃描周期,利用特殊輔助繼電器25315對移位寄存器進(jìn)行復(fù)位。在移位過程中,首通道HR00和末通道HR01是一個完整的數(shù)據(jù)鏈。當(dāng)HR01通道中的第07位為ON時,繼電器20000為ON。移位過程中只要觸點(diǎn)00001為ON,移位寄存器即復(fù)位。圖7-20SFT指令應(yīng)用示例(a)指令編程;(b)指令表2.雙向移位寄存器指令——SFTR/@SFTR雙向移位寄存器指令SFTR/@SFTR用于創(chuàng)建一個單字或多字的可向左或向右移位的移位寄存器。指令中的控制字C提供移位方向、寄存器的輸入狀態(tài)、移位脈沖和復(fù)位輸入。表7-14是指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。在執(zhí)行條件為ON時,SFTR/@SFTR指令根據(jù)控制字C中對應(yīng)位的狀態(tài)執(zhí)行。其功能為:(1)控制字C的復(fù)位位bit15為1時,St到E通道中的所有數(shù)據(jù)及進(jìn)位位CY全部清為0,且不接收輸入數(shù)據(jù)。(2)控制字C的復(fù)位位bit15為0時,在移位脈沖SP的作用下,根據(jù)移位脈沖的狀態(tài)進(jìn)行左移或右移,移動的方向由C的bit12的狀態(tài)決定,移位溢出的位進(jìn)入CY(25504)?!糇笠疲簭腟t到E通道的所有數(shù)據(jù),每個掃描周期按位依次左移一位。C的bit13的數(shù)據(jù)移入開始通道St的最低位中,結(jié)束通道E最高位的數(shù)據(jù)移入進(jìn)位位CY中。◆右移:從E到St通道的所有數(shù)據(jù),每個掃描周期按位依次右移一位。C的bit13的數(shù)據(jù)移入結(jié)束通道E的最高位中,開始通道St最低位的數(shù)據(jù)移入進(jìn)位位CY中。表7-14SFTR/@SFTR指令

圖7-21微分指令@SFTR示例(a)指令編程;(b)指令表圖7-21中,00004是@SFTR指令的執(zhí)行條件,IR200是控制通道,由DM0010~DM0011組成可逆移位寄存器。當(dāng)00004為ON時,@SFTR指令執(zhí)行一次移位操作;當(dāng)00004為OFF時,@SFTR指令不執(zhí)行,此時控制通道的控制位不起作用,DM0010~DM0011及CY位的數(shù)據(jù)保持不變??刂仆ǖ繧R200的bit12~bit15的狀態(tài)是由00000~00003控制的。工作時,若00000為ON,則20012為1,執(zhí)行左移位操作;若00000為OFF,則20012為0,執(zhí)行右移位操作。若00001為ON,則20013為1,即輸入數(shù)據(jù)為1;若00001為OFF,則20013為0,即輸入數(shù)據(jù)為0。以00002的信號作為移位脈沖,若00003為ON,則20015為ON,雙向移位寄存器DM0010~DM1011及CY位清零;若00003為OFF,則20015為OFF,此時根據(jù)20012的狀態(tài)將執(zhí)行左移或右移操作。3.數(shù)字左移指令和數(shù)字右移指令——SLD/@SLD和SRD/@SRD數(shù)字左移指令SLD/@SLD和數(shù)字右移指令SRD/@SRD可完成一個4位數(shù)字的左移和右移。表7-15列出了指令名稱、指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。當(dāng)執(zhí)行條件置ON時,數(shù)字左移指令SLD/@SLD將St和E之間的連續(xù)通道的內(nèi)容左移4位(一個數(shù)字)。當(dāng)數(shù)字0被寫入St的最右邊數(shù)字時,E中的最左邊數(shù)字的內(nèi)容將丟失。圖7-22是數(shù)字左移指令SLD/@SLD的應(yīng)用示例。表7-15SLD/@SLD和SRD/@SRD指令

注:St和E必須在同一區(qū)域,且St≤E。圖7-22數(shù)字左移指令SLD/@SLD的應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況4.算術(shù)左移指令和算術(shù)右移指令——ASL/@ASL和ASR/@ASR算術(shù)左移指令A(yù)SL/@ASL和右移指令A(yù)SR/@ASR將指定通道中的數(shù)據(jù)按位左移或右移一位。移位溢出的位進(jìn)入CY,另一端則補(bǔ)0。表7-16列出了指令的名稱、格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-16ASL/@ASL和ASR/@ASR指令

圖7-23算術(shù)左移與算術(shù)右移指令執(zhí)行情況(a)算術(shù)左移;(b)算術(shù)右移圖7-24算術(shù)左移指令應(yīng)用示例(a)指令編程;(b)指令表5.循環(huán)左移指令和循環(huán)右移指令——ROL/@ROL和ROR/@ROR表7-17ROL/@ROL和ROR/@ROR指令

圖7-25循環(huán)左移與循環(huán)右移指令的執(zhí)行情況(a)循環(huán)左移;(b)循環(huán)右移6.字移位指令——WSFT/@WSFT表7-18WSFT/@WSFT指令

注:St和E必須在同一區(qū)域,且St≤E。圖7-26字移位WSFT/@WSFT指令應(yīng)用示例(a)指令編程;(b)指令表;(c)通道數(shù)據(jù)情況7.異步移位寄存器——ASFT/@ASFT當(dāng)異步移位寄存器ASFT執(zhí)行條件為OFF時,不執(zhí)行指令且程序轉(zhuǎn)到下一條指令執(zhí)行;當(dāng)執(zhí)行條件是ON時,ASFT用來建立和控制一個在St和E之間的可逆異步字移位寄存器。這個寄存器的移位字僅當(dāng)寄存器中相鄰的一個字是0時執(zhí)行。也就是說,如果寄存器中沒有字包含0,就不做任何移位,即寄存器中每個為0的字移動一個字。當(dāng)一個字中的內(nèi)容移到下一個字時,原始字的內(nèi)容將被設(shè)定為0。從本質(zhì)上來說,當(dāng)寄存器移位時,寄存器中每一個0字與下一個字對換位置,而“下一個字”是向上還是向下,則在控制字C中被指定。同時,C也可用來復(fù)位寄存器。表7-19列出了指令名稱、指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-19ASFT/@ASFT指令

注:St和E必須在同一區(qū)域,且St≤E。圖7-27ASFT指令應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況7.4.6數(shù)據(jù)傳送指令1.傳送指令和傳送非指令——MOV/@MOV和MVN/@MVN當(dāng)指令執(zhí)行條件為ON時,傳送指令MOV將源數(shù)據(jù)S傳送到通道D中,而傳送非指令MVN則將源數(shù)據(jù)S按位求反后傳送到通道D中。表7-20列出了指令名稱、指令格式、操作數(shù)范圍、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-20MOV/@MOV和MVN/@MVN指令

圖7-28MOV和@MVN指令應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況2.塊傳送指令——XFER/@XFER表7-21XFER/@XFER指令

圖7-29XFER指令應(yīng)用示例(a)指令編程;(b)指令表3.塊設(shè)置指令——BSET/@BSET塊設(shè)置指令BSET/@BSET相當(dāng)于多個MOV指令。當(dāng)執(zhí)行條件為ON時,該指令將源數(shù)據(jù)S傳送到從St到E的所有通道中。表7-22列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-22BSET/@BSET指令

圖7-30@BSET指令應(yīng)用示例(a)指令編程;(b)指令表綜上所述,MOV和BSET指令的區(qū)別在于:(1)執(zhí)行一次MOV指令,只能向一個通道傳送一個字;而執(zhí)行一次BSET指令,可以向多個通道傳送同一個字。(2)當(dāng)用通道對TIM/CNT進(jìn)行設(shè)定時,使用MOV和BSEY指令都可以改變TIM/CNT的設(shè)定值;使用@BSET指令不僅可以改變TIM/CNT的設(shè)定值,還可以改變TIM/CNT的當(dāng)前值,而MOV指令卻沒有這個功能,因?yàn)镸OV指令不能向TC區(qū)傳送數(shù)據(jù)。4.變址傳送指令——DIST/@DIST表7-23DIST/@DIST指令

1)單字?jǐn)?shù)據(jù)分配當(dāng)C的第12~15位為0~8的數(shù)值時,DIST可用于單字分配操作??刂谱諧指定一個偏移量Of,偏移量Of的取值范圍為BCD碼0000~2047。當(dāng)執(zhí)行條件為OFF時,@DIST不執(zhí)行;當(dāng)執(zhí)行條件為ON時,@DIST把S的內(nèi)容復(fù)制到DBs+Of。也就是說,Of是被加到DBs中來決定目的字地址的。圖7-31是@DIST指令用于單字?jǐn)?shù)據(jù)分配的示例。圖7-31@DIST指令用于單字?jǐn)?shù)據(jù)分配的示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況2)進(jìn)棧操作當(dāng)C的第12位~15位為9時,DIST能用作堆棧操作。執(zhí)行該指令生成一個用戶堆棧,C的其他位指定堆棧的深度(BCD碼000~999)。DBs的內(nèi)容是堆棧的指針。當(dāng)執(zhí)行條件為OFF時,DIST不執(zhí)行;當(dāng)執(zhí)行條件為ON時,DIST把S的內(nèi)容復(fù)制到DBs+1+堆棧指針中。換句話說,1和堆棧指針被加到DBs中以決定目的字地址,然后堆棧指針加1。圖7-32所示是@DIST指令用于進(jìn)棧操作的示例。圖7-32@DIST指令用于進(jìn)棧操作的示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況5.數(shù)據(jù)交換指令——XCHG/@XCHG表7-24XCHG/@XCHG指令

當(dāng)執(zhí)行條件為ON時,@XCHG指令交換通道LR00和HR05內(nèi)的數(shù)據(jù)。圖7-33@XCHG指令應(yīng)用示例(a)指令編程;(b)指令表6.位傳送指令——MOVB/@MOVB表7-25MOVB/@MOVB指令

圖7-34@MOVB指令應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況7.數(shù)字傳送指令——MOVD/@MOVD數(shù)字傳送指令MOVD/@MOVD將一個通道的16個二進(jìn)制位劃分成4個數(shù)字位來看待,每個數(shù)字位含有4個二進(jìn)制位。傳送操作是以數(shù)字位為單位進(jìn)行的。該指令將S中某一數(shù)字位開始的若干個連續(xù)的數(shù)字位傳送至D中某一數(shù)字位開始的連續(xù)區(qū)域中。控制數(shù)據(jù)C指定了傳送的位數(shù)及源、目的通道的起始位。表7-26列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-26MOVD/@MOVD指令

圖7-35數(shù)字傳送指令MOVD/@MOVD示例(a)控制字C格式;(b)不同的C值的數(shù)據(jù)傳輸8.數(shù)據(jù)調(diào)用指令——COLL/@COLL數(shù)據(jù)調(diào)用指令COLL/@COLL可以根據(jù)控制字C的內(nèi)容來進(jìn)行數(shù)據(jù)收集、先進(jìn)先出堆棧的出棧操作或后進(jìn)先出堆棧的出棧操作。表7-27列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-27COLL/@COLL指令

圖7-36COLL用作數(shù)據(jù)收集示例(a)@COLL編程;(b)指令表;(c)指令操作情況當(dāng)C的bit12~bit15等于9時,COLL可以用于一個先進(jìn)先出堆棧的出棧操作。C中的其他三位數(shù)字指定堆棧的深度(BCD碼000~999)。SBs中的內(nèi)容是堆棧指針。當(dāng)執(zhí)行條件為ON時,COLL通過一個地址對堆棧中的每一個字的內(nèi)容往下移一地址,最后把數(shù)據(jù)從SBs+1(寫入堆棧的第一個數(shù)值)移位到目的字D,堆棧指針的內(nèi)容減1。圖7-37顯示了使用@COLL指令在DM0001與DM0005之間創(chuàng)建堆棧,并完成先進(jìn)先出堆棧的出棧操作的過程。DM0000起堆棧指針的作用,IR200通道內(nèi)存放的是控制字9005。圖7-37COLL用作先進(jìn)先出堆棧的出棧操作示例(a)?@COLL編程;(b)指令表;(c)指令操作情況當(dāng)00000從OFF變?yōu)镺N時,@COLL把DM0002~DM0005的內(nèi)容往下移一個地址,并將DM0001移入IR010,然后,堆棧指針DM0000的內(nèi)容減1。當(dāng)C的bit12~bit15等于8時,COLL可以用于一個后進(jìn)先出堆棧的出棧操作,此時指令將SBs+堆棧指針的內(nèi)容所指向的數(shù)據(jù)復(fù)制到目的通道D中,而堆棧中的數(shù)據(jù)不變,堆棧指針的內(nèi)容減1。7.4.7數(shù)據(jù)比較指令CPM1A系列PLC有4條用于數(shù)據(jù)比較的指令,它包括單字比較、雙字比較、塊比較和表比較指令。1.單字比較指令——CMP單字比較指令CMP對C1和C2進(jìn)行比較,并把結(jié)果輸出給SR區(qū)域中的GR、EQ和LE標(biāo)志。表7-28列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-28CMP指令

圖7-38CMP指令應(yīng)用示例(a)?CMP指令編程;(b)指令表2.雙字比較指令——CMPL表7-29CMP指令

3.塊比較指令——BCMP/@BCMP塊比較指令BCMP/@BCMP將16個范圍值(上限和下限)以下限在前、上限在后的順序存放在以CB開始的32個連續(xù)通道中,然后將數(shù)據(jù)CD與這16個范圍值依次進(jìn)行比較。若下限≤CD≤上限,則在結(jié)果通道R的相應(yīng)位上置1,否則清零。R的16個位分別對應(yīng)于16個范圍值,其第0位與CB所存放的一組范圍值相對應(yīng)。表7-30列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-30BCMP/@BCMP指令

圖7-39BCMP指令應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況4.表比較指令——TCMP/@TCMP表7-31TCMP/@TCMP指令

表比較指令TCMP與塊比較指令BCMP的區(qū)別在于:塊比較指令是將數(shù)據(jù)與指定通道中的上下限值進(jìn)行比較,當(dāng)下限≤CD≤上限時,結(jié)果通道對應(yīng)位置1;而表比較指令則是將數(shù)據(jù)與指定通道中的數(shù)值比較,當(dāng)CD等于對應(yīng)數(shù)值時,結(jié)果通道對應(yīng)位置1。7.4.8數(shù)據(jù)轉(zhuǎn)換指令1.BCD與二進(jìn)制轉(zhuǎn)換及二進(jìn)制與BCD轉(zhuǎn)換指令——BIN/@BIN及BCD/@BCDBCD與二進(jìn)制數(shù)轉(zhuǎn)換指令BIN/@BIN把源通道S中的BCD內(nèi)容轉(zhuǎn)換為數(shù)值對等的二進(jìn)制數(shù),并把該二進(jìn)制數(shù)的結(jié)果輸出到結(jié)果通道R。因此,僅R的內(nèi)容被改變,S的內(nèi)容保持不變。而二進(jìn)制數(shù)與BCD轉(zhuǎn)換指令BCD/@BCD則是BCD與二進(jìn)制數(shù)轉(zhuǎn)換指令的逆運(yùn)算。表7-32列出了指令名稱、指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-32BIN/@BIN

和BCD/@BCD指令

續(xù)表

圖7-40BCD與二進(jìn)制數(shù)轉(zhuǎn)換指令BIN的應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況2.數(shù)字譯碼指令——MLPX/@MLPX數(shù)字譯碼指令MLPX/@MLPX將源通道S中的若干個十六進(jìn)制數(shù)進(jìn)行譯碼,根據(jù)譯碼結(jié)果將結(jié)果通道的相應(yīng)位置1,其余位清零。將要譯碼的十六進(jìn)制數(shù)的位數(shù)由C的4~7位指定,最多不超過4位;開始譯碼的位號由R的0~3位決定,后續(xù)位號依次加1,超過4位時又從第一位開始。轉(zhuǎn)換結(jié)果總是存在R、R+1、R+2和R+3中。表7-33列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-33MLPX/@MLPX指令

圖7-41MLPX指令控制字C的格式及指令的應(yīng)用示例(a)控制字C的格式;(b)指令編程;(c)指令表;(d)指令執(zhí)行情況圖7-42MLPX指令具有不同控制字時的執(zhí)行情況3.數(shù)字編碼指令——DMPX/@DMPX數(shù)字編碼指令DMPX/@DMPX類似于數(shù)字譯碼指令的逆運(yùn)算,它將S開始的若干個連續(xù)通道中的最高位“1”的位號編為一個十六進(jìn)制數(shù),結(jié)果存放于R的某一個十六進(jìn)制位上。一次最多對四個通道進(jìn)行編碼,通道的個數(shù)由C的4~7位指定,結(jié)果存放在R中,存放的起始位號由C的0~3位指定。表7-34列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-34DMPX/@DMPX指令

圖7-43DMPX指令控制字C格式及指令應(yīng)用示例(a)控制字C格式;(b)指令編程;(c)指令表;(d)指令執(zhí)行情況圖7-44DMPX指令具有不同控制字時的執(zhí)行情況4.七段譯碼指令——SDEC/@SDEC表7-35SDEC/@SDEC指令

圖7-45控制字C的格式圖7-46SDEC指令操作示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況若要對源通道中的多位數(shù)字進(jìn)行譯碼,則可將輸出區(qū)擴(kuò)展到3個通道,即R、R+1和R+2。根據(jù)數(shù)字標(biāo)志的指示分別將譯碼值順序?qū)懭霃腞高8位或低8位開始的通道中,若第1個數(shù)字的譯碼寫入R的低8位,則第2個數(shù)字的譯碼寫入R的高8位,第3個數(shù)字的譯碼寫入R+1的低8位,第4個數(shù)字的譯碼寫入R+1的高8位;若第1個數(shù)字的譯碼寫入R的高8位,則第2個數(shù)字的譯碼寫入R+1的低8位,第3個數(shù)字的譯碼寫入R+1的高8位,第4個數(shù)字寫入R+2的低8位。圖7-47所示為SDEC指令的多位譯碼示意。源通道S中的數(shù)據(jù)為8765H,控制字C為#0032,表示從S中第2位數(shù)字開始譯碼,共譯4位數(shù)字,譯碼順序?yàn)?→8→5→6。C還指示從R的低8位開始存放譯碼值,R中為7F27H,R+1中為7D6DH。若把C改為#0132,則表示從S中第2位數(shù)字開始譯碼,共譯4位數(shù)字,但指示從R的高8位開始存放譯碼值,則R中為2700H,R+1中為6D7FH,R+2中為007DH。圖7-47SDEC指令的多位譯碼示意5.ASCII碼轉(zhuǎn)換指令——ASC/@ASC當(dāng)執(zhí)行條件為ON時,ASC/@ASC把源通道S指定的4位十六進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)的8位ASCII碼,并把它放入從R起始的結(jié)果通道的低8位或高8位。表7-36列出了指令格式、操作數(shù)區(qū)域、梯形圖符號及執(zhí)行指令對標(biāo)志位的影響。表7-36ASC/@ASC指令

圖7-48控制字C格式在進(jìn)行奇偶校驗(yàn)時,每個ASCII字符(2個數(shù)字)的最左位能被自動調(diào)整。如果指定為無校驗(yàn),則最左位將始終為0。當(dāng)指定為偶校驗(yàn)時,則最左位將被自動調(diào)整,使ON的總數(shù)為偶數(shù)。例如,當(dāng)設(shè)定為偶校驗(yàn)時,ASCII“31”(00110001)將是“B1”(10110001:校驗(yàn)標(biāo)志位置ON,以創(chuàng)造偶數(shù)個ON位);ASCII“36”(00110110)將是“36”(00110110:校驗(yàn)標(biāo)志位置OFF,因?yàn)镺N位的數(shù)目已經(jīng)是偶數(shù)了)。校驗(yàn)標(biāo)志位的狀態(tài)不影響ASCII碼的意義。當(dāng)指定為奇校驗(yàn)時,最左位將被自動調(diào)整,使ON位的總數(shù)目為奇數(shù)。圖7-49是ASC指令應(yīng)用示例。示例中源通道S為DM0010,其中數(shù)據(jù)為1928H;結(jié)果通道為IR200;控制字為#0000,表示對源通道S中第0位數(shù)字“8”進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換后的ASCII碼放在R中的低8位,無校驗(yàn)。圖7-49ASC指令應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況當(dāng)輸入00000為ON時,DM0010通道的第0位數(shù)字“8”被轉(zhuǎn)換成ASCll代碼(38)并輸出至結(jié)果通道IR200的位置0處(即低8位)。因?yàn)槠媾夹r?yàn)標(biāo)志為0,所以IR200通道第7位輸出0。ASC進(jìn)行多位數(shù)字編碼時,輸出區(qū)可擴(kuò)展到3個通道。結(jié)束通道為R+2,編碼從控制字指定的R通道的低8位或高8位開始順序?qū)懭牒罄m(xù)通道。其工作情況與SDEC指令基本相同,這里不再贅述。7.4.9數(shù)據(jù)運(yùn)算指令1.十進(jìn)制運(yùn)算指令表7-37十進(jìn)制運(yùn)算指令

續(xù)表二

1)十進(jìn)制加法運(yùn)算指令——ADD/@ADD和ADDL/@ADDL圖7-50是十進(jìn)制加法運(yùn)算指令A(yù)DD/@ADD和ADDL/@ADDL的應(yīng)用示例。當(dāng)00001為ON時,執(zhí)行單字BCD加。首先將進(jìn)位位清零,然后執(zhí)行@ADD指令,將IR200通道內(nèi)的數(shù)據(jù)與#6103相加,結(jié)果送入DM0100。如果有進(jìn)位位,則將#0001送入DM0101;如果無進(jìn)位位,則將#0000送入DM0101。當(dāng)00002為ON時,執(zhí)行雙字BCD加。在執(zhí)行清零操作后,在@ADDL指令中,將雙字HR02(#9876)HR01(#5432)與LR02(#1234)LR01(#5678)相加。圖7-50(c)為雙字BCD加指令的執(zhí)行情況。圖7-50@ADD、@ADDL指令應(yīng)用示例(a)指令編程;(b)指令表;(c)?@ADDL指令執(zhí)行情況2)十進(jìn)制減法運(yùn)算指令——SUB/@SUB和SUBL/@SUBL在執(zhí)行十進(jìn)制減法運(yùn)算指令之前要清進(jìn)位位標(biāo)志CY,指令執(zhí)行完后應(yīng)檢查進(jìn)位位標(biāo)志CY。如果減法的結(jié)果使CY置ON,則輸出的數(shù)據(jù)是正確答案的十進(jìn)制補(bǔ)碼。要將輸出的數(shù)據(jù)轉(zhuǎn)換為正確值,需先清CY,再用0減去結(jié)果通道中的數(shù)值。圖7-51所示是@SUB指令的應(yīng)用示例。IR200中保存被減數(shù),DM0100中保存減數(shù),結(jié)果存儲在IR201中。當(dāng)繼電器20001為ON時,表示結(jié)果為負(fù)數(shù)。圖7-51@SUB指令的應(yīng)用示例(a)指令編程;(b)指令表;(c)負(fù)數(shù)計算過程3)十進(jìn)制遞增、乘法和除法運(yùn)算指令——INC/@INC、MUL/@MUL和DIV/@DIV當(dāng)兩個最大的單字BCD數(shù)相乘,即9999×9999=99980001時,運(yùn)算結(jié)果不發(fā)生進(jìn)位;同樣,當(dāng)兩個最大的雙字BCD數(shù)相乘時,結(jié)果也不發(fā)生進(jìn)位。所以乘、除運(yùn)算都不涉及進(jìn)位位CY。圖7-52中使用了遞增指令@INC、乘法運(yùn)算指令@MUL和除法運(yùn)算指令@DIV。當(dāng)程序運(yùn)行時,先令0000置ON一次,將DM0000~DM0004清零,為進(jìn)行各種運(yùn)算作好準(zhǔn)備。每當(dāng)00001為ON時,執(zhí)行@INC指令,將DM0000中當(dāng)前的內(nèi)容加1;執(zhí)行CMP指令,將DM0000中的內(nèi)容與#0004比較,若DM0000的內(nèi)容比#0004大,則將21000置為ON;執(zhí)行@MUL指令,將DM0000中的內(nèi)容與#0004相乘,結(jié)果存入DM0001和DM0002中;執(zhí)行@DIV指令,將DM0001和DM0002中的內(nèi)容與#0002相除,商存入DM0003中,余數(shù)存入DM0004中。00001共4次為ON,DM0000~DM0004的內(nèi)容見表7-38。從00001第5次ON開始,后面將重復(fù)上面的過程。圖7-52@INC、@MUL和@DIV的應(yīng)用示例(a)指令編程;(b)指令表表7-38程序執(zhí)行結(jié)果

2.二進(jìn)制運(yùn)算指令表7-39二進(jìn)制運(yùn)算指令

續(xù)表

圖7-53二進(jìn)制加法@ADB(50)的應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況圖7-54二進(jìn)制減法@SBB的應(yīng)用示例(a)指令編程;(b)指令表;(c)指令執(zhí)行情況7.4.10邏輯運(yùn)算指令表7-40字邏輯運(yùn)算指令

續(xù)表

續(xù)表

圖7-55字邏輯運(yùn)算指令應(yīng)用示例(a)指令編程;(b)指令執(zhí)行情況7.4.11子程序指令1.子程序調(diào)用和子程序定義/子程序返回指令——SBS/@SBS和SBN/RET表7-41子程序調(diào)用、子程序定義/子程序返回指令

SBS是子程序調(diào)用指令,SBN和RET是子程序定義和子程序返回指令。所編寫的子程序應(yīng)該在指令SBN和RET之間。程序中,在需要調(diào)用子程序的地方安排SBS指令,它可以放在主程序中,也可以放在子程序中。也就是說,子程序可以嵌套。假設(shè)存在兩層嵌套,則當(dāng)?shù)诙幼映绦蛲瓿珊?執(zhí)行到RET),程序執(zhí)行返回到第一層子程序,即返回主程序前要完成的子程序。子程序嵌套最多可以到16級,但子程序不能調(diào)用自身。當(dāng)使用非微分指令SBS時,只要它的執(zhí)行條件滿足,則每個掃描周期都調(diào)用一次子程序;當(dāng)使用微分指令@SBS時,只在執(zhí)行條件由OFF變ON時調(diào)用子程序。圖7-56子程序調(diào)用示意圖(a)子程序調(diào)用結(jié)構(gòu)圖;(b)指令編程;(c)指令表圖7-57子程序嵌套結(jié)構(gòu)示意圖2.宏指令表7-42宏指令

MCRO指令的操作數(shù)I1是子程序中第一個輸入字的參數(shù),操作數(shù)O1是子程序中第一個輸出字參數(shù)。每次調(diào)用時,I1和O1的數(shù)據(jù)可以不同。由于宏調(diào)用的子程序中輸入/輸出的數(shù)據(jù)可以變換,因此提高了程序應(yīng)用的靈活性。執(zhí)行宏指令時,可用一個具有相同結(jié)構(gòu)但操作數(shù)不同的子程序代替宏指令操作,而這個子程序則以SR232~SR239通道內(nèi)的節(jié)點(diǎn)編制,輸入數(shù)據(jù)利用SR232~SR235通道,輸出數(shù)據(jù)利用SR236~SR239通道。在程序運(yùn)行時,當(dāng)宏指令執(zhí)行條件為ON時,將輸入數(shù)據(jù)I1~I(xiàn)1+3的內(nèi)容復(fù)制到SR232~SR235通道中,將輸出數(shù)據(jù)O1~O1+3的內(nèi)容復(fù)制到SR236~SR239通道中,然后調(diào)用子程序N。子程序執(zhí)行完畢后,再將SR236~SR239通道中的內(nèi)容傳送到O1~O1+3中,并返回到MCRO指令的下一條語句,繼續(xù)執(zhí)行主程序。宏調(diào)用的子程序也是用SBN/RET來定義的。與上述子程序的安排相同,子程序必須放在主程序之后和END指令之前。在執(zhí)行MCRO指令時,通道SR232~SR239被系統(tǒng)占用,用戶不得再使用這幾個通道。圖7-58是使用宏指令的例子。圖7-58(a)的梯形圖中有兩次宏調(diào)用,被調(diào)用的子程序號是020。執(zhí)行兩次宏調(diào)用與執(zhí)行圖7-58(b)程序的功能完全相同。在圖7-58中,當(dāng)HR1100由OFF變?yōu)镺N時執(zhí)行一次宏調(diào)用。第一個輸入字是IR200,第一個輸出字是HR00。當(dāng)HR1101由OFF變?yōu)镺N時又執(zhí)行一次宏調(diào)用。第一個輸入字是IR000,第一個輸出字是HR01。總之,每次宏調(diào)用時,子程序的結(jié)構(gòu)不變,只是輸入/輸出的參數(shù)在變化。圖7-58宏指令使用示例(a)使用宏指令;(b)與宏指令功能相同的梯形圖7.4.12高速計數(shù)器1.高速計數(shù)器的計數(shù)模式圖7-59旋轉(zhuǎn)編碼器輸出的信號波形(a)單相脈沖;(b)兩相脈沖1)遞增計數(shù)遞增計數(shù)時,外部提供的被計數(shù)的高頻脈沖信號由PLC的00000點(diǎn)輸入。在輸入計數(shù)脈沖信號的前沿,高速計數(shù)器的當(dāng)前值加1。遞增計數(shù)的最高計數(shù)頻率是5kHz,遞增計數(shù)的計數(shù)范圍是0~65535(00000000H~0000FFFFH)2)增/減計數(shù)增/減計數(shù)可對A、B兩相輸入計數(shù)脈沖進(jìn)行計數(shù)。使用輸入通道的00000、00001和00002節(jié)點(diǎn),A相脈沖接在PLC的00000輸入點(diǎn),B相脈沖接在00001輸入點(diǎn),復(fù)位信號Z接在00002輸入點(diǎn)。計數(shù)器根據(jù)輸入脈沖的不同相位,可進(jìn)行遞增計數(shù)或遞減計數(shù)。遞增計數(shù):當(dāng)A相超前B相90°時,在A、B相脈沖的前沿,計數(shù)器的當(dāng)前值加1。遞減計數(shù):當(dāng)B相超前A相90°時,在A、B相脈沖的前沿,計數(shù)器的當(dāng)前值減1。增/減計數(shù)的最高計數(shù)頻率是2.5kHz,計數(shù)范圍是-32767~+32767(F0007FFFH~00007FFFH,第一位的F表示負(fù)數(shù))。3)高速計數(shù)器復(fù)位特殊輔助繼電器25200是高速計數(shù)器復(fù)位的標(biāo)志位,高速計數(shù)器根據(jù)25200的狀態(tài)及系統(tǒng)事先的設(shè)定進(jìn)行復(fù)位。當(dāng)高速計數(shù)器復(fù)位時,其當(dāng)前值PV=0。CPM1A系列PLC的高速計數(shù)器有兩種復(fù)位方式:(1)硬件復(fù)位Z信號+軟件復(fù)位。這種復(fù)位分兩種情況:其一,若高速計數(shù)器的復(fù)位標(biāo)志位25200先為ON,則在復(fù)位Z信號為ON的前沿時刻,高速計數(shù)器復(fù)位;其二,若復(fù)位Z信號先為ON,則在25200為ON后一個掃描周期,高速計數(shù)器復(fù)位。(2)軟件復(fù)位。當(dāng)25200為ON時,一個掃描周期后高速計數(shù)器復(fù)位。另外,當(dāng)PLC斷電再上電時,高速計數(shù)器自動復(fù)位。2.高速計數(shù)器的設(shè)定及計數(shù)值的存放表7-43高速計數(shù)器的設(shè)定

3.高速計數(shù)器的中斷功能1)目標(biāo)值比較中斷在采取目標(biāo)值比較中斷時,要建立一個目標(biāo)值比較表,如圖7-60(a)所示。目標(biāo)值比較表占用一個區(qū)域的若干個通道,其中首通道存放目標(biāo)值的個數(shù)(BCD數(shù))。比較表中最多放16個目標(biāo)值,每個目標(biāo)值占2個通道(各存放目標(biāo)值的低4位和高4位)。每個目標(biāo)值對應(yīng)一個中斷子程序號,存放16個子程序號需16個通道,所以目標(biāo)值比較表最多占用48個通道。目標(biāo)值比較表中的數(shù)據(jù)可用編程器預(yù)先寫入。圖7-60兩種比較表結(jié)構(gòu)(a)目標(biāo)值比較表;(b)區(qū)域比較表2)區(qū)域比較中斷在采取區(qū)域比較中斷時,要建立一個區(qū)域比較表,如圖7-60(b)所示。區(qū)域比較表分為8個區(qū)域,每個區(qū)域占5個通道,其中兩個通道用來存放下限值的低4位和高4位,兩個通道用來存放上限值的低4位和高4位,一個通道存放與該區(qū)域?qū)?yīng)的中斷子程序號。8個區(qū)域要占40個通道。當(dāng)實(shí)際使用的比較區(qū)域不滿8個時,要把其余區(qū)域存放上、下限值的通道都置為0,將存放子程序號的通道都置為FFFFH。區(qū)域比較表中的數(shù)據(jù)可用編程器預(yù)先寫入。區(qū)域比較中斷的執(zhí)行過程是:在高速計數(shù)器計數(shù)過程中,若當(dāng)前值落在區(qū)域比較表中某個區(qū)域,即下限值≤高速計數(shù)器PV值≤上限值,則停止執(zhí)行主程序而轉(zhuǎn)去執(zhí)行與該區(qū)域?qū)?yīng)的中斷處理子程序。子程序執(zhí)行完畢,返回到斷點(diǎn)處繼續(xù)執(zhí)行主程序。執(zhí)行區(qū)域比較中斷時,比較結(jié)果存放在輔助記憶繼電器AR1100~AR1107中。例如,當(dāng)高速計數(shù)器的當(dāng)前值落在區(qū)域比較表的區(qū)域1中時,AR1100置為ON;當(dāng)高速計數(shù)器的當(dāng)前值落在比較表的區(qū)域2中時,AR1101置為ON,以此類推。4.高速計數(shù)器控制指令高速計數(shù)器的中斷功能必須利用控制指令進(jìn)行各種相關(guān)設(shè)置。表7-44列出了高速計數(shù)器控制指令的名稱、指令格式、操作數(shù)區(qū)域、梯形圖符號、指令的功能及執(zhí)行指令對標(biāo)志位的影響。表7-44高速計數(shù)器控制指令

續(xù)表

圖7-61利用控制指令進(jìn)行各種相關(guān)設(shè)置及計數(shù)的過程圖7-62采用高速計數(shù)器目標(biāo)值比較中斷的示例(a)示例程序;(b)目標(biāo)值比較表圖7-63高速計數(shù)器區(qū)域比較中斷示例(a)示例程序;(b)區(qū)域比較表綜上所述,高速計數(shù)器具有高速計數(shù)和中斷功能。使用高速計數(shù)器時的注意事項和高速計數(shù)器的具體功能歸納如下:(1)使用高速計數(shù)器前必須進(jìn)行設(shè)定,設(shè)定數(shù)據(jù)存放在DM6642中,以確定高速計數(shù)器的使用/不使用、復(fù)位方式、計數(shù)模式等。(2)使用高速計數(shù)器時,SR248和SR249通道被占用,不能再作它用。(3)使用高速計數(shù)器時,00000~00002三個輸入點(diǎn)被占用,不能再作它用。(4)高速計數(shù)器有計數(shù)功能。遞增計數(shù)時,計數(shù)脈沖可以是外部輸入的信號或旋轉(zhuǎn)編碼器輸出的單相脈沖。增/減計數(shù)時可用旋轉(zhuǎn)編碼器的輸出脈沖作為計數(shù)脈沖,當(dāng)旋轉(zhuǎn)編碼器A相輸出脈沖超前B相90°時,為遞增計數(shù);當(dāng)B相輸出脈沖超前A相90°時,為遞減計數(shù)。(5)高速計數(shù)器具有中斷功能。在使用其中斷功能時,要用CTBL指令登錄一個目標(biāo)值比較表或區(qū)域比較表。所登錄的比較表可以立即啟動比較,也可以用INI啟動比較。(6)高速計數(shù)器的中斷處理子程序與普通子程序的編寫規(guī)則相同。7.4.13脈沖輸出指令表7-45脈沖輸出指令

圖7-64連續(xù)模式脈沖輸出與獨(dú)立模式脈沖輸出示例(a)連續(xù)模式脈沖輸出指令編程;(b)連續(xù)模式脈沖輸出指令表;(c)獨(dú)立模式脈沖輸出指令編程;(d)獨(dú)立模式脈沖輸出指令表當(dāng)脈沖輸出指令的執(zhí)行條件00100由OFF變?yōu)镺N時,執(zhí)行@PULS指令,設(shè)置輸出脈沖的個數(shù)(DM0000的內(nèi)容);執(zhí)行@SPED指令,啟動脈沖輸出,從01001輸出500Hz的脈沖信號。當(dāng)輸出脈沖達(dá)到設(shè)定的脈沖個數(shù)時,自動停止脈沖輸出。在使用脈沖輸出指令時,要注意以下幾點(diǎn):(1)同一時刻只能從一個輸出點(diǎn)輸出脈沖。(2)正在輸出脈沖時,不能用PULS指令改變輸出脈沖的個數(shù)。(3)在獨(dú)立輸出模式時,當(dāng)達(dá)到指定脈沖數(shù)時停止脈沖輸出;在連續(xù)輸出模式時,將SPED指令的F設(shè)為0000,或?qū)NI指令的C設(shè)為003,都可以使脈沖輸出停止。7.4.14中斷控制1.外部輸入中斷功能1)外部輸入中斷的輸入點(diǎn)在CPM1A系列PLC中,20、30和40點(diǎn)I/O的主機(jī)的00003~00006四個點(diǎn)是外部輸入中斷的輸入點(diǎn)。對于10點(diǎn)I/O的主機(jī),其00003和00004是外部輸入中斷的輸入點(diǎn),外部發(fā)生的事件所產(chǎn)生的信號通過中斷輸入點(diǎn)送入PLC。當(dāng)某個中斷輸入點(diǎn)接到中斷輸入信號(OFF→ON)時,或接到一定次數(shù)的信號時,產(chǎn)生中斷請求信號。當(dāng)不使用中斷功能時,這些點(diǎn)可以作為普通輸入點(diǎn)使用。中斷處理子程序也是用SBN定義開始,用RET定義結(jié)束,而且中斷處理子程序也必須放在主程序之后和END之前。各中斷輸入點(diǎn)與中斷號、中斷處理子程序的關(guān)系見表7-46。表7-46中斷輸入點(diǎn)與中斷號、子程序號的關(guān)系

2)外部輸入中斷模式外部輸入中斷有輸入中斷和計數(shù)中斷兩種模式。(1)輸入中斷。在中斷開放的情況下,只要中斷輸入點(diǎn)接通,就產(chǎn)生中斷響應(yīng)。若在中斷屏蔽的情況下,則即使中斷輸入點(diǎn)接通也不能產(chǎn)生中斷響應(yīng),但該中斷信號被記憶下來,待中斷屏蔽解除后立即產(chǎn)生中斷。若中斷屏蔽解除后不希望響應(yīng)所記憶的中斷,則可用指令清除該記憶。(2)計數(shù)器中斷模式。這種模式的中斷是對中斷輸入點(diǎn)接通的次數(shù)進(jìn)行高速計數(shù)(減計數(shù))。當(dāng)達(dá)到設(shè)定的次數(shù)時產(chǎn)生中斷,且計數(shù)器停止計數(shù),中斷被屏蔽。若想再產(chǎn)生中斷,則需使用指令進(jìn)行設(shè)定。計數(shù)器的計數(shù)范圍為0~65535,計數(shù)頻率最高為1kHz。當(dāng)使用計數(shù)模式中斷時,必須對通道SR240~SR243進(jìn)行設(shè)定,以存放計數(shù)器設(shè)定值,而通道SR244~SR247存放計數(shù)器當(dāng)前值-1。各輸入點(diǎn)與上述通道的對應(yīng)關(guān)系如表7-47所示。表7-47計數(shù)器中斷模式輸入點(diǎn)與通道對應(yīng)關(guān)系

3)外部輸入中斷的設(shè)定圖7-65DM6628設(shè)定的內(nèi)容和含義2.間隔定時器的中斷功能1)單次中斷模式當(dāng)間隔定時器的定時時間到時,停止定時并產(chǎn)生中斷信號,但只執(zhí)行一次中斷。至于是否啟動單次中斷,其設(shè)定值是多少,中斷子程序的編號等,都要由STIM指令來確定。2)重復(fù)中斷模式重復(fù)中斷模式是每隔一定的時間產(chǎn)生一次中斷,因此是循環(huán)地執(zhí)行中斷,直到定時器停止計數(shù)為止。與單次中斷不同的是,在執(zhí)行中斷子程序的同時,定時器的當(dāng)前值又恢復(fù)為設(shè)定值并重新開始定時。至于是否啟動重復(fù)中斷,其設(shè)定值是多少,中斷處理子程序的編號等,也都要由STIM指令來確定。單次中斷模式和重復(fù)中斷模式的子程序號都由STIM指令來確定,其范圍為000~049。3)間隔定時器的中斷處理子程序編寫中斷處理子程序應(yīng)注意以下幾點(diǎn):(1)在中斷處理子程序內(nèi)部可以定義新的中斷,也可以解除中斷。(2)在中斷處理子程序內(nèi)部不可以調(diào)用別的中斷處理子程序。(3)在中斷處理子程序內(nèi)部不可以調(diào)用普通子程序。(4)在普通子程序中不可以調(diào)用中斷處理子程序。3.中斷的優(yōu)先級CPM1A系列PLC有高速計數(shù)器中斷、外部輸入中斷、間隔定時器中斷等幾種中斷功能。在執(zhí)行中斷程序過程中,如果接收到優(yōu)先級別更高的中斷,當(dāng)前執(zhí)行的中斷程序會停止運(yùn)行,然后先處理新收到的級別更高的中斷。優(yōu)先級別高的中斷執(zhí)行完后,恢復(fù)原來的中斷處理。在執(zhí)行中斷程序過程中,如果接收到優(yōu)先級別更低或相同的中斷,那么待當(dāng)前處理的程序執(zhí)行完畢,再根據(jù)優(yōu)先級處理新接收到的中斷。執(zhí)行各種中斷的優(yōu)先級順序如下:外部輸入中斷0→外部輸入中斷1→外部輸入中斷2→外部輸入中斷3→間隔定時器中斷→高速計數(shù)器中斷。4.中斷控制指令表7-48中斷控制指令

圖7-66外部輸入中斷示例(a)外部輸入中斷模式;(b)外部輸入計數(shù)中斷模式圖7-67應(yīng)用INT指令進(jìn)行各種設(shè)定的示例將DM6628設(shè)為0001,指定00003為中斷輸入點(diǎn)。圖7-67的工作過程簡介如下:PLC上電后只要00005先接通,00003輸入點(diǎn)就被屏蔽。中斷輸入點(diǎn)00003產(chǎn)生的中斷不能被響應(yīng),只有斷開00005才能響應(yīng)中斷。PLC上電后,若00005和00001斷開,當(dāng)00000接通一次時,確定00003為中斷輸入點(diǎn),且為計數(shù)中斷模式,計數(shù)設(shè)定值是#0030。當(dāng)00003接通30次時產(chǎn)生中斷,轉(zhuǎn)去執(zhí)行中斷處理子程序000,使20000為ON,于是01000開始輸出秒脈沖。PLC上電后,若00005和00000斷開,當(dāng)00001接通一次時,00003輸入點(diǎn)的計數(shù)設(shè)定值更新為#0050。所以當(dāng)00003接通50次時,產(chǎn)生中斷。在程序運(yùn)行過程中,若欲查看各中斷輸入點(diǎn)的屏蔽情況,可接通00006,并用編程器的通道監(jiān)視功能觀察DM0000的內(nèi)容。此時編程器的顯示屏上就顯示出4位十六進(jìn)制數(shù),其最低位數(shù)字表示各中斷輸入點(diǎn)的屏蔽狀態(tài)。例如DM0000的內(nèi)容是000CH,表示輸入點(diǎn)00003和00004為非屏蔽,而00005和00006為屏蔽。5.普通子程序與中斷處理子程序1)兩種子程序的相同點(diǎn)(1)子程序都必須由SBN和RET指令來定義其開始和結(jié)束。(2)子程序都要放在主程序之后和END之前,即子程序之后不能再寫主程序。(3)當(dāng)SBS指令的執(zhí)行條件不滿足或沒產(chǎn)生中斷時,CPU都不掃描子程序。2)兩種子程序調(diào)用的不同之處(1)子程序調(diào)用的控制方式的區(qū)別。普通子程序的調(diào)用是受程序控制的,即必須在主程序中安排SBS指令,當(dāng)CPU掃描到SBS指令且其執(zhí)行條件滿足時調(diào)用子程序。中斷處理子程序的調(diào)用不是由程序直接控制的。在中斷控制指令設(shè)定之后,是否調(diào)用子程序取決于有無中斷請求信號。而且,對于外部輸入中斷,若中斷被屏蔽,即使有中斷請求信號也不能立即執(zhí)行中斷處理子程序。(2)兩種子程序執(zhí)行完畢返回地址的區(qū)別。用SBS指令調(diào)用子程序時,其返回地址只能是與SBS指令相鄰的下一條指令。中斷處理子程序執(zhí)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論