- PLC編程實用指南(第2版)
- 宋伯生
- 15975字
- 2020-11-27 16:01:38
1.3 PLC程序數(shù)據(jù)
關(guān)鍵詞:地址、位、數(shù)位、字節(jié)、字、通道、雙字、入出軟器件、內(nèi)部軟器件、變量、局部
變量、全局變量、數(shù)據(jù)類型、自定義數(shù)據(jù)類型、數(shù)組、結(jié)構(gòu)、指針、常量數(shù)據(jù)是PLC處理信息的載體,是PLC POU即程序組織單元(Program Organization Unit)的重要組
成部分。可以這么說,沒有數(shù)據(jù)也就沒有PLC的程序。PLC程序數(shù)據(jù)有地址、變量、常量及其他。
1.3.1 地址
這里講的地址是指PLC軟器件。是PLC操作系統(tǒng)劃分與管理的內(nèi)存區(qū)。用于存儲PLC程序數(shù)據(jù)。并使用與電器相關(guān)的含義命名,如某某繼電器、某某定時器、某某計數(shù)器、某某數(shù)據(jù)存儲器等。其實,這些都只是內(nèi)存區(qū)中的一個位、字節(jié)或字。這些位、字節(jié)、字的值,即代表著這些器件的狀態(tài)。也正是在物理上,這些器件只是內(nèi)存區(qū)的位、字節(jié)、字或位,所以,才稱之為軟器件。
PLC軟器件分為I/O軟器件與內(nèi)部軟器件。
PLC I/O軟器件也可稱映射器件,是內(nèi)存區(qū)中與輸入、輸出等種種模塊相映射的區(qū)域。與輸入點對應(yīng)的稱輸入繼電器,或稱輸入映射區(qū)。與輸出點對應(yīng)的稱輸出繼電器,或稱輸出映射區(qū)。如用有模擬量模塊或其他智能模塊,則還包括與其有關(guān)的數(shù)據(jù)映射區(qū)。如PLC聯(lián)網(wǎng),則還含有與聯(lián)網(wǎng)模塊有關(guān)的數(shù)據(jù)緩沖區(qū)。
內(nèi)部軟器件用于存儲運行程序的中間結(jié)果。一般講,內(nèi)部器件與硬件沒有映射關(guān)系。但是,如果PLC用到特殊功能的單元時,有可能要分配一些內(nèi)部器件作為與CPU交換數(shù)據(jù)的緩沖區(qū)及工作狀態(tài)的記錄。內(nèi)部器件有內(nèi)部輔助繼電器、特殊繼電器、計數(shù)器、計時器、數(shù)據(jù)存儲器、暫存器等。當(dāng)然,不同的PLC,這些類型、名稱也不可能完全相同。
軟器件的類型及數(shù)量,反映了PLC的控制能力,是PLC性能的重要方面。越是性能好的PLC,越是新型的PLC,其類型也越多,數(shù)量也越大。不過,由于新型PLC已與計算機一樣,也可在內(nèi)存區(qū)中自定義程序變量。因而,這里講的軟器件的類型及數(shù)量多少已無關(guān)緊要。只要這個可定義變量的內(nèi)存區(qū)足夠大,可定義的變量類型足夠多,其控制能力自然也就強了。
PLC技術(shù)的發(fā)展,其軟器件的類型及數(shù)量,特別是內(nèi)部器件現(xiàn)已大為增加。所以,不少PLC多已不用繼電器(RELAY)稱謂它了。而改稱它為區(qū)(AREA)。突出了PLC信息處理的功能。
要指出的是,這些軟器件在內(nèi)存中確都有其實際地址。但對多數(shù)PLC可不必去具體了解。只是個別PLC,如西門子S7200型PLC,對軟器件進(jìn)行間接地訪問時,則先要知道它在內(nèi)存中的實際地址,然后才可進(jìn)行訪問。對此,還將在隨后介紹間接地址時有所說明。
1.I/O軟器件
(1)開關(guān)量用的輸入、輸出繼電器。開關(guān)量用的輸入、輸出繼電器是指,可與實際開關(guān)量輸入、輸出模塊上的點相對應(yīng)的那部分內(nèi)存區(qū)。它決定了PLC可能配置的最多I/O(開關(guān)量)點數(shù)。西門子PLC稱之為過程映射寄存器(process-image register),指的也是與輸入、輸出點有對應(yīng)關(guān)系的內(nèi)存區(qū)。
輸入繼電器與輸入點對應(yīng)。一般講當(dāng)PLC輸入刷新時,輸入暫存器的狀態(tài)即映像到輸入繼電器中。輸入繼電器為只讀存儲器,不能用程序改變它的內(nèi)容,而只能被輸入點的狀態(tài)所映像。所以無輸入點與其對應(yīng)的,如其地址是固定編排時,一般不能作為他用。
輸出繼電器與輸出點對應(yīng)。一般講當(dāng)PLC輸出刷新時,輸出繼電器的狀態(tài)被映像到輸出內(nèi)部電路的鎖存器。鎖存器保持狀態(tài),直到下一個刷新的到來。鎖存器再經(jīng)輸出電路傳遞,即成為輸出點上的輸出。輸出繼電器是可寫的,以便產(chǎn)生所要求的輸出;也還是可讀的,以用于反饋控制。對用戶程序,它是可讀可寫的存儲單元。所以,若無輸出點與其對應(yīng)的也可另作他用。
這里的點是指二進(jìn)制數(shù)的一個位,僅1、0兩個取值。用它代表開關(guān)觸點,或繼電器的觸點及線圈。1代表有關(guān)開關(guān)觸點通(ON)或有關(guān)繼電器線圈得電(工作、ON)。0代表這個觸點斷,或這繼電器線圈失電(不工作、OFF)。
繼電器的觸點有常開的,它的線圈不工作(或說失電)時,它斷、OFF;它的線圈工作(或說得電)時,它通、ON。還有常閉的,它的線圈ON,它OFF;它的線圈OFF,它ON。只是這里繼電器既無實際的線圈,又無實際的觸點。這里講的線圈、觸點,都只是內(nèi)存單元的一個位。但在性能上可認(rèn)為:線圈得電,為用1寫了這個單元;線圈失電,為用0寫了這個單元。用其常開觸點,指直接用它的值;用其常閉觸點,指用它取反后的值。這樣的繼電器也稱軟繼電器。顯然,其觸點的使用次數(shù)是不受限制的,其線圈被改寫的次數(shù)也是不受限制的。這也是它比實際繼電器好用的重要之點。
要使用這些“點”,必須弄清它是怎么編址的?這個編址,各PLC廠商多不盡相同。這也是PLC使用的一個難點。
歐姆龍PLC編址是按字、位計算,先指定字(有時也稱通道,channel,但施耐德PLC則把這里的位稱通道)地址,再指定在字中的位地址,如圖1-15a所示。
如地址為0001.03,則表示為0001通道(字)的03位,如圖1-15所示。
西門子PLC編址是按字節(jié)、位計算,先指定字節(jié)地址,再指定在字節(jié)中的位地址,如圖1-16所示。
圖1-15 歐姆龍PLC地址含義
1—字或通道地址 2—位地址(00到15) 3—通道地址 4—位地址0001.03
如圖所示,這里地址是I3.4,其含義是輸入點(I為輸入點編址的前綴),3為字節(jié)地址,4為字節(jié)3中的第4位。如果為輸出點,則所加的前綴為“Q”。
三菱PLC的輸入(前綴加X)、輸出點(前綴加Y)是以位編址,如圖1-17所示。都是從0到可能的最大地址。并按八(對小型機)或十六(對中、大型機)進(jìn)制進(jìn)位。但沒有字或字節(jié)地址。當(dāng)多位使用時,則應(yīng)在其前,加上使用多少位的指定。如K1X0,指的是X0~X4,4個位。再如K2X0,指的是X0~X7,8個位。其余類推。這樣,如按字節(jié)、字使用時,雖較麻煩,但也有其靈活性??墒惯@些點的使用,不受字節(jié)、字的局限。
圖1-16 西門子PLC地址含義
圖1-17 三菱PLC位元件多位使用時的指定
西門子PLC用字節(jié)、位編址,要用字節(jié),則前綴加QB,要用字,則前綴加QW。要用雙字,則前綴加QD。但編號仍按字節(jié)計。如用QW0,則含有QB0、QB1;用QW2則含QB2、QB3;如用雙字時QD0,則含有QB0、QB1、QB2、QB3??芍?,如用了QW0,不能再用QW1,否則,QB1地址將重復(fù)使用。
和利時PLC開關(guān)量I/O軟器件地址格式為:先是百分號(%,施耐德等PLC也如此),接著加地址類型標(biāo)識(輸入為I、輸出為Q、中間存儲區(qū)為M),最后為地址編號。地址編號先是位(通道)、字節(jié)、字、雙字標(biāo)志,然后加數(shù)碼號。這里位標(biāo)志為X,字節(jié)標(biāo)志為B,字標(biāo)志為W;雙字標(biāo)志為D。當(dāng)使用“位”地址時,則首先要指定其所在的字節(jié)地址,然后再指出其在字節(jié)中的位地址。具體方法是用小數(shù)表示,整數(shù)部分標(biāo)出是哪個字節(jié),小數(shù)部分標(biāo)出是哪個“位”。如圖1-18所示。
圖1-18 和利時PLC地址編號
如圖所示,%IX3.4指的是輸入第3字節(jié)的第4位。
使用PLC,一定要了解輸入、輸出繼電器的情況。要清楚,它有多少輸入輸出繼電器,怎么編號,與輸入、輸出點的物理位置怎么對應(yīng)的(在模塊上有相應(yīng)標(biāo)號)等,否則無法編程,也無法接線。
輸入、輸出點的地址編號,有三種辦法:
一是點地址固定。這用于箱體式PLC。其主箱體、擴展箱體連接好后,其各點的地址也就默認(rèn)地確定了。
二是模塊地址固定。模塊安裝好后,其地址依其所在機架及其上的位置,也默認(rèn)地確定了。點在模塊上的地址一般也是固定的。
三是模塊地址自行設(shè)定。模塊地址可用軟件或硬件設(shè)定,這已是發(fā)展趨勢。
再就是,AB新機型PLC的I/O編址更詳細(xì)些。要指明I/O模塊所在的網(wǎng)絡(luò)、機架槽號以及使用的數(shù)據(jù)類型和具體I/O點號。如Local:1:I.Data.0,是指I/O模塊所在網(wǎng)絡(luò)站點為當(dāng)?shù)兀↙ocal),所在機架槽位為1,類型為輸入(I)數(shù)據(jù)(Data),使用的位是它的0位。再如kk:6:O.Data.3,是指I/O模塊所在網(wǎng)絡(luò)站點為遠(yuǎn)程站點(命名為kk),所在機架的槽位為6,類型為輸出(O)數(shù)據(jù)(Data),使用的是它的3位。由于AB新型PLC的I/O模塊為智能型的,除了有普通的輸入(I)、輸出(O)、數(shù)據(jù)(Data)類型,還有C類型的、濾波(Filter Off On)及數(shù)據(jù)(Data)類型的故障(Fault)等。這些地址多用于對模塊的工作設(shè)定或監(jiān)視。只是必要時才用。具體類型與使用的模塊有關(guān)。而且,這些地址在模塊配置時(定義成該模塊類型數(shù)據(jù))可自動生成。
應(yīng)該強調(diào)的是,不同PLC的I/O編址多不完全一樣。為了準(zhǔn)確使用這些地址,最好要仔細(xì)閱讀有關(guān)說明書。
(2)模擬量I/O地址。除了開關(guān)量I/O模塊,還有模擬量I/O模塊。對歐姆龍公司的模塊式PLC,它的編號由其上的機號設(shè)定開關(guān)設(shè)定,與模塊安裝位置無關(guān)。要注意的是,所設(shè)的機號不能重復(fù)。機號設(shè)定后,將指定相應(yīng)的通道及數(shù)據(jù)存儲器(DM,內(nèi)部軟器件的一種,見后敘述)歸其使用。至于這些通道與數(shù)據(jù)存儲器的含義及使用,可參考有關(guān)說明書。而歐姆龍公司小型機的模擬量單元,是與開關(guān)量單元一樣,按安裝位置,統(tǒng)一編址,不作機號的設(shè)定。
三菱PLC模擬量輸入、輸出模塊也是獨立編址。用常數(shù)K指定模塊號及在模塊中的通道號。這里的通道是指哪一路的模擬量。
西門子公司S7-300 PLC模擬量模塊與開關(guān)量模塊都稱為信號模塊,無單元號。這兩種模塊都依其所在機架及槽位統(tǒng)一編址。只是模擬量加的前綴為IW(模入)或QW(模出),每一路要占一個字、兩個字節(jié)。
表1-5為西門子S7-300系列PLC,如配置四個機架時的編址情況。從表知,它是定機架、定槽位編址的。如有一個8路的模入模塊安裝在機架1、槽位6,其各路地址分別為IW416、IW418……直到IW430。如這個槽位安裝的是4路模出模塊,則其各路地址分別為QW416、QW418、QW420及QW422。如這個槽位安裝的是16點開關(guān)量輸入模塊,則其地址為IB40、IB41兩個字節(jié)。
和利時PLC模擬量I/O地址與開關(guān)量統(tǒng)一編址,與西門子類似。只是在I或Q之前也要加%符號。
AB新機型PLC的模擬量I/O編址也更詳細(xì)些。也要指明模塊所在的網(wǎng)絡(luò)、機架槽號以及使用的數(shù)據(jù)類型和具體通道(Ch)點號。如Local:3:I.Ch0Data,是指模塊所在網(wǎng)絡(luò)為當(dāng)?shù)兀↙ocal),所在機架槽位為3,類型為輸入(I)數(shù)據(jù)(Data),使用的通道是它的0通道。再如Local:4:O.Ch0Data,是指I/O模塊所在網(wǎng)絡(luò)為當(dāng)?shù)兀↙ocal),所在機架的槽位為4,類型為輸出(O)數(shù)據(jù)(Data),使用的通道(Ch)也是它的0通道。由于AB新型PLC的模擬量I/O模塊也是智能型的,除了有普通的輸入(I)、輸出(O)、數(shù)據(jù)(Data)類型,還有其他類型,即使數(shù)據(jù)(Data)類型,之下還有分支。這些地址多用于對模塊的工作設(shè)定或監(jiān)視。只是必要時才用。具體類型與使用的模塊有關(guān)。而且,這些地址在模塊配置后也會自動生成。
表1-5 S7-300機地址分配
應(yīng)該強調(diào)的是,不同PLC的模擬量I/O編址多不完全一樣。為了準(zhǔn)確使用這些地址,應(yīng)仔細(xì)閱讀有關(guān)說明書。
(3)其他地址。除了上述地址,還有用于通信等智能模塊的數(shù)據(jù)緩存區(qū)。這些多與網(wǎng)絡(luò)等模塊有關(guān)。OMRON用鏈接繼電器(LR)或可任意指定的一些數(shù)據(jù)存儲器(DM)。三菱稱用指定的內(nèi)部繼電器(M)、數(shù)據(jù)存儲器(D)、鏈接繼電器(B)及鏈接寄存器(W)。西門子用可按有關(guān)模塊的說明書使用。這些多與所用的模塊與網(wǎng)絡(luò)有關(guān)。
總之,I/O軟器件總是與PLC使用的各種模塊或插件相關(guān),它的CPU就是通過這些軟器件讀寫模塊,與這些模塊通信。
2.內(nèi)部軟器件
(1)內(nèi)部輔助繼電器。與繼電器電路中的中間繼電器一樣,運用得合理,可幫助實現(xiàn)輸入與輸出間復(fù)雜的變換,從而可使PLC更好地進(jìn)行各種控制。
內(nèi)部輔助繼電器的數(shù)量一般要比輸入、輸出繼電器多得多。除了用作中間繼電器,還用于數(shù)據(jù)處理。
歐姆龍PLC內(nèi)部輔助繼電器也分配有通道號。每個通道也是16個繼電器??梢酝ǖ溃ㄗ郑閱挝皇褂茫部梢岳^電器(位)為單位使用。
西門子公司、三菱公司PLC的內(nèi)部繼電器,就加有前綴“M”。前者是以字節(jié)、位編號,多位使用方法同輸入、輸出繼電器。后者與它的輸入、輸出點類似,也是按位編號,但按十進(jìn)制進(jìn)位。多位使用,也與其輸入、輸出繼電器相同。
和利時PLC內(nèi)部輔助繼電器,前綴為“%M”。也可按位、字節(jié)、字、雙字使用。
AB新型機就只有內(nèi)存區(qū),沒有這里這樣意義的內(nèi)部器件。
使用PLC時,對選用的PLC的內(nèi)部輔助繼電器的情況也要弄清楚,否則也無法設(shè)計程序。它的數(shù)量非常多,為編程提供了很大的方便。
內(nèi)部輔助繼電器有的可設(shè)定為掉電保持的,即PLC失電后,其內(nèi)容保持不變。只是歐姆龍專有此類內(nèi)部輔助繼電器,并特稱之為保持繼電器,并加前綴HR。
(2)定時器。它類似于繼電電路用的時間繼電器,用于延(定)時控制。它有線圈,有觸點(標(biāo)志位),還有寄存器(存放定時器現(xiàn)值、設(shè)定值)。定時的設(shè)定值可為常數(shù),也可為某個(字)地址,再用這個地址的內(nèi)容作為設(shè)定值。
對歐姆龍PLC,當(dāng)定時器的線圈OFF時,沒有輸出,其常開觸點為OFF,常閉觸點為ON,其寄存器的當(dāng)前值為設(shè)定值。當(dāng)定時器的線圈ON時,它的寄存器的當(dāng)前值從設(shè)定值開始,每經(jīng)歷一個單位設(shè)定時間減1。當(dāng)減到零時,即產(chǎn)生輸出,其常開觸點從OFF轉(zhuǎn)為ON,常閉觸點從ON轉(zhuǎn)為OFF。任何時候,一旦其線圈OFF,其輸出立即停止,其常開觸點從ON轉(zhuǎn)為OFF,常閉觸點從OFF轉(zhuǎn)為ON,寄存器的當(dāng)前值又變?yōu)樵O(shè)定值。
而對三菱、西門子PLC,情況有點不同。當(dāng)定時器的線圈OFF時,也沒有輸出,其常開觸點為OFF,常閉觸點為ON,但其寄存器的當(dāng)前值為0。當(dāng)定時器的線圈ON時,它的寄存器的當(dāng)前值從0開始,每經(jīng)歷一個單位設(shè)定時間加1。當(dāng)加到設(shè)定值時,即產(chǎn)生輸出,其常開觸點從OFF轉(zhuǎn)為ON,常閉觸點從ON轉(zhuǎn)為OFF。任何時候,一旦這線圈OFF,輸出立即停止,其常開觸點從ON轉(zhuǎn)為OFF,常閉觸點從OFF轉(zhuǎn)為ON,寄存器的當(dāng)前值又變?yōu)?。
歐姆龍PLC的設(shè)定值用BCD碼設(shè)定。設(shè)定范圍為0000~9999。新型機也可用十六進(jìn)制碼,設(shè)定范圍為0~65535。三菱、西門子均用十六進(jìn)制碼。
普通定時器單位設(shè)定時間值為0.1s,故其最大延時可達(dá)999.9s,或6553.5s。如高速定時,其單位設(shè)定值可能為0.01s、0.001s,故其最大的定時值為99.99s、9.999s,或655.35s、或65.535s。如處理成低速定時,其單位設(shè)定值可能為1s、min,故其最大的定時值為9999s、9999min,或65535s、65535min。
這個單位設(shè)定時間的不同處理,不同廠商有不同的辦法。
歐姆龍是用不同的定時指令處理。用TIM指令時,為100ms,而用TIMH指令時,為10ms,用TIMHH指令時,為1ms。
西門子則用不同的編號處理,有的編號的定時器單位設(shè)定時間小,而有的大。如S7-200型PLC,其單位時間設(shè)定值與定時器編號為
1ms T32,T96
10ms T33~T36,T97~T100
100ms T37~T63,T101~T255
三菱PLC也類似。如FX2N型PLC,其單位時間設(shè)定值與定時器編號為
1ms T246~T249
10ms T200~T245
100ms T0~T199
以上介紹的定時器是ON延時的。西門子PLC還可用不同指令,處理成其他工作方式,如ON即時,而OFF延時等。而如用歐姆龍、三菱PLC要作這樣處理,則只好通過程序,用輔助繼電器幫助解決。
應(yīng)該指出,PLC的定時器的定時控制都是通過程序?qū)崿F(xiàn)的。由于輸入響應(yīng)延時及掃描工作方式的影響,定時控制不是很準(zhǔn)確的,可能與設(shè)定值差一個掃描周期。掃描時間若大過單位設(shè)定值,只有若干個定時器(可中斷工作的)才能準(zhǔn)確工作。
PLC的定時器多為掉電不保持的,掉電后停止計時,其已計入的值不保留,復(fù)電時,再從頭計時。但有的也可掉電保持,即可累計計時。視不同的PLC、不同編號及不同的設(shè)定而定。
提示:定時器怎么用,與相應(yīng)的定時指令的使用有關(guān),這在介紹定時指令時,還要作進(jìn)一步說明。有的PLC不用定時器指令,而使用定時功能塊,則沒有或不用這個定時器。
(3)計數(shù)器。它類似于繼電電路用的計數(shù)器,用于記錄脈沖輸入信號的數(shù)量,即信號從OFF到ON的次數(shù)。它有線圈,有觸點(標(biāo)志位),還有寄存器(存放計數(shù)器現(xiàn)值)。有兩種計數(shù),一為單向計數(shù),另一為可逆(雙向)計數(shù)。
單向計數(shù):有增計數(shù)與減計數(shù)。歐姆龍PLC單向計數(shù)都是減計數(shù)。當(dāng)輸入脈沖輸入信號從OFF到ON變化一次,計一次數(shù)。計數(shù)器的寄存器減1。而開始時,計數(shù)器的寄存器為設(shè)定值,當(dāng)其值減到零時,則產(chǎn)生輸出。其常開觸點ON,常閉觸點OFF。
西門子PLC單向計數(shù)器有增的,也有減的。當(dāng)輸入脈沖輸入信號從OFF到ON變化一次,計一次數(shù),計數(shù)器的寄存器增1,或減1。對于增計數(shù),其開始時,計數(shù)器的寄存器的值為0,當(dāng)增大到等于或大于設(shè)定值時,則產(chǎn)生輸出(計數(shù)仍可進(jìn)行,直到最大值,65535)。其常開觸點ON,常閉觸點OFF。對于減計數(shù),開始時計數(shù)器的寄存器為設(shè)定值,當(dāng)其值減到0時,則產(chǎn)生輸出。其常開觸點ON,常閉觸點OFF。
三菱PLC單向計數(shù)則是增計數(shù)。當(dāng)輸入脈沖輸入信號從OFF到ON變化一次,計一次數(shù)。計數(shù)器的寄存器增1。而開始時,計數(shù)器的寄存器為0,當(dāng)其值增到設(shè)定值時,產(chǎn)生輸出。其常開觸點ON,常閉觸點OFF。并不再計數(shù)。
計數(shù)器一般都是掉電保持的。即使掉電,計數(shù)值不變。但在任何時候,送入復(fù)位信號(ON),計數(shù)器的寄存器都恢復(fù)成原始狀態(tài),并停止計數(shù),不再輸出。
除了單向計數(shù)器,還有雙向,即可逆計數(shù)器。歐姆龍、西門子用相應(yīng)指令實現(xiàn)單向或雙向計數(shù)功能。而三菱PLC則用編號指定。有的編號只能單向計數(shù),而有的編號可雙向計數(shù),并用特殊繼電器(見后說明)指定計數(shù)方向。同時雙向計數(shù)總是雙字長的(8位十六進(jìn)制數(shù))。
再就是,歐姆龍PLC的設(shè)定值、計數(shù)值用BCD碼設(shè)定。范圍為0000~9999。但它的新型機也可用十六進(jìn)制碼,設(shè)定為0~65535。三菱、西門子PLC均用十六進(jìn)制碼。
提示:計數(shù)器怎么用,與相應(yīng)的計數(shù)指令的使用有關(guān),這在介紹計數(shù)指令時,還要作進(jìn)一步說明。有的PLC不用計數(shù)指令,而使用計數(shù)功能塊,則沒有或不用這個計數(shù)器。
(4)數(shù)據(jù)存儲(寄存)器。PLC進(jìn)行控制以及計數(shù),總要作一些數(shù)據(jù)處理,用一些特殊單元時,如模擬量入、模擬量出單元,還要作一些數(shù)據(jù)計算。所以,各種PLC也都備有存儲大量數(shù)據(jù)的專門存儲單元。歐姆龍用的標(biāo)號為DM。三菱用的標(biāo)號為D、西門子的S7-200標(biāo)號為V。
歐姆龍、三菱PLC的存儲器一般按字計(編號)。隨著技術(shù)的發(fā)展,現(xiàn)在PLC的這個存儲器容量不斷增大??蛇_(dá)幾K、幾十K,以至于要用兆計。
數(shù)據(jù)存儲器中的位(bit)、數(shù)位(digit)、字節(jié)(Byte)、字(word)及雙字(D)間的關(guān)系處理,各PLC廠商是不大一樣的。
圖1-19a所示為歐姆龍及三菱PLC的位、數(shù)位、字節(jié)、字和雙字之間的關(guān)系。它的地址以字計。并多以字作為處理單位。沒有特定雙字概念,兩個相鄰的字可處理成雙字,這時,高位存于高地址,低位存于低地址,并以低位字的地址代表這雙字地址。
西門子PLC數(shù)據(jù)存儲器是按字節(jié)計(編號)。它講的數(shù)據(jù)存儲器多少K,都是以字節(jié)計。它可以字節(jié)為單位使用,如VB0、VB1。也還有字、雙字為單位使用,但編號仍以字節(jié)計。如用VW0,則含VB0及VB1;用VW2則含VB2及VB3等。如按雙字使用,則用VD0(含VW0、VW2)、VD4(含VW4及VW6)等。顯然,如用了VW0,再用VW1,則其中的VB1將重復(fù)。如不是特殊需要,應(yīng)避免出現(xiàn)此情況。
西門子的字、雙字的高地址、存低位,低地址、存高位。如VB100=11,VB101=22,VB102=33,V103=44,則VW100為1122,VW102為3344,而VD100為11223344。具體如圖1-19b所示。
圖1-19 字與雙字組成
西門子這種按字節(jié)編號,高、低位數(shù)據(jù)存儲與日本、美國的PLC不同,有其麻煩之處。但它可靈活進(jìn)行種種轉(zhuǎn)換處理,也有其好處。
提示:數(shù)據(jù)存儲器多用數(shù)據(jù)處理,故多不能對其中的位進(jìn)行邏輯操作。過去,只有西門子PLC可以這么做。如今,歐姆龍、三菱的新型機也可用相應(yīng)指令進(jìn)行操作了。
(5)特殊繼電器、特殊數(shù)據(jù)存儲器。它也是一種內(nèi)部輔助繼電器,只是各有其特殊用途。而且,各廠商PLC或同一廠商PLC不同機型,都不盡相同。大體上這些用途有PLC狀態(tài)輔助繼電器、時鐘用輔助繼電器、標(biāo)志用輔助繼電器等。很顯然,只有對其有相應(yīng)了解,才能編寫好相應(yīng)程序。表1-6列舉了部分PLC的部分特殊繼電器的編號及其功能。
表1-6 部分PLC的部分特殊繼電器的編號及功能
應(yīng)該講,這樣的特殊繼電器現(xiàn)在已越來越多了。以歐姆龍的小型機為例,其特殊繼電器就有12.5通道(字),200個繼電器。其編號從244開始,直到255的前半個通道。而CJ1機則多得多。故干脆不稱其為特殊繼電器,而稱用標(biāo)志(Condition Flag,CF)及輔助區(qū)(AR)。
西門子的S7-200機也有相應(yīng)的特殊繼電器。它的前綴為“SM”,稱為特殊存儲器位。三菱PLC的特殊繼電器也不少,如FX機從M8000~M8255都是特殊輔助繼電器。這些內(nèi)容實在太多,詳細(xì)情況請參看有關(guān)說明。
除了特殊繼電器,還有特殊數(shù)據(jù)存儲器,多用其作系統(tǒng)的種種設(shè)定。如歐姆龍小型機的DM6600~6614:用作起始處理設(shè)定;可把PLC設(shè)成起始為編程、運行或監(jiān)控模式及內(nèi)部繼電器上電時是清零。歐姆龍輔助繼電器(AR)大多數(shù)也與這個存儲器作用相同。
西門子PLC也有很多類似的特殊功能數(shù)據(jù)存儲器,用以實現(xiàn)各種特殊功能。如S7-200機,它的SM區(qū)有近200個字節(jié),除了特殊繼電器,還有更多的是用作特殊數(shù)據(jù)存儲器。用于通信、高速計數(shù)、定時中斷等設(shè)定。
三菱的FX機從D8000~D8225的數(shù)據(jù)寄存器,就是這類特殊的數(shù)據(jù)存儲器。
和利時PLC也有特殊地址,即%MB0~%MB99間的100個字節(jié)。被系統(tǒng)占用,主要用來反映CPU模塊及擴展模塊的一些狀態(tài)信息。其中%MB0~%MB9為CPU模塊的專用寄存器,%MB10~%MB19保留,從%MB20開始為模塊的診斷區(qū)。
對這些特殊繼電器及存儲器,最好備有相應(yīng)手冊,以便使用時查找。好在所有編程軟件都有這方面的幫助,編程時可隨時查用。所以,這里就不再詳細(xì)介紹了。
(6)標(biāo)識(P、I、N)。也稱指針,用以標(biāo)識在程序所標(biāo)示的指令的地址。這是三菱PLC用的內(nèi)部器件。在使用跳轉(zhuǎn)指令、調(diào)子程序(用P)或使用程序中斷(用I)時,要用到它。使用時,把它放在梯形圖左母線的外(左)邊。
西門子PLC的標(biāo)識用指令(LBL)指明相應(yīng)序號實現(xiàn)。僅用于程序跳轉(zhuǎn)。它的子程序調(diào)用子程序號。
歐姆龍PLC無這樣的內(nèi)部器件,也沒有標(biāo)示一說。它的跳轉(zhuǎn)及子程序調(diào)用均使用指令。
此外,三菱還有N,用以指定主控指令(見后)的編號。
(7)其他。以上介紹的內(nèi)部器件,當(dāng)然不是PLC內(nèi)部器件的全部。而且,各廠商、各型號PLC的內(nèi)部器件也不完全相同,有的還有別的什么名稱。如三菱PLC FX2系列還有狀態(tài)繼電器,編號為S000~S999共1000點,用于作步進(jìn)控制。西門子PLC也有狀態(tài)繼電器S,專用于作步進(jìn)指令的標(biāo)號。當(dāng)然,不被步進(jìn)指令使用時,也可用作內(nèi)部繼電器。
歐姆龍的CV機可用流程圖語言編程,所以,還有轉(zhuǎn)移區(qū)(Transition Area),TN0000~TN1023共1024個字,用做流程圖編程時轉(zhuǎn)移標(biāo)志;步進(jìn)區(qū)(Step Area),ST0000~ST1024,也是1024個字,用做流程圖編程的“步”標(biāo)志等。
三菱PLC Q系列等中、大型機還有其他一些內(nèi)部器件。如鎖存繼電器(L)、報警器(F)、邊沿繼電器(V)、特殊鏈接繼電器(SB)、鏈接繼電器(B)、鏈接寄存器(W)及鏈接特殊寄存器(SW)等。
再就是西門子PLC中、大型機以及新型的S7-1200小型機沒有上述意義上的數(shù)據(jù)存儲器(DM、D或V)。只有數(shù)據(jù)塊(DB)。數(shù)據(jù)塊功能很強,用起來也很方便。但必須先定義,然后才能使用。這樣處理方法與將要介紹的PLC變量本質(zhì)上是完全相同的。
了解了PLC的軟器件,即PLC的數(shù)據(jù)存儲區(qū),也就了解了PLC指令的操作數(shù)。至于這些操作數(shù)怎么被指令操作,將在介紹PLC的指令時,作具體介紹。
提示:由于篇幅限制,以上只是簡要地介紹本書涉及的PLC的一些軟器件。而全面、系統(tǒng)地弄清所使用的PLC的軟器件,對正確使用該PLC,編寫好高質(zhì)量的PLC程序,是至關(guān)重要的。因此,在PLC實際編程過程中,建議要多查閱有關(guān)PLC的編程手冊,切實把有關(guān)軟器件弄懂、弄清。
3.間接地址
這與計算機C語言的指針類似,用軟器件做指針,其內(nèi)容作為地址。即實際使用的數(shù)是用這個“指針”指向地址的內(nèi)容,而不是這個“指針”本身的值。具體使用有3個辦法:
(1)用數(shù)據(jù)存儲器作指針。歐姆龍PLC是用DM。在調(diào)用它的DM之前加“?”或“@”號,即說明為間接地址。前者地址以BCD碼計,后者以十六進(jìn)制計。如“?DM100”,而DM100的值為十進(jìn)制數(shù)100,則實際地址是DM0100,DM0100的值才是真正的操作數(shù)。再如“@DM100”,而DM100的值為十六進(jìn)制數(shù)100,則實際地址是DM0256,DM0256的值才是真正的操作數(shù)。
(2)用變址器(或索引寄存器)作指針。它也是軟器件,但專用作指針,以對PLC軟器件作間接訪問。如歐姆龍CJ1機共有16個索引寄存器,地址從IR00~I(xiàn)R15。所加的前綴為“IR”。
提示:索引寄存器為雙字長,存儲的地址為絕對地址(absolute memory addresses in I/Omemory)??纱孀郑╳ord)地址,也可存儲位(bit)地址。存位地址時,高7個數(shù)位(digit)存字(通道)地址,低數(shù)位存儲位地址。對其賦值,不能簡單地用MOV之類指令,要用相應(yīng)的地址賦值指令,即MOVB(560)指令。
在過去的歐姆龍PLC中、只有DM區(qū)可間接訪問,但有了這個索引寄存器后,這樣的間接訪問,就可擴大到整個I/O內(nèi)存區(qū)。
歐姆龍CJ1機還有16個數(shù)據(jù)寄存器,地址從DR00~DR15。所加的前綴為“DR”。它常與索引寄存器配合使用。
三菱稱之為變址寄存器V及Z,各為16位??蓡为毷褂茫ㄖ皇褂肰),也可合起來使用(V上位數(shù),Z下位數(shù),并以Z的地址代表其地址)。用雙字時,可訪問的數(shù)據(jù)區(qū)幾乎不受限制。
(3)用雙字做指針。西門子PLC就是這樣,用雙字先賦值軟器件的實際內(nèi)存地址(被賦值的地址前加“&”)。然后用這個雙字作地址指針,作間接地址。只是在指針前加“?”。其辦法與C語言用的辦法相同。只是它只能以字節(jié)為單位訪問。
4.符號地址(Symbol)
上述軟器件或間接地址的名稱主要是前綴字母與數(shù)字,看不出它的意義。用它作操作數(shù)編寫的程序,可讀性較差,不易理解。雖然可對其加注,但采用了有一定含義的符號與實際地址(軟器件)關(guān)聯(lián),并在程序中用這個符號地址代表實際地址,則更方便些。
同時,使用符號地址還便于程序更改,如地址變動,可以不改程序,只需重新編輯符號與地址的關(guān)聯(lián)就可以了。此外,使用符號地址還便于程序移植與重用,為用戶建立功能庫、功能塊庫或程序庫提供了可能。所以,目前PLC編程很少不用符號地址。
使用符號地址的另外還有如下重要好處:
(1)可分別定義符號的作用范圍,便于程序數(shù)據(jù)管理。
(2)設(shè)定數(shù)據(jù)類型,作高級設(shè)定時,還可設(shè)定數(shù)組,便于程序數(shù)據(jù)的正確使用。
符號地址是用編程軟件中符號編輯器編輯。不同廠商軟件有不同的編輯器。但都是用它添加符號名稱,確定數(shù)據(jù)類型,進(jìn)行地址關(guān)聯(lián)以及必要的加注。這里強調(diào)數(shù)據(jù)類型很重要,因為有了它便于發(fā)現(xiàn)地址關(guān)聯(lián)的錯誤。
歐姆龍編程軟件還可自動分配符號地址所使用(相關(guān)聯(lián))的實際地址。辦法是在“工程”窗口的PLC項處,點擊鼠標(biāo)右鍵。再在之后彈出的菜單上,點擊“內(nèi)存分配”項下的“自動分配”項。這時,將彈出“PLC自動內(nèi)存自動分配”窗口。在其上選擇“允許此PLC的自動分配”,并指定相應(yīng)可用于自動分配的內(nèi)存區(qū)。這樣,編輯符號地址時,系統(tǒng)將自動分配所使用的實際地址。
有的PLC還可用微軟的電子表格等工具軟件編輯,其所編輯數(shù)據(jù)可用導(dǎo)入、導(dǎo)出或復(fù)制、粘貼的方法與符號編輯器共享。
1.3.2 變量
變量(Variables),有的也稱標(biāo)簽(Tags)是用戶自行定義的PLC的內(nèi)存區(qū)。傳統(tǒng)PLC只有地址,沒有這個變量一說。新型和高檔PLC才有此程序數(shù)據(jù)。如和利時LEC G3機的內(nèi)存數(shù)據(jù)區(qū)中,有容量很大的全局區(qū)(G區(qū))及掉電保持區(qū)(R區(qū)),只能通過定義變量使用它。再如西門子的S7-300/400系列PLC及新型的S7-1200小型機的數(shù)據(jù)塊所用的區(qū)域,也是通過定義使用。還有AB新型PLC就沒有所謂的內(nèi)部軟器件,只有用戶定義的變量。如果所定義的變量要與I/O實際地址(I/O軟器件)關(guān)聯(lián)可使用別名(Alias),即用變量當(dāng)做硬件地址的別名。其他高檔PLC也多是此情況。而且,越是高檔或新型PLC,其內(nèi)部器件越少,但可定義的變量則非常之多。
變量與傳統(tǒng)PLC的符號地址不同是,它與實際地址(軟器件)可以關(guān)聯(lián),也可不關(guān)聯(lián)。而符號地址則必須與I/O或內(nèi)部器件關(guān)聯(lián)。
再就是,地址可以定義為變量名(與變量關(guān)聯(lián)),也可不定義為變量名(不與變量關(guān)聯(lián))。后者也可在程序中直接使用。
使用變量取代內(nèi)部器件地址的好處是比較靈活,可定義的數(shù)據(jù)類型多,而且PLC的資源還可得到充分利用。這也是當(dāng)今PLC技術(shù)發(fā)展一大趨勢。只是使用它編程,計算機技術(shù)的“味道”濃些,可能對習(xí)慣于電氣技術(shù)的PLC編程人員,初用時可能不大習(xí)慣。
1.變量類型
變量可定義的類型很多,而且隨著PLC功能的增強,其類型也越來越多。具體可根據(jù)不同特點分類。
(1)根據(jù)數(shù)據(jù)所占內(nèi)存大小劃分有:
1)位數(shù)據(jù)(bit)。僅占一個位的內(nèi)存區(qū)。
2)數(shù)位數(shù)據(jù)(digit)。占4個位的內(nèi)存區(qū)。
3)字節(jié)數(shù)據(jù)(Byte,B)。占8個位的內(nèi)存區(qū)。
4)字?jǐn)?shù)據(jù)(word,W)。占16個位的內(nèi)存區(qū)。
5)雙字?jǐn)?shù)據(jù)(Double word,DW)。占32個位的內(nèi)存區(qū)。
6)多字?jǐn)?shù)據(jù)。占更多字的內(nèi)存區(qū)。
(2)根據(jù)數(shù)據(jù)類型劃分有:
1)布爾型。標(biāo)識符為BOOL,在0(或FALSE)、1(或TRUE)之間選一。
2)整數(shù)型。有多種類型。它的類型名稱、類型標(biāo)識符、上下限及存儲空間見表1-7。
整數(shù)型常數(shù)可使用十進(jìn)制數(shù),也可用二或十六進(jìn)制數(shù)。用前者,直接寫數(shù)就可以了,如65535。用后者時,在數(shù)值前要加“2#”或“16#”,如16#ABCD。所使用的數(shù)也不能超過表1-7的數(shù)據(jù)上、下限。
3)實數(shù)型。也稱浮點型。用于表示有理數(shù)。其標(biāo)識符為REAL,占32位。實數(shù)型數(shù)據(jù)可正、可負(fù),最小數(shù)可以是·1.175495E-38,最大數(shù)可以是·3.402823E+38。
表1-7 PLC整數(shù)類型標(biāo)識符、上下限及存儲空間
4)字符串型。字符型數(shù)據(jù)(STRING),即字符串。其常量在兩個單引號間給出。如abcd
,這里的abcd就是字符串常量。字符串還可含轉(zhuǎn)義(特殊)字符。只是在之前應(yīng)加“$”符號。具體見表1-8。
表1-8 轉(zhuǎn)義字符
5)時鐘型(TIME)、日期型(DAY)、時間型(T IME_OF_DAY,TOD)、日期時間型(DATE and DATE_AND_TIME,DT)等。可用于存儲時鐘、日期、時間、日期時間值等數(shù)值。不同PLC此類型數(shù)據(jù)的表達(dá)可能不完全一樣。
6)其他型。如各種功能塊型的變量,可用做功能塊例程的命名。有的還可由用戶自行定義類型等。
(3)根據(jù)數(shù)據(jù)的作用范圍劃分有:
1)局部變量。其作用范圍僅限于所在程序。超出程序無效。
2)全局變量。其定作用范圍為PLC的所有程序。但是,如與所在程序局部變量重名,則所在程序的局部變量有效,而它無效。
3)網(wǎng)絡(luò)變量。如AB等PLC,有此變量。其作用范圍可覆蓋PLC網(wǎng)絡(luò)??梢杂靡訮LC間數(shù)據(jù)鏈接、實現(xiàn)通信。
4)共享變量。如西門子博途軟件建立的過程有此變量。其作用范圍可覆蓋整個工程??稍诠こ痰钠渌考?,如人機界面、計算機監(jiān)控系統(tǒng)等,實現(xiàn)數(shù)據(jù)共享。
(4)根據(jù)PLC停機后數(shù)據(jù)是否保持劃分有:
1)保持變量。PLC掉電后,其值保持。
2)非保持變量。PLC掉電后,其值不保持。
(5)根據(jù)變量的結(jié)構(gòu)劃分有:
1)簡單變量。所定義的變量只有一個,而且只有一個類型。常見的多是此類變量。
2)復(fù)合變量。所定義的變量有多個,而且可能有多個類型。如計算機常用數(shù)組、結(jié)構(gòu)等就是此類變量。
(6)根據(jù)變量的使用劃分有:
1)直接變量。直接使用它作變量。也是最常用的變量。
2)指針變量。也是間接變量,使用它的值作為地址,用此地址指向的變量作變量。
(7)根據(jù)變量的在POU中的使用劃分有:
1)輸入變量。用于程序數(shù)據(jù)輸入。
2)輸出變量。用于程序數(shù)據(jù)輸出。
3)輸入輸出變量。也即變量,既可輸入程序數(shù)據(jù),又可輸出程序數(shù)據(jù)。多數(shù)變量為此變量。
2.變量定義
變量在使用前要先定義。要用標(biāo)識符命名。根據(jù)編程標(biāo)準(zhǔn),標(biāo)識符只能由字母、數(shù)字和下畫線字符組成的一個串,并且它應(yīng)以字母或下畫線字符開頭。不能使用中文。用具體命名規(guī)則取決于具體的PLC。
變量定義時除了命名,還要指明它的類型。要上述分類指明它的歸屬。如果必要也可與I/O地址關(guān)聯(lián)。變量名稱一般要有意義,以便識別與使用。必要時還可加注解。
變量定義要使用編程軟件。一般軟件都有它的編輯器。有的還可用微軟公司的Excel編輯,然后導(dǎo)入。變量可以預(yù)先集中編輯,也可隨時使用隨時編輯。以和利時PLC的變量定義為例,其聲明格式為
<變量名>{AT<關(guān)聯(lián)地址>}:<變量類型>{:=<初始值>};
其中{}部分是可選的??芍x變量可以與實際地址無關(guān)。當(dāng)然,這不是變量不用地址,而是由系統(tǒng)去分配地址。它用的地址是它的PLC的G區(qū)及R區(qū)。后者數(shù)據(jù)保留(掉電后恢復(fù),原數(shù)據(jù)保留);前者不保留(掉電后恢復(fù),原數(shù)據(jù)丟失)。
在編程時,如使用未聲明的變量,系統(tǒng)將出現(xiàn)圖1-20所示的變量聲明窗口。
從圖1-20可知,可對變量類別(有VAR局部變量、VAR_GLOBAL全局變量等)、變量類型(有布爾型、整型等)、是否與實際地址關(guān)聯(lián)、注釋及初始值等做出選擇。如果做了該圖所示的選定,再單擊“確認(rèn)”,即完成了該變量的聲明。這時,在該程序的局部變量聲明中將加上此變量。即
圖1-20 變量聲明窗口
在圖1-20窗口中,“常量”選項的含義是,選定它,程序不能改變它?!氨A簟边x項的含義是,選定它,此變量就可掉電保持。
變量與實際地址關(guān)聯(lián),和利時稱之為變量AT聲明。但不是所有的變量都允許做這樣的聲明。聲明為BYTE、WORD、DWORD變量,既可按BYTE、WORD、DWORD使用,也可按位使用。這時,可在變量之后加小數(shù)點,然后再加位號。如AA為WORD類型變量,AA指的是字,而AA.14指的是AA字的14位。
以下為它定義的幾個變量:
這里,VAR到END_VAR、VAR_INPUT到END_INPUT以及VAR_OUTPUT到END_OUTPUT之間就是POU所定義的變量、輸入變量及輸出變量。
3.指針變量
指針是指向變量地址的變量。指針聲明的格式為
<指針名>:POINTER TO<數(shù)據(jù)類型或功能塊>;
指針?biāo)赶蜃兞康臄?shù)據(jù)類型,可以是系統(tǒng)定義的類型,也可是用戶自定義類型,還可以是功能塊。
要讀取變量的地址,有讀取變量地址指令,如和利時PLC用ADR指令,它用于把變量或者功能塊的地址賦給指針,例如:
指針是計算機C語言常用的工具。使用得好,可提高程序效率。指針還可用于對將要介紹的數(shù)組各成員的訪問。這時,要先把數(shù)組下標(biāo)下限成員的地址賦值給數(shù)組處理指針。然后相應(yīng)改變這個指針值,即可訪問數(shù)組的不同成員。
和利時LEC G3機內(nèi)存地址以字節(jié)來計算。如果指針指向字節(jié),指針加、減1,即可訪問不同的字節(jié)。如果指針指向字,則加、減2,才可訪問不同的字。如果指針指向雙字,則加、減4,才可訪問不同的雙字。其余類推。
4.復(fù)合變量
除了簡單變量,有的PLC還可數(shù)組、結(jié)構(gòu)、枚舉等類似計算機C語言那樣的復(fù)合變量。
(1)數(shù)組。數(shù)組是相同類型數(shù)據(jù)的集合。有一維、二維和三維數(shù)組(不同PLC規(guī)則不完全相同)。如和利時PLC其聲明格式為
<數(shù)組名>:ARRAY[<ll1>..<ul1>,<ll2>..<ul2>]OF<變量類型>.
Ll1、ll2、ll3標(biāo)識字段范圍的最小值;ul1、ul2和ul3標(biāo)識最大值。范圍必須是整型的。
如聲明以下數(shù)組:
則它的名為“Card_game”,是二維數(shù)組,下限都是1,上限分別是13、4。數(shù)組中的元素(成員)可用數(shù)組名加下標(biāo)訪問。如用矩陣與數(shù)組對應(yīng),那么一維數(shù)組,就相當(dāng)于一維矩陣;二維數(shù)組,就相當(dāng)于二維矩陣;三維數(shù)組,就相當(dāng)于三維矩陣。
如上述數(shù)組Card_game,為二維數(shù)組。用如下的矩陣A對應(yīng):
即A的每個元素都有兩個下標(biāo)。如A13,第1個下標(biāo)為1,代表處于第1行;第2個下標(biāo)為3,代表處于第3列。有了這個對應(yīng),就很好理解Card_game[2,4]的含義。它就是指其中下標(biāo)1為2、下標(biāo)2為6的元素。
在聲明數(shù)組的同時,可進(jìn)行初始化。如下示的就是已初始化的數(shù)組:
arr1:ARRAY[1..5]OF INT:=1,2,3,4,5;
說明:初始化后的arr1[1]=1、arr1[2]=2、arr1[3]=3、arr1[4]=4、arr1[5]=5。
arr2:ARRAY[1..2,3..4]OF INT:=1,3(7);(?1,7,7,7的簡寫?)
說明:兩維數(shù)組初始化賦值的順序總是,第1下標(biāo)先取下限,第2個從下限依次加1,直到上限。這時,第1下標(biāo)加1,第2下標(biāo)又從下限開始,依次加1,其余類推,直到都到兩個下標(biāo)的上限。所以,按上述約定,arr2數(shù)組初始化后的各元素的值為arr2[1,3]=1、arr2[1,4]=7、arr2[3]=7、arr2[2,4]=7。
arr3:ARRAY[1..2,2..3,3..4]OF INT:=2(0),4(4),2,3;
(?0,0,4,4,4,4,2,3的簡寫?)
說明:三維數(shù)組初始化賦值的順序總是,第1下標(biāo)先取下限,第2下標(biāo)也先取下限,第3個從下限依次加1,直到上限。這時,第2下標(biāo)加1,第3下標(biāo)又從下限開始,依次加1,其余類推,直到2、3兩個下標(biāo)都到下標(biāo)的上限。這時,第1下標(biāo)加1,第2、3下標(biāo)又重復(fù)上述過程,直到都達(dá)到三個下標(biāo)的上限。所以,按上述約定,初始化后的arr3[1,2,3]=0、arr3[1,2,4]=0、arr3[1,3,3]=4、arr3[1,3,4]=4、arr3[2,2,3]=4、arr3[2,2,4]=4、arr3[2,3,3]=2、arr3[2,2,4]=3。
數(shù)組也可部分初始化,如
arr1:ARRAY[1..10]OF INT:=1,2;
沒有初始化的數(shù)組元素的值,為數(shù)組元素類型的默認(rèn)值。在上面例子中,arr1[1]為1、arr1[2]為2,其他數(shù)組元素初始值為0。
數(shù)組的下標(biāo)也可以是變量。這樣,改變變量的值,就可訪問數(shù)組不同的成員。但數(shù)組不能動態(tài)聲明。即定義它的上、下標(biāo)只能是數(shù)字。
數(shù)組可與實際地址關(guān)聯(lián),如
mmW AT%MW100:ARRAY[100..4145]OF WORD;
還可聲明如下數(shù)組:
mmB AT%MW100:ARRAY[100..4145]OF BYTE;
這里,同一地址與不同的數(shù)組關(guān)聯(lián)是允許的。
提示:數(shù)組的單元總數(shù)是有限制的。如LM3109機為4046。再多編譯通不過。
提示:不同品牌PLC數(shù)組定義的格式也不完全一樣。具體可在編程參閱有關(guān)軟件幫助。
提示:有的PLC訪問數(shù)組成員時,其下標(biāo)只能是常量,有的可以是變量。
(2)結(jié)構(gòu)(Structure)。結(jié)構(gòu)是用戶自定義數(shù)據(jù)類型。以和利時PLC為例,其定義格式為
圖1-21所示為和利時PLC編程軟件PowerPro對象管理器的“數(shù)據(jù)類型”窗口。點擊鼠標(biāo)右鍵,將彈出菜單。再在“彈出菜單上”,點擊“添加”,將出現(xiàn)如圖1-21所示的“New data type”窗口。在“新建數(shù)據(jù)類型名”空白處右方,填入結(jié)構(gòu)名(該圖填的為“struct2”)。再點擊“確認(rèn)”,即可彈出結(jié)構(gòu)名為struct2編輯窗口。在其上即可進(jìn)行結(jié)構(gòu)編輯。
圖1-21 數(shù)據(jù)類型定義窗口
如圖所示,該結(jié)構(gòu)名為struct2。內(nèi)含有起點、點1到4及終點6個數(shù)組。注意,這里定義的結(jié)構(gòu),還不是用戶可使用的變量。只是創(chuàng)建一個struct2結(jié)構(gòu)的數(shù)據(jù)類型。但有了它才可進(jìn)行struct2這個結(jié)構(gòu)類型的變量聲明。如
這里,聲明了2個struct2結(jié)構(gòu)類型的變量。變量名為Sss1與Sss2。其中變量Sss1已初始化。而Sss2未初始化,其成員按默認(rèn)值賦值,均為0。對它的成員訪問的格式是
如上述例子,Sss1.Start、Sss2.Start.分別是Sss1結(jié)構(gòu)類型變量的Start成員及Sss2結(jié)構(gòu)類型變量的Start成員。
(3)枚舉(Enumeration)。枚舉也是用戶自定義數(shù)據(jù)類型,由許多字符常量組成,并把這些常量稱作枚舉值。枚舉以關(guān)鍵字TYPE開始END_TYPE結(jié)束。其定義格式為
這里,枚舉類型名與變量命名規(guī)則相同。<Enum_0>、<Enum_1>、…<Enum_n>等為待枚舉字符常量。
枚舉類型變量的值是數(shù)字,稱枚舉值。如同INT類型一樣使用。如不作初始化,枚舉值0,指向第1項,即這里的<Enum_0>。枚舉值1,指向第1項。即這里的<Enum_1>。其余類推。
枚舉類型定義方法與結(jié)構(gòu)定義的方法相同。如和利時PLC也是在PowerPro對象管理器的“數(shù)據(jù)類型”窗口上,點擊鼠標(biāo)右鍵,彈出菜單。再在“彈出菜單”上,點擊“添加”,出現(xiàn)如圖1-21所示的“New data type”窗口。在“新建數(shù)據(jù)類型名”右方,填入枚舉類型名。再點擊“確認(rèn)”,即可彈出與填入枚舉類型名編輯窗口。在其上即可進(jìn)行枚舉類型編輯。
如做如下“TRAFFIC_SIGNAL”(交通信號)的枚舉定義:
只是這里定義的枚舉,還不是用戶可使用的變量。只是創(chuàng)建一個TRAFFIC_SIGNAL枚舉的數(shù)據(jù)類型。但有了它才可進(jìn)行TRAFFIC_SIGNAL這個枚舉類型的變量聲明。如
TRAFFIC_SIGNAL1:TRAFFIC_SIGNAL;
這里的TRAFFIC_SIGNAL1為TRAFFIC_SIGNAL類型變量。如TRAFFIC_SIGNAL1值為0,因為“Red”沒有初始化,又是第一項,則指的是“Red”。如值為1,則指的是第二項,“Yellow”。因為“Green”在定義時初始化為10,如果值為10,則指的是“Green”。如“Green”后還有項目,將從11起增加。
枚舉不能多次使用相同的枚舉項。如
這兩個枚舉都有“Red”,是不允許的。
1.3.3 常量
也稱常數(shù)、即時數(shù)或立即數(shù)。就是實際輸入到程序指令中的具體數(shù)值。而且這些數(shù)值在程序執(zhí)行中一直保持不變。是PLC指令常見的操作數(shù)之一。如TRUE、FALSE就是一個布爾常量。常量與數(shù)據(jù)類型有關(guān)。類型不同,常量的值也不同。具體應(yīng)在它的該類型數(shù)據(jù)上限與下限(含上下限)之間選定。
PLC常要使用常數(shù)。常數(shù)有:16位、32位。輸入常數(shù)輸入時一般要加上相應(yīng)的前綴。
對歐姆龍:加“#”表示BCD碼或十六進(jìn)制數(shù),如加“&”表示十進(jìn)制數(shù)。
對三菱加“H”表示BCD碼或十六進(jìn)制數(shù),加“K”表示十進(jìn)制數(shù),加“E”表示實數(shù)。
對西門子加“16#”表示十六進(jìn)制數(shù),不加表示十進(jìn)制數(shù),數(shù)字中帶有小數(shù)點表示實數(shù)。
此外,有的PLC還可輸入與處理字符或字符串,如‘a(chǎn)’、‘a(chǎn)bc’。也可在字符前加$,則輸入的為轉(zhuǎn)義字符,如‘$$50’,實際的值為‘$50’,這里第1個$為轉(zhuǎn)義符號。
提示:不同的PLC可使用的常數(shù)及常數(shù)表示的格式也不完全相同。如歐姆龍十進(jìn)制數(shù)不能輸入,前綴“#”號就是十六進(jìn)制數(shù)。所以,使用時要注意之間的區(qū)別。
為了程序便于修改與重用,應(yīng)盡量少用常量。辦法是在程序先使用變量,但在程序初始化時設(shè)法把常量賦值給這些常量。這樣,程序修改,只需修改初始化部分,而主體可以不動。有的PLC還可用加載數(shù)據(jù)塊的方法實現(xiàn)初始化,那樣,則只要修改數(shù)據(jù)塊,即可更改常量,更加方便。
1.3.4 其他操作數(shù)
PLC程序的其他操作數(shù)還有標(biāo)號、功能塊名及函數(shù)名。
標(biāo)號
標(biāo)號是跳轉(zhuǎn)指令的操作數(shù)。指出下一個要執(zhí)行的指令(或梯形圖的節(jié))標(biāo)號。標(biāo)號與變量命名一樣,也是要用一些英文字母、數(shù)字或其他合法字符的組合。但不是所有的指令(或梯形圖的節(jié))都要有標(biāo)號,只是有跳轉(zhuǎn)關(guān)系時,需要此標(biāo)號。
函數(shù)名
在ST語言中,調(diào)用函數(shù)的也可直接作為操作數(shù)使用。如
Result:=Fct(7)+3;
這里,F(xiàn)ct是函數(shù)名,卻作為賦值語句的操作數(shù)。
要指出的是,以上介紹的變量定義、指針變量、復(fù)合變量、常量及其他操作數(shù)都是以和利時PLC為例。至于其他PLC對這些問題的處理只是大體與這里介紹的相同。更詳細(xì)的可參閱有關(guān)編程軟件的幫助或相應(yīng)的PLC使用說明書。