葛東霞
(濟(jì)南工程職業(yè)技術(shù)學(xué)院,山東濟(jì)南250014)
西門子博圖的PLC編程軟件中,帶有背景數(shù)據(jù)塊的基本指令主要是定時(shí)器和計(jì)數(shù)器指令。這兩個(gè)指令在編程時(shí)使用率是極高的,這兩個(gè)指令的背景數(shù)據(jù)塊在主程序OB、功能塊FC和FB塊中有單個(gè)實(shí)例、多重實(shí)例、參數(shù)實(shí)例三種不同的應(yīng)用形式[1]。本文將詳細(xì)介紹這兩個(gè)指令三種背景數(shù)據(jù)塊形式的區(qū)別和應(yīng)用。
西門子博圖的PLC編程軟件中,有些指令是不帶背景數(shù)據(jù)塊的,比如位邏輯運(yùn)算指令、比較指令、數(shù)學(xué)運(yùn)算指令、移位循環(huán)指令等。即使個(gè)別指令需要數(shù)據(jù)存儲(chǔ)通常也是1個(gè)存儲(chǔ)位就可以解決,不再單獨(dú)設(shè)立背景數(shù)據(jù)塊,比如邊沿指令會(huì)把上一個(gè)掃描周期的數(shù)據(jù)存儲(chǔ)在中間寄存器區(qū)M的1個(gè)位中以便進(jìn)行比較,這個(gè)位在添加指令時(shí)直接設(shè)置即可。
基本指令中的定時(shí)器、計(jì)數(shù)器指令除了有輸入、輸出信號(hào),還有其他的設(shè)置信號(hào)和過程數(shù)據(jù),比如定時(shí)器指令會(huì)設(shè)置定時(shí)時(shí)間、復(fù)位信號(hào)等,過程數(shù)據(jù)會(huì)有當(dāng)前時(shí)間;計(jì)數(shù)器會(huì)設(shè)置計(jì)數(shù)個(gè)數(shù)、復(fù)位信號(hào)或加載信號(hào),過程數(shù)據(jù)會(huì)有當(dāng)前個(gè)數(shù)等。為了提升指令使用的便利性,博圖專門為這樣的指令設(shè)計(jì)了對(duì)應(yīng)的數(shù)據(jù)塊用于存儲(chǔ)數(shù)據(jù)。在添加指令時(shí),博圖會(huì)自動(dòng)加載對(duì)應(yīng)的數(shù)據(jù)塊支持指令的運(yùn)行,這個(gè)數(shù)據(jù)塊稱作指令帶有的背景數(shù)據(jù)塊。當(dāng)然,工藝指令比如PID指令、運(yùn)動(dòng)控制等指令也是帶有背景數(shù)據(jù)塊的,但是這些指令不屬于本文提到的基本指令類型,其應(yīng)用也是不同的,請(qǐng)讀者注意區(qū)分。
基本指令背景數(shù)據(jù)塊單個(gè)實(shí)例、多重實(shí)例、參數(shù)實(shí)例這三種應(yīng)用形式主要是根據(jù)指令的背景數(shù)據(jù)塊的來源及使用特點(diǎn)進(jìn)行區(qū)分的。下面介紹三種應(yīng)用形式在主程序OB塊和功能塊FC、FB塊中的特點(diǎn)和應(yīng)用。
以定時(shí)器為例,在主程序OB塊中添加定時(shí)器指令時(shí),博圖彈出的調(diào)用選項(xiàng)對(duì)話框中只有單個(gè)實(shí)例的背景數(shù)據(jù)塊可以選擇。指令添加后,該數(shù)據(jù)塊可以在“項(xiàng)目樹”中通過“程序塊—系統(tǒng)塊—程序資源”路徑進(jìn)行查看,并且數(shù)據(jù)塊會(huì)顯示在指令上方。而且,每使用一個(gè)定時(shí)器就會(huì)在程序資源處生成一個(gè)對(duì)應(yīng)的背景數(shù)據(jù)塊,當(dāng)使用較多的定時(shí)器或者計(jì)數(shù)器指令時(shí)會(huì)占用較多的數(shù)據(jù)塊資源,同時(shí)也不方便管理。這里需要注意的是,在使用定時(shí)器時(shí),不同的定時(shí)器嚴(yán)禁共用背景數(shù)據(jù)塊,否則會(huì)導(dǎo)致定時(shí)錯(cuò)誤。
功能塊FC塊是沒有專用存儲(chǔ)區(qū)的函數(shù)塊[2-3],在FC塊中使用定時(shí)器、計(jì)數(shù)器指令時(shí),它們的背景數(shù)據(jù)塊如何存儲(chǔ)就成為一個(gè)問題。以定時(shí)器為例,在功能塊FC塊中添加定時(shí)器指令時(shí),博圖彈出的調(diào)用選項(xiàng)對(duì)話框中有單個(gè)實(shí)例和參數(shù)實(shí)例兩種背景數(shù)據(jù)塊形式可以選擇,下面分別進(jìn)行介紹。
FC塊中添加定時(shí)器使用單個(gè)實(shí)例的背景數(shù)據(jù)塊與在OB塊中的單個(gè)實(shí)例形式是相同的,數(shù)據(jù)塊仍是在程序資源中可以查看,同樣存在占用數(shù)據(jù)塊資源、不方便管理的問題。
FC塊中添加定時(shí)器使用參數(shù)實(shí)例是指函數(shù)塊將指令的背景數(shù)據(jù)塊保存在指定塊參數(shù)的實(shí)例中,這里提到的指定塊是指用戶為存儲(chǔ)數(shù)據(jù)單獨(dú)設(shè)置的數(shù)據(jù)塊,具體操作如下:
在程序塊中添加一個(gè)名為“數(shù)據(jù)塊_1”的全局類型的數(shù)據(jù)塊,在“數(shù)據(jù)塊_1”中添加名為“定時(shí)器”、數(shù)據(jù)類型為“IEC_TIMER”的數(shù)據(jù),這就為FC塊中的定時(shí)器準(zhǔn)備好了數(shù)據(jù)存儲(chǔ)空間,如圖1所示。
圖1 添加指定數(shù)據(jù)塊
在FC功能塊中添加定時(shí)器指令,選擇參數(shù)實(shí)例,此時(shí)指令的背景數(shù)據(jù)塊將作為輸入/輸出(InOut)類型參數(shù)[1],出現(xiàn)在功能塊接口參數(shù)的輸入/輸出類型參數(shù)中,如圖2所示。
圖2 接口參數(shù)中的參數(shù)實(shí)例
由于是輸入/輸出類型參數(shù),當(dāng)在OB1中調(diào)用FC塊時(shí)需要對(duì)其賦值,這時(shí)則需要將提前建好的指定數(shù)據(jù)塊“數(shù)據(jù)塊_1”中的“定時(shí)器”數(shù)據(jù)賦值給定時(shí)器的背景數(shù)據(jù)塊。此時(shí),定時(shí)器的具體定時(shí)時(shí)間仍是未知的,可以在程序中使用MOVE指令將具體定時(shí)時(shí)間傳送到“數(shù)據(jù)塊_1”.定時(shí)器.PT中,這樣在FC功能塊中為添加的定時(shí)器選擇參數(shù)實(shí)例背景數(shù)據(jù)塊的操作步驟就結(jié)束了。
建立專有數(shù)據(jù)塊使用參數(shù)實(shí)例,將指令的背景數(shù)據(jù)塊整合在指定數(shù)據(jù)塊中,可以解決占用很多數(shù)據(jù)塊資源和背景數(shù)據(jù)塊不方便管理的問題。在建立數(shù)據(jù)塊時(shí),如果同種類型的背景數(shù)據(jù)塊較多,可以通過在指定數(shù)據(jù)塊中設(shè)置該類型的數(shù)組來實(shí)現(xiàn)并提高效率。另外,建立用戶數(shù)據(jù)類型(UDT)也是提高工作效率的好方法,本文最后會(huì)進(jìn)行介紹。
FB塊是帶有自身存儲(chǔ)區(qū)的函數(shù)塊[2-3]。主程序OB每一次調(diào)用FB塊,博圖軟件都會(huì)自動(dòng)給FB塊分配對(duì)應(yīng)的背景數(shù)據(jù)塊用于存儲(chǔ)數(shù)據(jù)。函數(shù)塊的所有數(shù)據(jù)都可以永久存儲(chǔ)在自身的背景數(shù)據(jù)塊中,塊執(zhí)行結(jié)束后這些數(shù)據(jù)也不會(huì)丟失,這樣對(duì)于需要存儲(chǔ)數(shù)據(jù)的指令來說就會(huì)方便許多。
仍然以定時(shí)器為例,在功能塊FB塊中添加定時(shí)器指令時(shí),博圖軟件彈出的調(diào)用選項(xiàng)對(duì)話框中有單個(gè)實(shí)例、多重實(shí)例和參數(shù)實(shí)例三種背景數(shù)據(jù)塊形式可以選擇,下面分別進(jìn)行介紹。
FB塊中添加定時(shí)器使用單個(gè)實(shí)例的背景數(shù)據(jù)塊與在OB塊、FC塊中的單個(gè)實(shí)例形式相同。
FB塊中添加定時(shí)器使用多重實(shí)例的背景數(shù)據(jù)塊是指將指令本身的數(shù)據(jù)保存在調(diào)用函數(shù)塊的背景數(shù)據(jù)塊中。因?yàn)橹挥蠪B功能塊在調(diào)用時(shí)博圖會(huì)分配背景數(shù)據(jù)塊,所以多重實(shí)例形式只有FB塊可以使用,F(xiàn)C塊由于沒有存儲(chǔ)區(qū)是不能使用的。在FB功能塊中添加定時(shí)器指令,選擇多重實(shí)例,指令的背景數(shù)據(jù)塊作為靜態(tài)(Static)類型參數(shù),將出現(xiàn)在功能塊接口參數(shù)的靜態(tài)類型參數(shù)中,如圖3所示。當(dāng)在主程序OB塊中調(diào)用FB塊時(shí),可以在博圖分配的函數(shù)塊背景數(shù)據(jù)塊中看到定時(shí)器的數(shù)據(jù)塊,如圖4所示。由于靜態(tài)類型參數(shù)不同于輸入/輸出類型參數(shù),在功能塊調(diào)用時(shí)是不產(chǎn)生賦值端口的,定時(shí)器的具體定時(shí)時(shí)間仍然可以在程序中使用MOVE指令賦值到FB塊背景數(shù)據(jù)塊對(duì)應(yīng)的定時(shí)器中(本例位置“塊_2_DB”.IEC_Timer_0_Instance.PT),如圖5所示,注意這里賦值的目的地與FC塊參數(shù)實(shí)例的賦值到指定數(shù)據(jù)塊不同。
圖3 接口參數(shù)中的多重實(shí)例圖
圖4 函數(shù)塊背景數(shù)據(jù)塊
圖5 使用函數(shù)塊背景數(shù)據(jù)塊為定時(shí)器賦值
多重實(shí)例實(shí)現(xiàn)了數(shù)據(jù)的集中,又不像FC塊那樣需要單獨(dú)建立數(shù)據(jù)塊,是很多編程人員的首選。
FB塊中添加定時(shí)器使用參數(shù)實(shí)例的背景數(shù)據(jù)塊與在FC功能塊中的參數(shù)實(shí)例形式相同,指令的背景數(shù)據(jù)塊出現(xiàn)在功能塊接口參數(shù)的輸入/輸出(InOut)類型參數(shù)中。用戶需要建立指定數(shù)據(jù)塊以支持指令數(shù)據(jù)的存儲(chǔ),此時(shí)在FB塊本身的背景數(shù)據(jù)塊中出現(xiàn)的指令數(shù)據(jù)塊是不可用的。
對(duì)于一組多類型變量需要多次重復(fù)設(shè)置并使用時(shí),為提高工作效率,會(huì)使用到用戶數(shù)據(jù)類型。由于本文討論的是帶有背景數(shù)據(jù)塊的基本指令,所以假設(shè)用戶數(shù)據(jù)類型僅為使用定時(shí)器而設(shè)立。在“項(xiàng)目樹”PLC數(shù)據(jù)類型中添加名為“定時(shí)器組”的新數(shù)據(jù)類型,并在該類型中建立多個(gè)定時(shí)器需要的“IEC_TIMER”類型的數(shù)據(jù),如圖6所示。在功能塊FC、FB中可以選擇“定時(shí)器組”數(shù)據(jù)類型快速完成參數(shù)的建立。
圖6 在UDT中建立“定時(shí)器組”
如果在添加定時(shí)器指令時(shí)選用多重實(shí)例形式,則需要將“定時(shí)器組”用戶數(shù)據(jù)類型添加在功能塊接口參數(shù)的靜態(tài)(Static)類型參數(shù)中。其他操作與前面講到的多重實(shí)例應(yīng)用相同,與此對(duì)應(yīng),所有指令數(shù)據(jù)將歸到FB塊的背景數(shù)據(jù)塊中,如圖7所示。當(dāng)然,此種用途只有FB功能塊可以支持。
如果在添加定時(shí)器指令時(shí)選用參數(shù)實(shí)例形式,則需要將“定時(shí)器組”用戶數(shù)據(jù)類型添加在功能塊接口參數(shù)的輸入/輸出(InOut)類型參數(shù)中。其他操作與前面講到的參數(shù)實(shí)例應(yīng)用相同,與此對(duì)應(yīng),用戶需要建立指定數(shù)據(jù)塊以支持指令數(shù)據(jù)存儲(chǔ),如圖7所示。功能塊FC、FB塊均可以使用。
圖7 多重實(shí)例形式和參數(shù)實(shí)例形式
帶有背景數(shù)據(jù)塊的基本指令的單個(gè)實(shí)例、多重實(shí)例、參數(shù)實(shí)例三種背景數(shù)據(jù)塊應(yīng)用形式中,單個(gè)實(shí)例有占用數(shù)據(jù)塊資源、不方便管理的特點(diǎn)。多重實(shí)例可以將指令本身的數(shù)據(jù)保存在調(diào)用函數(shù)塊的背景數(shù)據(jù)塊中,只有FB塊可以使用。參數(shù)實(shí)例將指令本身的數(shù)據(jù)保存在用戶建立的指定塊參數(shù)的實(shí)例中,F(xiàn)C塊、FB塊都可以使用。