- PLC編程實用指南(第2版)
- 宋伯生
- 28231字
- 2020-11-27 16:01:38
1.4 PLC指令系統
關鍵詞:指令系統、操作數、即時數、直接地址,間接地址、絕對地址、符號地址、輸入類指令、輸出類指令、中間指令、基本邏輯指令、應用指令、堆棧、結果寄存器。
一個PLC所擁有指令的全體稱為該PLC的指令系統。指令系統代表著PLC的性能或功能。一般講,功能強、性能好的PLC,其指令系統必然豐富,不僅指令類型多,而且功能強,所能干的事也就多。
早期可編程序控制器指令較少,如歐姆龍公司的C20機,才27條指令。而且指令的功能也不強。后續的產品,如CPM1A機,盡管為小型機,就有41種,148條。大型機更多,如CV1000,多達300多條。近期的產品,如CJ1/CJ1H機,盡管為小型機,其指令將近千條。而且還有功能很強的指令,如文字、文件處理指令。
PLC的指令系統是在對其編程之前必須弄清楚的。不熟悉指令系統,等于不懂語法用不好語言一樣,PLC的程序是設計不好的。
從廣義上講,廠商提供的系統功能與功能塊,也應算為指令系統的一個部分。如西門子S7-300/400 PLC的功能塊FB41、42、43用于實現PID算法,實質上它就是別的PLC的PID指令。當今各家高性能的PLC多都有此類功能或功能塊。這樣功能或功能塊的功能當然比一般指令要更強些。所以,現在再說PLC指令系統,不只是PLC指令的全體,而還要有系統提供的功能及功能塊。有的廠商把后者的集合也稱庫。
值得注意的是,各廠商、各型別PLC的指令系統都是基于微處理器技術,總是直接、間接地來自微處理器。所以有關指令的類別、實現功能以及發展水平,大體上多是相同的。也因此本書才有可能將對其分類,把各廠商PLC一些最常用的指令集合一起進行說明。然而PLC指令系統又是基于PLC具體硬件的,加上所用的編程語言又沒有統一的強制標準,所以,各廠商PLC的具體指令的差別還是不小的。即使是同一廠商,型號不同的PLC,其指令系統也不完全相同。所以,在注意對它們共同點的同時,也要看到對它們的區別點。這樣,才能全面、準確地理解和具體使用好相關的PLC的指令。
提示:由于篇幅限制,以下只是簡要地介紹本書涉及的PLC的一些典型指令。而全面、系統地弄清所使用的PLC的指令系統,對正確使用該PLC,編寫好高質量的PLC程序,是至關重要的。因此,在PLC實際編程過程中,建議要多查閱有關PLC的編程手冊,切實把有關指令弄懂、弄清。
為了加深對PLC指令的了解,以下先對PLC指令作分類分析,然后再對一些較常用的指令作簡單介紹。一些要用到的特殊指令,將在以后的章節中繼續介紹。
1.按指令的操作數,即程序數據的數量劃分
(1)無操作數指令,如END(程序結束)指令、NOP(空指令,不做任何操作),僅操作碼,無操作數。這類指令不多。
(2)單操作數指令,如LD(裝載)指令,除了操作碼(LD),還要有操作數(位地址)。
(3)多操作數指令,如MOV(傳送)指令,除了操作碼(MOV),還要有被傳送字源地址及目標地址。執行它后,則把字源地址的內容,傳送到目標地址中去。
多操作數,有的操作數可多達三個。如ADD(加)指令,在操作碼ADD之后有三個地址。第一操作數為被加數;第二操作數為加數;第三個操作數為和。
指令在內存中占用的字節、字與指令長度有關。單字及雙字長的占一個字。多字的占用不只一個字。有的PLC指令在內存中占用的地址以“步”(STEP)計。三菱PLC一個步占用4個字節。歐姆龍CJ1機的“步”與以前的字基本上相同,歐姆龍提供有方法可供換算。
要指出的是,這里的操作數多少,與在指令執行中,參與操作的實際數的數量,并不是一回事。操作數可能只有兩個,但實際參與操作的數可能是幾十、幾百,以至于千。真正參與操作的數到底多少,是由指令的功能及特點決定的。
2.按指令的作用分
(1)輸入類指令,用以處理輸入信號及反饋信號,以建立相應的邏輯條件。它使用的數據與梯形圖語言的常開觸點、常閉觸點、正轉換感應觸點及負轉換感應觸點等對應。執行這類指令不產生輸出,但它為輸出類及處理類指令工作提供條件。可知,一個有效程序,不可能僅使用這類指令。
輸入類指令有兩種執行方式:
正常執行,每一掃描周期,都依它的操作數正常I/O刷新后得到的值,進行邏輯處理。
立即輸入刷新執行,每次執行它前,先進行輸入刷新,然后再依刷新后操作數取得的新值,進行邏輯處理。要這樣使用指令,則要在它的代碼之前加感嘆號“!”。在梯形圖上的符號為
還可對輸入指令做微分處理。有上沿微分與下沿微分。
上沿微分,使用的是正轉換感應觸點,當它的操作數從OFF到ON的那個周期,此操作數按ON處理,其他的均為OFF。要這樣使用指令時,要在它的代碼之前加向上的箭頭符號。在梯形圖上的符號為
下沿微分,使用的是負轉換感應觸點,當它的操作數從ON到OFF的那個周期,此操作數按ON處理,其他的均為OFF。要這樣使用指令時,要在它的代碼之前加向下的箭頭符號。在梯形圖上的符號為
輸入指令的執行方式與PLC的生產公司及PLC的型號有關,不是所有PLC都有這么多的執行方式。
(2)輸出類指令,用以產生輸出。一般講,在執行它之前總是要先執行輸入類指令。其產生什么輸出,則由其所使用的數據及之前的邏輯條件決定。它使用的數據與梯形圖語言的正常線圈、反向線圈、設置(鎖存)線圈、復位(取消鎖存)線圈、正轉換感應線圈、負轉換感應線圈及暫停線圈等對應。
輸出類指令也有多種執行方式:
正常執行,每一掃描周期均依執行它時的邏輯條件情況,處理該指令;到了輸出刷新時,才把這個輸出傳送給輸出鎖存器。
立即刷新執行(Immediate Refresh,IR),處理該指令后立即進行輸出刷新,把輸出的結果送給相應的輸出鎖存器。要這樣使用指令,則要在它的代碼之前加感嘆號“!”。
(3)處理指令。用于做數據或有關處理工作。其執行與否取決于執行前的邏輯條件。隨著PLC功能的增強,此類指令越來越多。
此類指令還可運用EN\ENO機制,既按在本指令之前建立的邏輯條件,執行本指令;又依本指令的執行情況,再建立相應的邏輯條件,為后續指令的執行提供前提。以至于輸入,此類指令還可多次相間,最后才為輸出指令。只是老式的PLC多沒此機制。
圖1-22所示的西門子PLC的幾條梯形圖指令。這里的加(ADD-I)與乘(MUL-I)指令都運用的EN/ENO附加變量。如圖,要使Q0.0 ON,其條件是I0.0 ON以及這里的加(ADD-I)與乘(MUL-I)指令成功執行。可知,這樣的梯形圖的表達是很簡練的,效率是很高的。只是,這樣的梯形圖就不大像電氣原理圖,與創立梯形圖的初衷略有違背。
圖1-22 多個比較指令使用
3.按指令的執行情況分
PLC的輸入指令,在每掃描周期中,總是執行的。多數輸出指令,在執行(即與其有關的輸入)條件具備時,也總是執行的。
但有的指令就不完全是這樣的。如PID指令,盡管執行條件具備,設定又無不當之處,但它的執行周期不是取決于掃描周期,而主要取決于對PID工作周期的設定。
再如求平均數、求總數,這樣表處理或文字處理指令,要在一個掃描周期內實現它的功能,所用的處理時間很長。新機型允許其分開在若干掃描周期內完成。這樣,可避免出現,執行這類指令時掃描周期過長,不執行時又較短,而I/O響應時間一致性。
最后,如通信指令,它的接收、發送數據也不是執行一次就可完成。
4.按指令的使用分
這里的使用是指使用頻率及表達它的方法。按這個使用分有:
(1)基本邏輯(有的稱順序)指令用得最多,簡易編程器上多有其對應的專用鍵。主要用于邏輯操作。
(2)應用指令,其實也就是上述處理指令,有的稱為功能指令,可實現比邏輯操作更為復雜的功能。在簡易編程器上,一般無與其對應的專用鍵。用簡易編程器,輸入這種指令有兩種辦法,一是用先輸入功能鍵(FUN),后輸入功能號。歐姆龍及三菱有的PLC就是用這種方法。另一為在編程器上顯示指令菜單,在菜單中選擇所要輸入的指令,西門子、松下的PLC就是用這種辦法。
隨著功能指令增多。仍用兩位數的功能碼不夠了。所以,功能指令分為兩種:一為有固定的功能碼,如01,固定代表END指令;另一為無固定功能碼,如PULS(脈沖)指令,就沒有固定的功能碼,使用前現做指定。沒有固定的功能碼的指令,歐姆龍稱之為擴展指令。其功能碼要在使用前分配。當然,有的PLC把功能碼提升為3位數,就不存在此問題了。
提示:下載擴展指令設定前,應使PLC處于編程模式,有的PLC,如CPM2A,其DM6602(系統設定字之一)的高字節還要設為1(也要使PLC處編程模式才能寫這個字)。改后,還要使PLC斷電,再上電。否則這個設定的下載是不可能的。
提示:目前手持編程器已幾乎不用,這樣劃分,也許已過時。但是,功能碼還存在就是了。
此外,還可按功能,即按指令能干什么事分類,把類似的歸在一起,PLC指令的類型還是很多的。以CJ1機為例,歐姆龍把它分有32種之多。再進一步歸納還有:
(1)基本邏輯類指令,用于邏輯關系處理,是最常用、最基本的指令。
(2)定時、計數類指令,用于定時或計數,也是經常要用到的指令。
(3)數據處理類指令,用于數據運算、傳送、比較、譯碼、編碼、移位及其他有關指令。
(4)流程控制類指令,用于控制程序執行的流程。可使PLC執行指令能按所控制的順序進行,而不一定非要從零地址開始到最高地址,依此執行。
(5)監控類指令,用于處理PLC或被控制對象的故障檢測,有助于提高PLC及其控制系統工作的可靠性。
(6)處理I/O類指令,用于處理PLC應急I/O刷新或數據(信息)的入或出。
(7)通信類指令,用于處理PLC與PLC,或PLC與計算機,或PLC與智能設備間的通信。
(8)內存管理指令,用以管理PLC的各個存儲區、存儲卡。
(9)其他管理或處理指令,用于PLC的其他管理與處理。
以下將對其中若干類指令進行介紹,其他的將在介紹有關的內容時,再作說明。
1.4.1 基本邏輯類指令
指主要針對二進制數(bit)邏輯操作的指令,是PLC最基本的指令。所有的PLC都有這類指令。這類指令可分為:讀(輸入類,運用觸點)與寫(輸出類,運用線圈)兩種。PLC的繼電器功能主要就是靠它實現。
讀指令指的是讀操作數的邏輯值,并與在這之前已有的結果值進行相應的邏輯運算,進而修改結果值。目的是確定要寫的邏輯值,或為其他指令的執行建立相應的邏輯條件。
寫指令指的是把上述結果值按輸出指令要求寫給操作數。
這個結果值就是下面將要討論的R寄存器的值,有的稱為RLO(Result of Logic Operation),即邏輯運算結果。西門子的S7-200稱之為邏輯棧頂(The Top of the Logic Stack,TOS)。
表1-9列出4個PLC廠商用指令表語言表達的有關這類的指令。以下將對這類指令進行討論。
表1-9 PLC主要的基本邏輯指令
(續)
1.裝載指令
裝載指令的作用是,把操作數的內容(0或1,分別代表斷或通,工作或不工作……)送入結果寄存器R,并把結果寄存器的原有內容送入堆棧P(有的為第二個RLO,不是堆棧)。
指令的語句表符號格式:指令地址 裝載 操作位地址
它調用常開觸點,一般總是把這觸點與梯形圖的母線相連。它的功能如圖1-23所示。
這里,a為操作數的地址,括號代表a的狀態;R為結果寄存器;P為堆棧。堆棧為先進后出的存儲單元,一般長度為8個位,與PLC型別有關,如歐姆龍CJ1機為16位。8位時,可存儲8個二進制數,再續存時,最先存儲的掉失。堆棧主要在邏輯塊操作,或需多個輸入條件時用到它。
取反裝載指令,是操作位的內容先取反(代表常閉觸點),再送結果寄存器。在梯形圖上,一般是表示此常閉觸點和左母線相連。其符號是在兩短平行線的基礎上,再加一小斜線。有的PLC,裝載及取反裝載指令還可加感嘆號(!)及上或下箭頭(↑↓),其含義與使用的觸點類型有關。
圖1-23 裝載指令的功能
這里感嘆號代表執行此指令時先進行輸入刷新,以讀入此點的最新狀態,然后才把這最新狀態寫入結果寄存器。這么做當然有利于提高對這個輸入信號的響應速度。
上下箭頭,代表跳變(微分)。若為向上箭頭,則操作位的狀態從0變為1時,ON一個掃描周期。若為向下箭頭,則從1變為0時ON一個掃描周期。其他周期均為0。
加了這個感嘆號、向上及向下箭頭,使指令的功能大為增強,一個指令可起到多個指令的作用。
S7-200邏輯棧,除了棧頂,還有八位棧體,也可暫存八個位。它的棧體相當于這里的棧,而棧頂則相當于這里的結果寄存器。
2.與指令
為與操作指令。與指令的作用是把操作位的內容與R中的內容相與,然后再送入R中。這時,堆棧的內容無變化。
其語句表的符號:指令地址 與 操作位地址
梯形圖符號為
它也為常開觸點,在梯形圖上,它表示與其左邊的觸點相串聯。其功能如圖1-24所示。
這里,a為操作數的地址,括號代表a的內容;R為結果寄存器;P為堆棧,執行AND指令時,它的內容不變。
取反與指令,是先取反(代表常閉觸點),然后再和結果寄存器的內容作與運算。在梯形圖上,表示串聯上此常閉觸點。
有的PLC這兩個指令也可加感嘆號、上下箭頭。含義同裝載指令。
圖1-24 與指令的功能
3.或指令
為或操作指令。或指令的作用是把操作位的內容與R中的內容相或,然后再存入R中。這時,堆棧的內容無變化。
或指令的語句表符號:指令地址 或 操作位地址
就單個講,其梯形圖符號也為
它也為常開觸點,在梯形圖上,它表示與其上一行的觸點相并聯。其功能如圖1-25所示。
取反或指令,是先取反(代表常閉觸點),然后再和結果寄存器的內容作或運算。在梯形圖上,表示并聯上此常閉觸點。
有的PLC這兩個指令也可加感嘆號,上下箭頭,含義同裝載指令。
圖1-25 或指令的功能
4.塊與、塊或指令
無操作數。其作用是把結果寄存器的內容與堆棧的內容作邏輯與,或邏輯或,然后再送結果寄存器。
其語句表符號:指令地址 塊與或指令地址塊或,而和利時PLC則用AND或OR加括號。
它在梯形圖上代表兩組觸點的串聯或并聯。塊與功能如圖1-26所示。
塊或功能如圖1-27所示。
圖1-26 塊與的功能
圖1-27 塊或功能
這兩個指令用于觸點組間的串聯或并聯,是很有用的指令。如圖1-28所示,其對應的助記符指令也已列出。
5.輸出指令
為寫指令,輸出指令要用到線圈。一般多用正常線圈。
語句表的符號:指令地址 輸出 操作位地址
梯形圖符號為輸出正常線圈,可用圓圈或括號表示。歐姆龍、三菱PLC的助記符用OUT,西門子PLC用等號,和利時用ST,如圖1-29所示。
圖1-28 觸點組間的串聯或并聯
圖1-29 輸出指令
其功能為
這里,a為操作數。執行輸出指令后堆棧內容不變,R的內容也不變,只是把R的內容傳給a。有的也可使用反向線圈。如歐姆龍PLC取反輸出指令,
其含義是把R先取反,然后再傳給a。表示符號為在OUT的符號基礎上,加一斜線。
有的PLC這個指令也可加感嘆號(!)。感嘆號代表執行此指令后,立即進行輸出刷新,把這時輸出的狀態送輸出鎖存器,直接產生輸出。
圖1-30所示為西門子PLC加感嘆號使用例子。它立即刷新后,把I0.0讀入。寫Q0.0后,立即刷新。用語句表列寫指令時,在LD之后,加I,即LDI 0.0及=(此符號相當于歐姆龍的OUT)后,再加I,即=I Q0.0。顯然,這樣處理,可加快Q0.0對I0.0的響應速度。
圖1-30 西門子PLC加感嘆號的程序例
有了以上介紹的輸入、輸出指令,普通的串、并聯電路的邏輯就完全可用這些指令處理了。
提示:西門子、三菱PLC無取反輸出,但有取反指令。它的先取反,后輸出,與這里的OUT NOT效果相同。反之,如果歐姆龍PLC用OUT NOT后,輸出給一個暫存器TR,然后再裝載此TR,也就相當于執行取反指令(NOT、INV)。取反指令(NOT、INV)的格式為
但如果一組邏輯條件,有分支輸出,該怎么處理?不同的PLC有不同的辦法:
歐姆龍PLC用輸出暫存器(TR),然后,再裝載暫存器解決。三菱、西門子PLC都用進棧、讀棧及出棧指令解決。只是這里的棧與前面介紹的棧不是一回事。前面的棧用于裝載、與、或及輸出等多種處理。即使用助記符編程,也不必編寫任何指令。而這里的棧是用于上述分支處理。用助記符編程時,則需編寫相應指令。
圖1-31所示為這3種PLC解決此問題的梯形圖及助記符程序。
圖1-31 分支輸出解決方案
從圖1-31a可知,歐姆龍用暫存器TR(有8個,性能高的機型有16個)存(用OUT指令)分支處的數據。而當使用時,再用LD指令調出。
從圖1-31b可知,西門子用IPS(進棧)指令,把分支處的數據壓進棧。而當使用時,再用IPD(讀棧)指令調出。這里最后用的IPP指令,是既讀棧,而又清棧。因為在其后的程序已不需這樣處理了。
從圖1-31c可知,三菱基本與西門子相同。只是它進棧指令叫MPS,而不是叫IPS。讀棧指令叫MRD,而不叫IPD。讀棧、清棧指令叫MPP,而不叫IPP。
和利時PLC沒有這類指令,可采用多節處理,類似圖1-31分支處理,它共用了3個節,如圖1-32所示。
以下順便介紹一下西門子及三菱PLC的堆棧,它們與歐姆龍PLC的堆棧略有不同。堆棧指令在將梯形圖程序手工轉換為助記符程序時,是必須要用的。只是在當今,這個轉換完全可由編程軟件實現。這個轉換具體如下。
西門子PLC堆棧:它的棧頂為上述介紹的結果寄存器R,而第2位即為上述棧P的棧頂。另外,就是它用的操作指令不同。如:
棧裝載與(ALD):對堆棧中的第一層和第二層的值進行邏輯與操作結果放入棧頂,并在執行完ALD指令后,堆棧深度減1。
棧裝載或(OLD):對堆棧中的第一層和第二層的值進行邏輯或操作結果放入棧頂,并在執行完OLD指令后,堆棧深度減1。
邏輯推入棧(LPS):復制棧頂的值,并將這個值推入棧,而棧底推出,數據丟失。
邏輯讀棧(LRD):復制堆棧中的第二個值到棧頂。堆棧沒有推入棧或彈出棧操作。但舊的棧頂值被新的復制值取代。
圖1-32 和利時PLC分支處理
邏輯彈出棧(LPP):彈出棧頂的值,堆棧的第二個值變為新的棧頂值。
三菱邏輯堆棧:它有11層,也是用作中間存儲。主要是用于處理如圖1-14所示得分支輸出。
進棧指令(MPS):把邏輯運算結果入棧,而棧底推出,數據丟失。
讀棧指令(MRD):讀取棧頂數據用于邏輯運算,棧中數據不變。
出棧指令(MPP):讀取棧頂數據用于邏輯運算,并棧中各數據依次上推。
提示:如使用圖形圖編程,畫出梯形圖程序就可以了。把梯形圖程序轉換成助記符程序時,這里暫存器使用或進棧、出棧處理的有關指令使用,都是自動實現的。
6.置位、復位指令
其操作數為位地址,也是一種輸出指令。
它與使用設置(鎖存)線圈、復位(取消鎖存)線圈對應。當結果寄存器R的內容(邏輯條件)為1,則執行本指令。否則不執行,其操作數(即為位)內容不變。執行置位指令,其操作數變為1。執行復位指令,其操作數變為0。這兩個指令的梯形圖及助記符符號如圖1-33所示。
從圖1-33可知,歐姆龍、三菱及和利時PLC僅對一個點置位、復位,而西門子PLC置位、復位的點數可設定,圖中S、R下設為1,故僅對Q0.0置位、復位。如設為2,則除了Q0.0還有Q0.1,如設為其他,則類推。
圖1-33 置位、復位指令
歐姆龍PLC還把這兩者復合在一起,成為KEEP指令,類似于數字電路的RS觸發器。有兩個輸入端,一為R端,另一為S,分別對操作數置0(復位)與置1(置位)。
雖同樣可實現置位、復位,但置位、復位指令可分開置于程序的不同位置,用起來較靈活。而KEEP指令則要依此執行這兩個指令,先S后R。
西門子PLC也有類似KEEP那樣的指令,RS或SR,其符號如圖1-34所示。
圖1-34 西門子RS、SR指令
RS完全同KEEP,復位優先,R、S端均為1,復位。而SR,為置位優先,R、S端均為1,置位。
置位,復位指令前各分別賦一次值;KEEP、RS(R優先)、SR(S優先)指令之前則要連續賦兩次值(要兩次使用裝載指令)。在梯形圖上的表示為方塊。置位,復位指令各僅有一個入端,而KEEP、RS、SR要有兩個入端。如圖1-35所示。
圖1-35 KEEP、SR指令使用
提示:圖1-35a與b兩個程序,表面上功能是相同的。但實際是有區別的。若用10.00代替0.01,當00.00 ON時,圖1-35b程序可使10.00 ON、OFF按掃描周期交替出現,而圖1-35a程序10.00永遠不可能ON。
提示:圖1-35c和d兩個程序道理上是一樣的,但對S7-200只允許用圖1-35d的畫法,圖1-35c是錯誤的,編譯通不過。而歐姆龍PLC則允許圖1-35c這種畫法。說明在圖形圖表達上各家PLC還是稍有差別的。
和利時PLC沒有此指令,但有相關功能塊。使用起來也很方便。
7.微分指令
有為上沿微分及下沿微分。
它與使用正轉換感應線圈、負轉換感應線圈對應,操作數也是位地址。當執行上沿微分指令時,R的內容從OFF(0)變為ON(1),則操作數的內容為1(ON)一個掃描周期;當執行下沿微分指令時,情況相反。R從ON變到OFF,操作數ON一個掃描周期。
有的PLC的微分指令不作為輸出指令,而作為中間指令。它可加在一組輸入指令之后,加上它,然后再送給輸出指令,用起來也很方便。
8.其他位處理指令
如西門子PLC有(#)指令,執行它可把此時的RLO內容寫入它的操作數中,并還可在它之后進行相應操作。如圖1-36給出了使用這指令后的操作數的邏輯值。
其他PLC廠商的這類指令,與這里介紹的大同小異,就不多介紹了。
圖1-36 西門子PLC(#)等指令使用
1.4.2 定時、計數指令
定時與計數指令主要用于定時與計數,也是很常用的指令。特別在使用時間進行控制,或存儲內部工作狀態時,更需要用它。只是目前很多PLC不用這類指令,而用它的功能或功能塊。
定時與計數指令本質上也是一種邏輯輸出指令。它也是為了產生輸出,實現從入到出的變換。只是,它是延時實現,或達到要求的計數值后實現。所以,有的PLC,如三菱公司PLC,起用定時器、計數器就是用輸出(OUT)指令,只是其操作數用定時器、計數器,并在使用它時,同時對定時值、計數值也作設定。
1.常用定時指令
圖1-37為三菱PLC調用定時器梯形圖程序。
從圖知,當X000 ON,T0線圈工作,經延時5s(該定時器計時單位為0.1s),T0的常開觸點ON,可使Y000 ON。也就是說,從X000 ON到Y000 ON是有延時的。這里延時時間由定時器T0控制。
歐姆龍PLC定時指令有普通(TIM,時間間隔100ms)、高速(TIMH,時間間隔10ms)、高高速(TIMHH,時間間隔1ms)定時指令多種。在這指令之前,當然要對寄存R賦值,即寫R,建立條件,或說連一個輸入端。
指令在梯形圖上的符號是方框或圓圈。如方框如圖1-38所示。
圖1-37 定時器程序
圖1-38 歐姆龍PLC的TIM指令框圖
這里×××為指定定時器的編號及設定值。
普通定時指令的設定值的設定單位為0.1s。設定值、現值都用BCD碼表達。最大設定值可達9999,即999.9s。
如用高速定時指令的設定值的設定單位為0.01s。設定值、現值都用BCD碼表達。最大設定值可達9999,即99.99s。用高高速定時指令則設定值的設定單位為0.001s。設定值、現值都用BCD碼表達。最大設定值可達9999,即9.999s。
歐姆龍PLC使用定時器的梯形圖如圖1-39所示。
這里00002為輸入點,000為定時器號,#150為定時設定值,單位為0.1s,故定時值為15s。00002 ON后延時15s,TIM000常開觸點ON。而一旦00002 OFF,則TIM 000立即OFF。
圖1-39 定時器使用
歐姆龍CJ1H系列PLC還有TIMX指令。其功能與TIM相同,只是它是按十六進制計時。
提示:雖然這種PLC同時有TIM及TIMX指令,但在編程前要用編程軟件,在PLC屬性欄中,先做選擇,而且,只能選用其中的一種。默認選定為TIM。其他帶“X”的指令也都有此情況。
西門子PLC的定時器為增計數,如S7-200,用定時器33時,為每100ms計一個數,直到定時器的現值等于或大于設定值,則產生輸出。在輸出的同時,計時還在繼續,直到達最大值。如圖1-40所示,當I2.0 ON,T33開始計數,每100ms加1。到了其值等于3(這里設定值設為3),則T33標志位ON,且其現值還在增加。一旦I2.0 OFF,則計數停止,T33現值回到0,T33標志位OFF。
圖1-40 S7-200 ON延時定時器使用例子
S7-200除了有ON延時、OFF即時,還有OFF延時、ON即時的定時器。圖1-41所示為它的工作情況。
圖1-41 S7-200 OFF延時定時器使用例子
S7-200定時器都可用以上介紹的復位指令(R)復位。復位作用期間,定時器的現值變為0,標志值OFF,停止計時。
2.其他定時指令
(1)高速定時指令(TIMH、TIMHH,西門子、三菱用不同編號的定時器實現),用其可實現10、1ms為單位的定時。
(2)累計定時指令(TTIM):用以累計計時。它是增計時,計時單位為0.1s。輸入端ON時計時,OFF不計時,但不復位。再ON,再計,并累計計時,直到達到設定值,計時停止,并產生輸出。計時復位使用復位端ON。
CJ1也還有與TTIM對應的TTIMX指令,所不同的也只是它是按十六進制數計時。
S7-200也有可累積計時的定時指令。如圖1-42所示,12.1ON時計時,OFF停止,累計到設定值,產生輸出。
圖1-42 S7-200可累積計時定時指令使用
(3)8位計時指令(TIML):CV1000機開始有此指令,是普通定時指令的加長,設定值可達8位,即99999999。計時值可達115天。
與TIML對應的TIMLX指令,所不同的也只是它是按十六進制數計時。它最多可計49710天。
(4)多輸出計時指令(MTIM):CV1000機開始有此指令,可產生8個輸出。這8個輸出相應于8個設定值。計時時,計時是增計數,現值不斷增大,與某一設定值相比,大或等于后者時,即產生相應輸出。
這個定時指令,一個相當于多個,擴大了定時器的功能。
與MTIM對應的MTIMX指令,也是用十六進制計時。
3.西門子S7-300、400系列PLC定時指令
有5種,可表達為S5系列格式(稱S5TIMER)或S7系列格式。分別是SP(PulseTimer)、SE(Extended Pulse Timer)、SD(ONDelay Timer)、SS(Retentive ON-Delay Timer)、SF(OFF-Delay Timer)。
定時器現值寄存器的內容如圖1-43所示。
表1-10為不同時基的編號及最大可能設定的定時值。
圖1-43 S7-300定時器現值寄存器
表1-10 不同時基的編號及最大可能設定的定時值
定時值要預設。其格式有如下兩種:
W#16#wxyz:這里W為時基,wxyz為相應的定時值,BCD碼。
S5T#aH_bM_cS_dMS:這里S5T表示為S5格式,abcd為相應的定時值的時分秒毫秒。選定后,其時基系統會自行確定。
這5種定時器的有關工作情況見有關使用說明,這里略。
4.有關定時器的使用問題
(1)歐姆龍及三菱PLC的定時指令雖只有延時ON一種,但完全可用這個指令與相應的基本邏輯指令組合,以實現這里的其他四種指令的功能。圖1-44所示為ON及時,而OFF延時的程序。其他的程序略。
運行圖1-45程序,對歐姆龍PLC而言,這里的200.00即為ON及時OFF延時的定時器。對三菱PLC而言,這里的M0即為ON及時OFF延時的定時器。
圖1-44 ON及時OFF延時定時程序
(2)用定時器產生定時脈沖(僅ON一掃描周期)信號。最簡單的辦法是用定時器自身的常閉觸點去控制自身線圈,用它的常開觸點去產生脈沖。如圖1-45所示,這里T33的常閉觸點控制T33定時器,當定時間1到,定時器T33產生輸出,T33常開觸點ON,而T33常閉觸點OFF。后者將在下次執行此程序時,使定時器T33停止工作。這將使定時器T33停止輸出:其常開觸點ON一個掃描周期后,又轉為OFF;而常閉觸點OFF一個掃描周期后又轉為ON,又可開始新的計時。如此周而復始,T33常開觸點將不斷產生定時脈沖。
要指出的是,對S7-200系列PLC的10ms級的定時器,可能是系統的原因,用此法是受限制的。如圖所示,只能在本梯級前的梯級,如圖中梯級1,能產生脈沖,而本梯級后,如梯級3,不能產生脈沖。其他兩家PLC及S7-200其他級別的定時器無此問題。
5.常用計數指令
(1)三菱PLC計數器。圖1-45所示為三菱PLC調用計數器梯形圖程序。
圖1-45 用定時器產生定時脈沖
圖1-46 計數器程序
從圖1-46可知,當X001從OFF到ON,則計數器C0線圈工作,計一個數,當C0計到3,則C0的常開觸點ON,可使Y003 ON。也就是說,X001從OFF到ON 3次,Y003工作。這里計數設定值K3(即時數)也可為直接或間接地址。
它的計數器復位使用復位指令。如上例即使用RST C0。而且,實現技術的前提是不執行這個指令。
三菱的定時器、計數器按十六進制工作,故K值最大可設為65535(十六進制FFFF)。
(2)歐姆龍PLC計數器。它實現減計數。有兩個輸入端,一為計數端,另一為復位端。歐姆龍的指令的梯形圖格式如圖1-47所示。
該計數器的工作情況是:復位端(R)的邏輯條件為ON,停止計數,現值復位為設定值。復位端OFF,允許計數。這種情況下,當計數端(C)的邏輯條件從OFF到ON時,在該掃描周期,計數器的現值減1。其他情況下,現值不變。當現值減為0時,產生輸出,且現值保持為0。
CJ1H還有CNTX指令,所不同的它用十六進制計數。所以,它的計數范圍可擴大到65535。
(3)西門子PLC計數器。圖1-48a所示為使用西門子增計數器指令程序。
圖1-47 歐姆龍PLC的計數器指令
圖1-48 使用西門子增、減計數器指令程序
圖1-48a中,CU為增計數端,R為復位端,PV為設定值輸入端,C0為計數器標號。當I0.1 ON,計數器復位(現值為0),停止計數,輸出OFF。當I0.1 OFF,每I0.0從OFF到ON一次計數器作增1計數。計數器現值大于或等于設定值,計數器輸出C0 ON,且繼續計數,直到32767這個可能的最大值。而本圖當計到48或大于48,則C0 ON,Q0.0工作。
西門子還有減計數器(CTD)。圖1-48b所示為使用西門子PLC減計數器指令程序。這里,CD為增計數端,LD為裝載端,PV設定值輸入端,C1為計數器標號。當I1.2 ON,計數器裝載(現值為100),停止計數,輸出OFF。當I1.2 OFF,每I0.2從OFF到ON一次計數器作減1計數。計數器現值等于0,計數器產生輸出(C0 ON),且計數停止。
6.可逆計數器
可進行雙向計數。
(1)三菱PLC可逆計數器是雙字的。也是用輸出指令調用。計數的方向由相應的特殊繼電器狀態決定。其計數范圍為-2147483648~2147483647,并在此范圍內循環計數。即增到最大值時,如再增一個數,則當前值變為最小值。反之也類似。表1-11為FX2N系列的這些計數器及相應的方向切換特殊繼電器。
表1-11 FX2N系列可逆計數器所使用的特殊繼電器
圖1-49所示為使用三菱可逆計數器的梯形圖程序。
圖1-49中,C200為可逆計數器。M8200為其方向切換特殊繼電器。M8200 OFF,C200增計數,ON,減計數。當X005 OFF,C200接收X004的增計數,當X005 ON,C200接收X006的減計數。而當X007 ON計數器復位,現值等于0,計數及輸出都停止。圖1-50所示為該計數器產生輸出的情況。
圖1-49 三菱可逆計數器程序
圖1-50 可逆計數器產生輸出簡圖
從圖1-50可知,只要當前值從小與設定增加,到大于或等于設定值,計數器即產生輸出。反之,或計數器復位,則停止輸出。
(2)歐姆龍PLC可逆計數其指令為CNTR。除了有復位端,還有兩個計數端,一個為正計數端(U),一個為減計數端(D)。西門子PLC為CTUD,還有個設定值輸入端。其梯形圖格式如圖1-51所示。
其工作情況是,初始狀態,或復位端ON時,現值為0,不計數。復位端OFF,允許計數。正端從OFF到ON,正計數,計數現值加1;負端從OFF到ON,減計數,計數現值減1。具體計數情況如圖1-52所示。
圖1-51 可逆計數指令
圖1-52 可逆計數示意圖
當增計數到設定值時,再增計1個數,則現值變為0,且產生輸出,使計數完成標志位ON,如圖1-53所示。
當減計數到現值為0時,再減1個數,則現值變為設定值,也產生輸出,使計數完成標志位ON,如圖1-54所示。
CJ1H還有CNTRX指令,與CNTR不同的是,它用十六進制,而不是用BCD碼計數。所以,它的計數范圍可擴大到65535。
圖1-53 增計數達到設定值時再增計1計數
(3)西門子PLC可逆計數器。圖1-55所示為使用西門子PLC可逆計數器的梯形圖程序。它是16位可逆計數,在-32768~32767之間循環計數。當計數值大或等于設定值(PV)時,計數器輸出常開點ON,并繼續計數。圖1-56所示為執行該程序的實際計數及輸出情況。
圖1-54 減計數減到0,再減1計數
圖1-55 西門子PLC可逆計數器
1.4.3 應用指令
1.數據處理指令
隨著PLC技術的發展,其數據處理指令越來越多,功能也越來越強,使當今的PLC不僅可方便地用于邏輯量的控制,而且也可方便地用于模擬量的處理與控制。
圖1-56 西門子PLC可逆計數器工作情況
數據處理指令很多,占PLC指令集的相當大部分。大都以雙字、字、多字為單位操作。具體有傳送指令、比較指令、移位指令、譯碼指令及各種運算與文字處理指令等。
(1)傳送指令。最簡單、最常用的傳送指令為把源地址的內容或某即時數傳送到某目標地址。傳送后,源地址內容不變。圖1-57所示為三廠商傳送梯形圖及助記符指令。
圖中,S為源地址,也可是即時數;D為目標地址。
歐姆龍PLC執行傳送指令也影響標志位(25506特殊繼電器,它反映相等的特點),傳送的數為0時,置其為1,不然置0。
歐姆龍PLC的MOV指令名稱前加@,即@MOV(021),三菱PLC的MOV指令后加P、即MOVP,則指令為微分執行。只在邏輯條件從OFF到ON那個掃描周期,指令執行一次。其他情況,指令不執行。歐姆龍新型PLC,MOV之后L,即MOVL,三菱PLC MOV之前加D,即DMOV,可實現雙字傳送。而且這里的MOV前加字及后加字可同時進行。
西門子PLC MOV-W為字傳送,而MOV-B為字節傳送,MOV-D為雙字傳送,MOV-R為實數傳送。
圖1-57 傳送梯形圖及助記符指令
提示:從三家MOV指令的表示再次看出,同樣是梯形圖,不同廠商的指令表示是不相同的。所以,設計不同廠商PLC的程序,要看到這個差別。
除了MOV,歐姆龍、三菱PLC還有反相傳送指令MNV(三菱為CML)指令,它與MOV不同的只是傳送之前,先把要傳的內容取反,然后再傳。
此外,還有其他多種傳送指令。有:
多字傳送,也稱塊傳送,或稱成批傳送指令,可把若干連續地址的內容分別傳送給對應的連續的目標地址。只要設好要傳的數據的起始地址,目標的起始地址及要傳的字數就可以了。
塊設定,或稱多點傳送指令。它可把一個字的內容設定到指定的連續存儲區中,只要指出該區的起始地址及末了地址。這個指令可很方便地用于對PLC的一些存儲區進行初始化。
字交換指令,可進行兩個地址內容的交換。
歐姆龍PLC還有帶偏移目標地址的傳送指令DIST。可把源地址的內容傳送給某基址加偏移地址后的地址。這種傳送類似使用指針,較靈活,便于存儲數據,或從同一子程序中取出的數存于不同的單元中。
歐姆龍PLC還有帶偏移源地址的傳送指令,COLL。可把某基址加偏移地址后的地址的內容傳送到某個目標地址。這種傳送也類似使用指針,便于取數,或同一子程序可使用不同的參數。
除了字、雙字、多字傳送,還有BCD碼的位(digit)及十六進制的位(bit)傳送等。這些指令給數據處理都提供了方便。
(2)比較指令,也稱關系運算指令。
1)歐姆龍PLC常用的比較指令CMP。執行它時,實現兩個數的比較,并依據比較結果使相應的標志位置位。
比較結果位有三個:
EQ(等于),第一、第二比較數相等,歐姆龍PLC以前機型是使特殊繼電器255.06 ON;
LE(小、等于),第一個數小于第二個數,歐姆龍PLC以前機型是使特殊繼電器250.07 ON,
GR(大、等于),第一個數大于第二個數,歐姆龍以前機型是使特殊繼電器255.05 ON。
提示:歐姆龍PLC不僅使用比較指令會改變以上特殊繼電器的狀態。有的其他指令也會改變它。所以,在比較指令與取得比較結果之間,不能如圖1-58那樣,夾入指令B。因為執行指令B,有時可能改變在比較時得到的結果。那樣,A得到的結果,就可能有誤。
圖1-58 不正確使用比較指令示意
提示:由于編程軟件的進步,比較結果的標志用的特殊繼電器編號,可以不必記憶。可用P-EQ(相等)、P-LT(小于)及P-GT(大于)代替。
2)三菱PLC比較指令。其格式如下:—[CMP D1 D2 M1]
這里方括號左邊橫線為執行本指令的邏輯條件。方括號中CMP為指令名稱,D1為第一比較數,D2為第二比較數,M1(在此雖只指明M1)到M3為比較結果標志。當D1大于D2時,M1ON,其他OFF;當D1等于D2時,M2 ON,其他OFF;當D1小于D2時,M3 ON,其他OFF。
三菱PLC的CMP與MOV一樣可加前、后綴D、P,實行雙字比較或微分執行。
3)西門子PLC觸點比較指令。可進行各種長度及不同數據類型的比較,其結果可當作梯形圖的邏輯條件使用。圖1-59所示為使用西門子PLC比較指令的梯形圖程序。
圖中除了常開觸點I0.0及輸出Q0.0外,全部為比較指令。從圖1-59可知,要使Q0.0產生輸出,其條件是:VB0(字節整數)要大或等于QB0(字節整數)或I0.0 ON,同時VW7(字整數)等于VW4(字整數)或IB2(字節整數)大于或等于VB3(字節整數),同時VD56(雙字浮點數)小于或等于VD12(雙字浮點數),同時VB100(字符)等于VB10(字符)。
圖1-59 使用西門子PLC比較指令的梯形圖程序
4)三菱PLC觸點比較指令。圖1-60所示為使用三菱觸點比較指令的梯形圖程序。
圖中除了常開觸點X002及輸出Y000外,其他的為比較指令。從圖1-60可知,要使Y000產生輸出,其條件是:D1(字整數)要大于D2(字整數),同時X002 ON,或D10(雙字,這里大于號之前加D,為雙字的含義)大于或等于D20(雙字)。
圖1-60 使用三菱觸點比較指令的梯形圖程序
歐姆龍PLC新機型也有類似此觸點比較指令。
5)歐姆龍PLC還有表比較指令,可把一個數與若干個數比較,哪個數與其相等,則指定字中相應位ON。否則,OFF。塊(范圍)比較指令。它的比較表是16對數,列出被比較數的上下限。當這個比較數處于被比較數的某上下限之間(含上、下限本身),視同比較相等,可使指定字的相應位ON。否則,OFF。
……
提示:比較指令對應操作數的格式應一致,否則無法得到預期的結果。
提示:比較指令是實現邏輯判斷的基本手段。正確理解與巧妙使用比較指令,是PLC編程的關鍵之一。
(3)移位指令。移位指令用于字或多個位字中二進制數依次順序左移或右移。有多種多樣的移位指令。
簡單左移:執行一次本指令移一次位。移位時用0移入最低位。原最低位的內容,移入次低位……依次類推,最高位的內容移出,或移入進位位(而原進位位的內容丟失)。有的PLC可設為每次可移多個位。
簡單右移:與左移不同的只是它為右移,先把進位位的內容移入字的最高位,原最高位的內容移入次高位……依次類推,原最低位的內容丟失,或移入進位位(而原進位位的內容丟失)。有的PLC可設為每次可移多個位。
循環左移:它與簡單左移不同的只是它的進位位的內容不丟失,要傳給00位,以實現循環。
循環右移:與循環左移不同的是00的內容不丟失,傳給進位位,原進位的值傳給第15位,以實現循環右移。
還有可設定輸入值的移位,如左移,不是都用0輸入給最低位,而是可設定這個輸入的值。
還有可逆移位指令,由用控制字,控制左還是右移,并可實現多字移位。
除了二進制的位移位,還有數位(digit)移位,可左移,也可右移。移位的對象可以多個字。
還有字移位,以字為單位的移,執行一次本指令移一個字。移時0000移入起始地址(最小地址),起始地址的原內容移入相鄰的較高地址……最高地址(結束地址)的內容丟失。多次執行本指令,可對從起始到結束地址的內容清零。
……
圖1-61所示為三家PLC左移指令梯形圖符號。
圖1-61a中,St是移位開始通道,Ed是移位終了通道,P是移位脈沖輸入,R是復位輸入,S是移位信號輸入。當P從OFF到ON時,而R又為OFF,則從St到Ed間的各個位,依次左移一位,并把S的值(OFF或ON)賦值給St的最低(00)位,Ed的最高(15)位溢出;但如R復位輸入ON,移位禁止,并St到Ed各通道清零。
圖1-61 PLC左移指令梯形圖符號
圖1-61b中,SHL之后加DW為雙字,即4個字節移位,EN為此指令執行條件。其輸入為ON,才能執行本指令,否則,不執行。IN是進行移位的雙字,OUT是移位結果輸出的雙字,N是每執行一次本指令將移位的位數。每次移位時,除了移位雙字各位值相應左移,并用0填入移入的位。
圖1-61c中,S是移位源,D是移位的輸出,n1為指定源及輸出位數。n2是指定執行一次本指令將移位的位數。本指令的輸入為ON,才能執行本指令,否則,不執行。每次移位時,除了移位指定的各位值相應左移,并用移位源的值填入移入的位。
圖1-62所示為使用PLC左移指令梯形圖程序。
本程序的功能是,當0.02、I0.2及X002 OFF時,而0.01、I0.1及X001從OFF到ON,則使輸出(從10通道開始到11通道、QD04雙字及從Y000到Y37共32個位)左移一位。對圖1-62b、c,為了能把I0.0及X000的值賦值給這里的“輸入位”,即Q3.00及Y000,以及能對移位用的雙字或各個位清零,這里增加了兩組指令。目的是使其也具有圖1-62a的功能。
圖1-62 PLC左移指令梯形圖程序
提示:西門子數據存儲格式(順序)與歐姆龍、三菱不同,是高字節存低位數,低字節存高位數。故上述輸入位用QB3.0,而不像歐姆龍用10.00,也不像三菱用Y000。西門子PLC字節間的移位,以圖1-62b為例,是Q3.7移給Q2.0;Q2.7移給Q1.0;Q1.7移給Q0.0。各字節中的移位,則也是從低位到高位移,即Q0.6移給Q0.7,Q0.5移給Q0.6等。三菱PLC的移位,以圖1-62c為例,是Y0.7移給Y1.0;Y1.7移給Y2.0;Q2.7移給Y3.0。各8位中的移位,則也是從低位到高位移,即Y0.6移給Y0.7,Y0.5移給Y0.6等。歐姆龍PLC的移位,以圖1-62a為例,是10.15移給11.00。各字中的移位,則也是從低位到高位移,即10.06移給10.07,10.05移給10.06等。
移位指令是很有用的。不僅在數據處理時,要用到它,而且在邏輯量控制時,也常用到它。當然,以上講的也還不是移位指令的全部,也不是所有PLC都有以上講的這些移位指令。具體使用此類指令,也可能還有一些細節,故使用時可參閱有關幫助。
(4)譯碼指令。用以譯碼,以適應數據使用或實現控制的需要。
最常用的為BCD碼與BIN二進制碼轉換用指令。BCD為二進制碼轉換成BCD碼指令。BIN為BCD碼轉換二進制碼指令。有的PLC還有可處理雙字的BCD及BIN指令,可進行兩字長轉換。
還有為4轉16(DMPX、DECO)及16轉4(MLPX、ENCO)的譯碼指令。
1)4轉16:此指令可用一個輸入(源)數位(digit,由4個bit組成)的值,使一個16位二進制輸出(目標)數中,與該值相等的位ON,其他位OFF。當使用數值去控制不同的輸出時,常要使用到此指令。而多數PLC都提供有這個指令。
圖1-63所示為一組不同PLC使用4轉16指令的梯形圖程序。其作用都是用4個輸入點(分別是0.00~0.03、I0.0~I0.3及X000~X003)組成的一個數位(digit)的不同取值(十六進制編碼),去控制輸出(分別為10.00~10.15、Q0.0~Q1.7及Y000~Y017)。
圖1-63 使用4轉16指令梯形圖程序
如圖1-63所示程序,如輸入(編碼)值為6,則將使10.06、Q1.6(注意:西門子位在字中的排序與其他PLC不同,其升冪先是高字節的00位到07位,后為低字節的00到07位,故這里為Q1.6,而不是Q0.6)及Y006 ON,而其他各位全OFF。再如輸入(編碼)值為11,則將使10.11、Q1.3(八進制計算)及Y013(八進制計算)ON,而其他各位全OFF。再如輸入(編碼)值為0,則將使10.00、Q0.0及Y000 ON,而其他各位全OFF。有了這個程序,如用16位的撥碼開關接輸入點,則可很方便地用這個開關的不同設置,產生不同輸出。如用增計數器作為這里的源,也可用計數值的變化,一步步改變輸出。
提示:如圖1-63b所示,西門子S7-200的DECO指令的輸入(IN)是字節,且其作用的僅為它的低4位(如圖,為I0.0~I0.3),輸出是兩個字節,16個位。只要其EN端邏輯條件ON(圖中SM0.0為常ON觸點,故此條件滿足),即執行本指令。而S7-300、400系列PLC則沒有這個指令。
提示:如圖1-63c所示,三菱的DECO指令稍復雜,功能也稍強。如圖,X000~X003,4個位,為源(S·、輸入),Y000~Y017為目標(D·、輸出),16個位。只要執行它的邏輯條件ON(圖中M8000為常ON觸點,故此條件滿足),即執行本指令。為什么這里輸入為4位,輸出為16位?這與常數(n)的取值為4有關。
圖1-64所示為三菱DECO指令n的取值及其含義示意。
當目標(D)是“位”軟元件時,n取值應小或等于8。輸出多少位?是2的n次方。圖1-63c的n為4,故輸出為16位,對應的輸入為4位。如n為8,則可輸出256位。圖1-64中n為3,故輸出為8位,對應的輸入為3位。該圖輸入X000、X001 ON,X003 OFF,其值為3,故M13 ON,其他7位均OFF。
圖1-64 三菱DECO指令n的取值及其含義
當目標(D)是“字”軟元件時,n取值應小或等于4。輸出多少位?也是2的n次方。圖1-64b中n為3,故輸出為8位,對應的輸入為3位。該圖輸入D0的低3位的值為3,故D1的第3位ON,其他位,含高字節各位均OFF。
提示:如圖1-63a所示,歐姆龍PLC的MLPX指令,更復雜,功能也更強。如圖,000.00到000.03,4個位,為源(第1個操作數、S),010.00到010.15為目標(第3個操作數、R),16個位。只要執行它的邏輯條件ON(圖中p-On為常ON觸點,故此條件滿足),即執行本指令。為什么這里輸入為4位,輸出為16位?這與#0(第2個操作數,控制字的取值)有關。
圖1-65所示為MLPX指令控制字(第2個操作數,C)的含義及應用實例。這里C有4個數位,其中數位0(n)指的是“源”字(S)中那個數位用作輸入,數位1(l)指的是有多少數位用作輸入。自然,輸入數位多,輸出也多(4對16)。
如圖1-65所示,這里n=2,l=1(0時用一個數位,1用2個,余類推)。所以,如S中數位2的值為m,則R字中的m位ON。如S中數位3的值為p,則R+1字中的p位ON。
控制字C的數位,這里為0。如數位3取值為1,將進行8到256的譯碼(老機型無此功能)。256為16個字組成的256個位。8為8個字節為一組,每組兩數位十六進制數,其值變化范圍為00~FF,正好對應于256位的00~255位。8到256譯碼,本質上與4到16是相同的,只是它的通道長(位數)不是16,而是256,位(號),不是0~F,而是兩位十六進制數00~FF。但8到256最多只能進行兩組,不像4到16可進行4組譯碼。圖1-66所示為MLPX指令8到256應用實例。
2)16轉4:它與4轉16相反,是把一個16位二進制輸入(源)數中ON位的序號,作為一個輸出(目標)數位(digit,由4個bit組成)的值。如前者有多個ON的位,則取其最大(對S-200相反,取其最小,歐姆龍CJ1等可選定)的位。當需對不同的輸出進行記錄時,常要使用到此指令。而多數PLC都提供有這個指令。
圖1-67所示為一組不同PLC使用16轉4指令的梯形圖程序。其作用都是將16個觸點(分別是10.00~10.15、Q0.0~Q1.7及Y000~Y017)的不同取值(十六進制編碼),譯成一個數位(digit)輸出(分別為100.00~100.03、VB0.0~VB0.3及D0的低4位)。
如圖1-67,如輸入10.06、Q0.6及Y006 ON,而其他各位全OFF,則將使100、D0字、VB0字節的低數位(數位0)的值為6。如010.11、010.9、Q1.3、Q1.1及Y013、Y011 ON,而其他各位全OFF,則將使100、D0字的低數位(數位0)的值將為11,而VB0字節的低數位(數位0)的值、將為9。有了這個程序,可很方便地把輸出點的輸出情況予以記錄。
圖1-65 MLPX指令控制字(C)的含義及應用實例
圖1-66 MLPX指令8到256應用實例
圖1-67 使用16轉4程序
提示:如圖1-67b所示,西門子S7-200的ENCO指令的輸入(IN)是兩個字節,輸出是一個字節,只要其EN端邏輯條件ON(圖中SM0.0為常ON觸點,故此條件滿足),即執行本指令。而S7-300、400則沒有這個指令。
提示:如圖1-67c所示,三菱的ENCO指令,稍復雜,功能也稍強。如圖,Y000~Y017,16個位,為源(S·、輸入),D的低數位為目標(D·、輸出),4個位。只要執行它的邏輯條件ON(圖中M8000為常ON觸點,故此條件滿足),即執行本指令。為什么這里輸入為16位,輸出為4位?這與常數(n)的取值為4有關。
圖1-68所示為三菱ENCO指令n的取值及其含義示意。
圖1-68 三菱ENCO指令n的取值及其含義
當“源”(S)是“位”軟元件時,n取值應小或等于8。輸入多少位?是2的n次方。圖1-67c的n為4,故輸入為16位,對應的輸出為4位。如n為8,則可輸入256位。圖1-68n為3,故輸入為8位,對應的輸出為3位。該圖輸入M13ON,故D10的低3個位的取值為3,即第0、1位ON、02位OFF。
當“源”(S)是“字”軟元件時,n取值應小或等于4。輸入多少位?也是2的n次方。圖1-68中n為3,故輸入為8位,對應的輸出為3位。該圖輸入D0的第3位ON,故D1的低3個位的取值為3,即第0、1位ON、02位OFF。
提示:如圖1-67a所示,OMRON的DMPX指令,更復雜,功能也更強。如圖,000.00到000.03,4個位,為源(第1個操作數,S),010.00到010.15為目標(第2個操作數、R),16個位。只要執行它的邏輯條件ON(圖中p-On為常ON觸點,故此條件滿足),即執行本指令。為什么這里輸入為4位,輸出為16位?這與#0(第3個操作數、控制字的取值)有關。
圖1-69所示為DMPX指令控制字的含義及應用實例。這里C有4個數位,其中數位0(n)指的是“源”字(S)中那個數位用作輸出,數位1(l)指的是有多少數位用作輸出。自然,輸出數位多,輸入也多(4對16)。
由圖1-69可知,這里n=2,l=1(0時用一個數位,1用2個,余類推)。所以,如S中第m位ON,則R的數位2的值為m,如S+1中第p位ON,則R的數位3的值為p。
控制字C的數位2,可為0,也可為1(老機型無此功能)。如為0,若S、S+1有多位ON,以最左(高)位ON為準。如為1,若S、S+1有多位ON,以最右(低)位ON為準。
控制字C的數位3、這里默認為0。如數位3取值為1,將進行256到8的譯碼。256為16個字組成的256個位。8為8個字節為一組,每組兩數位十六進制數,其值變化范圍為00~FF,正好對應于256位的00~255位。256到8譯碼,本質上與16到4是相同的,只是它的通道長(位數)不是16,而是256,位(號),不是0~F,而是兩位十六進制數00~FF。但256到8最多只能進行兩組,不像16到4可進行4組譯碼。
圖1-70所示為DMPX指令256到8應用實例。
譯碼指令,除了以上,還有7段譯碼指令:可把BCD碼譯成7段碼,用于數字顯示。
圖1-69 DMPX指令控制字的含義及應用實例
圖1-70 DMPX指令256到8應用實例
ASCII碼轉換指令:把十六進制數譯成ASCII碼。
十六進制譯碼指令:把ASCII碼譯成十六進制碼。
……
譯碼指令是很有用的。在數據處理時,要用到它,而且常用到它。當然,以上講的也還不是譯碼指令的全部,也不是所有PLC都有以上講的這些譯碼指令。具體使用此類指令,也可能還有一些細節,使用時可參閱有關幫助。
(5)數字運算指令。最常用的為一個字的BCD碼(僅歐姆龍PLC)或十六進制數的+、-、×、\指令。還有雙字(8位BCD碼)或十六進制+、-、×、\指令。性能稍高的PLC,還有浮點數的+、-、×、\指令。
此外,多都還有加1、減1(歐姆龍為BCD碼,而西門子、三菱為十六進制碼)及進位位置位、復位指令。
為了適應在數據處理的需要,有的PLC還有在一組數中求最小值MIN,在一組數中求最大值MAX,求一組數的平均值AVG,求一組數的總和SUM等指令。
有的PLC還有三角函數,對數、指數,數值插值運算等指令。
隨著PLC技術的發展,以及滿足模擬量控制、脈沖量控制及通信的需要,運算指令越來越多,功能也越來越強。有的PLC可以進行PID運算,以適應比例、積分、微分的要求;可進行校驗和運算,以適應通信數據校驗的需要。
此外,還有種種邏輯運算指令。如“字與”、“字或”、“字異或”及“字同或”等指令。
……
提示:歐姆龍PLC進行BCD碼加減運算時,進位位(CY)也是其運算成員。它既是運算原始數據(1或0)之一,又要存放運算結果(有進位或借位時置1,否則置0)。如加運算是Au(被加數)+Ad(加數)+CY→CY,R(結果)。如減運算是Mi(被減數)-Su(減數)-CY→CY,R。但其新型機,也有不像上述那樣,包含進位位的BCD碼加、減指令。
提示:西門子PLC除了用字、雙字運算,還可用字節運算。西門子、三菱PLC所有整數運算都是帶符號十六進制碼,如單字,其值在-32718~32717之間變化。
提示:歐姆龍、三菱PLC整數單字乘,其積要占兩個字;雙字乘,要占4個字。整數單字除,其商占一個字(存于指定結果字的地址中),其余數占一個字(存于指定結果字地址+1的地址中);雙字除,其“商”占2個字(存于指定結果字的地址及其加1的地址中),其“余數”占2個字(存于指定結果字地址+2及加3的地址中)。而西門子PLC通用的乘、除指令,其運算的積、商所占的字長,如同計算機,與參加運算的數相同。當其乘積(及加運算的和、減運算的差)超過相應字長,則出錯,不能進行運算。數運算,不記錄余數,除0也出錯。但它也有帶有記錄余數的除指令(DIV)。這指令的目的操作數的長度則是參加運算數長度的2倍。
提示:為了正確使用運算指令,要使用好運算標志位,如進位位、溢出位、出錯位、結果為0位等,以判斷計算的正確性。對西門子PLC,還可利用執行指令后的ENO輸出,觀察運算是否執行。只是在各廠商、各型別的PLC間,這些標志位的含義多不大相同,如三菱FX機的借位標志(M8021),不是被減數比減數小ON,而是減的結果比-32768還要小才ON。
提示:同樣是專用計算指令,如三角函數,各家PLC對其處理是不同的。如sin函數,當自變量大于360°(2π)時,FX2N機均按360°(2π)處理,而S7-200則與普通處理相同。所以,對一些運算指令,不妨先做些測試,然后再使用。
2.流程控制指令
PLC執行指令,一般總是從零地址開始執行,依次進行,直到最后一個指令為止。而且這個程序總是周而復始不斷地重復著。但為了簡化編程或減少掃描時間,或實現特殊控制,常常要改變程序的這個流程。
為此,PLC都設有控制程序流程的指令。主要有跳轉、步進、循環、使用子程序及中斷。
(1)跳轉指令。歐姆龍機用的為JMP及JME。這兩條配對使用。
JMP指令執行前,要建立邏輯條件。JME不要條件,只是表示跳轉結束。要跳轉的程序列于這兩個指令之間。
當執行JMP時,若其邏輯條件為ON,則不跳轉(注意:它與計算機匯編語言跳轉含義相反),照樣執行JMP與JME間的指令,如同JMP、JME不存在一樣;若為OFF,則JMP與JME間的程序不執行,有關輸出保持不變。JMP、JME可嵌套使用,但有時其層次要受限制的。JMP、JME編號使用時,配對的兩個,編號要一致。
三菱與西門子PLC的跳轉類似計算機匯編語言的跳轉,若其邏輯條件為ON,則跳轉到指定的標號的語句去執行。這種跳轉情況稍復雜一些,使用時要小心。弄不好,易出現程序死循環。那是絕對不允許的。
圖1-71所示為跳轉指令使用示意。
圖1-71 PLC的跳轉指令使用示意
圖1-71a為歐姆龍PLC的跳轉,0.00 OFF時,JMP到JME之間的指令跳過,不執行。反之,執行。圖1-71b為西門子的跳轉,V500.1 ON時,跳轉到LBL2處,被跳過的指令不執行。反之不跳,JMP后的指令依次執行。圖1-71c為三菱的跳轉,X000 ON時,跳轉到標號P1處,被跳過的指令不執行。反之不跳,CJP后的指令依次執行。
不同廠商PLC跳轉指令的差別,正如其他指令的差別一樣,都只是大同小異。目的都是跳轉,只是表達的方法各有其不同而已。
GE PLC也有跳轉指令。執行時在JUMP和LABLE之間的程序被忽略,不執行;其中間的子程序不被調用;其中間的計時器當前值被保持;其中間程序的執行結果保持上一次的執行結果。注意的是JUMP和LABLE的名字必須一致;任意幾個JUMP和LABLE之間不能交叉使用;JUMP和LABLE可以嵌套使用,其嵌套深度由CPU的類型決定。
當程序需要分支執行時,使用到跳轉,不僅可實現編程要求,而且還可減少程序掃描時間,提高程序的運行效率。
與跳轉類似的還有互鎖、主控指令。歐姆龍PLC稱互鎖IL、互鎖清除ILC指令。這兩個指令在形式上,與跳轉指令類似,也是要配對使用。但功能不同,它不改變程序流程,只是像電路的“總開關”一樣,影響IL與ILC間的程序執行,如圖1-72所示。
圖1-72中“正常執行”意指,“總開關”合上,不影響IL與ILC間的程序執行。“輸出互鎖”意指,“總開關”斷開,IL與ILC間的程序執行條件全為OFF,即其間的輸出全被互鎖住。IL與ILC可嵌套使用。
圖1-72 互鎖和互鎖清除指令示意圖
圖1-73 所示為主控指令及其使用。
圖1-73a、b所示為三菱PLC的主控指令及其使用。圖1-73a為處于寫狀態時的梯形圖。其中MC及MCR之間的指令執行,受執行條件X000(可以是別的)控制。X000 ON,則M0 ON,之間的指令正常執行。否則,輸出互鎖。圖1-73b所示為處于讀狀態時的梯形圖。這里“總開關”的作用顯示得很形象。指令中的N0為配對主控指令使用的編號。當然,MC與MCR的編號要一致。MC與MCR也可嵌套使用。
該圖1-73c所示為西門子S7300、400的主控指令。MCRA(主控指令激活)及MCRD(主控指令激活停止)是配對的,只有在主控指令激活區中主控指令才有效。MCR<(主控繼電器ON)及MCR>(主控繼電器OFF)也是配對使用,而且也可嵌套。圖1-73c為2層。
圖1-73 主控指令及其使用
這里的幾個主控指令的作用如本例是:當I0.0及I0.1 ON,則Q4.0及Q4.1的狀態分別取決于I0.3、I0.4,如同這里不存在這幾個主控指令一樣;當I0.0 ON及I0.1 OFF,則Q4.1的狀態取決于I0.4,如同這里不存在這第1層的MCR<、MCR>一樣,而Q4.0則必OFF,不管I0.3的狀態如何;當I0.0 OFF,則Q4.0、Q4.1的均OFF,不管I0.3、I0.4及I0.1的狀態如何。要說這里的特別之處是在MCR<之前,須先執行MCRA,而在MCR>之后,要執行MCRD。
GE PLC也有類似指令。它稱之謂分支指令(MCR、ENDMCR)。執行MCR指令邏輯條件不具備,則:MCR和END_MCR之間的程序被忽略,不執行;其中間的子程序不被調用;其中間計時器當前值被清;其中間所用的常開線圈被復位。而使用時要注意的是,MCR和END_MCR要指明名字,而且者兩名字必須一致;任意幾個MCR和END_MCR之間不能交叉使用;MCR和END_MCR可以嵌套使用,其嵌套深度由CPU的類型決定。
(2)步進指令。工作設備工作,或一些工藝過程往往分成步,按步進行。一個步完成了,再轉入另一個步。可以有很多步。步,可以按順序工作,也可依條件產生分支,改變順序。需要時,還可多步并行工作……
為此,PLC多設有步進指令。步進指令有步程序入口、步(進)程序結束、步程序調用(激活)等。表1-12為這三家PLC的步進指令。
表1-12 PLC的步進指令
步進指令的要點是:
1)只有已激活的步的程序才被掃描,才被執行;
2)在已激活步中,如激活了后續步,則自然處于非激活狀態;
3)在程序中,可任意把某步激活;
4)當某步激活后,原來激活它的條件變化,不再對其產生影響。
步進程序可以順序地被調用,直至最后一步。也可以分支調用,依條件按不同的分支進行。也可以平行調用,條件具備時,可同時調兩個步程序,然后再依各的情況再一步步推進,直到退出步進程序,返回主程序。
圖1-74所示為三家PLC用于步進指令及其使用例子。
圖1-74 步進指令及其使用例子
圖1-74a為歐姆龍PLC步進指令及其使用。它用W0.00等(內部工作區)作為步標識。當0.00 ON,步W0.00被激活,A段程序(在虛線處,程序未畫出,下同)被掃描、被執行。這時,如0.01 ON,則W0.01步激活,并退出W0.00步,B段程序被掃描、被執行。這時,如0.2ON,則W100.00步激活,并退出W0.01步。但如程序中無此步,則意味著退出步進程序。OM-RON無步及整個步進程序結束指令。
提示:歐姆龍PLC用的標識B可以是任何繼電器。而其他兩家PLC的標識B只能是狀態繼電器S。
提示:歐姆龍PLC所有步進指令應放在其他主程序之后,子程序(見后)之前。如果主程序放在它之后,那這部分主程序將不執行;如把它放在子程序之后,那它也將不執行。
圖1-74b為西門子PLC步進指令及其使用。它用S0.0等作為步標識。當I0.0 ON,步S0.0被激活,A段程序被掃描、被執行。這時,如I0.1 ON,則S0.1步激活,并退出S0.0步,B段程序被掃描、被執行。這時,如I0.2 ON,則S0.1復位,退出W0.1步。圖1-74b每步程序都有結束指令(SCRE)。
圖1-74c為三菱PLC步進指令及其使用。它用S0等作為步標識。當X000 ON,步S0被激活,A段程序被掃描、被執行。這時,如X 001 ON,則S1步激活,并退出S0步,B段程序被掃描、被執行。這時,如X002 ON,則S1復位,退出S1步。圖1-74c中RET指令代表步進程序結束。
提示:歐姆龍PLC調新步時,舊的步先OFF,然后,新的步才ON。即新的與舊的步從不同時工作。而三菱PLC、西門子PLC,則是新的步先ON后,舊的步才OFF,即新、舊的步將同時ON一個掃描周期。
提示:三菱PLC步進程序,還可用SFC語言編程。
(3)循環指令
它由FOR和NEXT兩條指令組成,配對使用。FOR為循環開始,而NEXT為循環結束。其功能是,使這兩條指令間的指令,按指定的次數,重復執行。重復多少次,則在FOR指令中指明。
FOR-NEXT循環可嵌套,但層數是有限制的。其限制的約定,隨PLC型別而定。圖1-75所示為三家PLC用于兩層嵌套的使用例子。
圖1-75 FOR-NEXT指令及其嵌套使用
從圖1-75可知,這里外層都是重復執行3次,而內層2,則執行2次。程序段A,B和C都是如下執行:A→B→B→C,A→B→B→C,A→B→B→C。
執行循環程序時,如需要臨時退出,對歐姆龍PLC可在需退出處,用BREAK指令。若要從嵌套循環中退出,則需要多個(嵌套層數)BREAK指令。而西門子、三菱PLC則可用跳轉指令,指定跳到循環外的某標號處。西門子還可用INDX值處理。每當執行一次循環,INDX值將加1。當它大于、等于FINAL值時,也可退出循環。此外,它的FOR指令還要求先設置邏輯條件,如圖1-75b所示,I2.0 ON(對1)及I2.1ON(對2)即為它們的邏輯條件。
(4)子程序
在程序中,常有一些要重復使用的一組組指令,用以實現某些特定的功能。若把一組組指令編成子程序,則可大大簡化編程。使用子程序還便于程序的閱讀及修改。
子程序指令總是含子程序入口、子程序結束標志及子程序調用等指令。表1-13所示為三家PLC用的子程序指令。表中N為子程序標號。
表1-13 PLC子程序指令
子程序指令的要點是:
1)子程序入口到子程序結束指令間的程序為子程序;
2)在一個程序中,可以有多個子程序,用標號N相區別;
3)不是子程序的其他程序為主程序;
4)西門子PLC的子程序安排在不同標號的單獨程序模塊中,因此,它無入口指令,也無需結束指令;
5)OMRON、三菱PLC子程序安排在主程序之后END指令之前,但三菱PLC的主程序之后,要加主程序結束指令(FEND),子程序則放在FEND指令之后;
6)在主程序中,可用相應指令調用子程序,被調用一次,則被掃描、被執行一次,可多次使用;
7)在子程序中,也可用相應指令調用其他子程序,但不能調自身,即可嵌套,但不能遞歸。調的層數也是受限制的,其限制的約定,隨PLC型別而定;
8)子程序一旦調用,總是從入口直到結束。但西門子可用RET指令,于中途退出,而其他兩家PLC則可用跳轉指令中途退出。
圖1-76所示為三家PLC子程序指令及其使用。
從圖1-76可知,當調用子程序邏輯條件成立(如圖中0.00、I0.0、X000 ON),則都將轉去執行子程序,執行后,再接著執行主程序的后續部分。如圖中0.02 OFF及I0.2、X002 ON,則在子程序中,執行A部分程序后,中途退出;否則,執行A、B兩部分程序都執行完,才退出。
提示:所有的子程序都要安排在主程序的后面,在END指令之前。不然,子程序后的主程序指令將不被執行。
對一些多任務編程的PLC,其子程序還有全局與局部之分。局部子程序只能用于本任務。要想所有任務都能調用,要用全局子程序。
如歐姆龍CJ系列PLC,全局子程序指GSBN(751)和GRET(752)之間的程序段。調用指定編號的全局子程序,要用全局子程序調用指令GSBS(750)。
三菱Q系列等中、大型機除了用CALL正常調用子程序。還有FCALL(輸出OFF調用)、ECALL(程序文件之間子程序調用)、XCALL等指令。
圖1-76 子程序指令及其使用
提示:西門子S7-200機的子程序可帶參數。參數用子程序的局部變量自行定義。參數有子程序輸入(IN)、輸出(OUT)及輸入、輸出(IN-OUT)兼而有之,三種。在調子程序時,輸入參數要寫在輸入端;輸出參數要寫在輸出端;輸入、輸出參數既要寫在輸入端,又要寫在輸出端。當然,如不定義局部變量,將不帶參數。具體運用實例見本書第2章第2.6.2節。
提示:歐姆龍、三菱小型機的子程序不帶參數。但在調用前可作預處理,調后再作后處理,也可起到帶參數的作用。歐姆龍PLC還有宏調用,類似于帶參數子程序。只是它的參數使用限制較多。
提示:三菱Q系列等中、大型機的子程序也可帶參數。但位參數只有輸入、輸出。并要用專用內部器件,即功能軟元件FX(入)、FY(出)、FD(寄存器)作形式參數。同時也有宏。宏的形式參數也要用專用內部器件(VX、VY、VD)。
(5)中斷
中斷也是調子程序,但它不是靠指令調,而是靠中斷事件調。且調的子程序編號與所發生的事情對應。這些子程序有時還稱為中斷服務程序。
PLC中斷事件可以來自外部,也可來自內部。前者稱外中斷,后者稱內中斷。
外部中斷用輸入點。當可中斷工作(取決于機型及設定)的輸入點,從OFF到ON的時,則發生與其對應的中斷事件,并調相應的中斷服務程序。每發生一次中斷事件,則調一次中斷服務程序。有了這樣中斷,可縮短PLC對輸入信號的響應時間。
此外,高速計數信號輸入,也會產生多種中斷。如計數中斷,可輸入高速脈沖的輸入點(取決于機型及設定),輸入高速脈沖會自動中斷計數;再如比較中斷,中斷計數后,會自動進行中斷比較;最后,還可根據中斷比較結果,調用相應的中斷子程序。
再,有的PLC,如西門子S7-200系列,還有通信中斷。收到字符,或發送字符及出錯等,都會引起相應的中斷。
內部中斷的事件來自PLC內部。典型的內部中斷為定時中斷,經設定可準確定時運行相應的中斷程序。
為了處理好中斷,提高程序的控制可靠性與效率,PLC提供了有關的中斷處理指令。表1-14所示為三家PLC的一些有關的中斷指令。
表1-14 PLC的一些有關的中斷指令
注:?僅用于小型機定時中斷;??中斷事件與子程序的關系是確定的。
中斷允許、禁止指令用于確定,在運行程序時,是否允許中斷。當程序的某一部分不允許中斷時,可用中斷禁止指令;某一部分允許中斷時,可用中斷允許指令。
提示:歐姆龍PLC默認為中斷允許。而三菱、西門子PLC則默認中斷不允許。為此,后者,要使用中斷,需先允許中斷,而前者,做好有關設定就可以了。
設定中斷屏蔽是為了確定是否允許某個內、外中斷事件產生。如可外中斷的輸入點,可設定其為從OFF到ON產生中斷,也可相反,也可不讓其產生中斷。
提示:中斷允許與中斷屏蔽是兩個概念,前者是指,所運行的程序是否允許接受中斷,后者是指,是否允許中斷事件出現后產生中斷。前者可用指令處理,而后者多為通過相關設定處理。
PLC處理中斷事件是有個過程的。當發生中斷事件時,PLC總是先記錄發生的事件,并對其按優先級對其排隊。優先級高的先執行,它執行完了,再執行優先級低的。所有中斷任務處理完了,再轉回執行正常的循環程序。一般講,優先級與中斷的任務號是對應的。中斷編號越小,優先級越高。
要注意的是,已記錄但未執行的中斷,其后又發生相同的事件,PLC對此將不理睬。所以,不是發生的所有中斷事件都會處理的。另外,對已作記錄,但未執行的外中斷任務,可用CLI指令取消。
提示:三菱中斷子程序入口編號開始字符為I(不同的事件,有不同的編號),而不是P;子程序結束指令為IRET,而不是SRET。
提示:對多任務編程或模塊化組織的PLC,它不調子程序,而是調用POU。
如果在一個I/O中斷任務正在執行時,接收到一個不同的中斷輸入,輸入的中斷號在內部被記錄,直至當前任務和其他較高優先級別的任務執行完畢。
以上只是對有關PLC的有關指令系統作些簡要介紹。只是希望讀者能從總體上,或從功能上理解它。至于指令的細節,請參閱有關說明書。
提示:弄通PLC指令,除了仔細閱讀有關說明書,最好的方法是對指令作模擬或聯機實際測試。在實際測試中理解要點與細節。
1.4.4 功能、功能塊
1.概述
PLC系統提供的功能與功能塊也是PLC指令系統的重要組成部分。目前的趨勢是指PLC指令在減少,但代替它以至于比它功能更強的功能與功能塊越來越多。
傳統PLC也有功能、功能塊。如西門子S7-300、400的FB41(CONT_C)、FB42(CONT_S)、FB43(PULSEGEN)功能塊(FB),可很方便地用以實現模擬量的PID控制。這些功能塊將在隨后的有關編程介紹中再作說明。
再如歐姆龍新型PLC也新增系統功能塊,在安裝編程軟件后,會自動加載到歐姆龍軟件目錄下的“Lib\FBL\omronlib”子文件夾中。而該文件夾下還有“PLC”、“Inverter”、“Position Con-troller”、“Temperature Controller”等若干子文件夾。這些子文件夾還含有多個子文件夾。如“PLC”文件夾下,就有“ENT”、“CLK”、“CPU”、“SCx”、“UNIT”、“CARD”等文件夾。在這些文件夾中,就有cxf文件。將這些文件加載到工程中,分別就會生成一個功能塊,就可在工程程序中調用。
調用功能塊與調用定時器之類指令基本一樣,但要指定實例名。同時,還要對功能塊的輸入賦值,輸出指定目標地址。
例如“PLC\CPU”文件夾中的CPU005_TOF_BCD.cxf文件,加載后生成的系統功能塊是CPU005_TOF_BCD,其功能是實現輸入從ON到OFF時輸出OFF的延時。實際是OFF延時定時器。歐姆龍PLC原來只有ON延時定時器,有了此功能塊也就有了OFF延時定時器了。圖1-77所示為此功能塊一個調用實例。
在該圖程序中,“p_On”為常ON觸點,以功能塊使能“EN”ON,表示此功能塊一直在調用。“tof1”為此功能塊的實例名。功能塊輸入“IN”由“I:0.00”賦值,“I:0.00”ON,則“IN”ON,“I:0.00”OFF,則“IN”OFF。功能塊輸入“PT”,即定時設定值,為BCD碼,單位為100ms。在此賦值為常數50,即設定延時5s。功能塊輸出“ENO”指定的目標地址為“10.00”。功能塊延時OFF就是由它實現。功能塊輸出“ET”,即延時現值,指定的目標地址為“D0”,也為BCD碼,單位也為100ms。
圖1-77 OFF延時功能塊一個調用實例
由此功能塊的功能可知,執行此程序:“I:0.00”ON,“10.00”即時ON;“I:0.00”OFF,“10.00”延時5s后OFF。延時過程值將顯示在“D0”中。
其他系統功能塊各有各的功能,在此不再贅述。
可知,系統功能塊實際上也是PLC指令,而且是功能更強的指令。新增功能塊可方便地擴展PLC的指令系統,增加PLC的功能,使系統升級。而且系統功能塊是按需加載。不用的不加載,不占PLC內存。
提示:西門子PLC系統功能塊多為不可視的。國產PLC,LM及LK機的系統功能塊多是可視,又可復制。歐姆龍系統功能塊可視,但不能復制。
2.有關PLC定時功能塊
新型PLC多不用定時指令而用定時功能塊。類型很多。其中TON(其常開觸點延時通、即時斷),用以進行定時或時間控制,較為常用。圖1-78所示為AB等多家PLC定時功能塊梯形圖符號。
圖中,T1為該功能塊的實例名,是結構變量。使用前要先定義,要占用PLC數據區。該結構有多個分量,如圖所示。IN(或僅有輸入線)為輸入控制,為布爾量。它ON時,定時功能塊工作,OFF,停止工作。PT(或Pre-set、PV)為時間設定值輸入端。設定值用時間類型變量或時間類型常數。設定時間的最小分辨率為毫秒(GE PLC可以為秒、十分之一秒、毫秒或其他,由選用功能塊決定)。Q(或DN、輸出線)為控制輸出,布爾量。定時功能塊計時的時間達到或超過設定時間,則產生這個輸出。它的常開觸點(T1.Q)ON、常閉觸點OFF。ET(或Accum、CV)為定時功能塊計時所經歷的時間。數據也是時間類型。IN ON開始經歷時間顯示。到設定時間值時,顯示設定時間值。INOFF或T1.R(復位端)ON,則恢復0,并停止輸出。
從上介紹可知,這樣的定時功能塊,其功能與延時定時器指令完全相同。所差的只是這里操作數為實例名,數據類型為結構,使用的數量幾乎不受限制;而定時指令的操作數是定時器這樣內部器件,使用的數量受PLC擁有的定時器數量限制。
圖1-78 有關PLC定時功能塊
3.有關PLC計數功能塊
有增計數、減計數及可逆計數等功能塊。以下僅對最為常用增計數功能塊做簡要介紹。其格式如圖1-79所示。
這里C1為該功能塊的實例名,是結構變量。使用前要先定義,要占用PLC數據區。該結構
圖1-79 多種PLC增計數功能塊
有多個分量,如該圖所示。CU(圖1-79a為Count up)為增計數輸入端。R或RESET為復位端(AB計數器復位要用復位(R)指令)。PV或Preset設定(預置)值輸入端。Q輸出端。CV計數功能塊計數現值。
如圖,每當CU(或Count up)端從OFF到ON一次,C1作增1計數。當計到設定值,如圖為10,或大于設定值,則輸出端Q(或DN)ON。且繼續計數,直到最大值(此值可選,單字、雙字還可考慮符號位)。而當RESET ON,計數功能塊復位(現值變為0),停止計數,輸出OFF。
圖中EN、ENO及圖1-79a的CU為附加的。但只有EN處于ON狀態,才可計數。而且只要計數正常ENO則ON。
從上介紹可知,這樣的計數功能塊,其功能與增計數器指令完全相同。所差的只是這里操作數為實例名,數據類型為結構,使用的數量幾乎不受限制;而增計數指令的操作數是計數器這樣內部器件,使用的數量受PLC擁有的計數器數量限制。
4.其他功能及功能塊
除了上述定時、計數功能塊,還有其他功能更強的功能塊。這些功能塊都封裝在有關庫中。如施耐德PLC就有:標準庫、控制庫、通信庫、I/O管理庫、運動庫、系統庫、診斷庫、先期庫、TCP Open庫及運動功能塊等。至于庫中都有哪些功能塊則與具體選用的PLC有關。
AB PLC的庫也封裝在它的編程軟件中。以系統預定義的數據類型形式調用。
和利時LEC G3機的功能或功能塊也稱擴展指令。也是封裝在相應指令庫中。如果使用封裝在Standard.lib(標準庫)和SYSLIBCALLBACK.lib(系統庫)中的擴展指令,直接調用就可以了。因為在創建工程時,這兩個庫中所有指令會自動加載到編程系統中。對封裝在其他庫中的擴展指令,在調用前,需用PowerPro編程軟件的庫管理器先行加載。然后才可使用。
和利時LEC G3機的指令庫很多,而且是開放的,可以不斷添加和生成新的指令(即函數、功能塊)。因而,從某種意義上講,它的指令數量及種類是無限多的,并可根據需要增減。
具體講它的指令庫可分為三類。
第一類:PowerPro內部開放指令庫。指令執行代碼存在于庫文件之中,可以使用PowerPro軟件打開庫文件,可對指令的執行代碼進行修改。用戶也可以自己開發新的指令,存放在內部開放指令庫中。當程序下裝到PLC之中,占用用戶程序空間較大。
第二類:PowerPro內部不開放指令庫。指令執行代碼存在于“庫名 .hex”文件之中,用戶無法使用PowerPro軟件打開庫文件,不能對指令的執行代碼進行修改。使用時應保證hex文件的文件名與lib文件的文件名一致,且存在于同一目錄下。當程序下裝到PLC之中,占用用戶程序空間較大。
第三類:PowerPro外部指令庫。指令執行代碼已經存在于PLC底層系統之中,用戶無法修改此類庫所包含的執行代碼。當程序下裝到PLC之中,占用用戶程序空間較少。
分清這三類指令庫,將有助于讀者對LEC G3 PLC指令系統的理解,進而更好地使用LEC G3PLC機指令資源。
LEC G3 PLC指令庫一經添加,即使不調用其中的指令,也會占用用戶程序空間,因此在實際編程過程中,建議只添加需要的庫。
已加載的庫文件也可用庫管理器予以去除。
“庫管理器”是它的編程軟件的一部分。其窗口如圖1-80所示。在PowerPro的主菜單“窗口”下的“庫管理器”項,或在“對象組織器”選定“資源”,再單擊其上的“庫管理器”,即可彈出。這時,再單擊插入主菜單項,將彈出“打開”對話框。
從圖1-80可選擇擴展名為“Lib”的庫文件,加載到所用編程軟件的平臺中。如圖1-80所示,若單擊“打開”,則把Iecsfc庫文件加載。卸載,可在窗口的左上方選定要卸載的文件,再按鍵盤的“delete”鍵,待彈出對話框,再單擊“是”即可。
圖1-80 庫管理器窗口